Enlightenment CVS committal

Author  : sebastid
Project : e17
Module  : apps/e

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


Modified Files:
        e_mod_main.c e_mod_main.h 


Log Message:
Sticky windows

===================================================================
RCS file: /cvsroot/enlightenment/e17/apps/e/src/modules/pager/e_mod_main.c,v
retrieving revision 1.46
retrieving revision 1.47
diff -u -3 -r1.46 -r1.47
--- e_mod_main.c        10 Feb 2005 12:52:31 -0000      1.46
+++ e_mod_main.c        10 Feb 2005 15:19:32 -0000      1.47
@@ -40,6 +40,8 @@
 static int         _pager_face_cb_event_border_remove(void *data, int type, 
void *event);
 static int         _pager_face_cb_event_border_hide(void *data, int type, void 
*event);
 static int         _pager_face_cb_event_border_show(void *data, int type, void 
*event);
+static int         _pager_face_cb_event_border_stick(void *data, int type, 
void *event);
+static int         _pager_face_cb_event_border_unstick(void *data, int type, 
void *event);
 static int         _pager_face_cb_event_border_desk_set(void *data, int type, 
void *event);
 static int         _pager_face_cb_event_zone_desk_count_set(void *data, int 
type, void *event);
 static void        _pager_face_cb_menu_enabled(void *data, E_Menu *m, 
E_Menu_Item *mi);
@@ -302,6 +304,12 @@
    face->ev_handler_border_show =
       ecore_event_handler_add(E_EVENT_BORDER_SHOW,
                              _pager_face_cb_event_border_show, face);
+   face->ev_handler_border_stick =
+      ecore_event_handler_add(E_EVENT_BORDER_STICK,
+                             _pager_face_cb_event_border_stick, face);
+   face->ev_handler_border_unstick =
+      ecore_event_handler_add(E_EVENT_BORDER_UNSTICK,
+                             _pager_face_cb_event_border_unstick, face);
    face->ev_handler_border_desk_set =
       ecore_event_handler_add(E_EVENT_BORDER_DESK_SET,
                              _pager_face_cb_event_border_desk_set, face);
@@ -346,6 +354,8 @@
    ecore_event_handler_del(face->ev_handler_border_remove);
    ecore_event_handler_del(face->ev_handler_border_hide);
    ecore_event_handler_del(face->ev_handler_border_show);
+   ecore_event_handler_del(face->ev_handler_border_stick);
+   ecore_event_handler_del(face->ev_handler_border_unstick);
    ecore_event_handler_del(face->ev_handler_border_desk_set);
    ecore_event_handler_del(face->ev_handler_zone_desk_count_set);
 
@@ -794,7 +804,10 @@
        while (wins)
          {
             win = wins->data;
-            if (win->border == border)
+            /* We have to check the desk, wouldn't want
+             * a sticky copy */
+            if ((win->border->desk == desk->desk)
+                && (win->border == border))
               return win;
             wins = wins->next;
          }
@@ -858,18 +871,25 @@
 _pager_face_cb_event_border_resize(void *data, int type, void *event)
 {
    Pager_Face            *face;
+   Pager_Desk            *desk;
    Pager_Win             *win;
    E_Event_Border_Resize *ev;
+   Evas_List             *desks, *wins;
 
    face = data;
    ev = event;
-   if ((win = _pager_window_find(face, ev->border)))
-     {
-       _pager_window_move(face, win);
-     }
-   else
+   for (desks = face->desks; desks; desks = desks->next)
      {
-       printf("ERROR: event_border_resize %p:%p\n", event, ev->border);
+       desk = desks->data;
+       for (wins = desk->wins; wins; wins = wins->next)
+         {
+            win = wins->data;
+            if (win->border == ev->border)
+              {
+                 _pager_window_move(face, win);
+                 break;
+              }
+         }
      }
    return 1;
 }
