1. Do we need to remember mouse down on all buttons?
authorsebastid <sebastid>
Sat, 4 Jun 2005 16:31:45 +0000 (16:31 +0000)
committersebastid <sebastid@7cbeb6ba-43b4-40fd-8cce-4c39aea84d33>
Sat, 4 Jun 2005 16:31:45 +0000 (16:31 +0000)
2. Is there any problem with calling pointer_ungrab unconditionally?

SVN revision: 15120

netwm.txt
src/bin/e_border.c
src/bin/e_border.h
src/bin/e_hints.c

index 511f166..9adfa3f 100644 (file)
--- a/netwm.txt
+++ b/netwm.txt
  * T = For taskbar
  */
 
-_NET_ACTIVE_WINDOW                  [?] /* Listen to active window requests */
+/* Root Window Properties (and Related Messages) */
+_NET_SUPPORTED                      [X]
 _NET_CLIENT_LIST                    [X]
 _NET_CLIENT_LIST_STACKING           [X]
-_NET_CLOSE_WINDOW                   [P]
-_NET_CURRENT_DESKTOP                [P]
+_NET_NUMBER_OF_DESKTOPS             [P]
 _NET_DESKTOP_GEOMETRY               [P]
-_NET_DESKTOP_LAYOUT                 [P]
-_NET_DESKTOP_NAMES                  [ ]
 _NET_DESKTOP_VIEWPORT               [P]
-_NET_FRAME_EXTENTS                  [X]
-_NET_MOVERESIZE_WINDOW              [P]
-_NET_NUMBER_OF_DESKTOPS             [P]
-_NET_REQUEST_FRAME_EXTENTS          [X]
-_NET_RESTACK_WINDOW                 [P]
-_NET_SHOWING_DESKTOP                [ ]
-_NET_SUPPORTED                      [X]
+_NET_CURRENT_DESKTOP                [P]
+_NET_DESKTOP_NAMES                  [ ]
+_NET_ACTIVE_WINDOW                  [?] /* Listen to active window requests */
+_NET_WORKAREA                       [ ]
 _NET_SUPPORTING_WM_CHECK            [X]
 _NET_VIRTUAL_ROOTS                  [X]
-_NET_WM_ACTION_CHANGE_DESKTOP       [ ]
-_NET_WM_ACTION_CLOSE                [ ]
-_NET_WM_ACTION_FULLSCREEN           [ ]
-_NET_WM_ACTION_MAXIMIZE_HORZ        [ ]
-_NET_WM_ACTION_MAXIMIZE_VERT        [ ]
-_NET_WM_ACTION_MINIMIZE             [ ]
-_NET_WM_ACTION_MOVE                 [ ]
-_NET_WM_ACTION_RESIZE               [ ]
-_NET_WM_ACTION_SHADE                [ ]
-_NET_WM_ACTION_STICK                [ ]
-_NET_WM_ALLOWED_ACTIONS             [ ]
-_NET_WM_DESKTOP                     [ ]
-_NET_WM_HANDLED_ICONS               [T]
-_NET_WM_ICON                        [X]
-_NET_WM_ICON_GEOMETRY               [T]
-_NET_WM_ICON_NAME                   [X]
-_NET_WM_MOVERESIZE                  [ ]
+_NET_DESKTOP_LAYOUT                 [P]
+_NET_SHOWING_DESKTOP                [ ]
+
+/* Other Root Window Messages */
+_NET_CLOSE_WINDOW                   [P]
+_NET_MOVERESIZE_WINDOW              [P]
+_NET_WM_MOVERESIZE                  [X]
+_NET_RESTACK_WINDOW                 [P]
+_NET_REQUEST_FRAME_EXTENTS          [X]
+
+/* Application Window Properties */
 _NET_WM_NAME                        [X]
