2008-02-12 Tomas Frydrych <tf@openedhand.com>

* clutter/x11/clutter-event-x11.c (event_translate):
	Ignore events directed at the stage window once they have been
	passed to the filter functions.
This commit is contained in:
Tomas Frydrych 2008-02-12 12:39:22 +00:00
parent 3ef9e235ef
commit b40643b86e
2 changed files with 29 additions and 17 deletions

View File

@ -1,10 +1,16 @@
2008-02-12 Tomas Frydrych <tf@openedhand.com>
* clutter/x11/clutter-event-x11.c (event_translate):
Ignore events directed at the stage window once they have been
passed to the filter functions.
2008-02-11 Matthew Allum <mallum@openedhand.com> 2008-02-11 Matthew Allum <mallum@openedhand.com>
* clutter/clutter-actor.c: * clutter/clutter-actor.c:
Minor documentation tweak to class description. Minor documentation tweak to class description.
* clutter/clutter-behaviour-scale.c: * clutter/clutter-behaviour-scale.c:
'Force' start + end vals of scale behaviour 'Force' start + end vals of scale behaviour
(#779, Havoc Pennington) (#779, Havoc Pennington)
2008-02-11 Emmanuele Bassi <ebassi@openedhand.com> 2008-02-11 Emmanuele Bassi <ebassi@openedhand.com>

View File

@ -110,7 +110,7 @@ xembed_send_message (ClutterBackendX11 *backend_x11,
Window window, Window window,
long message, long message,
long detail, long detail,
long data1, long data1,
long data2) long data2)
{ {
XEvent ev; XEvent ev;
@ -162,7 +162,7 @@ _clutter_backend_x11_events_init (ClutterBackend *backend)
GSource *source; GSource *source;
ClutterEventSource *event_source; ClutterEventSource *event_source;
int connection_number; int connection_number;
connection_number = ConnectionNumber (backend_x11->xdpy); connection_number = ConnectionNumber (backend_x11->xdpy);
CLUTTER_NOTE (EVENT, "Connection number: %d", connection_number); CLUTTER_NOTE (EVENT, "Connection number: %d", connection_number);
@ -180,7 +180,7 @@ _clutter_backend_x11_events_init (ClutterBackend *backend)
g_source_attach (source, NULL); g_source_attach (source, NULL);
xembed_set_info (backend_x11, xembed_set_info (backend_x11,
clutter_x11_get_stage_window (stage), clutter_x11_get_stage_window (stage),
0); 0);
} }
@ -231,8 +231,8 @@ translate_key_event (ClutterBackend *backend,
event->key.hardware_keycode = xevent->xkey.keycode; event->key.hardware_keycode = xevent->xkey.keycode;
/* FIXME: We need to handle other modifiers rather than just shift */ /* FIXME: We need to handle other modifiers rather than just shift */
event->key.keyval = event->key.keyval =
XKeycodeToKeysym (xevent->xkey.display, XKeycodeToKeysym (xevent->xkey.display,
xevent->xkey.keycode, xevent->xkey.keycode,
(event->key.modifier_state & CLUTTER_SHIFT_MASK) ? 1 (event->key.modifier_state & CLUTTER_SHIFT_MASK) ? 1
: 0); : 0);
@ -342,8 +342,6 @@ event_translate (ClutterBackend *backend,
stage_xwindow = clutter_x11_get_stage_window (stage); stage_xwindow = clutter_x11_get_stage_window (stage);
xwindow = xevent->xany.window; xwindow = xevent->xany.window;
if (xwindow == None)
xwindow = stage_xwindow;
if (backend_x11->event_filters) if (backend_x11->event_filters)
{ {
@ -371,7 +369,15 @@ event_translate (ClutterBackend *backend,
node = node->next; node = node->next;
} }
} }
/*
* Do further processing only on events for the stage window
* (the x11 filters might be getting events for other windows, so do not
* mess them about.
*/
if (xwindow != stage_xwindow)
return FALSE;
res = TRUE; res = TRUE;
switch (xevent->type) switch (xevent->type)
@ -407,7 +413,7 @@ event_translate (ClutterBackend *backend,
clutter_x11_trap_x_errors (); clutter_x11_trap_x_errors ();
XGetWindowProperty (backend_x11->xdpy, stage_xwindow, XGetWindowProperty (backend_x11->xdpy, stage_xwindow,
backend_x11->atom_NET_WM_STATE, backend_x11->atom_NET_WM_STATE,
0, G_MAXLONG, 0, G_MAXLONG,
False, XA_ATOM, False, XA_ATOM,
&type, &format, &n_items, &type, &format, &n_items,
&bytes_after, &data); &bytes_after, &data);
@ -442,7 +448,7 @@ event_translate (ClutterBackend *backend,
} }
else else
res = FALSE; res = FALSE;
XFree (data); XFree (data);
} }
else else
@ -492,9 +498,9 @@ event_translate (ClutterBackend *backend,
XEvent foo_xev; XEvent foo_xev;
/* Cheap compress */ /* Cheap compress */
while (XCheckTypedWindowEvent (backend_x11->xdpy, while (XCheckTypedWindowEvent (backend_x11->xdpy,
xevent->xexpose.window, xevent->xexpose.window,
Expose, Expose,
&foo_xev)); &foo_xev));
/* FIXME: need to make stage an 'actor' so can que /* FIXME: need to make stage an 'actor' so can que
@ -533,7 +539,7 @@ event_translate (ClutterBackend *backend,
event->scroll.direction = CLUTTER_SCROLL_LEFT; event->scroll.direction = CLUTTER_SCROLL_LEFT;
else else
event->scroll.direction = CLUTTER_SCROLL_RIGHT; event->scroll.direction = CLUTTER_SCROLL_RIGHT;
event->scroll.time = xevent->xbutton.time; event->scroll.time = xevent->xbutton.time;
event->scroll.x = xevent->xbutton.x; event->scroll.x = xevent->xbutton.x;
event->scroll.y = xevent->xbutton.y; event->scroll.y = xevent->xbutton.y;
@ -593,9 +599,9 @@ event_translate (ClutterBackend *backend,
case ClientMessage: case ClientMessage:
CLUTTER_NOTE (EVENT, "client message"); CLUTTER_NOTE (EVENT, "client message");
event->type = event->any.type = CLUTTER_CLIENT_MESSAGE; event->type = event->any.type = CLUTTER_CLIENT_MESSAGE;
if (xevent->xclient.message_type == backend_x11->atom_XEMBED) if (xevent->xclient.message_type == backend_x11->atom_XEMBED)
res = handle_xembed_event (backend_x11, xevent); res = handle_xembed_event (backend_x11, xevent);
else if (xevent->xclient.message_type == backend_x11->atom_WM_PROTOCOLS) else if (xevent->xclient.message_type == backend_x11->atom_WM_PROTOCOLS)
@ -689,7 +695,7 @@ clutter_event_dispatch (GSource *source,
clutter_threads_enter (); clutter_threads_enter ();
/* Grab the event(s), translate and figure out double click. /* Grab the event(s), translate and figure out double click.
* The push onto queue (stack) if valid. * The push onto queue (stack) if valid.
*/ */
events_queue (backend); events_queue (backend);