summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--NEWS1
-rw-r--r--liblightdm-gobject/liblightdm-gobject-1.vapi1
-rw-r--r--liblightdm-gobject/lightdm/user.h2
-rw-r--r--liblightdm-gobject/user.c75
-rw-r--r--liblightdm-qt/QLightDM/usersmodel.h3
-rw-r--r--liblightdm-qt/usersmodel.cpp7
6 files changed, 80 insertions, 9 deletions
diff --git a/NEWS b/NEWS
index b268e7eb..cf03e4f1 100644
--- a/NEWS
+++ b/NEWS
@@ -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();