-_NET_WM_PID                         [X]
-_NET_WM_PING                        [ ]
+_NET_WM_VISIBLE_NAME                [X] /* E uses _NET_WM_NAME, doesn't need to set this */
+_NET_WM_ICON_NAME                   [X]
+_NET_WM_VISIBLE_ICON_NAME           [X] /* E uses _NET_WM_ICON_NAME, doesn't need to set this */
+_NET_WM_DESKTOP                     [ ]
+/* Do we have to do anything special with these, except
+ * stacking order? */
+_NET_WM_WINDOW_TYPE                 [X]
+_NET_WM_WINDOW_TYPE_DESKTOP         [X]
+_NET_WM_WINDOW_TYPE_DOCK            [X]
+_NET_WM_WINDOW_TYPE_TOOLBAR         [X]
+_NET_WM_WINDOW_TYPE_MENU            [X]
+_NET_WM_WINDOW_TYPE_UTILITY         [X]
+_NET_WM_WINDOW_TYPE_SPLASH          [X]
+_NET_WM_WINDOW_TYPE_DIALOG          [X]
+_NET_WM_WINDOW_TYPE_NORMAL          [X]
 _NET_WM_STATE                       [X]
 _NET_WM_STATE_MODAL                 [ ]
 /* _NET_WM_STATE_STICKY indicates that the
@@ -66,22 +68,25 @@ _NET_WM_STATE_FULLSCREEN            [X]
 _NET_WM_STATE_ABOVE                 [X]
 _NET_WM_STATE_BELOW                 [X]
 _NET_WM_STATE_DEMANDS_ATTENTION     [ ]
+_NET_WM_ALLOWED_ACTIONS             [ ]
+_NET_WM_ACTION_MOVE                 [ ]
+_NET_WM_ACTION_RESIZE               [ ]
+_NET_WM_ACTION_MINIMIZE             [ ]
+_NET_WM_ACTION_SHADE                [ ]
+_NET_WM_ACTION_STICK                [ ]
+_NET_WM_ACTION_MAXIMIZE_HORZ        [ ]
+_NET_WM_ACTION_MAXIMIZE_VERT        [ ]
+_NET_WM_ACTION_FULLSCREEN           [ ]
+_NET_WM_ACTION_CHANGE_DESKTOP       [ ]
+_NET_WM_ACTION_CLOSE                [ ]
 _NET_WM_STRUT                       [X]
 _NET_WM_STRUT_PARTIAL               [X]
+_NET_WM_ICON_GEOMETRY               [T]
+_NET_WM_ICON                        [X]
+_NET_WM_PID                         [X]
+_NET_WM_HANDLED_ICONS               [T]
+_NET_WM_USER_TIME                   [X]
+_NET_FRAME_EXTENTS                  [X]
+_NET_WM_PING                        [ ]
 _NET_WM_SYNC_REQUEST                [ ]
 _NET_WM_SYNC_REQUEST_COUNTER        [ ]
-_NET_WM_USER_TIME                   [X]
-_NET_WM_VISIBLE_ICON_NAME           [X] /* E uses _NET_WM_ICON_NAME, doesn't need to set this */
-_NET_WM_VISIBLE_NAME                [X] /* E uses _NET_WM_NAME, doesn't need to set this */
-/* Do we have to do anything special with these, except
- * stacking order? */
-_NET_WM_WINDOW_TYPE                 [X]
-_NET_WM_WINDOW_TYPE_DESKTOP         [X]
-_NET_WM_WINDOW_TYPE_DOCK            [X]
-_NET_WM_WINDOW_TYPE_TOOLBAR         [X]
-_NET_WM_WINDOW_TYPE_MENU            [X]
-_NET_WM_WINDOW_TYPE_UTILITY         [X]
-_NET_WM_WINDOW_TYPE_SPLASH          [X]
-_NET_WM_WINDOW_TYPE_DIALOG          [X]
-_NET_WM_WINDOW_TYPE_NORMAL          [X]
-_NET_WORKAREA                       [ ]
index f3617ee..125af3b 100644 (file)
@@ -6,15 +6,17 @@
 //#define INOUTDEBUG_MOUSE 1
 //#define INOUTDEBUG_FOCUS 1
 
-#define RESIZE_NONE 0
-#define RESIZE_TL   1
-#define RESIZE_T    2
-#define RESIZE_TR   3
-#define RESIZE_R    4
-#define RESIZE_BR   5
-#define RESIZE_B    6
-#define RESIZE_BL   7
-#define RESIZE_L    8
+/* These are compatible with netwm */
+#define RESIZE_TL   0
+#define RESIZE_T    1
+#define RESIZE_TR   2
+#define RESIZE_R    3
+#define RESIZE_BR   4
+#define RESIZE_B    5
+#define RESIZE_BL   6
+#define RESIZE_L    7
+#define MOVE        8
+#define RESIZE_NONE 11
 
 /* local subsystem functions */
 static void _e_border_free(E_Border *bd);
