[gdm/wip/slave-display-merger: 12/29] display: get rid of get_timed_login_details vfunc



commit ab24407bcc270325195c561f9f70e63735be428f
Author: Ray Strode <rstrode redhat com>
Date:   Tue Feb 3 15:12:49 2015 -0500

    display: get rid of get_timed_login_details vfunc
    
    Instead introduce an "allow-timed-login" property that
    subclasses can set to FALSE to disable timed login.

 daemon/gdm-display.c               |   74 ++++++++++++++++--------------------
 daemon/gdm-display.h               |   11 +----
 daemon/gdm-manager.c               |    6 +-
 daemon/gdm-slave.c                 |   22 +++-------
 daemon/gdm-transient-display.c     |   15 +-------
 daemon/gdm-xdmcp-display-factory.c |    1 +
 daemon/gdm-xdmcp-display.c         |   29 +++-----------
 7 files changed, 54 insertions(+), 104 deletions(-)
---
diff --git a/daemon/gdm-display.c b/daemon/gdm-display.c
index e2af951..065ad0c 100644
--- a/daemon/gdm-display.c
+++ b/daemon/gdm-display.c
@@ -75,6 +75,7 @@ struct GdmDisplayPrivate
         GDBusObjectSkeleton  *object_skeleton;
 
         gboolean              is_initial;
