]> Pileus Git - ~andy/gtk/commitdiff
Don't start a drag if we are not resizable
authorMatthias Clasen <mclasen@redhat.com>
Wed, 13 Oct 2010 12:28:21 +0000 (08:28 -0400)
committerMatthias Clasen <mclasen@redhat.com>
Wed, 13 Oct 2010 12:31:06 +0000 (08:31 -0400)
This was caused by get_drag_edge() returning -1 to mean 'no drag',
but callers didn't really pay attention. Change get_drag_edge()
to return a boolean instead.

gtk/gtkwindow.c

index 14457523e80ea458b8c240476a864861b919fec7..cae6a8080dc1f21d7bfef8074bf965eced76540e 100644 (file)
@@ -5015,15 +5015,15 @@ get_grip_edge (GtkWidget *widget)
          : GDK_WINDOW_EDGE_SOUTH_WEST;
 }
 
-static GdkWindowEdge
-get_drag_edge (GtkWidget *widget)
+static gboolean
+get_drag_edge (GtkWidget     *widget,
+               GdkWindowEdge *edge)
 {
   GdkGeometry geometry;
   guint flags;
   gboolean hresizable;
   gboolean vresizable;
   GtkTextDirection dir;
-  GdkWindowEdge edge;
 
   gtk_window_compute_hints (GTK_WINDOW (widget), &geometry, &flags);
 
@@ -5041,15 +5041,15 @@ get_drag_edge (GtkWidget *widget)
   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;
+    *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;
+    *edge = dir == GTK_TEXT_DIR_LTR ? GDK_WINDOW_EDGE_EAST : GDK_WINDOW_EDGE_WEST;
   else if (vresizable)
-    edge = GDK_WINDOW_EDGE_SOUTH;
+    *edge = GDK_WINDOW_EDGE_SOUTH;
   else
-    edge = (GdkWindowEdge)-1;
+    return FALSE;
 
-  return edge;
+  return TRUE;
 }
 
 static void
@@ -5057,37 +5057,40 @@ set_grip_cursor (GtkWindow *window)
 {
   GtkWidget *widget = GTK_WIDGET (window);
   GtkWindowPrivate *priv = window->priv;
-  GdkWindowEdge edge;
-  GdkDisplay *display;
-  GdkCursorType cursor_type;
-  GdkCursor *cursor;
 
   if (priv->grip_window == NULL)
     return;
 
   if (gtk_widget_is_sensitive (widget))
     {
-      edge = get_drag_edge (widget);
-      switch (edge)
+      GdkWindowEdge edge;
+      GdkDisplay *display;
+      GdkCursorType cursor_type;
+      GdkCursor *cursor;
+
+      cursor_type = GDK_LEFT_PTR;
+
+      if (get_drag_edge (widget, &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:
-          cursor_type = GDK_LEFT_PTR;
-          break;
+          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);
@@ -5718,15 +5721,17 @@ gtk_window_button_press_event (GtkWidget *widget,
                                GdkEventButton *event)
 {
   GtkWindowPrivate *priv = GTK_WINDOW (widget)->priv;
+  GdkWindowEdge edge;
 
   if (event->window == priv->grip_window)
     {
-      gtk_window_begin_resize_drag (GTK_WINDOW (widget),
-                                    get_drag_edge (widget),
-                                    event->button,
-                                    event->x_root,
-                                    event->y_root,
-                                    event->time);
+      if (get_drag_edge (widget, &edge))
+        gtk_window_begin_resize_drag (GTK_WINDOW (widget),
+                                      edge,
+                                      event->button,
+                                      event->x_root,
+                                      event->y_root,
+                                      event->time);
 
       return TRUE;
     }