@@ -37,6 +39,7 @@ static int _e_border_cb_window_shape(void *data, int ev_type, void *ev);
 static int _e_border_cb_window_focus_in(void *data, int ev_type, void *ev);
 static int _e_border_cb_window_focus_out(void *data, int ev_type, void *ev);
 static int _e_border_cb_window_state_request(void *data, int ev_type, void *ev);
+static int _e_border_cb_window_move_resize_request(void *data, int ev_type, void *ev);
 static int _e_border_cb_desktop_change(void *data, int ev_type, void *ev);
 static int _e_border_cb_client_message(void *data, int ev_type, void *ev);
 
@@ -163,6 +166,7 @@ e_border_init(void)
    handlers = evas_list_append(handlers, ecore_event_handler_add(ECORE_X_EVENT_WINDOW_FOCUS_IN, _e_border_cb_window_focus_in, NULL));
    handlers = evas_list_append(handlers, ecore_event_handler_add(ECORE_X_EVENT_WINDOW_FOCUS_OUT, _e_border_cb_window_focus_out, NULL));
    handlers = evas_list_append(handlers, ecore_event_handler_add(ECORE_X_EVENT_WINDOW_STATE_REQUEST, _e_border_cb_window_state_request, NULL));
+   handlers = evas_list_append(handlers, ecore_event_handler_add(ECORE_X_EVENT_WINDOW_MOVE_RESIZE_REQUEST, _e_border_cb_window_move_resize_request, NULL));
    handlers = evas_list_append(handlers, ecore_event_handler_add(ECORE_X_EVENT_DESKTOP_CHANGE, _e_border_cb_desktop_change, NULL));
    handlers = evas_list_append(handlers, ecore_event_handler_add(ECORE_X_EVENT_CLIENT_MESSAGE, _e_border_cb_client_message, NULL));
    ecore_x_passive_grab_replay_func_set(_e_border_cb_grab_replay, NULL);
@@ -398,6 +402,7 @@ e_border_new(E_Container *con, Ecore_X_Window win, int first_map)
    bd->w = bd->client.w;
    bd->h = bd->client.h;
 
+   bd->resize_mode = RESIZE_NONE;
    bd->layer = 100;
    bd->changes.size = 1;
    bd->changes.shape = 1;
@@ -2233,6 +2238,118 @@ _e_border_cb_window_state_request(void *data, int ev_type, void *ev)
 }
 
 static int
