gtkxpaned: Avoid deprecated gdk_pointer_grab(), gdk_display_pointer_ungrab().
[pspp] / lib / gtk-contrib / gtkxpaned.c
index 52be74adaafdb1de9878449118431b4a83b1c07b..9be83311f0f19b7562a8d8332c0c6930f43e7a01 100644 (file)
@@ -1311,18 +1311,11 @@ gtk_xpaned_realize (GtkWidget * widget)
   gdk_window_set_user_data (xpaned->handle_south, xpaned);
   gdk_window_set_user_data (xpaned->handle_middle, xpaned);
 
-  gdk_cursor_unref (attributes_east.cursor);
-  gdk_cursor_unref (attributes_west.cursor);
-  gdk_cursor_unref (attributes_north.cursor);
-  gdk_cursor_unref (attributes_south.cursor);
-  gdk_cursor_unref (attributes_middle.cursor);
-
-  {
-  GtkStyle *style = gtk_widget_get_style (widget);
-  style = gtk_style_attach (style, gtk_widget_get_window (widget));
-  gtk_widget_set_style (widget, style);
-  }
-  
+  g_object_unref (attributes_east.cursor);
+  g_object_unref (attributes_west.cursor);
+  g_object_unref (attributes_north.cursor);
+  g_object_unref (attributes_south.cursor);
+  g_object_unref (attributes_middle.cursor);
 
   if (xpaned->top_left_child
       && gtk_widget_get_visible (xpaned->top_left_child)
@@ -1442,44 +1435,18 @@ gtk_xpaned_draw (GtkWidget * widget, cairo_t *cr)
       && xpaned->bottom_right_child
       && gtk_widget_get_visible (xpaned->bottom_right_child))
     {
-      GtkStateType state;
+      GtkStyleContext *context;
 
-      if (gtk_widget_is_focus (widget))
-        state = GTK_STATE_SELECTED;
-      else if (xpaned->handle_prelit)
-        state = GTK_STATE_PRELIGHT;
-      else
-        state = gtk_widget_get_state (widget);
-
-      gtk_paint_handle (gtk_widget_get_style (widget),
-                        cr,
-                        state,
-                        GTK_SHADOW_NONE,
-                        widget,
-                        "paned",
-                        xpaned->handle_pos_east.x - handle_size - 256 / 2,
-                        xpaned->handle_pos_west.y + 1,
-                        256 + handle_size, handle_size - 2,
-                        /*xpaned->handle_pos_west.x,
-                          xpaned->handle_pos_west.y + 1,
-                          xpaned->handle_pos_west.width + handle_size + xpaned->handle_pos_east.width,
-                          handle_size - 2, */
-                        GTK_ORIENTATION_HORIZONTAL);
-
-      gtk_paint_handle (gtk_widget_get_style (widget),
-                        cr,
-                        state,
-                        GTK_SHADOW_NONE,
-                        widget,
-                        "paned",
-                        xpaned->handle_pos_north.x + 1,
-                        xpaned->handle_pos_south.y - handle_size - 256 / 2,
-                        handle_size - 2, 256 + handle_size,
-                        /*xpaned->handle_pos_north.x + 1,
-                          xpaned->handle_pos_north.y,
-                          handle_size - 2,
-                          xpaned->handle_pos_north.height + handle_size + xpaned->handle_pos_south.height, */
-                        GTK_ORIENTATION_VERTICAL);
+      context = gtk_widget_get_style_context (widget);
+      gtk_render_handle (context, cr,
+                         xpaned->handle_pos_east.x - handle_size - 256 / 2,
+                         xpaned->handle_pos_west.y + 1,
+                         256 + handle_size, handle_size - 2);
+
+      gtk_render_handle (context, cr,
+                         xpaned->handle_pos_north.x + 1,
+                         xpaned->handle_pos_south.y - handle_size - 256 / 2,
+                         handle_size - 2, 256 + handle_size);
     }
 
   /* Chain up to draw children */
