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.
This commit is contained in:
parent
73348c28de
commit
37e2be2a57
2 changed files with 57 additions and 55 deletions
|
@ -92,11 +92,11 @@
|
||||||
</theme>
|
</theme>
|
||||||
|
|
||||||
<desktops>
|
<desktops>
|
||||||
|
<!-- this stuff is only used at startup, pagers allow you to change them
|
||||||
|
during a session -->
|
||||||
<number>4</number>
|
<number>4</number>
|
||||||
<firstdesk>1</firstdesk>
|
<firstdesk>1</firstdesk>
|
||||||
<names>
|
<names>
|
||||||
<!-- the desktop names are only set at startup, pagers allow you to
|
|
||||||
change them during a session -->
|
|
||||||
<name>desktop one</name>
|
<name>desktop one</name>
|
||||||
<name>desktop two</name>
|
<name>desktop two</name>
|
||||||
<name>desktop three</name>
|
<name>desktop three</name>
|
||||||
|
|
108
openbox/screen.c
108
openbox/screen.c
|
@ -299,55 +299,55 @@ gboolean screen_annex(const gchar *program_name)
|
||||||
|
|
||||||
void screen_startup(gboolean reconfig)
|
void screen_startup(gboolean reconfig)
|
||||||
{
|
{
|
||||||
if (!reconfig) {
|
guint i, numnames;
|
||||||
guint i, numnames;
|
gchar **names;
|
||||||
gchar **names;
|
GSList *it;
|
||||||
GSList *it;
|
guint32 d;
|
||||||
|
|
||||||
/* get the initial size */
|
|
||||||
screen_resize();
|
|
||||||
|
|
||||||
/* 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);
|
|
||||||
|
|
||||||
/* set the root window property */
|
|
||||||
PROP_SETSS(RootWindow(ob_display, ob_screen), net_desktop_names,names);
|
|
||||||
|
|
||||||
g_strfreev(names);
|
|
||||||
}
|
|
||||||
|
|
||||||
desktop_cycle_popup = pager_popup_new(FALSE);
|
desktop_cycle_popup = pager_popup_new(FALSE);
|
||||||
pager_popup_height(desktop_cycle_popup, POPUP_HEIGHT);
|
pager_popup_height(desktop_cycle_popup, POPUP_HEIGHT);
|
||||||
|
|
||||||
if (!reconfig)
|
if (reconfig)
|
||||||
screen_num_desktops = 0;
|
return;
|
||||||
|
|
||||||
|
/* get the initial size */
|
||||||
|
screen_resize();
|
||||||
|
|
||||||
|
/* 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);
|
||||||
|
|
||||||
|
/* set the root window property */
|
||||||
|
PROP_SETSS(RootWindow(ob_display, ob_screen), net_desktop_names,names);
|
||||||
|
|
||||||
|
g_strfreev(names);
|
||||||
|
|
||||||
|
/* set the number of desktops */
|
||||||
|
screen_num_desktops = 0;
|
||||||
screen_set_num_desktops(config_desktops_num);
|
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 */
|
/* start on the current desktop when a wm was already running */
|
||||||
screen_showing_desktop = FALSE;
|
if (PROP_GET32(RootWindow(ob_display, ob_screen),
|
||||||
PROP_SET32(RootWindow(ob_display, ob_screen),
|
net_current_desktop, cardinal, &d) &&
|
||||||
net_showing_desktop, cardinal, screen_showing_desktop);
|
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);
|
||||||
|
|
||||||
screen_update_layout();
|
/* 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();
|
||||||
}
|
}
|
||||||
|
|
||||||
void screen_shutdown(gboolean reconfig)
|
void screen_shutdown(gboolean reconfig)
|
||||||
|
@ -356,22 +356,24 @@ void screen_shutdown(gboolean reconfig)
|
||||||
|
|
||||||
pager_popup_free(desktop_cycle_popup);
|
pager_popup_free(desktop_cycle_popup);
|
||||||
|
|
||||||
if (!reconfig) {
|
if (reconfig)
|
||||||
XSelectInput(ob_display, RootWindow(ob_display, ob_screen),
|
return;
|
||||||
NoEventMask);
|
|
||||||
|
|
||||||
/* we're not running here no more! */
|
XSelectInput(ob_display, RootWindow(ob_display, ob_screen),
|
||||||
PROP_ERASE(RootWindow(ob_display, ob_screen), openbox_pid);
|
NoEventMask);
|
||||||
/* 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);
|
/* 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);
|
||||||
|
|
||||||
g_strfreev(screen_desktop_names);
|
g_strfreev(screen_desktop_names);
|
||||||
screen_desktop_names = NULL;
|
screen_desktop_names = NULL;
|
||||||
|
|
||||||
for (r = area; *r; ++r)
|
for (r = area; *r; ++r)
|
||||||
g_free(*r);
|
g_free(*r);
|
||||||
g_free(area);
|
g_free(area);
|
||||||
|
|
Loading…
Reference in a new issue