discomfitor pushed a commit to branch master.

http://git.enlightenment.org/core/enlightenment.git/commit/?id=86d5d318fa73ac35c852653d3ed0fe7a244acc41

commit 86d5d318fa73ac35c852653d3ed0fe7a244acc41
Author: Mike Blumenkrantz <zm...@osg.samsung.com>
Date:   Mon Aug 17 14:04:58 2015 -0400

    handle winlist kbd events more accurately in wayland compositors
    
    key handlers here will pick up both wayland and drm engine type events,
    so ensure that we only handle events matching the compositor canvas
    window to prevent unexpected behavior
    
    fix T2637
---
 src/modules/winlist/e_winlist.c | 25 +++++++++++++++----------
 1 file changed, 15 insertions(+), 10 deletions(-)

diff --git a/src/modules/winlist/e_winlist.c b/src/modules/winlist/e_winlist.c
index ed26d65..28e2276 100644
--- a/src/modules/winlist/e_winlist.c
+++ b/src/modules/winlist/e_winlist.c
@@ -120,6 +120,7 @@ e_winlist_show(E_Zone *zone, E_Winlist_Filter filter)
      {
         if (!e_comp_grab_input(1, 1))
           return 0;
+        _input_window = e_comp->ee_win;
      }
 
    w = (double)zone->w * e_config->winlist_pos_size_w;
@@ -266,15 +267,18 @@ e_winlist_hide(void)
    E_FREE_FUNC(_animator, ecore_animator_del);
 
 #ifndef HAVE_WAYLAND_ONLY
-   if (_input_window)
+   if (e_comp->comp_type == E_PIXMAP_TYPE_X)
      {
-        e_grabinput_release(_input_window, _input_window);
-        ecore_x_window_free(_input_window);
-        _input_window = 0;
+        if (_input_window)
+          {
+             e_grabinput_release(_input_window, _input_window);
+             ecore_x_window_free(_input_window);
+          }
      }
-   else
 #endif
+   if (e_comp->comp_type == E_PIXMAP_TYPE_WL)
      e_comp_ungrab_input(1, 1);
+   _input_window = 0;
    if (ec)
      {
         Eina_Bool set = !ec->lock_focus_out;
@@ -1102,7 +1106,7 @@ _e_winlist_cb_key_down(void *data EINA_UNUSED, int type 
EINA_UNUSED, void *event
 {
    Ecore_Event_Key *ev = event;
 
-   if ((e_comp->comp_type == E_PIXMAP_TYPE_X) && (ev->window != 
_input_window)) return ECORE_CALLBACK_PASS_ON;
+   if (ev->window != _input_window) return ECORE_CALLBACK_PASS_ON;
    if (!strcmp(ev->key, "Up"))
      e_winlist_prev();
    else if (!strcmp(ev->key, "Down"))
@@ -1181,6 +1185,7 @@ _e_winlist_cb_key_up(void *data EINA_UNUSED, int type 
EINA_UNUSED, void *event)
    E_Binding_Modifier mod;
 
    ev = event;
+   if (ev->window != _input_window) return ECORE_CALLBACK_PASS_ON;
    if (!_winlist) return ECORE_CALLBACK_PASS_ON;
    if (_hold_mod)
      {
@@ -1244,7 +1249,7 @@ _e_winlist_cb_mouse_down(void *data EINA_UNUSED, int type 
EINA_UNUSED, void *eve
    Ecore_Event_Mouse_Button *ev;
 
    ev = event;
-   if ((e_comp->comp_type == E_PIXMAP_TYPE_X) && (ev->window != 
_input_window)) return ECORE_CALLBACK_PASS_ON;
+   if (ev->window != _input_window) return ECORE_CALLBACK_PASS_ON;
    e_bindings_mouse_down_ecore_event_handle(E_BINDING_CONTEXT_WINLIST,
                                       E_OBJECT(_winlist_zone), ev);
    return ECORE_CALLBACK_PASS_ON;
@@ -1256,7 +1261,7 @@ _e_winlist_cb_mouse_up(void *data EINA_UNUSED, int type 
EINA_UNUSED, void *event
    Ecore_Event_Mouse_Button *ev;
 
    ev = event;
-   if ((e_comp->comp_type == E_PIXMAP_TYPE_X) && (ev->window != 
_input_window)) return ECORE_CALLBACK_PASS_ON;
+   if (ev->window != _input_window) return ECORE_CALLBACK_PASS_ON;
    if (e_bindings_mouse_up_ecore_event_handle(E_BINDING_CONTEXT_WINLIST, 
E_OBJECT(_winlist_zone), ev))
      return ECORE_CALLBACK_RENEW;
    if (_activate_type != E_WINLIST_ACTIVATE_TYPE_MOUSE) return 
ECORE_CALLBACK_RENEW;
@@ -1271,7 +1276,7 @@ _e_winlist_cb_mouse_wheel(void *data EINA_UNUSED, int 
type EINA_UNUSED, void *ev
    int i;
 
    ev = event;
-   if ((e_comp->comp_type == E_PIXMAP_TYPE_X) && (ev->window != 
_input_window)) return ECORE_CALLBACK_PASS_ON;
+   if (ev->window != _input_window) return ECORE_CALLBACK_PASS_ON;
    e_bindings_wheel_ecore_event_handle(E_BINDING_CONTEXT_WINLIST,
                                  E_OBJECT(_winlist_zone), ev);
    if (ev->z < 0) /* up */
@@ -1294,7 +1299,7 @@ _e_winlist_cb_mouse_move(void *data EINA_UNUSED, int type 
EINA_UNUSED, void *eve
    int x, y, w, h;
 
    ev = event;
-   if ((e_comp->comp_type == E_PIXMAP_TYPE_X) && (ev->window != 
_input_window)) return ECORE_CALLBACK_PASS_ON;
+   if (ev->window != _input_window) return ECORE_CALLBACK_PASS_ON;
    evas_object_geometry_get(_winlist, &x, &y, &w, &h);
    /* only feed mouse move if it's within the winlist popup */
    if (E_INSIDE(ev->x, ev->y, x, y, w, h))

-- 


Reply via email to