diff options
| author | Dana Jansens <danakj@orodu.net> | 2003-09-03 18:11:39 +0000 |
|---|---|---|
| committer | Dana Jansens <danakj@orodu.net> | 2003-09-03 18:11:39 +0000 |
| commit | 806a8c411f10c7a2292bfac15d77c8609f56ee71 (patch) | |
| tree | d56c0f2a4b05b00fef085ea69930603f10ee8f75 /openbox/screen.c | |
| parent | 40902496a01b21b950f3672bf2ae9e100ba9b95c (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.c | 63 |
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() |
