#include "lightdm/greeter.h"
+G_DEFINE_QUARK (lightdm_greeter_error, lightdm_greeter_error)
+
enum {
PROP_0,
PROP_DEFAULT_SESSION_HINT,
GAsyncReadyCallback callback;
gpointer user_data;
gboolean complete;
+ gboolean connected;
guint32 return_code;
gchar *dir;
} Request;
#define REQUEST(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), request_get_type (), Request))
G_DEFINE_TYPE_WITH_CODE (Request, request, G_TYPE_OBJECT, G_IMPLEMENT_INTERFACE (G_TYPE_ASYNC_RESULT, request_iface_init));
+GType
+lightdm_greeter_error_get_type (void)
+{
+ static GType enum_type = 0;
+
+ if (G_UNLIKELY(enum_type == 0)) {
+ static const GEnumValue values[] = {
+ { LIGHTDM_GREETER_ERROR_CONNECTION_FAILED, "LIGHTDM_GREETER_ERROR_CONNECTION_FAILED", "connection-failed" },
+ { LIGHTDM_GREETER_ERROR_SESSION_FAILED, "LIGHTDM_GREETER_ERROR_SESSION_FAILED", "session-failed" },
+ { 0, NULL, NULL }
+ };
+ enum_type = g_enum_register_static (g_intern_static_string ("LightDMGreeterError"), values);
+ }
+
+ return enum_type;
+}
+
GType
lightdm_prompt_type_get_type (void)
{
request = g_list_nth_data (priv->connect_requests, 0);
if (request)
{
+ request->connected = TRUE;
request_complete (request, G_OBJECT (greeter));
priv->connect_requests = g_list_remove (priv->connect_requests, request);
g_object_unref (request);
gboolean
lightdm_greeter_connect_to_daemon_finish (LightDMGreeter *greeter, GAsyncResult *result, GError **error)
{
+ Request *request = REQUEST (result);
+
g_return_val_if_fail (LIGHTDM_IS_GREETER (greeter), FALSE);
- return REQUEST (result)->complete;
+
+ if (request->connected)
+ return TRUE;
+ else
+ {
+ g_set_error_literal (error, LIGHTDM_GREETER_ERROR, LIGHTDM_GREETER_ERROR_CONNECTION_FAILED, "Failed to connect to daemon");
+ return FALSE;
+ }
}
/**
{
LightDMGreeterPrivate *priv;
Request *request;
- gboolean result;
g_return_val_if_fail (LIGHTDM_IS_GREETER (greeter), FALSE);
g_free (message);
} while (!request->complete);
- result = request->complete;
- g_object_unref (request);
-
- return result;
+ return lightdm_greeter_connect_to_daemon_finish (greeter, G_ASYNC_RESULT (request), error);
}
/**
gboolean
lightdm_greeter_start_session_finish (LightDMGreeter *greeter, GAsyncResult *result, GError **error)
{
+ Request *request = REQUEST (result);
+
g_return_val_if_fail (LIGHTDM_IS_GREETER (greeter), FALSE);
- return REQUEST (result)->return_code == 0;
+
+ if (request->return_code == 0)
+ return TRUE;
+ else
+ {
+ g_set_error (error, LIGHTDM_GREETER_ERROR, LIGHTDM_GREETER_ERROR_SESSION_FAILED, "Session returned error code %d", request->return_code);
+ return FALSE;
+ }
}
/**
{
LightDMGreeterPrivate *priv;
Request *request;
- guint32 return_code;
g_return_val_if_fail (LIGHTDM_IS_GREETER (greeter), FALSE);
g_free (message);
} while (!request->complete);
- return_code = request->return_code;
- g_object_unref (request);
-
- return return_code == 0;
+ return lightdm_greeter_start_session_finish (greeter, G_ASYNC_RESULT (request), error);
}
/**