e_client: make fake mouse-out upon focus-out conditional 43/197043/4
authorjeon <jhyuni.kang@samsung.com>
Wed, 9 Jan 2019 05:26:11 +0000 (14:26 +0900)
committerSung-Jin Park <sj76.park@samsung.com>
Fri, 11 Jan 2019 04:48:11 +0000 (04:48 +0000)
  - cursor is not changed correctly on wayland
    when a window lost focus while the cursor remained
    inside the window.
  - so patch this fake mouse-out condition refer to opensource

Change-Id: Iac21c482c4c4a274aa8748c390f6031efc1c7510

src/bin/e_client.c
src/bin/e_client.h

index c5d54de28725ad9e0a47a88a84e1f4ebc1eac089..7f218feddaa9c7c1b739f403f16c7f0a30c5d92a 100644 (file)
@@ -5028,7 +5028,8 @@ e_client_focused_set(E_Client *ec)
         ec_unfocus->want_focus = ec_unfocus->focused = 0;
         if (!e_object_is_del(E_OBJECT(ec_unfocus)))
           e_focus_event_focus_out(ec_unfocus);
-        if (ec_unfocus->mouse.in)
+        if (ec_unfocus->mouse.in && ec && (!e_client_util_is_popup(ec)) &&
+            (e_config->focus_policy != E_FOCUS_CLICK))
           e_client_mouse_out(ec_unfocus, ec_unfocus->x - 1, ec_unfocus->y - 1);
 
         /* if there unfocus client is fullscreen and visible */
index 07968815e143efc2ee44be348d3062b751b96d3d..69efeec0bcef08fe94323515304131993003bdcb 100644 (file)
@@ -1285,4 +1285,25 @@ e_client_util_name_get(const E_Client *ec)
      return ec->icccm.title;
    return NULL;
 }
+
+static inline Eina_Bool
+e_client_util_is_popup(const E_Client *ec)
+{
+   if (!ec) return EINA_FALSE;
+   switch (ec->netwm.type)
+     {
+        case E_WINDOW_TYPE_MENU:
+        case E_WINDOW_TYPE_SPLASH:
+        case E_WINDOW_TYPE_DROPDOWN_MENU:
+        case E_WINDOW_TYPE_POPUP_MENU:
+        case E_WINDOW_TYPE_TOOLTIP:
+        case E_WINDOW_TYPE_NOTIFICATION:
+        case E_WINDOW_TYPE_COMBO:
+        case E_WINDOW_TYPE_DND:
+          return EINA_TRUE;
+        default: break;
+     }
+  return EINA_FALSE;
+}
+
 #endif