[gtk+] gtkwindow: Remove resize grips



commit ece9ae4bc507a2f2e0d6660a0058c0f79735736b
Author: Jasper St. Pierre <jstpierre mecheye net>
Date:   Wed Jul 2 11:00:02 2014 -0400

    gtkwindow: Remove resize grips
    
    Resize grips were introduced for GNOME 3.0, before we had any of the
    "new GNOME app" features like invisible borders and CSD. With OS X 10.6
    and 10.7, Apple has replaced the classic grips in their applications
    with invisible borders as well.
    
    New GNOME app designs don't use resize grips anymore and the new
    default theme for GTK+, Adwaita, disables them entirely by forcing their
    width and height to 0.
    
    They're past their time. Remove the code to support them. This can
    always be reverted if some app relies on them.

 docs/tools/widgets.c                               |    1 -
 gtk/gtkrange.c                                     |  105 -----
 gtk/gtkstatusbar.c                                 |  183 --------
 gtk/gtkwindow.c                                    |  451 +-------------------
 gtk/gtkwindow.h                                    |    8 +-
 gtk/resources/theme/Adwaita/_common.scss           |    2 -
 gtk/resources/theme/Adwaita/gtk-contained-dark.css |    2 -
 gtk/resources/theme/Adwaita/gtk-contained.css      |    2 -
 gtk/resources/theme/Raleigh/gtk-default.css        |    2 -
 tests/styleexamples.c                              |    1 -
 testsuite/gtk/testing.c                            |    2 -
 testsuite/reftests/toplevel-vs-popup.ui            |    1 -
 12 files changed, 26 insertions(+), 734 deletions(-)