@@ -878,18 +898,25 @@
 _pager_face_cb_event_border_move(void *data, int type, void *event)
 {
    Pager_Face            *face;
+   Pager_Desk            *desk;
    Pager_Win             *win;
-   E_Event_Border_Resize *ev;
+   E_Event_Border_Move   *ev;
+   Evas_List             *desks, *wins;
 
    face = data;
    ev = event;
-   if((win = _pager_window_find(face, ev->border)))
-     {
-       _pager_window_move(face, win);
-     }
-   else
+   for (desks = face->desks; desks; desks = desks->next)
      {
-       printf("ERROR: event_border_move %p:%p\n", event, ev->border);
+       desk = desks->data;
+       for (wins = desk->wins; wins; wins = wins->next)
+         {
+            win = wins->data;
+            if (win->border == ev->border)
+              {
+                 _pager_window_move(face, win);
+                 break;
+              }
+         }
      }
    return 1;
 }
@@ -901,15 +928,29 @@
    Pager_Desk         *desk;
    Pager_Win          *win;
    E_Event_Border_Add *ev;
+   Evas_List          *desks;
 
    face = data;
    ev = event;
+#if 0
    if (_pager_window_find(face, ev->border))
      {
        printf("event_border_add, window found :'(\n");
        return 1;
      }
