diff options
-rw-r--r-- | NEWS | 1 | ||||
-rw-r--r-- | liblightdm-gobject/liblightdm-gobject-1.vapi | 1 | ||||
-rw-r--r-- | liblightdm-gobject/lightdm/user.h | 2 | ||||
-rw-r--r-- | liblightdm-gobject/user.c | 75 | ||||
-rw-r--r-- | liblightdm-qt/QLightDM/usersmodel.h | 3 | ||||
-rw-r--r-- | liblightdm-qt/usersmodel.cpp | 7 |
6 files changed, 80 insertions, 9 deletions
@@ -8,6 +8,7 @@ Overview of changes in lightdm 1.1.3 * Add Lock D-Bus method that locks the seat and provides a hint to the greeter to be in lock mode. * Automatically lock sessions when switching away from them + * Add a has-messages property to liblightdm Overview of changes in lightdm 1.1.2 diff --git a/liblightdm-gobject/liblightdm-gobject-1.vapi b/liblightdm-gobject/liblightdm-gobject-1.vapi index cb4aef6e..88d67850 100644 --- a/liblightdm-gobject/liblightdm-gobject-1.vapi +++ b/liblightdm-gobject/liblightdm-gobject-1.vapi @@ -96,5 +96,6 @@ namespace LightDM { public unowned string home_directory { get; } public unowned string session { get; } public unowned string background { get; } + public bool has_messages { get; } } } diff --git a/liblightdm-gobject/lightdm/user.h b/liblightdm-gobject/lightdm/user.h index eac0df51..90597409 100644 --- a/liblightdm-gobject/lightdm/user.h +++ b/liblightdm-gobject/lightdm/user.h @@ -105,6 +105,8 @@ const gchar *lightdm_user_get_session (LightDMUser *user); gboolean lightdm_user_get_logged_in (LightDMUser *user); +gboolean lightdm_user_get_has_messages (LightDMUser *user); + G_END_DECLS #endif /* _LIGHTDM_USER_H_ */ diff --git a/liblightdm-gobject/user.c b/liblightdm-gobject/user.c index b974f2ad..1842908a 100644 --- a/liblightdm-gobject/user.c +++ b/liblightdm-gobject/user.c @@ -40,7 +40,8 @@ enum USER_PROP_LAYOUT, USER_PROP_LAYOUTS, USER_PROP_SESSION, - USER_PROP_LOGGED_IN + USER_PROP_LOGGED_IN, + USER_PROP_HAS_MESSAGES }; enum @@ -96,6 +97,7 @@ typedef struct gchar *home_directory; gchar *image; gchar *background; + gboolean has_messages; GKeyFile *dmrc_file; gchar *language; @@ -1162,11 +1164,10 @@ load_dmrc (LightDMUser *user) priv->session = g_key_file_get_string (priv->dmrc_file, "Desktop", "Session", NULL); } -static gchar * -get_string_property (GDBusProxy *proxy, const gchar *property) +static GVariant * +get_property (GDBusProxy *proxy, const gchar *property) { GVariant *answer; - gchar *rv; if (!proxy) return NULL; @@ -1179,23 +1180,53 @@ get_string_property (GDBusProxy *proxy, const gchar *property) return NULL; } - if (!g_variant_is_of_type (answer, G_VARIANT_TYPE ("s"))) + return answer; +} + +static gboolean +get_boolean_property (GDBusProxy *proxy, const gchar *property) +{ + GVariant *answer; + gboolean rv; + + answer = get_property (proxy, property); + if (!g_variant_is_of_type (answer, G_VARIANT_TYPE_BOOLEAN)) { g_warning ("Unexpected accounts property type for %s: %s", property, g_variant_get_type_string (answer)); g_variant_unref (answer); - return NULL; + return FALSE; } - g_variant_get (answer, "s", &rv); + rv = g_variant_get_boolean (answer); + g_variant_unref (answer); + + return rv; +} + +static gchar * +get_string_property (GDBusProxy *proxy, const gchar *property) +{ + GVariant *answer; + gchar *rv; + answer = get_property (proxy, property); + if (!g_variant_is_of_type (answer, G_VARIANT_TYPE_STRING)) + { + g_warning ("Unexpected accounts property type for %s: %s", + property, g_variant_get_type_string (answer)); + g_variant_unref (answer); + return NULL; + } + + rv = g_strdup (g_variant_get_string (answer, NULL)); if (strcmp (rv, "") == 0) { g_free (rv); rv = NULL; } - g_variant_unref (answer); + return rv; } @@ -1267,6 +1298,8 @@ load_accounts_service (LightDMUser *user) priv->layouts = value; } + priv->has_messages = get_boolean_property (account->proxy, "XHasMessages"); + return TRUE; } @@ -1376,6 +1409,22 @@ lightdm_user_get_logged_in (LightDMUser *user) return FALSE; } +/** + * lightdm_user_get_has_messages: + * @user: A #LightDMUser + * + * Check if a user has waiting messages. + * + * Return value: #TRUE if the user has waiting messages. + **/ +gboolean +lightdm_user_get_has_messages (LightDMUser *user) +{ + g_return_val_if_fail (LIGHTDM_IS_USER (user), FALSE); + load_user_values (user); + return GET_USER_PRIVATE (user)->has_messages; +} + static void lightdm_user_init (LightDMUser *user) { @@ -1435,6 +1484,9 @@ lightdm_user_get_property (GObject *object, case USER_PROP_LOGGED_IN: g_value_set_boolean (value, lightdm_user_get_logged_in (self)); break; + case USER_PROP_HAS_MESSAGES: + g_value_set_boolean (value, lightdm_user_get_has_messages (self)); + break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); break; @@ -1545,6 +1597,13 @@ lightdm_user_class_init (LightDMUserClass *klass) "TRUE if the user is currently in a session", FALSE, G_PARAM_READWRITE)); + g_object_class_install_property (object_class, + USER_PROP_LOGGED_IN, + g_param_spec_boolean ("has-messages", + "has-messages", + "TRUE if the user is has waiting messages", + FALSE, + G_PARAM_READWRITE)); /** * LightDMUser::changed: diff --git a/liblightdm-qt/QLightDM/usersmodel.h b/liblightdm-qt/QLightDM/usersmodel.h index d6524035..24eafc93 100644 --- a/liblightdm-qt/QLightDM/usersmodel.h +++ b/liblightdm-qt/QLightDM/usersmodel.h @@ -32,7 +32,8 @@ public: RealNameRole, LoggedInRole, BackgroundRole, - SessionRole}; + SessionRole, + HasMessagesRole}; int rowCount(const QModelIndex &parent) const; QVariant data(const QModelIndex &index, int role) const; diff --git a/liblightdm-qt/usersmodel.cpp b/liblightdm-qt/usersmodel.cpp index 9e79bb2d..fe30aeee 100644 --- a/liblightdm-qt/usersmodel.cpp +++ b/liblightdm-qt/usersmodel.cpp @@ -29,6 +29,7 @@ public: QString background; QString session; bool isLoggedIn; + bool hasMessages; QString displayName() const; }; @@ -96,6 +97,7 @@ void UsersModelPrivate::loadUsers() user.background = QString::fromLocal8Bit(lightdm_user_get_background(ldmUser)); user.session = QString::fromLocal8Bit(lightdm_user_get_session(ldmUser)); user.isLoggedIn = lightdm_user_get_logged_in(ldmUser); + user.hasMessages = lightdm_user_get_has_messages(ldmUser); users.append(user); } @@ -122,6 +124,7 @@ void UsersModelPrivate::cb_userAdded(LightDMUserList *user_list, LightDMUser *ld user.image = QString::fromLocal8Bit(lightdm_user_get_image(ldmUser)); user.background = QString::fromLocal8Bit(lightdm_user_get_background(ldmUser)); user.isLoggedIn = lightdm_user_get_logged_in(ldmUser); + user.hasMessages = lightdm_user_get_has_messages(ldmUser); that->users.append(user); that->q_func()->endInsertRows(); @@ -143,6 +146,7 @@ void UsersModelPrivate::cb_userChanged(LightDMUserList *user_list, LightDMUser * that->users[i].image = QString::fromLocal8Bit(lightdm_user_get_image(ldmUser)); that->users[i].background = QString::fromLocal8Bit(lightdm_user_get_background(ldmUser)); that->users[i].isLoggedIn = lightdm_user_get_logged_in(ldmUser); + that->users[i].hasMessages = lightdm_user_get_has_messages(ldmUser); QModelIndex index = that->q_ptr->createIndex(i, 0); that->q_ptr->dataChanged(index, index); @@ -180,6 +184,7 @@ UsersModel::UsersModel(QObject *parent) : roles[NameRole] = "name"; roles[LoggedInRole] = "loggedIn"; roles[SessionRole] = "session"; + roles[HasMessagesRole] = "hasMessages"; setRoleNames(roles); d->loadUsers(); @@ -225,6 +230,8 @@ QVariant UsersModel::data(const QModelIndex &index, int role) const return d->users[row].isLoggedIn; case UsersModel::BackgroundRole: return QPixmap(d->users[row].background); + case UsersModel::HasMessagesRole: + return d->users[row].hasMessages; } return QVariant(); |