Enlightenment CVS committal

Author  : kwo
Project : e16
Module  : e

Dir     : e16/e/src


Modified Files:
        ewins.c ewmh.c hints.c hints.h icccm.c 


Log Message:
Don't use atom name in property change processing.

===================================================================
RCS file: /cvs/e/e16/e/src/ewins.c,v
retrieving revision 1.194
retrieving revision 1.195
diff -u -3 -r1.194 -r1.195
--- ewins.c     15 Apr 2007 14:34:45 -0000      1.194
+++ ewins.c     16 Apr 2007 16:36:10 -0000      1.195
@@ -182,17 +182,18 @@
    if (EDebug(EDBUG_TYPE_EWINS))
       Eprintf("EwinGetHints %#lx\n", EwinGetClientXwin(ewin));
 
-   ICCCM_GetTitle(ewin, 0);
+   ICCCM_GetTitle(ewin);
    if (EwinIsInternal(ewin))
      {
-       ICCCM_GetInfo(ewin, 0);
+       /* FIXME - This should not be needed */
+       ICCCM_GetInfo(ewin);
      }
    else
      {
-       ICCCM_GetHints(ewin, 0);
-       ICCCM_GetGeoms(ewin, 0);
+       ICCCM_GetHints(ewin);
+       ICCCM_GetGeoms(ewin);
        MWM_GetHints(ewin, 0);
-       ICCCM_GetInfo(ewin, 0); /* NB! Need group info first */
+       ICCCM_GetInfo(ewin);    /* NB! Need group info first */
        HintsGetWindowHints(ewin);
        SessionGetInfo(ewin, 0);
      }
@@ -1326,7 +1327,7 @@
    EGrabServer();
    EwinChangesStart(ewin);
 
-   HintsProcessPropertyChange(ewin, ev->xproperty.atom);
+   HintsProcessPropertyChange(ewin, ev);
    SessionGetInfo(ewin, ev->xproperty.atom);
    EwinStateUpdate(ewin);
 
===================================================================
RCS file: /cvs/e/e16/e/src/ewmh.c,v
retrieving revision 1.115
retrieving revision 1.116
diff -u -3 -r1.115 -r1.116
--- ewmh.c      15 Apr 2007 14:54:11 -0000      1.115
+++ ewmh.c      16 Apr 2007 16:36:10 -0000      1.116
@@ -812,20 +812,37 @@
 /*
  * Process property change
  */
-void
+int
 EWMH_ProcessPropertyChange(EWin * ewin, Atom atom_change)
 {
    if (atom_change == ECORE_X_ATOM_NET_WM_NAME)
-      EWMH_GetWindowName(ewin);
-   else if (atom_change == ECORE_X_ATOM_NET_WM_ICON_NAME)
-      EWMH_GetWindowIconName(ewin);
-   else if (atom_change == ECORE_X_ATOM_NET_WM_STRUT_PARTIAL ||
-           atom_change == ECORE_X_ATOM_NET_WM_STRUT)
-      EWMH_GetWindowStrut(ewin);
-   else if (atom_change == ECORE_X_ATOM_NET_WM_WINDOW_OPACITY)
-      EWMH_GetWindowOpacity(ewin);
-   else if (atom_change == ECORE_X_ATOM_NET_WM_USER_TIME)
-      EWMH_GetWindowUserTime(ewin);
+     {
+       EWMH_GetWindowName(ewin);
+       return 1;
+     }
+   if (atom_change == ECORE_X_ATOM_NET_WM_ICON_NAME)
+     {
+       EWMH_GetWindowIconName(ewin);
+       return 1;
+     }
+   if (atom_change == ECORE_X_ATOM_NET_WM_STRUT_PARTIAL ||
+       atom_change == ECORE_X_ATOM_NET_WM_STRUT)
+     {
+       EWMH_GetWindowStrut(ewin);
+       return 1;
+     }
+   if (atom_change == ECORE_X_ATOM_NET_WM_WINDOW_OPACITY)
+     {
+       EWMH_GetWindowOpacity(ewin);
+       return 1;
+     }
+   if (atom_change == ECORE_X_ATOM_NET_WM_USER_TIME)
+     {
+       EWMH_GetWindowUserTime(ewin);
+       return 1;
+     }
+
+   return 0;
 }
 
 /*
===================================================================
RCS file: /cvs/e/e16/e/src/hints.c,v
retrieving revision 1.81
retrieving revision 1.82
diff -u -3 -r1.81 -r1.82
--- hints.c     15 Apr 2007 14:54:11 -0000      1.81
+++ hints.c     16 Apr 2007 16:36:10 -0000      1.82
@@ -247,23 +247,23 @@
  */
 
 void
