Wayland: more checks to avoid consuming serials needlessly
authorDerek Foreman <derekf@osg.samsung.com>
Tue, 10 Mar 2015 20:24:45 +0000 (16:24 -0400)
committerMike Blumenkrantz <zmike@osg.samsung.com>
Tue, 10 Mar 2015 20:24:46 +0000 (16:24 -0400)
Reviewers: devilhorns, zmike

Subscribers: cedric

Differential Revision: https://phab.enlightenment.org/D2135

src/bin/e_comp_wl.c
src/bin/e_comp_wl_input.c

index 4a89e41..9c9ef25 100644 (file)
@@ -166,6 +166,8 @@ _e_comp_wl_evas_cb_mouse_in(void *data, Evas *evas EINA_UNUSED, Evas_Object *obj
 
    if (!ec->comp_data->surface) return;
 
+   if (!eina_list_count(ec->comp->wl_comp_data->ptr.resources)) return;
+
    wc = wl_resource_get_client(ec->comp_data->surface);
    serial = wl_display_next_serial(ec->comp->wl_comp_data->wl.disp);
    EINA_LIST_FOREACH(ec->comp->wl_comp_data->ptr.resources, l, res)
@@ -201,6 +203,8 @@ _e_comp_wl_evas_cb_mouse_out(void *data, Evas *evas EINA_UNUSED, Evas_Object *ob
 
    if (!ec->comp_data->surface) return;
 
+   if (!eina_list_count(ec->comp->wl_comp_data->ptr.resources)) return;
+
    wc = wl_resource_get_client(ec->comp_data->surface);
    serial = wl_display_next_serial(ec->comp->wl_comp_data->wl.disp);
    EINA_LIST_FOREACH(ec->comp->wl_comp_data->ptr.resources, l, res)
@@ -276,6 +280,9 @@ _e_comp_wl_evas_handle_mouse_button(E_Client *ec, uint32_t timestamp, uint32_t b
 
    if (!ec->comp_data->surface) return EINA_FALSE;
 
+   if (!eina_list_count(ec->comp->wl_comp_data->ptr.resources))
+     return EINA_TRUE;
+
    wc = wl_resource_get_client(ec->comp_data->surface);
    serial = wl_display_next_serial(ec->comp->wl_comp_data->wl.disp);
 
@@ -424,6 +431,8 @@ _e_comp_wl_client_focus(E_Client *ec)
    ec->comp_data->focus_update = 1;
    if (!ec->comp_data->surface) return;
 
+   if (!eina_list_count(ec->comp->wl_comp_data->kbd.resources)) return;
+
    /* send keyboard_enter to all keyboard resources */
    wc = wl_resource_get_client(ec->comp_data->surface);
    serial = wl_display_next_serial(e_comp->wl_comp_data->wl.disp);
@@ -489,6 +498,10 @@ _e_comp_wl_evas_cb_focus_out(void *data, Evas *evas EINA_UNUSED, Evas_Object *ob
 
    if (!ec->comp_data->surface) return;
 
+   ec->comp_data->focus_update = 0;
+
+   if (!eina_list_count(cdata->kbd.resources)) return;
+
    /* send keyboard_leave to all keyboard resources */
    wc = wl_resource_get_client(ec->comp_data->surface);
    serial = wl_display_next_serial(cdata->wl.disp);
@@ -497,7 +510,6 @@ _e_comp_wl_evas_cb_focus_out(void *data, Evas *evas EINA_UNUSED, Evas_Object *ob
         if (wl_resource_get_client(res) != wc) continue;
         wl_keyboard_send_leave(res, serial, ec->comp_data->surface);
      }
-   ec->comp_data->focus_update = 0;
 }
 
 static void
@@ -833,13 +845,16 @@ _e_comp_wl_cb_key_down(void *event)
              struct wl_resource *res;
              Eina_List *l;
 
-             wc = wl_resource_get_client(ec->comp_data->surface);
-             serial = wl_display_next_serial(cdata->wl.disp);
-             EINA_LIST_FOREACH(cdata->kbd.resources, l, res)
+             if (eina_list_count(cdata->kbd.resources))
                {
-                  if (wl_resource_get_client(res) != wc) continue;
-                  wl_keyboard_send_key(res, serial, ev->timestamp,
+                  wc = wl_resource_get_client(ec->comp_data->surface);
+                  serial = wl_display_next_serial(cdata->wl.disp);
+                  EINA_LIST_FOREACH(cdata->kbd.resources, l, res)
+                    {
+                       if (wl_resource_get_client(res) != wc) continue;
+                        wl_keyboard_send_key(res, serial, ev->timestamp,
                                        keycode, WL_KEYBOARD_KEY_STATE_PRESSED);
+                    }
                }
           }
      }
@@ -880,14 +895,17 @@ _e_comp_wl_cb_key_up(void *event)
              struct wl_resource *res;
              Eina_List *l;
 
-             wc = wl_resource_get_client(ec->comp_data->surface);
-             serial = wl_display_next_serial(cdata->wl.disp);
-             EINA_LIST_FOREACH(cdata->kbd.resources, l, res)
+             if (eina_list_count(cdata->kbd.resources))
                {
-                  if (wl_resource_get_client(res) != wc) continue;
-                  wl_keyboard_send_key(res, serial, ev->timestamp,
+                  wc = wl_resource_get_client(ec->comp_data->surface);
+                  serial = wl_display_next_serial(cdata->wl.disp);
+                  EINA_LIST_FOREACH(cdata->kbd.resources, l, res)
+                    {
+                       if (wl_resource_get_client(res) != wc) continue;
+                       wl_keyboard_send_key(res, serial, ev->timestamp,
                                        keycode, WL_KEYBOARD_KEY_STATE_RELEASED);
-               }
+                    }
+              }
           }
      }
 
index 1abe509..19f0d8d 100644 (file)
@@ -463,6 +463,8 @@ e_comp_wl_input_keyboard_modifiers_update(E_Comp_Data *cdata)
 
    e_comp_wl_input_keyboard_modifiers_serialize(cdata);
 
+   if (!eina_list_count(cdata->kbd.resources)) return;
+
    serial = wl_display_next_serial(cdata->wl.disp);
    EINA_LIST_FOREACH(cdata->kbd.resources, l, res)
      wl_keyboard_send_modifiers(res, serial,