Makes windows rember zones. If none objects I'll commit it.
Sebastian
Index: e_atoms.c
===================================================================
RCS file: /cvsroot/enlightenment/e17/apps/e/src/bin/e_atoms.c,v
retrieving revision 1.6
diff -u -r1.6 e_atoms.c
--- e_atoms.c 7 Feb 2005 13:51:08 -0000 1.6
+++ e_atoms.c 11 Feb 2005 16:29:40 -0000
@@ -5,6 +5,7 @@
/* Atoms */
Ecore_X_Atom E_ATOM_MANAGED = 0;
+Ecore_X_Atom E_ATOM_ZONE = 0;
Ecore_X_Atom E_ATOM_DESK = 0;
Ecore_X_Atom E_ATOM_ICONIC = 0;
Ecore_X_Atom E_ATOM_MAPPED = 0;
@@ -14,6 +15,7 @@
e_atoms_init(void)
{
E_ATOM_MANAGED = ecore_x_atom_get("__E_WINDOW_MANAGED");
+ E_ATOM_ZONE = ecore_x_atom_get("__E_WINDOW_ZONE");
E_ATOM_DESK = ecore_x_atom_get("__E_WINDOW_DESK");
E_ATOM_ICONIC = ecore_x_atom_get("__E_WINDOW_ICONIC");
E_ATOM_MAPPED = ecore_x_atom_get("__E_WINDOW_MAPPED");
Index: e_atoms.h
===================================================================
RCS file: /cvsroot/enlightenment/e17/apps/e/src/bin/e_atoms.h,v
retrieving revision 1.7
diff -u -r1.7 e_atoms.h
--- e_atoms.h 7 Feb 2005 13:51:08 -0000 1.7
+++ e_atoms.h 11 Feb 2005 16:29:40 -0000
@@ -10,6 +10,7 @@
extern EAPI Ecore_X_Atom E_ATOM_MANAGED;
/* basic window properties */
+extern EAPI Ecore_X_Atom E_ATOM_ZONE;
extern EAPI Ecore_X_Atom E_ATOM_DESK;
extern EAPI Ecore_X_Atom E_ATOM_ICONIC;
extern EAPI Ecore_X_Atom E_ATOM_MAPPED;
Index: e_border.c
===================================================================
RCS file: /cvsroot/enlightenment/e17/apps/e/src/bin/e_border.c,v
retrieving revision 1.98
diff -u -r1.98 e_border.c
--- e_border.c 11 Feb 2005 15:18:21 -0000 1.98
+++ e_border.c 11 Feb 2005 16:29:45 -0000
@@ -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,7 @@
managed = 1;
ecore_x_window_prop_card32_set(win, E_ATOM_MANAGED, &managed, 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 +312,36 @@
}
void
+e_border_zone_set(E_Border *bd, E_Zone *zone)
+{
+ E_Event_Border_Zone_Set *ev;
+ E_Desk *desk;
+ int x, y;
+
+ 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;
+
+ 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;
@@ -3167,6 +3201,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 +3242,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;
}
}
Index: e_border.h
===================================================================
RCS file: /cvsroot/enlightenment/e17/apps/e/src/bin/e_border.h,v
retrieving revision 1.26
diff -u -r1.26 e_border.h
--- e_border.h 10 Feb 2005 15:21:22 -0000 1.26
+++ e_border.h 11 Feb 2005 16:29:45 -0000
@@ -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
Index: e_config.c
===================================================================
RCS file: /cvsroot/enlightenment/e17/apps/e/src/bin/e_config.c,v
retrieving revision 1.20
diff -u -r1.20 e_config.c
--- e_config.c 8 Feb 2005 03:51:07 -0000 1.20
+++ e_config.c 11 Feb 2005 16:29:45 -0000
@@ -120,8 +120,8 @@
eb = E_NEW(E_Config_Binding, 1);
eb->button = 1;
eb->mask = ECORE_X_EVENT_MASK_MOUSE_DOWN |
- ECORE_X_EVENT_MASK_MOUSE_UP |
- ECORE_X_EVENT_MASK_MOUSE_MOVE;
+ ECORE_X_EVENT_MASK_MOUSE_UP |
+ ECORE_X_EVENT_MASK_MOUSE_MOVE;
eb->modifiers = ECORE_X_MODIFIER_ALT;
eb->action = E_BINDING_ACTION_MOVE;
e_config->bindings = evas_list_append(e_config->bindings, eb);
Index: e_main.c
===================================================================
RCS file: /cvsroot/enlightenment/e17/apps/e/src/bin/e_main.c,v
retrieving revision 1.46
diff -u -r1.46 e_main.c
--- e_main.c 9 Feb 2005 06:40:23 -0000 1.46
+++ e_main.c 11 Feb 2005 16:29:46 -0000
@@ -544,15 +544,26 @@
if ((ret > -1) && (ret_val == 1))
{
E_Border *bd;
+ E_Zone *zone = NULL;
+ int zoneid;
/* get all information from window before it is
* reset by e_border_new */
ret = ecore_x_window_prop_card32_get(windows[i],
+ E_ATOM_ZONE,
+ &zoneid, 1);
+ if (ret == 1)
+ zone = e_container_zone_number_get(con, zoneid);
+
+ ret = ecore_x_window_prop_card32_get(windows[i],
E_ATOM_DESK,
deskxy, 2);
bd = e_border_new(con, windows[i], 1);
if (bd)
{
+ if (zone)
+ e_border_zone_set(bd, zone);
+
if (ret == 2)
{
E_Desk *target;
@@ -571,6 +582,7 @@
}
}
}
+ /* Shouldn't be here! */
ret = ecore_x_window_prop_card32_get(windows[i],
E_ATOM_ICONIC,
&ret_val, 1);
