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,21 +2004,17 @@ _e_border_cb_desktop_change(void *data, int ev_type, void *ev)
|
||||||
Ecore_X_Event_Desktop_Change *e;
|
Ecore_X_Event_Desktop_Change *e;
|
||||||
|
|
||||||
e = ev;
|
e = ev;
|
||||||
if (e->desk < 0) return 1;
|
|
||||||
bd = e_border_find_by_client_window(e->win);
|
bd = e_border_find_by_client_window(e->win);
|
||||||
if (bd)
|
if (bd)
|
||||||
{
|
{
|
||||||
if (bd->client.netwm.desktop == 0xffffffff)
|
if (e->desk == 0xffffffff)
|
||||||
e_border_stick(bd);
|
e_border_stick(bd);
|
||||||
else if (e->desk < (bd->zone->desk_x_count * bd->zone->desk_y_count))
|
else if (e->desk < (bd->zone->desk_x_count * bd->zone->desk_y_count))
|
||||||
{
|
{
|
||||||
E_Desk *desk;
|
E_Desk *desk;
|
||||||
int x, y;
|
|
||||||
|
|
||||||
y = e->desk / bd->zone->desk_x_count;
|
desk = e_desk_at_pos_get(bd->zone, e->desk);
|
||||||
x = e->desk - (y * bd->zone->desk_x_count);
|
if (desk)
|
||||||
|
|
||||||
desk = e_desk_at_xy_get(bd->zone, x, y);
|
|
||||||
e_border_desk_set(bd, desk);
|
e_border_desk_set(bd, desk);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -148,7 +148,6 @@ struct _E_Border
|
||||||
struct {
|
struct {
|
||||||
pid_t pid;
|
pid_t pid;
|
||||||
unsigned int desktop;
|
unsigned int desktop;
|
||||||
unsigned char use_desktop : 1;
|
|
||||||
|
|
||||||
/* NetWM Window state */
|
/* NetWM Window state */
|
||||||
struct {
|
struct {
|
||||||
|
|
|
@ -56,8 +56,6 @@ e_container_new(E_Manager *man)
|
||||||
con->h = con->manager->h;
|
con->h = con->manager->h;
|
||||||
if (e_config->use_virtual_roots)
|
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);
|
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_icccm_title_set(con->win, "Enlightenment Container");
|
||||||
ecore_x_window_raise(con->win);
|
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)];
|
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
|
void
|
||||||
e_desk_xy_get(E_Desk *desk, int *x, int *y)
|
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 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 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_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);
|
||||||
|
|
|
@ -266,6 +266,7 @@ e_hints_window_init(E_Border *bd)
|
||||||
{
|
{
|
||||||
e_hints_window_state_get(bd);
|
e_hints_window_state_get(bd);
|
||||||
e_hints_window_type_get(bd);
|
e_hints_window_type_get(bd);
|
||||||
|
int has;
|
||||||
|
|
||||||
bd->client.icccm.state = ecore_x_icccm_state_get(bd->client.win);
|
bd->client.icccm.state = ecore_x_icccm_state_get(bd->client.win);
|
||||||
if (bd->client.icccm.state == ECORE_X_WINDOW_STATE_HINT_NONE)
|
if (bd->client.icccm.state == ECORE_X_WINDOW_STATE_HINT_NONE)
|
||||||
|
@ -288,32 +289,35 @@ e_hints_window_init(E_Border *bd)
|
||||||
bd->layer = 100;
|
bd->layer = 100;
|
||||||
e_border_raise(bd);
|
e_border_raise(bd);
|
||||||
|
|
||||||
|
has = 1;
|
||||||
if (!ecore_x_netwm_desktop_get(bd->client.win, &bd->client.netwm.desktop))
|
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;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
bd->client.netwm.use_desktop = 1;
|
|
||||||
if (!ecore_x_netwm_pid_get(bd->client.win, &bd->client.netwm.pid))
|
|
||||||
bd->client.netwm.pid = -1;
|
|
||||||
|
|
||||||
if (bd->client.netwm.desktop == 0xffffffff)
|
if (bd->client.netwm.desktop == 0xffffffff)
|
||||||
e_border_stick(bd);
|
e_border_stick(bd);
|
||||||
else if ((bd->client.netwm.use_desktop) &&
|
else if (bd->client.netwm.desktop < (bd->zone->desk_x_count * bd->zone->desk_y_count))
|
||||||
(bd->client.netwm.desktop >= 0) &&
|
|
||||||
(bd->client.netwm.desktop < (bd->zone->desk_x_count * bd->zone->desk_y_count)))
|
|
||||||
{
|
{
|
||||||
E_Desk *desk;
|
E_Desk *desk;
|
||||||
int x, y;
|
|
||||||
|
|
||||||
y = bd->client.netwm.desktop / bd->zone->desk_x_count;
|
desk = e_desk_at_pos_get(bd->zone, bd->client.netwm.desktop);
|
||||||
x = bd->client.netwm.desktop - (y * bd->zone->desk_x_count);
|
|
||||||
|
|
||||||
desk = e_desk_at_xy_get(bd->zone, x, y);
|
|
||||||
if (desk)
|
if (desk)
|
||||||
e_border_desk_set(bd, desk);
|
e_border_desk_set(bd, desk);
|
||||||
}
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
/* Update netwm desktop with current desktop */
|
||||||
|
e_hints_window_desktop_set(bd);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
/* 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.state.sticky)
|
if (bd->client.netwm.state.sticky)
|
||||||
e_border_stick(bd);
|
e_border_stick(bd);
|
||||||
|
|
Loading…
Reference in New Issue