Enlightenment CVS committal

Author  : raster
Project : e17
Module  : apps/e

Dir     : e17/apps/e/src/modules/pager


Modified Files:
        e_mod_main.c 


Log Message:


fix window if it changes pager skip flag while its up.

===================================================================
RCS file: /cvs/e/e17/apps/e/src/modules/pager/e_mod_main.c,v
retrieving revision 1.211
retrieving revision 1.212
diff -u -3 -r1.211 -r1.212
--- e_mod_main.c        19 Apr 2007 16:57:47 -0000      1.211
+++ e_mod_main.c        10 Jun 2007 04:34:23 -0000      1.212
@@ -114,6 +114,7 @@
 static int _pager_cb_event_border_stack(void *data, int type, void *event);
 static int _pager_cb_event_border_icon_change(void *data, int type, void 
*event);
 static int _pager_cb_event_border_urgent_change(void *data, int type, void 
*event);
+static int _pager_cb_event_border_property(void *data, int type, void *event);
 static int _pager_cb_event_zone_desk_count_set(void *data, int type, void 
*event);
 static int _pager_cb_event_desk_show(void *data, int type, void *event);
 static int _pager_cb_event_desk_name_change(void *data, int type, void *event);
@@ -1225,6 +1226,106 @@
    return 1;
 }
 
+static int 
+_pager_cb_event_border_property(void *data, int type, void *event) 
+{
+   E_Event_Border_Remove *ev;
+   Evas_List             *l, *l2;
+   int                    found = 0;
+   
+   ev = event;
+   for (l = pager_config->instances; l; l = l->next)
+     {
+       Instance *inst;
+
+       inst = l->data;
+       if (inst->pager->zone != ev->border->zone) continue;
+       for (l2 = inst->pager->desks; l2; l2 = l2->next)
+         {
+            Pager_Desk *pd;
+            Pager_Win *pw;
+
+            pd = l2->data;
+            pw = _pager_desk_window_find(pd, ev->border);
+            if (pw)
+              {
+                 found = 1;
+                 if (ev->border->client.netwm.state.skip_pager) 
+                   {
+                      pd->wins = evas_list_remove(pd->wins, pw);
+                      _pager_window_free(pw);
+                   }
+              }
+         }
+     }
+   if (found) return 1;
+   
+   /* If we did not find this window in the pager, then add it because
+    * the skip_pager state may have changed to 1 */
+   for (l = pager_config->instances; l; l = l->next)
+     {
+       Instance *inst;
+       Pager_Desk *pd;
+
+       inst = l->data;
+       if ((inst->pager->zone != ev->border->zone) ||
+           (_pager_window_find(inst->pager, ev->border)))
+         continue;
+       if (!ev->border->sticky)
+         {
+            pd = _pager_desk_find(inst->pager, ev->border->desk);
+            if (pd)
+              {
+                 Pager_Win *pw;
+                 
+                 pw = _pager_window_new(pd, ev->border);
+                 if (pw)
+                   {
+                      Pager_Win *pw2 = NULL;
+                      E_Border *bd;
+                      
+                      pd->wins = evas_list_append(pd->wins, pw);
+                      bd = e_util_desk_border_above(pw->border);
+                      if (bd)
+                        pw2 = _pager_desk_window_find(pd, bd);
+                      if (pw2)
+                        e_layout_child_lower_below(pw->o_window, 
pw2->o_window);
+                      else
+                        e_layout_child_raise(pw->o_window);
+                      _pager_window_move(pw);
+                   }
+              }
+         }
+       else
+         {
+            for (l2 = inst->pager->desks; l2; l2 = l2->next)
+              {
+                  Pager_Win *pw;
+                 
+                 pd = l2->data;
+                 /* create it and add it */
+                 pw = _pager_window_new(pd, ev->border);
+                 if (pw)
+                   {
+                      Pager_Win *pw2 = NULL;
+                      E_Border *bd;
+                      
+                      pd->wins = evas_list_append(pd->wins, pw);
+                      bd = e_util_desk_border_above(pw->border);
+                      if (bd)
+                        pw2 = _pager_desk_window_find(pd, bd);
+                      if (pw2)
+                        e_layout_child_lower_below(pw->o_window, 
pw2->o_window);
+                      else
+                        e_layout_child_raise(pw->o_window);
+                      _pager_window_move(pw);
+                   }
+              }
+         }
+     }
+   return 1;
+}
+
 static int
 _pager_cb_event_zone_desk_count_set(void *data, int type, void *event)
 {
@@ -1803,7 +1904,7 @@
    E_CONFIG_VAL(D, T, resize, UCHAR);
    E_CONFIG_VAL(D, T, btn_drag, UCHAR);
    E_CONFIG_VAL(D, T, btn_noplace, UCHAR);
-   E_CONFIG_VAL(D, T, flip_desk, UINT);
+   E_CONFIG_VAL(D, T, flip_desk, UCHAR);
 
    pager_config = e_config_domain_load("module.pager", conf_edd);
 
@@ -1871,6 +1972,9 @@
      (pager_config->handlers, ecore_event_handler_add
       (E_EVENT_BORDER_URGENT_CHANGE, 
        _pager_cb_event_border_urgent_change, NULL));
+   pager_config->handlers = evas_list_append
+     (pager_config->handlers, ecore_event_handler_add
+      (E_EVENT_BORDER_PROPERTY, _pager_cb_event_border_property, NULL));
    pager_config->handlers = evas_list_append
      (pager_config->handlers, ecore_event_handler_add
       (E_EVENT_ZONE_DESK_COUNT_SET, _pager_cb_event_zone_desk_count_set, 
NULL));



-------------------------------------------------------------------------
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