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"
|
#include "e.h"
|
||||||
|
|
||||||
/* Atoms */
|
/* 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 */
|
/* externally accessible functions */
|
||||||
int
|
int
|
||||||
e_atoms_init(void)
|
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;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -3,6 +3,13 @@
|
||||||
#ifndef E_ATOMS_H
|
#ifndef E_ATOMS_H
|
||||||
#define 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_init(void);
|
||||||
EAPI int e_atoms_shutdown(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;
|
E_Border *bd;
|
||||||
Ecore_X_Window_Attributes *att;
|
Ecore_X_Window_Attributes *att;
|
||||||
|
unsigned int managed, desk[2];
|
||||||
|
int deskx, desky;
|
||||||
|
|
||||||
bd = E_OBJECT_ALLOC(E_Border, _e_border_free);
|
bd = E_OBJECT_ALLOC(E_Border, _e_border_free);
|
||||||
if (!bd) return NULL;
|
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);
|
con->clients = evas_list_append(con->clients, bd);
|
||||||
borders = evas_list_append(borders, 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;
|
return bd;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -284,6 +293,8 @@ void
|
||||||
e_border_desk_set(E_Border *bd, E_Desk *desk)
|
e_border_desk_set(E_Border *bd, E_Desk *desk)
|
||||||
{
|
{
|
||||||
E_Event_Border_Desk_Set *ev;
|
E_Event_Border_Desk_Set *ev;
|
||||||
|
int deskx, desky;
|
||||||
|
unsigned int deskpos[2];
|
||||||
|
|
||||||
E_OBJECT_CHECK(bd);
|
E_OBJECT_CHECK(bd);
|
||||||
E_OBJECT_CHECK(desk);
|
E_OBJECT_CHECK(desk);
|
||||||
|
@ -300,6 +311,11 @@ e_border_desk_set(E_Border *bd, E_Desk *desk)
|
||||||
ev->desk = desk;
|
ev->desk = desk;
|
||||||
e_object_ref(E_OBJECT(desk));
|
e_object_ref(E_OBJECT(desk));
|
||||||
ecore_event_add(E_EVENT_BORDER_DESK_SET, ev, _e_border_event_border_desk_set_free, NULL);
|
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
|
void
|
||||||
|
@ -777,6 +793,7 @@ e_border_unmaximize(E_Border *bd)
|
||||||
void
|
void
|
||||||
e_border_iconify(E_Border *bd)
|
e_border_iconify(E_Border *bd)
|
||||||
{
|
{
|
||||||
|
unsigned int iconic;
|
||||||
E_OBJECT_CHECK(bd);
|
E_OBJECT_CHECK(bd);
|
||||||
if ((bd->shading)) return;
|
if ((bd->shading)) return;
|
||||||
if (!bd->iconic)
|
if (!bd->iconic)
|
||||||
|
@ -785,12 +802,15 @@ e_border_iconify(E_Border *bd)
|
||||||
e_border_hide(bd);
|
e_border_hide(bd);
|
||||||
edje_object_signal_emit(bd->bg_object, "iconify", "");
|
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
|
void
|
||||||
e_border_uniconify(E_Border *bd)
|
e_border_uniconify(E_Border *bd)
|
||||||
{
|
{
|
||||||
E_Desk *desk;
|
E_Desk *desk;
|
||||||
|
unsigned int iconic;
|
||||||
|
|
||||||
E_OBJECT_CHECK(bd);
|
E_OBJECT_CHECK(bd);
|
||||||
if ((bd->shading)) return;
|
if ((bd->shading)) return;
|
||||||
|
@ -804,6 +824,8 @@ e_border_uniconify(E_Border *bd)
|
||||||
e_iconify_border_remove(bd);
|
e_iconify_border_remove(bd);
|
||||||
edje_object_signal_emit(bd->bg_object, "uniconify", "");
|
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
|
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)];
|
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
|
void
|
||||||
e_desk_next(E_Zone *zone)
|
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 void e_desk_show(E_Desk *desk);
|
||||||
EAPI E_Desk *e_desk_current_get(E_Zone *zone);
|
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 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_next(E_Zone *zone);
|
||||||
EAPI void e_desk_prev(E_Zone *zone);
|
EAPI void e_desk_prev(E_Zone *zone);
|
||||||
EAPI void e_desk_row_add(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 */
|
/* FIXME: move this to an actual function to start managing */
|
||||||
Ecore_X_Window *windows;
|
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)
|
if (windows)
|
||||||
{
|
{
|
||||||
int i;
|
int i;
|
||||||
|
|
||||||
for (i = 0; i < num; i++)
|
for (i = 0; i < wnum; i++)
|
||||||
{
|
{
|
||||||
Ecore_X_Window_Attributes att;
|
Ecore_X_Window_Attributes att;
|
||||||
|
unsigned int ret_val, deskxy[2];
|
||||||
|
int ret;
|
||||||
|
|
||||||
ecore_x_window_attributes_get(windows[i], &att);
|
ecore_x_window_attributes_get(windows[i], &att);
|
||||||
if ((att.visible) && (!att.override) &&
|
ret = ecore_x_window_prop_card32_get(windows[i],
|
||||||
(!att.input_only))
|
E_ATOM_MANAGED,
|
||||||
|
&ret_val, 1);
|
||||||
|
if (((att.visible) && (!att.override) &&
|
||||||
|
(!att.input_only)) || (ret > -1 && ret_val == 1))
|
||||||
{
|
{
|
||||||
E_Border *bd;
|
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);
|
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