---
diff --git a/docs/tools/widgets.c b/docs/tools/widgets.c
index f3dc8be..c468f5a 100644
--- a/docs/tools/widgets.c
+++ b/docs/tools/widgets.c
@@ -35,7 +35,6 @@ new_widget_info (const char *name,
   else
     {
       info->window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
-      gtk_window_set_has_resize_grip (GTK_WINDOW (info->window), FALSE);
       gtk_container_set_border_width (GTK_CONTAINER (info->window), 12);
       info->include_decorations = FALSE;
       gtk_widget_show_all (widget);
diff --git a/gtk/gtkrange.c b/gtk/gtkrange.c
index 1ad3c2d..bec2d47 100644
--- a/gtk/gtkrange.c
+++ b/gtk/gtkrange.c
@@ -206,8 +206,6 @@ static void gtk_range_get_preferred_height
                                       gint             *natural);
 static void gtk_range_size_allocate  (GtkWidget        *widget,
                                       GtkAllocation    *allocation);
-static void gtk_range_hierarchy_changed (GtkWidget     *widget,
-                                         GtkWidget     *previous_toplevel);
 static void gtk_range_realize        (GtkWidget        *widget);
 static void gtk_range_unrealize      (GtkWidget        *widget);
 static void gtk_range_map            (GtkWidget        *widget);
@@ -322,7 +320,6 @@ gtk_range_class_init (GtkRangeClass *class)
   widget_class->get_preferred_width = gtk_range_get_preferred_width;
   widget_class->get_preferred_height = gtk_range_get_preferred_height;
   widget_class->size_allocate = gtk_range_size_allocate;
-  widget_class->hierarchy_changed = gtk_range_hierarchy_changed;
   widget_class->realize = gtk_range_realize;
   widget_class->unrealize = gtk_range_unrealize;
   widget_class->map = gtk_range_map;
@@ -1623,81 +1620,6 @@ gtk_range_get_preferred_height (GtkWidget *widget,
   *minimum = *natural = range_rect.height + border.top + border.bottom;
 }
 
-static gboolean
-modify_allocation_for_window_grip (GtkWidget     *widget,
-                                   GtkAllocation *allocation)
-{
-  GtkRange *range = GTK_RANGE (widget);
-  GtkRangePrivate *priv = range->priv;
-  GtkWidget *window, *parent;
-  GdkRectangle grip_rect;
-  GdkRectangle translated_rect;
-  gint x;
-  gint y;
-
-  window = gtk_widget_get_toplevel (widget);
-  if (!GTK_IS_WINDOW (window))
-    return FALSE;
-
-  if (!gtk_window_resize_grip_is_visible (GTK_WINDOW (window)))
-    return FALSE;
-
-  /* Get the area of the window's corner grip */
-  gtk_window_get_resize_grip_area (GTK_WINDOW (window), &grip_rect);
-
-  x = 0;
-  y = 0;
-
-  /* Translate the stepper's area into window coords.
-   * This is slightly tricky. We can't just use
-   * gtk_widget_translate_coordinates (widget, window, 0, 0, &x, &y)
-   * since that translates wrt to the _current_ allocation
-   * and will lead to alternating between overlap and nonoverlap
-   * for successive allocations.
-   * Therefore, we find the window-widget to whose window allocation
-   * is relative, and translate from there upwards.
-   */
-  parent = widget;
-  while (gtk_widget_get_window (parent) == gtk_widget_get_window (widget) &&
-         parent != window)
-    {
-      parent = gtk_widget_get_parent (parent);
-    }
-
-  if (parent == window)
-    translated_rect = *allocation;
-  else
-    {
-      gtk_widget_translate_coordinates (parent,
-                                        window,
-                                        allocation->x, allocation->y,
-                                        &x, &y);
-      translated_rect.x = x;
-      translated_rect.y = y;
-      translated_rect.width = allocation->width;
-      translated_rect.height = allocation->height;
-    }
-
-  /* If the stepper button intersects the window resize grip.. */
-  if (gdk_rectangle_intersect (&grip_rect, &translated_rect, &grip_rect))
-    {
-      if (priv->orientation == GTK_ORIENTATION_HORIZONTAL)
-        {
-          allocation->width -= grip_rect.width;
-          if (gtk_widget_get_direction (window) == GTK_TEXT_DIR_RTL)
-            allocation->x += grip_rect.width;
-        }
-      else
-        {
-          allocation->height -= grip_rect.height;
-        }
-
-      return TRUE;
-    }
-
-  return FALSE;
-}
-
 static void
 gtk_range_size_allocate (GtkWidget     *widget,
                          GtkAllocation *allocation)
@@ -1705,7 +1627,6 @@ gtk_range_size_allocate (GtkWidget     *widget,
   GtkRange *range = GTK_RANGE (widget);
   GtkRangePrivate *priv = range->priv;
 
-  modify_allocation_for_window_grip (widget, allocation);
   gtk_widget_set_allocation (widget, allocation);
 
   priv->recalc_marks = TRUE;
@@ -1720,30 +1641,6 @@ gtk_range_size_allocate (GtkWidget     *widget,
 }
 
 static void
-resize_grip_visible_changed (GObject    *object,
-                             GParamSpec *pspec,
-                             gpointer    user_data)
-{
-  gtk_widget_queue_resize (GTK_WIDGET (user_data));
-}
-
-static void
-gtk_range_hierarchy_changed (GtkWidget *widget,
-                             GtkWidget *previous_toplevel)
-{
-  GtkWidget *window;
-
-  if (previous_toplevel)
-    g_signal_handlers_disconnect_by_func (previous_toplevel,
-                                          G_CALLBACK (resize_grip_visible_changed),
-                                          widget);
-  window = gtk_widget_get_toplevel (widget);
-  if (gtk_widget_is_toplevel (window))
-    g_signal_connect (window, "notify::resize-grip-visible",
-                      G_CALLBACK (resize_grip_visible_changed), widget);
-}
-
-static void
 gtk_range_realize (GtkWidget *widget)
 {
   GtkAllocation allocation;
@@ -1762,8 +1659,6 @@ gtk_range_realize (GtkWidget *widget)
   g_object_ref (window);
 
   gtk_widget_get_allocation (widget, &allocation);
-  if (modify_allocation_for_window_grip (widget, &allocation))
-    gtk_widget_set_allocation (widget, &allocation);
 
   attributes.window_type = GDK_WINDOW_CHILD;
   attributes.x = allocation.x;
diff --git a/gtk/gtkstatusbar.c b/gtk/gtkstatusbar.c
index 7b69ce7..a49457f 100644
--- a/gtk/gtkstatusbar.c
+++ b/gtk/gtkstatusbar.c
@@ -106,13 +106,7 @@ enum
 static void     gtk_statusbar_update            (GtkStatusbar      *statusbar,
                                                 guint              context_id,
                                                 const gchar       *text);
-static void     gtk_statusbar_realize           (GtkWidget         *widget);
 static void     gtk_statusbar_destroy           (GtkWidget         *widget);
-static void     gtk_statusbar_size_allocate     (GtkWidget         *widget,
-                                                 GtkAllocation     *allocation);
-static void     gtk_statusbar_hierarchy_changed (GtkWidget         *widget,
-                                                 GtkWidget         *previous_toplevel);
-
 
 static guint              statusbar_signals[SIGNAL_LAST] = { 0 };
 
@@ -123,10 +117,7 @@ gtk_statusbar_class_init (GtkStatusbarClass *class)
 {
   GtkWidgetClass *widget_class = GTK_WIDGET_CLASS (class);
 
-  widget_class->realize = gtk_statusbar_realize;
   widget_class->destroy = gtk_statusbar_destroy;
-  widget_class->size_allocate = gtk_statusbar_size_allocate;
-  widget_class->hierarchy_changed = gtk_statusbar_hierarchy_changed;
 
   class->text_pushed = gtk_statusbar_update;
   class->text_popped = gtk_statusbar_update;
@@ -547,177 +538,3 @@ gtk_statusbar_destroy (GtkWidget *widget)
 
   GTK_WIDGET_CLASS (gtk_statusbar_parent_class)->destroy (widget);
 }
-
-/* look for extra children between the frame containing
- * the label and where we want to draw the resize grip
- */
-static gboolean
-has_extra_children (GtkStatusbar *statusbar)
-{
-  GtkStatusbarPrivate *priv = statusbar->priv;
-  GtkPackType child_pack_type, frame_pack_type;
-  GtkWidget *child, *frame;
-  GList *l, *children;
-  gboolean retval = FALSE;
-
-  frame = NULL;
-  children = _gtk_box_get_children (GTK_BOX (statusbar));
-  for (l = children; l; l = l->next)
-    {
-      frame = l->data;
-
-      if (frame == priv->frame)
-        break;
-    }
-
-  gtk_box_query_child_packing (GTK_BOX (statusbar), frame,
-                               NULL, NULL, NULL, &frame_pack_type);
-
-  for (l = l->next; l; l = l->next)
-    {
-      child = l->data;
-
-      if (!gtk_widget_get_visible (child))
-        continue;
-
-      gtk_box_query_child_packing (GTK_BOX (statusbar), child,
-                                   NULL, NULL, NULL, &child_pack_type);
-
-      if (frame_pack_type == GTK_PACK_START || child_pack_type == GTK_PACK_END)
-        {
-          retval = TRUE;
-          break;
-        }
-    }
-
-  g_list_free (children);
-
-  return retval;
-}
-
-static void
-gtk_statusbar_size_allocate (GtkWidget     *widget,
-                             GtkAllocation *allocation)
-{
-  GtkStatusbar *statusbar = GTK_STATUSBAR (widget);
-  GtkStatusbarPrivate *priv = statusbar->priv;
-  gboolean extra_children = FALSE;
-  gboolean has_resize_grip = FALSE;
-  GdkRectangle rect;
-  GtkWidget *window;
-  gint x, y;
-  GdkRectangle translated_rect;
-
-  window = gtk_widget_get_toplevel (widget);
-
-  if (GTK_IS_WINDOW (window) &&
-      gtk_window_resize_grip_is_visible (GTK_WINDOW (window)))
-    {
-      gtk_window_get_resize_grip_area (GTK_WINDOW (window), &rect);
-      if (gtk_widget_translate_coordinates (widget, window, 0, 0, &x, &y))
-        {
-          translated_rect.x = x;
-          translated_rect.y = y;
-          translated_rect.width = allocation->width;
-          translated_rect.height = allocation->height;
-
-          if (gdk_rectangle_intersect (&rect, &translated_rect, NULL))
-            {
-              has_resize_grip = TRUE;
-              extra_children = has_extra_children (statusbar);
-
-              /* If there are extra children, we don't want them to occupy
-               * the space where we draw the resize grip, so we temporarily
-               * shrink the allocation.
-               * If there are no extra children, we want the frame to get
-               * the full allocation, and we fix up the allocation of the
-               * label afterwards to make room for the grip.
-               */
-              if (extra_children)
-                {
-                  allocation->width -= rect.width;
-                  if (gtk_widget_get_direction (widget) == GTK_TEXT_DIR_RTL)
-                    allocation->x += rect.width;
-                }
-            }
-        }
-    }
-
-  /* chain up normally */
-  GTK_WIDGET_CLASS (gtk_statusbar_parent_class)->size_allocate (widget, allocation);
-
-  if (has_resize_grip)
-    {
-      if (extra_children)
-        {
-          allocation->width += rect.width;
-          if (gtk_widget_get_direction (widget) == GTK_TEXT_DIR_RTL)
-            allocation->x -= rect.width;
-
-          gtk_widget_set_allocation (widget, allocation);
-        }
-      else
-        {
-          GtkAllocation child_allocation, frame_allocation;
-          GtkWidget *child;
-
-          /* Use the frame's child instead of statusbar->label directly, in case
-           * the label has been replaced by a container as the frame's child
-           * (and the label reparented into that container).
-           */
-          child = gtk_bin_get_child (GTK_BIN (priv->frame));
-
-          gtk_widget_get_allocation (child, &child_allocation);
-          gtk_widget_get_allocation (priv->frame, &frame_allocation);
-          if (child_allocation.width + rect.width > frame_allocation.width)
-            {
-              /* shrink the label to make room for the grip */
-              *allocation = child_allocation;
-              allocation->width = MAX (1, allocation->width - rect.width);
-              if (gtk_widget_get_direction (widget) == GTK_TEXT_DIR_RTL)
-                allocation->x += child_allocation.width - allocation->width;
-
-              gtk_widget_size_allocate (child, allocation);
-            }
-        }
-    }
-}
-
-static void
-resize_grip_visible_changed (GObject    *object,
-                             GParamSpec *pspec,
-                             gpointer    user_data)
-{
-  GtkStatusbar *statusbar = GTK_STATUSBAR (user_data);
-  GtkStatusbarPrivate *priv = statusbar->priv;
-
-  gtk_widget_queue_resize (priv->label);
-  gtk_widget_queue_resize (priv->frame);
-  gtk_widget_queue_resize (GTK_WIDGET (statusbar));
-}
-
-static void
-gtk_statusbar_hierarchy_changed (GtkWidget *widget,
-                                 GtkWidget *previous_toplevel)
-{
-  GtkWidget *window;
-
-  if (previous_toplevel)
-    g_signal_handlers_disconnect_by_func (previous_toplevel,
-                                          G_CALLBACK (resize_grip_visible_changed),
-                                          widget);
-  window = gtk_widget_get_toplevel (widget);
-  if (GTK_IS_WINDOW (window))
-    g_signal_connect (window, "notify::resize-grip-visible",
-                      G_CALLBACK (resize_grip_visible_changed), widget);
-
-  resize_grip_visible_changed (NULL, NULL, widget);
-}
-
-static void
-gtk_statusbar_realize (GtkWidget *widget)
-{
-  GTK_WIDGET_CLASS (gtk_statusbar_parent_class)->realize (widget);
-
-  resize_grip_visible_changed (NULL, NULL, widget);
-}
diff --git a/gtk/gtkwindow.c b/gtk/gtkwindow.c
index 32b958a..5f9f5c4 100644
--- a/gtk/gtkwindow.c
+++ b/gtk/gtkwindow.c
@@ -88,11 +88,6 @@
  * of the windowing system and allow the user to manipulate the window
  * (resize it, move it, close it,...).
  *
- * GTK+ also allows windows to have a resize grip (a small area in the lower
- * right or left corner) which can be clicked to resize the window. To
- * control whether a window has a resize grip, use
- * gtk_window_set_has_resize_grip().
- *
  * # GtkWindow as GtkBuildable
  *
  * The GtkWindow implementation of the GtkBuildable interface supports a
@@ -149,8 +144,6 @@ struct _GtkWindowPrivate
   GdkModifierType        mnemonic_modifier;
   GdkWindowTypeHint      gdk_type_hint;
 
-  GdkWindow *grip_window;
-
   gchar   *startup_id;
   gchar   *title;
   gchar   *wmclass_class;
@@ -219,10 +212,6 @@ struct _GtkWindowPrivate
                                            * GDK_WINDOW_TYPE_HINT_NORMAL
                                            */
   guint    urgent                    : 1;
-  guint    has_resize_grip           : 1;
-  guint    resize_grip_visible       : 1;  /* don't use, just for "resize-
-                                            * grip-visible" notification
-                                            */
   guint    gravity                   : 5; /* GdkGravity */
   guint    csd_requested             : 1;
   guint    client_decorated          : 1; /* Decorations drawn client-side */
@@ -414,10 +403,6 @@ static void gtk_window_move_focus         (GtkWidget         *widget,
                                            GtkDirectionType   dir);
 static void gtk_window_real_set_focus     (GtkWindow         *window,
                                           GtkWidget         *focus);
-static void gtk_window_direction_changed  (GtkWidget         *widget,
-                                           GtkTextDirection   prev_dir);
-static void gtk_window_state_changed      (GtkWidget         *widget,
-                                           GtkStateType       previous_state);
 
 static void gtk_window_real_activate_default (GtkWindow         *window);
 static void gtk_window_real_activate_focus   (GtkWindow         *window);
@@ -474,9 +459,6 @@ static GList   *icon_list_from_theme                  (GtkWidget    *widget,
                                                       const gchar  *name);
 static void     gtk_window_realize_icon               (GtkWindow    *window);
 static void     gtk_window_unrealize_icon             (GtkWindow    *window);
-static void     resize_grip_create_window             (GtkWindow    *window);
-static void     resize_grip_destroy_window            (GtkWindow    *window);
-static void     update_grip_visibility                (GtkWindow    *window);
 static void     update_window_buttons                 (GtkWindow    *window);
 static void     get_shadow_width                      (GtkWidget    *widget,
                                                        GtkBorder    *shadow_width);
@@ -681,8 +663,6 @@ gtk_window_class_init (GtkWindowClass *klass)
   widget_class->move_focus = gtk_window_move_focus;
   widget_class->draw = gtk_window_draw;
   widget_class->window_state_event = gtk_window_state_event;
-  widget_class->direction_changed = gtk_window_direction_changed;
-  widget_class->state_changed = gtk_window_state_changed;
   widget_class->style_updated = gtk_window_style_updated;
   widget_class->get_preferred_width = gtk_window_get_preferred_width;
   widget_class->get_preferred_width_for_height = gtk_window_get_preferred_width_for_height;
@@ -998,6 +978,8 @@ gtk_window_class_init (GtkWindowClass *klass)
    * #GtkWindow:resize-grip-visible to find out if the resize
    * grip is currently shown.
    *
+   * Deprecated: 3.14: Resize grips have been removed.
+   *
    * Since: 3.0
    */
   g_object_class_install_property (gobject_class,
@@ -1006,13 +988,15 @@ gtk_window_class_init (GtkWindowClass *klass)
                                                          P_("Resize grip"),
                                                          P_("Specifies whether the window should have a 
resize grip"),
                                                          TRUE,
-                                                         GTK_PARAM_READWRITE|G_PARAM_EXPLICIT_NOTIFY));
+                                                         
GTK_PARAM_READWRITE|G_PARAM_EXPLICIT_NOTIFY|G_PARAM_DEPRECATED));
 
   /**
    * GtkWindow:resize-grip-visible:
    *
    * Whether a corner resize grip is currently shown.
    *
+   * Deprecated: 3.14: Resize grips have been removed.
+   *
    * Since: 3.0
    */
   g_object_class_install_property (gobject_class,
@@ -1021,7 +1005,7 @@ gtk_window_class_init (GtkWindowClass *klass)
                                                          P_("Resize grip is visible"),
                                                          P_("Specifies whether the window's resize grip is 
visible."),
                                                          FALSE,
-                                                         GTK_PARAM_READABLE));
+                                                         GTK_PARAM_READABLE|G_PARAM_DEPRECATED));
 
 
   /**
@@ -1103,19 +1087,6 @@ gtk_window_class_init (GtkWindowClass *klass)
                                                              0, G_MAXINT,
                                                              20, GTK_PARAM_READWRITE));
 
-  gtk_widget_class_install_style_property (widget_class,
-                                           g_param_spec_int ("resize-grip-width",
-                                                             P_("Width of resize grip"),
-                                                             P_("Width of resize grip"),
-                                                             0, G_MAXINT, 16, GTK_PARAM_READWRITE));
-
-  gtk_widget_class_install_style_property (widget_class,
-                                           g_param_spec_int ("resize-grip-height",
-                                                             P_("Height of resize grip"),
-                                                             P_("Height of resize grip"),
-                                                             0, G_MAXINT, 16, GTK_PARAM_READWRITE));
-
-
   /**
    * GtkWindow:application:
    *
@@ -1539,7 +1510,6 @@ gtk_window_init (GtkWindow *window)
   priv->type_hint = GDK_WINDOW_TYPE_HINT_NORMAL;
   priv->startup_id = NULL;
   priv->initial_timestamp = GDK_CURRENT_TIME;
-  priv->has_resize_grip = TRUE;
   priv->mnemonics_visible = TRUE;
   priv->focus_visible = TRUE;
 
@@ -1680,7 +1650,7 @@ gtk_window_set_property (GObject      *object,
       gtk_window_set_attached_to (window, g_value_get_object (value));
       break;
     case PROP_HAS_RESIZE_GRIP:
-      gtk_window_set_has_resize_grip (window, g_value_get_boolean (value));
+      /* Do nothing. */
       break;
     case PROP_APPLICATION:
       gtk_window_set_application (window, g_value_get_object (value));