-HintsProcessPropertyChange(EWin * ewin, Atom atom_change)
+HintsProcessPropertyChange(EWin * ewin, XEvent * ev)
 {
-   char               *name;
-
-   name = XGetAtomName(disp, atom_change);
-   if (name == NULL)
+   if (ICCCM_ProcessPropertyChange(ewin, ev->xproperty.atom))
+      return;
+   if (EWMH_ProcessPropertyChange(ewin, ev->xproperty.atom))
       return;
-
-   if (!memcmp(name, "WM_", 3))
-      ICCCM_ProcessPropertyChange(ewin, atom_change);
-   else if (!memcmp(name, "_NET_", 5))
-      EWMH_ProcessPropertyChange(ewin, atom_change);
 #if 0                          /* No! - ENABLE_GNOME */
-   else if (!memcmp(name, "_WIN_", 5))
-      GNOME_GetHints(ewin, atom_change);
+   if (GNOME_GetHints(ewin, ev->xproperty.atom))
+      return;
+#endif
+#if 0
+   if (EDebug(1))
+     {
+       Eprintf("HintsProcessPropertyChange:\n");
+       EventShow(ev);
+     }
 #endif
-   XFree(name);
 }
 
 void
===================================================================
RCS file: /cvs/e/e16/e/src/hints.h,v
retrieving revision 1.13
retrieving revision 1.14
diff -u -3 -r1.13 -r1.14
--- hints.h     15 Apr 2007 14:54:11 -0000      1.13
+++ hints.h     16 Apr 2007 16:36:10 -0000      1.14
@@ -51,7 +51,7 @@
 void                EWMH_SetWindowActions(const EWin * ewin);
 void                EWMH_GetWindowHints(EWin * ewin);
 void                EWMH_DelWindowHints(const EWin * ewin);
-void                EWMH_ProcessPropertyChange(EWin * ewin, Atom atom_change);
+int                 EWMH_ProcessPropertyChange(EWin * ewin, Atom atom_change);
 int                 EWMH_ProcessClientClientMessage(EWin * ewin,
                                                    XClientMessageEvent *
                                                    event);
@@ -96,7 +96,7 @@
 void                HintsSetWindowBorder(const EWin * ewin);
 void                HintsGetWindowHints(EWin * ewin);
 void                HintsDelWindowHints(const EWin * ewin);
-void                HintsProcessPropertyChange(EWin * ewin, Atom atom_change);
+void                HintsProcessPropertyChange(EWin * ewin, XEvent * ev);
 void                HintsProcessClientClientMessage(EWin * ewin,
                                                    XClientMessageEvent *
                                                    event);
@@ -122,7 +122,7 @@
 int                 ICCCM_ProcessClientClientMessage(EWin * ewin,
                                                     XClientMessageEvent *
                                                     event);
-void                ICCCM_GetTitle(EWin * ewin, Atom atom_change);
+void                ICCCM_GetTitle(EWin * ewin);
 void                ICCCM_Delete(const EWin * ewin);
 void                ICCCM_Save(const EWin * ewin);
 void                ICCCM_Iconify(const EWin * ewin);
@@ -148,10 +148,10 @@
 void                ICCCM_Withdraw(const EWin * ewin);
 void                ICCCM_Cmap(EWin * ewin);
 void                ICCCM_Focus(const EWin * ewin);
-void                ICCCM_GetGeoms(EWin * ewin, Atom atom_change);
-void                ICCCM_GetInfo(EWin * ewin, Atom atom_change);
-void                ICCCM_GetHints(EWin * ewin, Atom atom_change);
-void                ICCCM_ProcessPropertyChange(EWin * ewin, Atom atom_change);
+void                ICCCM_GetGeoms(EWin * ewin);
+void                ICCCM_GetInfo(EWin * ewin);
+void                ICCCM_GetHints(EWin * ewin);
+int                 ICCCM_ProcessPropertyChange(EWin * ewin, Atom atom_change);
 
 /* mwm.c */
 void                MWM_GetHints(EWin * ewin, Atom atom_change);
