pidgin/pidginavatar.c

Thu, 23 Mar 2023 23:11:59 -0500

author
Elliott Sales de Andrade <quantum.analyst@gmail.com>
date
Thu, 23 Mar 2023 23:11:59 -0500
changeset 42184
4e1bf25f5575
parent 41981
e2d8eb34ebe7
child 42251
63639da06cbd
permissions
-rw-r--r--

Fix several leaks in tests

All of these are specific to tests, not the library code.

For the moment, `protocol_xfer` still leaks connections (and anything they hold on to) because it is very difficult to disentangle them from the connection manager in the partially implemented state they are in.

This fixes leaks of options in the account option test (these two leaks occur for every test since they all leak the option):
```
61 (48 direct, 13 indirect) bytes in 1 blocks are definitely lost in loss record 133 of 276
at 0x4848464: calloc (vg_replace_malloc.c:1340)
by 0x49F75F0: g_malloc0 (gmem.c:163)
by 0x48C3B2E: purple_account_option_new (purpleaccountoption.c:78)
by 0x4014AF: test_purple_account_option_copy_int (test_account_option.c:67)
by 0x4A1CC7D: UnknownInlinedFun (gtestutils.c:2933)
by 0x4A1CC7D: g_test_run_suite_internal (gtestutils.c:3021)
by 0x4A1C9E4: g_test_run_suite_internal (gtestutils.c:3038)
by 0x4A1C9E4: g_test_run_suite_internal (gtestutils.c:3038)
by 0x4A1D181: g_test_run_suite (gtestutils.c:3115)
by 0x4A156EC: UnknownInlinedFun (gtestutils.c:2234)
by 0x4A156EC: g_test_run (gtestutils.c:2221)
by 0x401721: main (test_account_option.c:157)

61 (48 direct, 13 indirect) bytes in 1 blocks are definitely lost in loss record 134 of 276
at 0x4848464: calloc (vg_replace_malloc.c:1340)
by 0x49F75F0: g_malloc0 (gmem.c:163)
by 0x48C3BC7: purple_account_option_copy (purpleaccountoption.c:93)
by 0x4014BF: test_purple_account_option_copy_int (test_account_option.c:68)
by 0x4A1CC7D: UnknownInlinedFun (gtestutils.c:2933)
by 0x4A1CC7D: g_test_run_suite_internal (gtestutils.c:3021)
by 0x4A1C9E4: g_test_run_suite_internal (gtestutils.c:3038)
by 0x4A1C9E4: g_test_run_suite_internal (gtestutils.c:3038)
by 0x4A1D181: g_test_run_suite (gtestutils.c:3115)
by 0x4A156EC: UnknownInlinedFun (gtestutils.c:2234)
by 0x4A156EC: g_test_run (gtestutils.c:2221)
by 0x401721: main (test_account_option.c:157)
```
leaks in the credential manager test (times 3 for read/write/cancel tests):
```
69 (16 direct, 53 indirect) bytes in 1 blocks are definitely lost in loss record 2,427 of 3,503
at 0x484386F: malloc (vg_replace_malloc.c:393)
by 0x4A58168: g_malloc (gmem.c:130)
by 0x4A6FAB5: g_slice_alloc (gslice.c:1074)
by 0x4A700EC: g_slice_alloc0 (gslice.c:1100)
by 0x4A3BECB: g_error_allocate (gerror.c:710)
by 0x4A3C93F: UnknownInlinedFun (gerror.c:724)
by 0x4A3C93F: g_error_new_valist (gerror.c:766)
by 0x4BEE558: g_task_return_new_error (gtask.c:1941)
by 0x48D82C0: purple_credential_manager_read_password_async (purplecredentialmanager.c:492)
by 0x403634: test_purple_credential_manager_no_provider_read_password_idle (test_credential_manager.c:329)
by 0x4A4ECB1: g_idle_dispatch (gmain.c:6124)
by 0x4A4FCBE: UnknownInlinedFun (gmain.c:3444)
by 0x4A4FCBE: g_main_context_dispatch (gmain.c:4162)
by 0x4AA5597: g_main_context_iterate.constprop.0 (gmain.c:4238)
by 0x4A4F28E: g_main_loop_run (gmain.c:4438)
by 0x40369F: test_purple_credential_manager_no_provider_read_password_async (test_credential_manager.c:345)
by 0x4A7DC7D: UnknownInlinedFun (gtestutils.c:2933)
by 0x4A7DC7D: g_test_run_suite_internal (gtestutils.c:3021)
by 0x4A7D9E4: g_test_run_suite_internal (gtestutils.c:3038)
by 0x4A7D9E4: g_test_run_suite_internal (gtestutils.c:3038)
by 0x4A7E181: g_test_run_suite (gtestutils.c:3115)
by 0x4A766EC: UnknownInlinedFun (gtestutils.c:2234)
by 0x4A766EC: g_test_run (gtestutils.c:2221)
by 0x4048F6: main (test_credential_manager.c:695)
```
a leak in the image test:
```
161 bytes in 1 blocks are definitely lost in loss record 260 of 274
at 0x484386F: malloc (vg_replace_malloc.c:393)
by 0x4A55363: g_try_malloc (gmem.c:286)
by 0x4A3D630: UnknownInlinedFun (gfileutils.c:819)
by 0x4A3D630: UnknownInlinedFun (gfileutils.c:924)
by 0x4A3D630: g_file_get_contents (gfileutils.c:1027)
by 0x401890: test_image_new_from_file (test_image.c:144)
by 0x4A7DC7D: UnknownInlinedFun (gtestutils.c:2933)
by 0x4A7DC7D: g_test_run_suite_internal (gtestutils.c:3021)
by 0x4A7D9E4: g_test_run_suite_internal (gtestutils.c:3038)
by 0x4A7E181: g_test_run_suite (gtestutils.c:3115)
by 0x4A766EC: UnknownInlinedFun (gtestutils.c:2234)
by 0x4A766EC: g_test_run (gtestutils.c:2221)
by 0x40195D: main (test_image.c:172)
```
a leak in queued output stream test:
```
72 (40 direct, 32 indirect) bytes in 1 blocks are definitely lost in loss record 219 of 396
at 0x49D51EF: g_type_create_instance (gtype.c:1909)
by 0x49BAC1F: g_object_new_internal (gobject.c:2228)
by 0x49BC247: g_object_new_with_properties (gobject.c:2391)
by 0x49BCFF0: g_object_new (gobject.c:2037)
by 0x402003: test_queued_output_stream_push_bytes_async_error (test_queued_output_stream.c:219)
by 0x4A7DC7D: UnknownInlinedFun (gtestutils.c:2933)
by 0x4A7DC7D: g_test_run_suite_internal (gtestutils.c:3021)
by 0x4A7D9E4: g_test_run_suite_internal (gtestutils.c:3038)
by 0x4A7E181: g_test_run_suite (gtestutils.c:3115)
by 0x4A766EC: UnknownInlinedFun (gtestutils.c:2234)
by 0x4A766EC: g_test_run (gtestutils.c:2221)
by 0x402429: main (test_queued_output_stream.c:280)
```
and protocol xfer tests (times 3 for each test that creates a test protocol object):
```
112 (48 direct, 64 indirect) bytes in 1 blocks are definitely lost in loss record 3,430 of 3,698
at 0x49D51EF: g_type_create_instance (gtype.c:1909)
by 0x49BAC1F: g_object_new_internal (gobject.c:2228)
by 0x49BC247: g_object_new_with_properties (gobject.c:2391)
by 0x49BCFF0: g_object_new (gobject.c:2037)
by 0x40291C: test_purple_protocol_xfer_send_file_func (test_protocol_xfer.c:146)
by 0x4A7DC7D: UnknownInlinedFun (gtestutils.c:2933)
by 0x4A7DC7D: g_test_run_suite_internal (gtestutils.c:3021)
by 0x4A7D9E4: g_test_run_suite_internal (gtestutils.c:3038)
by 0x4A7E181: g_test_run_suite (gtestutils.c:3115)
by 0x4A766EC: UnknownInlinedFun (gtestutils.c:2234)
by 0x4A766EC: g_test_run (gtestutils.c:2221)
by 0x402B64: main (test_protocol_xfer.c:195)
```
and util tests (times 3 for each call to `purple_text_strip_mnemonic` in the test):
```
5 bytes in 1 blocks are definitely lost in loss record 5 of 247
at 0x484386F: malloc (vg_replace_malloc.c:393)
by 0x49F7168: g_malloc (gmem.c:130)
by 0x491975B: purple_text_strip_mnemonic (util.c:895)
by 0x4015B0: test_util_text_strip_mnemonic (test_util.c:49)
by 0x4A1CC7D: UnknownInlinedFun (gtestutils.c:2933)
by 0x4A1CC7D: g_test_run_suite_internal (gtestutils.c:3021)
by 0x4A1C9E4: g_test_run_suite_internal (gtestutils.c:3038)
by 0x4A1C9E4: g_test_run_suite_internal (gtestutils.c:3038)
by 0x4A1D181: g_test_run_suite (gtestutils.c:3115)
by 0x4A156EC: UnknownInlinedFun (gtestutils.c:2234)
by 0x4A156EC: g_test_run (gtestutils.c:2221)
by 0x401901: main (test_util.c:224)
```
and these leaks in any test that initializes the test UI:
```
4,104 bytes in 1 blocks are possibly lost in loss record 3,451 of 3,457
at 0x484386F: malloc (vg_replace_malloc.c:393)
by 0x5235B67: sqlite3MemMalloc.lto_priv.0 (sqlite3.c:25493)
by 0x5232797: UnknownInlinedFun (sqlite3.c:29181)
by 0x5232797: UnknownInlinedFun (sqlite3.c:29227)
by 0x5232797: sqlite3Malloc.lto_priv.0 (sqlite3.c:29221)
by 0x523BD8B: pcache1Alloc.lto_priv.0 (sqlite3.c:53546)
by 0x5249A8B: UnknownInlinedFun (sqlite3.c:53675)
by 0x5249A8B: allocateTempSpace (sqlite3.c:70848)
by 0x52625A6: sqlite3VdbeExec.lto_priv.0 (sqlite3.c:93857)
by 0x525CBEE: UnknownInlinedFun (sqlite3.c:87995)
by 0x525CBEE: UnknownInlinedFun (sqlite3.c:88056)
by 0x525CBEE: sqlite3_step (sqlite3.c:88045)
by 0x529B324: sqlite3_exec (sqlite3.c:131002)
by 0x48FD558: purple_sqlite3_run_migration (purplesqlite3.c:37)
by 0x48FDBB4: purple_sqlite3_run_migrations_from_resources (purplesqlite3.c:195)
by 0x48FDED9: purple_sqlite_history_adapter_run_migrations (purplesqlitehistoryadapter.c:69)
by 0x48FE7F0: purple_sqlite_history_adapter_activate (purplesqlitehistoryadapter.c:287)
by 0x48DB656: purple_history_adapter_activate (purplehistoryadapter.c:181)
by 0x48DC9BC: purple_history_manager_set_active (purplehistorymanager.c:308)
by 0x402BA8: test_ui_init_history (test_ui.c:132)
by 0x402C80: test_ui_purple_init (test_ui.c:167)
by 0x4027BB: main (test_contact.c:88)

4,368 bytes in 1 blocks are possibly lost in loss record 3,453 of 3,457
at 0x484386F: malloc (vg_replace_malloc.c:393)
by 0x5235B67: sqlite3MemMalloc.lto_priv.0 (sqlite3.c:25493)
by 0x5232797: UnknownInlinedFun (sqlite3.c:29181)
by 0x5232797: UnknownInlinedFun (sqlite3.c:29227)
by 0x5232797: sqlite3Malloc.lto_priv.0 (sqlite3.c:29221)
by 0x523BD8B: pcache1Alloc.lto_priv.0 (sqlite3.c:53546)
by 0x5240077: UnknownInlinedFun (sqlite3.c:53634)
by 0x5240077: pcache1FetchStage2 (sqlite3.c:54104)
by 0x5243E9C: UnknownInlinedFun (sqlite3.c:52671)
by 0x5243E9C: getPageNormal.lto_priv.0 (sqlite3.c:60628)
by 0x524A510: UnknownInlinedFun (sqlite3.c:60805)
by 0x524A510: btreeGetPage.lto_priv.0 (sqlite3.c:70289)
by 0x524C2F6: UnknownInlinedFun (sqlite3.c:71257)
by 0x524C2F6: sqlite3BtreeBeginTrans.lto_priv.0 (sqlite3.c:71647)
by 0x5266B3A: sqlite3VdbeExec.lto_priv.0 (sqlite3.c:93532)
by 0x525CBEE: UnknownInlinedFun (sqlite3.c:87995)
by 0x525CBEE: UnknownInlinedFun (sqlite3.c:88056)
by 0x525CBEE: sqlite3_step (sqlite3.c:88045)
by 0x48FD715: purple_sqlite3_get_schema_version (purplesqlite3.c:79)
by 0x48FD9DD: purple_sqlite3_run_migrations_from_resources (purplesqlite3.c:146)
by 0x48FDED9: purple_sqlite_history_adapter_run_migrations (purplesqlitehistoryadapter.c:69)
by 0x48FE7F0: purple_sqlite_history_adapter_activate (purplesqlitehistoryadapter.c:287)
by 0x48DB656: purple_history_adapter_activate (purplehistoryadapter.c:181)
by 0x48DC9BC: purple_history_manager_set_active (purplehistorymanager.c:308)
by 0x402BA8: test_ui_init_history (test_ui.c:132)
by 0x402C80: test_ui_purple_init (test_ui.c:167)
by 0x4027BB: main (test_contact.c:88)

4,368 bytes in 1 blocks are possibly lost in loss record 3,454 of 3,457
at 0x484386F: malloc (vg_replace_malloc.c:393)
by 0x5235B67: sqlite3MemMalloc.lto_priv.0 (sqlite3.c:25493)
by 0x5232797: UnknownInlinedFun (sqlite3.c:29181)
by 0x5232797: UnknownInlinedFun (sqlite3.c:29227)
by 0x5232797: sqlite3Malloc.lto_priv.0 (sqlite3.c:29221)
by 0x523BD8B: pcache1Alloc.lto_priv.0 (sqlite3.c:53546)
by 0x5240077: UnknownInlinedFun (sqlite3.c:53634)
by 0x5240077: pcache1FetchStage2 (sqlite3.c:54104)
by 0x5243E9C: UnknownInlinedFun (sqlite3.c:52671)
by 0x5243E9C: getPageNormal.lto_priv.0 (sqlite3.c:60628)
by 0x52499BC: UnknownInlinedFun (sqlite3.c:60805)
by 0x52499BC: UnknownInlinedFun (sqlite3.c:70289)
by 0x52499BC: btreeGetUnusedPage (sqlite3.c:70432)
by 0x524F504: allocateBtreePage.lto_priv.0 (sqlite3.c:74604)
by 0x5256209: btreeCreateTable.lto_priv.0 (sqlite3.c:77830)
by 0x5265EB2: UnknownInlinedFun (sqlite3.c:77849)
by 0x5265EB2: sqlite3VdbeExec.lto_priv.0 (sqlite3.c:96382)
by 0x525CBEE: UnknownInlinedFun (sqlite3.c:87995)
by 0x525CBEE: UnknownInlinedFun (sqlite3.c:88056)
by 0x525CBEE: sqlite3_step (sqlite3.c:88045)
by 0x529B324: sqlite3_exec (sqlite3.c:131002)
by 0x48FD558: purple_sqlite3_run_migration (purplesqlite3.c:37)
by 0x48FDBB4: purple_sqlite3_run_migrations_from_resources (purplesqlite3.c:195)
by 0x48FDED9: purple_sqlite_history_adapter_run_migrations (purplesqlitehistoryadapter.c:69)
by 0x48FE7F0: purple_sqlite_history_adapter_activate (purplesqlitehistoryadapter.c:287)
by 0x48DB656: purple_history_adapter_activate (purplehistoryadapter.c:181)
by 0x48DC9BC: purple_history_manager_set_active (purplehistorymanager.c:308)
by 0x402BA8: test_ui_init_history (test_ui.c:132)
by 0x402C80: test_ui_purple_init (test_ui.c:167)
by 0x4027BB: main (test_contact.c:88)
```

Testing Done:
Ran tests in valgrind, and all above leaks were gone except for noted `protocol_xfer` issues, and a bunch of leaks of the `PurpleBuddy`-`PurpleContact` compatibility bindings, which will go away in their entirety eventually.

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

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

mercurial