+_e_border_cb_window_move_resize_request(void *data, int ev_type, void *ev)
+{
+   E_Border *bd;
+   Ecore_X_Event_Window_Move_Resize_Request *e;
+
+   e = ev;
+   bd = e_border_find_by_client_window(e->win);
+   if (!bd) return 1;
+
+   if ((bd->shaded) || (bd->shading) || (bd->maximized) ||
+       (bd->moving) || (bd->resize_mode != RESIZE_NONE))
+     return 1;
+
+   if ((e->button >= 1) && (e->button <= 3))
+     {
+       bd->mouse.last_down[e->button - 1].mx = e->x;
+       bd->mouse.last_down[e->button - 1].my = e->y;
+       bd->mouse.last_down[e->button - 1].x = bd->x;
+       bd->mouse.last_down[e->button - 1].y = bd->y;
+       bd->mouse.last_down[e->button - 1].w = bd->w;
+       bd->mouse.last_down[e->button - 1].h = bd->h;
+     }
+   else
+     {
+       bd->moveinfo.down.x = bd->x;
+       bd->moveinfo.down.y = bd->y;
+       bd->moveinfo.down.w = bd->w;
+       bd->moveinfo.down.h = bd->h;
+     }
+   bd->mouse.current.mx = e->x;
+   bd->mouse.current.my = e->y;
+   bd->moveinfo.down.button = e->button;
+   bd->moveinfo.down.mx = e->x;
+   bd->moveinfo.down.my = e->y;
+   bd->grab = 1;
+
+   e_border_raise(bd);
+   if (e->direction == RESIZE_TL)
+     {
+       bd->resize_mode = RESIZE_TL;
+
+       bd->cur_mouse_action = e_action_find("window_resize");
+       _e_border_resize_begin(bd);
+       GRAV_SET(bd, ECORE_X_GRAVITY_SE);
+     }
+   else if (e->direction == RESIZE_T)
+     {
+       bd->resize_mode = RESIZE_T;
+
+       bd->cur_mouse_action = e_action_find("window_resize");
+       _e_border_resize_begin(bd);
+       GRAV_SET(bd, ECORE_X_GRAVITY_S);
+     }
+   else if (e->direction == RESIZE_TR)
+     {
+       bd->resize_mode = RESIZE_TR;
+
+       bd->cur_mouse_action = e_action_find("window_resize");
+       _e_border_resize_begin(bd);
+       GRAV_SET(bd, ECORE_X_GRAVITY_SW);
+     }
+   else if (e->direction == RESIZE_R)
+     {
+       bd->resize_mode = RESIZE_R;
+
+       bd->cur_mouse_action = e_action_find("window_resize");
+       _e_border_resize_begin(bd);
+       GRAV_SET(bd, ECORE_X_GRAVITY_W);
+     }
+   else if (e->direction == RESIZE_BR)
+     {
+       bd->resize_mode = RESIZE_BR;
+
+       bd->cur_mouse_action = e_action_find("window_resize");
+       _e_border_resize_begin(bd);
+       GRAV_SET(bd, ECORE_X_GRAVITY_NW);
+     }
+   else if (e->direction == RESIZE_B)
+     {
+       bd->resize_mode = RESIZE_B;
+
+       bd->cur_mouse_action = e_action_find("window_resize");
+       _e_border_resize_begin(bd);
+       GRAV_SET(bd, ECORE_X_GRAVITY_N);
+     }
+   else if (e->direction == RESIZE_BL)
+     {
+       bd->resize_mode = RESIZE_BL;
+
+       bd->cur_mouse_action = e_action_find("window_resize");
+       _e_border_resize_begin(bd);
+       GRAV_SET(bd, ECORE_X_GRAVITY_NE);
+     }
+   else if (e->direction == RESIZE_L)
+     {
+       bd->resize_mode = RESIZE_L;
+
+       bd->cur_mouse_action = e_action_find("window_resize");
+       _e_border_resize_begin(bd);
+       GRAV_SET(bd, ECORE_X_GRAVITY_E);
+     }
+   else if (e->direction == MOVE)
+     {
+       bd->moving = 1;
+
+       bd->cur_mouse_action = e_action_find("window_move");
+       _e_border_move_begin(bd);
+     }
+   return 1;
+}
+
+static int
 _e_border_cb_desktop_change(void *data, int ev_type, void *ev)
 {
    E_Border *bd;
@@ -2654,6 +2771,13 @@ _e_border_cb_mouse_down(void *data, int type, void *event)
             bd->mouse.last_down[ev->button - 1].w = bd->w;
             bd->mouse.last_down[ev->button - 1].h = bd->h;
          }
+       else
+         {
+            bd->moveinfo.down.x = bd->x;
+            bd->moveinfo.down.y = bd->y;
+            bd->moveinfo.down.w = bd->w;
+            bd->moveinfo.down.h = bd->h;
+         }
        bd->mouse.current.mx = ev->root.x;
        bd->mouse.current.my = ev->root.y;
        if (!bd->cur_mouse_action)
@@ -2678,6 +2802,13 @@ _e_border_cb_mouse_down(void *data, int type, void *event)
        bd->mouse.last_down[ev->button - 1].w = bd->w;
        bd->mouse.last_down[ev->button - 1].h = bd->h;
      }