===================================================================
RCS file: /cvs/e/e16/e/src/icccm.c,v
retrieving revision 1.138
retrieving revision 1.139
diff -u -3 -r1.138 -r1.139
--- icccm.c     15 Apr 2007 14:54:11 -0000      1.138
+++ icccm.c     16 Apr 2007 16:36:10 -0000      1.139
@@ -78,11 +78,8 @@
 }
 
 void
-ICCCM_GetTitle(EWin * ewin, Atom atom_change)
+ICCCM_GetTitle(EWin * ewin)
 {
-   if (atom_change && atom_change != ECORE_X_ATOM_WM_NAME)
-      return;
-
    _EFREE(EwinGetIcccmName(ewin));
 
    EwinGetIcccmName(ewin) = ecore_x_icccm_title_get(EwinGetClientXwin(ewin));
@@ -388,14 +385,11 @@
 }
 
 void
-ICCCM_GetGeoms(EWin * ewin, Atom atom_change)
+ICCCM_GetGeoms(EWin * ewin)
 {
    XSizeHints          hint;
    long                mask;
 
-   if (atom_change && atom_change != ECORE_X_ATOM_WM_NORMAL_HINTS)
-      return;
-
    if (XGetWMNormalHints(disp, EwinGetClientXwin(ewin), &hint, &mask))
      {
        if (!(ewin->state.placed))
@@ -531,186 +525,148 @@
 
 #define TryGroup(e) (((e)->icccm.group != None) && ((e)->icccm.group != 
EwinGetClientXwin(e)))
 
-void
-ICCCM_GetInfo(EWin * ewin, Atom atom_change)
+static void
+ICCCM_GetWmClass(EWin * ewin)
 {
-   if (atom_change == 0 || atom_change == ECORE_X_ATOM_WM_CLASS)
-     {
-       _EFREE(EwinGetIcccmCName(ewin));
-       _EFREE(EwinGetIcccmClass(ewin));
-
-       ecore_x_icccm_name_class_get(EwinGetClientXwin(ewin),
-                                    &EwinGetIcccmCName(ewin),
-                                    &EwinGetIcccmClass(ewin));
-       if (!EwinGetIcccmCName(ewin) && TryGroup(ewin))
-          ecore_x_icccm_name_class_get(ewin->icccm.group,
-                                       &EwinGetIcccmCName(ewin),
-                                       &EwinGetIcccmClass(ewin));
-     }
+   _EFREE(EwinGetIcccmCName(ewin));
+   _EFREE(EwinGetIcccmClass(ewin));
 
-   if (atom_change == 0 || atom_change == ECORE_X_ATOM_WM_COMMAND)
-     {
-       int                 argc;
-       char              **argv, s[4096], *ss;
+   ecore_x_icccm_name_class_get(EwinGetClientXwin(ewin),
+                               &EwinGetIcccmCName(ewin),
+                               &EwinGetIcccmClass(ewin));
+   if (!EwinGetIcccmCName(ewin) && TryGroup(ewin))
+      ecore_x_icccm_name_class_get(ewin->icccm.group,
+                                  &EwinGetIcccmCName(ewin),
+                                  &EwinGetIcccmClass(ewin));
+}
 
-       _EFREE(ewin->icccm.wm_command);
+static void
+ICCCM_GetWmCommand(EWin * ewin)
+{
+   int                 argc;
+   char              **argv, s[4096], *ss;
 
-       argc = ecore_x_window_prop_string_list_get(EwinGetClientXwin(ewin),
-                                                  ECORE_X_ATOM_WM_COMMAND,
-                                                  &argv);
-       if ((argc < 0) && TryGroup(ewin))
-          argc = ecore_x_window_prop_string_list_get(ewin->icccm.group,
-                                                     ECORE_X_ATOM_WM_COMMAND,
-                                                     &argv);
+   _EFREE(ewin->icccm.wm_command);
 
-       ss = StrlistEncodeEscaped(s, sizeof(s), argv, argc);
-       ewin->icccm.wm_command = Estrdup(ss);
-       StrlistFree(argv, argc);
-     }
+   argc = ecore_x_window_prop_string_list_get(EwinGetClientXwin(ewin),
+                                             ECORE_X_ATOM_WM_COMMAND, &argv);
+   if ((argc < 0) && TryGroup(ewin))
+      argc = ecore_x_window_prop_string_list_get(ewin->icccm.group,
+                                                ECORE_X_ATOM_WM_COMMAND,
+                                                &argv);
+
+   ss = StrlistEncodeEscaped(s, sizeof(s), argv, argc);
+   ewin->icccm.wm_command = Estrdup(ss);
+   StrlistFree(argv, argc);
+}
 
