]> rtime.felk.cvut.cz Git - sojka/lightdm.git/commitdiff
Merge with trunk
authorRobert Ancell <robert.ancell@canonical.com>
Mon, 28 Apr 2014 23:25:28 +0000 (11:25 +1200)
committerRobert Ancell <robert.ancell@canonical.com>
Mon, 28 Apr 2014 23:25:28 +0000 (11:25 +1200)
1  2 
liblightdm-gobject/greeter.c
liblightdm-gobject/liblightdm-gobject-1.vapi
liblightdm-gobject/lightdm/greeter.h
tests/src/test-gobject-greeter.c

index 158d573cd1d0f7d2bb4a532aa9e463d21ef52711,d02890cda604819303f0e5186d0a7e6cc5fa8022..327ffec0fb39e60d8b716af643d7b5c623a8328b
@@@ -150,8 -150,29 +157,29 @@@ lightdm_greeter_new (void
      return g_object_new (LIGHTDM_TYPE_GREETER, NULL);
  }
  
+ /**
+  * lightdm_greeter_set_resettable:
+  * @greeter: A #LightDMGreeter
+  * @resettable: Whether the greeter wants to be reset instead of killed after the user logs in
+  *
+  * Set whether the greeter will be reset instead of killed after the user logs in.
+  * This must be called before lightdm_greeter_connect is called.
+  **/
+ void
+ lightdm_greeter_set_resettable (LightDMGreeter *greeter, gboolean resettable)
+ {
+     LightDMGreeterPrivate *priv;
+     g_return_if_fail (LIGHTDM_IS_GREETER (greeter));
+     priv = GET_PRIVATE (greeter);
+     g_return_if_fail (!priv->connected);
+     priv->resettable = resettable;
+ }
  static Request *
 -request_new (void)
 +request_new (GCancellable *cancellable, GAsyncReadyCallback callback, gpointer user_data)
  {
      Request *request;
  
@@@ -621,19 -644,20 +686,21 @@@ from_server_cb (GIOChannel *source, GIO
      return TRUE;
  }
  
 -static void
 +static gboolean
- send_connect (LightDMGreeter *greeter)
+ send_connect (LightDMGreeter *greeter, gboolean resettable)
  {
      guint8 message[MAX_MESSAGE_LENGTH];
      gsize offset = 0;
  
      g_debug ("Connecting to display manager...");
-     write_header (message, MAX_MESSAGE_LENGTH, GREETER_MESSAGE_CONNECT, string_length (VERSION), &offset);
+     write_header (message, MAX_MESSAGE_LENGTH, GREETER_MESSAGE_CONNECT, string_length (VERSION) + int_length (), &offset);
      write_string (message, MAX_MESSAGE_LENGTH, VERSION, &offset);
 -    write_message (greeter, message, offset);
+     write_int (message, MAX_MESSAGE_LENGTH, resettable ? 1 : 0, &offset);
++
 +    return send_message (greeter, message, offset);
  }
  
 -static void
 +static gboolean
  send_start_session (LightDMGreeter *greeter, const gchar *session)
  {
      guint8 message[MAX_MESSAGE_LENGTH];
@@@ -659,51 -683,7 +726,51 @@@ send_ensure_shared_data_dir (LightDMGre
  
      write_header (message, MAX_MESSAGE_LENGTH, GREETER_MESSAGE_ENSURE_SHARED_DIR, string_length (username), &offset);
      write_string (message, MAX_MESSAGE_LENGTH, username, &offset);
 -    write_message (greeter, message, offset);
 +    return send_message (greeter, message, offset);
 +}
 +
 +/**
 + * lightdm_greeter_connect:
 + * @greeter: The greeter to connect
 + * @cancellable: (allow-none): A #GCancellable or %NULL.
 + * @callback: (allow-none): A #GAsyncReadyCallback to call when completed or %NULL.
 + * @user_data: (allow-none): data to pass to the @callback or %NULL.
 + *
 + * Asynchronously connects the greeter to the display manager.
 + *
 + * When the operation is finished, @callback will be invoked. You can then call lightdm_greeter_connect_finish() to get the result of the operation.
 + *
 + * See lightdm_greeter_connect_sync() for the synchronous version.
 + **/
 +void
 +lightdm_greeter_connect (LightDMGreeter *greeter, GCancellable *cancellable, GAsyncReadyCallback callback, gpointer user_data)
 +{
 +    LightDMGreeterPrivate *priv;
 +    Request *request;
 +
 +    g_return_if_fail (LIGHTDM_IS_GREETER (greeter));
 +
 +    priv = GET_PRIVATE (greeter);
 +
 +    request = request_new (cancellable, callback, user_data);
 +    priv->connect_requests = g_list_append (priv->connect_requests, request);
-     send_connect (greeter);
++    send_connect (greeter, priv->resettable);
 +}
 +
 +/**
 + * lightdm_greeter_connect_finish:
 + * @result: A #GAsyncResult.
 + * @error: return location for a #GError, or %NULL
 + *
 + * Finishes an operation started with lightdm_greeter_connect().
 + *
 + * Return value: #TRUE if successfully connected
 + **/
 +gboolean
 +lightdm_greeter_connect_finish (LightDMGreeter *greeter, GAsyncResult *result, GError **error)
 +{
 +    g_return_if_fail (LIGHTDM_IS_GREETER (greeter));
 +    return REQUEST (result)->complete;
  }
  
  /**
@@@ -725,9 -706,28 +792,9 @@@ lightdm_greeter_connect_sync (LightDMGr
  
      priv = GET_PRIVATE (greeter);
  
 -    fd = g_getenv ("LIGHTDM_TO_SERVER_FD");
 -    if (!fd)
 -    {
 -        g_warning ("No LIGHTDM_TO_SERVER_FD environment variable");
 -        return FALSE;
 -    }
 -    priv->to_server_channel = g_io_channel_unix_new (atoi (fd));
 -    g_io_channel_set_encoding (priv->to_server_channel, NULL, NULL);
 -
 -    fd = g_getenv ("LIGHTDM_FROM_SERVER_FD");
 -    if (!fd)
 -    {
 -        g_warning ("No LIGHTDM_FROM_SERVER_FD environment variable");
 -        return FALSE;
 -    }
 -    priv->from_server_channel = g_io_channel_unix_new (atoi (fd));
 -    g_io_channel_set_encoding (priv->from_server_channel, NULL, NULL);
 -    g_io_add_watch (priv->from_server_channel, G_IO_IN, from_server_cb, greeter);
 -
      /* Read until we are connected */
-     send_connect (greeter);
+     send_connect (greeter, priv->resettable);
 -    request = request_new ();
 +    request = request_new (NULL, NULL, NULL);
      priv->connect_requests = g_list_append (priv->connect_requests, g_object_ref (request));
      do
      {
index 6aabf3397b7b0f8281df328c4d74b3a53227eaa7,ea4cecd2486304ebc3e463634e9f1457a9f0b306..26f1205d0c784368571933e62da866c8a964f903
@@@ -48,10 -47,7 +48,10 @@@ namespace LightDM 
          public bool in_authentication { get; }
          public bool is_authenticated { get; }
          public unowned string? authentication_user { get; }
-         public void start_session_sync (string? session = null) throws GLib.Error;
 +        public async void start_session (string? session = null) throws GLib.Error;
+         public bool start_session_sync (string? session = null) throws GLib.Error;
 +        public async string ensure_shared_data_dir (string username);
 +        public string ensure_shared_data_dir_sync (string username);
      }
      [CCode (has_type_id = false)]
      public enum MessageType {
index f43aaebdccfe503ea9da74c2f1f127656a45f826,5fcf4fe340d5289673600f49ab5373b9789face5..dde714257d16436e7cddd1c7e48c2245efa92092
@@@ -72,10 -71,8 +72,12 @@@ GType lightdm_greeter_get_type (void)
  
  LightDMGreeter *lightdm_greeter_new (void);
  
+ void lightdm_greeter_set_resettable (LightDMGreeter *greeter, gboolean resettable);
 +void lightdm_greeter_connect (LightDMGreeter *greeter, GCancellable *cancellable, GAsyncReadyCallback callback, gpointer user_data);
 +
 +gboolean lightdm_greeter_connect_finish (LightDMGreeter *greeter, GAsyncResult *result, GError **error);
 +
  gboolean lightdm_greeter_connect_sync (LightDMGreeter *greeter, GError **error);
  
  const gchar *lightdm_greeter_get_hint (LightDMGreeter *greeter, const gchar *name);
index fe790b4e46f7f35c36faac42de53df09384db1b2,68bdd20457c0dce279def790f5feb6286773879a..9b0c43a1b586228418f9c488fe82a73a3e490ee5
@@@ -336,38 -350,6 +368,25 @@@ user_removed_cb (LightDMUserList *user_
      status_notify ("%s USER-REMOVED USERNAME=%s", greeter_id, lightdm_user_get_name (user));
  }
  
-     if (lightdm_greeter_get_select_user_hint (greeter))
-         status_notify ("%s SELECT-USER-HINT USERNAME=%s", greeter_id, lightdm_greeter_get_select_user_hint (greeter));
-     if (lightdm_greeter_get_select_guest_hint (greeter))
-         status_notify ("%s SELECT-GUEST-HINT", greeter_id);
-     if (lightdm_greeter_get_lock_hint (greeter))
-         status_notify ("%s LOCK-HINT", greeter_id);
-     if (!lightdm_greeter_get_has_guest_account_hint (greeter))
-         status_notify ("%s HAS-GUEST-ACCOUNT-HINT=FALSE", greeter_id);
-     if (lightdm_greeter_get_hide_users_hint (greeter))
-         status_notify ("%s HIDE-USERS-HINT", greeter_id);
-     if (lightdm_greeter_get_show_manual_login_hint (greeter))
-         status_notify ("%s SHOW-MANUAL-LOGIN-HINT", greeter_id);
-     if (!lightdm_greeter_get_show_remote_login_hint (greeter))
-         status_notify ("%s SHOW-REMOTE-LOGIN-HINT=FALSE", greeter_id);
 +static void
 +connect_finished (GObject *object, GAsyncResult *result, gpointer data)
 +{
 +    LightDMGreeter *greeter = LIGHTDM_GREETER (object);
 +    GError *error = NULL;
 +
 +    if (!lightdm_greeter_connect_finish (greeter, result, &error))
 +    {
 +        status_notify ("%s FAIL-CONNECT-DAEMON", greeter_id);
 +        exit_code = EXIT_FAILURE;
 +        g_main_loop_quit (loop);
 +        return;
 +    }
 +
 +    status_notify ("%s CONNECTED-TO-DAEMON", greeter_id);
 +
++    notify_hints (greeter);
 +}
 +
  int
  main (int argc, char **argv)
  {