@@ -1801,10 +1771,10 @@ gtk_window_get_property (GObject      *object,
       g_value_set_object (value, gtk_window_get_attached_to (window));
       break;
     case PROP_HAS_RESIZE_GRIP:
-      g_value_set_boolean (value, priv->has_resize_grip);
+      g_value_set_boolean (value, FALSE);
       break;
     case PROP_RESIZE_GRIP_VISIBLE:
-      g_value_set_boolean (value, gtk_window_resize_grip_is_visible (window));
+      g_value_set_boolean (value, FALSE);
       break;
     case PROP_APPLICATION:
       g_value_set_object (value, gtk_window_get_application (window));
@@ -5832,9 +5802,6 @@ gtk_window_map (GtkWidget *widget)
 
   gdk_window_show (gdk_window);
 
-  if (priv->grip_window)
-    gdk_window_show (priv->grip_window);
-
   if (!disable_startup_notification)
     {
       /* Do we have a custom startup-notification id? */
@@ -6434,9 +6401,6 @@ gtk_window_realize (GtkWidget *widget)
   /* Icons */
   gtk_window_realize_icon (window);
 
-  if (priv->has_resize_grip)
-    resize_grip_create_window (window);
-
   link = priv->popovers;
 
   while (link)
@@ -6498,9 +6462,6 @@ gtk_window_unrealize (GtkWidget *widget)
   /* Icons */
   gtk_window_unrealize_icon (window);
 
-  if (priv->grip_window != NULL)
-    resize_grip_destroy_window (window);
-
   if (priv->border_window[0] != NULL)
     {
       for (i = 0; i < 8; i++)
@@ -6523,163 +6484,6 @@ gtk_window_unrealize (GtkWidget *widget)
   GTK_WIDGET_CLASS (gtk_window_parent_class)->unrealize (widget);
 }
 
-static GtkJunctionSides
-get_grip_junction (GtkWidget *widget)
-{
-  if (gtk_widget_get_direction (widget) == GTK_TEXT_DIR_LTR)
-    return GTK_JUNCTION_CORNER_BOTTOMRIGHT;
-  else
-    return GTK_JUNCTION_CORNER_BOTTOMLEFT;
-}
-
-static gboolean
-get_drag_edge (GtkWidget     *widget,
-               GdkWindowEdge *edge)
-{
-  GtkWindowPrivate *priv = GTK_WINDOW (widget)->priv;
-  gboolean hresizable;
-  gboolean vresizable;
-  GtkTextDirection dir;
-  GtkWindowGeometryInfo *info;
-
-  hresizable = TRUE;
-  vresizable = TRUE;
-
-  info = priv->geometry_info;
-  if (info)
-    {
-      GdkWindowHints flags = info->last.flags;
-      GdkGeometry *geometry = &info->last.geometry;
-
-      if ((flags & GDK_HINT_MIN_SIZE) && (flags & GDK_HINT_MAX_SIZE))
-        {
-          hresizable = geometry->min_width < geometry->max_width;
-          vresizable = geometry->min_height < geometry->max_height;
-        }
-    }
-
-  dir = gtk_widget_get_direction (widget);
-
-  if (hresizable && vresizable)
-    *edge = dir == GTK_TEXT_DIR_LTR ? GDK_WINDOW_EDGE_SOUTH_EAST : GDK_WINDOW_EDGE_SOUTH_WEST;
-  else if (hresizable)
-    *edge = dir == GTK_TEXT_DIR_LTR ? GDK_WINDOW_EDGE_EAST : GDK_WINDOW_EDGE_WEST;
-  else if (vresizable)
-    *edge = GDK_WINDOW_EDGE_SOUTH;
-  else
-    return FALSE;
-
-  return TRUE;
-}
-
-static void
-set_grip_cursor (GtkWindow *window)
-{
-  GtkWidget *widget = GTK_WIDGET (window);
-  GtkWindowPrivate *priv = window->priv;
-
-  if (priv->grip_window == NULL)
-    return;
-
-  if (gtk_widget_is_sensitive (widget))
-    {
-      GdkWindowEdge edge;
-      GdkDisplay *display;
-      GdkCursorType cursor_type;
-      GdkCursor *cursor;
-
-      cursor_type = GDK_LEFT_PTR;
-
-      if (get_drag_edge (widget, &edge))
-        {
-          switch (edge)
-            {
-            case GDK_WINDOW_EDGE_EAST:
-              cursor_type = GDK_RIGHT_SIDE;
-              break;
-            case GDK_WINDOW_EDGE_SOUTH_EAST:
-              cursor_type = GDK_BOTTOM_RIGHT_CORNER;
-              break;
-            case GDK_WINDOW_EDGE_SOUTH:
-              cursor_type = GDK_BOTTOM_SIDE;
-              break;
-            case GDK_WINDOW_EDGE_SOUTH_WEST:
-              cursor_type = GDK_BOTTOM_LEFT_CORNER;
-              break;
-            case GDK_WINDOW_EDGE_WEST:
-              cursor_type = GDK_LEFT_SIDE;
-              break;
-            default: ;
-            }
-        }
-
-      display = gtk_widget_get_display (widget);
-      cursor = gdk_cursor_new_for_display (display, cursor_type);
-      gdk_window_set_cursor (priv->grip_window, cursor);
-      g_object_unref (cursor);
-    }
-  else
-    gdk_window_set_cursor (priv->grip_window, NULL);
-}
-
-static void
-set_grip_shape (GtkWindow *window)
-{
-  GtkWindowPrivate *priv = window->priv;
-  cairo_region_t *region;
-  cairo_surface_t *surface;
-  cairo_t *cr;
-  double width, height;
-
-  if (priv->grip_window == NULL)
-    return;
-
-  width = gdk_window_get_width (priv->grip_window);
-  height = gdk_window_get_height (priv->grip_window);
-  surface = cairo_image_surface_create (CAIRO_FORMAT_A1, width, height);
-
-  cr = cairo_create (surface);
-  cairo_set_source_rgba (cr, 0.0, 0.0, 0.0, 0.0);
-  cairo_paint (cr);
-  cairo_set_source_rgba (cr, 0.0, 0.0, 0.0, 1.0);
-  if (get_grip_junction (GTK_WIDGET (window)) & GTK_JUNCTION_CORNER_BOTTOMRIGHT)
-    {
-      cairo_move_to (cr, width, 0.0);
-      cairo_line_to (cr, width, height);
-      cairo_line_to (cr, 0.0, height);
-    }
-  else
-    {
-      cairo_move_to (cr, 0.0, 0.0);
-      cairo_line_to (cr, width, height);
-      cairo_line_to (cr, 0.0, height);
-    }
-  cairo_close_path (cr);
-  cairo_fill (cr);
-  cairo_destroy (cr);
-  region = gdk_cairo_region_create_from_surface (surface);
-  cairo_surface_destroy (surface);
-
-  gdk_window_shape_combine_region (priv->grip_window, region, 0, 0);
-  cairo_region_destroy (region);
-}
-
-static void
-set_grip_position (GtkWindow *window)
-{
-  GtkWindowPrivate *priv = window->priv;
-  GdkRectangle rect;
-
-  if (priv->grip_window == NULL)
-    return;
-
-  gtk_window_get_resize_grip_area (window, &rect);
-  gdk_window_raise (priv->grip_window);
-  gdk_window_move_resize (priv->grip_window,
-                          rect.x, rect.y,
-                          rect.width, rect.height);
-}
-
 static void
 sum_borders (GtkBorder *one,
              GtkBorder *two)
@@ -7253,8 +7057,6 @@ _gtk_window_set_allocation (GtkWindow           *window,
         }
       else
         {
-          update_grip_visibility (window);
-          set_grip_position (window);
           update_border_windows (window);
         }
     }
@@ -7389,8 +7191,6 @@ gtk_window_state_event (GtkWidget           *widget,
   GtkWindow *window = GTK_WINDOW (widget);
   GtkWindowPrivate *priv = window->priv;
 
-  update_grip_visibility (window);
-
   if (event->changed_mask & GDK_WINDOW_STATE_FOCUSED)
     ensure_state_flag_backdrop (widget);
 
@@ -7424,40 +7224,12 @@ gtk_window_state_event (GtkWidget           *widget,
 }
 
 static void
-gtk_window_direction_changed (GtkWidget        *widget,
-                              GtkTextDirection  prev_dir)
-{
-  GtkWindow *window = GTK_WINDOW (widget);
-
-  set_grip_cursor (window);
-  set_grip_position (window);
-  set_grip_shape (window);
-}
-
-static void
-gtk_window_state_changed (GtkWidget    *widget,
-                          GtkStateType  previous_state)
-{
-  GtkWindow *window = GTK_WINDOW (widget);
-
-  update_grip_visibility (window);
-}
-
-static void
 gtk_window_style_updated (GtkWidget *widget)
 {
-  GtkWindow *window = GTK_WINDOW (widget);
-  GtkWindowPrivate *priv = window->priv;
   GdkRGBA transparent = { 0.0, 0.0, 0.0, 0.0 };
 
   GTK_WIDGET_CLASS (gtk_window_parent_class)->style_updated (widget);
 
-  if (priv->grip_window != NULL)
-    {
-      set_grip_position (window);
-      set_grip_shape (window);
-    }
-
   if (gtk_widget_get_realized (widget))
     {
       gdk_window_set_background_rgba (gtk_widget_get_window (widget),
@@ -7466,60 +7238,6 @@ gtk_window_style_updated (GtkWidget *widget)
     }
 }
 
-static void
-resize_grip_create_window (GtkWindow *window)
-{
-  GtkWidget *widget;
-  GtkWindowPrivate *priv;
-  GdkWindowAttr attributes;
-  gint attributes_mask;
-  GdkRectangle rect;
-  GdkRGBA transparent = {0, 0, 0, 0};
-
-  priv = window->priv;
-  widget = GTK_WIDGET (window);
-
-  g_return_if_fail (gtk_widget_get_realized (widget));
-  g_return_if_fail (priv->grip_window == NULL);
-
-  gtk_window_get_resize_grip_area (window, &rect);
-
-  attributes.x = rect.x;
-  attributes.y = rect.y;
-  attributes.width = rect.width;
-  attributes.height = rect.height;
-  attributes.window_type = GDK_WINDOW_CHILD;
-  attributes.wclass = GDK_INPUT_OUTPUT;
-  attributes.event_mask = gtk_widget_get_events (widget) |
-                          GDK_EXPOSURE_MASK |
-                          GDK_BUTTON_PRESS_MASK;
-
-  attributes_mask = GDK_WA_X | GDK_WA_Y;
-
-  priv->grip_window = gdk_window_new (gtk_widget_get_window (widget),
-                                      &attributes,
-                                      attributes_mask);
-  gdk_window_set_background_rgba (priv->grip_window, &transparent);
-
-  gtk_widget_register_window (widget, priv->grip_window);
-
-  gdk_window_raise (priv->grip_window);
-
-  set_grip_shape (window);
-  update_grip_visibility (window);
-}
-
-static void
-resize_grip_destroy_window (GtkWindow *window)
-{
-  GtkWindowPrivate *priv = window->priv;
-
-  gtk_widget_unregister_window (GTK_WIDGET (window), priv->grip_window);
-  gdk_window_destroy (priv->grip_window);
-  priv->grip_window = NULL;
-  update_grip_visibility (window);
-}
-
 /**
  * gtk_window_set_has_resize_grip:
  * @window: a #GtkWindow
@@ -7533,61 +7251,14 @@ resize_grip_destroy_window (GtkWindow *window)
  * resize grip is currently shown.
  *
  * Since: 3.0
+ *
+ * Deprecated: 3.14: Resize grips have been removed.
  */
 void
 gtk_window_set_has_resize_grip (GtkWindow *window,
                                 gboolean   value)
 {
-  GtkWidget *widget = GTK_WIDGET (window);
-  GtkWindowPrivate *priv = window->priv;
-
-  value = value != FALSE;
-
-  if (value != priv->has_resize_grip)
-    {
-      priv->has_resize_grip = value;
-      gtk_widget_queue_draw (widget);
-
-      if (gtk_widget_get_realized (widget) &&
-         gtk_widget_is_toplevel (widget))
-        {
-          if (priv->has_resize_grip && priv->grip_window == NULL)
-            resize_grip_create_window (window);
-          else if (!priv->has_resize_grip && priv->grip_window != NULL)
-            resize_grip_destroy_window (window);
-        }
-
-      g_object_notify (G_OBJECT (window), "has-resize-grip");
-    }
-}
-
-static void
-update_grip_visibility (GtkWindow *window)
-{
-  GtkWindowPrivate *priv = window->priv;
-  gboolean val;
-
-  val = gtk_window_resize_grip_is_visible (window);
-
-  if (priv->grip_window != NULL)
-    {
-      if (val)
-        {
-          gdk_window_show (priv->grip_window);
-          set_grip_cursor (window);
-        }
-      else
-        {
-          gdk_window_hide (priv->grip_window);
-        }
-    }
-
-  if (priv->resize_grip_visible != val)
-    {
-      priv->resize_grip_visible = val;
-
-      g_object_notify (G_OBJECT (window), "resize-grip-visible");
-    }
+  g_return_if_fail (GTK_IS_WINDOW (window));
 }
 
 /**
@@ -7599,42 +7270,15 @@ update_grip_visibility (GtkWindow *window)
  * Returns: %TRUE if a resize grip exists and is visible
  *
  * Since: 3.0
+ *
+ * Deprecated: 3.14: Resize grips have been removed.
  */
 gboolean
 gtk_window_resize_grip_is_visible (GtkWindow *window)
 {
-  GtkWidget *widget;
-  GtkWindowPrivate *priv;
-  GdkWindowEdge edge;
-
   g_return_val_if_fail (GTK_IS_WINDOW (window), FALSE);
 
-  priv = window->priv;
-  widget = GTK_WIDGET (window);
-
-  if (priv->type == GTK_WINDOW_POPUP)
-    return FALSE;
-
-  if (!priv->resizable)
-    return FALSE;
-
-  if (!gtk_widget_is_toplevel (widget))
-    return FALSE;
-
-  if (gtk_widget_get_realized (widget))
-    {
-      GdkWindowState state;
-
-      state = gdk_window_get_state (gtk_widget_get_window (widget));
-
-      if (state & GDK_WINDOW_STATE_MAXIMIZED || state & GDK_WINDOW_STATE_FULLSCREEN)
-        return FALSE;
-    }
-
-  if (!get_drag_edge (widget, &edge))
-    return FALSE;
-
-  return window->priv->has_resize_grip;
+  return FALSE;
 }
 
 /**
@@ -7646,13 +7290,16 @@ gtk_window_resize_grip_is_visible (GtkWindow *window)
  * Returns: %TRUE if the window has a resize grip
  *
  * Since: 3.0
+ *
+ * Deprecated: 3.14: Resize grips have been removed.
  */
 gboolean
 gtk_window_get_has_resize_grip (GtkWindow *window)
+
 {
   g_return_val_if_fail (GTK_IS_WINDOW (window), FALSE);
 
-  return window->priv->has_resize_grip;
+  return FALSE;
 }
 
 /**
@@ -7667,49 +7314,16 @@ gtk_window_get_has_resize_grip (GtkWindow *window)
  * Returns: %TRUE if the resize grip’s area was retrieved
  *
  * Since: 3.0
+ *
+ * Deprecated: 3.14: Resize grips have been removed.
  */
 gboolean
 gtk_window_get_resize_grip_area (GtkWindow    *window,
                                  GdkRectangle *rect)
 {
-  GtkWidget *widget = GTK_WIDGET (window);
-  GtkWindowPrivate *priv = window->priv;
-  GtkAllocation allocation;
-  gint grip_width;
-  gint grip_height;
-  GtkBorder window_border = { 0 };
-
   g_return_val_if_fail (GTK_IS_WINDOW (window), FALSE);
 
-  if (!priv->has_resize_grip)
-    return FALSE;
-
-  get_shadow_width (widget, &window_border);
-  gtk_widget_get_allocation (widget, &allocation);
-
-  gtk_widget_style_get (widget,
-                        "resize-grip-width", &grip_width,
-                        "resize-grip-height", &grip_height,
-                        NULL);
-
-  if (grip_width > allocation.width)
-    grip_width = allocation.width;
-
-  if (grip_height > allocation.height)
-    grip_height = allocation.height;
-
-  rect->width = grip_width;
-  rect->height = grip_height;
-  rect->y = allocation.y + allocation.height -
-    grip_height - window_border.bottom;
-
-  if (gtk_widget_get_direction (widget) == GTK_TEXT_DIR_LTR)
-    rect->x = allocation.x + allocation.width -
-      grip_width - window_border.right;
-  else
-    rect->x = allocation.x;
-
-  return TRUE;
+  return FALSE;
 }
 
 /* the accel_key and accel_mods fields of the key have to be setup
@@ -9765,26 +9379,6 @@ gtk_window_draw (GtkWidget *widget,
   if (GTK_WIDGET_CLASS (gtk_window_parent_class)->draw)
     ret = GTK_WIDGET_CLASS (gtk_window_parent_class)->draw (widget, cr);
 
-  if (priv->grip_window &&
-      gtk_cairo_should_draw_window (cr, priv->grip_window))
-    {
-      GdkRectangle rect;
-
-      gtk_style_context_save (context);
-      cairo_save (cr);
-
-      gtk_cairo_transform_to_window (cr, widget, priv->grip_window);
-      gtk_window_get_resize_grip_area (GTK_WINDOW (widget), &rect);
-
-      gtk_style_context_remove_class (context, GTK_STYLE_CLASS_BACKGROUND);
-      gtk_style_context_add_class (context, GTK_STYLE_CLASS_GRIP);
-      gtk_style_context_set_junction_sides (context, get_grip_junction (widget));
-      gtk_render_handle (context, cr, 0, 0, rect.width, rect.height);
-
-      cairo_restore (cr);
-      gtk_style_context_restore (context);
-    }
-
   return ret;
 }
 
@@ -10296,7 +9890,6 @@ gtk_window_set_resizable (GtkWindow *window,
     {
       priv->resizable = resizable;
 
-      update_grip_visibility (window);
       update_window_buttons (window);
 
       gtk_widget_queue_resize_no_redraw (GTK_WIDGET (window));
diff --git a/gtk/gtkwindow.h b/gtk/gtkwindow.h
index f6fef87..5c375dc 100644
--- a/gtk/gtkwindow.h
+++ b/gtk/gtkwindow.h
@@ -467,14 +467,14 @@ void            gtk_window_set_application      (GtkWindow          *window,
 
 /* Window grips
  */
-GDK_AVAILABLE_IN_ALL
+GDK_DEPRECATED_IN_3_14
 void     gtk_window_set_has_resize_grip    (GtkWindow    *window,
                                             gboolean      value);
-GDK_AVAILABLE_IN_ALL
+GDK_DEPRECATED_IN_3_14
 gboolean gtk_window_get_has_resize_grip    (GtkWindow    *window);
-GDK_AVAILABLE_IN_ALL
+GDK_DEPRECATED_IN_3_14
 gboolean gtk_window_resize_grip_is_visible (GtkWindow    *window);
-GDK_AVAILABLE_IN_ALL
+GDK_DEPRECATED_IN_3_14
 gboolean gtk_window_get_resize_grip_area   (GtkWindow    *window,
                                             GdkRectangle *rect);
 
diff --git a/gtk/resources/theme/Adwaita/_common.scss b/gtk/resources/theme/Adwaita/_common.scss
index 5d44f4a..16fbc72 100644
--- a/gtk/resources/theme/Adwaita/_common.scss
+++ b/gtk/resources/theme/Adwaita/_common.scss
@@ -33,8 +33,6 @@
 
   -GtkWidget-focus-padding: 2;    // FIXME: do we still need these?
   -GtkWidget-focus-line-width: 1; //
-  -GtkWindow-resize-grip-width: 0;
-  -GtkWindow-resize-grip-height: 0;
 
   -GtkDialog-button-spacing: 4;
   -GtkDialog-action-area-border: 0;
diff --git a/gtk/resources/theme/Adwaita/gtk-contained-dark.css 
b/gtk/resources/theme/Adwaita/gtk-contained-dark.css
index feb8d4d..b1ef1b7 100644
--- a/gtk/resources/theme/Adwaita/gtk-contained-dark.css
+++ b/gtk/resources/theme/Adwaita/gtk-contained-dark.css
@@ -50,8 +50,6 @@
   -GtkWidget-visited-link-color: #184472;
   -GtkWidget-focus-padding: 2;
   -GtkWidget-focus-line-width: 1;
-  -GtkWindow-resize-grip-width: 0;
-  -GtkWindow-resize-grip-height: 0;
   -GtkDialog-button-spacing: 4;
   -GtkDialog-action-area-border: 0;
   -GtkStatusbar-shadow-type: none;
diff --git a/gtk/resources/theme/Adwaita/gtk-contained.css b/gtk/resources/theme/Adwaita/gtk-contained.css
index 6961c23..c0672ce 100644
--- a/gtk/resources/theme/Adwaita/gtk-contained.css
+++ b/gtk/resources/theme/Adwaita/gtk-contained.css
@@ -50,8 +50,6 @@
   -GtkWidget-visited-link-color: #2a76c6;
   -GtkWidget-focus-padding: 2;
   -GtkWidget-focus-line-width: 1;
-  -GtkWindow-resize-grip-width: 0;
-  -GtkWindow-resize-grip-height: 0;
   -GtkDialog-button-spacing: 4;
   -GtkDialog-action-area-border: 0;
   -GtkStatusbar-shadow-type: none;
diff --git a/gtk/resources/theme/Raleigh/gtk-default.css b/gtk/resources/theme/Raleigh/gtk-default.css
index 24b0335..e699785 100644
--- a/gtk/resources/theme/Raleigh/gtk-default.css
+++ b/gtk/resources/theme/Raleigh/gtk-default.css
@@ -23,8 +23,6 @@
   color: @fg_color;
   border-color: shade (@bg_color, 0.6);
   padding: 2px;
-  -GtkWindow-resize-grip-width: 0;
-  -GtkWindow-resize-grip-height: 0;
   -GtkWindow-decoration-button-layout: 'icon:minimize,maximize,close';
 }
 
diff --git a/tests/styleexamples.c b/tests/styleexamples.c
index d55ea2d..a20e2d6 100644
--- a/tests/styleexamples.c
+++ b/tests/styleexamples.c
@@ -324,7 +324,6 @@ int main (int argc, char *argv[])
     what = "check";
 
   window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
-  gtk_window_set_has_resize_grip (GTK_WINDOW (window), FALSE);
   ebox = gtk_event_box_new ();
   gtk_event_box_set_visible_window (GTK_EVENT_BOX (ebox), TRUE);
   gtk_container_add (GTK_CONTAINER (window), ebox);
diff --git a/testsuite/gtk/testing.c b/testsuite/gtk/testing.c
index ed67615..7d59bd1 100644
--- a/testsuite/gtk/testing.c
+++ b/testsuite/gtk/testing.c
@@ -227,8 +227,6 @@ test_spin_button_arrows (void)
   gboolean simsuccess;
   double oldval, newval;
 
-  gtk_window_set_has_resize_grip (GTK_WINDOW (window), FALSE);
-
   child = gtk_bin_get_child (GTK_BIN (window));
   gtk_container_add (GTK_CONTAINER (child), spinner);
   gtk_widget_show (spinner);
diff --git a/testsuite/reftests/toplevel-vs-popup.ui b/testsuite/reftests/toplevel-vs-popup.ui
index c446ea9..3707d7b 100644
--- a/testsuite/reftests/toplevel-vs-popup.ui
+++ b/testsuite/reftests/toplevel-vs-popup.ui
@@ -3,7 +3,6 @@
   <!-- interface-requires gtk+ 3.0 -->
   <object class="GtkWindow" id="window1">
     <property name="can_focus">False</property>
-    <property name="has_resize_grip">False</property>
     <child>
       <object class="GtkLabel" id="label1">
         <property name="visible">True</property>



[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]