-   if (atom_change == 0 || atom_change == ECORE_X_ATOM_WM_CLIENT_MACHINE)
-     {
-       _EFREE(ewin->icccm.wm_machine);
+static void
+ICCCM_GetWmClientMachine(EWin * ewin)
+{
+   _EFREE(ewin->icccm.wm_machine);
 
-       ewin->icccm.wm_machine =
-          ecore_x_window_prop_string_get(EwinGetClientXwin(ewin),
-                                         ECORE_X_ATOM_WM_CLIENT_MACHINE);
-       if (!ewin->icccm.wm_machine && TryGroup(ewin))
-          ewin->icccm.wm_machine =
-             ecore_x_window_prop_string_get(ewin->icccm.group,
-                                            ECORE_X_ATOM_WM_CLIENT_MACHINE);
-     }
+   ewin->icccm.wm_machine =
+      ecore_x_window_prop_string_get(EwinGetClientXwin(ewin),
+                                    ECORE_X_ATOM_WM_CLIENT_MACHINE);
+   if (!ewin->icccm.wm_machine && TryGroup(ewin))
+      ewin->icccm.wm_machine =
+        ecore_x_window_prop_string_get(ewin->icccm.group,
+                                       ECORE_X_ATOM_WM_CLIENT_MACHINE);
+}
 
-   if (atom_change == 0 || atom_change == ECORE_X_ATOM_WM_ICON_NAME)
-     {
-       _EFREE(ewin->icccm.wm_icon_name);
+static void
+ICCCM_GetWmIconName(EWin * ewin)
+{
+   _EFREE(ewin->icccm.wm_icon_name);
 
-       ewin->icccm.wm_icon_name =
-          ecore_x_window_prop_string_get(EwinGetClientXwin(ewin),
-                                         ECORE_X_ATOM_WM_ICON_NAME);
-       if (!ewin->icccm.wm_icon_name && TryGroup(ewin))
-          ewin->icccm.wm_icon_name =
-             ecore_x_window_prop_string_get(ewin->icccm.group,
-                                            ECORE_X_ATOM_WM_ICON_NAME);
-     }
+   ewin->icccm.wm_icon_name =
+      ecore_x_window_prop_string_get(EwinGetClientXwin(ewin),
+                                    ECORE_X_ATOM_WM_ICON_NAME);
+   if (!ewin->icccm.wm_icon_name && TryGroup(ewin))
+      ewin->icccm.wm_icon_name =
+        ecore_x_window_prop_string_get(ewin->icccm.group,
+                                       ECORE_X_ATOM_WM_ICON_NAME);
+}
 
-   if (atom_change == 0 || atom_change == ECORE_X_ATOM_WM_WINDOW_ROLE)
-     {
-       _EFREE(ewin->icccm.wm_role);
-       ewin->icccm.wm_role =
-          ecore_x_window_prop_string_get(EwinGetClientXwin(ewin),
-                                         ECORE_X_ATOM_WM_WINDOW_ROLE);
-     }
+static void
+ICCCM_GetWmWindowRole(EWin * ewin)
+{
+   _EFREE(ewin->icccm.wm_role);
+   ewin->icccm.wm_role =
+      ecore_x_window_prop_string_get(EwinGetClientXwin(ewin),
+                                    ECORE_X_ATOM_WM_WINDOW_ROLE);
 }
 
 void
