aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/app-section.c3
-rw-r--r--src/im-source-menu-item.c34
-rw-r--r--src/messages-service.c1
3 files changed, 34 insertions, 4 deletions
diff --git a/src/app-section.c b/src/app-section.c
index 1574892..0487fbb 100644
--- a/src/app-section.c
+++ b/src/app-section.c
@@ -695,6 +695,5 @@ app_section_get_uses_chat_status (AppSection *self)
{
AppSectionPrivate * priv = self->priv;
- /* chat status is only useful when the app is running */
- return priv->uses_chat_status && priv->source_actions;
+ return priv->uses_chat_status;
}
diff --git a/src/im-source-menu-item.c b/src/im-source-menu-item.c
index 269c75d..43c0afb 100644
--- a/src/im-source-menu-item.c
+++ b/src/im-source-menu-item.c
@@ -29,6 +29,9 @@ struct _ImSourceMenuItemPrivate
GtkWidget *icon;
GtkWidget *label;
GtkWidget *detail;
+
+ gint64 time;
+ guint timer_id;
};
enum
@@ -144,6 +147,19 @@ im_source_menu_item_time_span_string (gint64 timestamp)
}
static gboolean
+im_source_menu_item_update_time (gpointer data)
+{
+ ImSourceMenuItem *self = data;
+ gchar *str;
+
+ str = im_source_menu_item_time_span_string (self->priv->time);
+ gtk_label_set_text (GTK_LABEL (self->priv->detail), str);
+
+ g_free (str);
+ return TRUE;
+}
+
+static gboolean
im_source_menu_item_set_state (ImSourceMenuItem *self,
GVariant *state)
{
@@ -153,6 +169,12 @@ im_source_menu_item_set_state (ImSourceMenuItem *self,
const gchar *str;
gchar *detail;
+ if (priv->timer_id != 0)
+ {
+ g_source_remove (priv->timer_id);
+ priv->timer_id = 0;
+ }
+
g_return_val_if_fail (g_variant_is_of_type (state, G_VARIANT_TYPE ("(uxsb)")), FALSE);
g_variant_get (state, "(ux&sb)", &count, &time, &str, NULL);
@@ -160,7 +182,11 @@ im_source_menu_item_set_state (ImSourceMenuItem *self,
if (count != 0)
detail = g_strdup_printf ("%d", count);
else if (time != 0)
- detail = im_source_menu_item_time_span_string (time);
+ {
+ priv->time = time;
+ detail = im_source_menu_item_time_span_string (time);
+ priv->timer_id = g_timeout_add_seconds (59, im_source_menu_item_update_time, self);
+ }
else if (str != NULL && *str)
detail = collapse_whitespace (str);
else
@@ -275,6 +301,12 @@ im_source_menu_item_dispose (GObject *object)
{
ImSourceMenuItem *self = IM_SOURCE_MENU_ITEM (object);
+ if (self->priv->timer_id != 0)
+ {
+ g_source_remove (self->priv->timer_id);
+ self->priv->timer_id = 0;
+ }
+
if (self->priv->action_group)
im_source_menu_item_set_action_group (self, NULL);
diff --git a/src/messages-service.c b/src/messages-service.c
index 407b8ba..db7a8d7 100644
--- a/src/messages-service.c
+++ b/src/messages-service.c
@@ -313,7 +313,6 @@ change_status_action (GSimpleAction *action,
g_str_equal (status, "offline"));
if (!g_action_state_equal (G_ACTION (action), value)) {
- g_message ("%s", status);
g_simple_action_set_state (action, value);
indicator_messages_service_emit_status_changed (messages_service, status);
}