pidgin/pidginavatar.c

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

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

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

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

Testing Done:
Called in the turtles.

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

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

mercurial