mirror of
https://github.com/brl/mutter.git
synced 2024-11-23 08:30:42 -05:00
x11: Let X11 connection owners call XSynchronize() themselves
Only make the context carry the boolean state, but move the two libX11 calls into their corresponding connection handler objects. Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/2444>
This commit is contained in:
parent
9a68fb19e4
commit
fdde7e0f37
@ -821,6 +821,7 @@ meta_backend_x11_initable_init (GInitable *initable,
|
|||||||
GCancellable *cancellable,
|
GCancellable *cancellable,
|
||||||
GError **error)
|
GError **error)
|
||||||
{
|
{
|
||||||
|
MetaContext *context = meta_backend_get_context (META_BACKEND (initable));
|
||||||
MetaBackendX11 *x11 = META_BACKEND_X11 (initable);
|
MetaBackendX11 *x11 = META_BACKEND_X11 (initable);
|
||||||
MetaBackendX11Private *priv = meta_backend_x11_get_instance_private (x11);
|
MetaBackendX11Private *priv = meta_backend_x11_get_instance_private (x11);
|
||||||
Display *xdisplay;
|
Display *xdisplay;
|
||||||
@ -842,6 +843,8 @@ meta_backend_x11_initable_init (GInitable *initable,
|
|||||||
return FALSE;
|
return FALSE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
XSynchronize (xdisplay, meta_context_is_x11_sync (context));
|
||||||
|
|
||||||
priv->xdisplay = xdisplay;
|
priv->xdisplay = xdisplay;
|
||||||
priv->xscreen = DefaultScreenOfDisplay (xdisplay);
|
priv->xscreen = DefaultScreenOfDisplay (xdisplay);
|
||||||
priv->xcb = XGetXCBConnection (priv->xdisplay);
|
priv->xcb = XGetXCBConnection (priv->xdisplay);
|
||||||
|
@ -2117,47 +2117,6 @@ meta_display_queue_retheme_all_windows (MetaDisplay *display)
|
|||||||
g_slist_free (windows);
|
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:
|
* meta_display_ping_timeout:
|
||||||
* @data: All the information about this ping. It is a #MetaPingData
|
* @data: All the information about this ping. It is a #MetaPingData
|
||||||
|
@ -391,7 +391,6 @@ meta_context_main_setup (MetaContext *context,
|
|||||||
return FALSE;
|
return FALSE;
|
||||||
|
|
||||||
meta_context_set_unsafe_mode (context, context_main->options.unsafe_mode);
|
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
|
#ifdef HAVE_NATIVE_BACKEND
|
||||||
if (!add_persistent_virtual_monitors (context_main, error))
|
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);
|
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
|
#ifdef HAVE_NATIVE_BACKEND
|
||||||
static gboolean
|
static gboolean
|
||||||
add_virtual_monitor_cb (const char *option_name,
|
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->setup = meta_context_main_setup;
|
||||||
context_class->create_backend = meta_context_main_create_backend;
|
context_class->create_backend = meta_context_main_create_backend;
|
||||||
context_class->notify_ready = meta_context_main_notify_ready;
|
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
|
static void
|
||||||
|
@ -49,6 +49,10 @@ struct _MetaContextClass
|
|||||||
GError **error);
|
GError **error);
|
||||||
|
|
||||||
void (* notify_ready) (MetaContext *context);
|
void (* notify_ready) (MetaContext *context);
|
||||||
|
|
||||||
|
#ifdef HAVE_X11
|
||||||
|
gboolean (* is_x11_sync) (MetaContext *context);
|
||||||
|
#endif
|
||||||
};
|
};
|
||||||
|
|
||||||
const char * meta_context_get_name (MetaContext *context);
|
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);
|
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 */
|
#endif /* META_CONTEXT_PRIVATE_H */
|
||||||
|
@ -245,6 +245,14 @@ meta_context_get_x11_display_policy (MetaContext *context)
|
|||||||
return META_CONTEXT_GET_CLASS (context)->get_x11_display_policy (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
|
static gboolean
|
||||||
meta_context_real_configure (MetaContext *context,
|
meta_context_real_configure (MetaContext *context,
|
||||||
int *argc,
|
int *argc,
|
||||||
|
@ -37,9 +37,6 @@
|
|||||||
void meta_set_verbose (gboolean setting);
|
void meta_set_verbose (gboolean setting);
|
||||||
void meta_set_debugging (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_replace_current_wm (gboolean setting);
|
||||||
void meta_set_is_wayland_compositor (gboolean setting);
|
void meta_set_is_wayland_compositor (gboolean setting);
|
||||||
|
|
||||||
|
@ -32,9 +32,6 @@
|
|||||||
META_EXPORT
|
META_EXPORT
|
||||||
gboolean meta_is_verbose (void);
|
gboolean meta_is_verbose (void);
|
||||||
|
|
||||||
META_EXPORT
|
|
||||||
gboolean meta_is_syncing (void);
|
|
||||||
|
|
||||||
META_EXPORT
|
META_EXPORT
|
||||||
gboolean meta_is_wayland_compositor (void);
|
gboolean meta_is_wayland_compositor (void);
|
||||||
|
|
||||||
|
@ -136,8 +136,6 @@ meta_context_test_setup (MetaContext *context,
|
|||||||
settings,
|
settings,
|
||||||
META_EXPERIMENTAL_FEATURE_SCALE_MONITOR_FRAMEBUFFER);
|
META_EXPERIMENTAL_FEATURE_SCALE_MONITOR_FRAMEBUFFER);
|
||||||
|
|
||||||
meta_set_syncing (!!g_getenv ("MUTTER_SYNC"));
|
|
||||||
|
|
||||||
return TRUE;
|
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
|
static gboolean
|
||||||
run_tests_idle (gpointer user_data)
|
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->setup = meta_context_test_setup;
|
||||||
context_class->create_backend = meta_context_test_create_backend;
|
context_class->create_backend = meta_context_test_create_backend;
|
||||||
context_class->notify_ready = meta_context_test_notify_ready;
|
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] =
|
signals[BEFORE_TESTS] =
|
||||||
g_signal_new ("before-tests",
|
g_signal_new ("before-tests",
|
||||||
|
@ -1136,6 +1136,7 @@ on_window_visibility_updated (MetaDisplay *display,
|
|||||||
MetaX11Display *
|
MetaX11Display *
|
||||||
meta_x11_display_new (MetaDisplay *display, GError **error)
|
meta_x11_display_new (MetaDisplay *display, GError **error)
|
||||||
{
|
{
|
||||||
|
MetaContext *context = meta_display_get_context (display);
|
||||||
MetaX11Display *x11_display;
|
MetaX11Display *x11_display;
|
||||||
Display *xdisplay;
|
Display *xdisplay;
|
||||||
Screen *xscreen;
|
Screen *xscreen;
|
||||||
@ -1168,10 +1169,11 @@ meta_x11_display_new (MetaDisplay *display, GError **error)
|
|||||||
gdk_display = g_steal_pointer (&prepared_gdk_display);
|
gdk_display = g_steal_pointer (&prepared_gdk_display);
|
||||||
xdisplay = GDK_DISPLAY_XDISPLAY (gdk_display);
|
xdisplay = GDK_DISPLAY_XDISPLAY (gdk_display);
|
||||||
|
|
||||||
|
XSynchronize (xdisplay, meta_context_is_x11_sync (context));
|
||||||
|
|
||||||
#ifdef HAVE_WAYLAND
|
#ifdef HAVE_WAYLAND
|
||||||
if (meta_is_wayland_compositor ())
|
if (meta_is_wayland_compositor ())
|
||||||
{
|
{
|
||||||
MetaContext *context = meta_display_get_context (display);
|
|
||||||
MetaWaylandCompositor *compositor =
|
MetaWaylandCompositor *compositor =
|
||||||
meta_context_get_wayland_compositor (context);
|
meta_context_get_wayland_compositor (context);
|
||||||
|
|
||||||
@ -1179,9 +1181,6 @@ meta_x11_display_new (MetaDisplay *display, GError **error)
|
|||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
if (meta_is_syncing ())
|
|
||||||
XSynchronize (xdisplay, True);
|
|
||||||
|
|
||||||
replace_current_wm =
|
replace_current_wm =
|
||||||
meta_context_is_replacing (meta_backend_get_context (backend));
|
meta_context_is_replacing (meta_backend_get_context (backend));
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user