static void got_session_name (GObject *object, GAsyncResult *res, gpointer data) { GDBusProxy *proxy; GVariant *result, *variant; const gchar *session_name = NULL; GError *error = NULL; proxy = G_DBUS_PROXY (object); result = g_dbus_proxy_call_finish (proxy, res, &error); if (!result) { g_debug ("Failed to get session name: %s", error->message); g_error_free (error); register_with_gnome_session (proxy); return; } g_variant_get (result, "(v)", &variant); g_variant_unref (result); g_variant_get (variant, "&s", &session_name); if (g_strcmp0 (session_name, "gnome") == 0 && is_program_in_path ("ibus-daemon") && keyboard_plugin_is_enabled ()) { set_session_env (proxy, "QT_IM_MODULE", "ibus"); set_session_env (proxy, "XMODIFIERS", "@im=ibus"); } g_variant_unref (variant); /* Finally we can register. */ register_with_gnome_session (proxy); }
int main (int argc, char *argv[]) { //bindtextdomain (GETTEXT_PACKAGE, GNOME_SETTINGS_LOCALEDIR); //bind_textdomain_codeset (GETTEXT_PACKAGE, "UTF-8"); //textdomain (GETTEXT_PACKAGE); parse_args (&argc, &argv); gdk_set_allowed_backends ("x11"); if (! gdk_init_check (NULL, NULL)) { g_warning ("Unable to initialize GTK+"); exit (EXIT_FAILURE); } g_log_set_default_handler (gsd_log_default_handler, NULL); if (g_strcmp0(g_getenv("XDG_CURRENT_DESKTOP"), "GNOME")) { xsync = g_slice_new0 (MetaXSync); init_xsync(); mainloop = g_main_loop_new (NULL, FALSE); meta_monitor_manager_initialize (replace); meta_idle_monitor_init_dbus (replace); if (!session_manager_connect ()) g_warning ("Unable to connect to session manager"); register_with_gnome_session (sm_proxy); watch_for_term_signal (); g_main_loop_run (mainloop); g_slice_free(MetaXSync, xsync); } g_debug ("DisplayConfig finished"); return 0; }
static void got_session_proxy (GObject *source_object, GAsyncResult *res, gpointer user_data) { GDBusProxy *proxy; GError *error = NULL; proxy = g_dbus_proxy_new_finish (res, &error); if (proxy == NULL) { g_debug ("Could not connect to the Session manager: %s", error->message); g_error_free (error); } else { /* Always call this first, as Setenv can only be called before any client registers */ set_locale (proxy); #ifdef HAVE_IBUS /* This will register with gnome-session after calling Setenv. */ set_legacy_ibus_env_vars (proxy); #else register_with_gnome_session (proxy); #endif } }