pidgin/pidgininfopane.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 41479
3d2e114380f6
child 42296
1707a28b1258
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/

40858
2bd48c93678a Create a new standalone info pane widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
1 /*
2bd48c93678a Create a new standalone info pane widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
2 * Pidgin - Internet Messenger
2bd48c93678a Create a new standalone info pane widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
3 * Copyright (C) Pidgin Developers <devel@pidgin.im>
2bd48c93678a Create a new standalone info pane widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
4 *
2bd48c93678a Create a new standalone info pane widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
5 * Pidgin is the legal property of its developers, whose names are too numerous
2bd48c93678a Create a new standalone info pane widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
6 * to list here. Please refer to the COPYRIGHT file distributed with this
2bd48c93678a Create a new standalone info pane widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
7 * source distribution.
2bd48c93678a Create a new standalone info pane widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
8 *
2bd48c93678a Create a new standalone info pane widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
9 * This program is free software; you can redistribute it and/or modify
2bd48c93678a Create a new standalone info pane widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
10 * it under the terms of the GNU General Public License as published by
2bd48c93678a Create a new standalone info pane widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
11 * the Free Software Foundation; either version 2 of the License, or
2bd48c93678a Create a new standalone info pane widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
12 * (at your option) any later version.
2bd48c93678a Create a new standalone info pane widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
13 *
2bd48c93678a Create a new standalone info pane widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
14 * This program is distributed in the hope that it will be useful,
2bd48c93678a Create a new standalone info pane widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
15 * but WITHOUT ANY WARRANTY; without even the implied warranty of
2bd48c93678a Create a new standalone info pane widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
16 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
2bd48c93678a Create a new standalone info pane widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
17 * GNU General Public License for more details.
2bd48c93678a Create a new standalone info pane widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
18 *
2bd48c93678a Create a new standalone info pane widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
19 * You should have received a copy of the GNU General Public License
2bd48c93678a Create a new standalone info pane widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
20 * along with this program; if not, see <https://www.gnu.org/licenses/>.
2bd48c93678a Create a new standalone info pane widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
21 */
2bd48c93678a Create a new standalone info pane widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
22
2bd48c93678a Create a new standalone info pane widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
23 #include "pidgin/pidgininfopane.h"
2bd48c93678a Create a new standalone info pane widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
24
2bd48c93678a Create a new standalone info pane widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
25 #include "pidgin/gtkblist.h"
2bd48c93678a Create a new standalone info pane widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
26 #include "pidgin/gtkutils.h"
2bd48c93678a Create a new standalone info pane widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
27 #include "pidgin/pidginavatar.h"
2bd48c93678a Create a new standalone info pane widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
28 #include "pidgin/pidgincore.h"
2bd48c93678a Create a new standalone info pane widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
29 #include "pidgin/pidginpresenceicon.h"
2bd48c93678a Create a new standalone info pane widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
30
2bd48c93678a Create a new standalone info pane widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
31 struct _PidginInfoPane {
2bd48c93678a Create a new standalone info pane widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
32 GtkBox parent;
2bd48c93678a Create a new standalone info pane widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
33
2bd48c93678a Create a new standalone info pane widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
34 PurpleConversation *conversation;
2bd48c93678a Create a new standalone info pane widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
35
2bd48c93678a Create a new standalone info pane widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
36 GtkWidget *hbox;
2bd48c93678a Create a new standalone info pane widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
37 GtkWidget *presence_icon;
2bd48c93678a Create a new standalone info pane widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
38 GtkWidget *name;
2bd48c93678a Create a new standalone info pane widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
39 GtkWidget *topic;
2bd48c93678a Create a new standalone info pane widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
40 GtkWidget *avatar;
2bd48c93678a Create a new standalone info pane widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
41 };
2bd48c93678a Create a new standalone info pane widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
42
2bd48c93678a Create a new standalone info pane widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
43 enum {
2bd48c93678a Create a new standalone info pane widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
44 PROP_0,
2bd48c93678a Create a new standalone info pane widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
45 PROP_CONVERSATION,
2bd48c93678a Create a new standalone info pane widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
46 N_PROPERTIES,
2bd48c93678a Create a new standalone info pane widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
47 };
2bd48c93678a Create a new standalone info pane widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
48 static GParamSpec *properties[N_PROPERTIES] = {NULL, };
2bd48c93678a Create a new standalone info pane widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
49
2bd48c93678a Create a new standalone info pane widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
50 G_DEFINE_TYPE(PidginInfoPane, pidgin_info_pane, GTK_TYPE_BOX)
2bd48c93678a Create a new standalone info pane widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
51
2bd48c93678a Create a new standalone info pane widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
52 /******************************************************************************
2bd48c93678a Create a new standalone info pane widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
53 * Helpers
2bd48c93678a Create a new standalone info pane widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
54 *****************************************************************************/
2bd48c93678a Create a new standalone info pane widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
55 static void
2bd48c93678a Create a new standalone info pane widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
56 pidgin_info_pane_set_conversation(PidginInfoPane *pane,
2bd48c93678a Create a new standalone info pane widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
57 PurpleConversation *conversation)
2bd48c93678a Create a new standalone info pane widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
58 {
2bd48c93678a Create a new standalone info pane widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
59 if(!g_set_object(&pane->conversation, conversation)) {
2bd48c93678a Create a new standalone info pane widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
60 return;
2bd48c93678a Create a new standalone info pane widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
61 }
2bd48c93678a Create a new standalone info pane widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
62
2bd48c93678a Create a new standalone info pane widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
63 /* Tell the avatar about the new conversation. */
2bd48c93678a Create a new standalone info pane widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
64 pidgin_avatar_set_conversation(PIDGIN_AVATAR(pane->avatar),
2bd48c93678a Create a new standalone info pane widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
65 pane->conversation);
2bd48c93678a Create a new standalone info pane widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
66
2bd48c93678a Create a new standalone info pane widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
67 if(PURPLE_IS_CONVERSATION(conversation)) {
2bd48c93678a Create a new standalone info pane widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
68 PidginPresenceIcon *presence_icon = NULL;
2bd48c93678a Create a new standalone info pane widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
69 PurplePresence *presence = NULL;
2bd48c93678a Create a new standalone info pane widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
70 const gchar *fallback = "person";
2bd48c93678a Create a new standalone info pane widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
71
2bd48c93678a Create a new standalone info pane widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
72 g_object_bind_property(G_OBJECT(conversation), "name",
2bd48c93678a Create a new standalone info pane widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
73 G_OBJECT(pane->name), "label",
41184
05b5c210352b Move conversation management from gtkconv.c to PidginConversationWindow.
Gary Kramlich <grim@reaperworld.com>
parents: 41030
diff changeset
74 G_BINDING_DEFAULT | G_BINDING_SYNC_CREATE);
40858
2bd48c93678a Create a new standalone info pane widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
75
2bd48c93678a Create a new standalone info pane widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
76 if(PURPLE_IS_CHAT_CONVERSATION(conversation)) {
2bd48c93678a Create a new standalone info pane widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
77 g_object_bind_property(G_OBJECT(conversation), "topic",
2bd48c93678a Create a new standalone info pane widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
78 G_OBJECT(pane->topic), "label",
41184
05b5c210352b Move conversation management from gtkconv.c to PidginConversationWindow.
Gary Kramlich <grim@reaperworld.com>
parents: 41030
diff changeset
79 G_BINDING_DEFAULT | G_BINDING_SYNC_CREATE);
40858
2bd48c93678a Create a new standalone info pane widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
80 fallback = "chat";
2bd48c93678a Create a new standalone info pane widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
81 } else if(PURPLE_IS_IM_CONVERSATION(conversation)){
2bd48c93678a Create a new standalone info pane widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
82 PurpleAccount *account = NULL;
2bd48c93678a Create a new standalone info pane widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
83 PurpleBuddy *buddy = NULL;
2bd48c93678a Create a new standalone info pane widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
84 const gchar *name = NULL;
2bd48c93678a Create a new standalone info pane widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
85
2bd48c93678a Create a new standalone info pane widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
86 account = purple_conversation_get_account(conversation);
2bd48c93678a Create a new standalone info pane widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
87 name = purple_conversation_get_name(conversation);
2bd48c93678a Create a new standalone info pane widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
88 buddy = purple_blist_find_buddy(account, name);
2bd48c93678a Create a new standalone info pane widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
89
2bd48c93678a Create a new standalone info pane widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
90 if(PURPLE_IS_BUDDY(buddy)) {
2bd48c93678a Create a new standalone info pane widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
91 presence = purple_buddy_get_presence(buddy);
2bd48c93678a Create a new standalone info pane widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
92 }
2bd48c93678a Create a new standalone info pane widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
93
2bd48c93678a Create a new standalone info pane widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
94 fallback = "person";
2bd48c93678a Create a new standalone info pane widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
95 }
2bd48c93678a Create a new standalone info pane widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
96
2bd48c93678a Create a new standalone info pane widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
97 presence_icon = PIDGIN_PRESENCE_ICON(pane->presence_icon);
2bd48c93678a Create a new standalone info pane widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
98 pidgin_presence_icon_set_fallback(presence_icon, fallback);
2bd48c93678a Create a new standalone info pane widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
99 pidgin_presence_icon_set_presence(presence_icon, presence);
2bd48c93678a Create a new standalone info pane widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
100 }
2bd48c93678a Create a new standalone info pane widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
101
2bd48c93678a Create a new standalone info pane widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
102 /* Notify that we changed. */
2bd48c93678a Create a new standalone info pane widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
103 g_object_notify_by_pspec(G_OBJECT(pane), properties[PROP_CONVERSATION]);
2bd48c93678a Create a new standalone info pane widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
104 }
2bd48c93678a Create a new standalone info pane widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
105
2bd48c93678a Create a new standalone info pane widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
106 /******************************************************************************
2bd48c93678a Create a new standalone info pane widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
107 * GObject Implementation
2bd48c93678a Create a new standalone info pane widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
108 *****************************************************************************/
2bd48c93678a Create a new standalone info pane widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
109 static void
2bd48c93678a Create a new standalone info pane widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
110 pidgin_info_pane_get_property(GObject *obj, guint param_id, GValue *value,
2bd48c93678a Create a new standalone info pane widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
111 GParamSpec *pspec)
2bd48c93678a Create a new standalone info pane widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
112 {
2bd48c93678a Create a new standalone info pane widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
113 PidginInfoPane *pane = PIDGIN_INFO_PANE(obj);
2bd48c93678a Create a new standalone info pane widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
114
2bd48c93678a Create a new standalone info pane widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
115 switch(param_id) {
2bd48c93678a Create a new standalone info pane widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
116 case PROP_CONVERSATION:
2bd48c93678a Create a new standalone info pane widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
117 g_value_set_object(value, pidgin_info_pane_get_conversation(pane));
2bd48c93678a Create a new standalone info pane widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
118 break;
2bd48c93678a Create a new standalone info pane widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
119 default:
2bd48c93678a Create a new standalone info pane widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
120 G_OBJECT_WARN_INVALID_PROPERTY_ID(obj, param_id, pspec);
2bd48c93678a Create a new standalone info pane widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
121 break;
2bd48c93678a Create a new standalone info pane widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
122 }
2bd48c93678a Create a new standalone info pane widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
123 }
2bd48c93678a Create a new standalone info pane widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
124
2bd48c93678a Create a new standalone info pane widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
125 static void
2bd48c93678a Create a new standalone info pane widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
126 pidgin_info_pane_set_property(GObject *obj, guint param_id, const GValue *value,
2bd48c93678a Create a new standalone info pane widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
127 GParamSpec *pspec)
2bd48c93678a Create a new standalone info pane widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
128 {
2bd48c93678a Create a new standalone info pane widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
129 PidginInfoPane *pane = PIDGIN_INFO_PANE(obj);
2bd48c93678a Create a new standalone info pane widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
130
2bd48c93678a Create a new standalone info pane widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
131 switch(param_id) {
2bd48c93678a Create a new standalone info pane widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
132 case PROP_CONVERSATION:
2bd48c93678a Create a new standalone info pane widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
133 pidgin_info_pane_set_conversation(pane, g_value_get_object(value));
2bd48c93678a Create a new standalone info pane widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
134 break;
2bd48c93678a Create a new standalone info pane widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
135 default:
2bd48c93678a Create a new standalone info pane widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
136 G_OBJECT_WARN_INVALID_PROPERTY_ID(obj, param_id, pspec);
2bd48c93678a Create a new standalone info pane widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
137 break;
2bd48c93678a Create a new standalone info pane widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
138 }
2bd48c93678a Create a new standalone info pane widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
139 }
2bd48c93678a Create a new standalone info pane widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
140
2bd48c93678a Create a new standalone info pane widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
141 static void
41184
05b5c210352b Move conversation management from gtkconv.c to PidginConversationWindow.
Gary Kramlich <grim@reaperworld.com>
parents: 41030
diff changeset
142 pidgin_info_pane_dispose(GObject *obj) {
40858
2bd48c93678a Create a new standalone info pane widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
143 PidginInfoPane *pane = PIDGIN_INFO_PANE(obj);
2bd48c93678a Create a new standalone info pane widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
144
2bd48c93678a Create a new standalone info pane widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
145 g_clear_object(&pane->conversation);
2bd48c93678a Create a new standalone info pane widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
146
41184
05b5c210352b Move conversation management from gtkconv.c to PidginConversationWindow.
Gary Kramlich <grim@reaperworld.com>
parents: 41030
diff changeset
147 G_OBJECT_CLASS(pidgin_info_pane_parent_class)->dispose(obj);
40858
2bd48c93678a Create a new standalone info pane widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
148 }
2bd48c93678a Create a new standalone info pane widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
149
2bd48c93678a Create a new standalone info pane widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
150 static void
2bd48c93678a Create a new standalone info pane widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
151 pidgin_info_pane_init(PidginInfoPane *pane) {
2bd48c93678a Create a new standalone info pane widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
152 gtk_widget_init_template(GTK_WIDGET(pane));
2bd48c93678a Create a new standalone info pane widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
153 }
2bd48c93678a Create a new standalone info pane widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
154
2bd48c93678a Create a new standalone info pane widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
155 static void
2bd48c93678a Create a new standalone info pane widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
156 pidgin_info_pane_class_init(PidginInfoPaneClass *klass) {
2bd48c93678a Create a new standalone info pane widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
157 GObjectClass *obj_class = G_OBJECT_CLASS(klass);
2bd48c93678a Create a new standalone info pane widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
158 GtkWidgetClass *widget_class = GTK_WIDGET_CLASS(klass);
2bd48c93678a Create a new standalone info pane widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
159
2bd48c93678a Create a new standalone info pane widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
160 obj_class->get_property = pidgin_info_pane_get_property;
2bd48c93678a Create a new standalone info pane widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
161 obj_class->set_property = pidgin_info_pane_set_property;
41184
05b5c210352b Move conversation management from gtkconv.c to PidginConversationWindow.
Gary Kramlich <grim@reaperworld.com>
parents: 41030
diff changeset
162 obj_class->dispose = pidgin_info_pane_dispose;
40858
2bd48c93678a Create a new standalone info pane widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
163
2bd48c93678a Create a new standalone info pane widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
164 /**
41479
3d2e114380f6 Add source files to GObject introspection
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41184
diff changeset
165 * PidginInfoPane:conversation
40858
2bd48c93678a Create a new standalone info pane widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
166 *
2bd48c93678a Create a new standalone info pane widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
167 * The #PurpleConversation whose information will be displayed.
2bd48c93678a Create a new standalone info pane widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
168 */
2bd48c93678a Create a new standalone info pane widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
169 properties[PROP_CONVERSATION] = g_param_spec_object(
2bd48c93678a Create a new standalone info pane widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
170 "conversation", "conversation",
2bd48c93678a Create a new standalone info pane widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
171 "The PurpleConversation instance",
2bd48c93678a Create a new standalone info pane widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
172 PURPLE_TYPE_CONVERSATION,
2bd48c93678a Create a new standalone info pane widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
173 G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY | G_PARAM_STATIC_STRINGS);
2bd48c93678a Create a new standalone info pane widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
174
2bd48c93678a Create a new standalone info pane widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
175 g_object_class_install_properties(obj_class, N_PROPERTIES, properties);
2bd48c93678a Create a new standalone info pane widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
176
2bd48c93678a Create a new standalone info pane widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
177 gtk_widget_class_set_template_from_resource(
2bd48c93678a Create a new standalone info pane widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
178 widget_class,
41030
ec8b76f3bf0a Fix the resource path so we can use the automatic stuff that GtkApplication supports
Gary Kramlich <grim@reaperworld.com>
parents: 41027
diff changeset
179 "/im/pidgin/Pidgin3/Conversations/infopane.ui"
40858
2bd48c93678a Create a new standalone info pane widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
180 );
2bd48c93678a Create a new standalone info pane widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
181
2bd48c93678a Create a new standalone info pane widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
182 gtk_widget_class_bind_template_child(widget_class, PidginInfoPane, hbox);
2bd48c93678a Create a new standalone info pane widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
183 gtk_widget_class_bind_template_child(widget_class, PidginInfoPane, avatar);
2bd48c93678a Create a new standalone info pane widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
184 gtk_widget_class_bind_template_child(widget_class, PidginInfoPane, presence_icon);
2bd48c93678a Create a new standalone info pane widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
185 gtk_widget_class_bind_template_child(widget_class, PidginInfoPane, name);
2bd48c93678a Create a new standalone info pane widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
186 gtk_widget_class_bind_template_child(widget_class, PidginInfoPane, topic);
2bd48c93678a Create a new standalone info pane widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
187 }
2bd48c93678a Create a new standalone info pane widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
188
2bd48c93678a Create a new standalone info pane widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
189 /******************************************************************************
2bd48c93678a Create a new standalone info pane widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
190 * API
2bd48c93678a Create a new standalone info pane widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
191 *****************************************************************************/
2bd48c93678a Create a new standalone info pane widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
192 GtkWidget *
2bd48c93678a Create a new standalone info pane widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
193 pidgin_info_pane_new(PurpleConversation *conversation) {
2bd48c93678a Create a new standalone info pane widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
194 return GTK_WIDGET(g_object_new(
2bd48c93678a Create a new standalone info pane widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
195 PIDGIN_TYPE_INFO_PANE,
2bd48c93678a Create a new standalone info pane widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
196 "conversation", conversation,
2bd48c93678a Create a new standalone info pane widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
197 NULL));
2bd48c93678a Create a new standalone info pane widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
198 }
2bd48c93678a Create a new standalone info pane widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
199
2bd48c93678a Create a new standalone info pane widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
200 PurpleConversation *
2bd48c93678a Create a new standalone info pane widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
201 pidgin_info_pane_get_conversation(PidginInfoPane *pane) {
2bd48c93678a Create a new standalone info pane widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
202 g_return_val_if_fail(PIDGIN_IS_INFO_PANE(pane), NULL);
2bd48c93678a Create a new standalone info pane widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
203
2bd48c93678a Create a new standalone info pane widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
204 return pane->conversation;
2bd48c93678a Create a new standalone info pane widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
205 }

mercurial