Web   ·   Wiki   ·   Activities   ·   Blog   ·   Lists   ·   Chat   ·   Meeting   ·   Bugs   ·   Git   ·   Translate   ·   Archive   ·   People   ·   Donate
summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorCarlos Garnacho <carlos@lanedo.com>2012-11-07 11:08:23 (GMT)
committer Simon Schampijer <simon@laptop.org>2012-11-08 09:30:17 (GMT)
commitb2df1358447c39e3a4720af2286846d516ea3b02 (patch)
tree918322b7f38caaf87ba7090b1ee21f1dfc1874ca
parentdcfc92dbd08bb3256d6dd583b93f1f48cb5908c6 (diff)
Reset event controllers on GdkEventGrabBroken
This event means that the widget being listened won't receive further input events as something else grabbed devices, reset event controllers in this case. This helps with SL #4128 where we did reset the long press controller manually. Signed-off-by: Carlos Garnacho <carlos@lanedo.com> Acked-by: Simon Schampijer <simon@laptop.org>
-rw-r--r--src/sugar3/event-controller/sugar-event-controller.c21
1 files changed, 13 insertions, 8 deletions
diff --git a/src/sugar3/event-controller/sugar-event-controller.c b/src/sugar3/event-controller/sugar-event-controller.c
index 2fae4a1..e2f8682 100644
--- a/src/sugar3/event-controller/sugar-event-controller.c
+++ b/src/sugar3/event-controller/sugar-event-controller.c
@@ -203,16 +203,21 @@ _sugar_event_controller_widget_event (GtkWidget *widget,
data->current_exclusive != item->controller)
continue;
- if (!sugar_event_controller_handle_event (item->controller, event))
- continue;
+ if (event->type == GDK_GRAB_BROKEN && !event->grab_broken.keyboard)
+ sugar_event_controller_reset (item->controller);
+ else
+ {
+ if (!sugar_event_controller_handle_event (item->controller, event))
+ continue;
- state = sugar_event_controller_get_state (item->controller);
+ state = sugar_event_controller_get_state (item->controller);
- /* Consider events handled once the
- * controller recognizes the action
- */
- if (state == SUGAR_EVENT_CONTROLLER_STATE_RECOGNIZED)
- handled = TRUE;
+ /* Consider events handled once the
+ * controller recognizes the action
+ */
+ if (state == SUGAR_EVENT_CONTROLLER_STATE_RECOGNIZED)
+ handled = TRUE;
+ }
}
return handled;