]> Pileus Git - ~andy/gtk/blobdiff - gtk/gtkbubblewindow.c
filechooserbutton: Test that the expected filename is shown
[~andy/gtk] / gtk / gtkbubblewindow.c
index 2200d8f9c6e255e01eec87dc21c170624eddea66..f46887808070ae1020803bc10841c015c2921a8c 100644 (file)
  * License along with this library. If not, see <http://www.gnu.org/licenses/>.
  */
 
-/**
- * SECTION:gtkbubblewindow
- * @Short_description: Bubble-like context window
- * @Title: GtkBubbleWindow
- *
+/*
  * GtkBubbleWindow is a bubble-like context window, primarily mean for
  * context-dependent helpers on touch interfaces.
  *
@@ -39,7 +35,7 @@
 #include "config.h"
 #include <gdk/gdk.h>
 #include <cairo-gobject.h>
-#include "gtkbubblewindow.h"
+#include "gtkbubblewindowprivate.h"
 #include "gtktypebuiltins.h"
 #include "gtkmain.h"
 #include "gtkprivate.h"
@@ -76,17 +72,17 @@ struct _GtkBubbleWindowPrivate
   guint final_position     : 2;
 };
 
-G_DEFINE_TYPE (GtkBubbleWindow, gtk_bubble_window, GTK_TYPE_WINDOW)
+G_DEFINE_TYPE (GtkBubbleWindow, _gtk_bubble_window, GTK_TYPE_WINDOW)
 
 static void
-gtk_bubble_window_init (GtkBubbleWindow *window)
+_gtk_bubble_window_init (GtkBubbleWindow *window)
 {
   GtkWidget *widget;
   GdkScreen *screen;
   GdkVisual *visual;
 
   widget = GTK_WIDGET (window);
-  window->_priv = G_TYPE_INSTANCE_GET_PRIVATE (window,
+  window->priv = G_TYPE_INSTANCE_GET_PRIVATE (window,
                                                GTK_TYPE_BUBBLE_WINDOW,
                                                GtkBubbleWindowPrivate);
   gtk_window_set_default_size (GTK_WINDOW (window),
@@ -98,6 +94,9 @@ gtk_bubble_window_init (GtkBubbleWindow *window)
 
   if (visual)
     gtk_widget_set_visual (widget, visual);
+
+  gtk_style_context_add_class (gtk_widget_get_style_context (widget),
+                               GTK_STYLE_CLASS_OSD);
 }
 
 static GObject *
@@ -108,7 +107,7 @@ gtk_bubble_window_constructor (GType                  type,
   GObject *object;
 
   object =
-    G_OBJECT_CLASS (gtk_bubble_window_parent_class)->constructor (type,
+    G_OBJECT_CLASS (_gtk_bubble_window_parent_class)->constructor (type,
                                                                   n_construct_properties,
                                                                   construct_properties);
   g_object_set (object, "type", GTK_WINDOW_POPUP, NULL);
@@ -125,16 +124,16 @@ gtk_bubble_window_set_property (GObject      *object,
   switch (prop_id)
     {
     case PROP_RELATIVE_TO:
-      gtk_bubble_window_set_relative_to (GTK_BUBBLE_WINDOW (object),
-                                         g_value_get_object (value));
+      _gtk_bubble_window_set_relative_to (GTK_BUBBLE_WINDOW (object),
+                                          g_value_get_object (value));
       break;
     case PROP_POINTING_TO:
-      gtk_bubble_window_set_pointing_to (GTK_BUBBLE_WINDOW (object),
-                                         g_value_get_boxed (value));
+      _gtk_bubble_window_set_pointing_to (GTK_BUBBLE_WINDOW (object),
+                                          g_value_get_boxed (value));
       break;
     case PROP_POSITION:
-      gtk_bubble_window_set_position (GTK_BUBBLE_WINDOW (object),
-                                      g_value_get_enum (value));
+      _gtk_bubble_window_set_position (GTK_BUBBLE_WINDOW (object),
+                                       g_value_get_enum (value));
       break;
     default:
       G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
@@ -147,7 +146,7 @@ gtk_bubble_window_get_property (GObject    *object,
                                 GValue     *value,
                                 GParamSpec *pspec)
 {
-  GtkBubbleWindowPrivate *priv = GTK_BUBBLE_WINDOW (object)->_priv;
+  GtkBubbleWindowPrivate *priv = GTK_BUBBLE_WINDOW (object)->priv;
 
   switch (prop_id)
     {
@@ -169,23 +168,23 @@ static void
 gtk_bubble_window_finalize (GObject *object)
 {
   GtkBubbleWindow *window = GTK_BUBBLE_WINDOW (object);
-  GtkBubbleWindowPrivate *priv = window->_priv;;
+  GtkBubbleWindowPrivate *priv = window->priv;
 
-  gtk_bubble_window_popdown (window);
+  _gtk_bubble_window_popdown (window);
 
   if (priv->relative_to)
     g_object_unref (priv->relative_to);
 
-  G_OBJECT_CLASS (gtk_bubble_window_parent_class)->finalize (object);
+  G_OBJECT_CLASS (_gtk_bubble_window_parent_class)->finalize (object);
 }
 
 static void
-_gtk_bubble_window_get_pointed_to_coords (GtkBubbleWindow       *window,
-                                          gint                  *x,
-                                          gint                  *y,
-                                          cairo_rectangle_int_t *root_rect)
+gtk_bubble_window_get_pointed_to_coords (GtkBubbleWindow       *window,
+                                         gint                  *x,
+                                         gint                  *y,
+                                         cairo_rectangle_int_t *root_rect)
 {
-  GtkBubbleWindowPrivate *priv = window->_priv;
+  GtkBubbleWindowPrivate *priv = window->priv;
   cairo_rectangle_int_t rect;
   GdkScreen *screen;
 
@@ -220,98 +219,216 @@ _gtk_bubble_window_get_pointed_to_coords (GtkBubbleWindow       *window,
 }
 
 static void
-_gtk_bubble_window_apply_tail_path (GtkBubbleWindow *window,
-                                    cairo_t         *cr,
-                                    GtkAllocation   *allocation)
+gtk_bubble_window_get_gap_coords (GtkBubbleWindow *window,
+                                  gint            *initial_x_out,
+                                  gint            *initial_y_out,
+                                  gint            *tip_x_out,
+                                  gint            *tip_y_out,
+                                  gint            *final_x_out,
+                                  gint            *final_y_out,
+                                  GtkPositionType *gap_side_out)
 {
-  GtkBubbleWindowPrivate *priv = window->_priv;
+  GtkBubbleWindowPrivate *priv = window->priv;
   gint base, tip, x, y;
+  gint initial_x, initial_y;
+  gint tip_x, tip_y;
+  gint final_x, final_y;
+  GtkPositionType gap_side;
+  GtkAllocation allocation;
 
-  _gtk_bubble_window_get_pointed_to_coords (window, &x, &y, NULL);
+  gtk_bubble_window_get_pointed_to_coords (window, &x, &y, NULL);
+  gtk_widget_get_allocation (GTK_WIDGET (window), &allocation);
+
+  base = tip = 0;
+  gap_side = GTK_POS_LEFT;
 
   if (priv->final_position == GTK_POS_BOTTOM ||
       priv->final_position == GTK_POS_RIGHT)
     {
       base = TAIL_HEIGHT;
       tip = 0;
+
+      gap_side = (priv->final_position == GTK_POS_BOTTOM) ? GTK_POS_TOP : GTK_POS_LEFT;
     }
   else if (priv->final_position == GTK_POS_TOP)
     {
-      base = allocation->height - TAIL_HEIGHT;
-      tip = allocation->height;
+      base = allocation.height - TAIL_HEIGHT;
+      tip = allocation.height;
+      gap_side = GTK_POS_BOTTOM;
     }
   else if (priv->final_position == GTK_POS_LEFT)
     {
-      base = allocation->width - TAIL_HEIGHT;
-      tip = allocation->width;
+      base = allocation.width - TAIL_HEIGHT;
+      tip = allocation.width;
+      gap_side = GTK_POS_RIGHT;
     }
 
   if (POS_IS_VERTICAL (priv->final_position))
     {
-      cairo_move_to (cr, CLAMP (x - priv->win_x - TAIL_GAP_WIDTH / 2,
-                                0, allocation->width - TAIL_GAP_WIDTH), base);
-      cairo_line_to (cr, CLAMP (x - priv->win_x, 0, allocation->width), tip);
-      cairo_line_to (cr, CLAMP (x - priv->win_x + TAIL_GAP_WIDTH / 2,
-                                TAIL_GAP_WIDTH, allocation->width), base);
+      initial_x = CLAMP (x - priv->win_x - TAIL_GAP_WIDTH / 2,
+                         0, allocation.width - TAIL_GAP_WIDTH);
+      initial_y = base;
+
+      tip_x = CLAMP (x - priv->win_x, 0, allocation.width);
+      tip_y = tip;
+
+      final_x = CLAMP (x - priv->win_x + TAIL_GAP_WIDTH / 2,
+                       TAIL_GAP_WIDTH, allocation.width);
+      final_y = base;
     }
   else
     {
-      cairo_move_to (cr, base,
-                     CLAMP (y - priv->win_y - TAIL_GAP_WIDTH / 2,
-                            0, allocation->height - TAIL_GAP_WIDTH));
-      cairo_line_to (cr, tip, CLAMP (y - priv->win_y, 0, allocation->height));
-      cairo_line_to (cr, base,
-                     CLAMP (y - priv->win_y + TAIL_GAP_WIDTH / 2,
-                            TAIL_GAP_WIDTH, allocation->height));
+      initial_x = base;
+      initial_y = CLAMP (y - priv->win_y - TAIL_GAP_WIDTH / 2,
+                         0, allocation.height - TAIL_GAP_WIDTH);
+
+      tip_x = tip;
+      tip_y = CLAMP (y - priv->win_y, 0, allocation.height);
+
+      final_x = base;
+      final_y = CLAMP (y - priv->win_y + TAIL_GAP_WIDTH / 2,
+                       TAIL_GAP_WIDTH, allocation.height);
     }
+
+  if (initial_x_out)
+    *initial_x_out = initial_x;
+  if (initial_y_out)
+    *initial_y_out = initial_y;
+
+  if (tip_x_out)
+    *tip_x_out = tip_x;
+  if (tip_y_out)
+    *tip_y_out = tip_y;
+
+  if (final_x_out)
+    *final_x_out = final_x;
+  if (final_y_out)
+    *final_y_out = final_y;
+
+  if (gap_side_out)
+    *gap_side_out = gap_side;
 }
 
 static void
-_gtk_bubble_window_apply_border_path (GtkBubbleWindow *window,
-                                      cairo_t         *cr)
+gtk_bubble_window_get_rect_coords (GtkBubbleWindow *window,
+                                   gint            *x1_out,
+                                   gint            *y1_out,
+                                   gint            *x2_out,
+                                   gint            *y2_out)
+{
+  GtkBubbleWindowPrivate *priv = window->priv;
+  gint x1, x2, y1, y2;
+  GtkAllocation allocation;
+
+  x1 = y1 = x2 = y2 = 0;
+  gtk_widget_get_allocation (GTK_WIDGET (window), &allocation);
+
+  if (priv->final_position == GTK_POS_TOP)
+    {
+      x1 = 0;
+      y1 = 0;
+      x2 = allocation.width;
+      y2 = allocation.height - TAIL_HEIGHT;
+    }
+  else if (priv->final_position == GTK_POS_BOTTOM)
+    {
+      x1 = 0;
+      y1 = TAIL_HEIGHT;
+      x2 = allocation.width;
+      y2 = allocation.height;
+    }
+  else if (priv->final_position == GTK_POS_LEFT)
+    {
+      x1 = 0;
+      y1 = 0;
+      x2 = allocation.width - TAIL_HEIGHT;
+      y2 = allocation.height;
+    }
+  else if (priv->final_position == GTK_POS_RIGHT)
+    {
+      x1 = TAIL_HEIGHT;
+      y1 = 0;
+      x2 = allocation.width;
+      y2 = allocation.height;
+    }
+
+  if (x1_out)
+    *x1_out = x1;
+  if (y1_out)
+    *y1_out = y1;
+  if (x2_out)
+    *x2_out = x2;
+  if (y2_out)
+    *y2_out = y2;
+}
+
+static void
+gtk_bubble_window_apply_tail_path (GtkBubbleWindow *window,
+                                   cairo_t         *cr)
+{
+  gint initial_x, initial_y;
+  gint tip_x, tip_y;
+  gint final_x, final_y;
+
+  gtk_bubble_window_get_gap_coords (window,
+                                    &initial_x, &initial_y,
+                                    &tip_x, &tip_y,
+                                    &final_x, &final_y,
+                                    NULL);
+
+  cairo_move_to (cr, initial_x, initial_y);
+  cairo_line_to (cr, tip_x, tip_y);
+  cairo_line_to (cr, final_x, final_y);
+}
+
+static void
+gtk_bubble_window_apply_border_path (GtkBubbleWindow *window,
+                                     cairo_t         *cr)
 {
   GtkBubbleWindowPrivate *priv;
   GtkAllocation allocation;
+  gint x1, y1, x2, y2;
 
-  priv = window->_priv;
+  priv = window->priv;
   gtk_widget_get_allocation (GTK_WIDGET (window), &allocation);
 
-  _gtk_bubble_window_apply_tail_path (window, cr, &allocation);
+  gtk_bubble_window_apply_tail_path (window, cr);
+  gtk_bubble_window_get_rect_coords (window, &x1, &y1, &x2, &y2);
 
   if (priv->final_position == GTK_POS_TOP)
     {
-      cairo_line_to (cr, allocation.width, allocation.height - TAIL_HEIGHT);
-      cairo_line_to (cr, allocation.width, 0);
-      cairo_line_to (cr, 0, 0);
-      cairo_line_to (cr, 0, allocation.height - TAIL_HEIGHT);
+      cairo_line_to (cr, x2, y2);
+      cairo_line_to (cr, x2, y1);
+      cairo_line_to (cr, x1, y1);
+      cairo_line_to (cr, x1, y2);
     }
   else if (priv->final_position == GTK_POS_BOTTOM)
     {
-      cairo_line_to (cr, allocation.width, TAIL_HEIGHT);
-      cairo_line_to (cr, allocation.width, allocation.height);
-      cairo_line_to (cr, 0, allocation.height);
-      cairo_line_to (cr, 0, TAIL_HEIGHT);
+      cairo_line_to (cr, x2, y1);
+      cairo_line_to (cr, x2, y2);
+      cairo_line_to (cr, x1, y2);
+      cairo_line_to (cr, x1, y1);
     }
   else if (priv->final_position == GTK_POS_LEFT)
     {
-      cairo_line_to (cr, allocation.width - TAIL_HEIGHT, allocation.height);
-      cairo_line_to (cr, 0, allocation.height);
-      cairo_line_to (cr, 0, 0);
-      cairo_line_to (cr, allocation.width - TAIL_HEIGHT, 0);
+      cairo_line_to (cr, x2, y2);
+      cairo_line_to (cr, x1, y2);
+      cairo_line_to (cr, x1, y1);
+      cairo_line_to (cr, x2, y1);
     }
   else if (priv->final_position == GTK_POS_RIGHT)
     {
-      cairo_line_to (cr, TAIL_HEIGHT, 0);
-      cairo_line_to (cr, allocation.width, 0);
-      cairo_line_to (cr, allocation.width, allocation.height);
-      cairo_line_to (cr, TAIL_HEIGHT, allocation.height);
+      cairo_line_to (cr, x1, y1);
+      cairo_line_to (cr, x2, y1);
+      cairo_line_to (cr, x2, y2);
+      cairo_line_to (cr, x1, y2);
     }
 
   cairo_close_path (cr);
 }
 
 static void
-_gtk_bubble_window_update_shape (GtkBubbleWindow *window)
+gtk_bubble_window_update_shape (GtkBubbleWindow *window)
 {
   cairo_surface_t *surface;
   cairo_region_t *region;
@@ -326,7 +443,7 @@ _gtk_bubble_window_update_shape (GtkBubbleWindow *window)
                                        gdk_window_get_height (win));
 
   cr = cairo_create (surface);
-  _gtk_bubble_window_apply_border_path (window, cr);
+  gtk_bubble_window_apply_border_path (window, cr);
   cairo_fill (cr);
   cairo_destroy (cr);
 
@@ -341,7 +458,7 @@ _gtk_bubble_window_update_shape (GtkBubbleWindow *window)
 }
 
 static void
-_gtk_bubble_window_update_position (GtkBubbleWindow *window)
+gtk_bubble_window_update_position (GtkBubbleWindow *window)
 {
   GtkBubbleWindowPrivate *priv;
   cairo_rectangle_int_t rect;
@@ -349,13 +466,13 @@ _gtk_bubble_window_update_position (GtkBubbleWindow *window)
   gint win_x, win_y, x, y;
   GdkScreen *screen;
 
-  priv = window->_priv;
+  priv = window->priv;
   screen = gtk_widget_get_screen (GTK_WIDGET (window));
   gtk_widget_get_allocation (GTK_WIDGET (window), &allocation);
   priv->final_position = priv->preferred_position;
   rect = priv->pointing_to;
 
-  _gtk_bubble_window_get_pointed_to_coords (window, &x, &y, &rect);
+  gtk_bubble_window_get_pointed_to_coords (window, &x, &y, &rect);
 
   /* Check whether there's enough room on the
    * preferred side, move to the opposite one if not.
@@ -405,15 +522,18 @@ gtk_bubble_window_draw (GtkWidget *widget,
   GtkStyleContext *context;
   GtkAllocation allocation;
   GtkWidget *child;
-  GdkRGBA *border;
+  GtkBorder border;
+  GdkRGBA border_color;
+  gint rect_x1, rect_x2, rect_y1, rect_y2;
+  gint initial_x, initial_y, final_x, final_y;
+  gint gap_start, gap_end;
+  GtkPositionType gap_side;
+  GtkStateFlags state;
 
-  cairo_save (cr);
   context = gtk_widget_get_style_context (widget);
+  state = gtk_widget_get_state_flags (widget);
   gtk_widget_get_allocation (widget, &allocation);
 
-  gtk_render_background (context, cr, 0, 0,
-                         allocation.width, allocation.height);
-
   if (gtk_widget_is_composited (widget))
     {
       cairo_save (cr);
@@ -421,32 +541,93 @@ gtk_bubble_window_draw (GtkWidget *widget,
       cairo_set_source_rgba (cr, 0, 0, 0, 0);
       cairo_paint (cr);
       cairo_restore (cr);
+    }
+
+  gtk_bubble_window_get_rect_coords (GTK_BUBBLE_WINDOW (widget),
+                                     &rect_x1, &rect_y1,
+                                     &rect_x2, &rect_y2);
+
+  /* Render the rect background */
+  gtk_render_background (context, cr,
+                         rect_x1, rect_y1,
+                         rect_x2 - rect_x1, rect_y2 - rect_y1);
+
+  gtk_bubble_window_get_gap_coords (GTK_BUBBLE_WINDOW (widget),
+                                    &initial_x, &initial_y,
+                                    NULL, NULL,
+                                    &final_x, &final_y,
+                                    &gap_side);
 
