summaryrefslogtreecommitdiff
path: root/0001-compositor-Ignore-some-of-the-builtin-keybindings.patch
diff options
context:
space:
mode:
Diffstat (limited to '0001-compositor-Ignore-some-of-the-builtin-keybindings.patch')
-rw-r--r--0001-compositor-Ignore-some-of-the-builtin-keybindings.patch239
1 files changed, 239 insertions, 0 deletions
diff --git a/0001-compositor-Ignore-some-of-the-builtin-keybindings.patch b/0001-compositor-Ignore-some-of-the-builtin-keybindings.patch
new file mode 100644
index 0000000..02e3482
--- /dev/null
+++ b/0001-compositor-Ignore-some-of-the-builtin-keybindings.patch
@@ -0,0 +1,239 @@
+From 28a560fdc1a8571d0e1d34da5cb57f43d2fe1a54 Mon Sep 17 00:00:00 2001
+From: Ray Strode <rstrode@redhat.com>
+Date: Wed, 11 Aug 2021 14:47:05 -0400
+Subject: [PATCH 1/6] compositor: Ignore some of the builtin keybindings
+
+Mutter on wayland currently has a bug where it crashes if the run dialog
+keybinding is pressed. No one notices the bug for gnome-shell, since
+gnome-shell overrides mutters run dialog keybinding.
+
+This commit makes GNOME Kiosk also override the keybinding to avoid the
+crash. At the same time it neuters a few other builtin keybindings that
+aren't so useful to GNOME Kiosk.
+---
+ compositor/kiosk-compositor.c | 90 +++++++++++++++++++++++++++++++++++
+ 1 file changed, 90 insertions(+)
+
+diff --git a/compositor/kiosk-compositor.c b/compositor/kiosk-compositor.c
+index 43329c7..2db58ed 100644
+--- a/compositor/kiosk-compositor.c
++++ b/compositor/kiosk-compositor.c
+@@ -1,42 +1,43 @@
+ #include "config.h"
+ #include "kiosk-compositor.h"
+
+ #include <stdlib.h>
+ #include <string.h>
+
+ #include <glib-object.h>
+
+ #include <clutter/clutter.h>
+ #include <clutter/x11/clutter-x11.h>
+ #include <meta/common.h>
+ #include <meta/display.h>
++#include <meta/keybindings.h>
+ #include <meta/main.h>
+ #include <meta/util.h>
+ #include <meta/meta-window-group.h>
+
+ #include <systemd/sd-daemon.h>
+
+ #include "kiosk-backgrounds.h"
+ #include "kiosk-input-sources-manager.h"
+ #include "kiosk-service.h"
+
+ #include "org.gnome.DisplayManager.Manager.h"
+
+ struct _KioskCompositor
+ {
+ MetaPlugin parent;
+
+ /* weak references */
+ MetaDisplay *display;
+ ClutterBackend *backend;
+ ClutterActor *stage;
+
+ /* strong references */
+ GCancellable *cancellable;
+ KioskBackgrounds *backgrounds;
+ KioskInputSourcesManager *input_sources_manager;
+ KioskService *service;
+ };
+
+ enum {
+ X_SERVER_EVENT,
+@@ -103,82 +104,171 @@ register_with_display_manager (KioskCompositor *self)
+ g_variant_builder_init (&builder, G_VARIANT_TYPE ("a{ss}"));
+
+ gdm_manager_call_register_display_sync (display_manager,
+ g_variant_builder_end (&builder),
+ self->cancellable,
+ &error);
+
+ if (error != NULL) {
+ g_debug ("KioskCompositor: Could not register with display manager: %s",
+ error->message);
+ return;
+ }
+ }
+
+ static void
+ register_with_systemd (KioskCompositor *self)
+ {
+ sd_notify (TRUE, "READY=1");
+ }
+
+ static void
+ register_session (KioskCompositor *self)
+ {
+ meta_register_with_session ();
+
+ register_with_display_manager (self);
+
+ register_with_systemd (self);
+ }
+
++static void
++on_builtin_keybinding_triggered (MetaDisplay *display,
++ MetaWindow *window,
++ ClutterKeyEvent *event,
++ MetaKeyBinding *binding,
++ KioskCompositor *self)
++{
++ g_debug ("KioskCompositor: Ignoring '%s' request",
++ meta_key_binding_get_name (binding));
++}
++
++static void
++neuter_builtin_keybindings (KioskCompositor *self)
++{
++ const char *builtin_keybindings[] = {
++ "switch-to-workspace-1",
++ "switch-to-workspace-2",
++ "switch-to-workspace-3",
++ "switch-to-workspace-4",
++ "switch-to-workspace-5",
++ "switch-to-workspace-6",
++ "switch-to-workspace-7",
++ "switch-to-workspace-8",
++ "switch-to-workspace-9",
++ "switch-to-workspace-10",
++ "switch-to-workspace-11",
++ "switch-to-workspace-12",
++ "switch-to-workspace-left",
++ "switch-to-workspace-right",
++ "switch-to-workspace-up",
++ "switch-to-workspace-down",
++ "switch-to-workspace-last",
++ "panel-main-menu",
++ "panel-run-dialog",
++ "set-spew-mark",
++ "switch-monitor",
++ "rotate-monitor",
++ "switch-to-session-1",
++ "switch-to-session-2",
++ "switch-to-session-3",
++ "switch-to-session-4",
++ "switch-to-session-5",
++ "switch-to-session-6",
++ "switch-to-session-7",
++ "switch-to-session-8",
++ "switch-to-session-9",
++ "switch-to-session-10",
++ "switch-to-session-11",
++ "switch-to-session-12",
++ "restore-shortcuts",
++ "activate-window-menu",
++ "toggle-above",
++ "toggle-shaded",
++ "minimize",
++ "toggle-on-all-workspaces",
++ "move-to-workspace-1",
++ "move-to-workspace-2",
++ "move-to-workspace-3",
++ "move-to-workspace-4",
++ "move-to-workspace-5",
++ "move-to-workspace-6",
++ "move-to-workspace-7",
++ "move-to-workspace-8",
++ "move-to-workspace-9",
++ "move-to-workspace-10",
++ "move-to-workspace-11",
++ "move-to-workspace-12",
++ "move-to-workspace-last",
++ "move-to-workspace-left",
++ "move-to-workspace-right",
++ "move-to-workspace-up",
++ "move-to-workspace-down",
++ NULL
++ };
++ size_t i;
++
++ g_debug ("KioskCompositor: Neutering builtin keybindings");
++
++ for (i = 0; builtin_keybindings[i] != NULL; i++) {
++ meta_keybindings_set_custom_handler (builtin_keybindings[i],
++ (MetaKeyHandlerFunc)
++ on_builtin_keybinding_triggered,
++ self,
++ NULL);
++ }
++}
++
+ static void
+ kiosk_compositor_start (MetaPlugin *plugin)
+ {
+ KioskCompositor *self = KIOSK_COMPOSITOR (plugin);
+ g_autoptr (GError) error = NULL;
+
+ g_set_weak_pointer (&self->display, meta_plugin_get_display (META_PLUGIN (self)));
+ g_set_weak_pointer (&self->backend, clutter_get_default_backend ());
+ g_set_weak_pointer (&self->stage, meta_get_stage_for_display (self->display));
+
+ clutter_actor_show (self->stage);
+
+ self->cancellable = g_cancellable_new ();
+
+ self->service = kiosk_service_new (self);
+ kiosk_service_start (self->service, &error);
+
+ if (error != NULL) {
+ g_debug ("KioskCompositor: Could not start D-Bus service: %s", error->message);
+ g_clear_error (&error);
+ }
+
++ neuter_builtin_keybindings (self);
++
+ self->backgrounds = kiosk_backgrounds_new (self);
+ self->input_sources_manager = kiosk_input_sources_manager_new (self);
+
+ register_session (self);
+ }
+
+ static void
+ kiosk_compositor_minimize (MetaPlugin *plugin,
+ MetaWindowActor *actor)
+ {
+ meta_plugin_minimize_completed (plugin, actor);
+ }
+
+ static void
+ kiosk_compositor_unminimize (MetaPlugin *plugin,
+ MetaWindowActor *actor)
+ {
+ meta_plugin_unminimize_completed (plugin, actor);
+ }
+
+ static void
+ kiosk_compositor_size_changed (MetaPlugin *plugin,
+ MetaWindowActor *actor)
+ {
+ g_assert (META_PLUGIN_CLASS (kiosk_compositor_parent_class)->size_changed == NULL);
+ }
+
+ static void
+ kiosk_compositor_size_change (MetaPlugin *plugin,
+ MetaWindowActor *actor,
+--
+2.31.1
+