+        gboolean              allow_timed_login;
 };
 
 enum {
@@ -90,7 +91,8 @@ enum {
         PROP_X11_AUTHORITY_FILE,
         PROP_IS_LOCAL,
         PROP_SLAVE_TYPE,
-        PROP_IS_INITIAL
+        PROP_IS_INITIAL,
+        PROP_ALLOW_TIMED_LOGIN,
 };
 
 static void     gdm_display_class_init  (GdmDisplayClass *klass);
@@ -254,11 +256,11 @@ gdm_display_add_user_authorization (GdmDisplay *display,
         return TRUE;
 }
 
-static void
-gdm_display_real_get_timed_login_details (GdmDisplay *display,
-                                          gboolean   *enabledp,
-                                          char      **usernamep,
-                                          int        *delayp)
+void
+gdm_display_get_timed_login_details (GdmDisplay *display,
+                                     gboolean   *enabledp,
+                                     char      **usernamep,
+                                     int        *delayp)
 {
         gboolean res;
         gboolean enabled;
@@ -269,6 +271,10 @@ gdm_display_real_get_timed_login_details (GdmDisplay *display,
         username = NULL;
         delay = 0;
 
+        if (!display->priv->allow_timed_login) {
+                goto out;
+        }
+
 #ifdef WITH_SYSTEMD
         /* FIXME: More careful thought needs to happen before we
          * can support auto/timed login on auxilliary seats in the
@@ -327,44 +333,12 @@ gdm_display_real_get_timed_login_details (GdmDisplay *display,
         if (delayp != NULL) {
                 *delayp = delay;
         }
-}
-
-gboolean
-gdm_display_get_timed_login_details (GdmDisplay *display,
-                                     gboolean   *out_enabled,
-                                     char      **out_username,
-                                     int        *out_delay,
-                                     GError    **error)
-{
-        gboolean enabled;
-        char *username;
-        int delay;
-
-        g_return_val_if_fail (GDM_IS_DISPLAY (display), FALSE);
-
-        GDM_DISPLAY_GET_CLASS (display)->get_timed_login_details (display, &enabled, &username, &delay);
 
         g_debug ("GdmDisplay: Got timed login details for display %s: %d '%s' %d",
                  display->priv->x11_display_name,
                  enabled,
                  username,
                  delay);
-
-        if (out_enabled) {
-                *out_enabled = enabled;
-        }
-
-        if (out_username) {
-                *out_username = username;
-        } else {
-                g_free (username);
-        }
-
-        if (out_delay) {
-                *out_delay = delay;
-        }
-
-        return TRUE;
 }
 
 gboolean
@@ -746,6 +720,13 @@ _gdm_display_set_is_initial (GdmDisplay     *display,
 }
 
 static void
+_gdm_display_set_allow_timed_login (GdmDisplay     *display,
+                                    gboolean        allow_timed_login)
+{
+        display->priv->allow_timed_login = allow_timed_login;
+}
+
+static void
 gdm_display_set_property (GObject        *object,
                           guint           prop_id,
                           const GValue   *value,
@@ -783,6 +764,9 @@ gdm_display_set_property (GObject        *object,
         case PROP_IS_LOCAL:
                 _gdm_display_set_is_local (self, g_value_get_boolean (value));
                 break;
+        case PROP_ALLOW_TIMED_LOGIN:
+                _gdm_display_set_allow_timed_login (self, g_value_get_boolean (value));
+                break;
         case PROP_SLAVE_TYPE:
                 _gdm_display_set_slave_type (self, g_value_get_gtype (value));
                 break;
@@ -843,6 +827,9 @@ gdm_display_get_property (GObject        *object,
         case PROP_IS_INITIAL:
                 g_value_set_boolean (value, self->priv->is_initial);
                 break;
+        case PROP_ALLOW_TIMED_LOGIN:
+                g_value_set_boolean (value, self->priv->allow_timed_login);
+                break;
         default:
                 G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
                 break;
@@ -909,7 +896,7 @@ handle_get_timed_login_details (GdmDBusDisplay        *skeleton,
         char *username;
         int delay;
 
-        gdm_display_get_timed_login_details (display, &enabled, &username, &delay, NULL);
+        gdm_display_get_timed_login_details (display, &enabled, &username, &delay);
 
         gdm_dbus_display_complete_get_timed_login_details (skeleton,
                                                            invocation,
@@ -1163,8 +1150,6 @@ gdm_display_class_init (GdmDisplayClass *klass)
         object_class->dispose = gdm_display_dispose;
         object_class->finalize = gdm_display_finalize;
 
-        klass->get_timed_login_details = gdm_display_real_get_timed_login_details;
-
         g_object_class_install_property (object_class,
                                          PROP_ID,
                                          g_param_spec_string ("id",
@@ -1217,6 +1202,13 @@ gdm_display_class_init (GdmDisplayClass *klass)
                                                                FALSE,
                                                                G_PARAM_READWRITE | G_PARAM_CONSTRUCT));
         g_object_class_install_property (object_class,
+                                         PROP_ALLOW_TIMED_LOGIN,
+                                         g_param_spec_boolean ("allow-timed-login",
+                                                               NULL,
+                                                               NULL,
+                                                               TRUE,
+                                                               G_PARAM_READWRITE | G_PARAM_CONSTRUCT));
+        g_object_class_install_property (object_class,
                                          PROP_X11_COOKIE,
                                          g_param_spec_string ("x11-cookie",
                                                               "cookie",
diff --git a/daemon/gdm-display.h b/daemon/gdm-display.h
index 602b78d..4c3d649 100644
--- a/daemon/gdm-display.h
+++ b/daemon/gdm-display.h
@@ -54,12 +54,6 @@ typedef struct
 typedef struct
 {
         GObjectClass   parent_class;
-
-        /* methods */
-        void     (*get_timed_login_details)   (GdmDisplay *display,
-                                               gboolean   *enabled,
-                                               char      **username,
-                                               int        *delay);
 } GdmDisplayClass;
 
 typedef enum
@@ -116,11 +110,10 @@ gboolean            gdm_display_get_seat_id                    (GdmDisplay *disp
 gboolean            gdm_display_is_local                       (GdmDisplay *display,
                                                                 gboolean   *local,
                                                                 GError    **error);
-gboolean            gdm_display_get_timed_login_details        (GdmDisplay *display,
+void                gdm_display_get_timed_login_details        (GdmDisplay *display,
                                                                 gboolean   *enabled,
                                                                 char      **username,
-                                                                int        *delay,
-                                                                GError    **error);
+                                                                int        *delay);
 gboolean            gdm_display_is_initial                     (GdmDisplay  *display,
                                                                 gboolean    *initial,
                                                                 GError     **error);
diff --git a/daemon/gdm-manager.c b/daemon/gdm-manager.c
index 388f999..af755f3 100644
--- a/daemon/gdm-manager.c
+++ b/daemon/gdm-manager.c
@@ -1640,7 +1640,7 @@ on_session_client_connected (GdmSession      *session,
         g_object_get (display, "is-local", &display_is_local, NULL);
 
         enabled = FALSE;
-        gdm_display_get_timed_login_details (display, &enabled, &username, &delay, NULL);
+        gdm_display_get_timed_login_details (display, &enabled, &username, &delay);
 
         if (! enabled) {
                 return;
@@ -1760,7 +1760,7 @@ on_session_conversation_started (GdmSession *session,
         }
 
         enabled = FALSE;
-        gdm_display_get_timed_login_details (display, &enabled, &username, &delay, NULL);
+        gdm_display_get_timed_login_details (display, &enabled, &username, &delay);
         if (! enabled) {
                 return;
         }
@@ -1816,7 +1816,7 @@ start_autologin_conversation_if_necessary (GdmManager *manager,
         gboolean enabled;
         int delay = 0;
 
-        gdm_display_get_timed_login_details (display, &enabled, NULL, &delay, NULL);
+        gdm_display_get_timed_login_details (display, &enabled, NULL, &delay);
 
         if (delay == 0 && g_file_test (GDM_RAN_ONCE_MARKER_FILE, G_FILE_TEST_EXISTS)) {
                 return;
diff --git a/daemon/gdm-slave.c b/daemon/gdm-slave.c
index 907e7f8..84954f8 100644
--- a/daemon/gdm-slave.c
+++ b/daemon/gdm-slave.c
@@ -565,8 +565,6 @@ gdm_slave_get_timed_login_details (GdmSlave   *slave,
                                    int        *delayp)
 {
         struct passwd *pwent;
-        GError        *error;
-        gboolean       res;
         gboolean       enabled;
         char          *username;
         int            delay;
@@ -577,18 +575,12 @@ gdm_slave_get_timed_login_details (GdmSlave   *slave,
 
         g_debug ("GdmSlave: Requesting timed login details");
 
-        error = NULL;
-        res = gdm_display_get_timed_login_details (slave->priv->display,
-                                                   &enabled,
-                                                   &username,
-                                                   &delay,
-                                                   &error);
-        if (! res) {
-                g_warning ("Failed to get timed login details: %s", error->message);
-                g_error_free (error);
-        } else {
-                g_debug ("GdmSlave: Got timed login details: %d %s %d", enabled, username, delay);
-        }
+        gdm_display_get_timed_login_details (slave->priv->display,
+                                             &enabled,
+                                             &username,
+                                             &delay);
+
+        g_debug ("GdmSlave: Got timed login details: %d %s %d", enabled, username, delay);
 
         if (usernamep != NULL) {
                 *usernamep = gdm_slave_parse_enriched_login (slave, username);
@@ -627,7 +619,7 @@ gdm_slave_get_timed_login_details (GdmSlave   *slave,
                 g_debug ("Invalid NULL username for auto/timed login");
         }
 
-        return res;
+        return TRUE;
 }
 
 static void
diff --git a/daemon/gdm-transient-display.c b/daemon/gdm-transient-display.c
index 580b87f..21d7ebf 100644
--- a/daemon/gdm-transient-display.c
+++ b/daemon/gdm-transient-display.c
@@ -54,17 +54,6 @@ static void     gdm_transient_display_init         (GdmTransientDisplay      *di
 
 G_DEFINE_TYPE (GdmTransientDisplay, gdm_transient_display, GDM_TYPE_DISPLAY)
 
-static void
-gdm_transient_display_get_timed_login_details (GdmDisplay *display,
-                                               gboolean   *enabledp,
-                                               char      **usernamep,
-                                               int        *delayp)
-{
-        *enabledp = FALSE;
-        *usernamep = g_strdup ("");
-        *delayp = 0;
-}
-
 static GObject *
 gdm_transient_display_constructor (GType                  type,
                                    guint                  n_construct_properties,
@@ -98,13 +87,10 @@ static void
 gdm_transient_display_class_init (GdmTransientDisplayClass *klass)
 {
         GObjectClass *object_class = G_OBJECT_CLASS (klass);
-        GdmDisplayClass *display_class = GDM_DISPLAY_CLASS (klass);
 
         object_class->constructor = gdm_transient_display_constructor;
         object_class->finalize = gdm_transient_display_finalize;
 
-        display_class->get_timed_login_details = gdm_transient_display_get_timed_login_details;
-
         g_type_class_add_private (klass, sizeof (GdmTransientDisplayPrivate));
 }
 
@@ -125,6 +111,7 @@ gdm_transient_display_new (int display_number)
         object = g_object_new (GDM_TYPE_TRANSIENT_DISPLAY,
                                "x11-display-number", display_number,
                                "x11-display-name", x11_display,
+                               "allow-timed-login", FALSE,
                                NULL);
         g_free (x11_display);
 
diff --git a/daemon/gdm-xdmcp-display-factory.c b/daemon/gdm-xdmcp-display-factory.c
index 1e28d47..a321776 100644
--- a/daemon/gdm-xdmcp-display-factory.c
+++ b/daemon/gdm-xdmcp-display-factory.c
@@ -2112,6 +2112,7 @@ gdm_xdmcp_display_create (GdmXdmcpDisplayFactory *factory,
         if (use_chooser) {
                 g_object_set (G_OBJECT (display),
                               "slave-type", GDM_TYPE_XDMCP_CHOOSER_SLAVE,
+                              "allow-timed-login", FALSE,
                               NULL);
         }
 
diff --git a/daemon/gdm-xdmcp-display.c b/daemon/gdm-xdmcp-display.c
index f45ad53..8e95d55 100644
--- a/daemon/gdm-xdmcp-display.c
+++ b/daemon/gdm-xdmcp-display.c
@@ -141,35 +141,13 @@ gdm_xdmcp_display_get_property (GObject    *object,
 }
 
 static void
-gdm_xdmcp_display_get_timed_login_details (GdmDisplay *display,
-                                           gboolean   *enabledp,
-                                           char      **usernamep,
-                                           int        *delayp)
-{
-        *enabledp = FALSE;
-        *usernamep = g_strdup ("");
-        *delayp = 0;
-        gboolean allow_remote_autologin;
-
-        allow_remote_autologin = FALSE;
-        gdm_settings_direct_get_boolean (GDM_KEY_ALLOW_REMOTE_AUTOLOGIN, &allow_remote_autologin);
-
-        if ( allow_remote_autologin ) {
-                GDM_DISPLAY_CLASS (gdm_xdmcp_display_parent_class)->get_timed_login_details (display, 
enabledp, usernamep, delayp);
-        }
-}
-
-static void
 gdm_xdmcp_display_class_init (GdmXdmcpDisplayClass *klass)
 {
         GObjectClass    *object_class = G_OBJECT_CLASS (klass);
-        GdmDisplayClass *display_class = GDM_DISPLAY_CLASS (klass);
 
         object_class->get_property = gdm_xdmcp_display_get_property;
         object_class->set_property = gdm_xdmcp_display_set_property;
 
-        display_class->get_timed_login_details = gdm_xdmcp_display_get_timed_login_details;
-
         g_type_class_add_private (klass, sizeof (GdmXdmcpDisplayPrivate));
 
         g_object_class_install_property (object_class,
@@ -196,7 +174,14 @@ static void
 gdm_xdmcp_display_init (GdmXdmcpDisplay *xdmcp_display)
 {
 
+        gboolean allow_remote_autologin;
+
         xdmcp_display->priv = GDM_XDMCP_DISPLAY_GET_PRIVATE (xdmcp_display);
+
+        allow_remote_autologin = FALSE;
+        gdm_settings_direct_get_boolean (GDM_KEY_ALLOW_REMOTE_AUTOLOGIN, &allow_remote_autologin);
+
+        g_object_set (G_OBJECT (xdmcp_display), "allow-timed-login", allow_remote_autologin, NULL);
 }
 
 GdmDisplay *


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]