Enlightenment CVS committal

Author  : sebastid
Project : e17
Module  : apps/e

Dir     : e17/apps/e/src/bin


Modified Files:
        e_border.c e_border.h e_container.c e_hints.c e_hints.h 
        e_main.c 


Log Message:
netwm updates.

===================================================================
RCS file: /cvsroot/enlightenment/e17/apps/e/src/bin/e_border.c,v
retrieving revision 1.205
retrieving revision 1.206
diff -u -3 -r1.205 -r1.206
--- e_border.c  16 May 2005 10:46:01 -0000      1.205
+++ e_border.c  16 May 2005 15:43:08 -0000      1.206
@@ -37,6 +37,7 @@
 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(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);
 
 static void _e_border_cb_signal_move_start(void *data, Evas_Object *obj, const 
char *emission, const char *source);
@@ -159,6 +160,7 @@
    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, _e_border_cb_window_state, 
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);
 
@@ -291,8 +293,6 @@
    bd->client.icccm.fetch.size_pos_hints = 1;
    bd->client.icccm.fetch.protocol = 1;
    bd->client.mwm.fetch.hints = 1;
-   bd->client.netwm.fetch.pid = 1;
-   bd->client.netwm.fetch.desktop = 1;
    bd->client.border.changed = 1;
 
    bd->client.w = att->w;
@@ -379,8 +379,6 @@
 e_border_desk_set(E_Border *bd, E_Desk *desk)
 {
    E_Event_Border_Desk_Set *ev;
-   int deskx, desky;
-   unsigned int deskpos[2];
 
    E_OBJECT_CHECK(bd);
    E_OBJECT_TYPE_CHECK(bd, E_BORDER_TYPE);
@@ -390,17 +388,14 @@
    bd->desk = desk;
    e_border_zone_set(bd, desk->zone);
 
+   e_hints_window_desktop_set(bd);
+
    ev = calloc(1, sizeof(E_Event_Border_Desk_Set));
    ev->border = bd;
    e_object_ref(E_OBJECT(bd));
    ev->desk = desk;
    e_object_ref(E_OBJECT(desk));
    ecore_event_add(E_EVENT_BORDER_DESK_SET, ev, 
_e_border_event_border_desk_set_free, NULL);
-
-   e_desk_xy_get(desk, &deskx, &desky);
-   deskpos[0] = deskx;
-   deskpos[1] = desky;
-   ecore_x_window_prop_card32_set(bd->client.win, E_ATOM_DESK, deskpos, 2);
 }
 
 void
@@ -1789,17 +1784,6 @@
        bd->client.mwm.fetch.hints = 1;
        bd->changed = 1;
      }
-   else if (e->atom == ECORE_X_ATOM_NET_WM_PID)
-     {
-       bd->client.netwm.fetch.pid = 1;
-       bd->changed = 1;
-     }
-   else if (e->atom == ECORE_X_ATOM_NET_WM_DESKTOP)
-     {
-       bd->client.netwm.fetch.desktop = 1;
-       bd->changed = 1;
-     }
-//   bd->client.border.changed = 1;
    return 1;
 }
 
@@ -1967,7 +1951,12 @@
 
    e = ev;
    bd = e_border_find_by_client_window(e->win);
-   if (!bd)
+   if (bd)
+     {
+       for (i = 0; i < 2; i++)
+         e_hints_window_state_update(bd, e->state[i], e->action);
+     }
+   else
      {
        for (i = 0; i < 2; i++)
          {
@@ -2005,10 +1994,37 @@
               }
          }
      }
+   return 1;
+}
+
+static int
+_e_border_cb_desktop_change(void *data, int ev_type, void *ev)
+{
+   E_Border *bd;
+   Ecore_X_Event_Desktop_Change *e;
+
+   e = ev;
+   if (e->desk < 0) return 1;
+   bd = e_border_find_by_client_window(e->win);
+   if (bd)
+     {
+       if (bd->client.netwm.desktop == 0xffffffff)
+         e_border_stick(bd);
+       else if (e->desk < (bd->zone->desk_x_count * bd->zone->desk_y_count))
+         {
+            E_Desk *desk;
+            int x, y;
+
+            y = e->desk / bd->zone->desk_x_count;
+            x = e->desk - (y * bd->zone->desk_x_count);
+
+            desk = e_desk_at_xy_get(bd->zone, x, y);
+            e_border_desk_set(bd, desk);
+         }
+     }
    else
      {
-       for (i = 0; i < 2; i++)
-         e_hints_window_state_update(bd, e->state[i], e->action);
+       ecore_x_netwm_desktop_set(e->win, e->desk);
      }
    return 1;
 }
