parent
5dcafc6da2
commit
599435da06
1
.gitignore
vendored
1
.gitignore
vendored
@ -1 +1,2 @@
|
|||||||
/gnome-kiosk-40.alpha.tar.xz
|
/gnome-kiosk-40.alpha.tar.xz
|
||||||
|
/gnome-kiosk-40.0.tar.xz
|
||||||
|
@ -1,32 +0,0 @@
|
|||||||
From 342cc4adec33571e6e0d786a297f0034161dc6ee Mon Sep 17 00:00:00 2001
|
|
||||||
From: Matthias Clasen <mclasen@redhat.com>
|
|
||||||
Date: Tue, 27 Apr 2021 16:07:13 -0400
|
|
||||||
Subject: [PATCH] Make the desktop file valid
|
|
||||||
|
|
||||||
desktop-file-validate was complaining about the
|
|
||||||
lack of a main category in the Categories value.
|
|
||||||
So add one.
|
|
||||||
---
|
|
||||||
compositor/data/org.gnome.Kiosk.desktop.in.in | 2 +-
|
|
||||||
1 file changed, 1 insertion(+), 1 deletion(-)
|
|
||||||
|
|
||||||
diff --git a/compositor/data/org.gnome.Kiosk.desktop.in.in b/compositor/data/org.gnome.Kiosk.desktop.in.in
|
|
||||||
index bf6ec39..bb603c8 100644
|
|
||||||
--- a/compositor/data/org.gnome.Kiosk.desktop.in.in
|
|
||||||
+++ b/compositor/data/org.gnome.Kiosk.desktop.in.in
|
|
||||||
@@ -1,12 +1,12 @@
|
|
||||||
[Desktop Entry]
|
|
||||||
Type=Application
|
|
||||||
Name=GNOME Kiosk
|
|
||||||
Comment=Compositor for Kiosk and Single Application deployments
|
|
||||||
Exec=@bindir@/gnome-kiosk
|
|
||||||
-Categories=GNOME;GTK;Core;
|
|
||||||
+Categories=GNOME;GTK;Core;System;
|
|
||||||
OnlyShowIn=GNOME;
|
|
||||||
NoDisplay=true
|
|
||||||
X-GNOME-Autostart-Phase=DisplayServer
|
|
||||||
X-GNOME-Provides=panel;windowmanager;
|
|
||||||
X-GNOME-Autostart-Notify=true
|
|
||||||
X-GNOME-AutoRestart=false
|
|
||||||
--
|
|
||||||
2.31.1
|
|
@ -1,228 +0,0 @@
|
|||||||
From 7ea1746494f0b2e381fe8f08249f7751cd8ae578 Mon Sep 17 00:00:00 2001
|
|
||||||
From: Ray Strode <rstrode@redhat.com>
|
|
||||||
Date: Thu, 15 Apr 2021 13:00:16 -0400
|
|
||||||
Subject: [PATCH] compositor: Be less aggressive about full screening windows
|
|
||||||
|
|
||||||
It's common for kiosk type applications to have dialogs and utility
|
|
||||||
windows that shouldn't get fullscreen.
|
|
||||||
|
|
||||||
This commit tries to be a little less aggressive above fullscreening
|
|
||||||
windows. Now we assume only the first window is "the application" and
|
|
||||||
subsequent windows are auxillary and should be layered on top.
|
|
||||||
---
|
|
||||||
compositor/kiosk-compositor.c | 78 +++++++++++++++++++++++++++++++----
|
|
||||||
1 file changed, 70 insertions(+), 8 deletions(-)
|
|
||||||
|
|
||||||
diff --git a/compositor/kiosk-compositor.c b/compositor/kiosk-compositor.c
|
|
||||||
index b3cd10f..dad7776 100644
|
|
||||||
--- a/compositor/kiosk-compositor.c
|
|
||||||
+++ b/compositor/kiosk-compositor.c
|
|
||||||
@@ -1,43 +1,45 @@
|
|
||||||
#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/main.h>
|
|
||||||
#include <meta/util.h>
|
|
||||||
+#include <meta/meta-window-group.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;
|
|
||||||
};
|
|
||||||
|
|
||||||
G_DEFINE_TYPE (KioskCompositor, kiosk_compositor, META_TYPE_PLUGIN)
|
|
||||||
|
|
||||||
static void kiosk_compositor_dispose (GObject *object);
|
|
||||||
|
|
||||||
static void
|
|
||||||
kiosk_compositor_dispose (GObject *object)
|
|
||||||
{
|
|
||||||
@@ -143,91 +145,151 @@ 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,
|
|
||||||
MetaSizeChange which_change,
|
|
||||||
MetaRectangle *old_frame_rect,
|
|
||||||
MetaRectangle *old_buffer_rect)
|
|
||||||
{
|
|
||||||
g_assert (META_PLUGIN_CLASS (kiosk_compositor_parent_class)->size_change == NULL);
|
|
||||||
}
|
|
||||||
|
|
||||||
+static gboolean
|
|
||||||
+kiosk_compositor_wants_window_fullscreen (KioskCompositor *self,
|
|
||||||
+ MetaWindow *window)
|
|
||||||
+{
|
|
||||||
+ MetaWindowType window_type;
|
|
||||||
+ g_autoptr (GList) windows = NULL;
|
|
||||||
+ GList *node;
|
|
||||||
+
|
|
||||||
+ if (!meta_window_allows_resize (window)) {
|
|
||||||
+ g_debug ("KioskCompositor: Window does not allow resizes");
|
|
||||||
+ return FALSE;
|
|
||||||
+ }
|
|
||||||
+
|
|
||||||
+ if (meta_window_is_override_redirect (window)) {
|
|
||||||
+ g_debug ("KioskCompositor: Window is override redirect");
|
|
||||||
+ return FALSE;
|
|
||||||
+ }
|
|
||||||
+
|
|
||||||
+ window_type = meta_window_get_window_type (window);
|
|
||||||
+
|
|
||||||
+ if (window_type != META_WINDOW_NORMAL) {
|
|
||||||
+ g_debug ("KioskCompositor: Window is not normal");
|
|
||||||
+ return FALSE;
|
|
||||||
+ }
|
|
||||||
+
|
|
||||||
+ windows = meta_display_get_tab_list (self->display, META_TAB_LIST_NORMAL_ALL, NULL);
|
|
||||||
+
|
|
||||||
+ for (node = windows; node != NULL; node = node->next) {
|
|
||||||
+ MetaWindow *existing_window = node->data;
|
|
||||||
+
|
|
||||||
+ if (meta_window_is_fullscreen (existing_window)) {
|
|
||||||
+ return FALSE;
|
|
||||||
+ }
|
|
||||||
+ }
|
|
||||||
+
|
|
||||||
+ return TRUE;
|
|
||||||
+}
|
|
||||||
+
|
|
||||||
+static gboolean
|
|
||||||
+kiosk_compositor_wants_window_above (KioskCompositor *self,
|
|
||||||
+ MetaWindow *window)
|
|
||||||
+{
|
|
||||||
+ if (meta_window_is_screen_sized (window)) {
|
|
||||||
+ return FALSE;
|
|
||||||
+ }
|
|
||||||
+
|
|
||||||
+ if (meta_window_is_monitor_sized (window)) {
|
|
||||||
+ return FALSE;
|
|
||||||
+ }
|
|
||||||
+
|
|
||||||
+ return TRUE;
|
|
||||||
+}
|
|
||||||
+
|
|
||||||
static void
|
|
||||||
on_faded_in (KioskCompositor *self,
|
|
||||||
ClutterTransition *transition)
|
|
||||||
{
|
|
||||||
MetaWindowActor *actor = g_object_get_data (G_OBJECT (transition), "actor");
|
|
||||||
- MetaWindow *window;
|
|
||||||
-
|
|
||||||
- window = meta_window_actor_get_meta_window (actor);
|
|
||||||
-
|
|
||||||
- if (!meta_window_allows_resize (window) && !meta_window_is_override_redirect (window)) {
|
|
||||||
- meta_window_make_above (window);
|
|
||||||
- }
|
|
||||||
|
|
||||||
meta_plugin_map_completed (META_PLUGIN (self), actor);
|
|
||||||
}
|
|
||||||
|
|
||||||
static void
|
|
||||||
kiosk_compositor_map (MetaPlugin *plugin,
|
|
||||||
MetaWindowActor *actor)
|
|
||||||
{
|
|
||||||
KioskCompositor *self = KIOSK_COMPOSITOR (plugin);
|
|
||||||
MetaWindow *window;
|
|
||||||
ClutterTransition *fade_in_transition;
|
|
||||||
int easing_duration;
|
|
||||||
|
|
||||||
window = meta_window_actor_get_meta_window (actor);
|
|
||||||
|
|
||||||
- if (meta_window_allows_resize (window)) {
|
|
||||||
+ if (kiosk_compositor_wants_window_fullscreen (self, window)) {
|
|
||||||
+ g_debug ("KioskCompositor: Mapping window that does need to be fullscreened");
|
|
||||||
meta_window_make_fullscreen (window);
|
|
||||||
easing_duration = 3000;
|
|
||||||
} else {
|
|
||||||
+ ClutterActor *window_group;
|
|
||||||
+
|
|
||||||
+ g_debug ("KioskCompositor: Mapping window that does not need to be fullscreened");
|
|
||||||
+ window_group = meta_get_top_window_group_for_display (self->display);
|
|
||||||
+
|
|
||||||
+ if (kiosk_compositor_wants_window_above (self, window)) {
|
|
||||||
+ g_object_ref (G_OBJECT (actor));
|
|
||||||
+ clutter_actor_remove_child (clutter_actor_get_parent (CLUTTER_ACTOR (actor)), CLUTTER_ACTOR (actor));
|
|
||||||
+ clutter_actor_add_child (window_group, CLUTTER_ACTOR (actor));
|
|
||||||
+ clutter_actor_set_child_below_sibling (window_group, CLUTTER_ACTOR (actor), NULL);
|
|
||||||
+ g_object_unref (G_OBJECT (actor));
|
|
||||||
+ }
|
|
||||||
+
|
|
||||||
easing_duration = 500;
|
|
||||||
}
|
|
||||||
|
|
||||||
clutter_actor_show (self->stage);
|
|
||||||
clutter_actor_show (CLUTTER_ACTOR (actor));
|
|
||||||
|
|
||||||
clutter_actor_set_opacity (CLUTTER_ACTOR (actor), 0);
|
|
||||||
|
|
||||||
clutter_actor_save_easing_state (CLUTTER_ACTOR (actor));
|
|
||||||
clutter_actor_set_easing_duration (CLUTTER_ACTOR (actor), easing_duration);
|
|
||||||
clutter_actor_set_easing_mode (CLUTTER_ACTOR (actor), CLUTTER_EASE_IN_OUT_QUINT);
|
|
||||||
clutter_actor_set_opacity (CLUTTER_ACTOR (actor), 255);
|
|
||||||
fade_in_transition = clutter_actor_get_transition (CLUTTER_ACTOR (actor), "opacity");
|
|
||||||
clutter_actor_restore_easing_state (CLUTTER_ACTOR (actor));
|
|
||||||
|
|
||||||
g_object_set_data (G_OBJECT (fade_in_transition), "actor", actor);
|
|
||||||
|
|
||||||
g_signal_connect_object (G_OBJECT (fade_in_transition),
|
|
||||||
"completed",
|
|
||||||
G_CALLBACK (on_faded_in),
|
|
||||||
self,
|
|
||||||
G_CONNECT_SWAPPED);
|
|
||||||
}
|
|
||||||
|
|
||||||
static void
|
|
||||||
kiosk_compositor_destroy (MetaPlugin *plugin,
|
|
||||||
MetaWindowActor *actor)
|
|
||||||
{
|
|
||||||
KioskCompositor *self = KIOSK_COMPOSITOR (plugin);
|
|
||||||
|
|
||||||
--
|
|
||||||
2.31.1
|
|
||||||
|
|
@ -1,82 +0,0 @@
|
|||||||
From ed8dbeb00ef64faa047652ac7fc9bf029348a6df Mon Sep 17 00:00:00 2001
|
|
||||||
From: Ray Strode <rstrode@redhat.com>
|
|
||||||
Date: Thu, 6 May 2021 14:17:26 -0400
|
|
||||||
Subject: [PATCH] compositor: Put the on top windows actually on top
|
|
||||||
|
|
||||||
A typo in the code left me putting new windows under old ones.
|
|
||||||
|
|
||||||
This commit fixes that.
|
|
||||||
---
|
|
||||||
compositor/kiosk-compositor.c | 2 +-
|
|
||||||
1 file changed, 1 insertion(+), 1 deletion(-)
|
|
||||||
|
|
||||||
diff --git a/compositor/kiosk-compositor.c b/compositor/kiosk-compositor.c
|
|
||||||
index 14f5de3..6753a87 100644
|
|
||||||
--- a/compositor/kiosk-compositor.c
|
|
||||||
+++ b/compositor/kiosk-compositor.c
|
|
||||||
@@ -239,61 +239,61 @@ on_faded_in (KioskCompositor *self,
|
|
||||||
MetaWindowActor *actor = g_object_get_data (G_OBJECT (transition), "actor");
|
|
||||||
|
|
||||||
meta_plugin_map_completed (META_PLUGIN (self), actor);
|
|
||||||
}
|
|
||||||
|
|
||||||
static void
|
|
||||||
kiosk_compositor_map (MetaPlugin *plugin,
|
|
||||||
MetaWindowActor *actor)
|
|
||||||
{
|
|
||||||
KioskCompositor *self = KIOSK_COMPOSITOR (plugin);
|
|
||||||
MetaWindow *window;
|
|
||||||
ClutterTransition *fade_in_transition;
|
|
||||||
int easing_duration;
|
|
||||||
|
|
||||||
window = meta_window_actor_get_meta_window (actor);
|
|
||||||
|
|
||||||
if (kiosk_compositor_wants_window_fullscreen (self, window)) {
|
|
||||||
g_debug ("KioskCompositor: Mapping window that does need to be fullscreened");
|
|
||||||
meta_window_make_fullscreen (window);
|
|
||||||
easing_duration = 3000;
|
|
||||||
} else {
|
|
||||||
ClutterActor *window_group;
|
|
||||||
|
|
||||||
g_debug ("KioskCompositor: Mapping window that does not need to be fullscreened");
|
|
||||||
window_group = meta_get_top_window_group_for_display (self->display);
|
|
||||||
|
|
||||||
if (kiosk_compositor_wants_window_above (self, window)) {
|
|
||||||
g_object_ref (G_OBJECT (actor));
|
|
||||||
clutter_actor_remove_child (clutter_actor_get_parent (CLUTTER_ACTOR (actor)), CLUTTER_ACTOR (actor));
|
|
||||||
clutter_actor_add_child (window_group, CLUTTER_ACTOR (actor));
|
|
||||||
- clutter_actor_set_child_below_sibling (window_group, CLUTTER_ACTOR (actor), NULL);
|
|
||||||
+ clutter_actor_set_child_above_sibling (window_group, CLUTTER_ACTOR (actor), NULL);
|
|
||||||
g_object_unref (G_OBJECT (actor));
|
|
||||||
}
|
|
||||||
|
|
||||||
easing_duration = 500;
|
|
||||||
}
|
|
||||||
|
|
||||||
clutter_actor_show (self->stage);
|
|
||||||
clutter_actor_show (CLUTTER_ACTOR (actor));
|
|
||||||
|
|
||||||
clutter_actor_set_opacity (CLUTTER_ACTOR (actor), 0);
|
|
||||||
|
|
||||||
clutter_actor_save_easing_state (CLUTTER_ACTOR (actor));
|
|
||||||
clutter_actor_set_easing_duration (CLUTTER_ACTOR (actor), easing_duration);
|
|
||||||
clutter_actor_set_easing_mode (CLUTTER_ACTOR (actor), CLUTTER_EASE_IN_OUT_QUINT);
|
|
||||||
clutter_actor_set_opacity (CLUTTER_ACTOR (actor), 255);
|
|
||||||
fade_in_transition = clutter_actor_get_transition (CLUTTER_ACTOR (actor), "opacity");
|
|
||||||
clutter_actor_restore_easing_state (CLUTTER_ACTOR (actor));
|
|
||||||
|
|
||||||
g_object_set_data (G_OBJECT (fade_in_transition), "actor", actor);
|
|
||||||
|
|
||||||
g_signal_connect_object (G_OBJECT (fade_in_transition),
|
|
||||||
"completed",
|
|
||||||
G_CALLBACK (on_faded_in),
|
|
||||||
self,
|
|
||||||
G_CONNECT_SWAPPED);
|
|
||||||
}
|
|
||||||
|
|
||||||
static void
|
|
||||||
kiosk_compositor_destroy (MetaPlugin *plugin,
|
|
||||||
MetaWindowActor *actor)
|
|
||||||
--
|
|
||||||
2.31.1
|
|
||||||
|
|
@ -1,116 +0,0 @@
|
|||||||
From ab8482bab7981321f0f2fbd401907ac34028bb1a Mon Sep 17 00:00:00 2001
|
|
||||||
From: Ray Strode <rstrode@redhat.com>
|
|
||||||
Date: Tue, 20 Apr 2021 09:27:01 -0400
|
|
||||||
Subject: [PATCH 1/4] gobject-utils: Log when executing deferred tasks
|
|
||||||
|
|
||||||
At the moment, the code defers execution until "later" in
|
|
||||||
various parts of the code to ensure a flood of related events
|
|
||||||
doesn't lead to a flood of duplicated work.
|
|
||||||
|
|
||||||
But, its on the called code to log at the moment.
|
|
||||||
|
|
||||||
This commit adds logging to the generic part of the code to
|
|
||||||
for clarity.
|
|
||||||
---
|
|
||||||
compositor/kiosk-gobject-utils.c | 12 ++++++++----
|
|
||||||
1 file changed, 8 insertions(+), 4 deletions(-)
|
|
||||||
|
|
||||||
diff --git a/compositor/kiosk-gobject-utils.c b/compositor/kiosk-gobject-utils.c
|
|
||||||
index a0dfcd8..c38db7e 100644
|
|
||||||
--- a/compositor/kiosk-gobject-utils.c
|
|
||||||
+++ b/compositor/kiosk-gobject-utils.c
|
|
||||||
@@ -1,83 +1,87 @@
|
|
||||||
#include "config.h"
|
|
||||||
#include "kiosk-gobject-utils.h"
|
|
||||||
|
|
||||||
#define COALESCE_INTERVAL 250 /* milliseconds */
|
|
||||||
|
|
||||||
static void
|
|
||||||
on_task_wait_complete (GObject *self,
|
|
||||||
GTask *task)
|
|
||||||
{
|
|
||||||
KioskObjectCallback callback;
|
|
||||||
gpointer user_data;
|
|
||||||
gboolean completed;
|
|
||||||
g_autofree char *data_key = NULL;
|
|
||||||
|
|
||||||
+ g_debug ("KioskGObjectUtils: Executing deferred task '%s'", g_task_get_name (task));
|
|
||||||
+
|
|
||||||
callback = g_object_get_data (G_OBJECT (task), "callback");
|
|
||||||
user_data = g_object_get_data (G_OBJECT (task), "user-data");
|
|
||||||
|
|
||||||
completed = g_task_propagate_boolean (task, NULL);
|
|
||||||
|
|
||||||
if (completed) {
|
|
||||||
callback (self, user_data);
|
|
||||||
}
|
|
||||||
|
|
||||||
data_key = g_strdup_printf ("kiosk-gobject-utils-%p-%p-task",
|
|
||||||
callback, user_data);
|
|
||||||
|
|
||||||
g_object_set_data (G_OBJECT (self), data_key, NULL);
|
|
||||||
}
|
|
||||||
|
|
||||||
static gboolean
|
|
||||||
on_coalesce_timeout (GTask *task)
|
|
||||||
{
|
|
||||||
if (!g_task_return_error_if_cancelled (task)) {
|
|
||||||
g_task_return_boolean (task, TRUE);
|
|
||||||
}
|
|
||||||
|
|
||||||
return G_SOURCE_REMOVE;
|
|
||||||
}
|
|
||||||
|
|
||||||
void
|
|
||||||
kiosk_gobject_utils_queue_defer_callback (GObject *self,
|
|
||||||
const char *name,
|
|
||||||
GCancellable *cancellable,
|
|
||||||
KioskObjectCallback callback,
|
|
||||||
gpointer user_data)
|
|
||||||
{
|
|
||||||
g_autofree char *data_key = NULL;
|
|
||||||
g_autoptr (GSource) timeout_source = NULL;
|
|
||||||
GTask *task;
|
|
||||||
|
|
||||||
g_return_if_fail (G_IS_OBJECT (self));
|
|
||||||
g_return_if_fail (callback != NULL);
|
|
||||||
|
|
||||||
data_key = g_strdup_printf ("kiosk-gobject-utils-%p-%p-task",
|
|
||||||
callback, user_data);
|
|
||||||
|
|
||||||
task = g_object_get_data (G_OBJECT (self), data_key);
|
|
||||||
|
|
||||||
if (task != NULL) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
timeout_source = g_timeout_source_new (COALESCE_INTERVAL);
|
|
||||||
|
|
||||||
- if (name != NULL) {
|
|
||||||
- g_source_set_name (timeout_source, name);
|
|
||||||
- }
|
|
||||||
-
|
|
||||||
task = g_task_new (self,
|
|
||||||
cancellable,
|
|
||||||
(GAsyncReadyCallback) on_task_wait_complete,
|
|
||||||
NULL);
|
|
||||||
+
|
|
||||||
+ if (name != NULL) {
|
|
||||||
+ g_task_set_name (task, name);
|
|
||||||
+ g_debug ("KioskGObjectUtils: Deferring task '%s' for %dms", name, COALESCE_INTERVAL);
|
|
||||||
+ }
|
|
||||||
+
|
|
||||||
g_task_attach_source (task, timeout_source, G_SOURCE_FUNC (on_coalesce_timeout));
|
|
||||||
|
|
||||||
g_object_set_data (G_OBJECT (task), "callback", callback);
|
|
||||||
g_object_set_data (G_OBJECT (task), "user-data", user_data);
|
|
||||||
|
|
||||||
g_object_set_data_full (G_OBJECT (self),
|
|
||||||
data_key,
|
|
||||||
task,
|
|
||||||
(GDestroyNotify)
|
|
||||||
g_object_unref);
|
|
||||||
}
|
|
||||||
--
|
|
||||||
2.30.2
|
|
||||||
|
|
@ -1,109 +0,0 @@
|
|||||||
From 89b5facb7545c0423673c500343794a6c07fabfe Mon Sep 17 00:00:00 2001
|
|
||||||
From: Ray Strode <rstrode@redhat.com>
|
|
||||||
Date: Wed, 12 May 2021 15:19:26 -0400
|
|
||||||
Subject: [PATCH] input-sources-manager: Fail better if localed isn't available
|
|
||||||
|
|
||||||
At the moment we assumed the localed proxy will always return valid
|
|
||||||
strings. If localed exits, though, there's a small window where the
|
|
||||||
properties can return NULL.
|
|
||||||
|
|
||||||
This commit tries to handle that transient failure better.
|
|
||||||
---
|
|
||||||
compositor/kiosk-input-sources-manager.c | 7 +++++++
|
|
||||||
1 file changed, 7 insertions(+)
|
|
||||||
|
|
||||||
diff --git a/compositor/kiosk-input-sources-manager.c b/compositor/kiosk-input-sources-manager.c
|
|
||||||
index 7bb67b0..49973db 100644
|
|
||||||
--- a/compositor/kiosk-input-sources-manager.c
|
|
||||||
+++ b/compositor/kiosk-input-sources-manager.c
|
|
||||||
@@ -807,80 +807,87 @@ kiosk_input_sources_manager_add_layout (KioskInputSourcesManager *self,
|
|
||||||
g_debug ("KioskInputSourcesManager: Keyboard mapping full, starting another one");
|
|
||||||
|
|
||||||
input_source_group = kiosk_input_sources_manager_add_new_input_source_group (self, options);
|
|
||||||
|
|
||||||
kiosk_input_source_group_add_layout (input_source_group, xkb_layout, xkb_variant);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
void
|
|
||||||
kiosk_input_sources_manager_add_input_engine (KioskInputSourcesManager *self,
|
|
||||||
const char *engine_name,
|
|
||||||
const char *options)
|
|
||||||
{
|
|
||||||
KioskInputSourceGroup *input_source_group = NULL;
|
|
||||||
|
|
||||||
g_debug ("KioskInputSourcesManager: Adding input engine '%s'", engine_name);
|
|
||||||
|
|
||||||
input_source_group = kiosk_input_sources_manager_add_new_input_source_group (self, options);
|
|
||||||
|
|
||||||
kiosk_input_source_group_set_input_engine (input_source_group, engine_name);
|
|
||||||
kiosk_input_source_group_set_options (input_source_group, options);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
gboolean
|
|
||||||
kiosk_input_sources_manager_set_input_sources_from_system_configuration (KioskInputSourcesManager *self)
|
|
||||||
{
|
|
||||||
KioskInputSourceGroup *old_input_source_group;
|
|
||||||
g_autofree char *old_input_engine = NULL;
|
|
||||||
g_autofree char *old_selected_layout = NULL;
|
|
||||||
+ g_autofree char *localed_name_owner = NULL;
|
|
||||||
|
|
||||||
const char *layouts_string = NULL;
|
|
||||||
g_auto (GStrv) layouts = NULL;
|
|
||||||
size_t number_of_layouts = 0;
|
|
||||||
|
|
||||||
const char *variants_string = NULL;
|
|
||||||
g_auto (GStrv) variants = NULL;
|
|
||||||
size_t number_of_variants = 0;
|
|
||||||
|
|
||||||
const char *options = NULL;
|
|
||||||
size_t i, j;
|
|
||||||
|
|
||||||
gboolean input_source_group_active;
|
|
||||||
|
|
||||||
g_return_val_if_fail (KIOSK_IS_INPUT_SOURCES_MANAGER (self), FALSE);
|
|
||||||
|
|
||||||
if (self->locale_proxy == NULL) {
|
|
||||||
return FALSE;
|
|
||||||
}
|
|
||||||
|
|
||||||
+ localed_name_owner = g_dbus_proxy_get_name_owner (G_DBUS_PROXY (self->locale_proxy));
|
|
||||||
+
|
|
||||||
+ if (localed_name_owner == NULL) {
|
|
||||||
+ return FALSE;
|
|
||||||
+ }
|
|
||||||
+
|
|
||||||
g_debug ("KioskInputSourcesManager: Setting keymap from system configuration");
|
|
||||||
|
|
||||||
layouts_string = sd_locale1_get_x11_layout (self->locale_proxy);
|
|
||||||
g_debug ("KioskInputSourcesManager: System layout is '%s'", layouts_string);
|
|
||||||
|
|
||||||
layouts = g_strsplit (layouts_string, ",", -1);
|
|
||||||
number_of_layouts = g_strv_length (layouts);
|
|
||||||
|
|
||||||
options = sd_locale1_get_x11_options (self->locale_proxy);
|
|
||||||
g_debug ("KioskInputSourcesManager: System layout options are '%s'", options);
|
|
||||||
|
|
||||||
variants_string = sd_locale1_get_x11_variant (self->locale_proxy);
|
|
||||||
g_debug ("KioskInputSourcesManager: System layout variant is '%s'", variants_string);
|
|
||||||
variants = g_strsplit (variants_string, ",", -1);
|
|
||||||
number_of_variants = g_strv_length (variants);
|
|
||||||
|
|
||||||
if (number_of_layouts < number_of_variants) {
|
|
||||||
g_debug ("KioskInputSourcesManager: There is a layout variant mismatch");
|
|
||||||
return FALSE;
|
|
||||||
}
|
|
||||||
|
|
||||||
old_input_source_group = kiosk_input_sources_manager_get_selected_input_source_group (self);
|
|
||||||
|
|
||||||
if (old_input_source_group != NULL) {
|
|
||||||
old_input_engine = g_strdup (kiosk_input_source_group_get_input_engine (old_input_source_group));
|
|
||||||
old_selected_layout = kiosk_input_source_group_get_selected_layout (old_input_source_group);
|
|
||||||
}
|
|
||||||
|
|
||||||
kiosk_input_sources_manager_clear_input_sources (self);
|
|
||||||
|
|
||||||
--
|
|
||||||
2.31.1
|
|
||||||
|
|
@ -1,188 +0,0 @@
|
|||||||
From f553708a756682d625f51e7c0f3d2a31f39442bb Mon Sep 17 00:00:00 2001
|
|
||||||
From: Ray Strode <rstrode@redhat.com>
|
|
||||||
Date: Thu, 15 Apr 2021 14:39:55 -0400
|
|
||||||
Subject: [PATCH 2/4] input-sources-manager: Fix overzealous rename mistake
|
|
||||||
|
|
||||||
At some point during development something called
|
|
||||||
KioskInputSources got renamed to KioskInputSourceGroup.
|
|
||||||
|
|
||||||
Unfortunately, my sed-fu was weak and I renamed things it shouldn't.
|
|
||||||
|
|
||||||
This commit fixes the errors.
|
|
||||||
---
|
|
||||||
compositor/kiosk-input-sources-manager.c | 20 ++++++++++----------
|
|
||||||
1 file changed, 10 insertions(+), 10 deletions(-)
|
|
||||||
|
|
||||||
diff --git a/compositor/kiosk-input-sources-manager.c b/compositor/kiosk-input-sources-manager.c
|
|
||||||
index 58d7a4c..a1a4cfa 100644
|
|
||||||
--- a/compositor/kiosk-input-sources-manager.c
|
|
||||||
+++ b/compositor/kiosk-input-sources-manager.c
|
|
||||||
@@ -1,60 +1,60 @@
|
|
||||||
#include "config.h"
|
|
||||||
#include "kiosk-input-sources-manager.h"
|
|
||||||
|
|
||||||
#include <stdlib.h>
|
|
||||||
#include <string.h>
|
|
||||||
|
|
||||||
#include <xkbcommon/xkbcommon.h>
|
|
||||||
#include <meta/display.h>
|
|
||||||
#include <meta/keybindings.h>
|
|
||||||
#include <meta/util.h>
|
|
||||||
|
|
||||||
#include <meta/meta-backend.h>
|
|
||||||
#include <meta/meta-plugin.h>
|
|
||||||
|
|
||||||
#define GNOME_DESKTOP_USE_UNSTABLE_API
|
|
||||||
#include <libgnome-desktop/gnome-languages.h>
|
|
||||||
#include <libgnome-desktop/gnome-xkb-info.h>
|
|
||||||
|
|
||||||
#include "org.freedesktop.locale1.h"
|
|
||||||
#include "kiosk-compositor.h"
|
|
||||||
#include "kiosk-dbus-utils.h"
|
|
||||||
#include "kiosk-gobject-utils.h"
|
|
||||||
#include "kiosk-input-engine-manager.h"
|
|
||||||
#include "kiosk-input-source-group.h"
|
|
||||||
|
|
||||||
#define SD_LOCALE1_BUS_NAME "org.freedesktop.locale1"
|
|
||||||
#define SD_LOCALE1_OBJECT_PATH "/org/freedesktop/locale1"
|
|
||||||
|
|
||||||
-#define KIOSK_INPUT_SOURCE_GROUP_SCHEMA "org.gnome.desktop.input-sources"
|
|
||||||
-#define KIOSK_INPUT_SOURCE_GROUP_SETTING "sources"
|
|
||||||
+#define KIOSK_INPUT_SOURCES_SCHEMA "org.gnome.desktop.input-sources"
|
|
||||||
+#define KIOSK_INPUT_SOURCES_SETTING "sources"
|
|
||||||
#define KIOSK_INPUT_OPTIONS_SETTING "xkb-options"
|
|
||||||
|
|
||||||
#define KIOSK_INPUT_SOURCE_OBJECTS_PATH_PREFIX "/org/gnome/Kiosk/InputSources"
|
|
||||||
#define KIOSK_KEYBINDINGS_SCHEMA "org.gnome.desktop.wm.keybindings"
|
|
||||||
#define KIOSK_SWITCH_INPUT_SOURCES_KEYBINDING "switch-input-source"
|
|
||||||
#define KIOSK_SWITCH_INPUT_SOURCES_BACKWARD_KEYBINDING "switch-input-source-backward"
|
|
||||||
|
|
||||||
#define KIOSK_DBUS_INPUT_SOURCES_MANGER_INPUT_SOURCE_INTERFACE "org.gnome.Kiosk.InputSources.InputSource"
|
|
||||||
|
|
||||||
struct _KioskInputSourcesManager
|
|
||||||
{
|
|
||||||
GObject parent;
|
|
||||||
|
|
||||||
/* weak references */
|
|
||||||
KioskCompositor *compositor;
|
|
||||||
MetaDisplay *display;
|
|
||||||
|
|
||||||
KioskDBusInputSourcesManager *dbus_service;
|
|
||||||
GDBusObjectManagerServer *dbus_object_manager;
|
|
||||||
|
|
||||||
/* strong references */
|
|
||||||
GCancellable *cancellable;
|
|
||||||
KioskInputEngineManager *input_engine_manager;
|
|
||||||
SdLocale1 *locale_proxy;
|
|
||||||
GnomeXkbInfo *xkb_info;
|
|
||||||
GSettings *input_sources_settings;
|
|
||||||
GSettings *key_binding_settings;
|
|
||||||
GPtrArray *input_source_groups;
|
|
||||||
|
|
||||||
/* state */
|
|
||||||
@@ -913,94 +913,94 @@ kiosk_input_sources_manager_set_input_sources_from_system_configuration (KioskIn
|
|
||||||
|
|
||||||
return TRUE;
|
|
||||||
}
|
|
||||||
|
|
||||||
static void
|
|
||||||
on_session_input_configuration_changed (KioskInputSourcesManager *self)
|
|
||||||
{
|
|
||||||
g_debug ("KioskInputSourcesManager: Session input sources configuration changed");
|
|
||||||
|
|
||||||
if (self->overriding_configuration) {
|
|
||||||
g_debug ("KioskInputSourcesManager: Ignoring change, because keymap is overriden");
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
kiosk_input_sources_manager_set_input_sources_from_session_configuration (self);
|
|
||||||
}
|
|
||||||
|
|
||||||
static void
|
|
||||||
on_session_input_sources_setting_changed (KioskInputSourcesManager *self)
|
|
||||||
{
|
|
||||||
kiosk_gobject_utils_queue_defer_callback (G_OBJECT (self),
|
|
||||||
"[kiosk-input-sources-manager] on_session_input_configuration_changed",
|
|
||||||
self->cancellable,
|
|
||||||
KIOSK_OBJECT_CALLBACK (on_session_input_configuration_changed),
|
|
||||||
NULL);
|
|
||||||
}
|
|
||||||
|
|
||||||
gboolean
|
|
||||||
kiosk_input_sources_manager_set_input_sources_from_session_configuration (KioskInputSourcesManager *self)
|
|
||||||
{
|
|
||||||
- g_autoptr (GVariant) input_source_group = NULL;
|
|
||||||
+ g_autoptr (GVariant) input_sources = NULL;
|
|
||||||
g_auto (GStrv) options = NULL;
|
|
||||||
- gboolean input_source_group_active;
|
|
||||||
+ gboolean input_sources_active;
|
|
||||||
|
|
||||||
g_return_val_if_fail (KIOSK_IS_INPUT_SOURCES_MANAGER (self), FALSE);
|
|
||||||
|
|
||||||
g_debug ("KioskInputSourcesManager: Setting input sources from session configuration");
|
|
||||||
|
|
||||||
self->overriding_configuration = FALSE;
|
|
||||||
|
|
||||||
if (self->input_sources_settings == NULL) {
|
|
||||||
- self->input_sources_settings = g_settings_new (KIOSK_INPUT_SOURCE_GROUP_SCHEMA);
|
|
||||||
+ self->input_sources_settings = g_settings_new (KIOSK_INPUT_SOURCES_SCHEMA);
|
|
||||||
|
|
||||||
g_signal_connect_object (G_OBJECT (self->input_sources_settings),
|
|
||||||
- "changed::" KIOSK_INPUT_SOURCE_GROUP_SETTING,
|
|
||||||
+ "changed::" KIOSK_INPUT_SOURCES_SETTING,
|
|
||||||
G_CALLBACK (on_session_input_sources_setting_changed),
|
|
||||||
self,
|
|
||||||
G_CONNECT_SWAPPED);
|
|
||||||
g_signal_connect_object (G_OBJECT (self->input_sources_settings),
|
|
||||||
"changed::" KIOSK_INPUT_OPTIONS_SETTING,
|
|
||||||
G_CALLBACK (on_session_input_sources_setting_changed),
|
|
||||||
self,
|
|
||||||
G_CONNECT_SWAPPED);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
options = g_settings_get_strv (self->input_sources_settings, KIOSK_INPUT_OPTIONS_SETTING);
|
|
||||||
|
|
||||||
- input_source_group = g_settings_get_value (self->input_sources_settings,
|
|
||||||
- KIOSK_INPUT_SOURCE_GROUP_SETTING);
|
|
||||||
+ input_sources = g_settings_get_value (self->input_sources_settings,
|
|
||||||
+ KIOSK_INPUT_SOURCES_SETTING);
|
|
||||||
|
|
||||||
- input_source_group_active = kiosk_input_sources_manager_set_input_sources (self, input_source_group, (const char * const *) options);
|
|
||||||
+ input_sources_active = kiosk_input_sources_manager_set_input_sources (self, input_sources, (const char * const *) options);
|
|
||||||
|
|
||||||
- if (!input_source_group_active) {
|
|
||||||
+ if (!input_sources_active) {
|
|
||||||
g_debug ("KioskInputSourcesManager: Session has no valid configured input sources");
|
|
||||||
return kiosk_input_sources_manager_set_input_sources_from_system_configuration (self);
|
|
||||||
}
|
|
||||||
|
|
||||||
return TRUE;
|
|
||||||
}
|
|
||||||
|
|
||||||
gboolean
|
|
||||||
kiosk_input_sources_manager_set_input_sources_from_locales (KioskInputSourcesManager *self,
|
|
||||||
const char * const *locales,
|
|
||||||
const char *options)
|
|
||||||
{
|
|
||||||
KioskInputSourceGroup *old_input_source_group;
|
|
||||||
g_autofree char *old_selected_layout = NULL;
|
|
||||||
g_autofree char *old_input_engine = NULL;
|
|
||||||
g_autofree char *locales_string = NULL;
|
|
||||||
gboolean input_source_group_active;
|
|
||||||
|
|
||||||
g_return_val_if_fail (KIOSK_IS_INPUT_SOURCES_MANAGER (self), FALSE);
|
|
||||||
g_return_val_if_fail (locales != NULL, FALSE);
|
|
||||||
|
|
||||||
locales_string = g_strjoinv (",", (GStrv) locales);
|
|
||||||
|
|
||||||
g_debug ("KioskInputSourcesManager: Setting keymap from locales '%s'",
|
|
||||||
locales_string);
|
|
||||||
|
|
||||||
self->overriding_configuration = TRUE;
|
|
||||||
|
|
||||||
old_input_source_group = kiosk_input_sources_manager_get_selected_input_source_group (self);
|
|
||||||
|
|
||||||
--
|
|
||||||
2.30.2
|
|
||||||
|
|
@ -1,229 +0,0 @@
|
|||||||
From a944f0d27a42028ec18edb17f65957780c400104 Mon Sep 17 00:00:00 2001
|
|
||||||
From: Ray Strode <rstrode@redhat.com>
|
|
||||||
Date: Thu, 15 Apr 2021 13:28:00 -0400
|
|
||||||
Subject: [PATCH 3/4] compositor: Add signal for reporting X server events
|
|
||||||
|
|
||||||
The keyboard layout handling code currently doesn't notice
|
|
||||||
when the keyboard layout is changed using libxklavier, out from
|
|
||||||
under it.
|
|
||||||
|
|
||||||
As a first step toward fixing that problem, this commit adds a
|
|
||||||
new signal "x-server-event" to KioskCompositor, so that the
|
|
||||||
InputSourcesManager can watch for root window property changes.
|
|
||||||
---
|
|
||||||
compositor/kiosk-compositor.c | 22 +++++++++++++++++++++-
|
|
||||||
1 file changed, 21 insertions(+), 1 deletion(-)
|
|
||||||
|
|
||||||
diff --git a/compositor/kiosk-compositor.c b/compositor/kiosk-compositor.c
|
|
||||||
index dad7776..14f5de3 100644
|
|
||||||
--- a/compositor/kiosk-compositor.c
|
|
||||||
+++ b/compositor/kiosk-compositor.c
|
|
||||||
@@ -9,60 +9,67 @@
|
|
||||||
#include <clutter/clutter.h>
|
|
||||||
#include <clutter/x11/clutter-x11.h>
|
|
||||||
#include <meta/common.h>
|
|
||||||
#include <meta/display.h>
|
|
||||||
#include <meta/main.h>
|
|
||||||
#include <meta/util.h>
|
|
||||||
#include <meta/meta-window-group.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,
|
|
||||||
+ NUMBER_OF_SIGNALS
|
|
||||||
+};
|
|
||||||
+
|
|
||||||
+static guint signals [NUMBER_OF_SIGNALS] = { 0, };
|
|
||||||
+
|
|
||||||
G_DEFINE_TYPE (KioskCompositor, kiosk_compositor, META_TYPE_PLUGIN)
|
|
||||||
|
|
||||||
static void kiosk_compositor_dispose (GObject *object);
|
|
||||||
|
|
||||||
static void
|
|
||||||
kiosk_compositor_dispose (GObject *object)
|
|
||||||
{
|
|
||||||
KioskCompositor *self = KIOSK_COMPOSITOR (object);
|
|
||||||
|
|
||||||
if (self->cancellable != NULL) {
|
|
||||||
g_cancellable_cancel (self->cancellable);
|
|
||||||
g_clear_object (&self->cancellable);
|
|
||||||
}
|
|
||||||
|
|
||||||
g_clear_weak_pointer (&self->stage);
|
|
||||||
g_clear_weak_pointer (&self->display);
|
|
||||||
g_clear_weak_pointer (&self->backend);
|
|
||||||
|
|
||||||
g_clear_object (&self->backgrounds);
|
|
||||||
|
|
||||||
G_OBJECT_CLASS (kiosk_compositor_parent_class)->dispose (object);
|
|
||||||
}
|
|
||||||
|
|
||||||
static void
|
|
||||||
register_with_display_manager (KioskCompositor *self)
|
|
||||||
{
|
|
||||||
g_autoptr (GDBusConnection) system_bus = NULL;
|
|
||||||
g_autoptr (GdmManager) display_manager = NULL;
|
|
||||||
GVariantBuilder builder;
|
|
||||||
g_autoptr (GError) error = NULL;
|
|
||||||
@@ -329,62 +336,64 @@ kiosk_compositor_show_tile_preview (MetaPlugin *plugin,
|
|
||||||
g_assert (META_PLUGIN_CLASS (kiosk_compositor_parent_class)->show_tile_preview == NULL);
|
|
||||||
}
|
|
||||||
|
|
||||||
static void
|
|
||||||
kiosk_compositor_hide_tile_preview (MetaPlugin *plugin)
|
|
||||||
{
|
|
||||||
g_assert (META_PLUGIN_CLASS (kiosk_compositor_parent_class)->hide_tile_preview == NULL);
|
|
||||||
}
|
|
||||||
|
|
||||||
static void
|
|
||||||
kiosk_compositor_show_window_menu (MetaPlugin *plugin,
|
|
||||||
MetaWindow *window,
|
|
||||||
MetaWindowMenuType menu,
|
|
||||||
int x,
|
|
||||||
int y)
|
|
||||||
{
|
|
||||||
g_assert (META_PLUGIN_CLASS (kiosk_compositor_parent_class)->show_window_menu == NULL);
|
|
||||||
}
|
|
||||||
|
|
||||||
static void
|
|
||||||
kiosk_compositor_show_window_menu_for_rect (MetaPlugin *plugin,
|
|
||||||
MetaWindow *window,
|
|
||||||
MetaWindowMenuType menu,
|
|
||||||
MetaRectangle *rect)
|
|
||||||
{
|
|
||||||
g_assert (META_PLUGIN_CLASS (kiosk_compositor_parent_class)->show_window_menu_for_rect == NULL);
|
|
||||||
}
|
|
||||||
|
|
||||||
static gboolean
|
|
||||||
kiosk_compositor_xevent_filter (MetaPlugin *plugin,
|
|
||||||
- XEvent *xev)
|
|
||||||
+ XEvent *x_server_event)
|
|
||||||
{
|
|
||||||
+ KioskCompositor *self = KIOSK_COMPOSITOR (plugin);
|
|
||||||
+ g_signal_emit (G_OBJECT (self), signals[X_SERVER_EVENT], 0, x_server_event);
|
|
||||||
return FALSE;
|
|
||||||
}
|
|
||||||
|
|
||||||
static gboolean
|
|
||||||
kiosk_compositor_keybinding_filter (MetaPlugin *plugin,
|
|
||||||
MetaKeyBinding *binding)
|
|
||||||
{
|
|
||||||
return FALSE;
|
|
||||||
}
|
|
||||||
|
|
||||||
static void
|
|
||||||
kiosk_compositor_confirm_display_change (MetaPlugin *plugin)
|
|
||||||
{
|
|
||||||
KioskCompositor *self = KIOSK_COMPOSITOR (plugin);
|
|
||||||
|
|
||||||
meta_plugin_complete_display_change (META_PLUGIN (self), TRUE);
|
|
||||||
}
|
|
||||||
|
|
||||||
static const MetaPluginInfo info = {
|
|
||||||
.name = "GNOME Kiosk",
|
|
||||||
.version = VERSION,
|
|
||||||
.author = "Various",
|
|
||||||
.license = "GPLv2+",
|
|
||||||
.description = "Provides Kiosk compositor plugin for mutter"
|
|
||||||
};
|
|
||||||
|
|
||||||
static const MetaPluginInfo *
|
|
||||||
kiosk_compositor_plugin_info (MetaPlugin *plugin)
|
|
||||||
{
|
|
||||||
|
|
||||||
@@ -420,60 +429,71 @@ kiosk_compositor_class_init (KioskCompositorClass *compositor_class)
|
|
||||||
|
|
||||||
plugin_class->start = kiosk_compositor_start;
|
|
||||||
plugin_class->map = kiosk_compositor_map;
|
|
||||||
plugin_class->minimize = kiosk_compositor_minimize;
|
|
||||||
plugin_class->unminimize = kiosk_compositor_unminimize;
|
|
||||||
plugin_class->size_changed = kiosk_compositor_size_changed;
|
|
||||||
plugin_class->size_change = kiosk_compositor_size_change;
|
|
||||||
plugin_class->destroy = kiosk_compositor_destroy;
|
|
||||||
|
|
||||||
plugin_class->switch_workspace = kiosk_compositor_switch_workspace;
|
|
||||||
|
|
||||||
plugin_class->kill_window_effects = kiosk_compositor_kill_window_effects;
|
|
||||||
plugin_class->kill_switch_workspace = kiosk_compositor_kill_switch_workspace;
|
|
||||||
|
|
||||||
plugin_class->show_tile_preview = kiosk_compositor_show_tile_preview;
|
|
||||||
plugin_class->hide_tile_preview = kiosk_compositor_hide_tile_preview;
|
|
||||||
plugin_class->show_window_menu = kiosk_compositor_show_window_menu;
|
|
||||||
plugin_class->show_window_menu_for_rect = kiosk_compositor_show_window_menu_for_rect;
|
|
||||||
|
|
||||||
plugin_class->xevent_filter = kiosk_compositor_xevent_filter;
|
|
||||||
plugin_class->keybinding_filter = kiosk_compositor_keybinding_filter;
|
|
||||||
|
|
||||||
plugin_class->confirm_display_change = kiosk_compositor_confirm_display_change;
|
|
||||||
|
|
||||||
plugin_class->plugin_info = kiosk_compositor_plugin_info;
|
|
||||||
|
|
||||||
plugin_class->create_close_dialog = kiosk_compositor_create_close_dialog;
|
|
||||||
plugin_class->create_inhibit_shortcuts_dialog = kiosk_compositor_create_inhibit_shortcuts_dialog;
|
|
||||||
|
|
||||||
plugin_class->locate_pointer = kiosk_compositor_locate_pointer;
|
|
||||||
+
|
|
||||||
+ signals [X_SERVER_EVENT] =
|
|
||||||
+ g_signal_new ("x-server-event",
|
|
||||||
+ G_TYPE_FROM_CLASS (object_class),
|
|
||||||
+ G_SIGNAL_RUN_LAST,
|
|
||||||
+ 0,
|
|
||||||
+ NULL,
|
|
||||||
+ NULL,
|
|
||||||
+ g_cclosure_marshal_VOID__POINTER,
|
|
||||||
+ G_TYPE_NONE,
|
|
||||||
+ 1, G_TYPE_POINTER);
|
|
||||||
}
|
|
||||||
|
|
||||||
static void
|
|
||||||
kiosk_compositor_init (KioskCompositor *compositor)
|
|
||||||
{
|
|
||||||
g_debug ("KioskCompositor: Initializing");
|
|
||||||
}
|
|
||||||
|
|
||||||
KioskBackgrounds *
|
|
||||||
kiosk_compositor_get_backgrounds (KioskCompositor *self)
|
|
||||||
{
|
|
||||||
g_return_val_if_fail (KIOSK_IS_COMPOSITOR (self), NULL);
|
|
||||||
|
|
||||||
return KIOSK_BACKGROUNDS (self->backgrounds);
|
|
||||||
}
|
|
||||||
|
|
||||||
KioskInputSourcesManager *
|
|
||||||
kiosk_compositor_get_input_sources_manager (KioskCompositor *self)
|
|
||||||
{
|
|
||||||
g_return_val_if_fail (KIOSK_IS_COMPOSITOR (self), NULL);
|
|
||||||
|
|
||||||
return KIOSK_INPUT_SOURCES_MANAGER (self->input_sources_manager);
|
|
||||||
}
|
|
||||||
|
|
||||||
KioskService *
|
|
||||||
kiosk_compositor_get_service (KioskCompositor *self)
|
|
||||||
{
|
|
||||||
g_return_val_if_fail (KIOSK_IS_COMPOSITOR (self), NULL);
|
|
||||||
|
|
||||||
return KIOSK_SERVICE (self->service);
|
|
||||||
--
|
|
||||||
2.30.2
|
|
||||||
|
|
File diff suppressed because it is too large
Load Diff
@ -11,8 +11,8 @@
|
|||||||
%global gnome_settings_daemon_version 40~rc
|
%global gnome_settings_daemon_version 40~rc
|
||||||
|
|
||||||
Name: gnome-kiosk
|
Name: gnome-kiosk
|
||||||
Version: 40~alpha
|
Version: 40.0
|
||||||
Release: 9%{?dist}
|
Release: 1%{?dist}
|
||||||
Summary: Window management and application launching for GNOME
|
Summary: Window management and application launching for GNOME
|
||||||
|
|
||||||
License: GPLv2+
|
License: GPLv2+
|
||||||
@ -39,24 +39,6 @@ BuildRequires: meson
|
|||||||
Requires: gnome-settings-daemon%{?_isa} >= %{gnome_settings_daemon_version}
|
Requires: gnome-settings-daemon%{?_isa} >= %{gnome_settings_daemon_version}
|
||||||
Requires: gsettings-desktop-schemas%{?_isa} >= %{gsettings_desktop_schemas_version}
|
Requires: gsettings-desktop-schemas%{?_isa} >= %{gsettings_desktop_schemas_version}
|
||||||
|
|
||||||
# https://gitlab.gnome.org/halfline/gnome-kiosk/-/merge_requests/1
|
|
||||||
Patch10001: 0001-compositor-Be-less-aggressive-about-full-screening-w.patch
|
|
||||||
|
|
||||||
# https://gitlab.gnome.org/halfline/gnome-kiosk/-/merge_requests/2
|
|
||||||
Patch20001: 0001-gobject-utils-Log-when-executing-deferred-tasks.patch
|
|
||||||
Patch20002: 0002-input-sources-manager-Fix-overzealous-rename-mistake.patch
|
|
||||||
Patch20003: 0003-compositor-Add-signal-for-reporting-X-server-events.patch
|
|
||||||
Patch20004: 0004-input-sources-manager-Support-libxklavier-managed-ke.patch
|
|
||||||
|
|
||||||
# https://gitlab.gnome.org/halfline/gnome-kiosk/-/merge_requests/3
|
|
||||||
Patch30001: 0001-Make-the-desktop-file-valid.patch
|
|
||||||
|
|
||||||
# https://gitlab.gnome.org/halfline/gnome-kiosk/-/merge_requests/4
|
|
||||||
Patch40001: 0001-compositor-Put-the-on-top-windows-actually-on-top.patch
|
|
||||||
|
|
||||||
# https://gitlab.gnome.org/halfline/gnome-kiosk/-/merge_requests/5
|
|
||||||
Patch50001: 0001-input-sources-manager-Fail-better-if-localed-isn-t-a.patch
|
|
||||||
|
|
||||||
%description
|
%description
|
||||||
GNOME Kiosk provides a desktop enviroment suitable for fixed purpose, or
|
GNOME Kiosk provides a desktop enviroment suitable for fixed purpose, or
|
||||||
single application deployments like wall displays and point-of-sale systems.
|
single application deployments like wall displays and point-of-sale systems.
|
||||||
@ -99,6 +81,10 @@ 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
|
||||||
|
* Mon May 17 2021 Ray Strode <rstrode@redhat.com> - 40.0-1
|
||||||
|
- Update to 40.0
|
||||||
|
Related: #1950042
|
||||||
|
|
||||||
* Wed May 12 2021 Ray Strode <rstrode@redhat.com> - 40~alpha-9
|
* Wed May 12 2021 Ray Strode <rstrode@redhat.com> - 40~alpha-9
|
||||||
- Fix crash
|
- Fix crash
|
||||||
Resolves: #1957754
|
Resolves: #1957754
|
||||||
|
2
sources
2
sources
@ -1 +1 @@
|
|||||||
SHA512 (gnome-kiosk-40.alpha.tar.xz) = c79645935438f5512b437ae19ea8016a8b2ce6fd49a4e5426956d6fc21b33d622e82d01ce3c0cb97f540c5a889c1a098b0e9e8d65d33e0669dc989e1d391f9fb
|
SHA512 (gnome-kiosk-40.0.tar.xz) = 2e670046b9cf9031bfa2b95969726c626d83c6d84ffb0ecc50a67414d406f05e515dbf7716b7f84c9342aec84e93369c07199ef233923cbb527d267c61374d35
|
||||||
|
Loading…
Reference in New Issue
Block a user