diff options
Diffstat (limited to 'gui/simple-greeter/greeter-main.c')
-rw-r--r-- | gui/simple-greeter/greeter-main.c | 284 |
1 files changed, 0 insertions, 284 deletions
diff --git a/gui/simple-greeter/greeter-main.c b/gui/simple-greeter/greeter-main.c deleted file mode 100644 index b17da46d..00000000 --- a/gui/simple-greeter/greeter-main.c +++ /dev/null @@ -1,284 +0,0 @@ -/* -*- Mode: C; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 8 -*- - * - * Copyright (C) 2007 William Jon McCann <mccann@jhu.edu> - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - */ - -#include "config.h" - -#include <stdlib.h> -#include <locale.h> -#include <unistd.h> -#include <signal.h> -#include <string.h> - -#include <glib.h> -#include <glib/gi18n.h> -#include <gdk/gdkx.h> -#include <gtk/gtk.h> - -#include "gdm-log.h" -#include "gdm-common.h" -#include "gdm-settings-client.h" -#include "gdm-settings-keys.h" -#include "gdm-profile.h" - -#include "gdm-greeter-session.h" - -#include "gsm-client-glue.h" -#include "gsm-manager-glue.h" - -#define SM_DBUS_NAME "org.gnome.SessionManager" -#define SM_DBUS_PATH "/org/gnome/SessionManager" -#define SM_DBUS_INTERFACE "org.gnome.SessionManager" - -#define SM_CLIENT_DBUS_INTERFACE "org.gnome.SessionManager.ClientPrivate" - -static GDBusConnection *bus_connection = NULL; -static GsmManager *sm_proxy = NULL; -static char *client_id = NULL; -static GsmClientPrivate *client_proxy = NULL; - -static gboolean -is_debug_set (void) -{ - gboolean debug = FALSE; - - /* enable debugging for unstable builds */ - if (gdm_is_version_unstable ()) { - return TRUE; - } - - gdm_settings_client_get_boolean (GDM_KEY_DEBUG, &debug); - return debug; -} - -static gboolean -on_sigusr1_cb (gpointer user_data) -{ - g_debug ("Got USR1 signal"); - - gdm_log_toggle_debug (); - - return TRUE; -} - -static gboolean -session_manager_connect (void) -{ - GError *error; - - error = NULL; - - if (bus_connection == NULL) { - bus_connection = g_bus_get_sync (G_BUS_TYPE_SESSION, NULL, &error); - if (bus_connection == NULL) { - g_message ("Failed to connect to the session bus: %s", - error->message); - g_error_free (error); - exit (1); - } - - g_signal_connect (G_OBJECT (bus_connection), - "closed", - G_CALLBACK (gtk_main_quit), - NULL); - } - - sm_proxy = gsm_manager_proxy_new_sync (bus_connection, - G_DBUS_PROXY_FLAGS_NONE, - SM_DBUS_NAME, - SM_DBUS_PATH, - NULL, - &error); - - if (sm_proxy == NULL) { - g_message ("Failed to connect to the session manager: %s", - error->message); - g_error_free (error); - } - - return (sm_proxy != NULL); -} - -static void -stop_cb (GsmClientPrivate *client_private, - gpointer data) -{ - gtk_main_quit (); -} - -static gboolean -end_session_response (gboolean is_okay, const gchar *reason) -{ - gboolean ret; - GError *error = NULL; - - if (reason == NULL) { - reason = ""; - } - - ret = gsm_client_private_call_end_session_response_sync (client_proxy, is_okay, reason, NULL, &error); - - if (!ret) { - g_warning ("Failed to send session response %s", error->message); - g_error_free (error); - } - - return ret; -} - -static void -query_end_session_cb (GsmClientPrivate *client_private, - guint flags, - gpointer data) -{ - end_session_response (TRUE, NULL); -} - -static void -end_session_cb (guint flags, gpointer data) -{ - end_session_response (TRUE, NULL); - gtk_main_quit (); -} - -static gboolean -register_client (void) -{ - GError *error; - gboolean res; - const char *startup_id; - const char *app_id; - - startup_id = g_getenv ("DESKTOP_AUTOSTART_ID"); - app_id = "gdm-simple-greeter.desktop"; - - error = NULL; - res = gsm_manager_call_register_client_sync (sm_proxy, app_id, startup_id, &client_id, NULL, &error); - if (! res) { - g_warning ("Failed to register client: %s", error->message); - g_error_free (error); - return FALSE; - } - - g_debug ("Client registered with session manager: %s", client_id); - client_proxy = gsm_client_private_proxy_new_sync (bus_connection, - G_DBUS_PROXY_FLAGS_NONE, - SM_DBUS_NAME, - client_id, - NULL, - &error); - - if (client_proxy == NULL) { - g_warning ("Failed to track client: %s", error->message); - g_error_free (error); - - return FALSE; - } - - g_signal_connect (client_proxy, - "stop", - G_CALLBACK (stop_cb), - NULL); - - g_signal_connect (client_proxy, - "query-end-session", - G_CALLBACK (query_end_session_cb), - NULL); - - g_signal_connect (client_proxy, - "end-session", - G_CALLBACK (end_session_cb), - NULL); - - g_unsetenv ("DESKTOP_AUTOSTART_ID"); - - return TRUE; -} - -int -main (int argc, char *argv[]) -{ - GError *error; - GdmGreeterSession *session; - gboolean res; - - bindtextdomain (GETTEXT_PACKAGE, GNOMELOCALEDIR); - bind_textdomain_codeset (GETTEXT_PACKAGE, "UTF-8"); - textdomain (GETTEXT_PACKAGE); - - setlocale (LC_ALL, ""); - - gdm_profile_start ("Initializing settings client"); - if (! gdm_settings_client_init (DATADIR "/gdm/gdm.schemas", "/")) { - g_critical ("Unable to initialize settings client"); - exit (1); - } - gdm_profile_end ("Initializing settings client"); - - g_debug ("Greeter session pid=%d display=%s xauthority=%s", - (int)getpid (), - g_getenv ("DISPLAY"), - g_getenv ("XAUTHORITY")); - - /* FIXME: For testing to make it easier to attach gdb */ - /*sleep (15);*/ - - gdm_log_init (); - gdm_log_set_debug (is_debug_set ()); - - gtk_init (&argc, &argv); - - g_unix_signal_add (SIGUSR1, on_sigusr1_cb, NULL); - - gdm_profile_start ("Creating new greeter session"); - session = gdm_greeter_session_new (); - if (session == NULL) { - g_critical ("Unable to create greeter session"); - exit (1); - } - gdm_profile_end ("Creating new greeter session"); - - error = NULL; - res = gdm_greeter_session_start (session, &error); - if (! res) { - if (error != NULL) { - g_warning ("Unable to start greeter session: %s", error->message); - g_error_free (error); - } - exit (1); - } - - res = session_manager_connect (); - if (! res) { - g_warning ("Unable to connect to session manager"); - exit (1); - } - - res = register_client (); - if (! res) { - g_warning ("Unable to register client with session manager"); - } - - gtk_main (); - - if (session != NULL) { - g_object_unref (session); - } - - return 0; -} |