Ticket #3999: 0001-Reset-event-controllers-on-GdkEventGrabBroken.patch

File 0001-Reset-event-controllers-on-GdkEventGrabBroken.patch, 1.8 KB (added by garnacho, 11 years ago)

more generic patch, reset event controllers (inc. long press) when something else grabs the device

  • src/sugar3/event-controller/sugar-event-controller.c

    From 9c595aaea751d0822bc426859c4eb9dd698d552a Mon Sep 17 00:00:00 2001
    From: Carlos Garnacho <carlos@lanedo.com>
    Date: Wed, 7 Nov 2012 12:08:23 +0100
    Subject: [PATCH] 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.
    ---
     .../event-controller/sugar-event-controller.c       | 21 +++++++++++++--------
     1 file 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 b _sugar_event_controller_widget_event (GtkWidget *widget, 
    203203          data->current_exclusive != item->controller)
    204204        continue;
    205205
    206       if (!sugar_event_controller_handle_event (item->controller, event))
    207         continue;
     206      if (event->type == GDK_GRAB_BROKEN && !event->grab_broken.keyboard)
     207        sugar_event_controller_reset (item->controller);
     208      else
     209        {
     210          if (!sugar_event_controller_handle_event (item->controller, event))
     211            continue;
    208212
    209       state = sugar_event_controller_get_state (item->controller);
     213          state = sugar_event_controller_get_state (item->controller);
    210214
    211       /* Consider events handled once the
    212        * controller recognizes the action
    213        */
    214       if (state == SUGAR_EVENT_CONTROLLER_STATE_RECOGNIZED)
    215         handled = TRUE;
     215          /* Consider events handled once the
     216           * controller recognizes the action
     217           */
     218          if (state == SUGAR_EVENT_CONTROLLER_STATE_RECOGNIZED)
     219            handled = TRUE;
     220        }
    216221    }
    217222
    218223  return handled;