summaryrefslogtreecommitdiff
path: root/openbox/screen.c
diff options
context:
space:
mode:
authorDana Jansens <danakj@orodu.net>2003-09-03 18:11:39 +0000
committerDana Jansens <danakj@orodu.net>2003-09-03 18:11:39 +0000
commit806a8c411f10c7a2292bfac15d77c8609f56ee71 (patch)
treed56c0f2a4b05b00fef085ea69930603f10ee8f75 /openbox/screen.c
parent40902496a01b21b950f3672bf2ae9e100ba9b95c (diff)
add a reconfigure action, also reconfigure on SIGUSR2.
support reconfiguring throughout the entire codebase.
Diffstat (limited to 'openbox/screen.c')
-rw-r--r--openbox/screen.c63
1 files changed, 38 insertions, 25 deletions
diff --git a/openbox/screen.c b/openbox/screen.c
index 3809e05a..41fee0b9 100644
--- a/openbox/screen.c
+++ b/openbox/screen.c
@@ -261,15 +261,16 @@ gboolean screen_annex()
return TRUE;
}
-void screen_startup()
+void screen_startup(gboolean reconfig)
{
GSList *it;
guint i;
desktop_cycle_popup = popup_new(FALSE);
- /* get the initial size */
- screen_resize();
+ if (!reconfig)
+ /* get the initial size */
+ screen_resize();
/* set the names */
screen_desktop_names = g_new(char*,
@@ -282,48 +283,60 @@ void screen_startup()
g_free(screen_desktop_names); /* dont free the individual strings */
screen_desktop_names = NULL;
- screen_num_desktops = 0;
+ if (!reconfig)
+ screen_num_desktops = 0;
screen_set_num_desktops(config_desktops_num);
- if (startup_desktop >= screen_num_desktops)
- startup_desktop = 0;
- screen_desktop = startup_desktop;
- screen_set_desktop(startup_desktop);
+ if (!reconfig) {
+ if (startup_desktop >= screen_num_desktops)
+ startup_desktop = 0;
+ screen_desktop = startup_desktop;
+ screen_set_desktop(startup_desktop);
- /* 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);
+ /* 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();
#ifdef USE_LIBSN
- sn_context = sn_monitor_context_new(ob_sn_display, ob_screen,
- sn_event_func, NULL, NULL);
- sn_busy_cnt = 0;
+ sn_context = sn_monitor_context_new(ob_sn_display, ob_screen,
+ sn_event_func, NULL, NULL);
+ sn_busy_cnt = 0;
#endif
+ }
}
-void screen_shutdown()
+void screen_shutdown(gboolean reconfig)
{
Rect **r;
popup_free(desktop_cycle_popup);
- XSelectInput(ob_display, RootWindow(ob_display, ob_screen), NoEventMask);
+ if (!reconfig) {
+#ifdef USE_LIBSN
+ sn_monitor_context_unref(sn_context);
+#endif
+
+ 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);
+ area = NULL;
}
void screen_resize()