@@ -1501,12 +1468,23 @@ static void
 update_drag (GtkXPaned * xpaned)
 {
   GdkPoint pos;
+  GtkWidget *widget = GTK_WIDGET (xpaned);
   gint handle_size;
   GtkRequisition size;
   GtkAllocation allocation;
-  gtk_widget_get_allocation (GTK_WIDGET (xpaned), &allocation);
 
-  gtk_widget_get_pointer (GTK_WIDGET (xpaned), &pos.x, &pos.y);
+  gtk_widget_get_allocation (widget, &allocation);
+
+  gdk_window_get_device_position (gtk_widget_get_window (widget),
+                                  gdk_device_manager_get_client_pointer (
+                                    gdk_display_get_device_manager (
+                                      gtk_widget_get_display (widget))),
+                                  &pos.x, &pos.y, NULL);
+  if (!gtk_widget_get_has_window (widget))
+    {
+      pos.x -= allocation.x;
+      pos.y -= allocation.y;
+    }
 
   if (xpaned->in_drag_vert)
     {
@@ -1514,8 +1492,7 @@ update_drag (GtkXPaned * xpaned)
 
       if (is_rtl (xpaned))
         {
-          gtk_widget_style_get (GTK_WIDGET (xpaned),
-                                "handle-size", &handle_size, NULL);
+          gtk_widget_style_get (widget, "handle-size", &handle_size, NULL);
 
           size.height = allocation.height - pos.y - handle_size;
         }
@@ -1539,8 +1516,7 @@ update_drag (GtkXPaned * xpaned)
 
       if (is_rtl (xpaned))
         {
-          gtk_widget_style_get (GTK_WIDGET (xpaned),
-                                "handle-size", &handle_size, NULL);
+          gtk_widget_style_get (widget, "handle-size", &handle_size, NULL);
 
           size.width = allocation.width - pos.x - handle_size;
         }
@@ -1565,8 +1541,7 @@ update_drag (GtkXPaned * xpaned)
 
       if (is_rtl (xpaned))
         {
-          gtk_widget_style_get (GTK_WIDGET (xpaned),
-                                "handle-size", &handle_size, NULL);
+          gtk_widget_style_get (widget, "handle-size", &handle_size, NULL);
 
           size.width = allocation.width - pos.x - handle_size;
           size.height = allocation.height - pos.y - handle_size;
@@ -1701,6 +1676,22 @@ gtk_xpaned_focus (GtkWidget * widget, GtkDirectionType direction)
   return retval;
 }
 
+static void
+gtk_xpaned_button_press_grab (GdkWindow *handle, GdkEventButton *event)
+{
+  /* We need a server grab here, not gtk_grab_add(), since
+   * we don't want to pass events on to the widget's children */
+  gdk_device_grab (event->device, handle,
+                   GDK_OWNERSHIP_NONE,
+                   FALSE,
+                   (GDK_POINTER_MOTION_HINT_MASK
+                    | GDK_BUTTON1_MOTION_MASK
+                    | GDK_BUTTON_RELEASE_MASK
+                    | GDK_ENTER_NOTIFY_MASK
+                    | GDK_LEAVE_NOTIFY_MASK),
+                   NULL, event->time);
+}
+
 static gboolean
 gtk_xpaned_button_press (GtkWidget * widget, GdkEventButton * event)
 {
@@ -1722,20 +1713,7 @@ gtk_xpaned_button_press (GtkWidget * widget, GdkEventButton * event)
       event->window == xpaned->handle_middle && event->button == 1)
     {
       xpaned->in_drag_vert_and_horiz = TRUE;
-
-      /* We need a server grab here, not gtk_grab_add(), since
-       * we don't want to pass events on to the widget's children */
-      if (gdk_pointer_grab (xpaned->handle_middle,
-                            FALSE,
-                            GDK_POINTER_MOTION_HINT_MASK
-                            | GDK_BUTTON1_MOTION_MASK
-                            | GDK_BUTTON_RELEASE_MASK
-                            | GDK_ENTER_NOTIFY_MASK
-                            | GDK_LEAVE_NOTIFY_MASK,
-                            NULL, NULL, event->time) == GDK_GRAB_SUCCESS)
-        {
-        }
-
+      gtk_xpaned_button_press_grab (xpaned->handle_middle, event);
       xpaned->drag_pos.x = event->x;
       xpaned->drag_pos.y = event->y;
 
@@ -1749,20 +1727,7 @@ gtk_xpaned_button_press (GtkWidget * widget, GdkEventButton * event)
            event->window != xpaned->handle_middle && event->button == 1)
     {
       xpaned->in_drag_vert = TRUE;
-
-      /* We need a server grab here, not gtk_grab_add(), since
-       * we don't want to pass events on to the widget's children */
-      if (gdk_pointer_grab (xpaned->handle_east,
-                            FALSE,
-                            GDK_POINTER_MOTION_HINT_MASK
-                            | GDK_BUTTON1_MOTION_MASK
-                            | GDK_BUTTON_RELEASE_MASK
-                            | GDK_ENTER_NOTIFY_MASK
-                            | GDK_LEAVE_NOTIFY_MASK,
-                            NULL, NULL, event->time) == GDK_GRAB_SUCCESS)
-        {
-        }
-
+      gtk_xpaned_button_press_grab (xpaned->handle_east, event);
       xpaned->drag_pos.y = event->y;
 
       return TRUE;
@@ -1775,20 +1740,7 @@ gtk_xpaned_button_press (GtkWidget * widget, GdkEventButton * event)
            event->window != xpaned->handle_middle && event->button == 1)
     {
       xpaned->in_drag_vert = TRUE;
-
-      /* We need a server grab here, not gtk_grab_add(), since
-       * we don't want to pass events on to the widget's children */
-      if (gdk_pointer_grab (xpaned->handle_west,
-                            FALSE,
-                            GDK_POINTER_MOTION_HINT_MASK
-                            | GDK_BUTTON1_MOTION_MASK
-                            | GDK_BUTTON_RELEASE_MASK
-                            | GDK_ENTER_NOTIFY_MASK
-                            | GDK_LEAVE_NOTIFY_MASK,
-                            NULL, NULL, event->time) == GDK_GRAB_SUCCESS)
-        {
-        }
-
+      gtk_xpaned_button_press_grab (xpaned->handle_west, event);
       xpaned->drag_pos.y = event->y;
 
       return TRUE;
@@ -1801,20 +1753,7 @@ gtk_xpaned_button_press (GtkWidget * widget, GdkEventButton * event)
            event->window != xpaned->handle_middle && event->button == 1)
     {
       xpaned->in_drag_horiz = TRUE;
-
-      /* We need a server grab here, not gtk_grab_add(), since
-       * we don't want to pass events on to the widget's children */
-      if (gdk_pointer_grab (xpaned->handle_north,
-                            FALSE,
-                            GDK_POINTER_MOTION_HINT_MASK
-                            | GDK_BUTTON1_MOTION_MASK
-                            | GDK_BUTTON_RELEASE_MASK
-                            | GDK_ENTER_NOTIFY_MASK
-                            | GDK_LEAVE_NOTIFY_MASK,
-                            NULL, NULL, event->time) == GDK_GRAB_SUCCESS)
-        {
-        }
-
+      gtk_xpaned_button_press_grab (xpaned->handle_north, event);
       xpaned->drag_pos.x = event->x;
 
       return TRUE;
@@ -1827,20 +1766,7 @@ gtk_xpaned_button_press (GtkWidget * widget, GdkEventButton * event)
            event->window != xpaned->handle_middle && event->button == 1)
     {
       xpaned->in_drag_horiz = TRUE;
-
-      /* We need a server grab here, not gtk_grab_add(), since
-       * we don't want to pass events on to the widget's children */
-      if (gdk_pointer_grab (xpaned->handle_south,
-                            FALSE,
-                            GDK_POINTER_MOTION_HINT_MASK
-                            | GDK_BUTTON1_MOTION_MASK
-                            | GDK_BUTTON_RELEASE_MASK
-                            | GDK_ENTER_NOTIFY_MASK
-                            | GDK_LEAVE_NOTIFY_MASK,
-                            NULL, NULL, event->time) == GDK_GRAB_SUCCESS)
-        {
-        }
-
+      gtk_xpaned_button_press_grab (xpaned->handle_south, event);
       xpaned->drag_pos.x = event->x;
 
       return TRUE;
@@ -1858,8 +1784,7 @@ gtk_xpaned_button_release (GtkWidget * widget, GdkEventButton * event)
       xpaned->in_drag_vert = FALSE;
       xpaned->drag_pos.y = -1;
       xpaned->position_set = TRUE;
-      gdk_display_pointer_ungrab (gtk_widget_get_display (widget),
-                                  event->time);
+      gdk_device_ungrab (event->device, event->time);
       return TRUE;
     }
   else if (xpaned->in_drag_horiz && (event->button == 1))
@@ -1867,8 +1792,7 @@ gtk_xpaned_button_release (GtkWidget * widget, GdkEventButton * event)
       xpaned->in_drag_horiz = FALSE;
       xpaned->drag_pos.x = -1;
       xpaned->position_set = TRUE;
-      gdk_display_pointer_ungrab (gtk_widget_get_display (widget),
-                                  event->time);
+      gdk_device_ungrab (event->device, event->time);
       return TRUE;
     }
   else if (xpaned->in_drag_vert_and_horiz && (event->button == 1))
@@ -1877,8 +1801,7 @@ gtk_xpaned_button_release (GtkWidget * widget, GdkEventButton * event)
       xpaned->drag_pos.x = -1;
       xpaned->drag_pos.y = -1;
       xpaned->position_set = TRUE;
-      gdk_display_pointer_ungrab (gtk_widget_get_display (widget),
-                                  event->time);
+      gdk_device_ungrab (event->device, event->time);
       return TRUE;
     }