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