@@ -2839,18 +2855,6 @@
          }
        bd->client.mwm.fetch.hints = 0;
      }
-   if (bd->client.netwm.fetch.pid)
-     {
-       if (!ecore_x_netwm_pid_get(bd->client.win, &bd->client.netwm.pid))
-         bd->client.netwm.pid = -1;
-       bd->client.netwm.fetch.pid = 0;
-     }
-   if (bd->client.netwm.fetch.desktop)
-     {
-       if (!ecore_x_netwm_desktop_get(bd->client.win, 
&bd->client.netwm.desktop))
-         bd->client.netwm.desktop = -1;
-       bd->client.netwm.fetch.desktop = 0;
-     }
 
    if (bd->changes.shape)
      {
===================================================================
RCS file: /cvsroot/enlightenment/e17/apps/e/src/bin/e_border.h,v
retrieving revision 1.52
retrieving revision 1.53
diff -u -3 -r1.52 -r1.53
--- e_border.h  13 May 2005 21:19:04 -0000      1.52
+++ e_border.h  16 May 2005 15:43:09 -0000      1.53
@@ -148,11 +148,7 @@
       struct {
         pid_t pid;
         unsigned int desktop;
-        struct {
-           unsigned int pid : 1;
-           unsigned int desktop : 1;
-        } fetch;
-        
+
         /* NetWM Window state */
         struct {
            unsigned char modal : 1;
===================================================================
RCS file: /cvsroot/enlightenment/e17/apps/e/src/bin/e_container.c,v
retrieving revision 1.52
retrieving revision 1.53
diff -u -3 -r1.52 -r1.53
--- e_container.c       13 May 2005 18:56:03 -0000      1.52
+++ e_container.c       16 May 2005 15:43:09 -0000      1.53
@@ -592,6 +592,7 @@
                            0, 0, 0, 0, 0,
                            con->layers[pos].win, ECORE_X_WINDOW_STACK_ABOVE);
 }
+
 void
 e_container_border_raise(E_Border *bd)
 {
@@ -620,6 +621,8 @@
 
    bd->zone->container->layers[pos - 1].clients =
       evas_list_append(bd->zone->container->layers[pos - 1].clients, bd);
+
+   e_hints_client_stacking_set();
 }
 
 void
@@ -650,6 +653,8 @@
 
    bd->zone->container->layers[pos].clients =
       evas_list_prepend(bd->zone->container->layers[pos].clients, bd);
+
+   e_hints_client_stacking_set();
 }
 
 void
===================================================================
RCS file: /cvsroot/enlightenment/e17/apps/e/src/bin/e_hints.c,v
retrieving revision 1.22
retrieving revision 1.23
diff -u -3 -r1.22 -r1.23
--- e_hints.c   16 May 2005 13:19:26 -0000      1.22
+++ e_hints.c   16 May 2005 15:43:09 -0000      1.23
@@ -24,91 +24,33 @@
 //          on finding this out when it shoudl be irrelevant! stupid FUCKS.
             ecore_x_netwm_wm_identify(roots[i], win, "KWin");
 //          ecore_x_netwm_wm_identify(roots[i], win, "Enlightenment");
