forked from enlightenment/enlightenment
Don't need to store if the DESKTOP hint was set on init. If the hint
doesn't exist or the desktop doesn't exists, update the hint with our desktop. SVN revision: 14816
This commit is contained in:
parent
a719f16c8c
commit
e7b246a440
|
@ -2004,22 +2004,18 @@ _e_border_cb_desktop_change(void *data, int ev_type, void *ev)
|
|||
Ecore_X_Event_Desktop_Change *e;
|
||||
|
||||
e = ev;
|
||||
if (e->desk < 0) return 1;
|
||||
bd = e_border_find_by_client_window(e->win);
|
||||
if (bd)
|
||||
{
|
||||
if (bd->client.netwm.desktop == 0xffffffff)
|
||||
if (e->desk == 0xffffffff)
|
||||
e_border_stick(bd);
|
||||
else if (e->desk < (bd->zone->desk_x_count * bd->zone->desk_y_count))
|
||||
{
|
||||
E_Desk *desk;
|
||||
int x, y;
|
||||
|
||||
y = e->desk / bd->zone->desk_x_count;
|
||||
x = e->desk - (y * bd->zone->desk_x_count);
|
||||
|
||||
desk = e_desk_at_xy_get(bd->zone, x, y);
|
||||
e_border_desk_set(bd, desk);
|
||||
desk = e_desk_at_pos_get(bd->zone, e->desk);
|
||||
if (desk)
|
||||
e_border_desk_set(bd, desk);
|
||||
}
|
||||
}
|
||||
else
|
||||
|
|
|
@ -148,7 +148,6 @@ struct _E_Border
|
|||
struct {
|
||||
pid_t pid;
|
||||
unsigned int desktop;
|
||||
unsigned char use_desktop : 1;
|
||||
|
||||
/* NetWM Window state */
|
||||
struct {
|
||||
|
|
|
@ -56,8 +56,6 @@ e_container_new(E_Manager *man)
|
|||
con->h = con->manager->h;
|
||||
if (e_config->use_virtual_roots)
|
||||
{
|
||||
Ecore_X_Window mwin;
|
||||
|
||||
con->win = ecore_x_window_override_new(con->manager->win, con->x, con->y, con->w, con->h);
|
||||
ecore_x_icccm_title_set(con->win, "Enlightenment Container");
|
||||
ecore_x_window_raise(con->win);
|
||||
|
|
|
@ -147,6 +147,23 @@ e_desk_at_xy_get(E_Zone *zone, int x, int y)
|
|||
return zone->desks[x + (y * zone->desk_x_count)];
|
||||
}
|
||||
|
||||
E_Desk *
|
||||
e_desk_at_pos_get(E_Zone *zone, int pos)
|
||||
{
|
||||
int x, y;
|
||||
|
||||
E_OBJECT_CHECK_RETURN(zone, NULL);
|
||||
E_OBJECT_TYPE_CHECK_RETURN(zone, E_ZONE_TYPE, NULL);
|
||||
|
||||
y = pos / zone->desk_x_count;
|
||||
x = pos - (y * zone->desk_x_count);
|
||||
|
||||
if ((x >= zone->desk_x_count) || (y >= zone->desk_y_count))
|
||||
return NULL;
|
||||
|
||||
return zone->desks[x + (y * zone->desk_x_count)];
|
||||
}
|
||||
|
||||
void
|
||||
e_desk_xy_get(E_Desk *desk, int *x, int *y)
|
||||
{
|
||||
|
|
|
@ -36,6 +36,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 E_Desk *e_desk_at_pos_get(E_Zone *zone, int pos);
|
||||
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);
|
||||
|
|
|
@ -266,6 +266,7 @@ e_hints_window_init(E_Border *bd)
|
|||
{
|
||||
e_hints_window_state_get(bd);
|
||||
e_hints_window_type_get(bd);
|
||||
int has;
|
||||
|
||||
bd->client.icccm.state = ecore_x_icccm_state_get(bd->client.win);
|
||||
if (bd->client.icccm.state == ECORE_X_WINDOW_STATE_HINT_NONE)
|
||||
|
@ -288,33 +289,36 @@ e_hints_window_init(E_Border *bd)
|
|||
bd->layer = 100;
|
||||
e_border_raise(bd);
|
||||
|
||||
has = 1;
|
||||
if (!ecore_x_netwm_desktop_get(bd->client.win, &bd->client.netwm.desktop))
|
||||
has = 0;
|
||||
if (has)
|
||||
{
|
||||
bd->client.netwm.use_desktop = 0;
|
||||
bd->client.netwm.desktop = 0;
|
||||
if (bd->client.netwm.desktop == 0xffffffff)
|
||||
e_border_stick(bd);
|
||||
else if (bd->client.netwm.desktop < (bd->zone->desk_x_count * bd->zone->desk_y_count))
|
||||
{
|
||||
E_Desk *desk;
|
||||
|
||||
desk = e_desk_at_pos_get(bd->zone, bd->client.netwm.desktop);
|
||||
if (desk)
|
||||
e_border_desk_set(bd, desk);
|
||||
}
|
||||
else
|
||||
{
|
||||
/* Update netwm desktop with current desktop */
|
||||
e_hints_window_desktop_set(bd);
|
||||
}
|
||||
}
|
||||
else
|
||||
bd->client.netwm.use_desktop = 1;
|
||||
{
|
||||
/* Update netwm desktop with current desktop */
|
||||
e_hints_window_desktop_set(bd);
|
||||
}
|
||||
|
||||
if (!ecore_x_netwm_pid_get(bd->client.win, &bd->client.netwm.pid))
|
||||
bd->client.netwm.pid = -1;
|
||||
|
||||
if (bd->client.netwm.desktop == 0xffffffff)
|
||||
e_border_stick(bd);
|
||||
else if ((bd->client.netwm.use_desktop) &&
|
||||
(bd->client.netwm.desktop >= 0) &&
|
||||
(bd->client.netwm.desktop < (bd->zone->desk_x_count * bd->zone->desk_y_count)))
|
||||
{
|
||||
E_Desk *desk;
|
||||
int x, y;
|
||||
|
||||
y = bd->client.netwm.desktop / bd->zone->desk_x_count;
|
||||
x = bd->client.netwm.desktop - (y * bd->zone->desk_x_count);
|
||||
|
||||
desk = e_desk_at_xy_get(bd->zone, x, y);
|
||||
if (desk)
|
||||
e_border_desk_set(bd, desk);
|
||||
}
|
||||
|
||||
if (bd->client.netwm.state.sticky)
|
||||
e_border_stick(bd);
|
||||
if (bd->client.netwm.state.shaded)
|
||||
|
|
Loading…
Reference in New Issue