|
|
d1d875 |
diff -up mutter-3.14.4/src/core/display.c.initial-focus mutter-3.14.4/src/core/display.c
|
|
|
d1d875 |
--- mutter-3.14.4/src/core/display.c.initial-focus 2016-02-04 14:03:35.444859922 -0500
|
|
|
d1d875 |
+++ mutter-3.14.4/src/core/display.c 2016-02-04 15:46:05.445776848 -0500
|
|
|
d1d875 |
@@ -532,6 +532,7 @@ meta_display_open (void)
|
|
|
d1d875 |
MetaScreen *screen;
|
|
|
d1d875 |
int i;
|
|
|
d1d875 |
guint32 timestamp;
|
|
|
d1d875 |
+ Window old_active_xwindow = None;
|
|
|
d1d875 |
|
|
|
d1d875 |
/* A list of all atom names, so that we can intern them in one go. */
|
|
|
d1d875 |
char *atom_names[] = {
|
|
|
d1d875 |
@@ -905,6 +906,11 @@ meta_display_open (void)
|
|
|
d1d875 |
|
|
|
d1d875 |
display->screen = screen;
|
|
|
d1d875 |
|
|
|
d1d875 |
+ if (!meta_is_wayland_compositor ())
|
|
|
d1d875 |
+ meta_prop_get_window (display, display->screen->xroot,
|
|
|
d1d875 |
+ display->atom__NET_ACTIVE_WINDOW,
|
|
|
d1d875 |
+ &old_active_xwindow);
|
|
|
d1d875 |
+
|
|
|
d1d875 |
meta_screen_init_workspaces (screen);
|
|
|
d1d875 |
|
|
|
d1d875 |
enable_compositor (display);
|
|
|
d1d875 |
@@ -921,44 +927,17 @@ meta_display_open (void)
|
|
|
d1d875 |
*/
|
|
|
d1d875 |
if (!meta_is_wayland_compositor ())
|
|
|
d1d875 |
meta_screen_manage_all_windows (screen);
|
|
|
d1d875 |
-
|
|
|
d1d875 |
- {
|
|
|
d1d875 |
- Window focus;
|
|
|
d1d875 |
- int ret_to;
|
|
|
d1d875 |
-
|
|
|
d1d875 |
- /* kinda bogus because GetInputFocus has no possible errors */
|
|
|
d1d875 |
- meta_error_trap_push (display);
|
|
|
d1d875 |
-
|
|
|
d1d875 |
- /* FIXME: This is totally broken; see comment 9 of bug 88194 about this */
|
|
|
d1d875 |
- focus = None;
|
|
|
d1d875 |
- ret_to = RevertToPointerRoot;
|
|
|
d1d875 |
- XGetInputFocus (display->xdisplay, &focus, &ret_to);
|
|
|
d1d875 |
-
|
|
|
d1d875 |
- /* Force a new FocusIn (does this work?) */
|
|
|
d1d875 |
-
|
|
|
d1d875 |
- /* Use the same timestamp that was passed to meta_screen_new(),
|
|
|
d1d875 |
- * as it is the most recent timestamp.
|
|
|
d1d875 |
- */
|
|
|
d1d875 |
- if (focus == None || focus == PointerRoot)
|
|
|
d1d875 |
- /* Just focus the no_focus_window on the first screen */
|
|
|
d1d875 |
- meta_display_focus_the_no_focus_window (display,
|
|
|
d1d875 |
- display->screen,
|
|
|
d1d875 |
- timestamp);
|
|
|
d1d875 |
- else
|
|
|
d1d875 |
- {
|
|
|
d1d875 |
- MetaWindow * window;
|
|
|
d1d875 |
- window = meta_display_lookup_x_window (display, focus);
|
|
|
d1d875 |
- if (window)
|
|
|
d1d875 |
- meta_display_set_input_focus_window (display, window, FALSE, timestamp);
|
|
|
d1d875 |
- else
|
|
|
d1d875 |
- /* Just focus the no_focus_window on the first screen */
|
|
|
d1d875 |
- meta_display_focus_the_no_focus_window (display,
|
|
|
d1d875 |
- display->screen,
|
|
|
d1d875 |
- timestamp);
|
|
|
d1d875 |
- }
|
|
|
d1d875 |
-
|
|
|
d1d875 |
- meta_error_trap_pop (display);
|
|
|
d1d875 |
- }
|
|
|
d1d875 |
+
|
|
|
d1d875 |
+ if (old_active_xwindow != None)
|
|
|
d1d875 |
+ {
|
|
|
d1d875 |
+ MetaWindow *old_active_window = meta_display_lookup_x_window (display, old_active_xwindow);
|
|
|
d1d875 |
+ if (old_active_window)
|
|
|
d1d875 |
+ meta_window_focus (old_active_window, timestamp);
|
|
|
d1d875 |
+ else
|
|
|
d1d875 |
+ meta_display_focus_the_no_focus_window (display, display->screen, timestamp);
|
|
|
d1d875 |
+ }
|
|
|
d1d875 |
+ else
|
|
|
d1d875 |
+ meta_display_focus_the_no_focus_window (display, display->screen, timestamp);
|
|
|
d1d875 |
|
|
|
d1d875 |
meta_idle_monitor_init_dbus ();
|
|
|
d1d875 |
|
|
|
d1d875 |
@@ -2047,6 +2026,9 @@ meta_display_update_active_window_hint (
|
|
|
d1d875 |
{
|
|
|
d1d875 |
gulong data[1];
|
|
|
d1d875 |
|
|
|
d1d875 |
+ if (display->closing)
|
|
|
d1d875 |
+ return; /* Leave old value for a replacement */
|
|
|
d1d875 |
+
|
|
|
d1d875 |
if (display->focus_window)
|
|
|
d1d875 |
data[0] = display->focus_window->xwindow;
|
|
|
d1d875 |
else
|