Pass configure requests for keyboard windows although they've not mapped yet 84/36084/1
authorMinJeong Kim <minjjj.kim@samsung.com>
Mon, 2 Mar 2015 06:04:45 +0000 (15:04 +0900)
committerMinJeong Kim <minjjj.kim@samsung.com>
Mon, 2 Mar 2015 06:08:05 +0000 (15:08 +0900)
Change-Id: Id19381be9e74751e2533509da20be2339c03ce6a
Signed-off-by: MinJeong Kim <minjjj.kim@samsung.com>
src/e_mod_keyboard.c
src/e_mod_keyboard.h
src/e_mod_main.c

index 8987c45..5099fd9 100644 (file)
@@ -118,3 +118,24 @@ e_mod_pol_keyboard_layout_apply(E_Client *ec)
        ((ec->x != kbd_x) || (ec->y != kbd_y)))
      e_client_util_move_without_frame(ec, kbd_x, kbd_y);
 }
+
+EINTERN void
+e_mod_pol_keyboard_configure(Ecore_X_Event_Window_Configure_Request *ev)
+{
+   E_Client *ec;
+
+   ec = e_pixmap_find_client(E_PIXMAP_TYPE_X, ev->win);
+   if (!ec)
+     {
+        char *name = NULL, *class = NULL;
+
+        ecore_x_icccm_name_class_get(ev->win, &name, &class);
+        if ((class) && (!strcmp(class, "ISF")))
+          {
+             /* pass through configure requests if it is a request for keyboard */
+             ecore_x_window_configure(ev->win, ev->value_mask,
+                                      ev->x, ev->y, ev->w, ev->h,
+                                      ev->border, ev->abovewin, ev->detail);
+          }
+     }
+}
index 19625f1..54b428f 100644 (file)
@@ -5,5 +5,6 @@
 EINTERN Eina_Bool e_mod_pol_client_is_keyboard(E_Client *ec);
 EINTERN Eina_Bool e_mod_pol_client_is_keyboard_sub(E_Client *ec);
 EINTERN void      e_mod_pol_keyboard_layout_apply(E_Client *ec);
+EINTERN void      e_mod_pol_keyboard_configure(Ecore_X_Event_Window_Configure_Request *ev);
 
 #endif
index 004efeb..df9d80e 100644 (file)
@@ -712,6 +712,14 @@ _pol_cb_window_configure(void *data EINA_UNUSED, int type EINA_UNUSED, Ecore_X_E
 }
 
 static Eina_Bool
+_pol_cb_window_configure_request(void *data EINA_UNUSED, int type EINA_UNUSED, Ecore_X_Event_Window_Configure_Request *ev)
+{
+   e_mod_pol_keyboard_configure(ev);
+
+   return ECORE_CALLBACK_PASS_ON;
+}
+
+static Eina_Bool
 _pol_cb_zone_rotation_change_begin(void *data EINA_UNUSED, int ev_type EINA_UNUSED, E_Event_Zone_Rotation_Change_Begin *ev)
 {
    if ((!ev) || (!ev->zone)) return ECORE_CALLBACK_PASS_ON;
@@ -979,6 +987,8 @@ e_modapi_init(E_Module *m)
                          _pol_cb_window_property, NULL);
    E_LIST_HANDLER_APPEND(handlers, ECORE_X_EVENT_WINDOW_CONFIGURE,
                          _pol_cb_window_configure, NULL);
+   E_LIST_HANDLER_APPEND(handlers, ECORE_X_EVENT_WINDOW_CONFIGURE_REQUEST,
+                         _pol_cb_window_configure_request, NULL);
    E_LIST_HANDLER_APPEND(handlers, ECORE_X_EVENT_CLIENT_MESSAGE,
                          _pol_cb_window_message, NULL);
    E_LIST_HANDLER_APPEND(handlers, E_EVENT_ZONE_ROTATION_CHANGE_BEGIN,