forked from enlightenment/enlightenment
Remeber border hints when restarting (or recovering) E. This is currently set on all windows all the time in case of crash - it could be moved to being set on E shutdown (before a restart)
SVN revision: 13028
This commit is contained in:
parent
45ef78688c
commit
eb0f1bd307
|
@ -1,12 +1,18 @@
|
|||
#include "e.h"
|
||||
|
||||
/* Atoms */
|
||||
/* There are no e17 specific atoms defined yet */
|
||||
Ecore_X_Atom E_ATOM_MANAGED = 0;
|
||||
Ecore_X_Atom E_ATOM_DESK = 0;
|
||||
Ecore_X_Atom E_ATOM_ICONIC = 0;
|
||||
|
||||
/* externally accessible functions */
|
||||
int
|
||||
e_atoms_init(void)
|
||||
{
|
||||
E_ATOM_MANAGED = ecore_x_atom_get("__E_WINDOW_MANAGED");
|
||||
E_ATOM_DESK = ecore_x_atom_get("__E_WINDOW_DESK");
|
||||
E_ATOM_ICONIC = ecore_x_atom_get("__E_WINDOW_ICONIC");
|
||||
|
||||
return 1;
|
||||
}
|
||||
|
||||
|
|
|
@ -3,6 +3,13 @@
|
|||
#ifndef E_ATOMS_H
|
||||
#define E_ATOMS_H
|
||||
|
||||
/* an "overall" atom to see that we recognise the window */
|
||||
extern Ecore_X_Atom E_ATOM_MANAGED;
|
||||
|
||||
/* basic window properties */
|
||||
extern Ecore_X_Atom E_ATOM_DESK;
|
||||
extern Ecore_X_Atom E_ATOM_ICONIC;
|
||||
|
||||
EAPI int e_atoms_init(void);
|
||||
EAPI int e_atoms_shutdown(void);
|
||||
|
||||
|
|
|
@ -153,6 +153,8 @@ e_border_new(E_Container *con, Ecore_X_Window win, int first_map)
|
|||
{
|
||||
E_Border *bd;
|
||||
Ecore_X_Window_Attributes *att;
|
||||
unsigned int managed, desk[2];
|
||||
int deskx, desky;
|
||||
|
||||
bd = E_OBJECT_ALLOC(E_Border, _e_border_free);
|
||||
if (!bd) return NULL;
|
||||
|
@ -277,6 +279,13 @@ e_border_new(E_Container *con, Ecore_X_Window win, int first_map)
|
|||
con->clients = evas_list_append(con->clients, bd);
|
||||
borders = evas_list_append(borders, bd);
|
||||
|
||||
managed = 1;
|
||||
ecore_x_window_prop_card32_set(win, E_ATOM_MANAGED, &managed, 1);
|
||||
e_desk_xy_get(bd->desk, &deskx, &desky);
|
||||
desk[0] = deskx;
|
||||
desk[1] = desky;
|
||||
ecore_x_window_prop_card32_set(win, E_ATOM_DESK, desk, 2);
|
||||
|
||||
return bd;
|
||||
}
|
||||
|
||||
|
@ -284,6 +293,8 @@ void
|
|||
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_CHECK(desk);
|
||||
|
@ -300,6 +311,11 @@ e_border_desk_set(E_Border *bd, E_Desk *desk)
|
|||
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
|
||||
|
@ -777,6 +793,7 @@ e_border_unmaximize(E_Border *bd)
|
|||
void
|
||||
e_border_iconify(E_Border *bd)
|
||||
{
|
||||
unsigned int iconic;
|
||||
E_OBJECT_CHECK(bd);
|
||||
if ((bd->shading)) return;
|
||||
if (!bd->iconic)
|
||||
|
@ -785,12 +802,15 @@ e_border_iconify(E_Border *bd)
|
|||
e_border_hide(bd);
|
||||
edje_object_signal_emit(bd->bg_object, "iconify", "");
|
||||
}
|
||||
iconic = 1;
|
||||
ecore_x_window_prop_card32_set(bd->client.win, E_ATOM_ICONIC, &iconic, 1);
|
||||
}
|
||||
|
||||
void
|
||||
e_border_uniconify(E_Border *bd)
|
||||
{
|
||||
E_Desk *desk;
|
||||
unsigned int iconic;
|
||||
|
||||
E_OBJECT_CHECK(bd);
|
||||
if ((bd->shading)) return;
|
||||
|
@ -804,6 +824,8 @@ e_border_uniconify(E_Border *bd)
|
|||
e_iconify_border_remove(bd);
|
||||
edje_object_signal_emit(bd->bg_object, "uniconify", "");
|
||||
}
|
||||
iconic = 0;
|
||||
ecore_x_window_prop_card32_set(bd->client.win, E_ATOM_ICONIC, &iconic, 1);
|
||||
}
|
||||
|
||||
void
|
||||
|
|
|
@ -138,6 +138,31 @@ e_desk_at_xy_get(E_Zone *zone, int x, int y)
|
|||
return (E_Desk *) zone->desks[x + (y * zone->desk_x_count)];
|
||||
}
|
||||
|
||||
void
|
||||
e_desk_xy_get(E_Desk *desk, int *x, int *y)
|
||||
{
|
||||
int xx, yy;
|
||||
|
||||
E_OBJECT_CHECK(zone);
|
||||
E_OBJECT_CHECK(desk);
|
||||
|
||||
for (xx = 0; xx < desk->zone->desk_x_count; xx++)
|
||||
{
|
||||
for (yy = 0; yy < desk->zone->desk_y_count; yy++)
|
||||
{
|
||||
E_Desk *next;
|
||||
next = e_desk_at_xy_get(desk->zone, xx, yy);
|
||||
|
||||
if (next == desk)
|
||||
{
|
||||
*x = xx;
|
||||
*y = yy;
|
||||
return;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void
|
||||
e_desk_next(E_Zone *zone)
|
||||
{
|
||||
|
|
|
@ -27,6 +27,7 @@ EAPI void e_desk_name_set(E_Desk *desk, const char *name);
|
|||
EAPI void e_desk_show(E_Desk *desk);
|
||||
EAPI E_Desk *e_desk_current_get(E_Zone *zone);
|
||||
EAPI E_Desk *e_desk_at_xy_get(E_Zone *zone, int x, int y);
|
||||
EAPI void e_desk_xy_get(E_Desk *desk, int *x, int *y);
|
||||
EAPI void e_desk_next(E_Zone *zone);
|
||||
EAPI void e_desk_prev(E_Zone *zone);
|
||||
EAPI void e_desk_row_add(E_Zone *zone);
|
||||
|
|
|
@ -504,24 +504,52 @@ _e_main_screens_init(void)
|
|||
{
|
||||
/* FIXME: move this to an actual function to start managing */
|
||||
Ecore_X_Window *windows;
|
||||
int num;
|
||||
int wnum;
|
||||
|
||||
windows = ecore_x_window_children_get(con->manager->root, &num);
|
||||
windows = ecore_x_window_children_get(con->manager->root, &wnum);
|
||||
if (windows)
|
||||
{
|
||||
int i;
|
||||
|
||||
for (i = 0; i < num; i++)
|
||||
for (i = 0; i < wnum; i++)
|
||||
{
|
||||
Ecore_X_Window_Attributes att;
|
||||
unsigned int ret_val, deskxy[2];
|
||||
int ret;
|
||||
|
||||
ecore_x_window_attributes_get(windows[i], &att);
|
||||
if ((att.visible) && (!att.override) &&
|
||||
(!att.input_only))
|
||||
ret = ecore_x_window_prop_card32_get(windows[i],
|
||||
E_ATOM_MANAGED,
|
||||
&ret_val, 1);
|
||||
if (((att.visible) && (!att.override) &&
|
||||
(!att.input_only)) || (ret > -1 && ret_val == 1))
|
||||
{
|
||||
E_Border *bd;
|
||||
|
||||
/* get all information from window before it is
|
||||
* reset by e_border_new */
|
||||
ret = ecore_x_window_prop_card32_get(windows[i],
|
||||
E_ATOM_DESK,
|
||||
deskxy, 2);
|
||||
bd = e_border_new(con, windows[i], 1);
|
||||
if (bd) e_border_show(bd);
|
||||
if (bd)
|
||||
{
|
||||
if (ret == 2)
|
||||
{
|
||||
E_Desk *target;
|
||||
target = e_desk_at_xy_get(bd->zone,
|
||||
deskxy[0],
|
||||
deskxy[1]);
|
||||
e_border_desk_set(bd, target);
|
||||
if (target == e_desk_current_get(bd->zone))
|
||||
e_border_show(bd);
|
||||
}
|
||||
}
|
||||
ret = ecore_x_window_prop_card32_get(windows[i],
|
||||
E_ATOM_ICONIC,
|
||||
&ret_val, 1);
|
||||
if ((ret > -1) && ret_val)
|
||||
e_border_iconify(bd);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue