diff --git a/src/core/display.c b/src/core/display.c index 9455331a0..edb122d36 100644 --- a/src/core/display.c +++ b/src/core/display.c @@ -918,8 +918,6 @@ meta_display_open (void) enable_compositor (the_display); - meta_display_grab (the_display); - /* Now manage all existing windows */ tmp = the_display->screens; while (tmp != NULL) @@ -971,8 +969,6 @@ meta_display_open (void) meta_idle_monitor_init_dbus (); - meta_display_ungrab (the_display); - /* Done opening new display */ the_display->display_opening = FALSE; diff --git a/src/core/screen.c b/src/core/screen.c index efd6f4101..1143f554c 100644 --- a/src/core/screen.c +++ b/src/core/screen.c @@ -887,8 +887,6 @@ meta_screen_manage_all_windows (MetaScreen *screen) Window *children; int n_children, i; - meta_display_grab (screen->display); - if (screen->guard_window == None) screen->guard_window = create_guard_window (screen->display->xdisplay, screen); @@ -907,8 +905,6 @@ meta_screen_manage_all_windows (MetaScreen *screen) g_free (children); meta_stack_thaw (screen->stack); - - meta_display_ungrab (screen->display); } /** diff --git a/src/core/window.c b/src/core/window.c index 05f7dcfa2..a2f04aa27 100644 --- a/src/core/window.c +++ b/src/core/window.c @@ -792,11 +792,14 @@ meta_window_new (MetaDisplay *display, return NULL; } - /* Grab server */ - meta_display_grab (display); meta_error_trap_push (display); /* Push a trap over all of window * creation, to reduce XSync() calls */ + /* + * This function executes without any server grabs held. This means that + * the window could have already gone away, or could go away at any point, + * so we must be careful with X error handling. + */ if (!XGetWindowAttributes (display->xdisplay, xwindow, &attrs)) { @@ -1437,7 +1440,6 @@ meta_window_new (MetaDisplay *display, unminimize_window_and_all_transient_parents (window); meta_error_trap_pop (display); /* pop the XSync()-reducing trap */ - meta_display_ungrab (display); window->constructing = FALSE; @@ -1453,7 +1455,6 @@ meta_window_new (MetaDisplay *display, error: meta_error_trap_pop (display); - meta_display_ungrab (display); return NULL; }