X-Git-Url: https://git.dogcows.com/gitweb?a=blobdiff_plain;f=openbox%2Fscreen.c;h=298a0b22b4c4f13961e43644a88a9f90fd72a2fd;hb=6372bd7c0d68793c2371ce7b6c1aa8017f913aee;hp=3542dfdc3a76512f3c6de1274da386fab5ae959f;hpb=7229bea3c60de23a5fa4ad46bcae6171044ade81;p=chaz%2Fopenbox diff --git a/openbox/screen.c b/openbox/screen.c index 3542dfdc..298a0b22 100644 --- a/openbox/screen.c +++ b/openbox/screen.c @@ -2,7 +2,7 @@ screen.c for the Openbox window manager Copyright (c) 2006 Mikael Magnusson - Copyright (c) 2003 Ben Jansens + Copyright (c) 2003-2007 Dana Jansens This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -45,7 +45,7 @@ /*! The event mask to grab on the root window */ #define ROOT_EVENTMASK (StructureNotifyMask | PropertyChangeMask | \ EnterWindowMask | LeaveWindowMask | \ - SubstructureNotifyMask | SubstructureRedirectMask | \ + SubstructureRedirectMask | FocusChangeMask | \ ButtonPressMask | ButtonReleaseMask | ButtonMotionMask) guint screen_num_desktops; @@ -372,7 +372,7 @@ void screen_resize() void screen_set_num_desktops(guint num) { - guint i, old; + guint old; gulong *viewport; GList *it; @@ -410,16 +410,6 @@ void screen_set_num_desktops(guint num) /* change our desktop if we're on one that no longer exists! */ if (screen_desktop >= screen_num_desktops) screen_set_desktop(num - 1); - - /* update the focus lists */ - /* free our lists for the desktops which have disappeared */ - for (i = num; i < old; ++i) - g_list_free(focus_order[i]); - /* realloc the array */ - focus_order = g_renew(GList*, focus_order, num); - /* set the new lists to be empty */ - for (i = old; i < num; ++i) - focus_order[i] = NULL; } void screen_set_desktop(guint num) @@ -449,8 +439,7 @@ void screen_set_desktop(guint num) for (it = stacking_list; it; it = g_list_next(it)) { if (WINDOW_IS_CLIENT(it->data)) { ObClient *c = it->data; - if (client_should_show(c)) - frame_show(c->frame); + client_showhide(c); } } @@ -458,14 +447,13 @@ void screen_set_desktop(guint num) for (it = g_list_last(stacking_list); it; it = g_list_previous(it)) { if (WINDOW_IS_CLIENT(it->data)) { ObClient *c = it->data; - if (c->frame->visible && !client_should_show(c)) - frame_hide(c->frame); + client_showhide(c); } } event_ignore_queued_enters(); - focus_hilite = focus_fallback_target(OB_FOCUS_FALLBACK_NOFOCUS, NULL); + focus_hilite = focus_fallback_target(TRUE, focus_client); if (focus_hilite) { frame_adjust_focus(focus_hilite->frame, TRUE); @@ -875,8 +863,7 @@ void screen_show_desktop(gboolean show) for (it = g_list_last(stacking_list); it; it = g_list_previous(it)) { if (WINDOW_IS_CLIENT(it->data)) { ObClient *client = it->data; - if (client->frame->visible && !client_should_show(client)) - frame_hide(client->frame); + client_showhide(client); } } } else { @@ -884,20 +871,22 @@ void screen_show_desktop(gboolean show) for (it = stacking_list; it; it = g_list_next(it)) { if (WINDOW_IS_CLIENT(it->data)) { ObClient *client = it->data; - if (!client->frame->visible && client_should_show(client)) - frame_show(client->frame); + client_showhide(client); } } } if (show) { /* focus desktop */ - for (it = focus_order[screen_desktop]; it; it = g_list_next(it)) - if (((ObClient*)it->data)->type == OB_CLIENT_TYPE_DESKTOP && + for (it = focus_order; it; it = g_list_next(it)) { + ObClient *c = it->data; + if (c->type == OB_CLIENT_TYPE_DESKTOP && + (c->desktop == screen_desktop || c->desktop == DESKTOP_ALL) && client_focus(it->data)) break; + } } else { - focus_fallback(OB_FOCUS_FALLBACK_NOFOCUS); + focus_fallback(TRUE); } show = !!show; /* make it boolean */