From 37e2be2a57a218bd671e2e4b056643fbb248ad02 Mon Sep 17 00:00:00 2001 From: Dana Jansens Date: Mon, 7 May 2007 16:49:27 +0000 Subject: [PATCH] fix a crash after reconfigure, the desktop names were not being re-set. so now they aren't deleted since we don't want to change them over a reconfigure anyways. --- data/rc.xml.in | 4 +- openbox/screen.c | 104 ++++++++++++++++++++++++----------------------- 2 files changed, 55 insertions(+), 53 deletions(-) diff --git a/data/rc.xml.in b/data/rc.xml.in index 66880d7f..35cc4cfb 100644 --- a/data/rc.xml.in +++ b/data/rc.xml.in @@ -92,11 +92,11 @@ + 4 1 - desktop one desktop two desktop three diff --git a/openbox/screen.c b/openbox/screen.c index 1faf521e..5fc2bb92 100644 --- a/openbox/screen.c +++ b/openbox/screen.c @@ -299,55 +299,55 @@ gboolean screen_annex(const gchar *program_name) void screen_startup(gboolean reconfig) { - if (!reconfig) { - guint i, numnames; - gchar **names; - GSList *it; + guint i, numnames; + gchar **names; + GSList *it; + guint32 d; - /* get the initial size */ - screen_resize(); + desktop_cycle_popup = pager_popup_new(FALSE); + pager_popup_height(desktop_cycle_popup, POPUP_HEIGHT); - /* get the desktop names */ - numnames = g_slist_length(config_desktops_names); - names = g_new(gchar*, numnames + 1); - names[numnames] = NULL; - for (i = 0, it = config_desktops_names; it; ++i, it = g_slist_next(it)) - names[i] = g_strdup(it->data); + if (reconfig) + return; - /* set the root window property */ - PROP_SETSS(RootWindow(ob_display, ob_screen), net_desktop_names,names); + /* get the initial size */ + screen_resize(); - g_strfreev(names); - } + /* get the desktop names */ + numnames = g_slist_length(config_desktops_names); + names = g_new(gchar*, numnames + 1); + names[numnames] = NULL; + for (i = 0, it = config_desktops_names; it; ++i, it = g_slist_next(it)) + names[i] = g_strdup(it->data); - desktop_cycle_popup = pager_popup_new(FALSE); - pager_popup_height(desktop_cycle_popup, POPUP_HEIGHT); + /* set the root window property */ + PROP_SETSS(RootWindow(ob_display, ob_screen), net_desktop_names,names); + + g_strfreev(names); - if (!reconfig) - screen_num_desktops = 0; + /* set the number of desktops */ + screen_num_desktops = 0; screen_set_num_desktops(config_desktops_num); - if (!reconfig) { - guint32 d; - /* start on the current desktop when a wm was already running */ - if (PROP_GET32(RootWindow(ob_display, ob_screen), - net_current_desktop, cardinal, &d) && - d < screen_num_desktops) - { - screen_set_desktop(d, FALSE); - } else if (session_desktop >= 0) - screen_set_desktop(MIN((guint)session_desktop, - screen_num_desktops), FALSE); - else - screen_set_desktop(MIN(config_screen_firstdesk, - screen_num_desktops) - 1, FALSE); - /* don't start in showing-desktop mode */ - screen_showing_desktop = FALSE; - PROP_SET32(RootWindow(ob_display, ob_screen), - net_showing_desktop, cardinal, screen_showing_desktop); + /* start on the current desktop when a wm was already running */ + if (PROP_GET32(RootWindow(ob_display, ob_screen), + net_current_desktop, cardinal, &d) && + d < screen_num_desktops) + { + screen_set_desktop(d, FALSE); + } else if (session_desktop >= 0) + screen_set_desktop(MIN((guint)session_desktop, + screen_num_desktops), FALSE); + else + screen_set_desktop(MIN(config_screen_firstdesk, + screen_num_desktops) - 1, FALSE); + + /* don't start in showing-desktop mode */ + screen_showing_desktop = FALSE; + PROP_SET32(RootWindow(ob_display, ob_screen), + net_showing_desktop, cardinal, screen_showing_desktop); - screen_update_layout(); - } + screen_update_layout(); } void screen_shutdown(gboolean reconfig) @@ -356,22 +356,24 @@ void screen_shutdown(gboolean reconfig) pager_popup_free(desktop_cycle_popup); - if (!reconfig) { - XSelectInput(ob_display, RootWindow(ob_display, ob_screen), - NoEventMask); + if (reconfig) + return; + + XSelectInput(ob_display, RootWindow(ob_display, ob_screen), + NoEventMask); - /* we're not running here no more! */ - PROP_ERASE(RootWindow(ob_display, ob_screen), openbox_pid); - /* not without us */ - PROP_ERASE(RootWindow(ob_display, ob_screen), net_supported); - /* don't keep this mode */ - PROP_ERASE(RootWindow(ob_display, ob_screen), net_showing_desktop); + /* we're not running here no more! */ + PROP_ERASE(RootWindow(ob_display, ob_screen), openbox_pid); + /* not without us */ + PROP_ERASE(RootWindow(ob_display, ob_screen), net_supported); + /* don't keep this mode */ + PROP_ERASE(RootWindow(ob_display, ob_screen), net_showing_desktop); - XDestroyWindow(ob_display, screen_support_win); - } + XDestroyWindow(ob_display, screen_support_win); g_strfreev(screen_desktop_names); screen_desktop_names = NULL; + for (r = area; *r; ++r) g_free(*r); g_free(area); -- 2.39.2