X-Git-Url: http://pileus.org/git/?a=blobdiff_plain;f=gtk%2Fgtkpaned.c;h=fabbc25d7f0bc2c70a69316151ef75c2095061ed;hb=9d0febc9a64a5bfb0fcfc3a88de4757f6c1ff090;hp=e2e761f7de5002514faea5f83a06060f406ce43e;hpb=52711beba57239aadde460d49d492ef6951f9335;p=~andy%2Fgtk diff --git a/gtk/gtkpaned.c b/gtk/gtkpaned.c index e2e761f7d..fabbc25d7 100644 --- a/gtk/gtkpaned.c +++ b/gtk/gtkpaned.c @@ -12,9 +12,7 @@ * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. + * License along with this library. If not, see . */ /* @@ -1291,12 +1289,14 @@ gtk_paned_create_child_window (GtkPaned *paned, gtk_widget_get_allocation (widget, &allocation); if (priv->orientation == GTK_ORIENTATION_HORIZONTAL && - child == priv->child2) + child == priv->child2 && priv->child1 && + gtk_widget_get_visible (priv->child1)) attributes.x = priv->handle_pos.x + handle_size; else attributes.x = allocation.x; if (priv->orientation == GTK_ORIENTATION_VERTICAL && - child == priv->child2) + child == priv->child2 && priv->child1 && + gtk_widget_get_visible (priv->child1)) attributes.y = priv->handle_pos.y + handle_size; else attributes.y = allocation.y; @@ -1350,8 +1350,7 @@ gtk_paned_realize (GtkWidget *widget) GDK_BUTTON_RELEASE_MASK | GDK_ENTER_NOTIFY_MASK | GDK_LEAVE_NOTIFY_MASK | - GDK_POINTER_MOTION_MASK | - GDK_POINTER_MOTION_HINT_MASK); + GDK_POINTER_MOTION_MASK); attributes_mask = GDK_WA_X | GDK_WA_Y; if (gtk_widget_is_sensitive (widget)) { @@ -1518,7 +1517,10 @@ is_rtl (GtkPaned *paned) } static void -update_drag (GtkPaned *paned) +update_drag (GtkPaned *paned, + /* relative to priv->handle */ + int xpos, + int ypos) { GtkPanedPrivate *priv = paned->priv; GtkAllocation allocation; @@ -1526,11 +1528,18 @@ update_drag (GtkPaned *paned) gint pos; gint handle_size; gint size; + gint x, y; + gdk_window_get_position (priv->handle, &x, &y); + gtk_widget_get_allocation (widget, &allocation); if (priv->orientation == GTK_ORIENTATION_HORIZONTAL) - gtk_widget_get_pointer (widget, &pos, NULL); + { + pos = xpos + x - allocation.x; + } else - gtk_widget_get_pointer (widget, NULL, &pos); + { + pos = ypos + y - allocation.y; + } pos -= priv->drag_pos; @@ -1540,7 +1549,6 @@ update_drag (GtkPaned *paned) "handle-size", &handle_size, NULL); - gtk_widget_get_allocation (widget, &allocation); size = allocation.width - pos - handle_size; } else @@ -1562,7 +1570,7 @@ gtk_paned_enter (GtkWidget *widget, GtkPanedPrivate *priv = paned->priv; if (priv->in_drag) - update_drag (paned); + update_drag (paned, event->x, event->y); else { priv->handle_prelit = TRUE; @@ -1584,7 +1592,7 @@ gtk_paned_leave (GtkWidget *widget, GtkPanedPrivate *priv = paned->priv; if (priv->in_drag) - update_drag (paned); + update_drag (paned, event->x, event->y); else { priv->handle_prelit = FALSE; @@ -1624,15 +1632,14 @@ gtk_paned_button_press (GtkWidget *widget, GtkPanedPrivate *priv = paned->priv; if (!priv->in_drag && - (event->window == priv->handle) && (event->button == 1)) + (event->window == priv->handle) && (event->button == GDK_BUTTON_PRIMARY)) { /* 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_device_grab (event->device, priv->handle, GDK_OWNERSHIP_WINDOW, FALSE, - GDK_POINTER_MOTION_HINT_MASK - | GDK_BUTTON1_MOTION_MASK + GDK_BUTTON1_MOTION_MASK | GDK_BUTTON_RELEASE_MASK | GDK_ENTER_NOTIFY_MASK | GDK_LEAVE_NOTIFY_MASK, @@ -1727,7 +1734,7 @@ gtk_paned_button_release (GtkWidget *widget, GtkPaned *paned = GTK_PANED (widget); GtkPanedPrivate *priv = paned->priv; - if (priv->in_drag && (event->button == 1)) + if (priv->in_drag && (event->button == GDK_BUTTON_PRIMARY)) { stop_drag (paned); @@ -1746,7 +1753,7 @@ gtk_paned_motion (GtkWidget *widget, if (priv->in_drag) { - update_drag (paned); + update_drag (paned, event->x, event->y); return TRUE; }