-ICCCM_GetHints(EWin * ewin, Atom atom_change)
+ICCCM_GetInfo(EWin * ewin)
+{
+   ICCCM_GetWmClass(ewin);
+   ICCCM_GetWmCommand(ewin);
+   ICCCM_GetWmClientMachine(ewin);
+   ICCCM_GetWmIconName(ewin);
+   ICCCM_GetWmWindowRole(ewin);
+}
+
+static void
+ICCCM_GetWmHints(EWin * ewin)
 {
    XWMHints           *hint;
-   Window              win;
-   Atom               *prop;
-   int                 i, num;
 
-   hint = NULL;
-   if (atom_change == 0 || atom_change == ECORE_X_ATOM_WM_HINTS)
-      hint = XGetWMHints(disp, EwinGetClientXwin(ewin));
-   if (hint)
-     {
-       /* I have to make sure the thing i'm docking is a dock app */
-       if ((hint->flags & StateHint)
-           && (hint->initial_state == WithdrawnState))
+   hint = XGetWMHints(disp, EwinGetClientXwin(ewin));
+   if (!hint)
+      return;
+
+   /* I have to make sure the thing i'm docking is a dock app */
+   if ((hint->flags & StateHint) && (hint->initial_state == WithdrawnState))
+     {
+       if (hint->flags & (StateHint | IconWindowHint | IconPositionHint |
+                          WindowGroupHint))
          {
-            if (hint->flags & (StateHint | IconWindowHint | IconPositionHint |
-                               WindowGroupHint))
-              {
-                 if ((hint->icon_x == 0) && (hint->icon_y == 0)
-                     && hint->window_group == EwinGetClientXwin(ewin))
-                    ewin->state.docked = 1;
-              }
+            if ((hint->icon_x == 0) && (hint->icon_y == 0)
+                && hint->window_group == EwinGetClientXwin(ewin))
+               ewin->state.docked = 1;
          }
+     }
 
-       ewin->icccm.need_input =
-          ((hint->flags & InputHint) && (!hint->input)) ? 0 : 1;
+   ewin->icccm.need_input =
+      ((hint->flags & InputHint) && (!hint->input)) ? 0 : 1;
 
-       ewin->icccm.start_iconified =
-          ((hint->flags & StateHint) &&
-           (hint->initial_state == IconicState)) ? 1 : 0;
+   ewin->icccm.start_iconified =
+      ((hint->flags & StateHint) &&
+       (hint->initial_state == IconicState)) ? 1 : 0;
 
-       if (hint->flags & IconPixmapHint)
-         {
-            if (ewin->icccm.icon_pmap != hint->icon_pixmap)
-              {
-                 ewin->icccm.icon_pmap = hint->icon_pixmap;
-                 EwinChange(ewin, EWIN_CHANGE_ICON_PMAP);
-              }
-         }
-       else
+   if (hint->flags & IconPixmapHint)
+     {
+       if (ewin->icccm.icon_pmap != hint->icon_pixmap)
          {
-            ewin->icccm.icon_pmap = None;
+            ewin->icccm.icon_pmap = hint->icon_pixmap;
+            EwinChange(ewin, EWIN_CHANGE_ICON_PMAP);
          }
+     }
+   else
+     {
+       ewin->icccm.icon_pmap = None;
+     }
 
-       ewin->icccm.icon_mask =
-          (hint->flags & IconMaskHint) ? hint->icon_mask : None;
-
-       ewin->icccm.icon_win =
-          (hint->flags & IconWindowHint) ? hint->icon_window : None;
-
-       ewin->icccm.group =
-          (hint->flags & WindowGroupHint) ? hint->window_group : None;
+   ewin->icccm.icon_mask =
+      (hint->flags & IconMaskHint) ? hint->icon_mask : None;
 
-       if (hint->flags & XUrgencyHint)
-         {
-            if (!ewin->state.attention)
-               EwinChange(ewin, EWIN_CHANGE_ATTENTION);
-            ewin->icccm.urgency = 1;
-            ewin->state.attention = 1;
-         }
-       else
-         {
-            ewin->icccm.urgency = 0;
-         }
+   ewin->icccm.icon_win =
+      (hint->flags & IconWindowHint) ? hint->icon_window : None;
 
-       XFree(hint);
-     }
+   ewin->icccm.group =
+      (hint->flags & WindowGroupHint) ? hint->window_group : None;
 
-   if (atom_change == 0 || atom_change == ECORE_X_ATOM_WM_PROTOCOLS)
+   if (hint->flags & XUrgencyHint)
      {
-       if (XGetWMProtocols(disp, EwinGetClientXwin(ewin), &prop, &num))
-         {
-            ewin->icccm.take_focus = 0;
-            ewin->icccm.delete_window = 0;
-            for (i = 0; i < num; i++)
-              {
-                 if (prop[i] == ECORE_X_ATOM_WM_TAKE_FOCUS)
-                    ewin->icccm.take_focus = ewin->icccm.need_input = 1;
-                 else if (prop[i] == ECORE_X_ATOM_WM_DELETE_WINDOW)
-                    ewin->icccm.delete_window = 1;
-#if USE_XSYNC
-                 else if (prop[i] == ECORE_X_ATOM_NET_WM_SYNC_REQUEST)
-                   {
-                      unsigned int        c;
-
-                      ewin->ewmh.sync_request_enable = 1;
-                      ecore_x_window_prop_card32_get(EwinGetClientXwin(ewin),
-                                                     
ECORE_X_ATOM_NET_WM_SYNC_REQUEST_COUNTER,
-                                                     &c, 1);
-                      ewin->ewmh.sync_request_counter = c;
-                   }
-#endif
-              }
-            XFree(prop);
-         }
+       if (!ewin->state.attention)
+          EwinChange(ewin, EWIN_CHANGE_ATTENTION);
+       ewin->icccm.urgency = 1;
+       ewin->state.attention = 1;
      }
-
-   if (atom_change == 0 || atom_change == ECORE_X_ATOM_WM_TRANSIENT_FOR)
+   else
      {
-       ewin->icccm.transient = 0;
-       ewin->icccm.transient_for = None;
-       if (XGetTransientForHint(disp, EwinGetClientXwin(ewin), &win))
-         {
-            ewin->icccm.transient = 1;
-            ewin->icccm.transient_for = win;
-         }
+       ewin->icccm.urgency = 0;
      }
 
    if (ewin->icccm.group == EwinGetClientXwin(ewin))
@@ -722,22 +678,82 @@
        ewin->icccm.is_group_leader = 0;
      }
 
