X-Git-Url: https://git.dogcows.com/gitweb?a=blobdiff_plain;ds=sidebyside;f=openbox%2Fscreen.c;h=3ff40df4c12339b73bee4b695f43c8f6a34e15d2;hb=49a70012642a6d18529dc2efedc6e9c604c0a0b2;hp=f82275c0a66738e43c7eacafa39cb44d0756d8ab;hpb=75b07a2bb3b98d581b39d3991cf1e9068452264a;p=chaz%2Fopenbox diff --git a/openbox/screen.c b/openbox/screen.c index f82275c0..3ff40df4 100644 --- a/openbox/screen.c +++ b/openbox/screen.c @@ -20,7 +20,7 @@ SubstructureNotifyMask | SubstructureRedirectMask | \ ButtonPressMask | ButtonReleaseMask | ButtonMotionMask) -guint screen_num_desktops = 1; +guint screen_num_desktops = 0; guint screen_desktop = 0; Size screen_physical_size; gboolean screen_showing_desktop; @@ -195,7 +195,8 @@ void screen_resize() void screen_set_num_desktops(guint num) { - unsigned long *viewport; + guint i, old; + gulong *viewport; g_assert(num > 0); @@ -218,11 +219,12 @@ void screen_set_num_desktops(guint num) } */ + old = screen_num_desktops; screen_num_desktops = num; PROP_SET32(ob_root, net_number_of_desktops, cardinal, num); /* set the viewport hint */ - viewport = g_new0(unsigned long, num * 2); + viewport = g_new0(gulong, num * 2); PROP_SET32A(ob_root, net_desktop_viewport, cardinal, viewport, num * 2); g_free(viewport); @@ -235,7 +237,17 @@ void screen_set_num_desktops(guint num) /* may be some unnamed desktops that we need to fill in with names */ screen_update_desktop_names(); - dispatch_ob(Event_Ob_NumDesktops); + /* 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; + + dispatch_ob(Event_Ob_NumDesktops, num, old); /* change our desktop if we're on one that no longer exists! */ if (screen_desktop >= screen_num_desktops) @@ -245,13 +257,13 @@ void screen_set_num_desktops(guint num) void screen_set_desktop(guint num) { GList *it; - - guint old = screen_desktop; + guint old; g_assert(num < screen_num_desktops); g_message("Moving to desktop %u", num); + old = screen_desktop; screen_desktop = num; PROP_SET32(ob_root, net_current_desktop, cardinal, num); @@ -271,7 +283,7 @@ void screen_set_desktop(guint num) engine_frame_show(c->frame); } - dispatch_ob(Event_Ob_Desktop); + dispatch_ob(Event_Ob_Desktop, num, old); } void screen_update_layout() @@ -392,10 +404,10 @@ void screen_show_desktop(gboolean show) } } - show = show ? 1 : 0; /* make it boolean */ + show = !!show; /* make it boolean */ PROP_SET32(ob_root, net_showing_desktop, cardinal, show); - dispatch_ob(Event_Ob_ShowDesktop); + dispatch_ob(Event_Ob_ShowDesktop, show, 0); } void screen_install_colormap(Client *client, gboolean install)