-            /* Set what we support */
+
+            /* 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);
+
             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_ATOM_NET_NUMBER_OF_DESKTOPS;
-               ECORE_X_ATOM_NET_VIRTUAL_ROOTS;
-               ECORE_X_ATOM_NET_DESKTOP_NAMES;
-               ECORE_X_ATOM_NET_DESKTOP_GEOMETRY;
-               ECORE_X_ATOM_NET_DESKTOP_VIEWPORT;
-               ECORE_X_ATOM_NET_DESKTOP_LAYOUT;
-               ECORE_X_ATOM_NET_WORKAREA;
-
-               ECORE_X_ATOM_NET_CURRENT_DESKTOP;
-               ECORE_X_ATOM_NET_SHOWING_DESKTOP;
-
-               ECORE_X_ATOM_NET_CLIENT_LIST;
-               ECORE_X_ATOM_NET_CLIENT_LIST_STACKING;
-               ECORE_X_ATOM_NET_ACTIVE_WINDOW;
-
-               ECORE_X_ATOM_NET_WM_NAME;
-               ECORE_X_ATOM_NET_WM_VISIBLE_NAME;
-               ECORE_X_ATOM_NET_WM_ICON_NAME;
-               ECORE_X_ATOM_NET_WM_VISIBLE_ICON_NAME;
-               ECORE_X_ATOM_NET_WM_DESKTOP;
-               ECORE_X_ATOM_NET_WM_STRUT;
-               ECORE_X_ATOM_NET_WM_STRUT_PARTIAL;
-               ECORE_X_ATOM_NET_WM_ICON_GEOMETRY;
-               ECORE_X_ATOM_NET_WM_ICON;
-               ECORE_X_ATOM_NET_WM_PID;
-               ECORE_X_ATOM_NET_WM_HANDLED_ICONS;
-               ECORE_X_ATOM_NET_WM_USER_TIME;
-
-               ECORE_X_ATOM_NET_WM_ALLOWED_ACTIONS;
-               ECORE_X_ATOM_NET_WM_ACTION_MOVE;
-               ECORE_X_ATOM_NET_WM_ACTION_RESIZE;
-               ECORE_X_ATOM_NET_WM_ACTION_MINIMIZE;
-               ECORE_X_ATOM_NET_WM_ACTION_SHADE;
-               ECORE_X_ATOM_NET_WM_ACTION_STICK;
-               ECORE_X_ATOM_NET_WM_ACTION_MAXIMIZE_HORZ;
-               ECORE_X_ATOM_NET_WM_ACTION_MAXIMIZE_VERT;
-               ECORE_X_ATOM_NET_WM_ACTION_FULLSCREEN;
-               ECORE_X_ATOM_NET_WM_ACTION_CHANGE_DESKTOP;
-               ECORE_X_ATOM_NET_WM_ACTION_CLOSE;
-
-               ECORE_X_ATOM_NET_WM_WINDOW_TYPE;
-               ECORE_X_ATOM_NET_WM_WINDOW_TYPE_DESKTOP;
-               ECORE_X_ATOM_NET_WM_WINDOW_TYPE_DOCK;
-               ECORE_X_ATOM_NET_WM_WINDOW_TYPE_TOOLBAR;
-               ECORE_X_ATOM_NET_WM_WINDOW_TYPE_MENU;
-               ECORE_X_ATOM_NET_WM_WINDOW_TYPE_UTILITY;
-               ECORE_X_ATOM_NET_WM_WINDOW_TYPE_SPLASH;
-               ECORE_X_ATOM_NET_WM_WINDOW_TYPE_DIALOG;
-               ECORE_X_ATOM_NET_WM_WINDOW_TYPE_NORMAL;
+            ecore_x_netwm_supported(roots[i], ECORE_X_ATOM_NET_VIRTUAL_ROOTS, 
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_STATE, 1);
-            ecore_x_netwm_supported(roots[i], ECORE_X_ATOM_NET_WM_STATE_MODAL, 
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_SKIP_TASKBAR, 1);
-               ecore_x_netwm_supported(roots[i], 
ECORE_X_ATOM_NET_WM_STATE_SKIP_PAGER, 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_ATOM_NET_WM_STATE_DEMANDS_ATTENTION;
-
-               ECORE_X_ATOM_NET_WM_WINDOW_OPACITY;
-
-               ECORE_X_ATOM_NET_FRAME_EXTENTS;
-               ECORE_X_ATOM_NET_REQUEST_FRAME_EXTENTS;
-
-               ECORE_X_ATOM_NET_WM_PING;
-               ECORE_X_ATOM_NET_WM_SYNC_REQUEST;
-               */
+            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_HIDDEN, 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_MAXIMIZED_VERT, 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_STICKY, 1);
          }
         free(roots);
      }
 }
 