-      _gtk_bubble_window_apply_border_path (GTK_BUBBLE_WINDOW (widget), cr);
-      cairo_clip (cr);
+  if (POS_IS_VERTICAL (gap_side))
+    {
+      gap_start = initial_x;
+      gap_end = final_x;
     }
+  else
+    {
+      gap_start = initial_y;
+      gap_end = final_y;
+    }
+
+  /* Now render the frame, without the gap for the arrow tip */
+  gtk_render_frame_gap (context, cr,
+                        rect_x1, rect_y1,
+                        rect_x2 - rect_x1, rect_y2 - rect_y1,
+                        gap_side,
+                        gap_start, gap_end);
 
-  gtk_render_background (context, cr, 0, 0,
+  /* Clip to the arrow shape */
+  cairo_save (cr);
+
+  gtk_bubble_window_apply_tail_path (GTK_BUBBLE_WINDOW (widget), cr);
+  cairo_clip (cr);
+
+  /* Render the arrow background */
+  gtk_render_background (context, cr,
+                         0, 0,
                          allocation.width, allocation.height);
 
-  gtk_style_context_get (context, gtk_widget_get_state_flags (widget),
-                         GTK_STYLE_PROPERTY_BORDER_COLOR, &border,
-                         NULL);
+  /* Render the border of the arrow tip */
+  gtk_style_context_get_border (context, state, &border);
+
+  if (border.bottom > 0)
+    {
+      gtk_style_context_get_border_color (context, state, &border_color);
+      gtk_bubble_window_apply_tail_path (GTK_BUBBLE_WINDOW (widget), cr);
+      gdk_cairo_set_source_rgba (cr, &border_color);
+
+      cairo_set_line_width (cr, border.bottom);
+      cairo_stroke (cr);
+    }
 
-  _gtk_bubble_window_apply_border_path (GTK_BUBBLE_WINDOW (widget), cr);
-  gdk_cairo_set_source_rgba (cr, border);
-  cairo_stroke (cr);
+  /* We're done */
+  cairo_restore (cr);
 
   child = gtk_bin_get_child (GTK_BIN (widget));
 
   if (child)
     gtk_container_propagate_draw (GTK_CONTAINER (widget), child, cr);
 
-  cairo_restore (cr);
+  return TRUE;
+}
 
