File xdg-desktop-portal-gtk-idle-timeout.patch of Package xdg-desktop-portal-gtk.22176
Index: xdg-desktop-portal-gtk-1.8.0/src/session.c
===================================================================
--- xdg-desktop-portal-gtk-1.8.0.orig/src/session.c
+++ xdg-desktop-portal-gtk-1.8.0/src/session.c
@@ -148,6 +148,7 @@ session_finalize (GObject *object)
{
Session *session = (Session *)object;
+ idle_timeout_release ();
g_hash_table_remove (sessions, session->id);
g_free (session->id);
@@ -161,6 +162,7 @@ session_constructed (GObject *object)
Session *session = (Session *)object;
g_hash_table_insert (sessions, g_strdup (session->id), session);
+ idle_timeout_inhibit ();
G_OBJECT_CLASS (session_parent_class)->constructed (object);
}
Index: xdg-desktop-portal-gtk-1.8.0/src/xdg-desktop-portal-gtk.c
===================================================================
--- xdg-desktop-portal-gtk-1.8.0.orig/src/xdg-desktop-portal-gtk.c
+++ xdg-desktop-portal-gtk-1.8.0/src/xdg-desktop-portal-gtk.c
@@ -58,9 +58,14 @@
#include "wallpaper.h"
+#define IDLE_TIMEOUT_MS 1000
+
static GMainLoop *loop = NULL;
static GHashTable *outstanding_handles = NULL;
+static gint idle_timeout_id;
+static gint idle_timeout_inhibit_count;
+
static gboolean opt_verbose;
static gboolean opt_replace;
static gboolean show_version;
@@ -213,6 +218,45 @@ on_name_lost (GDBusConnection *connectio
g_main_loop_quit (loop);
}
+static gboolean
+on_idle_timeout (void)
+{
+ g_main_loop_quit (loop);
+ return FALSE;
+}
+
+static void
+idle_timeout_stop (void)
+{
+ if (idle_timeout_id)
+ {
+ g_source_remove (idle_timeout_id);
+ idle_timeout_id = 0;
+ }
+}
+
+static void
+idle_timeout_restart (void)
+{
+ idle_timeout_stop ();
+ idle_timeout_id = g_timeout_add (IDLE_TIMEOUT_MS, (GSourceFunc) on_idle_timeout, NULL);
+}
+
+void
+idle_timeout_inhibit (void)
+{
+ idle_timeout_stop ();
+ idle_timeout_inhibit_count++;
+}
+
+void
+idle_timeout_release (void)
+{
+ idle_timeout_inhibit_count--;
+ if (idle_timeout_inhibit_count == 0)
+ idle_timeout_restart ();
+}
+
int
main (int argc, char *argv[])
{
@@ -286,6 +330,7 @@ main (int argc, char *argv[])
NULL,
NULL);
+ idle_timeout_restart ();
g_main_loop_run (loop);
g_bus_unown_name (owner_id);