session: Register to the session manager

Registering as "sm.puri.OSK0", because that's as much as the session knows about the virtual keyboard.
This commit is contained in:
Dorota Czaplejewicz
2019-07-04 07:20:39 +00:00
parent fd6d873c01
commit 43579b51f0

View File

@ -143,6 +143,40 @@ static const struct wl_registry_listener registry_listener = {
registry_handle_global_remove 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 int
main (int argc, char **argv) main (int argc, char **argv)
{ {
@ -261,6 +295,8 @@ main (int argc, char **argv)
} }
} }
session_register();
GMainLoop *loop = g_main_loop_new (NULL, FALSE); GMainLoop *loop = g_main_loop_new (NULL, FALSE);
g_signal_connect (service, "destroyed", G_CALLBACK(on_destroyed), loop); g_signal_connect (service, "destroyed", G_CALLBACK(on_destroyed), loop);