diff --git a/src/backends/x11/meta-backend-x11.c b/src/backends/x11/meta-backend-x11.c index 056a16ad71c5011274c8107ef643497ea7c10f04..969b64dddb0b5f89c4eea6a3205fa2e71fb37442 100644 --- a/src/backends/x11/meta-backend-x11.c +++ b/src/backends/x11/meta-backend-x11.c @@ -821,6 +821,7 @@ meta_backend_x11_initable_init (GInitable *initable, GCancellable *cancellable, GError **error) { + MetaContext *context = meta_backend_get_context (META_BACKEND (initable)); MetaBackendX11 *x11 = META_BACKEND_X11 (initable); MetaBackendX11Private *priv = meta_backend_x11_get_instance_private (x11); Display *xdisplay; @@ -842,6 +843,8 @@ meta_backend_x11_initable_init (GInitable *initable, return FALSE; } + XSynchronize (xdisplay, meta_context_is_x11_sync (context)); + priv->xdisplay = xdisplay; priv->xscreen = DefaultScreenOfDisplay (xdisplay); priv->xcb = XGetXCBConnection (priv->xdisplay); diff --git a/src/backends/x11/meta-clutter-backend-x11.c b/src/backends/x11/meta-clutter-backend-x11.c index 9ee2be164af444ec8655b39e99608a219ac90be0..345c1424dca06a50c769124ca4db833e256e1084 100644 --- a/src/backends/x11/meta-clutter-backend-x11.c +++ b/src/backends/x11/meta-clutter-backend-x11.c @@ -78,9 +78,6 @@ static const gchar *atom_names[] = { /* various flags corresponding to pre init setup calls */ static gboolean clutter_enable_stereo = FALSE; -/* options */ -static gboolean clutter_synchronise = FALSE; - /* X error trap */ static int TrappedErrorCode = 0; static int (* old_error_handler) (Display *, XErrorEvent *); @@ -129,9 +126,6 @@ meta_clutter_backend_x11_finish_init (ClutterBackend *clutter_backend, cogl_xlib_filter, clutter_backend); - if (clutter_synchronise) - XSynchronize (clutter_backend_x11->xdisplay, True); - XInternAtoms (clutter_backend_x11->xdisplay, (char **) atom_names, N_ATOM_NAMES, False, atoms); diff --git a/src/core/display.c b/src/core/display.c index 2145fde0db2baeb61bec84eb9b0e8dec7770f471..ee1c372bf8721fcd61f5a53d777c8ebbbb679af0 100644 --- a/src/core/display.c +++ b/src/core/display.c @@ -2117,47 +2117,6 @@ meta_display_queue_retheme_all_windows (MetaDisplay *display) g_slist_free (windows); } -/* - * Stores whether syncing is currently enabled. - */ -static gboolean is_syncing = FALSE; - -/** - * meta_is_syncing: - * - * Returns whether X synchronisation is currently enabled. - * - * FIXME: This is *only* called by meta_display_open(), but by that time - * we have already turned syncing on or off on startup, and we don't - * have any way to do so while Mutter is running, so it's rather - * pointless. - * - * Returns: %TRUE if we must wait for events whenever we send X requests; - * %FALSE otherwise. - */ -gboolean -meta_is_syncing (void) -{ - return is_syncing; -} - -/** - * meta_set_syncing: - * @setting: whether to turn syncing on or off - * - * A handy way to turn on synchronisation on or off for every display. - */ -void -meta_set_syncing (gboolean setting) -{ - if (setting != is_syncing) - { - is_syncing = setting; - if (meta_get_display ()) - XSynchronize (meta_get_display ()->x11_display->xdisplay, is_syncing); - } -} - /** * meta_display_ping_timeout: * @data: All the information about this ping. It is a #MetaPingData diff --git a/src/core/meta-context-main.c b/src/core/meta-context-main.c index d2445e369a5e372b1d0d845a10951c9ecb3d1116..5baa7c9f5c19bda722f94693bc0ccd2e5b568366 100644 --- a/src/core/meta-context-main.c +++ b/src/core/meta-context-main.c @@ -391,7 +391,6 @@ meta_context_main_setup (MetaContext *context, return FALSE; meta_context_set_unsafe_mode (context, context_main->options.unsafe_mode); - meta_set_syncing (context_main->options.x11.sync || g_getenv ("MUTTER_SYNC")); #ifdef HAVE_NATIVE_BACKEND if (!add_persistent_virtual_monitors (context_main, error)) @@ -503,6 +502,16 @@ meta_context_main_notify_ready (MetaContext *context) g_clear_pointer (&context_main->options.sm.save_file, g_free); } +#ifdef HAVE_X11 +static gboolean +meta_context_main_is_x11_sync (MetaContext *context) +{ + MetaContextMain *context_main = META_CONTEXT_MAIN (context); + + return context_main->options.x11.sync || g_getenv ("MUTTER_SYNC"); +} +#endif + #ifdef HAVE_NATIVE_BACKEND static gboolean add_virtual_monitor_cb (const char *option_name, @@ -706,6 +715,9 @@ meta_context_main_class_init (MetaContextMainClass *klass) context_class->setup = meta_context_main_setup; context_class->create_backend = meta_context_main_create_backend; context_class->notify_ready = meta_context_main_notify_ready; +#ifdef HAVE_X11 + context_class->is_x11_sync = meta_context_main_is_x11_sync; +#endif } static void diff --git a/src/core/meta-context-private.h b/src/core/meta-context-private.h index 87f5261f54111a411238d17493a209abbf7437c3..c8b9066a7f061b6eee26534df70526e56b34da3c 100644 --- a/src/core/meta-context-private.h +++ b/src/core/meta-context-private.h @@ -49,6 +49,10 @@ struct _MetaContextClass GError **error); void (* notify_ready) (MetaContext *context); + +#ifdef HAVE_X11 + gboolean (* is_x11_sync) (MetaContext *context); +#endif }; const char * meta_context_get_name (MetaContext *context); @@ -64,4 +68,9 @@ MetaWaylandCompositor * meta_context_get_wayland_compositor (MetaContext *contex MetaX11DisplayPolicy meta_context_get_x11_display_policy (MetaContext *context); +#ifdef HAVE_X11 +META_EXPORT_TEST +gboolean meta_context_is_x11_sync (MetaContext *context); +#endif + #endif /* META_CONTEXT_PRIVATE_H */ diff --git a/src/core/meta-context.c b/src/core/meta-context.c index 4363e14e11a23747f626ef8f42f920befc584461..d50956b9c19e01a8e6a9ff2fb660e385b8c7b5b8 100644 --- a/src/core/meta-context.c +++ b/src/core/meta-context.c @@ -245,6 +245,14 @@ meta_context_get_x11_display_policy (MetaContext *context) return META_CONTEXT_GET_CLASS (context)->get_x11_display_policy (context); } +#ifdef HAVE_X11 +gboolean +meta_context_is_x11_sync (MetaContext *context) +{ + return META_CONTEXT_GET_CLASS (context)->is_x11_sync (context); +} +#endif + static gboolean meta_context_real_configure (MetaContext *context, int *argc, diff --git a/src/core/util-private.h b/src/core/util-private.h index ff9d7ce426eaf6635ac68233c3694dd0154aa339..fa9f2be4be3b8b62faa8706b66eac0a91e133f43 100644 --- a/src/core/util-private.h +++ b/src/core/util-private.h @@ -37,9 +37,6 @@ void meta_set_verbose (gboolean setting); void meta_set_debugging (gboolean setting); -META_EXPORT_TEST -void meta_set_syncing (gboolean setting); - void meta_set_replace_current_wm (gboolean setting); void meta_set_is_wayland_compositor (gboolean setting); diff --git a/src/meta/util.h b/src/meta/util.h index 79de380d820eb4aed8d6a2424a33613bd35d8fbb..6c54f557917a33320b2794c5d5f2a2b4f1b43a9d 100644 --- a/src/meta/util.h +++ b/src/meta/util.h @@ -32,9 +32,6 @@ META_EXPORT gboolean meta_is_verbose (void); -META_EXPORT -gboolean meta_is_syncing (void); - META_EXPORT gboolean meta_is_wayland_compositor (void); diff --git a/src/tests/meta-context-test.c b/src/tests/meta-context-test.c index c07a66b7b52c26035dd6688dcd9c0fef541103b8..5a4e48876b52048848d48cbc5432f820e13a2c49 100644 --- a/src/tests/meta-context-test.c +++ b/src/tests/meta-context-test.c @@ -136,8 +136,6 @@ meta_context_test_setup (MetaContext *context, settings, META_EXPERIMENTAL_FEATURE_SCALE_MONITOR_FRAMEBUFFER); - meta_set_syncing (!!g_getenv ("MUTTER_SYNC")); - return TRUE; } @@ -203,6 +201,14 @@ meta_context_test_notify_ready (MetaContext *context) { } +#ifdef HAVE_X11 +static gboolean +meta_context_test_is_x11_sync (MetaContext *context) +{ + return !!g_getenv ("MUTTER_SYNC"); +} +#endif + static gboolean run_tests_idle (gpointer user_data) { @@ -329,6 +335,9 @@ meta_context_test_class_init (MetaContextTestClass *klass) context_class->setup = meta_context_test_setup; context_class->create_backend = meta_context_test_create_backend; context_class->notify_ready = meta_context_test_notify_ready; +#ifdef HAVE_X11 + context_class->is_x11_sync = meta_context_test_is_x11_sync; +#endif signals[BEFORE_TESTS] = g_signal_new ("before-tests", diff --git a/src/x11/meta-x11-display.c b/src/x11/meta-x11-display.c index 9a2f02e9e45ca53069af7621f58f2ffdc261823d..bb5f4bf50ba1661cb07719e7cb6f4d9ea5ed7233 100644 --- a/src/x11/meta-x11-display.c +++ b/src/x11/meta-x11-display.c @@ -1136,6 +1136,7 @@ on_window_visibility_updated (MetaDisplay *display, MetaX11Display * meta_x11_display_new (MetaDisplay *display, GError **error) { + MetaContext *context = meta_display_get_context (display); MetaX11Display *x11_display; Display *xdisplay; Screen *xscreen; @@ -1168,10 +1169,11 @@ meta_x11_display_new (MetaDisplay *display, GError **error) gdk_display = g_steal_pointer (&prepared_gdk_display); xdisplay = GDK_DISPLAY_XDISPLAY (gdk_display); + XSynchronize (xdisplay, meta_context_is_x11_sync (context)); + #ifdef HAVE_WAYLAND if (meta_is_wayland_compositor ()) { - MetaContext *context = meta_display_get_context (display); MetaWaylandCompositor *compositor = meta_context_get_wayland_compositor (context); @@ -1179,9 +1181,6 @@ meta_x11_display_new (MetaDisplay *display, GError **error) } #endif - if (meta_is_syncing ()) - XSynchronize (xdisplay, True); - replace_current_wm = meta_context_is_replacing (meta_backend_get_context (backend));