X-Git-Url: https://git.brokenzipper.com/gitweb?a=blobdiff_plain;f=openbox%2Fscreen.c;h=9a1a81ad6e225e5d9c80a75150f2feb52e90a343;hb=152c638ef10ba2aa062f46ff8b05eb7cbaad66ea;hp=f82275c0a66738e43c7eacafa39cb44d0756d8ab;hpb=75b07a2bb3b98d581b39d3991cf1e9068452264a;p=chaz%2Fopenbox diff --git a/openbox/screen.c b/openbox/screen.c index f82275c0..9a1a81ad 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; @@ -166,6 +166,9 @@ void screen_startup() void screen_shutdown() { guint i; + + PROP_ERASE(ob_root, openbox_pid); /* we're not running here no more! */ + for (i = 0; i < screen_desktop_names->len; ++i) g_free(g_ptr_array_index(screen_desktop_names, i)); g_ptr_array_free(screen_desktop_names, TRUE); @@ -195,7 +198,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 +222,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 +240,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 +260,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 +286,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 +407,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)