static void create_manager (void) { GsmStore *client_store; client_store = gsm_store_new (); manager = gsm_manager_new (client_store, failsafe); g_object_unref (client_store); g_unix_signal_add (SIGTERM, term_or_int_signal_cb, manager); g_unix_signal_add (SIGINT, term_or_int_signal_cb, manager); g_unix_signal_add (SIGUSR1, sigusr1_cb, manager); g_unix_signal_add (SIGUSR2, sigusr2_cb, manager); if (IS_STRING_EMPTY (session_name)) { session_name = _gsm_manager_get_default_session (manager); } if (!gsm_session_fill (manager, session_name)) { gsm_fail_whale_dialog_we_failed (FALSE, TRUE, NULL); } _gsm_manager_set_renderer (manager, gl_renderer); gsm_manager_start (manager); }
int main(int argc, char** argv) { struct sigaction sa; GError* error; #if GTK_CHECK_VERSION (3, 0, 0) const char* display_str; #else char* display_str; #endif GsmManager* manager; GsmStore* client_store; GsmXsmpServer* xsmp_server; GSettings* accessibility_settings; MdmSignalHandler* signal_handler; static char** override_autostart_dirs = NULL; static GOptionEntry entries[] = { {"autostart", 'a', 0, G_OPTION_ARG_STRING_ARRAY, &override_autostart_dirs, N_("Override standard autostart directories"), NULL}, {"debug", 0, 0, G_OPTION_ARG_NONE, &debug, N_("Enable debugging code"), NULL}, {"failsafe", 'f', 0, G_OPTION_ARG_NONE, &failsafe, N_("Do not load user-specified applications"), NULL}, {"version", 0, 0, G_OPTION_ARG_NONE, &show_version, N_("Version of this application"), NULL}, {NULL, 0, 0, 0, NULL, NULL, NULL } }; /* Make sure that we have a session bus */ if (!require_dbus_session(argc, argv, &error)) { gsm_util_init_error(TRUE, "%s", error->message); } bindtextdomain(GETTEXT_PACKAGE, LOCALE_DIR); bind_textdomain_codeset(GETTEXT_PACKAGE, "UTF-8"); textdomain(GETTEXT_PACKAGE); sa.sa_handler = SIG_IGN; sa.sa_flags = 0; sigemptyset(&sa.sa_mask); sigaction(SIGPIPE, &sa, 0); error = NULL; gtk_init_with_args(&argc, &argv, (char*) _(" - the MATE session manager"), entries, GETTEXT_PACKAGE, &error); if (error != NULL) { g_warning("%s", error->message); exit(1); } if (show_version) { g_print("%s %s\n", argv [0], VERSION); exit(1); } mdm_log_init(); mdm_log_set_debug(debug); /* Set DISPLAY explicitly for all our children, in case --display * was specified on the command line. */ #if GTK_CHECK_VERSION (3, 0, 0) display_str = gdk_display_get_name (gdk_display_get_default()); #else display_str = gdk_get_display(); #endif gsm_util_setenv("DISPLAY", display_str); #if !GTK_CHECK_VERSION (3, 0, 0) g_free(display_str); #endif /* Some third-party programs rely on MATE_DESKTOP_SESSION_ID to * detect if MATE is running. We keep this for compatibility reasons. */ gsm_util_setenv("MATE_DESKTOP_SESSION_ID", "this-is-deprecated"); /* * Make sure gsettings is set up correctly. If not, then bail. */ if (initialize_gsettings () != TRUE) exit (1); /* Look if accessibility is enabled */ accessibility_settings = g_settings_new (ACCESSIBILITY_SCHEMA); if (g_settings_get_boolean (accessibility_settings, ACCESSIBILITY_KEY)) { gsm_util_setenv("GTK_MODULES", "gail:atk-bridge"); } g_object_unref (accessibility_settings); client_store = gsm_store_new(); xsmp_server = gsm_xsmp_server_new(client_store); /* Now make sure they succeeded. (They'll call * gsm_util_init_error() if they failed.) */ acquire_name(); /* Starts gnome compat mode */ msm_gnome_start(); manager = gsm_manager_new(client_store, failsafe); signal_handler = mdm_signal_handler_new(); mdm_signal_handler_add_fatal(signal_handler); mdm_signal_handler_add(signal_handler, SIGFPE, signal_cb, NULL); mdm_signal_handler_add(signal_handler, SIGHUP, signal_cb, NULL); mdm_signal_handler_add(signal_handler, SIGUSR1, signal_cb, NULL); mdm_signal_handler_add(signal_handler, SIGTERM, signal_cb, manager); mdm_signal_handler_add(signal_handler, SIGINT, signal_cb, manager); mdm_signal_handler_set_fatal_func(signal_handler, shutdown_cb, manager); if (override_autostart_dirs != NULL) { load_override_apps(manager, override_autostart_dirs); } else { load_standard_apps(manager, GSM_DEFAULT_SESSION_KEY); } gsm_xsmp_server_start(xsmp_server); gsm_manager_start(manager); gtk_main(); if (xsmp_server != NULL) { g_object_unref(xsmp_server); } if (manager != NULL) { g_debug("Unreffing manager"); g_object_unref(manager); } if (client_store != NULL) { g_object_unref(client_store); } msm_gnome_stop(); mdm_log_shutdown(); return 0; }