pidgin/pidginavatar.c

Sat, 13 Apr 2024 21:08:59 -0500

author
Gary Kramlich <grim@reaperworld.com>
date
Sat, 13 Apr 2024 21:08:59 -0500
changeset 42714
f555f11df057
parent 42592
6b65c0e4ba15
child 42723
3761ba966eed
permissions
-rw-r--r--

Stop using PurpleIMConversation in Pidgin

We're trying to remove PurpleIMConversation so we need to stop using it in
Pidgin. There weren't many uses that were still being called so this was pretty
straight forward.

Testing Done:
Ran with the turtles and dinked around in the app a bit.

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

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;
42353
5381c5c9affa Move PidginAvatar to a single resource file
Gary Kramlich <grim@reaperworld.com>
parents: 42352
diff changeset
31 GMenuModel *menu;
40810
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
32
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
33 GdkPixbufAnimation *animation;
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
34 gboolean animate;
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
35
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
36 PurpleBuddy *buddy;
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
37 PurpleConversation *conversation;
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
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
40 enum {
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
41 PROP_0,
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
42 PROP_ANIMATE,
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
43 PROP_BUDDY,
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
44 PROP_CONVERSATION,
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
45 N_PROPERTIES,
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
46 };
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
47 static GParamSpec *properties[N_PROPERTIES] = {NULL, };
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
48
42575
580339aa47cc Make sure all of the final types in pidgin are defined as such
Gary Kramlich <grim@reaperworld.com>
parents: 42353
diff changeset
49 G_DEFINE_FINAL_TYPE(PidginAvatar, pidgin_avatar, GTK_TYPE_BOX)
40810
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 /******************************************************************************
41628
90f3621f94a5 Fix several issues with PidginAvatar in a conversation
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41600
diff changeset
52 * Helpers
40810
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
53 *****************************************************************************/
41628
90f3621f94a5 Fix several issues with PidginAvatar in a conversation
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41600
diff changeset
54 static PurpleBuddy *
90f3621f94a5 Fix several issues with PidginAvatar in a conversation
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41600
diff changeset
55 pidgin_avatar_get_effective_buddy(PidginAvatar *avatar) {
90f3621f94a5 Fix several issues with PidginAvatar in a conversation
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41600
diff changeset
56 PurpleBuddy *buddy = NULL;
40810
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
57
41628
90f3621f94a5 Fix several issues with PidginAvatar in a conversation
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41600
diff changeset
58 if(PURPLE_IS_BUDDY(avatar->buddy)) {
90f3621f94a5 Fix several issues with PidginAvatar in a conversation
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41600
diff changeset
59 buddy = PURPLE_BUDDY(avatar->buddy);
40810
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
60 }
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
61
41628
90f3621f94a5 Fix several issues with PidginAvatar in a conversation
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41600
diff changeset
62 return buddy;
40810
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
63 }
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 static GdkPixbufAnimation *
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
66 pidgin_avatar_find_buddy_icon(PurpleBuddy *buddy,
41981
e2d8eb34ebe7 Remove the icon from PurpleIMConversation
Gary Kramlich <grim@reaperworld.com>
parents: 41947
diff changeset
67 G_GNUC_UNUSED PurpleConversation *conversation)
40810
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
68 {
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
69 GdkPixbufAnimation *ret = NULL;
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
70 GInputStream *stream = NULL;
41733
a9085b52de8b Rename PurpleContact to PurpleMetaContact.
Gary Kramlich <grim@reaperworld.com>
parents: 41628
diff changeset
71 PurpleMetaContact *contact = NULL;
40810
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
72
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
73 g_return_val_if_fail(PURPLE_IS_BUDDY(buddy), NULL);
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
74
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
75 /* 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
76 contact = purple_buddy_get_contact(buddy);
41733
a9085b52de8b Rename PurpleContact to PurpleMetaContact.
Gary Kramlich <grim@reaperworld.com>
parents: 41628
diff changeset
77 if(PURPLE_IS_META_CONTACT(contact)) {
40810
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
78 PurpleBlistNode *node = PURPLE_BLIST_NODE(contact);
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
79 PurpleImage *custom_image = NULL;
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 custom_image = purple_buddy_icons_node_find_custom_icon(node);
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
82 if(PURPLE_IS_IMAGE(custom_image)) {
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
83 gconstpointer data = purple_image_get_data(custom_image);
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
84 gsize length = purple_image_get_data_size(custom_image);
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
85
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
86 stream = g_memory_input_stream_new_from_data(data, (gssize)length,
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
87 NULL);
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 }
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
90
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
91 /* 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
92 * icon set.
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
93 */
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
94 if(!G_IS_INPUT_STREAM(stream)) {
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
95 PurpleBuddyIcon *icon = purple_buddy_get_icon(buddy);
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 if(icon != NULL) {
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
98 stream = purple_buddy_icon_get_stream(icon);
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
99 }
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
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
102 if(G_IS_INPUT_STREAM(stream)) {
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
103 ret = gdk_pixbuf_animation_new_from_stream(stream, NULL, NULL);
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
104 g_clear_object(&stream);
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
105 }
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
106
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
107 return ret;
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
108 }
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
109
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
110 static void
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
111 pidgin_avatar_update(PidginAvatar *avatar) {
41628
90f3621f94a5 Fix several issues with PidginAvatar in a conversation
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41600
diff changeset
112 PurpleBuddy *buddy = NULL;
40810
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
113 GdkPixbufAnimation *animation = NULL;
41600
5fbe92363b76 Make PidginAvatar use a GtkPicture instead of GtkImage
Gary Kramlich <grim@reaperworld.com>
parents: 41564
diff changeset
114 GdkPixbuf *pixbuf = NULL;
40810
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
115
41628
90f3621f94a5 Fix several issues with PidginAvatar in a conversation
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41600
diff changeset
116 buddy = pidgin_avatar_get_effective_buddy(avatar);
90f3621f94a5 Fix several issues with PidginAvatar in a conversation
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41600
diff changeset
117 if(PURPLE_IS_BUDDY(buddy)) {
90f3621f94a5 Fix several issues with PidginAvatar in a conversation
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41600
diff changeset
118 animation = pidgin_avatar_find_buddy_icon(buddy,
90f3621f94a5 Fix several issues with PidginAvatar in a conversation
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41600
diff changeset
119 avatar->conversation);
40810
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 g_set_object(&avatar->animation, animation);
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
123
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
124 if(GDK_IS_PIXBUF_ANIMATION(avatar->animation)) {
41628
90f3621f94a5 Fix several issues with PidginAvatar in a conversation
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41600
diff changeset
125 if(avatar->animate &&
90f3621f94a5 Fix several issues with PidginAvatar in a conversation
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41600
diff changeset
126 !gdk_pixbuf_animation_is_static_image(avatar->animation)) {
41600
5fbe92363b76 Make PidginAvatar use a GtkPicture instead of GtkImage
Gary Kramlich <grim@reaperworld.com>
parents: 41564
diff changeset
127 pixbuf = GDK_PIXBUF(avatar->animation);
40810
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
128 } else {
41600
5fbe92363b76 Make PidginAvatar use a GtkPicture instead of GtkImage
Gary Kramlich <grim@reaperworld.com>
parents: 41564
diff changeset
129 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
130 }
5fbe92363b76 Make PidginAvatar use a GtkPicture instead of GtkImage
Gary Kramlich <grim@reaperworld.com>
parents: 41564
diff changeset
131 }
40810
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
132
41600
5fbe92363b76 Make PidginAvatar use a GtkPicture instead of GtkImage
Gary Kramlich <grim@reaperworld.com>
parents: 41564
diff changeset
133 gtk_picture_set_pixbuf(GTK_PICTURE(avatar->icon), pixbuf);
40810
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
134
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
135 g_clear_object(&animation);
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
136 }
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
137
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
138 /******************************************************************************
41628
90f3621f94a5 Fix several issues with PidginAvatar in a conversation
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41600
diff changeset
139 * Actions
90f3621f94a5 Fix several issues with PidginAvatar in a conversation
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41600
diff changeset
140 *****************************************************************************/
90f3621f94a5 Fix several issues with PidginAvatar in a conversation
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41600
diff changeset
141 static void
42337
08c24da9c7cb Port PidginAvatar to GtkFileDialog
Gary Kramlich <grim@reaperworld.com>
parents: 42251
diff changeset
142 pidgin_avatar_save_dialog_cb(GObject *source, GAsyncResult *result,
08c24da9c7cb Port PidginAvatar to GtkFileDialog
Gary Kramlich <grim@reaperworld.com>
parents: 42251
diff changeset
143 gpointer data)
41628
90f3621f94a5 Fix several issues with PidginAvatar in a conversation
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41600
diff changeset
144 {
42337
08c24da9c7cb Port PidginAvatar to GtkFileDialog
Gary Kramlich <grim@reaperworld.com>
parents: 42251
diff changeset
145 PidginAvatar *avatar = data;
41628
90f3621f94a5 Fix several issues with PidginAvatar in a conversation
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41600
diff changeset
146 PurpleBuddy *buddy = NULL;
90f3621f94a5 Fix several issues with PidginAvatar in a conversation
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41600
diff changeset
147 PurpleBuddyIcon *icon = NULL;
42337
08c24da9c7cb Port PidginAvatar to GtkFileDialog
Gary Kramlich <grim@reaperworld.com>
parents: 42251
diff changeset
148 GtkFileDialog *dialog = GTK_FILE_DIALOG(source);
08c24da9c7cb Port PidginAvatar to GtkFileDialog
Gary Kramlich <grim@reaperworld.com>
parents: 42251
diff changeset
149 GError *error = NULL;
08c24da9c7cb Port PidginAvatar to GtkFileDialog
Gary Kramlich <grim@reaperworld.com>
parents: 42251
diff changeset
150 GFile *file = NULL;
41628
90f3621f94a5 Fix several issues with PidginAvatar in a conversation
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41600
diff changeset
151
42337
08c24da9c7cb Port PidginAvatar to GtkFileDialog
Gary Kramlich <grim@reaperworld.com>
parents: 42251
diff changeset
152 file = gtk_file_dialog_save_finish(dialog, result, &error);
08c24da9c7cb Port PidginAvatar to GtkFileDialog
Gary Kramlich <grim@reaperworld.com>
parents: 42251
diff changeset
153 if(error != NULL) {
08c24da9c7cb Port PidginAvatar to GtkFileDialog
Gary Kramlich <grim@reaperworld.com>
parents: 42251
diff changeset
154 g_warning("failed to select custom avatar destination: %s",
08c24da9c7cb Port PidginAvatar to GtkFileDialog
Gary Kramlich <grim@reaperworld.com>
parents: 42251
diff changeset
155 error->message);
08c24da9c7cb Port PidginAvatar to GtkFileDialog
Gary Kramlich <grim@reaperworld.com>
parents: 42251
diff changeset
156
08c24da9c7cb Port PidginAvatar to GtkFileDialog
Gary Kramlich <grim@reaperworld.com>
parents: 42251
diff changeset
157 g_clear_error(&error);
08c24da9c7cb Port PidginAvatar to GtkFileDialog
Gary Kramlich <grim@reaperworld.com>
parents: 42251
diff changeset
158 g_clear_object(&file);
41628
90f3621f94a5 Fix several issues with PidginAvatar in a conversation
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41600
diff changeset
159
90f3621f94a5 Fix several issues with PidginAvatar in a conversation
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41600
diff changeset
160 return;
90f3621f94a5 Fix several issues with PidginAvatar in a conversation
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41600
diff changeset
161 }
90f3621f94a5 Fix several issues with PidginAvatar in a conversation
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41600
diff changeset
162
90f3621f94a5 Fix several issues with PidginAvatar in a conversation
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41600
diff changeset
163 buddy = pidgin_avatar_get_effective_buddy(avatar);
90f3621f94a5 Fix several issues with PidginAvatar in a conversation
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41600
diff changeset
164 if(!PURPLE_IS_BUDDY(buddy)) {
42337
08c24da9c7cb Port PidginAvatar to GtkFileDialog
Gary Kramlich <grim@reaperworld.com>
parents: 42251
diff changeset
165 g_clear_object(&file);
41628
90f3621f94a5 Fix several issues with PidginAvatar in a conversation
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41600
diff changeset
166
90f3621f94a5 Fix several issues with PidginAvatar in a conversation
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41600
diff changeset
167 return;
90f3621f94a5 Fix several issues with PidginAvatar in a conversation
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41600
diff changeset
168 }
90f3621f94a5 Fix several issues with PidginAvatar in a conversation
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41600
diff changeset
169
90f3621f94a5 Fix several issues with PidginAvatar in a conversation
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41600
diff changeset
170 icon = purple_buddy_get_icon(buddy);
42337
08c24da9c7cb Port PidginAvatar to GtkFileDialog
Gary Kramlich <grim@reaperworld.com>
parents: 42251
diff changeset
171 if(icon != NULL) {
08c24da9c7cb Port PidginAvatar to GtkFileDialog
Gary Kramlich <grim@reaperworld.com>
parents: 42251
diff changeset
172 char *filename = NULL;
41628
90f3621f94a5 Fix several issues with PidginAvatar in a conversation
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41600
diff changeset
173
90f3621f94a5 Fix several issues with PidginAvatar in a conversation
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41600
diff changeset
174 filename = g_file_get_path(file);
90f3621f94a5 Fix several issues with PidginAvatar in a conversation
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41600
diff changeset
175
90f3621f94a5 Fix several issues with PidginAvatar in a conversation
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41600
diff changeset
176 purple_buddy_icon_save_to_filename(icon, filename, NULL);
90f3621f94a5 Fix several issues with PidginAvatar in a conversation
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41600
diff changeset
177
90f3621f94a5 Fix several issues with PidginAvatar in a conversation
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41600
diff changeset
178 g_free(filename);
90f3621f94a5 Fix several issues with PidginAvatar in a conversation
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41600
diff changeset
179 }
90f3621f94a5 Fix several issues with PidginAvatar in a conversation
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41600
diff changeset
180
42337
08c24da9c7cb Port PidginAvatar to GtkFileDialog
Gary Kramlich <grim@reaperworld.com>
parents: 42251
diff changeset
181 g_clear_object(&file);
41628
90f3621f94a5 Fix several issues with PidginAvatar in a conversation
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41600
diff changeset
182 }
90f3621f94a5 Fix several issues with PidginAvatar in a conversation
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41600
diff changeset
183
90f3621f94a5 Fix several issues with PidginAvatar in a conversation
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41600
diff changeset
184 static void
41947
7b3312d0760c Bump C standard to C99 for Pidgin files and fix warnings
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41733
diff changeset
185 pidgin_avatar_save_cb(G_GNUC_UNUSED GSimpleAction *action,
7b3312d0760c Bump C standard to C99 for Pidgin files and fix warnings
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41733
diff changeset
186 G_GNUC_UNUSED GVariant *parameter, gpointer data)
41628
90f3621f94a5 Fix several issues with PidginAvatar in a conversation
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41600
diff changeset
187 {
90f3621f94a5 Fix several issues with PidginAvatar in a conversation
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41600
diff changeset
188 PidginAvatar *avatar = PIDGIN_AVATAR(data);
90f3621f94a5 Fix several issues with PidginAvatar in a conversation
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41600
diff changeset
189 PurpleBuddy *buddy = NULL;
42337
08c24da9c7cb Port PidginAvatar to GtkFileDialog
Gary Kramlich <grim@reaperworld.com>
parents: 42251
diff changeset
190 PurpleBuddyIcon *icon = NULL;
41628
90f3621f94a5 Fix several issues with PidginAvatar in a conversation
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41600
diff changeset
191 PurpleAccount *account = NULL;
42337
08c24da9c7cb Port PidginAvatar to GtkFileDialog
Gary Kramlich <grim@reaperworld.com>
parents: 42251
diff changeset
192 GtkFileDialog *dialog = NULL;
41628
90f3621f94a5 Fix several issues with PidginAvatar in a conversation
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41600
diff changeset
193 GtkWindow *window = NULL;
90f3621f94a5 Fix several issues with PidginAvatar in a conversation
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41600
diff changeset
194 const gchar *ext = NULL, *name = NULL;
90f3621f94a5 Fix several issues with PidginAvatar in a conversation
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41600
diff changeset
195 gchar *filename = NULL;
90f3621f94a5 Fix several issues with PidginAvatar in a conversation
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41600
diff changeset
196
90f3621f94a5 Fix several issues with PidginAvatar in a conversation
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41600
diff changeset
197 buddy = pidgin_avatar_get_effective_buddy(avatar);
90f3621f94a5 Fix several issues with PidginAvatar in a conversation
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41600
diff changeset
198 if(buddy == NULL) {
90f3621f94a5 Fix several issues with PidginAvatar in a conversation
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41600
diff changeset
199 g_return_if_reached();
90f3621f94a5 Fix several issues with PidginAvatar in a conversation
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41600
diff changeset
200 }
90f3621f94a5 Fix several issues with PidginAvatar in a conversation
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41600
diff changeset
201
42337
08c24da9c7cb Port PidginAvatar to GtkFileDialog
Gary Kramlich <grim@reaperworld.com>
parents: 42251
diff changeset
202 icon = purple_buddy_get_icon(buddy);
08c24da9c7cb Port PidginAvatar to GtkFileDialog
Gary Kramlich <grim@reaperworld.com>
parents: 42251
diff changeset
203 if(icon != NULL) {
08c24da9c7cb Port PidginAvatar to GtkFileDialog
Gary Kramlich <grim@reaperworld.com>
parents: 42251
diff changeset
204 ext = purple_buddy_icon_get_extension(icon);
08c24da9c7cb Port PidginAvatar to GtkFileDialog
Gary Kramlich <grim@reaperworld.com>
parents: 42251
diff changeset
205 }
41628
90f3621f94a5 Fix several issues with PidginAvatar in a conversation
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41600
diff changeset
206
90f3621f94a5 Fix several issues with PidginAvatar in a conversation
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41600
diff changeset
207 account = purple_buddy_get_account(buddy);
90f3621f94a5 Fix several issues with PidginAvatar in a conversation
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41600
diff changeset
208 name = purple_buddy_get_name(buddy);
42337
08c24da9c7cb Port PidginAvatar to GtkFileDialog
Gary Kramlich <grim@reaperworld.com>
parents: 42251
diff changeset
209 if(ext != NULL) {
08c24da9c7cb Port PidginAvatar to GtkFileDialog
Gary Kramlich <grim@reaperworld.com>
parents: 42251
diff changeset
210 filename = g_strdup_printf("%s.%s", purple_normalize(account, name),
08c24da9c7cb Port PidginAvatar to GtkFileDialog
Gary Kramlich <grim@reaperworld.com>
parents: 42251
diff changeset
211 ext);
08c24da9c7cb Port PidginAvatar to GtkFileDialog
Gary Kramlich <grim@reaperworld.com>
parents: 42251
diff changeset
212 } else {
08c24da9c7cb Port PidginAvatar to GtkFileDialog
Gary Kramlich <grim@reaperworld.com>
parents: 42251
diff changeset
213 filename = g_strdup(purple_normalize(account, name));
08c24da9c7cb Port PidginAvatar to GtkFileDialog
Gary Kramlich <grim@reaperworld.com>
parents: 42251
diff changeset
214 }
41628
90f3621f94a5 Fix several issues with PidginAvatar in a conversation
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41600
diff changeset
215
90f3621f94a5 Fix several issues with PidginAvatar in a conversation
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41600
diff changeset
216 window = GTK_WINDOW(gtk_widget_get_root(GTK_WIDGET(avatar)));
90f3621f94a5 Fix several issues with PidginAvatar in a conversation
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41600
diff changeset
217
42337
08c24da9c7cb Port PidginAvatar to GtkFileDialog
Gary Kramlich <grim@reaperworld.com>
parents: 42251
diff changeset
218 dialog = gtk_file_dialog_new();
08c24da9c7cb Port PidginAvatar to GtkFileDialog
Gary Kramlich <grim@reaperworld.com>
parents: 42251
diff changeset
219 gtk_file_dialog_set_title(dialog, _("Save Avatar"));
08c24da9c7cb Port PidginAvatar to GtkFileDialog
Gary Kramlich <grim@reaperworld.com>
parents: 42251
diff changeset
220 gtk_file_dialog_set_modal(dialog, TRUE);
08c24da9c7cb Port PidginAvatar to GtkFileDialog
Gary Kramlich <grim@reaperworld.com>
parents: 42251
diff changeset
221 gtk_file_dialog_set_initial_name(dialog, filename);
41628
90f3621f94a5 Fix several issues with PidginAvatar in a conversation
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41600
diff changeset
222
90f3621f94a5 Fix several issues with PidginAvatar in a conversation
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41600
diff changeset
223 g_free(filename);
90f3621f94a5 Fix several issues with PidginAvatar in a conversation
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41600
diff changeset
224
42337
08c24da9c7cb Port PidginAvatar to GtkFileDialog
Gary Kramlich <grim@reaperworld.com>
parents: 42251
diff changeset
225 gtk_file_dialog_save(dialog, window, NULL, pidgin_avatar_save_dialog_cb,
08c24da9c7cb Port PidginAvatar to GtkFileDialog
Gary Kramlich <grim@reaperworld.com>
parents: 42251
diff changeset
226 avatar);
08c24da9c7cb Port PidginAvatar to GtkFileDialog
Gary Kramlich <grim@reaperworld.com>
parents: 42251
diff changeset
227 g_clear_object(&dialog);
41628
90f3621f94a5 Fix several issues with PidginAvatar in a conversation
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41600
diff changeset
228 }
90f3621f94a5 Fix several issues with PidginAvatar in a conversation
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41600
diff changeset
229
90f3621f94a5 Fix several issues with PidginAvatar in a conversation
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41600
diff changeset
230 static void
42337
08c24da9c7cb Port PidginAvatar to GtkFileDialog
Gary Kramlich <grim@reaperworld.com>
parents: 42251
diff changeset
231 pidgin_avatar_set_custom_dialog_cb(GObject *source, GAsyncResult *result,
08c24da9c7cb Port PidginAvatar to GtkFileDialog
Gary Kramlich <grim@reaperworld.com>
parents: 42251
diff changeset
232 gpointer data)
41628
90f3621f94a5 Fix several issues with PidginAvatar in a conversation
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41600
diff changeset
233 {
42337
08c24da9c7cb Port PidginAvatar to GtkFileDialog
Gary Kramlich <grim@reaperworld.com>
parents: 42251
diff changeset
234 PidginAvatar *avatar = data;
41628
90f3621f94a5 Fix several issues with PidginAvatar in a conversation
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41600
diff changeset
235 PurpleBuddy *buddy = NULL;
42337
08c24da9c7cb Port PidginAvatar to GtkFileDialog
Gary Kramlich <grim@reaperworld.com>
parents: 42251
diff changeset
236 GtkFileDialog *dialog = GTK_FILE_DIALOG(source);
08c24da9c7cb Port PidginAvatar to GtkFileDialog
Gary Kramlich <grim@reaperworld.com>
parents: 42251
diff changeset
237 GError *error = NULL;
41628
90f3621f94a5 Fix several issues with PidginAvatar in a conversation
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41600
diff changeset
238 GFile *file = NULL;
90f3621f94a5 Fix several issues with PidginAvatar in a conversation
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41600
diff changeset
239 gchar *filename = NULL;
90f3621f94a5 Fix several issues with PidginAvatar in a conversation
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41600
diff changeset
240
42337
08c24da9c7cb Port PidginAvatar to GtkFileDialog
Gary Kramlich <grim@reaperworld.com>
parents: 42251
diff changeset
241 file = gtk_file_dialog_open_finish(dialog, result, &error);
08c24da9c7cb Port PidginAvatar to GtkFileDialog
Gary Kramlich <grim@reaperworld.com>
parents: 42251
diff changeset
242 if(error != NULL) {
08c24da9c7cb Port PidginAvatar to GtkFileDialog
Gary Kramlich <grim@reaperworld.com>
parents: 42251
diff changeset
243 g_message("failed to select custom avatar: %s", error->message);
08c24da9c7cb Port PidginAvatar to GtkFileDialog
Gary Kramlich <grim@reaperworld.com>
parents: 42251
diff changeset
244
08c24da9c7cb Port PidginAvatar to GtkFileDialog
Gary Kramlich <grim@reaperworld.com>
parents: 42251
diff changeset
245 g_clear_error(&error);
08c24da9c7cb Port PidginAvatar to GtkFileDialog
Gary Kramlich <grim@reaperworld.com>
parents: 42251
diff changeset
246 g_clear_object(&file);
41628
90f3621f94a5 Fix several issues with PidginAvatar in a conversation
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41600
diff changeset
247
90f3621f94a5 Fix several issues with PidginAvatar in a conversation
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41600
diff changeset
248 return;
90f3621f94a5 Fix several issues with PidginAvatar in a conversation
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41600
diff changeset
249 }
90f3621f94a5 Fix several issues with PidginAvatar in a conversation
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41600
diff changeset
250
90f3621f94a5 Fix several issues with PidginAvatar in a conversation
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41600
diff changeset
251 buddy = pidgin_avatar_get_effective_buddy(avatar);
90f3621f94a5 Fix several issues with PidginAvatar in a conversation
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41600
diff changeset
252 if(!PURPLE_IS_BUDDY(buddy)) {
42337
08c24da9c7cb Port PidginAvatar to GtkFileDialog
Gary Kramlich <grim@reaperworld.com>
parents: 42251
diff changeset
253 g_clear_object(&file);
41628
90f3621f94a5 Fix several issues with PidginAvatar in a conversation
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41600
diff changeset
254
90f3621f94a5 Fix several issues with PidginAvatar in a conversation
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41600
diff changeset
255 return;
90f3621f94a5 Fix several issues with PidginAvatar in a conversation
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41600
diff changeset
256 }
90f3621f94a5 Fix several issues with PidginAvatar in a conversation
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41600
diff changeset
257
90f3621f94a5 Fix several issues with PidginAvatar in a conversation
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41600
diff changeset
258 filename = g_file_get_path(file);
90f3621f94a5 Fix several issues with PidginAvatar in a conversation
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41600
diff changeset
259 if(filename != NULL) {
41733
a9085b52de8b Rename PurpleContact to PurpleMetaContact.
Gary Kramlich <grim@reaperworld.com>
parents: 41628
diff changeset
260 PurpleMetaContact *contact = purple_buddy_get_contact(buddy);
41628
90f3621f94a5 Fix several issues with PidginAvatar in a conversation
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41600
diff changeset
261 PurpleBlistNode *node = PURPLE_BLIST_NODE(contact);
90f3621f94a5 Fix several issues with PidginAvatar in a conversation
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41600
diff changeset
262
90f3621f94a5 Fix several issues with PidginAvatar in a conversation
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41600
diff changeset
263 purple_buddy_icons_node_set_custom_icon_from_file(node, filename);
90f3621f94a5 Fix several issues with PidginAvatar in a conversation
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41600
diff changeset
264
90f3621f94a5 Fix several issues with PidginAvatar in a conversation
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41600
diff changeset
265 pidgin_avatar_update(avatar);
90f3621f94a5 Fix several issues with PidginAvatar in a conversation
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41600
diff changeset
266 }
90f3621f94a5 Fix several issues with PidginAvatar in a conversation
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41600
diff changeset
267
42337
08c24da9c7cb Port PidginAvatar to GtkFileDialog
Gary Kramlich <grim@reaperworld.com>
parents: 42251
diff changeset
268 g_clear_pointer(&filename, g_free);
08c24da9c7cb Port PidginAvatar to GtkFileDialog
Gary Kramlich <grim@reaperworld.com>
parents: 42251
diff changeset
269 g_clear_object(&file);
41628
90f3621f94a5 Fix several issues with PidginAvatar in a conversation
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41600
diff changeset
270 }
90f3621f94a5 Fix several issues with PidginAvatar in a conversation
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41600
diff changeset
271
90f3621f94a5 Fix several issues with PidginAvatar in a conversation
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41600
diff changeset
272 static void
41947
7b3312d0760c Bump C standard to C99 for Pidgin files and fix warnings
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41733
diff changeset
273 pidgin_avatar_set_custom_cb(G_GNUC_UNUSED GSimpleAction *action,
7b3312d0760c Bump C standard to C99 for Pidgin files and fix warnings
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41733
diff changeset
274 G_GNUC_UNUSED GVariant *parameter, gpointer data)
41628
90f3621f94a5 Fix several issues with PidginAvatar in a conversation
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41600
diff changeset
275 {
90f3621f94a5 Fix several issues with PidginAvatar in a conversation
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41600
diff changeset
276 PidginAvatar *avatar = PIDGIN_AVATAR(data);
42337
08c24da9c7cb Port PidginAvatar to GtkFileDialog
Gary Kramlich <grim@reaperworld.com>
parents: 42251
diff changeset
277 GtkFileDialog *dialog = NULL;
41628
90f3621f94a5 Fix several issues with PidginAvatar in a conversation
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41600
diff changeset
278 GtkWindow *window = NULL;
90f3621f94a5 Fix several issues with PidginAvatar in a conversation
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41600
diff changeset
279
90f3621f94a5 Fix several issues with PidginAvatar in a conversation
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41600
diff changeset
280 window = GTK_WINDOW(gtk_widget_get_root(GTK_WIDGET(avatar)));
90f3621f94a5 Fix several issues with PidginAvatar in a conversation
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41600
diff changeset
281
42337
08c24da9c7cb Port PidginAvatar to GtkFileDialog
Gary Kramlich <grim@reaperworld.com>
parents: 42251
diff changeset
282 dialog = gtk_file_dialog_new();
08c24da9c7cb Port PidginAvatar to GtkFileDialog
Gary Kramlich <grim@reaperworld.com>
parents: 42251
diff changeset
283 gtk_file_dialog_set_title(dialog, _("Set Custom Avatar"));
08c24da9c7cb Port PidginAvatar to GtkFileDialog
Gary Kramlich <grim@reaperworld.com>
parents: 42251
diff changeset
284 gtk_file_dialog_set_accept_label(dialog, _("Set Custom"));
08c24da9c7cb Port PidginAvatar to GtkFileDialog
Gary Kramlich <grim@reaperworld.com>
parents: 42251
diff changeset
285 gtk_file_dialog_set_modal(dialog, TRUE);
41628
90f3621f94a5 Fix several issues with PidginAvatar in a conversation
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41600
diff changeset
286
42337
08c24da9c7cb Port PidginAvatar to GtkFileDialog
Gary Kramlich <grim@reaperworld.com>
parents: 42251
diff changeset
287 gtk_file_dialog_open(dialog, window, NULL,
08c24da9c7cb Port PidginAvatar to GtkFileDialog
Gary Kramlich <grim@reaperworld.com>
parents: 42251
diff changeset
288 pidgin_avatar_set_custom_dialog_cb, avatar);
42352
1c53950f9052 Migrate from GtkFileChooserNative to GtkFileDialog
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 42337
diff changeset
289 g_clear_object(&dialog);
41628
90f3621f94a5 Fix several issues with PidginAvatar in a conversation
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41600
diff changeset
290 }
90f3621f94a5 Fix several issues with PidginAvatar in a conversation
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41600
diff changeset
291
90f3621f94a5 Fix several issues with PidginAvatar in a conversation
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41600
diff changeset
292 static void
41947
7b3312d0760c Bump C standard to C99 for Pidgin files and fix warnings
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41733
diff changeset
293 pidgin_avatar_clear_custom_cb(G_GNUC_UNUSED GSimpleAction *action,
7b3312d0760c Bump C standard to C99 for Pidgin files and fix warnings
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41733
diff changeset
294 G_GNUC_UNUSED GVariant *parameter, gpointer data)
41628
90f3621f94a5 Fix several issues with PidginAvatar in a conversation
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41600
diff changeset
295 {
90f3621f94a5 Fix several issues with PidginAvatar in a conversation
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41600
diff changeset
296 PidginAvatar *avatar = PIDGIN_AVATAR(data);
90f3621f94a5 Fix several issues with PidginAvatar in a conversation
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41600
diff changeset
297 PurpleBuddy *buddy = NULL;
90f3621f94a5 Fix several issues with PidginAvatar in a conversation
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41600
diff changeset
298
90f3621f94a5 Fix several issues with PidginAvatar in a conversation
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41600
diff changeset
299 buddy = pidgin_avatar_get_effective_buddy(avatar);
90f3621f94a5 Fix several issues with PidginAvatar in a conversation
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41600
diff changeset
300 if(PURPLE_IS_BUDDY(buddy)) {
41733
a9085b52de8b Rename PurpleContact to PurpleMetaContact.
Gary Kramlich <grim@reaperworld.com>
parents: 41628
diff changeset
301 PurpleMetaContact *contact = purple_buddy_get_contact(buddy);
41628
90f3621f94a5 Fix several issues with PidginAvatar in a conversation
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41600
diff changeset
302 PurpleBlistNode *node = PURPLE_BLIST_NODE(contact);
90f3621f94a5 Fix several issues with PidginAvatar in a conversation
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41600
diff changeset
303
90f3621f94a5 Fix several issues with PidginAvatar in a conversation
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41600
diff changeset
304 purple_buddy_icons_node_set_custom_icon_from_file(node, NULL);
90f3621f94a5 Fix several issues with PidginAvatar in a conversation
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41600
diff changeset
305
90f3621f94a5 Fix several issues with PidginAvatar in a conversation
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41600
diff changeset
306 pidgin_avatar_update(avatar);
90f3621f94a5 Fix several issues with PidginAvatar in a conversation
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41600
diff changeset
307 }
90f3621f94a5 Fix several issues with PidginAvatar in a conversation
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41600
diff changeset
308 }
90f3621f94a5 Fix several issues with PidginAvatar in a conversation
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41600
diff changeset
309
90f3621f94a5 Fix several issues with PidginAvatar in a conversation
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41600
diff changeset
310 static GActionEntry actions[] = {
90f3621f94a5 Fix several issues with PidginAvatar in a conversation
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41600
diff changeset
311 {
90f3621f94a5 Fix several issues with PidginAvatar in a conversation
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41600
diff changeset
312 .name = "save-avatar",
90f3621f94a5 Fix several issues with PidginAvatar in a conversation
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41600
diff changeset
313 .activate = pidgin_avatar_save_cb,
90f3621f94a5 Fix several issues with PidginAvatar in a conversation
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41600
diff changeset
314 }, {
90f3621f94a5 Fix several issues with PidginAvatar in a conversation
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41600
diff changeset
315 .name = "set-custom-avatar",
90f3621f94a5 Fix several issues with PidginAvatar in a conversation
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41600
diff changeset
316 .activate = pidgin_avatar_set_custom_cb,
90f3621f94a5 Fix several issues with PidginAvatar in a conversation
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41600
diff changeset
317 }, {
90f3621f94a5 Fix several issues with PidginAvatar in a conversation
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41600
diff changeset
318 .name = "clear-custom-avatar",
90f3621f94a5 Fix several issues with PidginAvatar in a conversation
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41600
diff changeset
319 .activate = pidgin_avatar_clear_custom_cb,
90f3621f94a5 Fix several issues with PidginAvatar in a conversation
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41600
diff changeset
320 },
90f3621f94a5 Fix several issues with PidginAvatar in a conversation
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41600
diff changeset
321 };
90f3621f94a5 Fix several issues with PidginAvatar in a conversation
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41600
diff changeset
322
90f3621f94a5 Fix several issues with PidginAvatar in a conversation
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41600
diff changeset
323 /******************************************************************************
40810
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
324 * Callbacks
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 static gboolean
41536
ba0797a477e7 Convert PidginAvatar to GTK4
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41479
diff changeset
327 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
328 G_GNUC_UNUSED gint n_press,
ba0797a477e7 Convert PidginAvatar to GTK4
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41479
diff changeset
329 gdouble x,
ba0797a477e7 Convert PidginAvatar to GTK4
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41479
diff changeset
330 gdouble y,
40810
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
331 gpointer data)
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 PidginAvatar *avatar = PIDGIN_AVATAR(data);
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
334 GtkWidget *menu = NULL;
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
335
42353
5381c5c9affa Move PidginAvatar to a single resource file
Gary Kramlich <grim@reaperworld.com>
parents: 42352
diff changeset
336 menu = gtk_popover_menu_new_from_model(avatar->menu);
41536
ba0797a477e7 Convert PidginAvatar to GTK4
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41479
diff changeset
337 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
338 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
339 &(const GdkRectangle){(int)x, (int)y, 0, 0});
40810
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
340
41273
ef8cfc432444 Use GtkPopoverMenu in PidginAvatar
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41030
diff changeset
341 gtk_popover_popup(GTK_POPOVER(menu));
40810
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
342
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
343 return TRUE;
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
344 }
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 /*
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
347 * 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
348 * 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
349 * 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
350 * 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
351 */
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
352 static void
41947
7b3312d0760c Bump C standard to C99 for Pidgin files and fix warnings
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41733
diff changeset
353 pidgin_avatar_buddy_icon_updated(G_GNUC_UNUSED GObject *obj,
7b3312d0760c Bump C standard to C99 for Pidgin files and fix warnings
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41733
diff changeset
354 G_GNUC_UNUSED GParamSpec *pspec, gpointer d)
7b3312d0760c Bump C standard to C99 for Pidgin files and fix warnings
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41733
diff changeset
355 {
40810
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
356 PidginAvatar *avatar = PIDGIN_AVATAR(d);
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
357
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
358 pidgin_avatar_update(avatar);
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
359 }
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
360
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 * 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
363 * 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
364 * 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
365 * 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
366 */
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
367 static void
41947
7b3312d0760c Bump C standard to C99 for Pidgin files and fix warnings
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41733
diff changeset
368 pidgin_avatar_conversation_updated(G_GNUC_UNUSED GObject *obj,
7b3312d0760c Bump C standard to C99 for Pidgin files and fix warnings
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41733
diff changeset
369 G_GNUC_UNUSED GParamSpec *pspec, gpointer d)
40810
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
370 {
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
371 PidginAvatar *avatar = PIDGIN_AVATAR(d);
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
372
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
373 pidgin_avatar_update(avatar);
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
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
376 static gboolean
41536
ba0797a477e7 Convert PidginAvatar to GTK4
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41479
diff changeset
377 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
378 G_GNUC_UNUSED gdouble x,
ba0797a477e7 Convert PidginAvatar to GTK4
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41479
diff changeset
379 G_GNUC_UNUSED gdouble y,
40810
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
380 gpointer data)
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
381 {
41536
ba0797a477e7 Convert PidginAvatar to GTK4
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41479
diff changeset
382 PidginAvatar *avatar = PIDGIN_AVATAR(data);
40810
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
383
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
384 pidgin_avatar_set_animate(avatar, TRUE);
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
385
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
386 return FALSE;
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
387 }
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
388
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
389 static gboolean
41536
ba0797a477e7 Convert PidginAvatar to GTK4
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41479
diff changeset
390 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
391 gpointer data)
40810
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
392 {
41536
ba0797a477e7 Convert PidginAvatar to GTK4
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41479
diff changeset
393 PidginAvatar *avatar = PIDGIN_AVATAR(data);
40810
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
394
40821
1cfdaf481246 Remove the old avatar from the infopane.
Gary Kramlich <grim@reaperworld.com>
parents: 40810
diff changeset
395 pidgin_avatar_set_animate(avatar, FALSE);
40810
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
396
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
397 return FALSE;
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
398 }
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
399
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 * GObject Implementation
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_get_property(GObject *obj, guint param_id, 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 g_value_set_boolean(value, pidgin_avatar_get_animate(avatar));
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 g_value_set_object(value, pidgin_avatar_get_buddy(avatar));
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 g_value_set_object(value, pidgin_avatar_get_conversation(avatar));
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_set_property(GObject *obj, guint param_id, const GValue *value,
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
427 GParamSpec *pspec)
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 PidginAvatar *avatar = PIDGIN_AVATAR(obj);
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
430
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
431 switch(param_id) {
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
432 case PROP_ANIMATE:
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
433 pidgin_avatar_set_animate(avatar, g_value_get_boolean(value));
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
434 break;
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
435 case PROP_BUDDY:
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
436 pidgin_avatar_set_buddy(avatar, g_value_get_object(value));
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
437 break;
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
438 case PROP_CONVERSATION:
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
439 pidgin_avatar_set_conversation(avatar, g_value_get_object(value));
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
440 break;
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
441 default:
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
442 G_OBJECT_WARN_INVALID_PROPERTY_ID(obj, param_id, pspec);
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
443 break;
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
444 }
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
445 }
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
446
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
447 static void
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
448 pidgin_avatar_dispose(GObject *obj) {
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
449 PidginAvatar *avatar = PIDGIN_AVATAR(obj);
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 pidgin_avatar_set_buddy(avatar, NULL);
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
452 pidgin_avatar_set_conversation(avatar, NULL);
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
453
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
454 g_clear_object(&avatar->animation);
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
455
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
456 G_OBJECT_CLASS(pidgin_avatar_parent_class)->dispose(obj);
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
457 }
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
458
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
459 static void
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
460 pidgin_avatar_init(PidginAvatar *avatar) {
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
461 GSimpleActionGroup *group = NULL;
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
462
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
463 gtk_widget_init_template(GTK_WIDGET(avatar));
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
464
41628
90f3621f94a5 Fix several issues with PidginAvatar in a conversation
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41600
diff changeset
465 gtk_picture_set_content_fit(GTK_PICTURE(avatar->icon),
90f3621f94a5 Fix several issues with PidginAvatar in a conversation
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41600
diff changeset
466 GTK_CONTENT_FIT_SCALE_DOWN);
42251
63639da06cbd Require GTK 4.10 and GLib 2.76
Gary Kramlich <grim@reaperworld.com>
parents: 41981
diff changeset
467
40810
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
468 /* Now setup our actions. */
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
469 group = g_simple_action_group_new();
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
470 g_action_map_add_action_entries(G_ACTION_MAP(group), actions,
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
471 G_N_ELEMENTS(actions), avatar);
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
472
40821
1cfdaf481246 Remove the old avatar from the infopane.
Gary Kramlich <grim@reaperworld.com>
parents: 40810
diff changeset
473 gtk_widget_insert_action_group(GTK_WIDGET(avatar), "avatar",
40810
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
474 G_ACTION_GROUP(group));
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
475 }
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 static void
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
478 pidgin_avatar_class_init(PidginAvatarClass *klass) {
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
479 GObjectClass *obj_class = G_OBJECT_CLASS(klass);
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
480 GtkWidgetClass *widget_class = GTK_WIDGET_CLASS(klass);
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
481
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
482 obj_class->get_property = pidgin_avatar_get_property;
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
483 obj_class->set_property = pidgin_avatar_set_property;
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
484 obj_class->dispose = pidgin_avatar_dispose;
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
485
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
486 /**
41479
3d2e114380f6 Add source files to GObject introspection
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41273
diff changeset
487 * PidginAvatar:animate:
40810
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
488 *
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
489 * Whether or not an animated avatar should be animated.
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
490 */
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
491 properties[PROP_ANIMATE] = g_param_spec_boolean(
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
492 "animate", "animate",
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
493 "Whether or not to animate an animated avatar",
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
494 FALSE,
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
495 G_PARAM_READWRITE | G_PARAM_CONSTRUCT | G_PARAM_STATIC_STRINGS);
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
496
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
497 /**
41479
3d2e114380f6 Add source files to GObject introspection
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41273
diff changeset
498 * PidginAvatar:buddy:
40810
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
499 *
41479
3d2e114380f6 Add source files to GObject introspection
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41273
diff changeset
500 * The buddy whose avatar will be displayed.
40810
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
501 */
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
502 properties[PROP_BUDDY] = g_param_spec_object(
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
503 "buddy", "buddy",
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
504 "The buddy whose avatar to display",
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
505 PURPLE_TYPE_BUDDY,
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
506 G_PARAM_READWRITE | G_PARAM_CONSTRUCT | G_PARAM_STATIC_STRINGS);
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
507
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
508 /**
41479
3d2e114380f6 Add source files to GObject introspection
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41273
diff changeset
509 * PidginAvatar:conversation:
40810
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
510 *
41479
3d2e114380f6 Add source files to GObject introspection
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41273
diff changeset
511 * 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
512 */
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
513 properties[PROP_CONVERSATION] = g_param_spec_object(
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
514 "conversation", "conversation",
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
515 "The conversation used to find the correct buddy.",
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
516 PURPLE_TYPE_CONVERSATION,
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
517 G_PARAM_READWRITE | G_PARAM_CONSTRUCT | G_PARAM_STATIC_STRINGS);
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 g_object_class_install_properties(obj_class, N_PROPERTIES, properties);
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
520
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
521 gtk_widget_class_set_template_from_resource(
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
522 widget_class,
42353
5381c5c9affa Move PidginAvatar to a single resource file
Gary Kramlich <grim@reaperworld.com>
parents: 42352
diff changeset
523 "/im/pidgin/Pidgin3/avatar.ui"
40810
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
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
526 gtk_widget_class_bind_template_child(widget_class, PidginAvatar, icon);
42353
5381c5c9affa Move PidginAvatar to a single resource file
Gary Kramlich <grim@reaperworld.com>
parents: 42352
diff changeset
527 gtk_widget_class_bind_template_child(widget_class, PidginAvatar, menu);
40810
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
528
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
529 gtk_widget_class_bind_template_callback(widget_class,
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
530 pidgin_avatar_button_press_handler);
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
531 gtk_widget_class_bind_template_callback(widget_class,
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
532 pidgin_avatar_enter_notify_handler);
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
533 gtk_widget_class_bind_template_callback(widget_class,
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
534 pidgin_avatar_leave_notify_handler);
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 * API
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
539 *****************************************************************************/
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
540 GtkWidget *
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
541 pidgin_avatar_new(void) {
42592
6b65c0e4ba15 Remove unnecessary casts for GObject methods
Gary Kramlich <grim@reaperworld.com>
parents: 42575
diff changeset
542 return g_object_new(PIDGIN_TYPE_AVATAR, NULL);
40810
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
543 }
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 void
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
546 pidgin_avatar_set_animate(PidginAvatar *avatar, gboolean animate) {
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
547 g_return_if_fail(PIDGIN_IS_AVATAR(avatar));
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
548
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
549 avatar->animate = animate;
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
550
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
551 if(GDK_IS_PIXBUF_ANIMATION(avatar->animation)) {
41628
90f3621f94a5 Fix several issues with PidginAvatar in a conversation
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41600
diff changeset
552 if(avatar->animate &&
90f3621f94a5 Fix several issues with PidginAvatar in a conversation
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41600
diff changeset
553 !gdk_pixbuf_animation_is_static_image(avatar->animation)) {
90f3621f94a5 Fix several issues with PidginAvatar in a conversation
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41600
diff changeset
554 gtk_picture_set_pixbuf(GTK_PICTURE(avatar->icon),
90f3621f94a5 Fix several issues with PidginAvatar in a conversation
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41600
diff changeset
555 GDK_PIXBUF(avatar->animation));
40810
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
556 } else {
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
557 GdkPixbuf *frame = NULL;
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
558
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
559 frame = gdk_pixbuf_animation_get_static_image(avatar->animation);
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
560
41628
90f3621f94a5 Fix several issues with PidginAvatar in a conversation
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41600
diff changeset
561 gtk_picture_set_pixbuf(GTK_PICTURE(avatar->icon), frame);
40810
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 }
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
564 }
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
565
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
566 gboolean
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
567 pidgin_avatar_get_animate(PidginAvatar *avatar) {
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
568 g_return_val_if_fail(PIDGIN_IS_AVATAR(avatar), FALSE);
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 return avatar->animate;
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
571 }
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
572
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
573 void
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
574 pidgin_avatar_set_buddy(PidginAvatar *avatar, PurpleBuddy *buddy) {
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
575 g_return_if_fail(PIDGIN_IS_AVATAR(avatar));
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 /* Remove our old signal handler. */
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
578 if(PURPLE_IS_BUDDY(avatar->buddy)) {
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
579 g_signal_handlers_disconnect_by_func(avatar->buddy,
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
580 pidgin_avatar_buddy_icon_updated,
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
581 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
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
584 if(g_set_object(&avatar->buddy, buddy)) {
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
585 pidgin_avatar_update(avatar);
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
586
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
587 g_object_notify_by_pspec(G_OBJECT(avatar), properties[PROP_BUDDY]);
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 /* 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
591 if(PURPLE_IS_BUDDY(avatar->buddy)) {
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
592 g_signal_connect(G_OBJECT(avatar->buddy), "notify::icon",
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
593 G_CALLBACK(pidgin_avatar_buddy_icon_updated), avatar);
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 }
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
596
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
597 PurpleBuddy *
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
598 pidgin_avatar_get_buddy(PidginAvatar *avatar) {
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
599 g_return_val_if_fail(PIDGIN_IS_AVATAR(avatar), NULL);
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 return avatar->buddy;
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
602 }
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
603
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
604 void
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
605 pidgin_avatar_set_conversation(PidginAvatar *avatar,
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
606 PurpleConversation *conversation)
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
607 {
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
608 g_return_if_fail(PIDGIN_IS_AVATAR(avatar));
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
609
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
610 /* Remove our old signal handler. */
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
611 if(PURPLE_IS_CONVERSATION(avatar->conversation)) {
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
612 g_signal_handlers_disconnect_by_func(avatar->conversation,
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
613 pidgin_avatar_conversation_updated,
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
614 avatar);
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
615 }
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
616
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
617 if(g_set_object(&avatar->conversation, conversation)) {
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
618 g_object_notify_by_pspec(G_OBJECT(avatar),
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
619 properties[PROP_CONVERSATION]);
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
620 }
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
621
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
622 /* 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
623 if(PURPLE_IS_CONVERSATION(avatar->conversation)) {
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
624 g_signal_connect(G_OBJECT(avatar->conversation), "notify",
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
625 G_CALLBACK(pidgin_avatar_conversation_updated), avatar);
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
626 }
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
627 }
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
628
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
629 PurpleConversation *
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
630 pidgin_avatar_get_conversation(PidginAvatar *avatar) {
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
631 g_return_val_if_fail(PIDGIN_IS_AVATAR(avatar), NULL);
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
632
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
633 return avatar->conversation;
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
634 }

mercurial