From c6d1b35c56a1284f106a50812ce72444c29d8042 Mon Sep 17 00:00:00 2001
From: importbot <releng@rockylinux.org>
Date: Tue, 8 Oct 2024 08:47:31 +0000
Subject: [PATCH] import gnome-kiosk-47.0-2.el10

---
 ...-add-the-window-in-kiosk_app_new_for.patch | 99 +++++++++++++++++++
 SPECS/gnome-kiosk.spec                        |  7 +-
 2 files changed, 105 insertions(+), 1 deletion(-)
 create mode 100644 SOURCES/0001-kiosk-app-Do-not-add-the-window-in-kiosk_app_new_for.patch

diff --git a/SOURCES/0001-kiosk-app-Do-not-add-the-window-in-kiosk_app_new_for.patch b/SOURCES/0001-kiosk-app-Do-not-add-the-window-in-kiosk_app_new_for.patch
new file mode 100644
index 0000000..88e4bf9
--- /dev/null
+++ b/SOURCES/0001-kiosk-app-Do-not-add-the-window-in-kiosk_app_new_for.patch
@@ -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
+
diff --git a/SPECS/gnome-kiosk.spec b/SPECS/gnome-kiosk.spec
index 60f6e84..b104de2 100644
--- a/SPECS/gnome-kiosk.spec
+++ b/SPECS/gnome-kiosk.spec
@@ -2,7 +2,7 @@
 ## (rpmautospec version 0.7.2)
 ## RPMAUTOSPEC: autorelease, autochangelog
 %define autorelease(e:s:pb:n) %{?-p:0.}%{lua:
-    release_number = 1;
+    release_number = 2;
     base_release_number = tonumber(rpm.expand("%{?-b*}%{!?-b:1}"));
     print(release_number + base_release_number - 1);
 }%{?-e:.%{-e*}}%{?-s:.%{-s*}}%{!?-n:%{?dist}}
@@ -50,6 +50,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.
@@ -116,6 +118,9 @@ desktop-file-validate %{buildroot}%{_datadir}/applications/org.gnome.Kiosk.Searc
 
 %changelog
 ## START: Generated by rpmautospec
+* Mon Oct 07 2024 Ray Strode <rstrode@redhat.com> - 47.0-2
+- Fix introspection for programs with proper app association data
+
 * Tue Oct 01 2024 Fedora Release Engineering <releng@fedoraproject.org> - 47.0-1
 - Update to 47.0
 
-- 
GitLab