Fix infinite loop
This commit is contained in:
parent
f380b5e037
commit
1c506c5e9a
@ -1,4 +1,4 @@
|
|||||||
From 6b1fa184af2a847d8b3d74a09bb65af6803d4e6d Mon Sep 17 00:00:00 2001
|
From db59d653751018f9b79c2a38a996fc7f0692d6b5 Mon Sep 17 00:00:00 2001
|
||||||
From: Ray Strode <rstrode@redhat.com>
|
From: Ray Strode <rstrode@redhat.com>
|
||||||
Date: Thu, 15 Apr 2021 13:28:00 -0400
|
Date: Thu, 15 Apr 2021 13:28:00 -0400
|
||||||
Subject: [PATCH 1/4] compositor: Add signal for reporting X server events
|
Subject: [PATCH 1/4] compositor: Add signal for reporting X server events
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
From 840bac654aef7aa0e241be8ac0052f5a5c67e4d5 Mon Sep 17 00:00:00 2001
|
From 83e38979f48829d4498b2df6ea62aafa34c1975b Mon Sep 17 00:00:00 2001
|
||||||
From: Ray Strode <rstrode@redhat.com>
|
From: Ray Strode <rstrode@redhat.com>
|
||||||
Date: Thu, 15 Apr 2021 14:39:55 -0400
|
Date: Thu, 15 Apr 2021 14:39:55 -0400
|
||||||
Subject: [PATCH 2/4] input-sources-manager: Fix overzealous rename mistake
|
Subject: [PATCH 2/4] input-sources-manager: Fix overzealous rename mistake
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
From b321b57e2908fddcde9da31e0d71af54c3e2cd98 Mon Sep 17 00:00:00 2001
|
From 60e52b132e9957452004c85a0999b37a2e46ff55 Mon Sep 17 00:00:00 2001
|
||||||
From: Ray Strode <rstrode@redhat.com>
|
From: Ray Strode <rstrode@redhat.com>
|
||||||
Date: Thu, 15 Apr 2021 14:41:41 -0400
|
Date: Thu, 15 Apr 2021 14:41:41 -0400
|
||||||
Subject: [PATCH 3/4] input-sources-manager: Add function to load input sources
|
Subject: [PATCH 3/4] input-sources-manager: Add function to load input sources
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
From 69d0eb2a62114d72a08cb580ba86d52ef698336a Mon Sep 17 00:00:00 2001
|
From 75e759aa88e75d55b956bd531509306f50e6fcc2 Mon Sep 17 00:00:00 2001
|
||||||
From: Ray Strode <rstrode@redhat.com>
|
From: Ray Strode <rstrode@redhat.com>
|
||||||
Date: Thu, 15 Apr 2021 14:43:17 -0400
|
Date: Thu, 15 Apr 2021 14:43:17 -0400
|
||||||
Subject: [PATCH 4/4] wip! Better support libxklavier
|
Subject: [PATCH 4/4] wip! Better support libxklavier
|
||||||
@ -12,10 +12,10 @@ stays in sync with X server state.
|
|||||||
compositor/kiosk-input-source-group.c | 17 +
|
compositor/kiosk-input-source-group.c | 17 +
|
||||||
compositor/kiosk-input-source-group.h | 5 +-
|
compositor/kiosk-input-source-group.h | 5 +-
|
||||||
compositor/kiosk-input-sources-manager.c | 142 ++++++
|
compositor/kiosk-input-sources-manager.c | 142 ++++++
|
||||||
compositor/kiosk-x-keyboard-manager.c | 546 +++++++++++++++++++++++
|
compositor/kiosk-x-keyboard-manager.c | 578 +++++++++++++++++++++++
|
||||||
compositor/kiosk-x-keyboard-manager.h | 22 +
|
compositor/kiosk-x-keyboard-manager.h | 22 +
|
||||||
meson.build | 1 +
|
meson.build | 1 +
|
||||||
6 files changed, 732 insertions(+), 1 deletion(-)
|
6 files changed, 764 insertions(+), 1 deletion(-)
|
||||||
create mode 100644 compositor/kiosk-x-keyboard-manager.c
|
create mode 100644 compositor/kiosk-x-keyboard-manager.c
|
||||||
create mode 100644 compositor/kiosk-x-keyboard-manager.h
|
create mode 100644 compositor/kiosk-x-keyboard-manager.h
|
||||||
|
|
||||||
@ -566,10 +566,10 @@ index 4b4ef62..c6c8c91 100644
|
|||||||
}
|
}
|
||||||
diff --git a/compositor/kiosk-x-keyboard-manager.c b/compositor/kiosk-x-keyboard-manager.c
|
diff --git a/compositor/kiosk-x-keyboard-manager.c b/compositor/kiosk-x-keyboard-manager.c
|
||||||
new file mode 100644
|
new file mode 100644
|
||||||
index 0000000..94b8f0b
|
index 0000000..23c3de3
|
||||||
--- /dev/null
|
--- /dev/null
|
||||||
+++ b/compositor/kiosk-x-keyboard-manager.c
|
+++ b/compositor/kiosk-x-keyboard-manager.c
|
||||||
@@ -0,0 +1,546 @@
|
@@ -0,0 +1,578 @@
|
||||||
+#include "config.h"
|
+#include "config.h"
|
||||||
+#include "kiosk-x-keyboard-manager.h"
|
+#include "kiosk-x-keyboard-manager.h"
|
||||||
+
|
+
|
||||||
@ -615,6 +615,7 @@ index 0000000..94b8f0b
|
|||||||
+
|
+
|
||||||
+ /* flags */
|
+ /* flags */
|
||||||
+ guint32 watching_x_server_root_window : 1;
|
+ guint32 watching_x_server_root_window : 1;
|
||||||
|
+ guint32 disallow_layout_selection: 1;
|
||||||
+};
|
+};
|
||||||
+
|
+
|
||||||
+enum
|
+enum
|
||||||
@ -774,6 +775,18 @@ index 0000000..94b8f0b
|
|||||||
+}
|
+}
|
||||||
+
|
+
|
||||||
+static void
|
+static void
|
||||||
|
+kiosk_x_keyboard_manager_disallow_layout_selection (KioskXKeyboardManager *self)
|
||||||
|
+{
|
||||||
|
+ self->disallow_layout_selection = FALSE;
|
||||||
|
+}
|
||||||
|
+
|
||||||
|
+static void
|
||||||
|
+kiosk_x_keyboard_manager_allow_layout_selection (KioskXKeyboardManager *self)
|
||||||
|
+{
|
||||||
|
+ self->disallow_layout_selection = TRUE;
|
||||||
|
+}
|
||||||
|
+
|
||||||
|
+static void
|
||||||
+kiosk_x_keyboard_manager_set_layout_index (KioskXKeyboardManager *self,
|
+kiosk_x_keyboard_manager_set_layout_index (KioskXKeyboardManager *self,
|
||||||
+ size_t layout_index)
|
+ size_t layout_index)
|
||||||
+{
|
+{
|
||||||
@ -807,8 +820,10 @@ index 0000000..94b8f0b
|
|||||||
+ meta_x11_error_trap_pop (self->x11_display);
|
+ meta_x11_error_trap_pop (self->x11_display);
|
||||||
+
|
+
|
||||||
+ if (status != Success) {
|
+ if (status != Success) {
|
||||||
|
+ g_debug ("KioskXKeyboardManager: Could not read current layout index");
|
||||||
+ return;
|
+ return;
|
||||||
+ }
|
+ }
|
||||||
|
+ g_debug ("KioskXKeyboardManager: Current layout index: %u", xkb_state.locked_group);
|
||||||
+
|
+
|
||||||
+ kiosk_x_keyboard_manager_set_layout_index (self, xkb_state.locked_group);
|
+ kiosk_x_keyboard_manager_set_layout_index (self, xkb_state.locked_group);
|
||||||
+}
|
+}
|
||||||
@ -888,11 +903,14 @@ index 0000000..94b8f0b
|
|||||||
+ break;
|
+ break;
|
||||||
+ case LAYOUTS:
|
+ case LAYOUTS:
|
||||||
+ layouts_string = g_steal_pointer (&value);
|
+ layouts_string = g_steal_pointer (&value);
|
||||||
|
+ g_debug ("KioskXKeyboardManager: Read layouts '%s'", layouts_string);
|
||||||
+ break;
|
+ break;
|
||||||
+ case VARIANTS:
|
+ case VARIANTS:
|
||||||
+ variants_string = g_steal_pointer (&value);
|
+ variants_string = g_steal_pointer (&value);
|
||||||
|
+ g_debug ("KioskXKeyboardManager: Read variants '%s'", variants_string);
|
||||||
+ break;
|
+ break;
|
||||||
+ case OPTIONS:
|
+ case OPTIONS:
|
||||||
|
+ g_debug ("KioskXKeyboardManager: Read options '%s'", options);
|
||||||
+ options = g_steal_pointer (&value);
|
+ options = g_steal_pointer (&value);
|
||||||
+ break;
|
+ break;
|
||||||
+ }
|
+ }
|
||||||
@ -907,12 +925,14 @@ index 0000000..94b8f0b
|
|||||||
+ qualified_layouts = qualify_layouts_with_variants (self, (const char * const *)layouts, (const char * const *)variants);
|
+ qualified_layouts = qualify_layouts_with_variants (self, (const char * const *)layouts, (const char * const *)variants);
|
||||||
+
|
+
|
||||||
+ if (qualified_layouts == NULL) {
|
+ if (qualified_layouts == NULL) {
|
||||||
|
+ g_debug ("KioskXKeyboardManager: Unable to qualify layouts with variants");
|
||||||
+ return FALSE;
|
+ return FALSE;
|
||||||
+ }
|
+ }
|
||||||
+
|
+
|
||||||
+ number_of_layouts = g_strv_length (qualified_layouts);
|
+ number_of_layouts = g_strv_length (qualified_layouts);
|
||||||
+
|
+
|
||||||
+ if (number_of_layouts == 0) {
|
+ if (number_of_layouts == 0) {
|
||||||
|
+ g_debug ("KioskXKeyboardManager: No layouts found");
|
||||||
+ return FALSE;
|
+ return FALSE;
|
||||||
+ }
|
+ }
|
||||||
+
|
+
|
||||||
@ -925,6 +945,8 @@ index 0000000..94b8f0b
|
|||||||
+ kiosk_x_keyboard_manager_read_current_layout_index (self);
|
+ kiosk_x_keyboard_manager_read_current_layout_index (self);
|
||||||
+ g_object_thaw_notify (G_OBJECT (self));
|
+ g_object_thaw_notify (G_OBJECT (self));
|
||||||
+
|
+
|
||||||
|
+ kiosk_x_keyboard_manager_allow_layout_selection (self);
|
||||||
|
+
|
||||||
+ return TRUE;
|
+ return TRUE;
|
||||||
+}
|
+}
|
||||||
+
|
+
|
||||||
@ -969,7 +991,12 @@ index 0000000..94b8f0b
|
|||||||
+ return;
|
+ return;
|
||||||
+ }
|
+ }
|
||||||
+
|
+
|
||||||
+ g_debug ("KioskXKeyboardManager: XKB rules_names data changed in X server");
|
+ g_debug ("KioskXKeyboardManager: XKB rules names data changed in X server");
|
||||||
|
+
|
||||||
|
+ /* We block layout index changes until we have a chance to figure out what the new layouts are
|
||||||
|
+ */
|
||||||
|
+ kiosk_x_keyboard_manager_diallow_layout_selection (self);
|
||||||
|
+
|
||||||
+ kiosk_gobject_utils_queue_defer_callback (G_OBJECT (self),
|
+ kiosk_gobject_utils_queue_defer_callback (G_OBJECT (self),
|
||||||
+ "[kiosk-input-sources-manager] on_x_server_xkb_rules_names_data_changed",
|
+ "[kiosk-input-sources-manager] on_x_server_xkb_rules_names_data_changed",
|
||||||
+ self->cancellable,
|
+ self->cancellable,
|
||||||
@ -981,12 +1008,17 @@ index 0000000..94b8f0b
|
|||||||
+kiosk_x_keyboard_manager_handle_xkb_event (KioskXKeyboardManager *self,
|
+kiosk_x_keyboard_manager_handle_xkb_event (KioskXKeyboardManager *self,
|
||||||
+ XkbEvent *x_server_event)
|
+ XkbEvent *x_server_event)
|
||||||
+{
|
+{
|
||||||
+ g_debug ("KioskXKeyboardManager: Got XKB event");
|
|
||||||
+ size_t layout_index;
|
+ size_t layout_index;
|
||||||
+
|
+
|
||||||
+ layout_index = XkbStateGroup (&x_server_event->state);
|
+ layout_index = XkbStateGroup (&x_server_event->state);
|
||||||
+ switch (x_server_event->any.xkb_type) {
|
+ switch (x_server_event->any.xkb_type) {
|
||||||
+ case XkbStateNotify:
|
+ case XkbStateNotify:
|
||||||
|
+ if (!(x_server_event->state.changed & XkbGroupStateMask)) {
|
||||||
|
+ return;
|
||||||
|
+ }
|
||||||
|
+ if (self->disallow_layout_selection) {
|
||||||
|
+ return;
|
||||||
|
+ }
|
||||||
+ g_debug ("KioskXKeyboardManager: Approving keyboard group change to group %lu", layout_index);
|
+ g_debug ("KioskXKeyboardManager: Approving keyboard group change to group %lu", layout_index);
|
||||||
+ meta_backend_lock_layout_group (self->backend, layout_index);
|
+ meta_backend_lock_layout_group (self->backend, layout_index);
|
||||||
+ kiosk_x_keyboard_manager_set_layout_index (self, layout_index);
|
+ kiosk_x_keyboard_manager_set_layout_index (self, layout_index);
|
||||||
|
@ -12,7 +12,7 @@
|
|||||||
|
|
||||||
Name: gnome-kiosk
|
Name: gnome-kiosk
|
||||||
Version: 40~alpha
|
Version: 40~alpha
|
||||||
Release: 3%{?dist}
|
Release: 4%{?dist}
|
||||||
Summary: Window management and application launching for GNOME
|
Summary: Window management and application launching for GNOME
|
||||||
|
|
||||||
License: GPLv2+
|
License: GPLv2+
|
||||||
@ -88,6 +88,9 @@ desktop-file-validate %{buildroot}%{_datadir}/applications/org.gnome.Kiosk.Searc
|
|||||||
%{_datadir}/wayland-sessions/org.gnome.Kiosk.SearchApp.Session.desktop
|
%{_datadir}/wayland-sessions/org.gnome.Kiosk.SearchApp.Session.desktop
|
||||||
|
|
||||||
%changelog
|
%changelog
|
||||||
|
* Tue Apr 20 2021 Ray Strode <rstrode@redhat.com> - 40~alpha-4
|
||||||
|
- Fix infinite loop
|
||||||
|
|
||||||
* Mon Apr 19 2021 Ray Strode <rstrode@redhat.com> - 40~alpha-3
|
* Mon Apr 19 2021 Ray Strode <rstrode@redhat.com> - 40~alpha-3
|
||||||
- Fix crash
|
- Fix crash
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user