]> rtime.felk.cvut.cz Git - sojka/lightdm.git/commitdiff
Add a has-messages property to liblightdm
authorRobert Ancell <robert.ancell@canonical.com>
Wed, 15 Feb 2012 00:00:16 +0000 (11:00 +1100)
committerRobert Ancell <robert.ancell@canonical.com>
Wed, 15 Feb 2012 00:00:16 +0000 (11:00 +1100)
NEWS
liblightdm-gobject/liblightdm-gobject-1.vapi
liblightdm-gobject/lightdm/user.h
liblightdm-gobject/user.c
liblightdm-qt/QLightDM/usersmodel.h
liblightdm-qt/usersmodel.cpp

diff --git a/NEWS b/NEWS
index b268e7eb4a43cae7d501e4580b1d55da7cfe83f9..cf03e4f158e7abd5ed503f817c598e5b2956ac5f 100644 (file)
--- 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
 
index cb4aef6e932c54814f88668c5e8988f0239957de..88d678500f98abec50f057ab6ba713a1e720a5a1 100644 (file)
@@ -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; }
     }
 }
index eac0df51e9f816e5eb27e28da6debec94e03016c..905974099dc2ad9d7c7802b68edb9588e1491dc3 100644 (file)
@@ -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_ */
index b974f2adfaf38d860b421eb4f850d64e6e2cc81b..1842908a3fe608d11c29f9a3dc68f9ba1678c71d 100644 (file)
@@ -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:
index d6524035f3473f77507ada2b8afc4a477946fcb3..24eafc93bba98824b42101d61e4611a68411ffef 100644 (file)
@@ -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;
index 9e79bb2d1bc3c5c5af78574146efc985530df7f4..fe30aeeee9147289b258514df7c1c43eb0a505b4 100644 (file)
@@ -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();