pidgin/pidginavatar.c

Sun, 28 Aug 2022 21:53:47 -0500

author
Elliott Sales de Andrade <quantum.analyst@gmail.com>
date
Sun, 28 Aug 2022 21:53:47 -0500
branch
gtk4
changeset 41613
4be49932c288
parent 41600
5fbe92363b76
child 41628
90f3621f94a5
permissions
-rw-r--r--

Set volume on audio test pipeline at startup

If you change the volume slider in prefs, then the Test Audio button does not respect that initially. If you move the slider around with the test playing, then the volume jumps to whatever you have. But stopping and starting the test again goes to full volume.

Testing Done:
Opened prefs, set to test source, made volume really low, and hit Test Audio. Output volume was low immediately.

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

40810
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
1 /*
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
2 * Pidgin - Internet Messenger
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
3 * Copyright (C) Pidgin Developers <devel@pidgin.im>
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
4 *
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
5 * Pidgin is the legal property of its developers, whose names are too numerous
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
6 * to list here. Please refer to the COPYRIGHT file distributed with this
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
7 * source distribution.
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
8 *
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
9 * This program is free software; you can redistribute it and/or modify
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
10 * it under the terms of the GNU General Public License as published by
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
11 * the Free Software Foundation; either version 2 of the License, or
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
12 * (at your option) any later version.
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
13 *
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
14 * This program is distributed in the hope that it will be useful,
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
15 * but WITHOUT ANY WARRANTY; without even the implied warranty of
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
16 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
17 * GNU General Public License for more details.
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
18 *
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
19 * You should have received a copy of the GNU General Public License
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
20 * along with this program; if not, see <https://www.gnu.org/licenses/>.
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
21 */
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
22
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
23 #include <glib/gi18n-lib.h>
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
24
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
25 #include "pidgin/pidginavatar.h"
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
26
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
27 struct _PidginAvatar {
41536
ba0797a477e7 Convert PidginAvatar to GTK4
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41479
diff changeset
28 GtkBox parent;
40810
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
29
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
30 GtkWidget *icon;
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
31
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
32 GdkPixbufAnimation *animation;
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
33 gboolean animate;
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
34
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
35 PurpleBuddy *buddy;
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
36 PurpleConversation *conversation;
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
37 };
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
38
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
39 enum {
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
40 PROP_0,
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
41 PROP_ANIMATE,
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
42 PROP_BUDDY,
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
43 PROP_CONVERSATION,
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
44 N_PROPERTIES,
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
45 };
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
46 static GParamSpec *properties[N_PROPERTIES] = {NULL, };
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
47
41536
ba0797a477e7 Convert PidginAvatar to GTK4
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41479
diff changeset
48 G_DEFINE_TYPE(PidginAvatar, pidgin_avatar, GTK_TYPE_BOX)
40810
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
49
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
50 /******************************************************************************
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
51 * Actions
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
52 *****************************************************************************/
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
53 static void
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
54 pidgin_avatar_save_response_cb(GtkNativeDialog *native, gint response,
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
55 gpointer data)
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
56 {
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
57 PidginAvatar *avatar = PIDGIN_AVATAR(data);
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
58 PurpleBuddyIcon *icon = NULL;
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
59
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
60 if(response != GTK_RESPONSE_ACCEPT || !PURPLE_IS_BUDDY(avatar->buddy)) {
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
61 gtk_native_dialog_destroy(native);
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
62
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
63 return;
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
64 }
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
65
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
66 icon = purple_buddy_get_icon(avatar->buddy);
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
67
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
68 if(icon != NULL) {
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
69 GtkFileChooser *chooser = GTK_FILE_CHOOSER(native);
41536
ba0797a477e7 Convert PidginAvatar to GTK4
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41479
diff changeset
70 GFile *file = NULL;
40810
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
71 gchar *filename = NULL;
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
72
41536
ba0797a477e7 Convert PidginAvatar to GTK4
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41479
diff changeset
73 file = gtk_file_chooser_get_file(chooser);
ba0797a477e7 Convert PidginAvatar to GTK4
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41479
diff changeset
74 filename = g_file_get_path(file);
40810
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
75
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
76 purple_buddy_icon_save_to_filename(icon, filename, NULL);
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
77
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
78 g_free(filename);
41564
661f4b3b8298 Fix leaks from GtkFileChooser results
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41536
diff changeset
79 g_object_unref(file);
40810
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
80 }
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
81
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
82 gtk_native_dialog_destroy(native);
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
83 }
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
84
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
85 static void
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
86 pidgin_avatar_save_cb(GSimpleAction *action, GVariant *parameter,
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
87 gpointer data)
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
88 {
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
89 PidginAvatar *avatar = PIDGIN_AVATAR(data);
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
90 PurpleAccount *account = NULL;
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
91 GtkFileChooserNative *native = NULL;
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
92 GtkFileChooser *chooser = NULL;
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
93 GtkWindow *window = NULL;
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
94 const gchar *ext = NULL, *name = NULL;
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
95 gchar *filename = NULL;
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
96
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
97 g_return_if_fail(PURPLE_IS_BUDDY(avatar->buddy));
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
98
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
99 ext = purple_buddy_icon_get_extension(purple_buddy_get_icon(avatar->buddy));
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
100
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
101 account = purple_buddy_get_account(avatar->buddy);
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
102 name = purple_buddy_get_name(avatar->buddy);
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
103 filename = g_strdup_printf("%s.%s", purple_normalize(account, name), ext);
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
104
41536
ba0797a477e7 Convert PidginAvatar to GTK4
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41479
diff changeset
105 window = GTK_WINDOW(gtk_widget_get_root(GTK_WIDGET(avatar)));
40810
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
106 native = gtk_file_chooser_native_new(_("Save Avatar"),
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
107 window,
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
108 GTK_FILE_CHOOSER_ACTION_SAVE,
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
109 _("_Save"),
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
110 _("_Cancel"));
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
111 g_signal_connect(G_OBJECT(native), "response",
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
112 G_CALLBACK(pidgin_avatar_save_response_cb), avatar);
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
113
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
114 chooser = GTK_FILE_CHOOSER(native);
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
115
41536
ba0797a477e7 Convert PidginAvatar to GTK4
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41479
diff changeset
116 gtk_file_chooser_set_current_name(chooser, filename);
40810
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
117 g_free(filename);
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
118
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
119 gtk_native_dialog_show(GTK_NATIVE_DIALOG(native));
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
120 }
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
121
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
122 static void
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
123 pidgin_avatar_set_custom_response_cb(GtkNativeDialog *native, gint response,
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
124 gpointer data)
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
125 {
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
126 PidginAvatar *avatar = PIDGIN_AVATAR(data);
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
127 GtkFileChooser *chooser = GTK_FILE_CHOOSER(native);
41536
ba0797a477e7 Convert PidginAvatar to GTK4
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41479
diff changeset
128 GFile *file = NULL;
40810
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
129 gchar *filename = NULL;
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
130
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
131 if(response != GTK_RESPONSE_ACCEPT || !PURPLE_IS_BUDDY(avatar->buddy)) {
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
132 gtk_native_dialog_destroy(native);
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
133
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
134 return;
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
135 }
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
136
41536
ba0797a477e7 Convert PidginAvatar to GTK4
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41479
diff changeset
137 file = gtk_file_chooser_get_file(chooser);
ba0797a477e7 Convert PidginAvatar to GTK4
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41479
diff changeset
138 filename = g_file_get_path(file);
40810
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
139 if(filename != NULL) {
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
140 PurpleContact *contact = purple_buddy_get_contact(avatar->buddy);
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
141 PurpleBlistNode *node = PURPLE_BLIST_NODE(contact);
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
142
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
143 purple_buddy_icons_node_set_custom_icon_from_file(node, filename);
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
144 }
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
145
41564
661f4b3b8298 Fix leaks from GtkFileChooser results
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41536
diff changeset
146 g_free(filename);
661f4b3b8298 Fix leaks from GtkFileChooser results
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41536
diff changeset
147 g_object_unref(file);
661f4b3b8298 Fix leaks from GtkFileChooser results
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41536
diff changeset
148
40810
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
149 gtk_native_dialog_destroy(native);
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
150 }
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
151
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
152 static void
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
153 pidgin_avatar_set_custom_cb(GSimpleAction *action, GVariant *parameter,
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
154 gpointer data)
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
155 {
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
156 PidginAvatar *avatar = PIDGIN_AVATAR(data);
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
157 GtkFileChooserNative *native = NULL;
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
158 GtkWindow *window = NULL;
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
159
41536
ba0797a477e7 Convert PidginAvatar to GTK4
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41479
diff changeset
160 window = GTK_WINDOW(gtk_widget_get_root(GTK_WIDGET(avatar)));
40810
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
161 native = gtk_file_chooser_native_new(_("Set Custom Avatar"),
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
162 window,
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
163 GTK_FILE_CHOOSER_ACTION_OPEN,
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
164 _("_Set Custom"),
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
165 _("_Cancel"));
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
166
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
167 g_signal_connect(G_OBJECT(native), "response",
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
168 G_CALLBACK(pidgin_avatar_set_custom_response_cb), avatar);
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
169
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
170 gtk_native_dialog_show(GTK_NATIVE_DIALOG(native));
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
171 }
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
172
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
173 static void
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
174 pidgin_avatar_clear_custom_cb(GSimpleAction *action, GVariant *parameter,
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
175 gpointer data)
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
176 {
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
177 PidginAvatar *avatar = PIDGIN_AVATAR(data);
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
178
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
179 if(PURPLE_IS_BUDDY(avatar->buddy)) {
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
180 PurpleContact *contact = purple_buddy_get_contact(avatar->buddy);
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
181 PurpleBlistNode *node = PURPLE_BLIST_NODE(contact);
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
182
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
183 purple_buddy_icons_node_set_custom_icon_from_file(node, NULL);
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
184 }
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
185 }
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
186
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
187 static GActionEntry actions[] = {
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
188 {
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
189 .name = "save-avatar",
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
190 .activate = pidgin_avatar_save_cb,
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
191 }, {
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
192 .name = "set-custom-avatar",
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
193 .activate = pidgin_avatar_set_custom_cb,
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
194 }, {
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
195 .name = "clear-custom-avatar",
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
196 .activate = pidgin_avatar_clear_custom_cb,
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
197 },
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
198 };
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
199
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
200 /******************************************************************************
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
201 * Helpers
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
202 *****************************************************************************/
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
203 static GdkPixbufAnimation *
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
204 pidgin_avatar_find_buddy_icon(PurpleBuddy *buddy,
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
205 PurpleIMConversation *conversation)
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
206 {
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
207 GdkPixbufAnimation *ret = NULL;
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
208 GInputStream *stream = NULL;
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
209 PurpleContact *contact = NULL;
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
210
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
211 g_return_val_if_fail(PURPLE_IS_BUDDY(buddy), NULL);
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
212
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
213 /* First check if our user has set a custom icon for this buddy. */
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
214 contact = purple_buddy_get_contact(buddy);
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
215 if(PURPLE_IS_CONTACT(contact)) {
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
216 PurpleBlistNode *node = PURPLE_BLIST_NODE(contact);
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
217 PurpleImage *custom_image = NULL;
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
218
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
219 custom_image = purple_buddy_icons_node_find_custom_icon(node);
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
220 if(PURPLE_IS_IMAGE(custom_image)) {
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
221 gconstpointer data = purple_image_get_data(custom_image);
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
222 gsize length = purple_image_get_data_size(custom_image);
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
223
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
224 stream = g_memory_input_stream_new_from_data(data, (gssize)length,
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
225 NULL);
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
226 }
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
227 }
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
228
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
229 /* If there is no custom icon, fall back to checking if the buddy has an
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
230 * icon set.
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
231 */
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
232 if(!G_IS_INPUT_STREAM(stream)) {
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
233 PurpleBuddyIcon *icon = purple_buddy_get_icon(buddy);
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
234
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
235 if(icon != NULL) {
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
236 stream = purple_buddy_icon_get_stream(icon);
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
237 }
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
238 }
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
239
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
240 /* Finally if we still don't have icon, we fallback to asking the
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
241 * conversation for one.
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
242 */
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
243 if(!G_IS_INPUT_STREAM(stream) && PURPLE_IS_IM_CONVERSATION(conversation)) {
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
244 PurpleBuddyIcon *icon = purple_im_conversation_get_icon(PURPLE_IM_CONVERSATION(conversation));
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
245
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
246 if(icon != NULL) {
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
247 stream = purple_buddy_icon_get_stream(icon);
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
248 }
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
249 }
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
250
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
251 if(G_IS_INPUT_STREAM(stream)) {
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
252 ret = gdk_pixbuf_animation_new_from_stream(stream, NULL, NULL);
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
253 g_clear_object(&stream);
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
254 }
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
255
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
256 return ret;
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
257 }
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
258
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
259 static void
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
260 pidgin_avatar_update(PidginAvatar *avatar) {
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
261 PurpleAccount *account = NULL;
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
262 GdkPixbufAnimation *animation = NULL;
41600
5fbe92363b76 Make PidginAvatar use a GtkPicture instead of GtkImage
Gary Kramlich <grim@reaperworld.com>
parents: 41564
diff changeset
263 GdkPixbuf *pixbuf = NULL;
40810
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
264
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
265 if(PURPLE_IS_BUDDY(avatar->buddy)) {
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
266 animation = pidgin_avatar_find_buddy_icon(avatar->buddy, NULL);
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
267 } else if(PURPLE_IS_IM_CONVERSATION(avatar->conversation)) {
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
268 PurpleBuddy *buddy = NULL;
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
269 const gchar *name = NULL;
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
270
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
271 account = purple_conversation_get_account(avatar->conversation);
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
272
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
273 name = purple_conversation_get_name(avatar->conversation);
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
274 buddy = purple_blist_find_buddy(account, name);
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
275
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
276 if(PURPLE_IS_BUDDY(buddy)) {
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
277 animation = pidgin_avatar_find_buddy_icon(buddy,
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
278 PURPLE_IM_CONVERSATION(avatar->conversation));
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
279 }
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
280 }
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
281
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
282 g_set_object(&avatar->animation, animation);
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
283
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
284 if(GDK_IS_PIXBUF_ANIMATION(avatar->animation)) {
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
285 if(avatar->animate) {
41600
5fbe92363b76 Make PidginAvatar use a GtkPicture instead of GtkImage
Gary Kramlich <grim@reaperworld.com>
parents: 41564
diff changeset
286 pixbuf = GDK_PIXBUF(avatar->animation);
40810
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
287 } else {
41600
5fbe92363b76 Make PidginAvatar use a GtkPicture instead of GtkImage
Gary Kramlich <grim@reaperworld.com>
parents: 41564
diff changeset
288 pixbuf = gdk_pixbuf_animation_get_static_image(avatar->animation);
5fbe92363b76 Make PidginAvatar use a GtkPicture instead of GtkImage
Gary Kramlich <grim@reaperworld.com>
parents: 41564
diff changeset
289 }
5fbe92363b76 Make PidginAvatar use a GtkPicture instead of GtkImage
Gary Kramlich <grim@reaperworld.com>
parents: 41564
diff changeset
290 }
40810
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
291
41600
5fbe92363b76 Make PidginAvatar use a GtkPicture instead of GtkImage
Gary Kramlich <grim@reaperworld.com>
parents: 41564
diff changeset
292 gtk_picture_set_pixbuf(GTK_PICTURE(avatar->icon), pixbuf);
40810
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
293
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
294 g_clear_object(&animation);
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
295 }
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
296
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
297 /******************************************************************************
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
298 * Callbacks
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
299 *****************************************************************************/
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
300 static gboolean
41536
ba0797a477e7 Convert PidginAvatar to GTK4
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41479
diff changeset
301 pidgin_avatar_button_press_handler(G_GNUC_UNUSED GtkGestureClick *event,
ba0797a477e7 Convert PidginAvatar to GTK4
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41479
diff changeset
302 G_GNUC_UNUSED gint n_press,
ba0797a477e7 Convert PidginAvatar to GTK4
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41479
diff changeset
303 gdouble x,
ba0797a477e7 Convert PidginAvatar to GTK4
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41479
diff changeset
304 gdouble y,
40810
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
305 gpointer data)
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
306 {
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
307 PidginAvatar *avatar = PIDGIN_AVATAR(data);
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
308 GtkBuilder *builder = NULL;
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
309 GtkWidget *menu = NULL;
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
310 GMenuModel *model = NULL;
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
311
41030
ec8b76f3bf0a Fix the resource path so we can use the automatic stuff that GtkApplication supports
Gary Kramlich <grim@reaperworld.com>
parents: 40821
diff changeset
312 builder = gtk_builder_new_from_resource("/im/pidgin/Pidgin3/Avatar/menu.ui");
40810
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
313 model = (GMenuModel *)gtk_builder_get_object(builder, "menu");
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
314
41536
ba0797a477e7 Convert PidginAvatar to GTK4
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41479
diff changeset
315 menu = gtk_popover_menu_new_from_model(model);
ba0797a477e7 Convert PidginAvatar to GTK4
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41479
diff changeset
316 gtk_widget_set_parent(menu, GTK_WIDGET(avatar));
41273
ef8cfc432444 Use GtkPopoverMenu in PidginAvatar
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41030
diff changeset
317 gtk_popover_set_pointing_to(GTK_POPOVER(menu),
41536
ba0797a477e7 Convert PidginAvatar to GTK4
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41479
diff changeset
318 &(const GdkRectangle){(int)x, (int)y, 0, 0});
40810
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
319
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
320 g_clear_object(&builder);
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
321
41273
ef8cfc432444 Use GtkPopoverMenu in PidginAvatar
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41030
diff changeset
322 gtk_popover_popup(GTK_POPOVER(menu));
40810
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
323
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
324 return TRUE;
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
325 }
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
326
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
327 /*
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
328 * This function is a callback for when properties change on the buddy we're
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
329 * tracking. It should not be reused for the conversation we're tracking
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
330 * because we have to disconnect old handlers and reuse of this function will
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
331 * cause issues if a buddy is changed but a conversation is not and vice versa.
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
332 */
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
333 static void
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
334 pidgin_avatar_buddy_icon_updated(GObject *obj, GParamSpec *pspec, gpointer d) {
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
335 PidginAvatar *avatar = PIDGIN_AVATAR(d);
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
336
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
337 pidgin_avatar_update(avatar);
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
338 }
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
339
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
340 /*
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
341 * This function is a callback for when properties change on the conversation
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
342 * we're tracking. It should not be reused for the buddy we're tracking
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
343 * because we have to disconnect old handlers and reuse of this function will
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
344 * cause issues if a buddy is changed but a conversation is not and vice versa.
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
345 */
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
346 static void
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
347 pidgin_avatar_conversation_updated(GObject *obj, GParamSpec *pspec, gpointer d)
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
348 {
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
349 PidginAvatar *avatar = PIDGIN_AVATAR(d);
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
350
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
351 pidgin_avatar_update(avatar);
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
352 }
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
353
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
354 static gboolean
41536
ba0797a477e7 Convert PidginAvatar to GTK4
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41479
diff changeset
355 pidgin_avatar_enter_notify_handler(G_GNUC_UNUSED GtkEventControllerMotion *event,
ba0797a477e7 Convert PidginAvatar to GTK4
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41479
diff changeset
356 G_GNUC_UNUSED gdouble x,
ba0797a477e7 Convert PidginAvatar to GTK4
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41479
diff changeset
357 G_GNUC_UNUSED gdouble y,
40810
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
358 gpointer data)
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
359 {
41536
ba0797a477e7 Convert PidginAvatar to GTK4
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41479
diff changeset
360 PidginAvatar *avatar = PIDGIN_AVATAR(data);
40810
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
361
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
362 pidgin_avatar_set_animate(avatar, TRUE);
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
363
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
364 return FALSE;
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
365 }
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
366
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
367 static gboolean
41536
ba0797a477e7 Convert PidginAvatar to GTK4
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41479
diff changeset
368 pidgin_avatar_leave_notify_handler(G_GNUC_UNUSED GtkEventControllerMotion *event,
ba0797a477e7 Convert PidginAvatar to GTK4
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41479
diff changeset
369 gpointer data)
40810
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
370 {
41536
ba0797a477e7 Convert PidginAvatar to GTK4
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41479
diff changeset
371 PidginAvatar *avatar = PIDGIN_AVATAR(data);
40810
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
372
40821
1cfdaf481246 Remove the old avatar from the infopane.
Gary Kramlich <grim@reaperworld.com>
parents: 40810
diff changeset
373 pidgin_avatar_set_animate(avatar, FALSE);
40810
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
374
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
375 return FALSE;
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
376 }
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
377
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
378 /******************************************************************************
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
379 * GObject Implementation
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
380 *****************************************************************************/
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
381 static void
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
382 pidgin_avatar_get_property(GObject *obj, guint param_id, GValue *value,
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
383 GParamSpec *pspec)
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
384 {
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
385 PidginAvatar *avatar = PIDGIN_AVATAR(obj);
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
386
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
387 switch(param_id) {
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
388 case PROP_ANIMATE:
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
389 g_value_set_boolean(value, pidgin_avatar_get_animate(avatar));
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
390 break;
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
391 case PROP_BUDDY:
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
392 g_value_set_object(value, pidgin_avatar_get_buddy(avatar));
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
393 break;
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
394 case PROP_CONVERSATION:
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
395 g_value_set_object(value, pidgin_avatar_get_conversation(avatar));
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
396 break;
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
397 default:
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
398 G_OBJECT_WARN_INVALID_PROPERTY_ID(obj, param_id, pspec);
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
399 break;
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
400 }
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
401 }
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
402
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
403 static void
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
404 pidgin_avatar_set_property(GObject *obj, guint param_id, const GValue *value,
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
405 GParamSpec *pspec)
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
406 {
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
407 PidginAvatar *avatar = PIDGIN_AVATAR(obj);
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
408
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
409 switch(param_id) {
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
410 case PROP_ANIMATE:
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
411 pidgin_avatar_set_animate(avatar, g_value_get_boolean(value));
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
412 break;
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
413 case PROP_BUDDY:
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
414 pidgin_avatar_set_buddy(avatar, g_value_get_object(value));
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
415 break;
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
416 case PROP_CONVERSATION:
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
417 pidgin_avatar_set_conversation(avatar, g_value_get_object(value));
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
418 break;
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
419 default:
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
420 G_OBJECT_WARN_INVALID_PROPERTY_ID(obj, param_id, pspec);
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
421 break;
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
422 }
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
423 }
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
424
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
425 static void
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
426 pidgin_avatar_dispose(GObject *obj) {
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
427 PidginAvatar *avatar = PIDGIN_AVATAR(obj);
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
428
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
429 pidgin_avatar_set_buddy(avatar, NULL);
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
430 pidgin_avatar_set_conversation(avatar, NULL);
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
431
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
432 g_clear_object(&avatar->animation);
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
433
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
434 G_OBJECT_CLASS(pidgin_avatar_parent_class)->dispose(obj);
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
435 }
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
436
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
437 static void
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
438 pidgin_avatar_init(PidginAvatar *avatar) {
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
439 GSimpleActionGroup *group = NULL;
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
440
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
441 gtk_widget_init_template(GTK_WIDGET(avatar));
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
442
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
443 /* Now setup our actions. */
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
444 group = g_simple_action_group_new();
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
445 g_action_map_add_action_entries(G_ACTION_MAP(group), actions,
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
446 G_N_ELEMENTS(actions), avatar);
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
447
40821
1cfdaf481246 Remove the old avatar from the infopane.
Gary Kramlich <grim@reaperworld.com>
parents: 40810
diff changeset
448 gtk_widget_insert_action_group(GTK_WIDGET(avatar), "avatar",
40810
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
449 G_ACTION_GROUP(group));
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
450 }
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
451
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
452 static void
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
453 pidgin_avatar_class_init(PidginAvatarClass *klass) {
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
454 GObjectClass *obj_class = G_OBJECT_CLASS(klass);
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
455 GtkWidgetClass *widget_class = GTK_WIDGET_CLASS(klass);
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
456
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
457 obj_class->get_property = pidgin_avatar_get_property;
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
458 obj_class->set_property = pidgin_avatar_set_property;
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
459 obj_class->dispose = pidgin_avatar_dispose;
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
460
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
461 /**
41479
3d2e114380f6 Add source files to GObject introspection
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41273
diff changeset
462 * PidginAvatar:animate:
40810
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
463 *
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
464 * Whether or not an animated avatar should be animated.
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
465 */
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
466 properties[PROP_ANIMATE] = g_param_spec_boolean(
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
467 "animate", "animate",
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
468 "Whether or not to animate an animated avatar",
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
469 FALSE,
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
470 G_PARAM_READWRITE | G_PARAM_CONSTRUCT | G_PARAM_STATIC_STRINGS);
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
471
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
472 /**
41479
3d2e114380f6 Add source files to GObject introspection
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41273
diff changeset
473 * PidginAvatar:buddy:
40810
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
474 *
41479
3d2e114380f6 Add source files to GObject introspection
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41273
diff changeset
475 * The buddy whose avatar will be displayed.
40810
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
476 */
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
477 properties[PROP_BUDDY] = g_param_spec_object(
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
478 "buddy", "buddy",
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
479 "The buddy whose avatar to display",
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
480 PURPLE_TYPE_BUDDY,
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
481 G_PARAM_READWRITE | G_PARAM_CONSTRUCT | G_PARAM_STATIC_STRINGS);
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
482
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
483 /**
41479
3d2e114380f6 Add source files to GObject introspection
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41273
diff changeset
484 * PidginAvatar:conversation:
40810
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
485 *
41479
3d2e114380f6 Add source files to GObject introspection
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41273
diff changeset
486 * The conversation which will be used to find the correct buddy.
40810
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
487 */
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
488 properties[PROP_CONVERSATION] = g_param_spec_object(
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
489 "conversation", "conversation",
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
490 "The conversation used to find the correct buddy.",
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
491 PURPLE_TYPE_CONVERSATION,
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
492 G_PARAM_READWRITE | G_PARAM_CONSTRUCT | G_PARAM_STATIC_STRINGS);
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
493
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
494 g_object_class_install_properties(obj_class, N_PROPERTIES, properties);
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
495
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
496 gtk_widget_class_set_template_from_resource(
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
497 widget_class,
41030
ec8b76f3bf0a Fix the resource path so we can use the automatic stuff that GtkApplication supports
Gary Kramlich <grim@reaperworld.com>
parents: 40821
diff changeset
498 "/im/pidgin/Pidgin3/Avatar/avatar.ui"
40810
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
499 );
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
500
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
501 gtk_widget_class_bind_template_child(widget_class, PidginAvatar, icon);
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
502
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
503 gtk_widget_class_bind_template_callback(widget_class,
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
504 pidgin_avatar_button_press_handler);
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
505 gtk_widget_class_bind_template_callback(widget_class,
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
506 pidgin_avatar_enter_notify_handler);
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
507 gtk_widget_class_bind_template_callback(widget_class,
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
508 pidgin_avatar_leave_notify_handler);
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
509 }
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
510
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
511 /******************************************************************************
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
512 * API
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
513 *****************************************************************************/
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
514 GtkWidget *
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
515 pidgin_avatar_new(void) {
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
516 return GTK_WIDGET(g_object_new(PIDGIN_TYPE_AVATAR, NULL));
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
517 }
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
518
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
519 void
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
520 pidgin_avatar_set_animate(PidginAvatar *avatar, gboolean animate) {
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
521 g_return_if_fail(PIDGIN_IS_AVATAR(avatar));
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
522
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
523 avatar->animate = animate;
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
524
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
525 if(GDK_IS_PIXBUF_ANIMATION(avatar->animation)) {
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
526 if(avatar->animate) {
41536
ba0797a477e7 Convert PidginAvatar to GTK4
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41479
diff changeset
527 gtk_image_set_from_pixbuf(GTK_IMAGE(avatar->icon),
ba0797a477e7 Convert PidginAvatar to GTK4
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41479
diff changeset
528 GDK_PIXBUF(avatar->animation));
40810
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
529 } else {
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
530 GdkPixbuf *frame = NULL;
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
531
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
532 frame = gdk_pixbuf_animation_get_static_image(avatar->animation);
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
533
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
534 gtk_image_set_from_pixbuf(GTK_IMAGE(avatar->icon), frame);
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
535 }
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
536 }
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
537 }
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
538
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
539 gboolean
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
540 pidgin_avatar_get_animate(PidginAvatar *avatar) {
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
541 g_return_val_if_fail(PIDGIN_IS_AVATAR(avatar), FALSE);
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
542
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
543 return avatar->animate;
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
544 }
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
545
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
546 void
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
547 pidgin_avatar_set_buddy(PidginAvatar *avatar, PurpleBuddy *buddy) {
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
548 g_return_if_fail(PIDGIN_IS_AVATAR(avatar));
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
549
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
550 /* Remove our old signal handler. */
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
551 if(PURPLE_IS_BUDDY(avatar->buddy)) {
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
552 g_signal_handlers_disconnect_by_func(avatar->buddy,
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
553 pidgin_avatar_buddy_icon_updated,
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
554 avatar);
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
555 }
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
556
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
557 if(g_set_object(&avatar->buddy, buddy)) {
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
558 pidgin_avatar_update(avatar);
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
559
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
560 g_object_notify_by_pspec(G_OBJECT(avatar), properties[PROP_BUDDY]);
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
561 }
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
562
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
563 /* Add the notify signal so we can update when the icon changes. */
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
564 if(PURPLE_IS_BUDDY(avatar->buddy)) {
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
565 g_signal_connect(G_OBJECT(avatar->buddy), "notify::icon",
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
566 G_CALLBACK(pidgin_avatar_buddy_icon_updated), avatar);
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
567 }
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
568 }
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
569
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
570 PurpleBuddy *
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
571 pidgin_avatar_get_buddy(PidginAvatar *avatar) {
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
572 g_return_val_if_fail(PIDGIN_IS_AVATAR(avatar), NULL);
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
573
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
574 return avatar->buddy;
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
575 }
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
576
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
577 void
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
578 pidgin_avatar_set_conversation(PidginAvatar *avatar,
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
579 PurpleConversation *conversation)
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
580 {
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
581 g_return_if_fail(PIDGIN_IS_AVATAR(avatar));
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
582
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
583 /* Remove our old signal handler. */
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
584 if(PURPLE_IS_CONVERSATION(avatar->conversation)) {
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
585 g_signal_handlers_disconnect_by_func(avatar->conversation,
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
586 pidgin_avatar_conversation_updated,
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
587 avatar);
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
588 }
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
589
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
590 if(g_set_object(&avatar->conversation, conversation)) {
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
591 g_object_notify_by_pspec(G_OBJECT(avatar),
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
592 properties[PROP_CONVERSATION]);
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
593 }
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
594
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
595 /* Add the notify signal so we can update when the icon changes. */
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
596 if(PURPLE_IS_CONVERSATION(avatar->conversation)) {
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
597 g_signal_connect(G_OBJECT(avatar->conversation), "notify",
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
598 G_CALLBACK(pidgin_avatar_conversation_updated), avatar);
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
599 }
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
600 }
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
601
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
602 PurpleConversation *
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
603 pidgin_avatar_get_conversation(PidginAvatar *avatar) {
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
604 g_return_val_if_fail(PIDGIN_IS_AVATAR(avatar), NULL);
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
605
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
606 return avatar->conversation;
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
607 }

mercurial