diff --git a/TODO b/TODO index d8c605850..9ffa7e134 100644 --- a/TODO +++ b/TODO @@ -55,6 +55,8 @@ Also look at all the .c files - they have their own localized TODO lists These are in no particular order: +* drop on ibar for re-ordering, removal seems broken (drop location is the + wrong spot) * break out desks x/y size config so you can have a different desktop size per zone - right now there is a signle global (use this later as the default for new/unconfigured zones) diff --git a/src/bin/e_border.h b/src/bin/e_border.h index a3dfff4ab..e11485a97 100644 --- a/src/bin/e_border.h +++ b/src/bin/e_border.h @@ -148,6 +148,7 @@ 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_hints.c b/src/bin/e_hints.c index 5c8c54087..ae49a6f4c 100644 --- a/src/bin/e_hints.c +++ b/src/bin/e_hints.c @@ -289,14 +289,20 @@ e_hints_window_init(E_Border *bd) e_border_raise(bd); if (!ecore_x_netwm_desktop_get(bd->client.win, &bd->client.netwm.desktop)) - bd->client.netwm.desktop = 0; + { + 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) e_border_stick(bd); - else if ((bd->client.netwm.desktop >= 0) - && (bd->client.netwm.desktop < (bd->zone->desk_x_count * bd->zone->desk_y_count))) + 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; @@ -305,7 +311,8 @@ e_hints_window_init(E_Border *bd) x = bd->client.netwm.desktop - (y * bd->zone->desk_x_count); desk = e_desk_at_xy_get(bd->zone, x, y); - e_border_desk_set(bd, desk); + if (desk) + e_border_desk_set(bd, desk); } if (bd->client.netwm.state.sticky)