- if (self->id == -1) {
- if (self->data.normal.data) /* it's set to NULL if its destroyed */
- client_activate(self->data.normal.data, FALSE, TRUE);
+ if (self->id == ADD_DESKTOP) {
+ screen_add_desktop(FALSE);
+ menu_frame_hide_all();
+ }
+ else if (self->id == REMOVE_DESKTOP) {
+ screen_remove_desktop(FALSE);
+ menu_frame_hide_all();
+ }
+ else {
+ ObClient *t = self->data.normal.data;
+ if (t) { /* it's set to NULL if its destroyed */
+ gboolean here = state & ShiftMask;
+
+ client_activate(t, TRUE, here, TRUE, TRUE, TRUE);
+ /* if the window is omnipresent then we need to go to its
+ desktop */
+ if (!here && t->desktop == DESKTOP_ALL)
+ screen_set_desktop(self->id, FALSE);
+ }
+ else
+ screen_set_desktop(self->id, TRUE);