summaryrefslogtreecommitdiff
path: root/pidgin
diff options
context:
space:
mode:
Diffstat (limited to 'pidgin')
-rw-r--r--pidgin/pidgincontactlist.c53
-rw-r--r--pidgin/resources/ContactList/widget.ui36
2 files changed, 81 insertions, 8 deletions
diff --git a/pidgin/pidgincontactlist.c b/pidgin/pidgincontactlist.c
index 91a4047927..fd09bbe6a4 100644
--- a/pidgin/pidgincontactlist.c
+++ b/pidgin/pidgincontactlist.c
@@ -168,6 +168,57 @@ pidgin_contact_list_message_visible_cb(G_GNUC_UNUSED GtkListItem *item,
return !purple_strempty(message);
}
+static char *
+pidgin_contact_list_get_primitive_as_string(G_GNUC_UNUSED GObject *self,
+ PurplePresence *presence,
+ G_GNUC_UNUSED gpointer data)
+{
+ PurplePresencePrimitive primitive;
+ GDateTime *idle = NULL;
+ GString *str = g_string_new(NULL);
+ const char *tmp = NULL;
+
+ if(!PURPLE_IS_PRESENCE(presence)) {
+ return g_string_free(str, FALSE);
+ }
+
+ primitive = purple_presence_get_primitive(presence);
+ tmp = purple_presence_primitive_to_string(primitive);
+ if(tmp != NULL) {
+ g_string_append_printf(str, " - %s", tmp);
+ }
+
+ idle = purple_presence_get_idle_time(presence);
+ if(idle != NULL) {
+ GDateTime *now = NULL;
+ GTimeSpan duration;
+ guint days;
+ guint hours;
+ guint minutes;
+
+ now = g_date_time_new_now_utc();
+ duration = g_date_time_difference(now, idle);
+ g_date_time_unref(now);
+
+ days = duration / G_TIME_SPAN_DAY;
+ duration %= G_TIME_SPAN_DAY;
+ hours = duration / G_TIME_SPAN_HOUR;
+ duration %= G_TIME_SPAN_HOUR;
+ minutes = duration / G_TIME_SPAN_MINUTE;
+
+ if(days > 0) {
+ g_string_append_printf(str, _(" Idle %dd %dh %02dm"), days, hours,
+ minutes);
+ } else if(hours > 0) {
+ g_string_append_printf(str, _(" Idle %dh %02dm"), hours, minutes);
+ } else if(minutes > 0) {
+ g_string_append_printf(str, _(" Idle %02dm"), minutes);
+ }
+ }
+
+ return g_string_free(str, FALSE);
+}
+
/******************************************************************************
* GObject Implementation
*****************************************************************************/
@@ -212,6 +263,8 @@ pidgin_contact_list_class_init(PidginContactListClass *klass) {
pidgin_contact_list_activate_cb);
gtk_widget_class_bind_template_callback(widget_class,
pidgin_contact_list_message_visible_cb);
+ gtk_widget_class_bind_template_callback(widget_class,
+ pidgin_contact_list_get_primitive_as_string);
}
/******************************************************************************
diff --git a/pidgin/resources/ContactList/widget.ui b/pidgin/resources/ContactList/widget.ui
index d32a3e055b..db28d6f354 100644
--- a/pidgin/resources/ContactList/widget.ui
+++ b/pidgin/resources/ContactList/widget.ui
@@ -70,14 +70,34 @@ along with this library; if not, see <https://www.gnu.org/licenses/>.
<property name="vexpand">1</property>
<property name="valign">center</property>
<child>
- <object class="GtkLabel">
- <property name="xalign">0</property>
- <property name="use-markup">1</property>
- <binding name="label">
- <lookup name="name-for-display" type="PurplePerson">
- <lookup name="item">GtkListItem</lookup>
- </lookup>
- </binding>
+ <object class="GtkBox">
+ <property name="orientation">horizontal</property>
+
+ <child>
+ <object class="GtkLabel">
+ <property name="xalign">0</property>
+ <property name="use-markup">1</property>
+ <binding name="label">
+ <lookup name="name-for-display" type="PurplePerson">
+ <lookup name="item">GtkListItem</lookup>
+ </lookup>
+ </binding>
+ </object>
+ </child>
+ <child>
+ <object class="GtkLabel">
+ <property name="xalign">0</property>
+ <binding name="label">
+ <closure type="gchararray" function="pidgin_contact_list_get_primitive_as_string">
+ <lookup name="presence" type="PurpleContactInfo">
+ <lookup name="priority-contact-info" type="PurplePerson">
+ <lookup name="item">GtkListItem</lookup>
+ </lookup>
+ </lookup>
+ </closure>
+ </binding>
+ </object>
+ </child>
</object>
</child>
<child>