Don't start a drag if we are not resizable

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.
This commit is contained in:
Matthias Clasen 2010-10-13 08:28:21 -04:00
parent 803233cc14
commit 5e1d8814ca

View File

@ -5015,15 +5015,15 @@ get_grip_edge (GtkWidget *widget)
: GDK_WINDOW_EDGE_SOUTH_WEST; : GDK_WINDOW_EDGE_SOUTH_WEST;
} }
static GdkWindowEdge static gboolean
get_drag_edge (GtkWidget *widget) get_drag_edge (GtkWidget *widget,
GdkWindowEdge *edge)
{ {
GdkGeometry geometry; GdkGeometry geometry;
guint flags; guint flags;
gboolean hresizable; gboolean hresizable;
gboolean vresizable; gboolean vresizable;
GtkTextDirection dir; GtkTextDirection dir;
GdkWindowEdge edge;
gtk_window_compute_hints (GTK_WINDOW (widget), &geometry, &flags); gtk_window_compute_hints (GTK_WINDOW (widget), &geometry, &flags);
@ -5041,15 +5041,15 @@ get_drag_edge (GtkWidget *widget)
dir = gtk_widget_get_direction (widget); dir = gtk_widget_get_direction (widget);
if (hresizable && vresizable) 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) 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) else if (vresizable)
edge = GDK_WINDOW_EDGE_SOUTH; *edge = GDK_WINDOW_EDGE_SOUTH;
else else
edge = (GdkWindowEdge)-1; return FALSE;
return edge; return TRUE;
} }
static void static void
@ -5057,17 +5057,21 @@ set_grip_cursor (GtkWindow *window)
{ {
GtkWidget *widget = GTK_WIDGET (window); GtkWidget *widget = GTK_WIDGET (window);
GtkWindowPrivate *priv = window->priv; GtkWindowPrivate *priv = window->priv;
GdkWindowEdge edge;
GdkDisplay *display;
GdkCursorType cursor_type;
GdkCursor *cursor;
if (priv->grip_window == NULL) if (priv->grip_window == NULL)
return; return;
if (gtk_widget_is_sensitive (widget)) if (gtk_widget_is_sensitive (widget))
{ {
edge = get_drag_edge (widget); GdkWindowEdge edge;
GdkDisplay *display;
GdkCursorType cursor_type;
GdkCursor *cursor;
cursor_type = GDK_LEFT_PTR;
if (get_drag_edge (widget, &edge))
{
switch (edge) switch (edge)
{ {
case GDK_WINDOW_EDGE_EAST: case GDK_WINDOW_EDGE_EAST:
@ -5085,9 +5089,8 @@ set_grip_cursor (GtkWindow *window)
case GDK_WINDOW_EDGE_WEST: case GDK_WINDOW_EDGE_WEST:
cursor_type = GDK_LEFT_SIDE; cursor_type = GDK_LEFT_SIDE;
break; break;
default: default: ;
cursor_type = GDK_LEFT_PTR; }
break;
} }
display = gtk_widget_get_display (widget); display = gtk_widget_get_display (widget);
@ -5718,11 +5721,13 @@ gtk_window_button_press_event (GtkWidget *widget,
GdkEventButton *event) GdkEventButton *event)
{ {
GtkWindowPrivate *priv = GTK_WINDOW (widget)->priv; GtkWindowPrivate *priv = GTK_WINDOW (widget)->priv;
GdkWindowEdge edge;
if (event->window == priv->grip_window) if (event->window == priv->grip_window)
{ {
if (get_drag_edge (widget, &edge))
gtk_window_begin_resize_drag (GTK_WINDOW (widget), gtk_window_begin_resize_drag (GTK_WINDOW (widget),
get_drag_edge (widget), edge,
event->button, event->button,
event->x_root, event->x_root,
event->y_root, event->y_root,