+   else
+     {
+       bd->moveinfo.down.x = bd->x;
+       bd->moveinfo.down.y = bd->y;
+       bd->moveinfo.down.w = bd->w;
+       bd->moveinfo.down.h = bd->h;
+     }
    bd->mouse.current.mx = ev->root.x;
    bd->mouse.current.my = ev->root.y;
 /*   
@@ -2789,9 +2920,9 @@ _e_border_cb_mouse_move(void *data, int type, void *event)
          }
        else
          {
-            x = bd->x +
+            x = bd->moveinfo.down.x +
               (bd->mouse.current.mx - bd->moveinfo.down.mx);
-            y = bd->y +
+            y = bd->moveinfo.down.y +
               (bd->mouse.current.my - bd->moveinfo.down.my);
          }
        new_x = x;
@@ -3874,7 +4005,7 @@ _e_border_resize_handle(E_Border *bd)
          w = bd->mouse.last_down[bd->moveinfo.down.button - 1].w +
          (bd->mouse.current.mx - bd->moveinfo.down.mx);
        else
-         w = bd->w + (bd->mouse.current.mx - bd->moveinfo.down.mx);
+         w = bd->moveinfo.down.w + (bd->mouse.current.mx - bd->moveinfo.down.mx);
      }
    else if ((bd->resize_mode == RESIZE_TL) ||
            (bd->resize_mode == RESIZE_L) ||
@@ -3885,7 +4016,7 @@ _e_border_resize_handle(E_Border *bd)
          w = bd->mouse.last_down[bd->moveinfo.down.button - 1].w -
          (bd->mouse.current.mx - bd->moveinfo.down.mx);
        else
-         w = bd->w - (bd->mouse.current.mx - bd->moveinfo.down.mx);
+         w = bd->moveinfo.down.w - (bd->mouse.current.mx - bd->moveinfo.down.mx);
      }
 
    if ((bd->resize_mode == RESIZE_TL) ||
@@ -3897,7 +4028,7 @@ _e_border_resize_handle(E_Border *bd)
          h = bd->mouse.last_down[bd->moveinfo.down.button - 1].h -
          (bd->mouse.current.my - bd->moveinfo.down.my);
        else
-         h = bd->h - (bd->mouse.current.my - bd->moveinfo.down.my);
+         h = bd->moveinfo.down.h - (bd->mouse.current.my - bd->moveinfo.down.my);
      }
    else if ((bd->resize_mode == RESIZE_BL) ||
            (bd->resize_mode == RESIZE_B) ||
@@ -3908,7 +4039,7 @@ _e_border_resize_handle(E_Border *bd)
          h = bd->mouse.last_down[bd->moveinfo.down.button - 1].h +
          (bd->mouse.current.my - bd->moveinfo.down.my);
        else
-         h = bd->h + (bd->mouse.current.my - bd->moveinfo.down.my);
+         h = bd->moveinfo.down.h + (bd->mouse.current.my - bd->moveinfo.down.my);
      }
 
    tw = bd->w;
@@ -4531,6 +4662,8 @@ _e_border_resize_begin(E_Border *bd)
        w = (bd->client.w - bd->client.icccm.min_w) / bd->client.icccm.step_w;
        h = (bd->client.h - bd->client.icccm.min_h) / bd->client.icccm.step_h;
      }
+   if (bd->grab)
+     ecore_x_pointer_grab(bd->win);
    e_resize_begin(bd->zone, w, h);
    resize = bd;
 }
@@ -4538,6 +4671,9 @@ _e_border_resize_begin(E_Border *bd)
 static void
 _e_border_resize_end(E_Border *bd)
 {
+   if (bd->grab)
+     ecore_x_pointer_ungrab();
+   bd->grab = 0;
    e_resize_end();
    resize = NULL;
 }
@@ -4564,6 +4700,8 @@ _e_border_resize_update(E_Border *bd)
 static void
 _e_border_move_begin(E_Border *bd)
 {
+   if (bd->grab)
+     ecore_x_pointer_grab(bd->win);
    e_move_begin(bd->zone, bd->x, bd->y);
    move = bd;
 }
@@ -4571,6 +4709,9 @@ _e_border_move_begin(E_Border *bd)
 static void
 _e_border_move_end(E_Border *bd)
 {
+   if (bd->grab)
+     ecore_x_pointer_ungrab();
+   bd->grab = 0;
    e_move_end();
    move = NULL;
 }
index e3e1a09..4d0384d 100644 (file)
@@ -247,6 +247,7 @@ struct _E_Border
    unsigned char   already_unparented : 1;
    unsigned char   need_reparent : 1;
    unsigned char   button_grabbed : 1;
+   unsigned char   grab : 1;
  
    unsigned char   changed : 1;
    
index 21d4b63..988e007 100644 (file)
@@ -17,6 +17,8 @@ e_hints_init(void)
        for (i = 0; i < num; i++)
          {
             Ecore_X_Window win;
+            Ecore_X_Atom supported[35];
+            int num;
             
             win = ecore_x_window_new(roots[i], -200, -200, 5, 5);
 /*          
@@ -38,52 +40,82 @@ e_hints_init(void)
 /*          ecore_x_netwm_wm_identify(roots[i], win, "KWin");*/
             ecore_x_netwm_wm_identify(roots[i], win, "Enlightenment");
 
+            num = 0;
             /* Set what hints we support */
