pidgin/pidgintypinglabel.c

Sun, 03 Nov 2024 00:05:44 -0500

author
Gary Kramlich <grim@reaperworld.com>
date
Sun, 03 Nov 2024 00:05:44 -0500
changeset 43045
308e8d0ce68c
parent 42943
d453240767f9
permissions
-rw-r--r--

remove purple3-url-handler.desktop.in.in

The application that did the launching was removed long ago. Also this should
be implemented by the user interfaces and they might provide separate files to
groups schemas as well.

Testing Done:
Called in the turtles.

Reviewed at https://reviews.imfreedom.org/r/3640/

42943
d453240767f9 Create Pidgin.TypingLabel
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
1 /*
d453240767f9 Create Pidgin.TypingLabel
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
2 * Pidgin - Internet Messenger
d453240767f9 Create Pidgin.TypingLabel
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
3 * Copyright (C) Pidgin Developers <devel@pidgin.im>
d453240767f9 Create Pidgin.TypingLabel
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
4 *
d453240767f9 Create Pidgin.TypingLabel
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
5 * Pidgin is the legal property of its developers, whose names are too numerous
d453240767f9 Create Pidgin.TypingLabel
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
6 * to list here. Please refer to the COPYRIGHT file distributed with this
d453240767f9 Create Pidgin.TypingLabel
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
7 * source distribution.
d453240767f9 Create Pidgin.TypingLabel
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
8 *
d453240767f9 Create Pidgin.TypingLabel
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
9 * This program is free software; you can redistribute it and/or modify
d453240767f9 Create Pidgin.TypingLabel
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
10 * it under the terms of the GNU General Public License as published by
d453240767f9 Create Pidgin.TypingLabel
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
11 * the Free Software Foundation; either version 2 of the License, or
d453240767f9 Create Pidgin.TypingLabel
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
12 * (at your option) any later version.
d453240767f9 Create Pidgin.TypingLabel
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
13 *
d453240767f9 Create Pidgin.TypingLabel
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
14 * This program is distributed in the hope that it will be useful,
d453240767f9 Create Pidgin.TypingLabel
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
15 * but WITHOUT ANY WARRANTY; without even the implied warranty of
d453240767f9 Create Pidgin.TypingLabel
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
16 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
d453240767f9 Create Pidgin.TypingLabel
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
17 * GNU General Public License for more details.
d453240767f9 Create Pidgin.TypingLabel
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
18 *
d453240767f9 Create Pidgin.TypingLabel
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
19 * You should have received a copy of the GNU General Public License
d453240767f9 Create Pidgin.TypingLabel
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
20 * along with this program; if not, see <https://www.gnu.org/licenses/>.
d453240767f9 Create Pidgin.TypingLabel
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
21 */
d453240767f9 Create Pidgin.TypingLabel
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
22
d453240767f9 Create Pidgin.TypingLabel
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
23 #include <glib/gi18n-lib.h>
d453240767f9 Create Pidgin.TypingLabel
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
24
d453240767f9 Create Pidgin.TypingLabel
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
25 #include "pidgintypinglabel.h"
d453240767f9 Create Pidgin.TypingLabel
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
26
d453240767f9 Create Pidgin.TypingLabel
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
27 struct _PidginTypingLabel {
d453240767f9 Create Pidgin.TypingLabel
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
28 GtkBox parent;
d453240767f9 Create Pidgin.TypingLabel
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
29
d453240767f9 Create Pidgin.TypingLabel
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
30 PurpleConversation *conversation;
d453240767f9 Create Pidgin.TypingLabel
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
31
d453240767f9 Create Pidgin.TypingLabel
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
32 GtkLabel *label;
d453240767f9 Create Pidgin.TypingLabel
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
33
d453240767f9 Create Pidgin.TypingLabel
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
34 GtkFilterListModel *typers;
d453240767f9 Create Pidgin.TypingLabel
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
35 };
d453240767f9 Create Pidgin.TypingLabel
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
36
d453240767f9 Create Pidgin.TypingLabel
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
37 enum {
d453240767f9 Create Pidgin.TypingLabel
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
38 PROP_0,
d453240767f9 Create Pidgin.TypingLabel
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
39 PROP_CONVERSATION,
d453240767f9 Create Pidgin.TypingLabel
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
40 N_PROPERTIES,
d453240767f9 Create Pidgin.TypingLabel
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
41 };
d453240767f9 Create Pidgin.TypingLabel
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
42 static GParamSpec *properties[N_PROPERTIES] = {NULL, };
d453240767f9 Create Pidgin.TypingLabel
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
43
d453240767f9 Create Pidgin.TypingLabel
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
44 static void
d453240767f9 Create Pidgin.TypingLabel
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
45 pidgin_typing_label_items_changed_cb(GListModel *model, guint position,
d453240767f9 Create Pidgin.TypingLabel
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
46 guint removed, guint added,
d453240767f9 Create Pidgin.TypingLabel
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
47 gpointer data);
d453240767f9 Create Pidgin.TypingLabel
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
48
d453240767f9 Create Pidgin.TypingLabel
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
49 /******************************************************************************
d453240767f9 Create Pidgin.TypingLabel
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
50 * Helpers
d453240767f9 Create Pidgin.TypingLabel
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
51 *****************************************************************************/
d453240767f9 Create Pidgin.TypingLabel
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
52 static gboolean
d453240767f9 Create Pidgin.TypingLabel
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
53 pidgin_typing_label_filter_active_typers(GObject *item, gpointer data) {
d453240767f9 Create Pidgin.TypingLabel
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
54 PurpleAccount *account = NULL;
d453240767f9 Create Pidgin.TypingLabel
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
55 PurpleContactInfo *account_info = NULL;
d453240767f9 Create Pidgin.TypingLabel
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
56 PurpleContactInfo *member_info = NULL;
d453240767f9 Create Pidgin.TypingLabel
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
57 PurpleConversation *conversation = data;
d453240767f9 Create Pidgin.TypingLabel
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
58 PurpleConversationMember *member = PURPLE_CONVERSATION_MEMBER(item);
d453240767f9 Create Pidgin.TypingLabel
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
59
d453240767f9 Create Pidgin.TypingLabel
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
60 account = purple_conversation_get_account(conversation);
d453240767f9 Create Pidgin.TypingLabel
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
61 account_info = purple_account_get_contact_info(account);
d453240767f9 Create Pidgin.TypingLabel
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
62
d453240767f9 Create Pidgin.TypingLabel
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
63 member_info = purple_conversation_member_get_contact_info(member);
d453240767f9 Create Pidgin.TypingLabel
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
64
d453240767f9 Create Pidgin.TypingLabel
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
65 /* We don't want to show our own account, so if member_info and
d453240767f9 Create Pidgin.TypingLabel
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
66 * account_info match, we return FALSE.
d453240767f9 Create Pidgin.TypingLabel
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
67 */
d453240767f9 Create Pidgin.TypingLabel
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
68 if(member_info == account_info) {
d453240767f9 Create Pidgin.TypingLabel
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
69 return FALSE;
d453240767f9 Create Pidgin.TypingLabel
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
70 }
d453240767f9 Create Pidgin.TypingLabel
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
71
d453240767f9 Create Pidgin.TypingLabel
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
72 return TRUE;
d453240767f9 Create Pidgin.TypingLabel
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
73 }
d453240767f9 Create Pidgin.TypingLabel
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
74
d453240767f9 Create Pidgin.TypingLabel
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
75 static void
d453240767f9 Create Pidgin.TypingLabel
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
76 pidgin_typing_label_set_conversation(PidginTypingLabel *label,
d453240767f9 Create Pidgin.TypingLabel
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
77 PurpleConversation *conversation)
d453240767f9 Create Pidgin.TypingLabel
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
78 {
d453240767f9 Create Pidgin.TypingLabel
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
79 g_return_if_fail(PIDGIN_IS_TYPING_LABEL(label));
d453240767f9 Create Pidgin.TypingLabel
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
80
d453240767f9 Create Pidgin.TypingLabel
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
81 if(g_set_object(&label->conversation, conversation)) {
d453240767f9 Create Pidgin.TypingLabel
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
82 if(PURPLE_IS_CONVERSATION(conversation)) {
d453240767f9 Create Pidgin.TypingLabel
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
83 PurpleConversationMembers *members = NULL;
d453240767f9 Create Pidgin.TypingLabel
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
84 GtkCustomFilter *filter = NULL;
d453240767f9 Create Pidgin.TypingLabel
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
85 GListModel *active_typers = NULL;
d453240767f9 Create Pidgin.TypingLabel
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
86
d453240767f9 Create Pidgin.TypingLabel
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
87 members = purple_conversation_get_members(conversation);
d453240767f9 Create Pidgin.TypingLabel
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
88
d453240767f9 Create Pidgin.TypingLabel
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
89 active_typers = purple_conversation_members_get_active_typers(members);
d453240767f9 Create Pidgin.TypingLabel
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
90
d453240767f9 Create Pidgin.TypingLabel
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
91 gtk_filter_list_model_set_model(GTK_FILTER_LIST_MODEL(label->typers),
d453240767f9 Create Pidgin.TypingLabel
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
92 active_typers);
d453240767f9 Create Pidgin.TypingLabel
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
93
d453240767f9 Create Pidgin.TypingLabel
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
94 filter = gtk_custom_filter_new((GtkCustomFilterFunc)pidgin_typing_label_filter_active_typers,
d453240767f9 Create Pidgin.TypingLabel
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
95 conversation, NULL);
d453240767f9 Create Pidgin.TypingLabel
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
96 gtk_filter_list_model_set_filter(GTK_FILTER_LIST_MODEL(label->typers),
d453240767f9 Create Pidgin.TypingLabel
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
97 GTK_FILTER(filter));
d453240767f9 Create Pidgin.TypingLabel
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
98 g_clear_object(&filter);
d453240767f9 Create Pidgin.TypingLabel
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
99
d453240767f9 Create Pidgin.TypingLabel
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
100 g_signal_connect_object(label->typers, "items-changed",
d453240767f9 Create Pidgin.TypingLabel
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
101 G_CALLBACK(pidgin_typing_label_items_changed_cb),
d453240767f9 Create Pidgin.TypingLabel
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
102 label, G_CONNECT_DEFAULT);
d453240767f9 Create Pidgin.TypingLabel
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
103 }
d453240767f9 Create Pidgin.TypingLabel
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
104
d453240767f9 Create Pidgin.TypingLabel
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
105 g_object_notify_by_pspec(G_OBJECT(label),
d453240767f9 Create Pidgin.TypingLabel
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
106 properties[PROP_CONVERSATION]);
d453240767f9 Create Pidgin.TypingLabel
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
107 }
d453240767f9 Create Pidgin.TypingLabel
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
108 }
d453240767f9 Create Pidgin.TypingLabel
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
109
d453240767f9 Create Pidgin.TypingLabel
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
110 /******************************************************************************
d453240767f9 Create Pidgin.TypingLabel
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
111 * Callbacks
d453240767f9 Create Pidgin.TypingLabel
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
112 *****************************************************************************/
d453240767f9 Create Pidgin.TypingLabel
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
113 static void
d453240767f9 Create Pidgin.TypingLabel
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
114 pidgin_typing_label_items_changed_cb(GListModel *model,
d453240767f9 Create Pidgin.TypingLabel
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
115 G_GNUC_UNUSED guint position,
d453240767f9 Create Pidgin.TypingLabel
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
116 G_GNUC_UNUSED guint removed,
d453240767f9 Create Pidgin.TypingLabel
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
117 G_GNUC_UNUSED guint added,
d453240767f9 Create Pidgin.TypingLabel
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
118 gpointer data)
d453240767f9 Create Pidgin.TypingLabel
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
119 {
d453240767f9 Create Pidgin.TypingLabel
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
120 PidginTypingLabel *label = data;
d453240767f9 Create Pidgin.TypingLabel
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
121 guint n_items = 0;
d453240767f9 Create Pidgin.TypingLabel
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
122
d453240767f9 Create Pidgin.TypingLabel
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
123 n_items = g_list_model_get_n_items(model);
d453240767f9 Create Pidgin.TypingLabel
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
124 if(n_items == 0) {
d453240767f9 Create Pidgin.TypingLabel
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
125 gtk_label_set_label(label->label, "");
d453240767f9 Create Pidgin.TypingLabel
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
126 } else if(n_items == 1) {
d453240767f9 Create Pidgin.TypingLabel
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
127 PurpleConversationMember *member = NULL;
d453240767f9 Create Pidgin.TypingLabel
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
128 char *text = NULL;
d453240767f9 Create Pidgin.TypingLabel
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
129 const char *name = NULL;
d453240767f9 Create Pidgin.TypingLabel
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
130
d453240767f9 Create Pidgin.TypingLabel
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
131 member = g_list_model_get_item(model, 0);
d453240767f9 Create Pidgin.TypingLabel
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
132 name = purple_conversation_member_get_name_for_display(member);
d453240767f9 Create Pidgin.TypingLabel
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
133 text = g_strdup_printf(_("<b>%s</b> is typing..."), name);
d453240767f9 Create Pidgin.TypingLabel
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
134
d453240767f9 Create Pidgin.TypingLabel
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
135 gtk_label_set_label(label->label, text);
d453240767f9 Create Pidgin.TypingLabel
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
136
d453240767f9 Create Pidgin.TypingLabel
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
137 g_clear_pointer(&text, g_free);
d453240767f9 Create Pidgin.TypingLabel
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
138 g_clear_object(&member);
d453240767f9 Create Pidgin.TypingLabel
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
139 } else if(n_items == 2) {
d453240767f9 Create Pidgin.TypingLabel
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
140 PurpleConversationMember *member1 = NULL;
d453240767f9 Create Pidgin.TypingLabel
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
141 PurpleConversationMember *member2 = NULL;
d453240767f9 Create Pidgin.TypingLabel
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
142 char *text = NULL;
d453240767f9 Create Pidgin.TypingLabel
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
143 const char *name1 = NULL;
d453240767f9 Create Pidgin.TypingLabel
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
144 const char *name2 = NULL;
d453240767f9 Create Pidgin.TypingLabel
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
145
d453240767f9 Create Pidgin.TypingLabel
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
146 member1 = g_list_model_get_item(model, 0);
d453240767f9 Create Pidgin.TypingLabel
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
147 name1 = purple_conversation_member_get_name_for_display(member1);
d453240767f9 Create Pidgin.TypingLabel
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
148
d453240767f9 Create Pidgin.TypingLabel
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
149 member2 = g_list_model_get_item(model, 1);
d453240767f9 Create Pidgin.TypingLabel
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
150 name2 = purple_conversation_member_get_name_for_display(member2);
d453240767f9 Create Pidgin.TypingLabel
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
151
d453240767f9 Create Pidgin.TypingLabel
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
152 text = g_strdup_printf(_("<b>%s</b> and <b>%s</b> are typing..."),
d453240767f9 Create Pidgin.TypingLabel
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
153 name1, name2);
d453240767f9 Create Pidgin.TypingLabel
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
154
d453240767f9 Create Pidgin.TypingLabel
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
155 gtk_label_set_label(label->label, text);
d453240767f9 Create Pidgin.TypingLabel
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
156
d453240767f9 Create Pidgin.TypingLabel
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
157 g_clear_pointer(&text, g_free);
d453240767f9 Create Pidgin.TypingLabel
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
158
d453240767f9 Create Pidgin.TypingLabel
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
159 g_clear_object(&member1);
d453240767f9 Create Pidgin.TypingLabel
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
160 g_clear_object(&member2);
d453240767f9 Create Pidgin.TypingLabel
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
161 } else if(n_items == 3) {
d453240767f9 Create Pidgin.TypingLabel
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
162 PurpleConversationMember *member1 = NULL;
d453240767f9 Create Pidgin.TypingLabel
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
163 PurpleConversationMember *member2 = NULL;
d453240767f9 Create Pidgin.TypingLabel
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
164 PurpleConversationMember *member3 = NULL;
d453240767f9 Create Pidgin.TypingLabel
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
165 char *text = NULL;
d453240767f9 Create Pidgin.TypingLabel
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
166 const char *name1 = NULL;
d453240767f9 Create Pidgin.TypingLabel
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
167 const char *name2 = NULL;
d453240767f9 Create Pidgin.TypingLabel
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
168 const char *name3 = NULL;
d453240767f9 Create Pidgin.TypingLabel
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
169
d453240767f9 Create Pidgin.TypingLabel
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
170 member1 = g_list_model_get_item(model, 0);
d453240767f9 Create Pidgin.TypingLabel
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
171 name1 = purple_conversation_member_get_name_for_display(member1);
d453240767f9 Create Pidgin.TypingLabel
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
172
d453240767f9 Create Pidgin.TypingLabel
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
173 member2 = g_list_model_get_item(model, 1);
d453240767f9 Create Pidgin.TypingLabel
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
174 name2 = purple_conversation_member_get_name_for_display(member2);
d453240767f9 Create Pidgin.TypingLabel
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
175
d453240767f9 Create Pidgin.TypingLabel
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
176 member3 = g_list_model_get_item(model, 2);
d453240767f9 Create Pidgin.TypingLabel
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
177 name3 = purple_conversation_member_get_name_for_display(member3);
d453240767f9 Create Pidgin.TypingLabel
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
178
d453240767f9 Create Pidgin.TypingLabel
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
179 text = g_strdup_printf(_("<b>%s</b>, <b>%s</b>, and <b>%s</b> are typing..."),
d453240767f9 Create Pidgin.TypingLabel
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
180 name1, name2, name3);
d453240767f9 Create Pidgin.TypingLabel
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
181
d453240767f9 Create Pidgin.TypingLabel
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
182 gtk_label_set_label(label->label, text);
d453240767f9 Create Pidgin.TypingLabel
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
183
d453240767f9 Create Pidgin.TypingLabel
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
184 g_clear_pointer(&text, g_free);
d453240767f9 Create Pidgin.TypingLabel
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
185
d453240767f9 Create Pidgin.TypingLabel
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
186 g_clear_object(&member1);
d453240767f9 Create Pidgin.TypingLabel
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
187 g_clear_object(&member2);
d453240767f9 Create Pidgin.TypingLabel
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
188 g_clear_object(&member3);
d453240767f9 Create Pidgin.TypingLabel
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
189 } else if(n_items > 3) {
d453240767f9 Create Pidgin.TypingLabel
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
190 gtk_label_set_label(label->label, _("Several people are typing..."));
d453240767f9 Create Pidgin.TypingLabel
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
191 }
d453240767f9 Create Pidgin.TypingLabel
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
192 }
d453240767f9 Create Pidgin.TypingLabel
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
193
d453240767f9 Create Pidgin.TypingLabel
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
194 /******************************************************************************
d453240767f9 Create Pidgin.TypingLabel
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
195 * GObject Implementation
d453240767f9 Create Pidgin.TypingLabel
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
196 *****************************************************************************/
d453240767f9 Create Pidgin.TypingLabel
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
197 G_DEFINE_FINAL_TYPE(PidginTypingLabel, pidgin_typing_label, GTK_TYPE_BOX)
d453240767f9 Create Pidgin.TypingLabel
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
198
d453240767f9 Create Pidgin.TypingLabel
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
199 static void
d453240767f9 Create Pidgin.TypingLabel
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
200 pidgin_typing_label_finalize(GObject *obj) {
d453240767f9 Create Pidgin.TypingLabel
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
201 PidginTypingLabel *label = PIDGIN_TYPING_LABEL(obj);
d453240767f9 Create Pidgin.TypingLabel
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
202
d453240767f9 Create Pidgin.TypingLabel
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
203 g_clear_object(&label->conversation);
d453240767f9 Create Pidgin.TypingLabel
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
204 g_clear_object(&label->typers);
d453240767f9 Create Pidgin.TypingLabel
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
205
d453240767f9 Create Pidgin.TypingLabel
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
206 G_OBJECT_CLASS(pidgin_typing_label_parent_class)->finalize(obj);
d453240767f9 Create Pidgin.TypingLabel
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
207 }
d453240767f9 Create Pidgin.TypingLabel
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
208
d453240767f9 Create Pidgin.TypingLabel
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
209 static void
d453240767f9 Create Pidgin.TypingLabel
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
210 pidgin_typing_label_get_property(GObject *obj, guint param_id, GValue *value,
d453240767f9 Create Pidgin.TypingLabel
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
211 GParamSpec *pspec)
d453240767f9 Create Pidgin.TypingLabel
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
212 {
d453240767f9 Create Pidgin.TypingLabel
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
213 PidginTypingLabel *label = PIDGIN_TYPING_LABEL(obj);
d453240767f9 Create Pidgin.TypingLabel
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
214
d453240767f9 Create Pidgin.TypingLabel
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
215 switch(param_id) {
d453240767f9 Create Pidgin.TypingLabel
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
216 case PROP_CONVERSATION:
d453240767f9 Create Pidgin.TypingLabel
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
217 g_value_set_object(value, pidgin_typing_label_get_conversation(label));
d453240767f9 Create Pidgin.TypingLabel
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
218 break;
d453240767f9 Create Pidgin.TypingLabel
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
219 default:
d453240767f9 Create Pidgin.TypingLabel
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
220 G_OBJECT_WARN_INVALID_PROPERTY_ID(obj, param_id, pspec);
d453240767f9 Create Pidgin.TypingLabel
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
221 break;
d453240767f9 Create Pidgin.TypingLabel
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
222 }
d453240767f9 Create Pidgin.TypingLabel
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
223 }
d453240767f9 Create Pidgin.TypingLabel
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
224
d453240767f9 Create Pidgin.TypingLabel
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
225 static void
d453240767f9 Create Pidgin.TypingLabel
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
226 pidgin_typing_label_set_property(GObject *obj, guint param_id,
d453240767f9 Create Pidgin.TypingLabel
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
227 const GValue *value, GParamSpec *pspec)
d453240767f9 Create Pidgin.TypingLabel
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
228 {
d453240767f9 Create Pidgin.TypingLabel
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
229 PidginTypingLabel *label = PIDGIN_TYPING_LABEL(obj);
d453240767f9 Create Pidgin.TypingLabel
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
230
d453240767f9 Create Pidgin.TypingLabel
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
231 switch(param_id) {
d453240767f9 Create Pidgin.TypingLabel
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
232 case PROP_CONVERSATION:
d453240767f9 Create Pidgin.TypingLabel
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
233 pidgin_typing_label_set_conversation(label, g_value_get_object(value));
d453240767f9 Create Pidgin.TypingLabel
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
234 break;
d453240767f9 Create Pidgin.TypingLabel
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
235 default:
d453240767f9 Create Pidgin.TypingLabel
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
236 G_OBJECT_WARN_INVALID_PROPERTY_ID(obj, param_id, pspec);
d453240767f9 Create Pidgin.TypingLabel
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
237 break;
d453240767f9 Create Pidgin.TypingLabel
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
238 }
d453240767f9 Create Pidgin.TypingLabel
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
239 }
d453240767f9 Create Pidgin.TypingLabel
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
240
d453240767f9 Create Pidgin.TypingLabel
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
241 static void
d453240767f9 Create Pidgin.TypingLabel
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
242 pidgin_typing_label_init(PidginTypingLabel *label) {
d453240767f9 Create Pidgin.TypingLabel
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
243 gtk_widget_init_template(GTK_WIDGET(label));
d453240767f9 Create Pidgin.TypingLabel
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
244
d453240767f9 Create Pidgin.TypingLabel
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
245 label->typers = gtk_filter_list_model_new(NULL, NULL);
d453240767f9 Create Pidgin.TypingLabel
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
246 }
d453240767f9 Create Pidgin.TypingLabel
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
247
d453240767f9 Create Pidgin.TypingLabel
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
248 static void
d453240767f9 Create Pidgin.TypingLabel
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
249 pidgin_typing_label_class_init(PidginTypingLabelClass *klass) {
d453240767f9 Create Pidgin.TypingLabel
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
250 GObjectClass *obj_class = G_OBJECT_CLASS(klass);
d453240767f9 Create Pidgin.TypingLabel
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
251 GtkWidgetClass *widget_class = GTK_WIDGET_CLASS(klass);
d453240767f9 Create Pidgin.TypingLabel
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
252
d453240767f9 Create Pidgin.TypingLabel
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
253 obj_class->finalize = pidgin_typing_label_finalize;
d453240767f9 Create Pidgin.TypingLabel
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
254 obj_class->get_property = pidgin_typing_label_get_property;
d453240767f9 Create Pidgin.TypingLabel
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
255 obj_class->set_property = pidgin_typing_label_set_property;
d453240767f9 Create Pidgin.TypingLabel
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
256
d453240767f9 Create Pidgin.TypingLabel
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
257 /**
d453240767f9 Create Pidgin.TypingLabel
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
258 * PidginTypingLabel:conversation:
d453240767f9 Create Pidgin.TypingLabel
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
259 *
d453240767f9 Create Pidgin.TypingLabel
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
260 * The [class@Purple.Conversation] that this label is for.
d453240767f9 Create Pidgin.TypingLabel
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
261 *
d453240767f9 Create Pidgin.TypingLabel
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
262 * Since: 3.0
d453240767f9 Create Pidgin.TypingLabel
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
263 */
d453240767f9 Create Pidgin.TypingLabel
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
264 properties[PROP_CONVERSATION] = g_param_spec_object(
d453240767f9 Create Pidgin.TypingLabel
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
265 "conversation", NULL, NULL,
d453240767f9 Create Pidgin.TypingLabel
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
266 PURPLE_TYPE_CONVERSATION,
d453240767f9 Create Pidgin.TypingLabel
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
267 G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS);
d453240767f9 Create Pidgin.TypingLabel
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
268
d453240767f9 Create Pidgin.TypingLabel
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
269 g_object_class_install_properties(obj_class, N_PROPERTIES, properties);
d453240767f9 Create Pidgin.TypingLabel
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
270
d453240767f9 Create Pidgin.TypingLabel
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
271 /* Template stuff. */
d453240767f9 Create Pidgin.TypingLabel
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
272 gtk_widget_class_set_template_from_resource(widget_class,
d453240767f9 Create Pidgin.TypingLabel
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
273 "/im/pidgin/Pidgin3/typinglabel.ui");
d453240767f9 Create Pidgin.TypingLabel
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
274
d453240767f9 Create Pidgin.TypingLabel
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
275 gtk_widget_class_bind_template_child(widget_class, PidginTypingLabel,
d453240767f9 Create Pidgin.TypingLabel
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
276 label);
d453240767f9 Create Pidgin.TypingLabel
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
277 }
d453240767f9 Create Pidgin.TypingLabel
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
278
d453240767f9 Create Pidgin.TypingLabel
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
279 /******************************************************************************
d453240767f9 Create Pidgin.TypingLabel
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
280 * Public API
d453240767f9 Create Pidgin.TypingLabel
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
281 *****************************************************************************/
d453240767f9 Create Pidgin.TypingLabel
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
282 GtkWidget *
d453240767f9 Create Pidgin.TypingLabel
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
283 pidgin_typing_label_new(PurpleConversation *conversation) {
d453240767f9 Create Pidgin.TypingLabel
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
284 g_return_val_if_fail(PURPLE_IS_CONVERSATION(conversation), NULL);
d453240767f9 Create Pidgin.TypingLabel
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
285
d453240767f9 Create Pidgin.TypingLabel
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
286 return g_object_new(
d453240767f9 Create Pidgin.TypingLabel
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
287 PIDGIN_TYPE_TYPING_LABEL,
d453240767f9 Create Pidgin.TypingLabel
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
288 "conversation", conversation,
d453240767f9 Create Pidgin.TypingLabel
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
289 NULL);
d453240767f9 Create Pidgin.TypingLabel
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
290 }
d453240767f9 Create Pidgin.TypingLabel
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
291
d453240767f9 Create Pidgin.TypingLabel
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
292 PurpleConversation *
d453240767f9 Create Pidgin.TypingLabel
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
293 pidgin_typing_label_get_conversation(PidginTypingLabel *label) {
d453240767f9 Create Pidgin.TypingLabel
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
294 g_return_val_if_fail(PIDGIN_IS_TYPING_LABEL(label), NULL);
d453240767f9 Create Pidgin.TypingLabel
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
295
d453240767f9 Create Pidgin.TypingLabel
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
296 return label->conversation;
d453240767f9 Create Pidgin.TypingLabel
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
297 }

mercurial