Enlightenment CVS committal

Author  : sebastid
Project : e17
Module  : apps/e

Dir     : e17/apps/e/src/bin


Modified Files:
        e_border.h e_border.c 


Log Message:
Add code for zone setting, and remembering zone and container.

===================================================================
RCS file: /cvsroot/enlightenment/e17/apps/e/src/bin/e_border.h,v
retrieving revision 1.26
retrieving revision 1.27
diff -u -3 -r1.26 -r1.27
--- e_border.h  10 Feb 2005 15:21:22 -0000      1.26
+++ e_border.h  13 Feb 2005 11:12:51 -0000      1.27
@@ -29,6 +29,7 @@
 typedef struct _E_Event_Border_Hide          E_Event_Border_Hide;
 typedef struct _E_Event_Border_Stick         E_Event_Border_Stick;
 typedef struct _E_Event_Border_Unstick       E_Event_Border_Unstick;
+typedef struct _E_Event_Border_Zone_Set      E_Event_Border_Zone_Set;
 typedef struct _E_Event_Border_Desk_Set      E_Event_Border_Desk_Set;
 
 #else
@@ -248,6 +249,12 @@
    E_Border *border;
 };
 
+struct _E_Event_Border_Zone_Set
+{
+   E_Border *border;
+   E_Zone   *zone;
+};
+
 struct _E_Event_Border_Desk_Set
 {
    E_Border *border;
@@ -261,6 +268,7 @@
 EAPI void      e_border_free(E_Border *bd);
 EAPI void      e_border_ref(E_Border *bd);
 EAPI void      e_border_unref(E_Border *bd);
+EAPI void      e_border_zone_set(E_Border *bd, E_Zone *zone);
 EAPI void      e_border_desk_set(E_Border *bd, E_Desk *desk);
 EAPI void      e_border_show(E_Border *bd);
 EAPI void      e_border_hide(E_Border *bd);
@@ -296,6 +304,7 @@
 extern EAPI int E_EVENT_BORDER_REMOVE;
 extern EAPI int E_EVENT_BORDER_STICK;
 extern EAPI int E_EVENT_BORDER_UNSTICK;
+extern EAPI int E_EVENT_BORDER_ZONE_SET;
 extern EAPI int E_EVENT_BORDER_DESK_SET;
 
 #endif
===================================================================
RCS file: /cvsroot/enlightenment/e17/apps/e/src/bin/e_border.c,v
retrieving revision 1.98
retrieving revision 1.99
diff -u -3 -r1.98 -r1.99
--- e_border.c  11 Feb 2005 15:18:21 -0000      1.98
+++ e_border.c  13 Feb 2005 11:12:51 -0000      1.99
@@ -73,6 +73,7 @@
 
 static void _e_border_event_border_add_free(void *data, void *ev);
 static void _e_border_event_border_remove_free(void *data, void *ev);
+static void _e_border_event_border_zone_set_free(void *data, void *ev);
 static void _e_border_event_border_desk_set_free(void *data, void *ev);
 static void _e_border_event_border_resize_free(void *data, void *ev);
 static void _e_border_event_border_move_free(void *data, void *ev);
@@ -100,6 +101,7 @@
 
 int E_EVENT_BORDER_ADD = 0;
 int E_EVENT_BORDER_REMOVE = 0;
+int E_EVENT_BORDER_ZONE_SET = 0;
 int E_EVENT_BORDER_DESK_SET = 0;
 int E_EVENT_BORDER_RESIZE = 0;
 int E_EVENT_BORDER_MOVE = 0;
@@ -139,6 +141,7 @@
    E_EVENT_BORDER_ADD = ecore_event_type_new();
    E_EVENT_BORDER_REMOVE = ecore_event_type_new();
    E_EVENT_BORDER_DESK_SET = ecore_event_type_new();
+   E_EVENT_BORDER_ZONE_SET = ecore_event_type_new();
    E_EVENT_BORDER_RESIZE = ecore_event_type_new();
    E_EVENT_BORDER_MOVE = ecore_event_type_new();
    E_EVENT_BORDER_SHOW = ecore_event_type_new();
@@ -299,6 +302,8 @@
 
    managed = 1;
    ecore_x_window_prop_card32_set(win, E_ATOM_MANAGED, &managed, 1);
+   ecore_x_window_prop_card32_set(win, E_ATOM_CONTAINER, 
&bd->zone->container->num, 1);
+   ecore_x_window_prop_card32_set(win, E_ATOM_ZONE, &bd->zone->num, 1);
    e_desk_xy_get(bd->desk, &deskx, &desky);
    desk[0] = deskx;
    desk[1] = desky;
@@ -308,6 +313,41 @@
 }
 
 void
+e_border_zone_set(E_Border *bd, E_Zone *zone)
+{
+   E_Event_Border_Zone_Set *ev;
+
+   E_OBJECT_CHECK(bd);
+   E_OBJECT_TYPE_CHECK(bd, E_BORDER_TYPE);
+   E_OBJECT_CHECK(zone);
+   E_OBJECT_TYPE_CHECK(zone, E_ZONE_TYPE);
+   if (bd->zone == zone) return;
+   bd->zone = zone;
+
+   if (bd->desk->zone != bd->zone)
+     {
+       E_Desk *desk;
+       int x, y;
+
+       e_desk_xy_get(bd->desk, &x, &y);
+       desk = e_desk_at_xy_get(bd->zone, x, y);
+       if (desk)
+         e_border_desk_set(bd, desk);
+       else
+         e_border_desk_set(bd, e_desk_current_get(bd->zone));
+     }
+
+   ev = calloc(1, sizeof(E_Event_Border_Zone_Set));
+   ev->border = bd;
+   e_object_ref(E_OBJECT(bd));
+   ev->zone = zone;
+   e_object_ref(E_OBJECT(zone));
+   ecore_event_add(E_EVENT_BORDER_ZONE_SET, ev, 
_e_border_event_border_zone_set_free, NULL);
+
+   ecore_x_window_prop_card32_set(bd->client.win, E_ATOM_ZONE, &bd->zone->num, 
1);
+}
+
+void
 e_border_desk_set(E_Border *bd, E_Desk *desk)
 {
    E_Event_Border_Desk_Set *ev;
@@ -322,6 +362,8 @@
    bd->desk->clients = evas_list_remove(bd->desk->clients, bd);
    desk->clients = evas_list_append(desk->clients, bd);
    bd->desk = desk;
+   if (bd->zone != desk->zone)
+     e_border_zone_set(bd, desk->zone);
 
    ev = calloc(1, sizeof(E_Event_Border_Desk_Set));
    ev->border = bd;
@@ -3167,6 +3209,17 @@
 }
 
 static void
+_e_border_event_border_zone_set_free(void *data, void *ev)
+{
+   E_Event_Border_Zone_Set *e;
+
+   e = ev;
+   e_object_unref(E_OBJECT(e->border));
+   e_object_unref(E_OBJECT(e->zone));
+   free(e);
+}
+
+static void
 _e_border_event_border_desk_set_free(void *data, void *ev)
 {
    E_Event_Border_Desk_Set *e;
@@ -3197,7 +3250,7 @@
        if (E_INTERSECTS(bd->x, bd->y, bd->w, bd->h,
                         zone->x, zone->y, zone->w, zone->h))
          {
-            bd->zone = zone;
+            e_border_zone_set(bd, zone);
             return;
          }
      }




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