+/* FIXME, this should set the list in map order, not stack order */
 void
 e_hints_client_list_set(void)
 {
@@ -344,7 +286,27 @@
      bd->layer = 150;
    else
      bd->layer = 100;
-   e_container_border_raise(bd);
+   e_border_raise(bd);
+
+   if (!ecore_x_netwm_desktop_get(bd->client.win, &bd->client.netwm.desktop))
+     bd->client.netwm.desktop = 0;
+   if (!ecore_x_netwm_pid_get(bd->client.win, &bd->client.netwm.pid))
+     bd->client.netwm.pid = -1;
+
+   if (bd->client.netwm.desktop == 0xffffffff)
+     e_border_stick(bd);
+   else if ((bd->client.netwm.desktop >= 0)
+           && (bd->client.netwm.desktop < (bd->zone->desk_x_count * 
bd->zone->desk_y_count)))
+     {
+       E_Desk *desk;
+       int x, y;
+
+       y = bd->client.netwm.desktop / bd->zone->desk_x_count;
+       x = bd->client.netwm.desktop - (y * bd->zone->desk_x_count);
+
+       desk = e_desk_at_xy_get(bd->zone, x, y);
+       e_border_desk_set(bd, desk);
+     }
 
    if (bd->client.netwm.state.sticky)
      e_border_stick(bd);
@@ -360,6 +322,10 @@
     * show it! */
    else if (bd->desk == e_desk_current_get(bd->zone))
      e_border_show(bd);
+
+   /* Update stacking */
+   e_hints_client_list_set();
+   e_hints_client_stacking_set();
 }
 
 void
@@ -989,7 +955,7 @@
 void
 e_hints_window_icon_name_get(E_Border *bd)
 {
-   char                *name;
+   char *name;
 
    name = ecore_x_netwm_icon_name_get(bd->client.win);
    if (bd->client.icccm.icon_name)
@@ -997,3 +963,21 @@
    bd->client.icccm.icon_name = name;
    bd->changed = 1;
 }
+
+void
+e_hints_window_desktop_set(E_Border *bd)
+{
+   unsigned int deskpos[2];
+   unsigned int current;
+ 
+   current = (bd->desk->y * bd->zone->desk_x_count) + bd->desk->x;
+   if (bd->client.netwm.desktop != current)
+     {
+       deskpos[0] = bd->desk->x;
+       deskpos[1] = bd->desk->y;
+       ecore_x_window_prop_card32_set(bd->client.win, E_ATOM_DESK, deskpos, 2);
+
+       ecore_x_netwm_desktop_set(bd->client.win, current);
+       bd->client.netwm.desktop = current;
+     }
+}
===================================================================
RCS file: /cvsroot/enlightenment/e17/apps/e/src/bin/e_hints.h,v
retrieving revision 1.12
retrieving revision 1.13
diff -u -3 -r1.12 -r1.13
--- e_hints.h   10 May 2005 10:11:34 -0000      1.12
+++ e_hints.h   16 May 2005 15:43:09 -0000      1.13
@@ -40,6 +40,8 @@
 EAPI void e_hints_window_stacking_set(E_Border *bd, E_Stacking stacking);
 
 EAPI void e_hints_window_icon_name_get(E_Border *bd);
+
+EAPI void e_hints_window_desktop_set(E_Border *bd);
     
 #endif
 #endif
===================================================================
RCS file: /cvsroot/enlightenment/e17/apps/e/src/bin/e_main.c,v
retrieving revision 1.78
retrieving revision 1.79
diff -u -3 -r1.78 -r1.79
--- e_main.c    11 May 2005 21:33:54 -0000      1.78
+++ e_main.c    16 May 2005 15:43:15 -0000      1.79
@@ -644,6 +644,11 @@
             return 0;
          }
      }
+   
+   /* Init border stacking */
+   e_hints_client_list_set();
+   e_hints_client_stacking_set();
+
    free(roots);
    ecore_x_sync();
    return 1;




-------------------------------------------------------
This SF.Net email is sponsored by Oracle Space Sweepstakes
Want to be the first software developer in space?
Enter now for the Oracle Space Sweepstakes!
http://ads.osdn.com/?ad_id=7412&alloc_id=16344&op=click
_______________________________________________
enlightenment-cvs mailing list
enlightenment-cvs@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/enlightenment-cvs

Reply via email to