X-Git-Url: https://pintos-os.org/cgi-bin/gitweb.cgi?a=blobdiff_plain;ds=sidebyside;f=lib%2Fgtk-contrib%2Fgtkxpaned.c;h=d5b9c843e57d5837d3a0fe2ebe4e470d07661e3c;hb=d5a566a2900f69ab51c7dae78cd7810a4204589a;hp=315f370caf9fd0113b0bfb0bd161b152b5b64064;hpb=3c2eb9f19111e4491fe91623263cb64a0350b536;p=pspp diff --git a/lib/gtk-contrib/gtkxpaned.c b/lib/gtk-contrib/gtkxpaned.c index 315f370caf..d5b9c843e5 100644 --- a/lib/gtk-contrib/gtkxpaned.c +++ b/lib/gtk-contrib/gtkxpaned.c @@ -1,5 +1,5 @@ /******************************************************************************* - **3456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 + **3456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 ** 10 20 30 40 50 60 70 80 ** ** library for GtkXPaned-widget, a 2x2 grid-like variation of GtkPaned of gtk+ @@ -529,10 +529,10 @@ gtk_xpaned_class_init (GtkXPanedClass * class) /** * GtkPaned:resize: * - * The "resize" child property determines whether the child expands and + * The "resize" child property determines whether the child expands and * shrinks along with the paned widget. - * - * Since: 2.4 + * + * Since: 2.4 */ gtk_container_class_install_child_property (container_class, CHILD_PROP_RESIZE, @@ -545,10 +545,10 @@ gtk_xpaned_class_init (GtkXPanedClass * class) /** * GtkPaned:shrink: * - * The "shrink" child property determines whether the child can be made + * The "shrink" child property determines whether the child can be made * smaller than its requisition. - * - * Since: 2.4 + * + * Since: 2.4 */ gtk_container_class_install_child_property (container_class, CHILD_PROP_SHRINK, @@ -952,7 +952,7 @@ gtk_xpaned_size_allocate (GtkWidget * widget, GtkAllocation * allocation) xpaned->handle_pos_middle.height); } - /* Now allocate the childen, making sure, when resizing not to + /* Now allocate the children, making sure, when resizing not to * overlap the windows */ if (gtk_widget_get_mapped (widget)) @@ -1317,13 +1317,6 @@ gtk_xpaned_realize (GtkWidget * widget) g_object_unref (attributes_south.cursor); g_object_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); - } - - if (xpaned->top_left_child && gtk_widget_get_visible (xpaned->top_left_child) && xpaned->top_right_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; } @@ -2091,9 +2014,9 @@ gtk_xpaned_forall (GtkContainer * container, /** * gtk_xpaned_get_position_x: * @paned: a #GtkXPaned widget - * + * * Obtains the x-position of the divider. - * + * * Return value: x-position of the divider **/ gint @@ -2107,9 +2030,9 @@ gtk_xpaned_get_position_x (GtkXPaned * xpaned) /** * gtk_xpaned_get_position_y: * @paned: a #GtkXPaned widget - * + * * Obtains the y-position of the divider. - * + * * Return value: y-position of the divider **/ gint @@ -2125,7 +2048,7 @@ gtk_xpaned_get_position_y (GtkXPaned * xpaned) * @paned: a #GtkXPaned widget * @xposition: pixel x-position of divider, a negative values * of a component mean that the position is unset. - * + * * Sets the x-position of the divider between the four panes. **/ void @@ -2174,7 +2097,7 @@ gtk_xpaned_set_position_x (GtkXPaned * xpaned, gint xposition) * @paned: a #GtkXPaned widget * @yposition: pixel y-position of divider, a negative values * of a component mean that the position is unset. - * + * * Sets the y-position of the divider between the four panes. **/ void @@ -2249,9 +2172,9 @@ gtk_xpaned_fetch_unmaximized_y (GtkXPaned * xpaned) /** * gtk_xpaned_get_top_left_child: * @xpaned: a #GtkXPaned widget - * + * * Obtains the top-left child of the xpaned widget. - * + * * Return value: top-left child, or %NULL if it is not set. * * Since: 2.4 @@ -2267,9 +2190,9 @@ gtk_xpaned_get_top_left_child (GtkXPaned * xpaned) /** * gtk_xpaned_get_top_right_child: * @xpaned: a #GtkXPaned widget - * + * * Obtains the top-right child of the xpaned widget. - * + * * Return value: top-right child, or %NULL if it is not set. * * Since: 2.4 @@ -2285,9 +2208,9 @@ gtk_xpaned_get_top_right_child (GtkXPaned * xpaned) /** * gtk_xpaned_get_bottom_left_child: * @xpaned: a #GtkXPaned widget - * + * * Obtains the bottom-left child of the xpaned widget. - * + * * Return value: bottom-left child, or %NULL if it is not set. * * Since: 2.4 @@ -2303,9 +2226,9 @@ gtk_xpaned_get_bottom_left_child (GtkXPaned * xpaned) /** * gtk_xpaned_get_bottom_right_child: * @xpaned: a #GtkXPaned widget - * + * * Obtains the bottom-right child of the xpaned widget. - * + * * Return value: bottom-right child, or %NULL if it is not set. * * Since: 2.4