-   if ((desk = _pager_desk_find(face, ev->border->desk)))
+#endif
+   if (ev->border->sticky)
+     {
+       /* Put on all desks */
+       for (desks = face->desks; desks; desks = desks->next)
+         {
+            desk = desks->data;
+            win = _pager_window_new(desk, ev->border);
+            if (win)
+              desk->wins = evas_list_append(desk->wins, win);
+         }
+     }
+   else if ((desk = _pager_desk_find(face, ev->border->desk)))
      {
        win = _pager_window_new(desk, ev->border);
        if (win)
@@ -927,18 +968,25 @@
 {
    Pager_Face            *face;
    Pager_Desk            *desk;
-   Pager_Win             *old;
+   Pager_Win             *win;
    E_Event_Border_Remove *ev;
+   Evas_List             *desks, *wins;
 
    face = data;
    ev = event;
-
-   old = _pager_window_find(face, ev->border);
-   desk = _pager_desk_find(face, ev->border->desk);
-   if (old && desk)
+   for (desks = face->desks; desks; desks = desks->next)
      {
-       desk->wins = evas_list_remove(desk->wins, old);
-       _pager_window_free(old);
+       desk = desks->data;
+       for (wins = desk->wins; wins; wins = wins->next)
+         {
+            win = wins->data;
+            if (win->border == ev->border)
+              {
+                 desk->wins = evas_list_remove_list(desk->wins, wins);
+                 _pager_window_free(win);
+                 break;
+              }
+         }
      }
    return 1;
 }
@@ -947,16 +995,27 @@
 _pager_face_cb_event_border_hide(void *data, int type, void *event)
 {
    Pager_Face          *face;
+   Pager_Desk          *desk;
    Pager_Win           *win;
    E_Event_Border_Hide *ev;
+   Evas_List             *desks, *wins;
 
    face = data;
    ev = event;
-   win = _pager_window_find(face, ev->border);
-   if (win && ev->border->desk->visible)
+   for (desks = face->desks; desks; desks = desks->next)
      {
-       evas_object_hide(win->obj);
-       evas_object_hide(win->icon);
+       desk = desks->data;
+       for (wins = desk->wins; wins; wins = wins->next)
+         {
+            win = wins->data;
+            if ((win->border == ev->border)
+                && (ev->border->desk->visible))
+              {
+                 evas_object_hide(win->obj);
+                 evas_object_hide(win->icon);
+                 break;
+              }
+         }
      }
    return 1;
 }
@@ -965,18 +1024,85 @@
 _pager_face_cb_event_border_show(void *data, int type, void *event)
 {
    Pager_Face          *face;
+   Pager_Desk          *desk;
    Pager_Win           *win;
    E_Event_Border_Show *ev;
+   Evas_List             *desks, *wins;
 
    face = data;
    ev = event;
-   win = _pager_window_find(face, ev->border);
-   if (win)
+   for (desks = face->desks; desks; desks = desks->next)
      {
-       evas_object_show(win->obj);
-       evas_object_show(win->icon);
+       desk = desks->data;
+       for (wins = desk->wins; wins; wins = wins->next)
+         {
+            win = wins->data;
+            if ((win->border == ev->border)
+                && (ev->border->desk->visible))
+              {
+                 evas_object_show(win->obj);
+                 evas_object_show(win->icon);
+                 break;
+              }
+         }
+     }
+   evas_object_raise(face->screen);
+   return 1;
+}
 
-       evas_object_raise(face->screen);
+static int
+_pager_face_cb_event_border_stick(void *data, int type, void *event)
+{
+   Pager_Face           *face;
+   Pager_Desk           *desk;
+   Pager_Win            *win;
+   E_Event_Border_Stick *ev;
+   Evas_List            *desks;
+
+   face = data;
+   ev = event;
+   for (desks = face->desks; desks; desks = desks->next)
+     {
+       desk = desks->data;
+       /* On this desk there should already be a border */
+       if (ev->border->desk == desk->desk)
+         continue;
+
+       win = _pager_window_new(desk, ev->border);
+       desk->wins = evas_list_append(desk->wins, win);
+     }
+   return 1;
+}
+
+static int
+_pager_face_cb_event_border_unstick(void *data, int type, void *event)
+{
+   Pager_Face           *face;
+   Pager_Desk           *desk;
+   Pager_Win            *win;
+   E_Event_Border_Unstick *ev;
+   Evas_List            *desks, *wins;
+
+   face = data;
+   ev = event;
+
+   for (desks = face->desks; desks; desks = desks->next)
+     {
+       desk = desks->data;
+       /* On this desk there should be a border */
+       if (desk->desk == ev->border->desk)
+         continue;
+
+       for (wins = desk->wins; wins; wins = wins->next)
+         {
+            win = wins->data;
+            if (win->border == ev->border)
+              {
+                 desk->wins = evas_list_remove_list(desk->wins, wins);
+                 _pager_window_free(win);
+                 break;
+              }
+         }
      }
    return 1;
 }
@@ -991,6 +1117,9 @@
 
    face = data;
    ev = event;
+   if (ev->border->sticky)
+     return 1;
+
    win = _pager_window_find(face, ev->border);
    desk = _pager_desk_find(face, ev->border->desk);
    if (win && desk)
===================================================================
RCS file: /cvsroot/enlightenment/e17/apps/e/src/modules/pager/e_mod_main.h,v
retrieving revision 1.13
retrieving revision 1.14
diff -u -3 -r1.13 -r1.14
--- e_mod_main.h        10 Feb 2005 12:03:09 -0000      1.13
+++ e_mod_main.h        10 Feb 2005 15:19:33 -0000      1.14
@@ -63,6 +63,8 @@
    Ecore_Event_Handler *ev_handler_border_remove;
    Ecore_Event_Handler *ev_handler_border_hide;
    Ecore_Event_Handler *ev_handler_border_show;
+   Ecore_Event_Handler *ev_handler_border_stick;
+   Ecore_Event_Handler *ev_handler_border_unstick;
    Ecore_Event_Handler *ev_handler_border_desk_set;
    Ecore_Event_Handler *ev_handler_zone_desk_count_set;
 };




-------------------------------------------------------
SF email is sponsored by - The IT Product Guide
Read honest & candid reviews on hundreds of IT Products from real users.
Discover which products truly live up to the hype. Start reading now.
http://ads.osdn.com/?ad_id=6595&alloc_id=14396&op=click
_______________________________________________
enlightenment-cvs mailing list
enlightenment-cvs@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/enlightenment-cvs

Reply via email to