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:
sebastid 2005-05-17 12:33:12 +00:00 committed by sebastid
parent a719f16c8c
commit e7b246a440
6 changed files with 46 additions and 31 deletions

View File

@ -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

View File

@ -148,7 +148,6 @@ struct _E_Border
struct {
pid_t pid;
unsigned int desktop;
unsigned char use_desktop : 1;
/* NetWM Window state */
struct {

View File

@ -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);

View File

@ -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)
{

View File

@ -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);

View File

@ -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)