summaryrefslogtreecommitdiff
path: root/src/x11/meta-x11-display.c
diff options
context:
space:
mode:
authorCarlos Garnacho <carlosg@gnome.org>2018-12-30 12:58:31 +0100
committerJonas Ã…dahl <jadahl@gmail.com>2019-05-24 15:30:30 +0000
commit0200f4fcd9bc5921f15a8547cce6c5ba85f4cea9 (patch)
tree49bd4fb501331caa067fefea8feca84b5e0533da /src/x11/meta-x11-display.c
parent439afb3f19adff751d8a643dc57e07046190483a (diff)
downloadmutter-0200f4fcd9bc5921f15a8547cce6c5ba85f4cea9.tar.gz
x11: Move focus sentinel to MetaX11Display
This focus sentinel is a mechanism to avoid some X11-specific race conditions in focus-follows-pointer, using X11 mechanisms. Move it to MetaX11Display altogether. https://gitlab.gnome.org/GNOME/mutter/merge_requests/420
Diffstat (limited to 'src/x11/meta-x11-display.c')
-rw-r--r--src/x11/meta-x11-display.c31
1 files changed, 31 insertions, 0 deletions
diff --git a/src/x11/meta-x11-display.c b/src/x11/meta-x11-display.c
index af8ae7a8d..2aece19a8 100644
--- a/src/x11/meta-x11-display.c
+++ b/src/x11/meta-x11-display.c
@@ -2177,3 +2177,34 @@ prefs_changed_callback (MetaPreference pref,
set_workspace_names (x11_display);
}
}
+
+void
+meta_x11_display_increment_focus_sentinel (MetaX11Display *x11_display)
+{
+ unsigned long data[1];
+
+ data[0] = meta_display_get_current_time (x11_display->display);
+
+ XChangeProperty (x11_display->xdisplay,
+ x11_display->xroot,
+ x11_display->atom__MUTTER_SENTINEL,
+ XA_CARDINAL,
+ 32, PropModeReplace, (guchar*) data, 1);
+
+ x11_display->sentinel_counter += 1;
+}
+
+void
+meta_x11_display_decrement_focus_sentinel (MetaX11Display *x11_display)
+{
+ x11_display->sentinel_counter -= 1;
+
+ if (x11_display->sentinel_counter < 0)
+ x11_display->sentinel_counter = 0;
+}
+
+gboolean
+meta_x11_display_focus_sentinel_clear (MetaX11Display *x11_display)
+{
+ return (x11_display->sentinel_counter == 0);
+}