ajwillia-ms pushed a commit to branch master.

http://git.enlightenment.org/misc/entrance.git/commit/?id=cf3498a3c81416f1694a17c4fa5fbad09243f63b

commit cf3498a3c81416f1694a17c4fa5fbad09243f63b
Author: Andy Williams <a...@andywilliams.me>
Date:   Mon Feb 10 00:49:39 2014 +0000

    Fix the SUPPORTING_WM check - don't rely on getting the callback
---
 src/bin/entrance_gui.c | 39 +++++++++++++++++++++++++++++++++------
 1 file changed, 33 insertions(+), 6 deletions(-)

diff --git a/src/bin/entrance_gui.c b/src/bin/entrance_gui.c
index 2073305..5a47911 100755
--- a/src/bin/entrance_gui.c
+++ b/src/bin/entrance_gui.c
@@ -16,7 +16,7 @@ static void _entrance_gui_conf_clicked_cb(void *data, 
Evas_Object *obj, void *ev
 static void _entrance_gui_update(void);
 static void _entrance_gui_auth_cb(void *data, const char *user, Eina_Bool 
granted);
 static void _entrance_gui_user_bg_cb(void *data, Evas_Object *obj, const char 
*sig, const char *src);
-
+static void _entrance_gui_check_wm_loaded(Ecore_X_Window *win);
 
 static Entrance_Gui *_gui;
 
@@ -629,6 +629,8 @@ _entrance_gui_auth_cb(void *data EINA_UNUSED, const char 
*user EINA_UNUSED, Eina
           {
              elm_object_signal_emit(screen->edj,
                                     "entrance,auth,valid", "");
+
+             _entrance_gui_check_wm_loaded(_gui->win);
           }
         else
           {
@@ -664,7 +666,6 @@ static Eina_Bool
 _entrance_gui_cb_window_property(void *data EINA_UNUSED, int type EINA_UNUSED, 
void *event_info)
 {
    Ecore_X_Event_Window_Property *ev;
-   char *name;
 
    ev = event_info;
    if (ev->atom == ECORE_X_ATOM_NET_SUPPORTING_WM_CHECK)
@@ -673,16 +674,42 @@ _entrance_gui_cb_window_property(void *data EINA_UNUSED, 
int type EINA_UNUSED, v
         elm_exit();
      }
 
+   _entrance_gui_check_wm_loaded(ev->win);
+
+   return ECORE_CALLBACK_DONE;
+}
+
+static void _entrance_gui_check_wm_loaded(Ecore_X_Window *win)
+{
+   Ecore_X_Window val;
+   char *name;
+
+   /* In case we missed the event let's first check if a SUPPORTING_WM is 
registered */
+   ecore_x_window_prop_window_get(ecore_x_window_root_get(win),
+                                         ECORE_X_ATOM_NET_SUPPORTING_WM_CHECK, 
&val, 1);
+   if (val)
+     {
+        PT("Found a SUPPORTING_WM set\n");
+        // TODO we should check the child window exists
+
+        elm_exit();
+     }
+
    /* Adding this avoid us to launch entrance_client with a wm anymore ... */
-   name = ecore_x_window_prop_string_get(ecore_x_window_root_get(ev->win),
+   name = ecore_x_window_prop_string_get(ecore_x_window_root_get(win),
                                          ECORE_X_ATOM_NET_WM_NAME);
    if (name)
      {
-        PT("screen managed though not compliant\n");
+        PT("screen managed by %s though not compliant\n", name);
         elm_exit();
      }
 
-   return ECORE_CALLBACK_DONE;
+   name = ecore_x_window_prop_string_get(ecore_x_window_root_get(win),
+                                         ECORE_X_ATOM_WM_NAME);
+   if (name)
+     {
+        PT("screen managed by legacy %s\n", name);
+        elm_exit();
+     }
 }
 
-

-- 


Reply via email to