If there is a grabbed_item, send all events to it.
2002-04-17 Christopher James Lahey <clahey@ximian.com> * gal/widgets/e-canvas.c (emit_event): If there is a grabbed_item, send all events to it. svn path=/trunk/; revision=16492
This commit is contained in:

committed by
Chris Lahey

parent
ea772d632d
commit
822505f93b
@ -51,6 +51,8 @@ static int emit_event (GnomeCanvas *canvas, GdkEvent *event);
|
|||||||
|
|
||||||
static GnomeCanvasClass *parent_class = NULL;
|
static GnomeCanvasClass *parent_class = NULL;
|
||||||
|
|
||||||
|
#define d(x)
|
||||||
|
|
||||||
enum {
|
enum {
|
||||||
REFLOW,
|
REFLOW,
|
||||||
LAST_SIGNAL
|
LAST_SIGNAL
|
||||||
@ -163,17 +165,6 @@ e_canvas_new ()
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/* Returns whether the item is an inferior of or is equal to the parent. */
|
|
||||||
static int
|
|
||||||
is_descendant (GnomeCanvasItem *item, GnomeCanvasItem *parent)
|
|
||||||
{
|
|
||||||
for (; item; item = item->parent)
|
|
||||||
if (item == parent)
|
|
||||||
return TRUE;
|
|
||||||
|
|
||||||
return FALSE;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Emits an event for an item in the canvas, be it the current item, grabbed
|
/* Emits an event for an item in the canvas, be it the current item, grabbed
|
||||||
* item, or focused item, as appropriate.
|
* item, or focused item, as appropriate.
|
||||||
*/
|
*/
|
||||||
@ -186,10 +177,18 @@ emit_event (GnomeCanvas *canvas, GdkEvent *event)
|
|||||||
GnomeCanvasItem *parent;
|
GnomeCanvasItem *parent;
|
||||||
guint mask;
|
guint mask;
|
||||||
|
|
||||||
/* Perform checks for grabbed items */
|
/* Choose where we send the event */
|
||||||
|
|
||||||
if (canvas->grabbed_item && !is_descendant (canvas->current_item, canvas->grabbed_item))
|
item = canvas->current_item;
|
||||||
return FALSE;
|
|
||||||
|
if (canvas->focused_item
|
||||||
|
&& ((event->type == GDK_KEY_PRESS) || (event->type == GDK_KEY_RELEASE) || (event->type == GDK_FOCUS_CHANGE)))
|
||||||
|
item = canvas->focused_item;
|
||||||
|
|
||||||
|
if (canvas->grabbed_item)
|
||||||
|
item = canvas->grabbed_item;
|
||||||
|
|
||||||
|
/* Perform checks for grabbed items */
|
||||||
|
|
||||||
if (canvas->grabbed_item) {
|
if (canvas->grabbed_item) {
|
||||||
switch (event->type) {
|
switch (event->type) {
|
||||||
@ -260,14 +259,6 @@ emit_event (GnomeCanvas *canvas, GdkEvent *event)
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Choose where we send the event */
|
|
||||||
|
|
||||||
item = canvas->current_item;
|
|
||||||
|
|
||||||
if (canvas->focused_item
|
|
||||||
&& ((event->type == GDK_KEY_PRESS) || (event->type == GDK_KEY_RELEASE) || (event->type == GDK_FOCUS_CHANGE)))
|
|
||||||
item = canvas->focused_item;
|
|
||||||
|
|
||||||
/* The event is propagated up the hierarchy (for if someone connected to
|
/* The event is propagated up the hierarchy (for if someone connected to
|
||||||
* a group instead of a leaf event), and emission is stopped if a
|
* a group instead of a leaf event), and emission is stopped if a
|
||||||
* handler returns TRUE, just like for GtkWidget events.
|
* handler returns TRUE, just like for GtkWidget events.
|
||||||
@ -368,6 +359,7 @@ pick_current_item (GnomeCanvas *canvas, GdkEvent *event)
|
|||||||
| GDK_BUTTON3_MASK
|
| GDK_BUTTON3_MASK
|
||||||
| GDK_BUTTON4_MASK
|
| GDK_BUTTON4_MASK
|
||||||
| GDK_BUTTON5_MASK);
|
| GDK_BUTTON5_MASK);
|
||||||
|
d(g_print ("%s:%d: button_down = %s\n", __FUNCTION__, __LINE__, button_down ? "TRUE" : "FALSE"));
|
||||||
if (!button_down)
|
if (!button_down)
|
||||||
canvas->left_grabbed_item = FALSE;
|
canvas->left_grabbed_item = FALSE;
|
||||||
|
|
||||||
@ -506,6 +498,12 @@ e_canvas_button (GtkWidget *widget, GdkEventButton *event)
|
|||||||
|
|
||||||
canvas = GNOME_CANVAS (widget);
|
canvas = GNOME_CANVAS (widget);
|
||||||
|
|
||||||
|
d(g_print ("button %d, event type %d, grabbed=%p, current=%p\n",
|
||||||
|
event->button,
|
||||||
|
event->type,
|
||||||
|
canvas->grabbed_item,
|
||||||
|
canvas->current_item));
|
||||||
|
|
||||||
/* dispatch normally regardless of the event's window if an item has
|
/* dispatch normally regardless of the event's window if an item has
|
||||||
has a pointer grab in effect */
|
has a pointer grab in effect */
|
||||||
if (!canvas->grabbed_item && event->window != canvas->layout.bin_window)
|
if (!canvas->grabbed_item && event->window != canvas->layout.bin_window)
|
||||||
|
Reference in New Issue
Block a user