Fix introspection for programs with proper app association data
Related: RHEL-46789
This commit is contained in:
parent
82023cbffe
commit
b16ffd75b9
@ -0,0 +1,99 @@
|
||||
From 67cb8748dbc8c237d7b7486c7cec9e7902dcb51f Mon Sep 17 00:00:00 2001
|
||||
From: Olivier Fourdan <ofourdan@redhat.com>
|
||||
Date: Mon, 7 Oct 2024 18:09:32 +0200
|
||||
Subject: [PATCH] kiosk-app: Do not add the window in
|
||||
kiosk_app_new_for_window()
|
||||
|
||||
When a window has no matching application (like, when there is no
|
||||
corresponding desktop file), a KioskApp is created for the window and
|
||||
the window would be added to the newly-created KioskApp.
|
||||
|
||||
However, by doing so, we add the window before the calling window
|
||||
tracker had a change to setup the state notify handler.
|
||||
|
||||
As a result, the window tracker is never notified of the state change
|
||||
and the KioskApp is never added to the list of running applications in
|
||||
the KioskAppState.
|
||||
|
||||
Too bad, since the introspection iterates on the running applications to
|
||||
report the windows.
|
||||
|
||||
To avoid the issue, simply do not add the window so soon in
|
||||
kiosk_app_new_for_window(), it will be added in time in track_window()
|
||||
and the notifications will be correctly triggered.
|
||||
|
||||
Fixes: commit 50ae635dc - kiosk-app: Add a new KioskApp class
|
||||
---
|
||||
compositor/kiosk-app.c | 2 --
|
||||
1 file changed, 2 deletions(-)
|
||||
|
||||
diff --git a/compositor/kiosk-app.c b/compositor/kiosk-app.c
|
||||
index acc9d9e..5b19e4e 100644
|
||||
--- a/compositor/kiosk-app.c
|
||||
+++ b/compositor/kiosk-app.c
|
||||
@@ -441,62 +441,60 @@ kiosk_app_remove_window (KioskApp *app,
|
||||
if (!meta_window_is_skip_taskbar (window))
|
||||
app->running_state->number_of_interesting_windows--;
|
||||
kiosk_app_sync_running_state (app);
|
||||
|
||||
if (app->running_state->windows == NULL)
|
||||
g_clear_pointer (&app->running_state, unref_running_state);
|
||||
|
||||
g_signal_handlers_disconnect_by_func (window,
|
||||
G_CALLBACK (kiosk_app_on_user_time_changed),
|
||||
app);
|
||||
g_signal_handlers_disconnect_by_func (window,
|
||||
G_CALLBACK (kiosk_app_on_skip_taskbar_changed),
|
||||
app);
|
||||
|
||||
g_object_unref (window);
|
||||
|
||||
g_signal_emit (app, kiosk_app_signals[WINDOWS_CHANGED], 0);
|
||||
}
|
||||
|
||||
KioskApp *
|
||||
kiosk_app_new_for_window (KioskCompositor *compositor,
|
||||
MetaWindow *window)
|
||||
{
|
||||
KioskApp *app;
|
||||
|
||||
app = g_object_new (KIOSK_TYPE_APP, "compositor", compositor, NULL);
|
||||
|
||||
app->window_id_string = g_strdup_printf ("window:%d",
|
||||
meta_window_get_stable_sequence (window));
|
||||
|
||||
- kiosk_app_add_window (app, window);
|
||||
-
|
||||
return app;
|
||||
}
|
||||
|
||||
KioskApp *
|
||||
kiosk_app_new (KioskCompositor *compositor,
|
||||
GDesktopAppInfo *info)
|
||||
{
|
||||
KioskApp *app;
|
||||
|
||||
app = g_object_new (KIOSK_TYPE_APP,
|
||||
"compositor", compositor, "app-info", info, NULL);
|
||||
|
||||
return app;
|
||||
}
|
||||
|
||||
const char *
|
||||
kiosk_app_get_sandbox_id (KioskApp *app)
|
||||
{
|
||||
KioskAppWindowIter iter;
|
||||
MetaWindow *window;
|
||||
|
||||
kiosk_app_window_iter_init (&iter, app);
|
||||
while (kiosk_app_window_iter_next (&iter, &window)) {
|
||||
const char *sandbox_id = meta_window_get_sandboxed_app_id (window);
|
||||
|
||||
if (sandbox_id)
|
||||
return sandbox_id;
|
||||
}
|
||||
|
||||
return NULL;
|
||||
--
|
||||
2.46.0
|
||||
|
@ -40,6 +40,8 @@ BuildRequires: pkgconfig(libmutter-15) >= %{mutter_version}
|
||||
Requires: gnome-settings-daemon%{?_isa} >= %{gnome_settings_daemon_version}
|
||||
Requires: gsettings-desktop-schemas%{?_isa} >= %{gsettings_desktop_schemas_version}
|
||||
|
||||
Patch: 0001-kiosk-app-Do-not-add-the-window-in-kiosk_app_new_for.patch
|
||||
|
||||
%description
|
||||
GNOME Kiosk provides a desktop enviroment suitable for fixed purpose, or
|
||||
single application deployments like wall displays and point-of-sale systems.
|
||||
|
Loading…
Reference in New Issue
Block a user