-  gdk_rgba_free (border);
+static void
+get_padding_and_border (GtkWidget *widget,
+                        GtkBorder *border)
+{
+  GtkStyleContext *context;
+  GtkStateFlags state;
+  GtkBorder tmp;
 
-  return TRUE;
+  context = gtk_widget_get_style_context (widget);
+  state = gtk_widget_get_state_flags (widget);
+
+  gtk_style_context_get_padding (context, state, border);
+  gtk_style_context_get_border (context, state, &tmp);
+  border->top += tmp.top;
+  border->right += tmp.right;
+  border->bottom += tmp.bottom;
+  border->left += tmp.left;
 }
 
 static void
@@ -457,14 +638,19 @@ gtk_bubble_window_get_preferred_width (GtkWidget *widget,
   GtkBubbleWindowPrivate *priv;
   GtkWidget *child;
   gint min, nat;
+  GtkBorder border;
 
-  priv = GTK_BUBBLE_WINDOW (widget)->_priv;
+  priv = GTK_BUBBLE_WINDOW (widget)->priv;
   child = gtk_bin_get_child (GTK_BIN (widget));
   min = nat = 0;
 
   if (child)
     gtk_widget_get_preferred_width (child, &min, &nat);
 
+  get_padding_and_border (widget, &border);
+  min += border.left + border.right;
+  nat += border.left + border.right;
+
   if (!POS_IS_VERTICAL (priv->final_position))
     {
       min += TAIL_HEIGHT;
@@ -486,13 +672,18 @@ gtk_bubble_window_get_preferred_height (GtkWidget *widget,
   GtkBubbleWindowPrivate *priv;
   GtkWidget *child;
   gint min, nat;
+  GtkBorder border;
 
-  priv = GTK_BUBBLE_WINDOW (widget)->_priv;
+  priv = GTK_BUBBLE_WINDOW (widget)->priv;
   child = gtk_bin_get_child (GTK_BIN (widget));
   min = nat = 0;
 
   if (child)
-      gtk_widget_get_preferred_height (child, &min, &nat);
+    gtk_widget_get_preferred_height (child, &min, &nat);
+
+  get_padding_and_border (widget, &border);
+  min += border.top + border.bottom;
+  nat += border.top + border.bottom;
 
   if (POS_IS_VERTICAL (priv->final_position))
     {
@@ -514,17 +705,21 @@ gtk_bubble_window_size_allocate (GtkWidget     *widget,
   GtkBubbleWindowPrivate *priv;
   GtkWidget *child;
 
-  priv = GTK_BUBBLE_WINDOW (widget)->_priv;
+  priv = GTK_BUBBLE_WINDOW (widget)->priv;
   gtk_widget_set_allocation (widget, allocation);
   child = gtk_bin_get_child (GTK_BIN (widget));
 
   if (child)
     {
       GtkAllocation child_alloc;
+      GtkBorder border;
 
-      child_alloc.x = child_alloc.y = 0;
-      child_alloc.width = allocation->width;
-      child_alloc.height = allocation->height;
+      get_padding_and_border (widget, &border);
+
+      child_alloc.x = border.left;
+      child_alloc.y = border.top;
+      child_alloc.width = allocation->width - border.left - border.right;
+      child_alloc.height = allocation->height - border.top - border.bottom;
 
       if (POS_IS_VERTICAL (priv->final_position))
         child_alloc.height -= TAIL_HEIGHT;
@@ -540,10 +735,10 @@ gtk_bubble_window_size_allocate (GtkWidget     *widget,
     }
 
   if (gtk_widget_get_realized (widget))
-    _gtk_bubble_window_update_shape (GTK_BUBBLE_WINDOW (widget));
+    gtk_bubble_window_update_shape (GTK_BUBBLE_WINDOW (widget));
 
   if (gtk_widget_get_visible (widget))
-    _gtk_bubble_window_update_position (GTK_BUBBLE_WINDOW (widget));
+    gtk_bubble_window_update_position (GTK_BUBBLE_WINDOW (widget));
 }
 
 static gboolean
@@ -564,10 +759,10 @@ gtk_bubble_window_button_press (GtkWidget      *widget,
           event->x > child_alloc.x + child_alloc.width ||
           event->y < child_alloc.y ||
           event->y > child_alloc.y + child_alloc.height)
-        gtk_bubble_window_popdown (GTK_BUBBLE_WINDOW (widget));
+        _gtk_bubble_window_popdown (GTK_BUBBLE_WINDOW (widget));
     }
   else
-    gtk_bubble_window_popdown (GTK_BUBBLE_WINDOW (widget));
+    _gtk_bubble_window_popdown (GTK_BUBBLE_WINDOW (widget));
 
   return GDK_EVENT_PROPAGATE;
 }
@@ -578,7 +773,7 @@ gtk_bubble_window_key_press (GtkWidget   *widget,
 {
   if (event->keyval == GDK_KEY_Escape)
     {
-      gtk_bubble_window_popdown (GTK_BUBBLE_WINDOW (widget));
+      _gtk_bubble_window_popdown (GTK_BUBBLE_WINDOW (widget));
       return GDK_EVENT_STOP;
     }
 
@@ -593,12 +788,12 @@ gtk_bubble_window_grab_broken (GtkWidget          *widget,
   GtkBubbleWindowPrivate *priv;
   GdkDevice *event_device;
 
-  priv = window->_priv;
+  priv = window->priv;
   event_device = gdk_event_get_device ((GdkEvent *) grab_broken);
 
   if (event_device == priv->device ||
       event_device == gdk_device_get_associated_device (priv->device))
-    gtk_bubble_window_ungrab (window);
+    _gtk_bubble_window_ungrab (window);
 
   return FALSE;
 }
@@ -610,10 +805,10 @@ gtk_bubble_window_grab_notify (GtkWidget *widget,
   GtkBubbleWindow *window = GTK_BUBBLE_WINDOW (widget);
   GtkBubbleWindowPrivate *priv;
 
-  priv = window->_priv;
+  priv = window->priv;
 
   if (priv->device && gtk_widget_device_is_shadowed (widget, priv->device))
-    gtk_bubble_window_ungrab (window);
+    _gtk_bubble_window_ungrab (window);
 }
 
 static void
@@ -631,7 +826,7 @@ gtk_bubble_window_screen_changed (GtkWidget *widget,
 }
 
 static void
-gtk_bubble_window_class_init (GtkBubbleWindowClass *klass)
+_gtk_bubble_window_class_init (GtkBubbleWindowClass *klass)
 {
   GtkWidgetClass *widget_class = GTK_WIDGET_CLASS (klass);
   GObjectClass *object_class = G_OBJECT_CLASS (klass);
@@ -677,12 +872,12 @@ gtk_bubble_window_class_init (GtkBubbleWindowClass *klass)
 }
 
 static void
-_gtk_bubble_window_update_relative_to (GtkBubbleWindow *window,
-                                       GdkWindow       *relative_to)
+gtk_bubble_window_update_relative_to (GtkBubbleWindow *window,
+                                      GdkWindow       *relative_to)
 {
   GtkBubbleWindowPrivate *priv;
 
-  priv = window->_priv;
+  priv = window->priv;
 
   if (priv->relative_to == relative_to)
     return;
@@ -695,29 +890,29 @@ _gtk_bubble_window_update_relative_to (GtkBubbleWindow *window,
 }
 
 static void
-_gtk_bubble_window_update_pointing_to (GtkBubbleWindow       *window,
-                                       cairo_rectangle_int_t *pointing_to)
+gtk_bubble_window_update_pointing_to (GtkBubbleWindow       *window,
+                                      cairo_rectangle_int_t *pointing_to)
 {
   GtkBubbleWindowPrivate *priv;
 
-  priv = window->_priv;
+  priv = window->priv;
   priv->pointing_to = *pointing_to;
   priv->has_pointing_to = TRUE;
   g_object_notify (G_OBJECT (window), "pointing-to");
 }
 
 static void
-_gtk_bubble_window_update_preferred_position (GtkBubbleWindow *window,
-                                              GtkPositionType  position)
+gtk_bubble_window_update_preferred_position (GtkBubbleWindow *window,
+                                             GtkPositionType  position)
 {
   GtkBubbleWindowPrivate *priv;
 
-  priv = window->_priv;
+  priv = window->priv;
   priv->preferred_position = position;
   g_object_notify (G_OBJECT (window), "position");
 }
 
-/**
+/*
  * gtk_bubble_window_new:
  *
  * Returns a newly created #GtkBubblewindow
@@ -725,14 +920,14 @@ _gtk_bubble_window_update_preferred_position (GtkBubbleWindow *window,
  * Returns: a new #GtkBubbleWindow
  *
  * Since: 3.8
- **/
+ */
 GtkWidget *
-gtk_bubble_window_new (void)
+_gtk_bubble_window_new (void)
 {
   return g_object_new (GTK_TYPE_BUBBLE_WINDOW, NULL);
 }
 
-/**
+/*
  * gtk_bubble_window_set_relative_to:
  * @window: a #GtkBubbleWindow
  * @relative_to: a #GdkWindow
@@ -745,21 +940,21 @@ gtk_bubble_window_new (void)
  * this change.
  *
  * Since: 3.8
- **/
+ */
 void
-gtk_bubble_window_set_relative_to (GtkBubbleWindow *window,
-                                   GdkWindow       *relative_to)
+_gtk_bubble_window_set_relative_to (GtkBubbleWindow *window,
+                                    GdkWindow       *relative_to)
 {
   g_return_if_fail (GTK_IS_BUBBLE_WINDOW (window));
   g_return_if_fail (!relative_to || GDK_IS_WINDOW (relative_to));
 
-  _gtk_bubble_window_update_relative_to (window, relative_to);
+  gtk_bubble_window_update_relative_to (window, relative_to);
 
   if (gtk_widget_get_visible (GTK_WIDGET (window)))
-    _gtk_bubble_window_update_position (window);
+    gtk_bubble_window_update_position (window);
 }
 
-/**
+/*
  * gtk_bubble_window_get_relative_to:
  * @window: a #GtkBubbleWindow
  *
@@ -770,20 +965,20 @@ gtk_bubble_window_set_relative_to (GtkBubbleWindow *window,
  * Returns: the #GdkWindow @window is placed upon
  *
  * Since: 3.8
- **/
+ */
 GdkWindow *
-gtk_bubble_window_get_relative_to (GtkBubbleWindow *window)
+_gtk_bubble_window_get_relative_to (GtkBubbleWindow *window)
 {
   GtkBubbleWindowPrivate *priv;
 
   g_return_val_if_fail (GTK_IS_BUBBLE_WINDOW (window), NULL);
 
-  priv = window->_priv;
+  priv = window->priv;
 
   return priv->relative_to;
 }
 
-/**
+/*
  * gtk_bubble_window_set_pointing_to:
  * @window: a #GtkBubbleWindow
  * @rect: rectangle to point to
@@ -793,21 +988,21 @@ gtk_bubble_window_get_relative_to (GtkBubbleWindow *window)
  * gtk_bubble_window_set_relative_to().
  *
  * Since: 3.8
- **/
+ */
 void
-gtk_bubble_window_set_pointing_to (GtkBubbleWindow       *window,
-                                   cairo_rectangle_int_t *rect)
+_gtk_bubble_window_set_pointing_to (GtkBubbleWindow       *window,
+                                    cairo_rectangle_int_t *rect)
 {
   g_return_if_fail (GTK_IS_BUBBLE_WINDOW (window));
   g_return_if_fail (rect != NULL);
 
-  _gtk_bubble_window_update_pointing_to (window, rect);
+  gtk_bubble_window_update_pointing_to (window, rect);
 
   if (gtk_widget_get_visible (GTK_WIDGET (window)))
-    _gtk_bubble_window_update_position (window);
+    gtk_bubble_window_update_position (window);
 }
 
-/**
+/*
  * gtk_bubble_window_get_pointing_to:
  * @window: a #GtkBubbleWindow
  * @rect: (out): location to store the rectangle
@@ -819,16 +1014,16 @@ gtk_bubble_window_set_pointing_to (GtkBubbleWindow       *window,
  * Returns: %TRUE if a rectangle is set
  *
  * Since: 3.8
- **/
+ */
 gboolean
-gtk_bubble_window_get_pointing_to (GtkBubbleWindow       *window,
-                                   cairo_rectangle_int_t *rect)
+_gtk_bubble_window_get_pointing_to (GtkBubbleWindow       *window,
+                                    cairo_rectangle_int_t *rect)
 {
   GtkBubbleWindowPrivate *priv;
 
   g_return_val_if_fail (GTK_IS_BUBBLE_WINDOW (window), FALSE);
 
-  priv = window->_priv;
+  priv = window->priv;
 
   if (rect)
     *rect = priv->pointing_to;
@@ -836,7 +1031,7 @@ gtk_bubble_window_get_pointing_to (GtkBubbleWindow       *window,
   return priv->has_pointing_to;
 }
 
-/**
+/*
  * gtk_bubble_window_set_position:
  * @window: a #GtkBubbleWindow
  * @position: preferred bubble position
@@ -852,21 +1047,21 @@ gtk_bubble_window_get_pointing_to (GtkBubbleWindow       *window,
  * </note>
  *
  * Since: 3.8
- **/
+ */
 void
-gtk_bubble_window_set_position (GtkBubbleWindow *window,
-                                GtkPositionType  position)
+_gtk_bubble_window_set_position (GtkBubbleWindow *window,
+                                 GtkPositionType  position)
 {
   g_return_if_fail (GTK_IS_BUBBLE_WINDOW (window));
   g_return_if_fail (position >= GTK_POS_LEFT && position <= GTK_POS_BOTTOM);
 
-  _gtk_bubble_window_update_preferred_position (window, position);
+  gtk_bubble_window_update_preferred_position (window, position);
 
   if (gtk_widget_get_visible (GTK_WIDGET (window)))
-    _gtk_bubble_window_update_position (window);
+    gtk_bubble_window_update_position (window);
 }
 
-/**
+/*
  * gtk_bubble_window_get_position:
  * @window: a #GtkBubbleWindow
  *
@@ -875,20 +1070,20 @@ gtk_bubble_window_set_position (GtkBubbleWindow *window,
  * Returns: The preferred position
  *
  * Since: 3.8
- **/
+ */
 GtkPositionType
-gtk_bubble_window_get_position (GtkBubbleWindow *window)
+_gtk_bubble_window_get_position (GtkBubbleWindow *window)
 {
   GtkBubbleWindowPrivate *priv;
 
   g_return_val_if_fail (GTK_IS_BUBBLE_WINDOW (window), GTK_POS_TOP);
 
-  priv = window->_priv;
+  priv = window->priv;
 
   return priv->preferred_position;
 }
 
-/**
+/*
  * gtk_bubble_window_popup:
  * @window: a #GtkBubbleWindow
  * @relative_to: #GdkWindow to position upon
@@ -899,29 +1094,29 @@ gtk_bubble_window_get_position (GtkBubbleWindow *window)
  * parameters, and shows/updates @window
  *
  * Since: 3.8
- **/
+ */
 void
-gtk_bubble_window_popup (GtkBubbleWindow       *window,
-                         GdkWindow             *relative_to,
-                         cairo_rectangle_int_t *pointing_to,
-                         GtkPositionType        position)
+_gtk_bubble_window_popup (GtkBubbleWindow       *window,
+                          GdkWindow             *relative_to,
+                          cairo_rectangle_int_t *pointing_to,
+                          GtkPositionType        position)
 {
   g_return_if_fail (GTK_IS_BUBBLE_WINDOW (window));
   g_return_if_fail (!relative_to || GDK_IS_WINDOW (relative_to));
   g_return_if_fail (position >= GTK_POS_LEFT && position <= GTK_POS_BOTTOM);
   g_return_if_fail (pointing_to != NULL);
 
-  _gtk_bubble_window_update_preferred_position (window, position);
-  _gtk_bubble_window_update_relative_to (window, relative_to);
-  _gtk_bubble_window_update_pointing_to (window, pointing_to);
+  gtk_bubble_window_update_preferred_position (window, position);
+  gtk_bubble_window_update_relative_to (window, relative_to);
+  gtk_bubble_window_update_pointing_to (window, pointing_to);
 
   if (!gtk_widget_get_visible (GTK_WIDGET (window)))
     gtk_widget_show (GTK_WIDGET (window));
 
-  _gtk_bubble_window_update_position (window);
+  gtk_bubble_window_update_position (window);
 }
 
-/**
+/*
  * gtk_bubble_window_popdown:
  * @window: a #GtkBubbleWindow
  *
@@ -933,22 +1128,22 @@ gtk_bubble_window_popup (GtkBubbleWindow       *window,
  * </note>
  *
  * Since: 3.8
- **/
+ */
 void
-gtk_bubble_window_popdown (GtkBubbleWindow *window)
+_gtk_bubble_window_popdown (GtkBubbleWindow *window)
 {
-  GtkBubbleWindowPrivate *priv = window->_priv;
+  GtkBubbleWindowPrivate *priv = window->priv;
 
   g_return_if_fail (GTK_IS_BUBBLE_WINDOW (window));
 
   if (priv->grabbed)
-    gtk_bubble_window_ungrab (window);
+    _gtk_bubble_window_ungrab (window);
 
   if (gtk_widget_get_visible (GTK_WIDGET (window)))
     gtk_widget_hide (GTK_WIDGET (window));
 }
 
-/**
+/*
  * gtk_bubble_window_grab:
  * @window: a #GtkBubbleWindow
  * @device: a master #GdkDevice
@@ -970,11 +1165,11 @@ gtk_bubble_window_popdown (GtkBubbleWindow *window)
  * Returns: %TRUE if the grab was successful
  *
  * Since: 3.8
- **/
+ */
 gboolean
-gtk_bubble_window_grab (GtkBubbleWindow *window,
-                        GdkDevice       *device,
-                        guint32          activate_time)
+_gtk_bubble_window_grab (GtkBubbleWindow *window,
+                         GdkDevice       *device,
+                         guint32          activate_time)
 {
   GtkBubbleWindowPrivate *priv;
   GdkDevice *other_device;
@@ -985,14 +1180,14 @@ gtk_bubble_window_grab (GtkBubbleWindow *window,
   g_return_val_if_fail (GDK_IS_DEVICE (device), FALSE);
   g_return_val_if_fail (gdk_device_get_device_type (device) == GDK_DEVICE_TYPE_MASTER, FALSE);
 
-  priv = window->_priv;
+  priv = window->priv;
 
   if (!priv->has_pointing_to ||
       gdk_window_is_destroyed (priv->relative_to))
     return FALSE;
 
   if (priv->device)
-    gtk_bubble_window_ungrab (window);
+    _gtk_bubble_window_ungrab (window);
 
   gtk_widget_realize (GTK_WIDGET (window));
   grab_window = gtk_widget_get_window (GTK_WIDGET (window));
@@ -1022,7 +1217,7 @@ gtk_bubble_window_grab (GtkBubbleWindow *window,
   return status == GDK_GRAB_SUCCESS;
 }
 
-/**
+/*
  * gtk_bubble_window_ungrab:
  * @window: a #GtkBubbleWindow
  *
@@ -1030,15 +1225,15 @@ gtk_bubble_window_grab (GtkBubbleWindow *window,
  * in this @window,
  *
  * Since: 3.8
- **/
+ */
 void
-gtk_bubble_window_ungrab (GtkBubbleWindow *window)
+_gtk_bubble_window_ungrab (GtkBubbleWindow *window)
 {
   GtkBubbleWindowPrivate *priv;
 
   g_return_if_fail (GTK_IS_BUBBLE_WINDOW (window));
 
-  priv = window->_priv;
+  priv = window->priv;
 
   if (!priv->device)
     return;