-   if (atom_change == 0 || atom_change == ECORE_X_ATOM_WM_CLIENT_LEADER)
+   XFree(hint);
+}
+
+static void
+ICCCM_GetWmProtocols(EWin * ewin)
+{
+   Atom               *prop;
+   int                 i, num;
+
+   if (XGetWMProtocols(disp, EwinGetClientXwin(ewin), &prop, &num))
      {
-       Ecore_X_Window      cleader;
+       ewin->icccm.take_focus = 0;
+       ewin->icccm.delete_window = 0;
+       for (i = 0; i < num; i++)
+         {
+            if (prop[i] == ECORE_X_ATOM_WM_TAKE_FOCUS)
+               ewin->icccm.take_focus = ewin->icccm.need_input = 1;
+            else if (prop[i] == ECORE_X_ATOM_WM_DELETE_WINDOW)
+               ewin->icccm.delete_window = 1;
+#if USE_XSYNC
+            else if (prop[i] == ECORE_X_ATOM_NET_WM_SYNC_REQUEST)
+              {
+                 unsigned int        c;
 
-       num = ecore_x_window_prop_window_get(EwinGetClientXwin(ewin),
-                                            ECORE_X_ATOM_WM_CLIENT_LEADER,
-                                            &cleader, 1);
-       if (num > 0)
-         {
-            ewin->icccm.client_leader = cleader;
-            if (!ewin->icccm.group)
-               ewin->icccm.group = cleader;
+                 ewin->ewmh.sync_request_enable = 1;
+                 ecore_x_window_prop_card32_get(EwinGetClientXwin(ewin),
+                                                
ECORE_X_ATOM_NET_WM_SYNC_REQUEST_COUNTER,
+                                                &c, 1);
+                 ewin->ewmh.sync_request_counter = c;
+              }
+#endif
          }
+       XFree(prop);
+     }
+}
+
+static void
+ICCCM_GetWmTransientFor(EWin * ewin)
+{
+   Window              win;
+
+   ewin->icccm.transient = 0;
+   ewin->icccm.transient_for = None;
+   if (XGetTransientForHint(disp, EwinGetClientXwin(ewin), &win))
+     {
+       ewin->icccm.transient = 1;
+       ewin->icccm.transient_for = win;
      }
 }
 
+static void
+ICCCM_GetWmClientLeader(EWin * ewin)
+{
+   int                 num;
+   Ecore_X_Window      cleader;
+
+   num = ecore_x_window_prop_window_get(EwinGetClientXwin(ewin),
+                                       ECORE_X_ATOM_WM_CLIENT_LEADER,
+                                       &cleader, 1);
+   if (num > 0)
+     {
+       ewin->icccm.client_leader = cleader;
+       if (!ewin->icccm.group)
+          ewin->icccm.group = cleader;
+     }
+}
+
+void
+ICCCM_GetHints(EWin * ewin)
+{
+   ICCCM_GetWmHints(ewin);
+   ICCCM_GetWmProtocols(ewin);
+   ICCCM_GetWmTransientFor(ewin);
+   ICCCM_GetWmClientLeader(ewin);
+}
+
 void
 ICCCM_SetIconSizes(void)
 {
@@ -757,14 +773,79 @@
 /*
  * Process received window property change
  */
-void
+int
 ICCCM_ProcessPropertyChange(EWin * ewin, Atom atom_change)
 {
-   ICCCM_GetTitle(ewin, atom_change);
-   ICCCM_GetHints(ewin, atom_change);
-   ICCCM_GetInfo(ewin, atom_change);
-   ICCCM_Cmap(ewin);
-   ICCCM_GetGeoms(ewin, atom_change);
+   if (atom_change == ECORE_X_ATOM_WM_NAME)
+     {
+       ICCCM_GetTitle(ewin);
+       return 1;
+     }
+
+   /* ICCCM_GetHints */
+   if (atom_change == ECORE_X_ATOM_WM_HINTS)
+     {
+       ICCCM_GetWmHints(ewin);
+       return 1;
+     }
+   if (atom_change == ECORE_X_ATOM_WM_PROTOCOLS)
+     {
+       ICCCM_GetWmProtocols(ewin);
+       return 1;
+     }
+   if (atom_change == ECORE_X_ATOM_WM_TRANSIENT_FOR)
+     {
+       ICCCM_GetWmTransientFor(ewin);
+       return 1;
+     }
+   if (atom_change == ECORE_X_ATOM_WM_CLIENT_LEADER)
+     {
+       ICCCM_GetWmClientLeader(ewin);
+       return 1;
+     }
+
+   /* ICCCM_GetInfo */
+   if (atom_change == ECORE_X_ATOM_WM_ICON_NAME)
+     {
+       ICCCM_GetWmIconName(ewin);
+       return 1;
+     }
+#if 1                          /* FIXME - Any reason to process these? */
+   if (atom_change == ECORE_X_ATOM_WM_CLASS)
+     {
+       ICCCM_GetWmClass(ewin);
+       return 1;
+     }
+   if (atom_change == ECORE_X_ATOM_WM_COMMAND)
+     {
+       ICCCM_GetWmCommand(ewin);
+       return 1;
+     }
+   if (atom_change == ECORE_X_ATOM_WM_CLIENT_MACHINE)
+     {
+       ICCCM_GetWmClientMachine(ewin);
+       return 1;
+     }
+   if (atom_change == ECORE_X_ATOM_WM_WINDOW_ROLE)
+     {
+       ICCCM_GetWmWindowRole(ewin);
+       return 1;
+     }
+#endif
+
+   if (atom_change == ECORE_X_ATOM_WM_COLORMAP_WINDOWS)
+     {
+       ICCCM_Cmap(ewin);
+       return 1;
+     }
+
+   if (atom_change == ECORE_X_ATOM_WM_NORMAL_HINTS)
+     {
+       ICCCM_GetGeoms(ewin);
+       return 1;
+     }
+
+   return 0;
 }
 
 #if USE_XSYNC



-------------------------------------------------------------------------
This SF.net email is sponsored by DB2 Express
Download DB2 Express C - the FREE version of DB2 express and take
control of your XML. No limits. Just data. Click to get it now.
http://sourceforge.net/powerbar/db2/
_______________________________________________
enlightenment-cvs mailing list
enlightenment-cvs@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/enlightenment-cvs

Reply via email to