pidgin/pidginavatar.c

Thu, 07 Aug 2025 21:34:33 -0500

author
Gary Kramlich <grim@reaperworld.com>
date
Thu, 07 Aug 2025 21:34:33 -0500
changeset 43301
0e43dc8462e8
parent 43285
acde304cf24c
permissions
-rw-r--r--

Replace Purple.Avatar with Purple.Image

Purple.Avatar was unnecessary and this just moves everything to Purple.Image
which should work just fine.

Testing Done:
Loaded a demo account and verified that the avatars were shown in the contact list properly. Also called in the turtles.

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

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
42723
3761ba966eed Stop using PurpleBuddy in Pidgin
Gary Kramlich <grim@reaperworld.com>
parents: 42714
diff changeset
36 PurpleContactInfo *info;
40810
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,
42723
3761ba966eed Stop using PurpleBuddy in Pidgin
Gary Kramlich <grim@reaperworld.com>
parents: 42714
diff changeset
43 PROP_CONTACT_INFO,
40810
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 *****************************************************************************/
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
54 static void
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
55 pidgin_avatar_update(PidginAvatar *avatar) {
43301
0e43dc8462e8 Replace Purple.Avatar with Purple.Image
Gary Kramlich <grim@reaperworld.com>
parents: 43285
diff changeset
56 PurpleImage *purple_avatar = NULL;
42979
d9f973ac3afd Use GdkTexture to wrap GdkPixbuf
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 42723
diff changeset
57 GdkTexture *texture = NULL;
40810
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
58
42723
3761ba966eed Stop using PurpleBuddy in Pidgin
Gary Kramlich <grim@reaperworld.com>
parents: 42714
diff changeset
59 if(PURPLE_IS_CONTACT_INFO(avatar->info)) {
3761ba966eed Stop using PurpleBuddy in Pidgin
Gary Kramlich <grim@reaperworld.com>
parents: 42714
diff changeset
60 purple_avatar = purple_contact_info_get_avatar(avatar->info);
3761ba966eed Stop using PurpleBuddy in Pidgin
Gary Kramlich <grim@reaperworld.com>
parents: 42714
diff changeset
61 } else if(PURPLE_IS_CONVERSATION(avatar->conversation)) {
3761ba966eed Stop using PurpleBuddy in Pidgin
Gary Kramlich <grim@reaperworld.com>
parents: 42714
diff changeset
62 purple_avatar = purple_conversation_get_avatar(avatar->conversation);
3761ba966eed Stop using PurpleBuddy in Pidgin
Gary Kramlich <grim@reaperworld.com>
parents: 42714
diff changeset
63 }
3761ba966eed Stop using PurpleBuddy in Pidgin
Gary Kramlich <grim@reaperworld.com>
parents: 42714
diff changeset
64
43301
0e43dc8462e8 Replace Purple.Avatar with Purple.Image
Gary Kramlich <grim@reaperworld.com>
parents: 43285
diff changeset
65 if(PURPLE_IS_IMAGE(purple_avatar)) {
0e43dc8462e8 Replace Purple.Avatar with Purple.Image
Gary Kramlich <grim@reaperworld.com>
parents: 43285
diff changeset
66 GBytes *contents = NULL;
0e43dc8462e8 Replace Purple.Avatar with Purple.Image
Gary Kramlich <grim@reaperworld.com>
parents: 43285
diff changeset
67 GError *error = NULL;
40810
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
68
43301
0e43dc8462e8 Replace Purple.Avatar with Purple.Image
Gary Kramlich <grim@reaperworld.com>
parents: 43285
diff changeset
69 contents = purple_image_get_contents(purple_avatar);
0e43dc8462e8 Replace Purple.Avatar with Purple.Image
Gary Kramlich <grim@reaperworld.com>
parents: 43285
diff changeset
70 texture = gdk_texture_new_from_bytes(contents, &error);
0e43dc8462e8 Replace Purple.Avatar with Purple.Image
Gary Kramlich <grim@reaperworld.com>
parents: 43285
diff changeset
71 if(error != NULL) {
0e43dc8462e8 Replace Purple.Avatar with Purple.Image
Gary Kramlich <grim@reaperworld.com>
parents: 43285
diff changeset
72 g_warning("failed to create texture from bytes: %s",
0e43dc8462e8 Replace Purple.Avatar with Purple.Image
Gary Kramlich <grim@reaperworld.com>
parents: 43285
diff changeset
73 error->message);
0e43dc8462e8 Replace Purple.Avatar with Purple.Image
Gary Kramlich <grim@reaperworld.com>
parents: 43285
diff changeset
74 g_clear_error(&error);
0e43dc8462e8 Replace Purple.Avatar with Purple.Image
Gary Kramlich <grim@reaperworld.com>
parents: 43285
diff changeset
75 texture = NULL;
41600
5fbe92363b76 Make PidginAvatar use a GtkPicture instead of GtkImage
Gary Kramlich <grim@reaperworld.com>
parents: 41564
diff changeset
76 }
5fbe92363b76 Make PidginAvatar use a GtkPicture instead of GtkImage
Gary Kramlich <grim@reaperworld.com>
parents: 41564
diff changeset
77 }
40810
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
78
42979
d9f973ac3afd Use GdkTexture to wrap GdkPixbuf
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 42723
diff changeset
79 gtk_picture_set_paintable(GTK_PICTURE(avatar->icon),
d9f973ac3afd Use GdkTexture to wrap GdkPixbuf
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 42723
diff changeset
80 GDK_PAINTABLE(texture));
40810
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
81
42979
d9f973ac3afd Use GdkTexture to wrap GdkPixbuf
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 42723
diff changeset
82 g_clear_object(&texture);
40810
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
83 }
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
84
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
85 /******************************************************************************
41628
90f3621f94a5 Fix several issues with PidginAvatar in a conversation
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41600
diff changeset
86 * Actions
90f3621f94a5 Fix several issues with PidginAvatar in a conversation
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41600
diff changeset
87 *****************************************************************************/
42723
3761ba966eed Stop using PurpleBuddy in Pidgin
Gary Kramlich <grim@reaperworld.com>
parents: 42714
diff changeset
88 static GActionEntry actions[] = {};
41628
90f3621f94a5 Fix several issues with PidginAvatar in a conversation
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41600
diff changeset
89
90f3621f94a5 Fix several issues with PidginAvatar in a conversation
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41600
diff changeset
90 /******************************************************************************
40810
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
91 * Callbacks
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
92 *****************************************************************************/
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
93 static gboolean
41536
ba0797a477e7 Convert PidginAvatar to GTK4
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41479
diff changeset
94 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
95 G_GNUC_UNUSED gint n_press,
ba0797a477e7 Convert PidginAvatar to GTK4
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41479
diff changeset
96 gdouble x,
ba0797a477e7 Convert PidginAvatar to GTK4
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41479
diff changeset
97 gdouble y,
40810
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
98 gpointer data)
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 PidginAvatar *avatar = PIDGIN_AVATAR(data);
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
101 GtkWidget *menu = NULL;
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
102
42353
5381c5c9affa Move PidginAvatar to a single resource file
Gary Kramlich <grim@reaperworld.com>
parents: 42352
diff changeset
103 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
104 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
105 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
106 &(const GdkRectangle){(int)x, (int)y, 0, 0});
40810
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
107
41273
ef8cfc432444 Use GtkPopoverMenu in PidginAvatar
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41030
diff changeset
108 gtk_popover_popup(GTK_POPOVER(menu));
40810
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 return TRUE;
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
111 }
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
112
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
113 /*
42723
3761ba966eed Stop using PurpleBuddy in Pidgin
Gary Kramlich <grim@reaperworld.com>
parents: 42714
diff changeset
114 * This function is a callback for when properties change on the contact info
3761ba966eed Stop using PurpleBuddy in Pidgin
Gary Kramlich <grim@reaperworld.com>
parents: 42714
diff changeset
115 * we're tracking. It should not be reused for the conversation we're tracking
40810
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
116 * because we have to disconnect old handlers and reuse of this function will
42723
3761ba966eed Stop using PurpleBuddy in Pidgin
Gary Kramlich <grim@reaperworld.com>
parents: 42714
diff changeset
117 * cause issues if a contact info is changed but a conversation is not and vice
3761ba966eed Stop using PurpleBuddy in Pidgin
Gary Kramlich <grim@reaperworld.com>
parents: 42714
diff changeset
118 * versa.
40810
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
119 */
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
120 static void
42723
3761ba966eed Stop using PurpleBuddy in Pidgin
Gary Kramlich <grim@reaperworld.com>
parents: 42714
diff changeset
121 pidgin_avatar_contact_info_updated(G_GNUC_UNUSED GObject *obj,
3761ba966eed Stop using PurpleBuddy in Pidgin
Gary Kramlich <grim@reaperworld.com>
parents: 42714
diff changeset
122 G_GNUC_UNUSED GParamSpec *pspec,
3761ba966eed Stop using PurpleBuddy in Pidgin
Gary Kramlich <grim@reaperworld.com>
parents: 42714
diff changeset
123 gpointer d)
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
124 {
40810
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
125 PidginAvatar *avatar = PIDGIN_AVATAR(d);
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
126
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
127 pidgin_avatar_update(avatar);
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
128 }
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
129
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
130 /*
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
131 * 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
132 * 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
133 * 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
134 * 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
135 */
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
136 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
137 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
138 G_GNUC_UNUSED GParamSpec *pspec, gpointer d)
40810
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
139 {
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
140 PidginAvatar *avatar = PIDGIN_AVATAR(d);
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
141
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
142 pidgin_avatar_update(avatar);
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
143 }
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
144
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
145 static gboolean
41536
ba0797a477e7 Convert PidginAvatar to GTK4
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41479
diff changeset
146 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
147 G_GNUC_UNUSED gdouble x,
ba0797a477e7 Convert PidginAvatar to GTK4
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41479
diff changeset
148 G_GNUC_UNUSED gdouble y,
40810
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
149 gpointer data)
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
150 {
41536
ba0797a477e7 Convert PidginAvatar to GTK4
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41479
diff changeset
151 PidginAvatar *avatar = PIDGIN_AVATAR(data);
40810
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
152
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
153 pidgin_avatar_set_animate(avatar, TRUE);
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
154
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
155 return FALSE;
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
156 }
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
157
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
158 static gboolean
41536
ba0797a477e7 Convert PidginAvatar to GTK4
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41479
diff changeset
159 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
160 gpointer data)
40810
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
161 {
41536
ba0797a477e7 Convert PidginAvatar to GTK4
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41479
diff changeset
162 PidginAvatar *avatar = PIDGIN_AVATAR(data);
40810
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
163
40821
1cfdaf481246 Remove the old avatar from the infopane.
Gary Kramlich <grim@reaperworld.com>
parents: 40810
diff changeset
164 pidgin_avatar_set_animate(avatar, FALSE);
40810
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
165
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
166 return FALSE;
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
167 }
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
168
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
169 /******************************************************************************
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
170 * GObject Implementation
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
171 *****************************************************************************/
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
172 static void
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
173 pidgin_avatar_get_property(GObject *obj, guint param_id, GValue *value,
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
174 GParamSpec *pspec)
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
175 {
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
176 PidginAvatar *avatar = PIDGIN_AVATAR(obj);
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
177
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
178 switch(param_id) {
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
179 case PROP_ANIMATE:
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
180 g_value_set_boolean(value, pidgin_avatar_get_animate(avatar));
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
181 break;
42723
3761ba966eed Stop using PurpleBuddy in Pidgin
Gary Kramlich <grim@reaperworld.com>
parents: 42714
diff changeset
182 case PROP_CONTACT_INFO:
3761ba966eed Stop using PurpleBuddy in Pidgin
Gary Kramlich <grim@reaperworld.com>
parents: 42714
diff changeset
183 g_value_set_object(value, pidgin_avatar_get_contact_info(avatar));
40810
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
184 break;
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
185 case PROP_CONVERSATION:
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
186 g_value_set_object(value, pidgin_avatar_get_conversation(avatar));
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
187 break;
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
188 default:
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
189 G_OBJECT_WARN_INVALID_PROPERTY_ID(obj, param_id, pspec);
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
190 break;
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
191 }
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
192 }
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
193
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
194 static void
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
195 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
196 GParamSpec *pspec)
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
197 {
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
198 PidginAvatar *avatar = PIDGIN_AVATAR(obj);
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
199
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
200 switch(param_id) {
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
201 case PROP_ANIMATE:
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
202 pidgin_avatar_set_animate(avatar, g_value_get_boolean(value));
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
203 break;
42723
3761ba966eed Stop using PurpleBuddy in Pidgin
Gary Kramlich <grim@reaperworld.com>
parents: 42714
diff changeset
204 case PROP_CONTACT_INFO:
3761ba966eed Stop using PurpleBuddy in Pidgin
Gary Kramlich <grim@reaperworld.com>
parents: 42714
diff changeset
205 pidgin_avatar_set_contact_info(avatar, g_value_get_object(value));
40810
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
206 break;
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
207 case PROP_CONVERSATION:
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
208 pidgin_avatar_set_conversation(avatar, g_value_get_object(value));
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
209 break;
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
210 default:
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
211 G_OBJECT_WARN_INVALID_PROPERTY_ID(obj, param_id, pspec);
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
212 break;
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
213 }
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
214 }
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
215
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
216 static void
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
217 pidgin_avatar_dispose(GObject *obj) {
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
218 PidginAvatar *avatar = PIDGIN_AVATAR(obj);
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
219
42723
3761ba966eed Stop using PurpleBuddy in Pidgin
Gary Kramlich <grim@reaperworld.com>
parents: 42714
diff changeset
220 g_clear_object(&avatar->info);
3761ba966eed Stop using PurpleBuddy in Pidgin
Gary Kramlich <grim@reaperworld.com>
parents: 42714
diff changeset
221 g_clear_object(&avatar->conversation);
40810
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
222
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
223 g_clear_object(&avatar->animation);
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
224
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
225 G_OBJECT_CLASS(pidgin_avatar_parent_class)->dispose(obj);
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
226 }
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
227
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
228 static void
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
229 pidgin_avatar_init(PidginAvatar *avatar) {
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
230 GSimpleActionGroup *group = NULL;
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
231
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
232 gtk_widget_init_template(GTK_WIDGET(avatar));
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
233
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
234 /* Now setup our actions. */
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
235 group = g_simple_action_group_new();
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
236 g_action_map_add_action_entries(G_ACTION_MAP(group), actions,
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
237 G_N_ELEMENTS(actions), avatar);
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
238
40821
1cfdaf481246 Remove the old avatar from the infopane.
Gary Kramlich <grim@reaperworld.com>
parents: 40810
diff changeset
239 gtk_widget_insert_action_group(GTK_WIDGET(avatar), "avatar",
40810
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
240 G_ACTION_GROUP(group));
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
241 }
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
242
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
243 static void
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
244 pidgin_avatar_class_init(PidginAvatarClass *klass) {
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
245 GObjectClass *obj_class = G_OBJECT_CLASS(klass);
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
246 GtkWidgetClass *widget_class = GTK_WIDGET_CLASS(klass);
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
247
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
248 obj_class->get_property = pidgin_avatar_get_property;
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
249 obj_class->set_property = pidgin_avatar_set_property;
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
250 obj_class->dispose = pidgin_avatar_dispose;
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
251
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
252 /**
41479
3d2e114380f6 Add source files to GObject introspection
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41273
diff changeset
253 * PidginAvatar:animate:
40810
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
254 *
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
255 * Whether or not an animated avatar should be animated.
43285
acde304cf24c Fix some Since tags
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 43072
diff changeset
256 *
acde304cf24c Fix some Since tags
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 43072
diff changeset
257 * Since: 3.0
40810
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
258 */
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
259 properties[PROP_ANIMATE] = g_param_spec_boolean(
43072
a59a119b74f5 Remove nick and blurb from Pidgin properties
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 42979
diff changeset
260 "animate", NULL, NULL,
40810
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
261 FALSE,
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
262 G_PARAM_READWRITE | G_PARAM_CONSTRUCT | G_PARAM_STATIC_STRINGS);
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
263
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
264 /**
42723
3761ba966eed Stop using PurpleBuddy in Pidgin
Gary Kramlich <grim@reaperworld.com>
parents: 42714
diff changeset
265 * PidginAvatar:contact-info:
40810
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
266 *
42723
3761ba966eed Stop using PurpleBuddy in Pidgin
Gary Kramlich <grim@reaperworld.com>
parents: 42714
diff changeset
267 * The contact info whose avatar will be displayed.
43285
acde304cf24c Fix some Since tags
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 43072
diff changeset
268 *
acde304cf24c Fix some Since tags
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 43072
diff changeset
269 * Since: 3.0
40810
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
270 */
42723
3761ba966eed Stop using PurpleBuddy in Pidgin
Gary Kramlich <grim@reaperworld.com>
parents: 42714
diff changeset
271 properties[PROP_CONTACT_INFO] = g_param_spec_object(
43072
a59a119b74f5 Remove nick and blurb from Pidgin properties
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 42979
diff changeset
272 "contact-info", NULL, NULL,
42723
3761ba966eed Stop using PurpleBuddy in Pidgin
Gary Kramlich <grim@reaperworld.com>
parents: 42714
diff changeset
273 PURPLE_TYPE_CONTACT_INFO,
3761ba966eed Stop using PurpleBuddy in Pidgin
Gary Kramlich <grim@reaperworld.com>
parents: 42714
diff changeset
274 G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS);
40810
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
275
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
276 /**
41479
3d2e114380f6 Add source files to GObject introspection
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41273
diff changeset
277 * PidginAvatar:conversation:
40810
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
278 *
42723
3761ba966eed Stop using PurpleBuddy in Pidgin
Gary Kramlich <grim@reaperworld.com>
parents: 42714
diff changeset
279 * The conversation which will be used to find the correct avatar.
43285
acde304cf24c Fix some Since tags
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 43072
diff changeset
280 *
acde304cf24c Fix some Since tags
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 43072
diff changeset
281 * Since: 3.0
40810
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
282 */
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
283 properties[PROP_CONVERSATION] = g_param_spec_object(
43072
a59a119b74f5 Remove nick and blurb from Pidgin properties
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 42979
diff changeset
284 "conversation", NULL, NULL,
40810
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
285 PURPLE_TYPE_CONVERSATION,
42723
3761ba966eed Stop using PurpleBuddy in Pidgin
Gary Kramlich <grim@reaperworld.com>
parents: 42714
diff changeset
286 G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS);
40810
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
287
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
288 g_object_class_install_properties(obj_class, N_PROPERTIES, properties);
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
289
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
290 gtk_widget_class_set_template_from_resource(
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
291 widget_class,
42353
5381c5c9affa Move PidginAvatar to a single resource file
Gary Kramlich <grim@reaperworld.com>
parents: 42352
diff changeset
292 "/im/pidgin/Pidgin3/avatar.ui"
40810
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
293 );
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
294
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
295 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
296 gtk_widget_class_bind_template_child(widget_class, PidginAvatar, menu);
40810
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
297
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
298 gtk_widget_class_bind_template_callback(widget_class,
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
299 pidgin_avatar_button_press_handler);
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
300 gtk_widget_class_bind_template_callback(widget_class,
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
301 pidgin_avatar_enter_notify_handler);
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
302 gtk_widget_class_bind_template_callback(widget_class,
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
303 pidgin_avatar_leave_notify_handler);
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
304 }
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
305
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
306 /******************************************************************************
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
307 * API
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
308 *****************************************************************************/
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
309 GtkWidget *
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
310 pidgin_avatar_new(void) {
42592
6b65c0e4ba15 Remove unnecessary casts for GObject methods
Gary Kramlich <grim@reaperworld.com>
parents: 42575
diff changeset
311 return g_object_new(PIDGIN_TYPE_AVATAR, NULL);
40810
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
312 }
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
313
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
314 void
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
315 pidgin_avatar_set_animate(PidginAvatar *avatar, gboolean animate) {
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
316 g_return_if_fail(PIDGIN_IS_AVATAR(avatar));
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
317
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
318 avatar->animate = animate;
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
319
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
320 if(GDK_IS_PIXBUF_ANIMATION(avatar->animation)) {
42979
d9f973ac3afd Use GdkTexture to wrap GdkPixbuf
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 42723
diff changeset
321 GdkTexture *texture = NULL;
d9f973ac3afd Use GdkTexture to wrap GdkPixbuf
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 42723
diff changeset
322
41628
90f3621f94a5 Fix several issues with PidginAvatar in a conversation
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41600
diff changeset
323 if(avatar->animate &&
90f3621f94a5 Fix several issues with PidginAvatar in a conversation
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41600
diff changeset
324 !gdk_pixbuf_animation_is_static_image(avatar->animation)) {
42979
d9f973ac3afd Use GdkTexture to wrap GdkPixbuf
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 42723
diff changeset
325 texture = gdk_texture_new_for_pixbuf(GDK_PIXBUF(avatar->animation));
40810
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
326 } else {
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
327 GdkPixbuf *frame = NULL;
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
328
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
329 frame = gdk_pixbuf_animation_get_static_image(avatar->animation);
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
330
42979
d9f973ac3afd Use GdkTexture to wrap GdkPixbuf
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 42723
diff changeset
331 texture = gdk_texture_new_for_pixbuf(frame);
40810
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
332 }
42979
d9f973ac3afd Use GdkTexture to wrap GdkPixbuf
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 42723
diff changeset
333
d9f973ac3afd Use GdkTexture to wrap GdkPixbuf
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 42723
diff changeset
334 gtk_picture_set_paintable(GTK_PICTURE(avatar->icon),
d9f973ac3afd Use GdkTexture to wrap GdkPixbuf
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 42723
diff changeset
335 GDK_PAINTABLE(texture));
d9f973ac3afd Use GdkTexture to wrap GdkPixbuf
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 42723
diff changeset
336 g_object_unref(texture);
40810
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
337 }
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
338 }
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
339
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
340 gboolean
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
341 pidgin_avatar_get_animate(PidginAvatar *avatar) {
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
342 g_return_val_if_fail(PIDGIN_IS_AVATAR(avatar), FALSE);
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
343
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
344 return avatar->animate;
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 void
42723
3761ba966eed Stop using PurpleBuddy in Pidgin
Gary Kramlich <grim@reaperworld.com>
parents: 42714
diff changeset
348 pidgin_avatar_set_contact_info(PidginAvatar *avatar, PurpleContactInfo *info) {
40810
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
349 g_return_if_fail(PIDGIN_IS_AVATAR(avatar));
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
350
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
351 /* Remove our old signal handler. */
42723
3761ba966eed Stop using PurpleBuddy in Pidgin
Gary Kramlich <grim@reaperworld.com>
parents: 42714
diff changeset
352 if(PURPLE_IS_CONTACT_INFO(avatar->info)) {
3761ba966eed Stop using PurpleBuddy in Pidgin
Gary Kramlich <grim@reaperworld.com>
parents: 42714
diff changeset
353 g_signal_handlers_disconnect_by_func(avatar->info,
3761ba966eed Stop using PurpleBuddy in Pidgin
Gary Kramlich <grim@reaperworld.com>
parents: 42714
diff changeset
354 pidgin_avatar_contact_info_updated,
40810
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
355 avatar);
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
356 }
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
357
42723
3761ba966eed Stop using PurpleBuddy in Pidgin
Gary Kramlich <grim@reaperworld.com>
parents: 42714
diff changeset
358 if(g_set_object(&avatar->info, info)) {
40810
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
359 pidgin_avatar_update(avatar);
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
360
42723
3761ba966eed Stop using PurpleBuddy in Pidgin
Gary Kramlich <grim@reaperworld.com>
parents: 42714
diff changeset
361 g_object_notify_by_pspec(G_OBJECT(avatar),
3761ba966eed Stop using PurpleBuddy in Pidgin
Gary Kramlich <grim@reaperworld.com>
parents: 42714
diff changeset
362 properties[PROP_CONTACT_INFO]);
40810
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
363 }
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
364
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
365 /* Add the notify signal so we can update when the icon changes. */
42723
3761ba966eed Stop using PurpleBuddy in Pidgin
Gary Kramlich <grim@reaperworld.com>
parents: 42714
diff changeset
366 if(PURPLE_IS_CONTACT_INFO(avatar->info)) {
3761ba966eed Stop using PurpleBuddy in Pidgin
Gary Kramlich <grim@reaperworld.com>
parents: 42714
diff changeset
367 g_signal_connect_object(G_OBJECT(avatar->info), "notify::avatar",
3761ba966eed Stop using PurpleBuddy in Pidgin
Gary Kramlich <grim@reaperworld.com>
parents: 42714
diff changeset
368 G_CALLBACK(pidgin_avatar_contact_info_updated),
3761ba966eed Stop using PurpleBuddy in Pidgin
Gary Kramlich <grim@reaperworld.com>
parents: 42714
diff changeset
369 avatar, 0);
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 }
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
372
42723
3761ba966eed Stop using PurpleBuddy in Pidgin
Gary Kramlich <grim@reaperworld.com>
parents: 42714
diff changeset
373 PurpleContactInfo *
3761ba966eed Stop using PurpleBuddy in Pidgin
Gary Kramlich <grim@reaperworld.com>
parents: 42714
diff changeset
374 pidgin_avatar_get_contact_info(PidginAvatar *avatar) {
40810
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
375 g_return_val_if_fail(PIDGIN_IS_AVATAR(avatar), NULL);
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
376
42723
3761ba966eed Stop using PurpleBuddy in Pidgin
Gary Kramlich <grim@reaperworld.com>
parents: 42714
diff changeset
377 return avatar->info;
40810
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
378 }
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
379
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
380 void
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
381 pidgin_avatar_set_conversation(PidginAvatar *avatar,
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
382 PurpleConversation *conversation)
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 g_return_if_fail(PIDGIN_IS_AVATAR(avatar));
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 /* Remove our old signal handler. */
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
387 if(PURPLE_IS_CONVERSATION(avatar->conversation)) {
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
388 g_signal_handlers_disconnect_by_func(avatar->conversation,
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
389 pidgin_avatar_conversation_updated,
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
390 avatar);
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
391 }
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
392
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
393 if(g_set_object(&avatar->conversation, conversation)) {
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
394 g_object_notify_by_pspec(G_OBJECT(avatar),
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
395 properties[PROP_CONVERSATION]);
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
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
398 /* 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
399 if(PURPLE_IS_CONVERSATION(avatar->conversation)) {
42723
3761ba966eed Stop using PurpleBuddy in Pidgin
Gary Kramlich <grim@reaperworld.com>
parents: 42714
diff changeset
400 g_signal_connect_object(G_OBJECT(avatar->conversation), "notify",
3761ba966eed Stop using PurpleBuddy in Pidgin
Gary Kramlich <grim@reaperworld.com>
parents: 42714
diff changeset
401 G_CALLBACK(pidgin_avatar_conversation_updated),
3761ba966eed Stop using PurpleBuddy in Pidgin
Gary Kramlich <grim@reaperworld.com>
parents: 42714
diff changeset
402 avatar, 0);
40810
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
403 }
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
404 }
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
405
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
406 PurpleConversation *
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
407 pidgin_avatar_get_conversation(PidginAvatar *avatar) {
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
408 g_return_val_if_fail(PIDGIN_IS_AVATAR(avatar), NULL);
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
409
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
410 return avatar->conversation;
28d50eece92d Create a PidginAvatar widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
411 }

mercurial