From e7b246a44031185f5dbac37a011f632aef88cbc4 Mon Sep 17 00:00:00 2001 From: sebastid Date: Tue, 17 May 2005 12:33:12 +0000 Subject: [PATCH] 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 --- src/bin/e_border.c | 12 ++++-------- src/bin/e_border.h | 1 - src/bin/e_container.c | 2 -- src/bin/e_desk.c | 17 +++++++++++++++++ src/bin/e_desk.h | 1 + src/bin/e_hints.c | 44 +++++++++++++++++++++++-------------------- 6 files changed, 46 insertions(+), 31 deletions(-) diff --git a/src/bin/e_border.c b/src/bin/e_border.c index 202c54d78..f64a9884d 100644 --- a/src/bin/e_border.c +++ b/src/bin/e_border.c @@ -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 diff --git a/src/bin/e_border.h b/src/bin/e_border.h index e11485a97..a3dfff4ab 100644 --- a/src/bin/e_border.h +++ b/src/bin/e_border.h @@ -148,7 +148,6 @@ struct _E_Border struct { pid_t pid; unsigned int desktop; - unsigned char use_desktop : 1; /* NetWM Window state */ struct { diff --git a/src/bin/e_container.c b/src/bin/e_container.c index 2bcfd57a1..bb8e194b7 100644 --- a/src/bin/e_container.c +++ b/src/bin/e_container.c @@ -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); diff --git a/src/bin/e_desk.c b/src/bin/e_desk.c index be69d0a7c..751fedee0 100644 --- a/src/bin/e_desk.c +++ b/src/bin/e_desk.c @@ -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) { diff --git a/src/bin/e_desk.h b/src/bin/e_desk.h index aab4a438f..2a45c6d9d 100644 --- a/src/bin/e_desk.h +++ b/src/bin/e_desk.h @@ -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); diff --git a/src/bin/e_hints.c b/src/bin/e_hints.c index ae49a6f4c..f7944f5e0 100644 --- a/src/bin/e_hints.c +++ b/src/bin/e_hints.c @@ -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)