From 43579b51f0e2f13e403688d323dcb8d0ffb3ca74 Mon Sep 17 00:00:00 2001 From: Dorota Czaplejewicz Date: Thu, 4 Jul 2019 07:20:39 +0000 Subject: [PATCH] session: Register to the session manager Registering as "sm.puri.OSK0", because that's as much as the session knows about the virtual keyboard. --- src/server-main.c | 36 ++++++++++++++++++++++++++++++++++++ 1 file changed, 36 insertions(+) diff --git a/src/server-main.c b/src/server-main.c index 84a2a280..ac8a0cfb 100644 --- a/src/server-main.c +++ b/src/server-main.c @@ -143,6 +143,40 @@ static const struct wl_registry_listener registry_listener = { registry_handle_global_remove }; +#define SESSION_NAME "sm.puri.OSK0" + +GDBusProxy *_proxy = NULL; + +static void +session_register(void) { + char *autostart_id = getenv("DESKTOP_AUTOSTART_ID"); + if (!autostart_id) { + g_debug("No autostart id"); + autostart_id = ""; + } + GError *error = NULL; + _proxy = g_dbus_proxy_new_for_bus_sync(G_BUS_TYPE_SESSION, + G_DBUS_PROXY_FLAGS_DO_NOT_AUTO_START, NULL, + "org.gnome.SessionManager", "/org/gnome/SessionManager", + "org.gnome.SessionManager", NULL, &error); + if (error) { + g_warning("Could not connect to session manager: %s\n", + error->message); + g_clear_error(&error); + return; + } + + g_dbus_proxy_call_sync(_proxy, "RegisterClient", + g_variant_new("(ss)", SESSION_NAME, autostart_id), + G_DBUS_CALL_FLAGS_NONE, 1000, NULL, &error); + if (error) { + g_warning("Could not register to session manager: %s\n", + error->message); + g_clear_error(&error); + return; + } +} + int main (int argc, char **argv) { @@ -261,6 +295,8 @@ main (int argc, char **argv) } } + session_register(); + GMainLoop *loop = g_main_loop_new (NULL, FALSE); g_signal_connect (service, "destroyed", G_CALLBACK(on_destroyed), loop);