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);
}
예제 #2
0
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
        }
}