-            ecore_x_netwm_supported(roots[i], ECORE_X_ATOM_NET_ACTIVE_WINDOW, 1);
-            ecore_x_netwm_supported(roots[i], ECORE_X_ATOM_NET_CLIENT_LIST, 1);
-            ecore_x_netwm_supported(roots[i], ECORE_X_ATOM_NET_CLIENT_LIST_STACKING, 1);
+            /* Root Window Properties (and Related Messages) */
+            /*ecore_x_netwm_supported(roots[i], ECORE_X_ATOM_NET_SUPPORTED, 1);*/
+            supported[num++] = ECORE_X_ATOM_NET_CLIENT_LIST;
+            supported[num++] = ECORE_X_ATOM_NET_CLIENT_LIST_STACKING;
+            /*ecore_x_netwm_supported(roots[i], ECORE_X_ATOM_NET_NUMBER_OF_DESKTOPS, 1);*/
+            /*ecore_x_netwm_supported(roots[i], ECORE_X_ATOM_NET_DESKTOP_GEOMETRY, 1);*/
+            /*ecore_x_netwm_supported(roots[i], ECORE_X_ATOM_NET_DESKTOP_VIEWPORT, 1);*/
+            /*ecore_x_netwm_supported(roots[i], ECORE_X_ATOM_NET_CURRENT_DESKTOP, 1);*/
+            /*ecore_x_netwm_supported(roots[i], ECORE_X_ATOM_NET_DESKTOP_NAMES, 1);*/
+            supported[num++] = ECORE_X_ATOM_NET_ACTIVE_WINDOW;
+            /*ecore_x_netwm_supported(roots[i], ECORE_X_ATOM_NET_WORKAREA, 1);*/
+            supported[num++] = ECORE_X_ATOM_NET_SUPPORTING_WM_CHECK;
+            supported[num++] = ECORE_X_ATOM_NET_VIRTUAL_ROOTS;
+            /*ecore_x_netwm_supported(roots[i], ECORE_X_ATOM_NET_DESKTOP_LAYOUT, 1);*/
+            /*ecore_x_netwm_supported(roots[i], ECORE_X_ATOM_NET_SHOWING_DESKTOP, 1);*/
 
-            ecore_x_netwm_supported(roots[i], ECORE_X_ATOM_NET_FRAME_EXTENTS, 1);
-            ecore_x_netwm_supported(roots[i], ECORE_X_ATOM_NET_REQUEST_FRAME_EXTENTS, 1);
+            /* Other Root Window Messages */
+            /*ecore_x_netwm_supported(roots[i], ECORE_X_ATOM_NET_CLOSE_WINDOW, 1);*/
+            /*ecore_x_netwm_supported(roots[i], ECORE_X_ATOM_NET_MOVERESIZE_WINDOW, 1);*/
+            supported[num++] = ECORE_X_ATOM_NET_WM_MOVERESIZE;
+            /*ecore_x_netwm_supported(roots[i], ECORE_X_ATOM_NET_RESTACK_WINDOW, 1);*/
+            supported[num++] = ECORE_X_ATOM_NET_REQUEST_FRAME_EXTENTS;
 
