diff --git a/ChangeLog b/ChangeLog index 8849ff0a2..e892b71b6 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,15 @@ +2002-01-04 Havoc Pennington + + * src/screen.c (meta_screen_free): set event mask on root window + to 0 so other window managers (such as ourselves restarting) can + start up; addresses race condition on restart where the old WM + still had RedirectMask when the new WM was trying to start up. + + * src/display.c (meta_display_close): free each screen + + * src/window.c (meta_window_show): always focus new windows in + click-to-focus mode + 2002-01-03 Havoc Pennington * src/window.c: use meta_XFree not XFree diff --git a/src/display.c b/src/display.c index ecebc2684..1c2a71333 100644 --- a/src/display.c +++ b/src/display.c @@ -433,6 +433,18 @@ meta_display_close (MetaDisplay *display) event_callback, display); #endif + + /* Free all screens */ + tmp = display->screens; + while (tmp != NULL) + { + MetaScreen *screen = tmp->data; + meta_screen_free (screen); + tmp = tmp->next; + } + + g_slist_free (display->screens); + display->screens = NULL; /* Must be after all calls to meta_window_free() since they * unregister windows diff --git a/src/screen.c b/src/screen.c index 6731af869..5168d1491 100644 --- a/src/screen.c +++ b/src/screen.c @@ -242,7 +242,7 @@ meta_screen_new (MetaDisplay *display, void meta_screen_free (MetaScreen *screen) -{ +{ meta_prefs_remove_listener (prefs_changed_callback, screen); meta_screen_ungrab_keys (screen); @@ -250,6 +250,12 @@ meta_screen_free (MetaScreen *screen) meta_ui_free (screen->ui); meta_stack_free (screen->stack); + + meta_error_trap_push (screen->display); + XSelectInput (screen->display->xdisplay, screen->xroot, 0); + if (meta_error_trap_pop (screen->display) != Success) + meta_warning (_("Could not release screen %d on display '%s'\n"), + screen->number, screen->display->name); g_free (screen->screen_name); g_free (screen); diff --git a/src/window.c b/src/window.c index 06a5a3ed8..8954cd2e8 100644 --- a/src/window.c +++ b/src/window.c @@ -1108,6 +1108,11 @@ meta_window_show (MetaWindow *window) meta_display_get_current_time (window->display)); } } + + /* Always focus new windows in click-to-focus */ + if (meta_prefs_get_focus_mode () == META_FOCUS_MODE_CLICK) + meta_window_focus (window, + meta_display_get_current_time (window->display)); } }