-            ecore_x_netwm_supported(roots[i], ECORE_X_ATOM_NET_SUPPORTED, 1);
-            ecore_x_netwm_supported(roots[i], ECORE_X_ATOM_NET_SUPPORTING_WM_CHECK, 1);
-            ecore_x_netwm_supported(roots[i], ECORE_X_ATOM_NET_VIRTUAL_ROOTS, 1);
-
-            ecore_x_netwm_supported(roots[i], ECORE_X_ATOM_NET_WM_ICON, 1);
-
-            ecore_x_netwm_supported(roots[i], ECORE_X_ATOM_NET_WM_ICON_NAME, 1);
-
-            ecore_x_netwm_supported(roots[i], ECORE_X_ATOM_NET_WM_NAME, 1);
-            ecore_x_netwm_supported(roots[i], ECORE_X_ATOM_NET_WM_PID, 1);
-
-            ecore_x_netwm_supported(roots[i], ECORE_X_ATOM_NET_WM_STATE, 1);
-            ecore_x_netwm_supported(roots[i], ECORE_X_ATOM_NET_WM_STATE_STICKY, 1);
-            ecore_x_netwm_supported(roots[i], ECORE_X_ATOM_NET_WM_STATE_MAXIMIZED_VERT, 1);
-            ecore_x_netwm_supported(roots[i], ECORE_X_ATOM_NET_WM_STATE_MAXIMIZED_HORZ, 1);
-            ecore_x_netwm_supported(roots[i], ECORE_X_ATOM_NET_WM_STATE_SHADED, 1);
-            ecore_x_netwm_supported(roots[i], ECORE_X_ATOM_NET_WM_STATE_HIDDEN, 1);
-            ecore_x_netwm_supported(roots[i], ECORE_X_ATOM_NET_WM_STATE_FULLSCREEN, 1);
-            ecore_x_netwm_supported(roots[i], ECORE_X_ATOM_NET_WM_STATE_ABOVE, 1);
-            ecore_x_netwm_supported(roots[i], ECORE_X_ATOM_NET_WM_STATE_BELOW, 1);
-
-            ecore_x_netwm_supported(roots[i], ECORE_X_ATOM_NET_WM_STRUT, 1);
-            ecore_x_netwm_supported(roots[i], ECORE_X_ATOM_NET_WM_STRUT_PARTIAL, 1);
-
-            ecore_x_netwm_supported(roots[i], ECORE_X_ATOM_NET_WM_USER_TIME, 1);
-            ecore_x_netwm_supported(roots[i], ECORE_X_ATOM_NET_WM_VISIBLE_ICON_NAME, 1);
-            ecore_x_netwm_supported(roots[i], ECORE_X_ATOM_NET_WM_VISIBLE_NAME, 1);
-
-            ecore_x_netwm_supported(roots[i], ECORE_X_ATOM_NET_WM_WINDOW_TYPE, 1);
-            ecore_x_netwm_supported(roots[i], ECORE_X_ATOM_NET_WM_WINDOW_TYPE_DESKTOP, 1);
-            ecore_x_netwm_supported(roots[i], ECORE_X_ATOM_NET_WM_WINDOW_TYPE_DOCK, 1);
-            ecore_x_netwm_supported(roots[i], ECORE_X_ATOM_NET_WM_WINDOW_TYPE_TOOLBAR, 1);
-            ecore_x_netwm_supported(roots[i], ECORE_X_ATOM_NET_WM_WINDOW_TYPE_MENU, 1);
-            ecore_x_netwm_supported(roots[i], ECORE_X_ATOM_NET_WM_WINDOW_TYPE_UTILITY, 1);
-            ecore_x_netwm_supported(roots[i], ECORE_X_ATOM_NET_WM_WINDOW_TYPE_SPLASH, 1);
-            ecore_x_netwm_supported(roots[i], ECORE_X_ATOM_NET_WM_WINDOW_TYPE_DIALOG, 1);
-            ecore_x_netwm_supported(roots[i], ECORE_X_ATOM_NET_WM_WINDOW_TYPE_NORMAL, 1);
-            ecore_x_netwm_supported(roots[i], ECORE_X_ATOM_NET_WORKAREA, 1);
+            /* Application Window Properties */
+            supported[num++] = ECORE_X_ATOM_NET_WM_NAME;
+            supported[num++] = ECORE_X_ATOM_NET_WM_VISIBLE_NAME;
+            supported[num++] = ECORE_X_ATOM_NET_WM_ICON_NAME;
+            supported[num++] = ECORE_X_ATOM_NET_WM_VISIBLE_ICON_NAME;
+            /*ecore_x_netwm_supported(roots[i], ECORE_X_ATOM_NET_WM_DESKTOP, 1);*/
+            supported[num++] = ECORE_X_ATOM_NET_WM_WINDOW_TYPE;
+            supported[num++] = ECORE_X_ATOM_NET_WM_WINDOW_TYPE_DESKTOP;
+            supported[num++] = ECORE_X_ATOM_NET_WM_WINDOW_TYPE_DOCK;
+            supported[num++] = ECORE_X_ATOM_NET_WM_WINDOW_TYPE_TOOLBAR;
+            supported[num++] = ECORE_X_ATOM_NET_WM_WINDOW_TYPE_MENU;
+            supported[num++] = ECORE_X_ATOM_NET_WM_WINDOW_TYPE_UTILITY;
+            supported[num++] = ECORE_X_ATOM_NET_WM_WINDOW_TYPE_SPLASH;
+            supported[num++] = ECORE_X_ATOM_NET_WM_WINDOW_TYPE_DIALOG;
+            supported[num++] = ECORE_X_ATOM_NET_WM_WINDOW_TYPE_NORMAL;
+            supported[num++] = ECORE_X_ATOM_NET_WM_STATE;
+            /*ecore_x_netwm_supported(roots[i], ECORE_X_ATOM_NET_WM_STATE_MODAL, 1);*/
+            supported[num++] = ECORE_X_ATOM_NET_WM_STATE_STICKY;
+            supported[num++] = ECORE_X_ATOM_NET_WM_STATE_MAXIMIZED_VERT;
+            supported[num++] = ECORE_X_ATOM_NET_WM_STATE_MAXIMIZED_HORZ;
+            supported[num++] = ECORE_X_ATOM_NET_WM_STATE_SHADED;
+            /*ecore_x_netwm_supported(roots[i], ECORE_X_ATOM_NET_WM_STATE_SKIP_TASKBAR, 1);*/
+            /*ecore_x_netwm_supported(roots[i], ECORE_X_ATOM_NET_WM_STATE_SKIP_PAGER, 1);*/
+            supported[num++] = ECORE_X_ATOM_NET_WM_STATE_HIDDEN;
+            supported[num++] = ECORE_X_ATOM_NET_WM_STATE_FULLSCREEN;
+            supported[num++] = ECORE_X_ATOM_NET_WM_STATE_ABOVE;
+            supported[num++] = ECORE_X_ATOM_NET_WM_STATE_BELOW;
+            /*ecore_x_netwm_supported(roots[i], ECORE_X_ATOM_NET_WM_STATE_DEMANDS_ATTENTION, 1);*/
+            /*ecore_x_netwm_supported(roots[i], ECORE_X_ATOM_NET_WM_ALLOWED_ACTIONS, 1);*/
+            /*ecore_x_netwm_supported(roots[i], ECORE_X_ATOM_NET_WM_ACTION_MOVE, 1);*/
+            /*ecore_x_netwm_supported(roots[i], ECORE_X_ATOM_NET_WM_ACTION_RESIZE, 1);*/
+            /*ecore_x_netwm_supported(roots[i], ECORE_X_ATOM_NET_WM_ACTION_MINIMIZE, 1);*/
+            /*ecore_x_netwm_supported(roots[i], ECORE_X_ATOM_NET_WM_ACTION_SHADE, 1);*/
+            /*ecore_x_netwm_supported(roots[i], ECORE_X_ATOM_NET_WM_ACTION_STICK, 1);*/
+            /*ecore_x_netwm_supported(roots[i], ECORE_X_ATOM_NET_WM_ACTION_MAXIMIZE_HORZ, 1);*/
+            /*ecore_x_netwm_supported(roots[i], ECORE_X_ATOM_NET_WM_ACTION_MAXIMIZE_VERT, 1);*/
+            /*ecore_x_netwm_supported(roots[i], ECORE_X_ATOM_NET_WM_ACTION_FULLSCREEN, 1);*/
+            /*ecore_x_netwm_supported(roots[i], ECORE_X_ATOM_NET_WM_ACTION_CHANGE_DESKTOP, 1);*/
+            /*ecore_x_netwm_supported(roots[i], ECORE_X_ATOM_NET_WM_ACTION_CLOSE, 1);*/
+            supported[num++] = ECORE_X_ATOM_NET_WM_STRUT;
+            supported[num++] = ECORE_X_ATOM_NET_WM_STRUT_PARTIAL;
+            /*ecore_x_netwm_supported(roots[i], ECORE_X_ATOM_NET_WM_ICON_GEOMETRY, 1);*/
+            supported[num++] = ECORE_X_ATOM_NET_WM_ICON;
+            supported[num++] = ECORE_X_ATOM_NET_WM_PID;
+            /*ecore_x_netwm_supported(roots[i], ECORE_X_ATOM_NET_WM_HANDLED_ICONS, 1);*/
+            supported[num++] = ECORE_X_ATOM_NET_WM_USER_TIME;
+            supported[num++] = ECORE_X_ATOM_NET_FRAME_EXTENTS;
+            /*ecore_x_netwm_supported(roots[i], ECORE_X_ATOM_NET_WM_PING, 1);*/
+            /*ecore_x_netwm_supported(roots[i], ECORE_X_ATOM_NET_WM_SYNC_REQUEST, 1);*/
+            /*ecore_x_netwm_supported(roots[i], ECORE_X_ATOM_NET_WM_SYNC_REQUEST_COUNTER, 1);*/
+            ecore_x_netwm_supported_set(roots[i], supported, num);
          }
         free(roots);
      }