pidgin/pidginstatusmanager.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 42106
eafcc5051015
child 42198
4df23def5fe0
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/

41306
8befd71928c2 Create a new status manager that's built in glade
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
1 /*
8befd71928c2 Create a new status manager that's built in glade
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
2 * Pidgin - Internet Messenger
8befd71928c2 Create a new status manager that's built in glade
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
3 * Copyright (C) Pidgin Developers <devel@pidgin.im>
8befd71928c2 Create a new status manager that's built in glade
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
4 *
8befd71928c2 Create a new status manager that's built in glade
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
5 * Pidgin is the legal property of its developers, whose names are too numerous
8befd71928c2 Create a new status manager that's built in glade
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
6 * to list here. Please refer to the COPYRIGHT file distributed with this
8befd71928c2 Create a new status manager that's built in glade
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
7 * source distribution.
8befd71928c2 Create a new status manager that's built in glade
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
8 *
8befd71928c2 Create a new status manager that's built in glade
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
9 * This program is free software; you can redistribute it and/or modify
8befd71928c2 Create a new status manager that's built in glade
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
10 * it under the terms of the GNU General Public License as published by
8befd71928c2 Create a new status manager that's built in glade
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
11 * the Free Software Foundation; either version 2 of the License, or
8befd71928c2 Create a new status manager that's built in glade
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
12 * (at your option) any later version.
8befd71928c2 Create a new status manager that's built in glade
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
13 *
8befd71928c2 Create a new status manager that's built in glade
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
14 * This program is distributed in the hope that it will be useful,
8befd71928c2 Create a new status manager that's built in glade
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
15 * but WITHOUT ANY WARRANTY; without even the implied warranty of
8befd71928c2 Create a new status manager that's built in glade
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
16 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
8befd71928c2 Create a new status manager that's built in glade
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
17 * GNU General Public License for more details.
8befd71928c2 Create a new status manager that's built in glade
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
18 *
8befd71928c2 Create a new status manager that's built in glade
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
19 * You should have received a copy of the GNU General Public License
8befd71928c2 Create a new status manager that's built in glade
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
20 * along with this program; if not, see <https://www.gnu.org/licenses/>.
8befd71928c2 Create a new status manager that's built in glade
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
21 */
8befd71928c2 Create a new status manager that's built in glade
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
22
8befd71928c2 Create a new status manager that's built in glade
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
23 #include "pidginstatusmanager.h"
8befd71928c2 Create a new status manager that's built in glade
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
24
8befd71928c2 Create a new status manager that's built in glade
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
25 #include "pidginiconname.h"
41356
9753153c49fc Add a new templated PidginStatusEditor and wire it up.
Gary Kramlich <grim@reaperworld.com>
parents: 41314
diff changeset
26 #include "pidginstatuseditor.h"
41306
8befd71928c2 Create a new status manager that's built in glade
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
27
8befd71928c2 Create a new status manager that's built in glade
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
28 enum {
8befd71928c2 Create a new status manager that's built in glade
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
29 RESPONSE_USE,
8befd71928c2 Create a new status manager that's built in glade
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
30 RESPONSE_ADD,
8befd71928c2 Create a new status manager that's built in glade
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
31 RESPONSE_MODIFY,
8befd71928c2 Create a new status manager that's built in glade
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
32 RESPONSE_REMOVE
8befd71928c2 Create a new status manager that's built in glade
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
33 };
8befd71928c2 Create a new status manager that's built in glade
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
34
8befd71928c2 Create a new status manager that's built in glade
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
35 enum {
8befd71928c2 Create a new status manager that's built in glade
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
36 COLUMN_TITLE,
8befd71928c2 Create a new status manager that's built in glade
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
37 COLUMN_ICON_NAME,
8befd71928c2 Create a new status manager that's built in glade
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
38 COLUMN_TYPE,
8befd71928c2 Create a new status manager that's built in glade
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
39 COLUMN_MESSAGE,
41356
9753153c49fc Add a new templated PidginStatusEditor and wire it up.
Gary Kramlich <grim@reaperworld.com>
parents: 41314
diff changeset
40 COLUMN_STATUS,
9753153c49fc Add a new templated PidginStatusEditor and wire it up.
Gary Kramlich <grim@reaperworld.com>
parents: 41314
diff changeset
41 COLUMN_EDITOR
41306
8befd71928c2 Create a new status manager that's built in glade
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
42 };
8befd71928c2 Create a new status manager that's built in glade
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
43
8befd71928c2 Create a new status manager that's built in glade
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
44 struct _PidginStatusManager {
8befd71928c2 Create a new status manager that's built in glade
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
45 GtkDialog parent;
8befd71928c2 Create a new status manager that's built in glade
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
46
42026
14aae1aaeb98 Convert GtkTreeView in status editor to GtkColumnView
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41596
diff changeset
47 GListStore *model;
14aae1aaeb98 Convert GtkTreeView in status editor to GtkColumnView
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41596
diff changeset
48 GtkSingleSelection *selection;
41306
8befd71928c2 Create a new status manager that's built in glade
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
49
8befd71928c2 Create a new status manager that's built in glade
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
50 GtkWidget *use_button;
8befd71928c2 Create a new status manager that's built in glade
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
51 GtkWidget *modify_button;
8befd71928c2 Create a new status manager that's built in glade
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
52 GtkWidget *remove_button;
8befd71928c2 Create a new status manager that's built in glade
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
53 };
8befd71928c2 Create a new status manager that's built in glade
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
54
8befd71928c2 Create a new status manager that's built in glade
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
55 G_DEFINE_TYPE(PidginStatusManager, pidgin_status_manager, GTK_TYPE_DIALOG)
8befd71928c2 Create a new status manager that's built in glade
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
56
41356
9753153c49fc Add a new templated PidginStatusEditor and wire it up.
Gary Kramlich <grim@reaperworld.com>
parents: 41314
diff changeset
57 /* Ugh, prototypes :,( */
9753153c49fc Add a new templated PidginStatusEditor and wire it up.
Gary Kramlich <grim@reaperworld.com>
parents: 41314
diff changeset
58 static void pidgin_status_editor_destroy_cb(GtkWidget *widget, gpointer data);
9753153c49fc Add a new templated PidginStatusEditor and wire it up.
Gary Kramlich <grim@reaperworld.com>
parents: 41314
diff changeset
59
41306
8befd71928c2 Create a new status manager that's built in glade
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
60 /******************************************************************************
8befd71928c2 Create a new status manager that's built in glade
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
61 * Helpers
8befd71928c2 Create a new status manager that's built in glade
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
62 *****************************************************************************/
41356
9753153c49fc Add a new templated PidginStatusEditor and wire it up.
Gary Kramlich <grim@reaperworld.com>
parents: 41314
diff changeset
63 static void
9753153c49fc Add a new templated PidginStatusEditor and wire it up.
Gary Kramlich <grim@reaperworld.com>
parents: 41314
diff changeset
64 pidgin_status_manager_show_editor(PidginStatusManager *manager) {
42026
14aae1aaeb98 Convert GtkTreeView in status editor to GtkColumnView
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41596
diff changeset
65 GObject *wrapper = NULL;
41356
9753153c49fc Add a new templated PidginStatusEditor and wire it up.
Gary Kramlich <grim@reaperworld.com>
parents: 41314
diff changeset
66 PurpleSavedStatus *status = NULL;
9753153c49fc Add a new templated PidginStatusEditor and wire it up.
Gary Kramlich <grim@reaperworld.com>
parents: 41314
diff changeset
67 GtkWidget *editor = NULL;
9753153c49fc Add a new templated PidginStatusEditor and wire it up.
Gary Kramlich <grim@reaperworld.com>
parents: 41314
diff changeset
68
42026
14aae1aaeb98 Convert GtkTreeView in status editor to GtkColumnView
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41596
diff changeset
69 wrapper = gtk_single_selection_get_selected_item(manager->selection);
14aae1aaeb98 Convert GtkTreeView in status editor to GtkColumnView
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41596
diff changeset
70 status = g_object_get_data(wrapper, "savedstatus");
14aae1aaeb98 Convert GtkTreeView in status editor to GtkColumnView
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41596
diff changeset
71 editor = g_object_get_data(wrapper, "editor");
41356
9753153c49fc Add a new templated PidginStatusEditor and wire it up.
Gary Kramlich <grim@reaperworld.com>
parents: 41314
diff changeset
72
9753153c49fc Add a new templated PidginStatusEditor and wire it up.
Gary Kramlich <grim@reaperworld.com>
parents: 41314
diff changeset
73 if(status == NULL) {
9753153c49fc Add a new templated PidginStatusEditor and wire it up.
Gary Kramlich <grim@reaperworld.com>
parents: 41314
diff changeset
74 return;
9753153c49fc Add a new templated PidginStatusEditor and wire it up.
Gary Kramlich <grim@reaperworld.com>
parents: 41314
diff changeset
75 }
9753153c49fc Add a new templated PidginStatusEditor and wire it up.
Gary Kramlich <grim@reaperworld.com>
parents: 41314
diff changeset
76
9753153c49fc Add a new templated PidginStatusEditor and wire it up.
Gary Kramlich <grim@reaperworld.com>
parents: 41314
diff changeset
77 if(!PIDGIN_IS_STATUS_EDITOR(editor)) {
9753153c49fc Add a new templated PidginStatusEditor and wire it up.
Gary Kramlich <grim@reaperworld.com>
parents: 41314
diff changeset
78 editor = pidgin_status_editor_new(status);
9753153c49fc Add a new templated PidginStatusEditor and wire it up.
Gary Kramlich <grim@reaperworld.com>
parents: 41314
diff changeset
79
9753153c49fc Add a new templated PidginStatusEditor and wire it up.
Gary Kramlich <grim@reaperworld.com>
parents: 41314
diff changeset
80 gtk_window_set_transient_for(GTK_WINDOW(editor), GTK_WINDOW(manager));
9753153c49fc Add a new templated PidginStatusEditor and wire it up.
Gary Kramlich <grim@reaperworld.com>
parents: 41314
diff changeset
81
42026
14aae1aaeb98 Convert GtkTreeView in status editor to GtkColumnView
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41596
diff changeset
82 g_object_set_data(wrapper, "editor", editor);
41356
9753153c49fc Add a new templated PidginStatusEditor and wire it up.
Gary Kramlich <grim@reaperworld.com>
parents: 41314
diff changeset
83 g_signal_connect_object(editor, "destroy",
9753153c49fc Add a new templated PidginStatusEditor and wire it up.
Gary Kramlich <grim@reaperworld.com>
parents: 41314
diff changeset
84 G_CALLBACK(pidgin_status_editor_destroy_cb),
9753153c49fc Add a new templated PidginStatusEditor and wire it up.
Gary Kramlich <grim@reaperworld.com>
parents: 41314
diff changeset
85 manager, 0);
9753153c49fc Add a new templated PidginStatusEditor and wire it up.
Gary Kramlich <grim@reaperworld.com>
parents: 41314
diff changeset
86
9753153c49fc Add a new templated PidginStatusEditor and wire it up.
Gary Kramlich <grim@reaperworld.com>
parents: 41314
diff changeset
87 gtk_widget_show(editor);
9753153c49fc Add a new templated PidginStatusEditor and wire it up.
Gary Kramlich <grim@reaperworld.com>
parents: 41314
diff changeset
88 } else {
9753153c49fc Add a new templated PidginStatusEditor and wire it up.
Gary Kramlich <grim@reaperworld.com>
parents: 41314
diff changeset
89 gtk_window_present_with_time(GTK_WINDOW(editor), GDK_CURRENT_TIME);
9753153c49fc Add a new templated PidginStatusEditor and wire it up.
Gary Kramlich <grim@reaperworld.com>
parents: 41314
diff changeset
90 }
9753153c49fc Add a new templated PidginStatusEditor and wire it up.
Gary Kramlich <grim@reaperworld.com>
parents: 41314
diff changeset
91 }
9753153c49fc Add a new templated PidginStatusEditor and wire it up.
Gary Kramlich <grim@reaperworld.com>
parents: 41314
diff changeset
92
9753153c49fc Add a new templated PidginStatusEditor and wire it up.
Gary Kramlich <grim@reaperworld.com>
parents: 41314
diff changeset
93 static void
9753153c49fc Add a new templated PidginStatusEditor and wire it up.
Gary Kramlich <grim@reaperworld.com>
parents: 41314
diff changeset
94 pidgin_status_manager_remove_selected(PidginStatusManager *manager) {
42026
14aae1aaeb98 Convert GtkTreeView in status editor to GtkColumnView
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41596
diff changeset
95 GObject *wrapper = NULL;
41356
9753153c49fc Add a new templated PidginStatusEditor and wire it up.
Gary Kramlich <grim@reaperworld.com>
parents: 41314
diff changeset
96 PurpleSavedStatus *status = NULL;
9753153c49fc Add a new templated PidginStatusEditor and wire it up.
Gary Kramlich <grim@reaperworld.com>
parents: 41314
diff changeset
97 GtkWidget *editor = NULL;
9753153c49fc Add a new templated PidginStatusEditor and wire it up.
Gary Kramlich <grim@reaperworld.com>
parents: 41314
diff changeset
98
42026
14aae1aaeb98 Convert GtkTreeView in status editor to GtkColumnView
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41596
diff changeset
99 wrapper = gtk_single_selection_get_selected_item(manager->selection);
14aae1aaeb98 Convert GtkTreeView in status editor to GtkColumnView
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41596
diff changeset
100 status = g_object_get_data(wrapper, "savedstatus");
14aae1aaeb98 Convert GtkTreeView in status editor to GtkColumnView
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41596
diff changeset
101 editor = g_object_get_data(wrapper, "editor");
41356
9753153c49fc Add a new templated PidginStatusEditor and wire it up.
Gary Kramlich <grim@reaperworld.com>
parents: 41314
diff changeset
102
9753153c49fc Add a new templated PidginStatusEditor and wire it up.
Gary Kramlich <grim@reaperworld.com>
parents: 41314
diff changeset
103 if(GTK_IS_WIDGET(editor)) {
41542
e0ff7bea9eb3 Port PidginStatusManager to GTK4
Gary Kramlich <grim@reaperworld.com>
parents: 41356
diff changeset
104 gtk_window_destroy(GTK_WINDOW(editor));
41356
9753153c49fc Add a new templated PidginStatusEditor and wire it up.
Gary Kramlich <grim@reaperworld.com>
parents: 41314
diff changeset
105 }
9753153c49fc Add a new templated PidginStatusEditor and wire it up.
Gary Kramlich <grim@reaperworld.com>
parents: 41314
diff changeset
106
9753153c49fc Add a new templated PidginStatusEditor and wire it up.
Gary Kramlich <grim@reaperworld.com>
parents: 41314
diff changeset
107 purple_savedstatus_delete_by_status(status);
9753153c49fc Add a new templated PidginStatusEditor and wire it up.
Gary Kramlich <grim@reaperworld.com>
parents: 41314
diff changeset
108 }
9753153c49fc Add a new templated PidginStatusEditor and wire it up.
Gary Kramlich <grim@reaperworld.com>
parents: 41314
diff changeset
109
41306
8befd71928c2 Create a new status manager that's built in glade
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
110 static PurpleSavedStatus *
8befd71928c2 Create a new status manager that's built in glade
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
111 pidgin_status_manager_get_selected_status(PidginStatusManager *manager) {
42026
14aae1aaeb98 Convert GtkTreeView in status editor to GtkColumnView
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41596
diff changeset
112 GObject *wrapper = NULL;
41306
8befd71928c2 Create a new status manager that's built in glade
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
113 PurpleSavedStatus *status = NULL;
8befd71928c2 Create a new status manager that's built in glade
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
114
42026
14aae1aaeb98 Convert GtkTreeView in status editor to GtkColumnView
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41596
diff changeset
115 wrapper = gtk_single_selection_get_selected_item(manager->selection);
14aae1aaeb98 Convert GtkTreeView in status editor to GtkColumnView
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41596
diff changeset
116 status = g_object_get_data(wrapper, "savedstatus");
41306
8befd71928c2 Create a new status manager that's built in glade
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
117
8befd71928c2 Create a new status manager that's built in glade
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
118 return status;
8befd71928c2 Create a new status manager that's built in glade
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
119 }
8befd71928c2 Create a new status manager that's built in glade
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
120
8befd71928c2 Create a new status manager that's built in glade
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
121 static void
8befd71928c2 Create a new status manager that's built in glade
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
122 pidgin_status_manager_add(PidginStatusManager *manager,
8befd71928c2 Create a new status manager that's built in glade
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
123 PurpleSavedStatus *status)
8befd71928c2 Create a new status manager that's built in glade
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
124 {
42026
14aae1aaeb98 Convert GtkTreeView in status editor to GtkColumnView
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41596
diff changeset
125 GObject *wrapper = NULL;
41306
8befd71928c2 Create a new status manager that's built in glade
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
126 PurpleStatusPrimitive primitive;
8befd71928c2 Create a new status manager that's built in glade
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
127 gchar *message = NULL;
8befd71928c2 Create a new status manager that's built in glade
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
128 const gchar *icon_name = NULL, *type = NULL;
8befd71928c2 Create a new status manager that's built in glade
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
129
8befd71928c2 Create a new status manager that's built in glade
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
130 message = purple_markup_strip_html(purple_savedstatus_get_message(status));
8befd71928c2 Create a new status manager that's built in glade
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
131
8befd71928c2 Create a new status manager that's built in glade
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
132 primitive = purple_savedstatus_get_primitive_type(status);
8befd71928c2 Create a new status manager that's built in glade
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
133 icon_name = pidgin_icon_name_from_status_primitive(primitive, NULL);
8befd71928c2 Create a new status manager that's built in glade
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
134 type = purple_primitive_get_name_from_type(primitive);
8befd71928c2 Create a new status manager that's built in glade
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
135
42026
14aae1aaeb98 Convert GtkTreeView in status editor to GtkColumnView
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41596
diff changeset
136 /* PurpleSavedStatus is a boxed type, so it can't be put in a GListModel;
14aae1aaeb98 Convert GtkTreeView in status editor to GtkColumnView
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41596
diff changeset
137 * instead create a wrapper GObject instance to hold its information. */
14aae1aaeb98 Convert GtkTreeView in status editor to GtkColumnView
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41596
diff changeset
138 wrapper = g_object_new(G_TYPE_OBJECT, NULL);
14aae1aaeb98 Convert GtkTreeView in status editor to GtkColumnView
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41596
diff changeset
139 g_object_set_data(wrapper, "savedstatus", status);
14aae1aaeb98 Convert GtkTreeView in status editor to GtkColumnView
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41596
diff changeset
140 g_object_set_data_full(wrapper, "title",
14aae1aaeb98 Convert GtkTreeView in status editor to GtkColumnView
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41596
diff changeset
141 g_strdup(purple_savedstatus_get_title(status)),
14aae1aaeb98 Convert GtkTreeView in status editor to GtkColumnView
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41596
diff changeset
142 g_free);
14aae1aaeb98 Convert GtkTreeView in status editor to GtkColumnView
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41596
diff changeset
143 g_object_set_data_full(wrapper, "icon-name", g_strdup(icon_name), g_free);
14aae1aaeb98 Convert GtkTreeView in status editor to GtkColumnView
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41596
diff changeset
144 g_object_set_data_full(wrapper, "type", g_strdup(type), g_free);
14aae1aaeb98 Convert GtkTreeView in status editor to GtkColumnView
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41596
diff changeset
145 g_object_set_data_full(wrapper, "message", g_strdup(message), g_free);
41306
8befd71928c2 Create a new status manager that's built in glade
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
146
42106
eafcc5051015 Fix leak in Status Manager dialog
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 42026
diff changeset
147 g_list_store_append(manager->model, wrapper);
42026
14aae1aaeb98 Convert GtkTreeView in status editor to GtkColumnView
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41596
diff changeset
148
42106
eafcc5051015 Fix leak in Status Manager dialog
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 42026
diff changeset
149 g_free(message);
eafcc5051015 Fix leak in Status Manager dialog
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 42026
diff changeset
150 g_object_unref(wrapper);
41306
8befd71928c2 Create a new status manager that's built in glade
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
151 }
8befd71928c2 Create a new status manager that's built in glade
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
152
8befd71928c2 Create a new status manager that's built in glade
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
153 static void
8befd71928c2 Create a new status manager that's built in glade
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
154 pidgin_status_manager_populate_helper(gpointer data, gpointer user_data) {
8befd71928c2 Create a new status manager that's built in glade
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
155 PidginStatusManager *manager = user_data;
8befd71928c2 Create a new status manager that's built in glade
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
156 PurpleSavedStatus *status = data;
8befd71928c2 Create a new status manager that's built in glade
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
157
8befd71928c2 Create a new status manager that's built in glade
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
158 if(!purple_savedstatus_is_transient(status)) {
8befd71928c2 Create a new status manager that's built in glade
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
159 pidgin_status_manager_add(manager, status);
8befd71928c2 Create a new status manager that's built in glade
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
160 }
8befd71928c2 Create a new status manager that's built in glade
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
161 }
8befd71928c2 Create a new status manager that's built in glade
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
162
8befd71928c2 Create a new status manager that's built in glade
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
163 static void
8befd71928c2 Create a new status manager that's built in glade
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
164 pidgin_status_manager_refresh(PidginStatusManager *manager) {
8befd71928c2 Create a new status manager that's built in glade
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
165 GList *statuses = NULL;
8befd71928c2 Create a new status manager that's built in glade
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
166
42026
14aae1aaeb98 Convert GtkTreeView in status editor to GtkColumnView
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41596
diff changeset
167 g_list_store_remove_all(manager->model);
41306
8befd71928c2 Create a new status manager that's built in glade
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
168
8befd71928c2 Create a new status manager that's built in glade
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
169 statuses = purple_savedstatuses_get_all();
8befd71928c2 Create a new status manager that's built in glade
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
170 g_list_foreach(statuses, pidgin_status_manager_populate_helper, manager);
8befd71928c2 Create a new status manager that's built in glade
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
171 }
8befd71928c2 Create a new status manager that's built in glade
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
172
8befd71928c2 Create a new status manager that's built in glade
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
173 /******************************************************************************
8befd71928c2 Create a new status manager that's built in glade
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
174 * Callbacks
8befd71928c2 Create a new status manager that's built in glade
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
175 *****************************************************************************/
8befd71928c2 Create a new status manager that's built in glade
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
176 static void
8befd71928c2 Create a new status manager that's built in glade
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
177 pidgin_status_manager_response_cb(GtkDialog *dialog, gint response_id,
8befd71928c2 Create a new status manager that's built in glade
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
178 gpointer data)
8befd71928c2 Create a new status manager that's built in glade
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
179 {
8befd71928c2 Create a new status manager that's built in glade
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
180 PidginStatusManager *manager = data;
8befd71928c2 Create a new status manager that's built in glade
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
181 PurpleSavedStatus *status = NULL;
41356
9753153c49fc Add a new templated PidginStatusEditor and wire it up.
Gary Kramlich <grim@reaperworld.com>
parents: 41314
diff changeset
182 GtkWidget *editor = NULL;
41306
8befd71928c2 Create a new status manager that's built in glade
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
183
8befd71928c2 Create a new status manager that's built in glade
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
184 switch(response_id) {
8befd71928c2 Create a new status manager that's built in glade
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
185 case RESPONSE_USE:
8befd71928c2 Create a new status manager that's built in glade
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
186 status = pidgin_status_manager_get_selected_status(manager);
8befd71928c2 Create a new status manager that's built in glade
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
187
8befd71928c2 Create a new status manager that's built in glade
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
188 purple_savedstatus_activate(status);
8befd71928c2 Create a new status manager that's built in glade
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
189
8befd71928c2 Create a new status manager that's built in glade
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
190 break;
8befd71928c2 Create a new status manager that's built in glade
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
191 case RESPONSE_ADD:
41356
9753153c49fc Add a new templated PidginStatusEditor and wire it up.
Gary Kramlich <grim@reaperworld.com>
parents: 41314
diff changeset
192 editor = pidgin_status_editor_new(NULL);
9753153c49fc Add a new templated PidginStatusEditor and wire it up.
Gary Kramlich <grim@reaperworld.com>
parents: 41314
diff changeset
193 gtk_window_set_transient_for(GTK_WINDOW(editor),
9753153c49fc Add a new templated PidginStatusEditor and wire it up.
Gary Kramlich <grim@reaperworld.com>
parents: 41314
diff changeset
194 GTK_WINDOW(manager));
9753153c49fc Add a new templated PidginStatusEditor and wire it up.
Gary Kramlich <grim@reaperworld.com>
parents: 41314
diff changeset
195 gtk_widget_show(editor);
41306
8befd71928c2 Create a new status manager that's built in glade
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
196 break;
8befd71928c2 Create a new status manager that's built in glade
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
197 case RESPONSE_MODIFY:
41356
9753153c49fc Add a new templated PidginStatusEditor and wire it up.
Gary Kramlich <grim@reaperworld.com>
parents: 41314
diff changeset
198 pidgin_status_manager_show_editor(manager);
41306
8befd71928c2 Create a new status manager that's built in glade
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
199
8befd71928c2 Create a new status manager that's built in glade
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
200 break;
8befd71928c2 Create a new status manager that's built in glade
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
201 case RESPONSE_REMOVE:
41356
9753153c49fc Add a new templated PidginStatusEditor and wire it up.
Gary Kramlich <grim@reaperworld.com>
parents: 41314
diff changeset
202 pidgin_status_manager_remove_selected(manager);
41306
8befd71928c2 Create a new status manager that's built in glade
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
203 break;
8befd71928c2 Create a new status manager that's built in glade
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
204 case GTK_RESPONSE_CLOSE:
41596
2f0fec76cfbc Handle delete event in more dialogs (probably all, but can't be too sure.)
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41542
diff changeset
205 case GTK_RESPONSE_DELETE_EVENT:
41542
e0ff7bea9eb3 Port PidginStatusManager to GTK4
Gary Kramlich <grim@reaperworld.com>
parents: 41356
diff changeset
206 gtk_window_destroy(GTK_WINDOW(dialog));
41306
8befd71928c2 Create a new status manager that's built in glade
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
207 break;
8befd71928c2 Create a new status manager that's built in glade
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
208 }
8befd71928c2 Create a new status manager that's built in glade
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
209 }
8befd71928c2 Create a new status manager that's built in glade
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
210
42026
14aae1aaeb98 Convert GtkTreeView in status editor to GtkColumnView
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41596
diff changeset
211 static char *
14aae1aaeb98 Convert GtkTreeView in status editor to GtkColumnView
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41596
diff changeset
212 pidgin_status_manager_sort_data_cb(GObject *wrapper, const char *name,
14aae1aaeb98 Convert GtkTreeView in status editor to GtkColumnView
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41596
diff changeset
213 G_GNUC_UNUSED gpointer data)
41306
8befd71928c2 Create a new status manager that's built in glade
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
214 {
42026
14aae1aaeb98 Convert GtkTreeView in status editor to GtkColumnView
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41596
diff changeset
215 const char *value = NULL;
14aae1aaeb98 Convert GtkTreeView in status editor to GtkColumnView
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41596
diff changeset
216
14aae1aaeb98 Convert GtkTreeView in status editor to GtkColumnView
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41596
diff changeset
217 if(G_IS_OBJECT(wrapper)) {
14aae1aaeb98 Convert GtkTreeView in status editor to GtkColumnView
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41596
diff changeset
218 value = g_object_get_data(wrapper, name);
14aae1aaeb98 Convert GtkTreeView in status editor to GtkColumnView
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41596
diff changeset
219 }
41306
8befd71928c2 Create a new status manager that's built in glade
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
220
42026
14aae1aaeb98 Convert GtkTreeView in status editor to GtkColumnView
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41596
diff changeset
221 /* NOTE: Most GTK widget properties don't care if you return NULL, but the
14aae1aaeb98 Convert GtkTreeView in status editor to GtkColumnView
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41596
diff changeset
222 * GtkStringSorter does some string comparisons without checking for NULL,
14aae1aaeb98 Convert GtkTreeView in status editor to GtkColumnView
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41596
diff changeset
223 * so we need to ensure that non-NULL is returned to prevent runtime
14aae1aaeb98 Convert GtkTreeView in status editor to GtkColumnView
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41596
diff changeset
224 * warnings. */
14aae1aaeb98 Convert GtkTreeView in status editor to GtkColumnView
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41596
diff changeset
225 return g_strdup(value ? value : "");
14aae1aaeb98 Convert GtkTreeView in status editor to GtkColumnView
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41596
diff changeset
226 }
41306
8befd71928c2 Create a new status manager that's built in glade
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
227
42026
14aae1aaeb98 Convert GtkTreeView in status editor to GtkColumnView
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41596
diff changeset
228 /* A closure from within a GtkBuilderListItemFactory passes an extra first
14aae1aaeb98 Convert GtkTreeView in status editor to GtkColumnView
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41596
diff changeset
229 * argument, so we need to drop that to re-use the above callback. */
14aae1aaeb98 Convert GtkTreeView in status editor to GtkColumnView
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41596
diff changeset
230 static char *
14aae1aaeb98 Convert GtkTreeView in status editor to GtkColumnView
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41596
diff changeset
231 pidgin_status_manager_lookup_text_data_cb(G_GNUC_UNUSED GObject *self,
14aae1aaeb98 Convert GtkTreeView in status editor to GtkColumnView
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41596
diff changeset
232 GObject *wrapper, const char *name,
14aae1aaeb98 Convert GtkTreeView in status editor to GtkColumnView
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41596
diff changeset
233 gpointer data)
14aae1aaeb98 Convert GtkTreeView in status editor to GtkColumnView
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41596
diff changeset
234 {
14aae1aaeb98 Convert GtkTreeView in status editor to GtkColumnView
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41596
diff changeset
235 return pidgin_status_manager_sort_data_cb(wrapper, name, data);
41306
8befd71928c2 Create a new status manager that's built in glade
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
236 }
8befd71928c2 Create a new status manager that's built in glade
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
237
8befd71928c2 Create a new status manager that's built in glade
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
238 static void
42026
14aae1aaeb98 Convert GtkTreeView in status editor to GtkColumnView
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41596
diff changeset
239 pidgin_status_manager_row_activated_cb(G_GNUC_UNUSED GtkColumnView *self,
14aae1aaeb98 Convert GtkTreeView in status editor to GtkColumnView
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41596
diff changeset
240 guint position, gpointer data)
14aae1aaeb98 Convert GtkTreeView in status editor to GtkColumnView
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41596
diff changeset
241 {
14aae1aaeb98 Convert GtkTreeView in status editor to GtkColumnView
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41596
diff changeset
242 PidginStatusManager *manager = data;
14aae1aaeb98 Convert GtkTreeView in status editor to GtkColumnView
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41596
diff changeset
243
14aae1aaeb98 Convert GtkTreeView in status editor to GtkColumnView
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41596
diff changeset
244 gtk_single_selection_set_selected(manager->selection, position);
14aae1aaeb98 Convert GtkTreeView in status editor to GtkColumnView
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41596
diff changeset
245 pidgin_status_manager_show_editor(manager);
14aae1aaeb98 Convert GtkTreeView in status editor to GtkColumnView
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41596
diff changeset
246 }
14aae1aaeb98 Convert GtkTreeView in status editor to GtkColumnView
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41596
diff changeset
247
14aae1aaeb98 Convert GtkTreeView in status editor to GtkColumnView
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41596
diff changeset
248 static void
14aae1aaeb98 Convert GtkTreeView in status editor to GtkColumnView
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41596
diff changeset
249 pidgin_status_manager_selection_changed_cb(G_GNUC_UNUSED GObject *object,
14aae1aaeb98 Convert GtkTreeView in status editor to GtkColumnView
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41596
diff changeset
250 G_GNUC_UNUSED GParamSpec *pspec,
41306
8befd71928c2 Create a new status manager that's built in glade
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
251 gpointer data)
8befd71928c2 Create a new status manager that's built in glade
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
252 {
8befd71928c2 Create a new status manager that's built in glade
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
253 PidginStatusManager *manager = data;
8befd71928c2 Create a new status manager that's built in glade
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
254 gboolean sensitive = TRUE;
8befd71928c2 Create a new status manager that's built in glade
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
255
42026
14aae1aaeb98 Convert GtkTreeView in status editor to GtkColumnView
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41596
diff changeset
256 if(g_list_model_get_n_items(G_LIST_MODEL(manager->model)) == 0) {
41306
8befd71928c2 Create a new status manager that's built in glade
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
257 sensitive = FALSE;
8befd71928c2 Create a new status manager that's built in glade
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
258 }
8befd71928c2 Create a new status manager that's built in glade
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
259
8befd71928c2 Create a new status manager that's built in glade
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
260 gtk_widget_set_sensitive(manager->use_button, sensitive);
8befd71928c2 Create a new status manager that's built in glade
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
261 gtk_widget_set_sensitive(manager->modify_button, sensitive);
8befd71928c2 Create a new status manager that's built in glade
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
262
8befd71928c2 Create a new status manager that's built in glade
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
263 /* Only enable the remove button if the currently selected row is not the
8befd71928c2 Create a new status manager that's built in glade
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
264 * currently active status.
8befd71928c2 Create a new status manager that's built in glade
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
265 */
8befd71928c2 Create a new status manager that's built in glade
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
266 if(sensitive) {
8befd71928c2 Create a new status manager that's built in glade
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
267 PurpleSavedStatus *status = NULL;
8befd71928c2 Create a new status manager that's built in glade
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
268
8befd71928c2 Create a new status manager that's built in glade
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
269 status = pidgin_status_manager_get_selected_status(manager);
8befd71928c2 Create a new status manager that's built in glade
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
270
8befd71928c2 Create a new status manager that's built in glade
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
271 sensitive = status != purple_savedstatus_get_current();
8befd71928c2 Create a new status manager that's built in glade
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
272 }
8befd71928c2 Create a new status manager that's built in glade
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
273
8befd71928c2 Create a new status manager that's built in glade
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
274 gtk_widget_set_sensitive(manager->remove_button, sensitive);
8befd71928c2 Create a new status manager that's built in glade
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
275 }
8befd71928c2 Create a new status manager that's built in glade
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
276
8befd71928c2 Create a new status manager that's built in glade
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
277 static void
8befd71928c2 Create a new status manager that's built in glade
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
278 pidgin_status_manager_savedstatus_changed_cb(PurpleSavedStatus *new_status,
8befd71928c2 Create a new status manager that's built in glade
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
279 G_GNUC_UNUSED PurpleSavedStatus *old_status,
8befd71928c2 Create a new status manager that's built in glade
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
280 gpointer data)
8befd71928c2 Create a new status manager that's built in glade
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
281 {
8befd71928c2 Create a new status manager that's built in glade
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
282 PidginStatusManager *manager = data;
8befd71928c2 Create a new status manager that's built in glade
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
283 PurpleSavedStatus *selected = NULL;
8befd71928c2 Create a new status manager that's built in glade
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
284
8befd71928c2 Create a new status manager that's built in glade
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
285 /* Disable the remove button if the selected status is the currently active
8befd71928c2 Create a new status manager that's built in glade
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
286 * status.
8befd71928c2 Create a new status manager that's built in glade
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
287 */
8befd71928c2 Create a new status manager that's built in glade
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
288 selected = pidgin_status_manager_get_selected_status(manager);
8befd71928c2 Create a new status manager that's built in glade
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
289 if(selected != NULL) {
8befd71928c2 Create a new status manager that's built in glade
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
290 gboolean sensitive = selected != new_status;
8befd71928c2 Create a new status manager that's built in glade
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
291
8befd71928c2 Create a new status manager that's built in glade
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
292 gtk_widget_set_sensitive(manager->remove_button, sensitive);
8befd71928c2 Create a new status manager that's built in glade
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
293 }
8befd71928c2 Create a new status manager that's built in glade
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
294 }
8befd71928c2 Create a new status manager that's built in glade
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
295
8befd71928c2 Create a new status manager that's built in glade
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
296 static void
8befd71928c2 Create a new status manager that's built in glade
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
297 pidgin_status_manager_savedstatus_updated_cb(G_GNUC_UNUSED PurpleSavedStatus *status,
8befd71928c2 Create a new status manager that's built in glade
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
298 gpointer data)
8befd71928c2 Create a new status manager that's built in glade
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
299 {
8befd71928c2 Create a new status manager that's built in glade
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
300 PidginStatusManager *manager = data;
8befd71928c2 Create a new status manager that's built in glade
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
301
8befd71928c2 Create a new status manager that's built in glade
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
302 pidgin_status_manager_refresh(manager);
8befd71928c2 Create a new status manager that's built in glade
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
303 }
8befd71928c2 Create a new status manager that's built in glade
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
304
41356
9753153c49fc Add a new templated PidginStatusEditor and wire it up.
Gary Kramlich <grim@reaperworld.com>
parents: 41314
diff changeset
305 static void
9753153c49fc Add a new templated PidginStatusEditor and wire it up.
Gary Kramlich <grim@reaperworld.com>
parents: 41314
diff changeset
306 pidgin_status_editor_destroy_cb(GtkWidget *widget, gpointer data) {
9753153c49fc Add a new templated PidginStatusEditor and wire it up.
Gary Kramlich <grim@reaperworld.com>
parents: 41314
diff changeset
307 PidginStatusManager *manager = data;
42026
14aae1aaeb98 Convert GtkTreeView in status editor to GtkColumnView
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41596
diff changeset
308 GListModel *model = G_LIST_MODEL(manager->model);
14aae1aaeb98 Convert GtkTreeView in status editor to GtkColumnView
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41596
diff changeset
309 guint n_items = 0;
41356
9753153c49fc Add a new templated PidginStatusEditor and wire it up.
Gary Kramlich <grim@reaperworld.com>
parents: 41314
diff changeset
310
42026
14aae1aaeb98 Convert GtkTreeView in status editor to GtkColumnView
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41596
diff changeset
311 n_items = g_list_model_get_n_items(model);
14aae1aaeb98 Convert GtkTreeView in status editor to GtkColumnView
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41596
diff changeset
312 for(guint index = 0; index < n_items; index++) {
14aae1aaeb98 Convert GtkTreeView in status editor to GtkColumnView
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41596
diff changeset
313 GObject *wrapper = NULL;
41356
9753153c49fc Add a new templated PidginStatusEditor and wire it up.
Gary Kramlich <grim@reaperworld.com>
parents: 41314
diff changeset
314 GtkWidget *editor = NULL;
9753153c49fc Add a new templated PidginStatusEditor and wire it up.
Gary Kramlich <grim@reaperworld.com>
parents: 41314
diff changeset
315
42026
14aae1aaeb98 Convert GtkTreeView in status editor to GtkColumnView
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41596
diff changeset
316 wrapper = g_list_model_get_item(model, index);
14aae1aaeb98 Convert GtkTreeView in status editor to GtkColumnView
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41596
diff changeset
317 editor = g_object_get_data(wrapper, "editor");
41356
9753153c49fc Add a new templated PidginStatusEditor and wire it up.
Gary Kramlich <grim@reaperworld.com>
parents: 41314
diff changeset
318
9753153c49fc Add a new templated PidginStatusEditor and wire it up.
Gary Kramlich <grim@reaperworld.com>
parents: 41314
diff changeset
319 /* Check if editor is the widget being destroyed. */
9753153c49fc Add a new templated PidginStatusEditor and wire it up.
Gary Kramlich <grim@reaperworld.com>
parents: 41314
diff changeset
320 if(editor == widget) {
42026
14aae1aaeb98 Convert GtkTreeView in status editor to GtkColumnView
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41596
diff changeset
321 /* It is, so set it back to NULL to remove it from the wrapper. */
14aae1aaeb98 Convert GtkTreeView in status editor to GtkColumnView
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41596
diff changeset
322 g_object_set_data(wrapper, "editor", NULL);
42106
eafcc5051015 Fix leak in Status Manager dialog
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 42026
diff changeset
323 g_object_unref(wrapper);
41356
9753153c49fc Add a new templated PidginStatusEditor and wire it up.
Gary Kramlich <grim@reaperworld.com>
parents: 41314
diff changeset
324
9753153c49fc Add a new templated PidginStatusEditor and wire it up.
Gary Kramlich <grim@reaperworld.com>
parents: 41314
diff changeset
325 break;
9753153c49fc Add a new templated PidginStatusEditor and wire it up.
Gary Kramlich <grim@reaperworld.com>
parents: 41314
diff changeset
326 }
42106
eafcc5051015 Fix leak in Status Manager dialog
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 42026
diff changeset
327
eafcc5051015 Fix leak in Status Manager dialog
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 42026
diff changeset
328 g_object_unref(wrapper);
42026
14aae1aaeb98 Convert GtkTreeView in status editor to GtkColumnView
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41596
diff changeset
329 }
41356
9753153c49fc Add a new templated PidginStatusEditor and wire it up.
Gary Kramlich <grim@reaperworld.com>
parents: 41314
diff changeset
330 }
9753153c49fc Add a new templated PidginStatusEditor and wire it up.
Gary Kramlich <grim@reaperworld.com>
parents: 41314
diff changeset
331
41306
8befd71928c2 Create a new status manager that's built in glade
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
332 /******************************************************************************
8befd71928c2 Create a new status manager that's built in glade
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
333 * GObject Implementation
8befd71928c2 Create a new status manager that's built in glade
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
334 *****************************************************************************/
8befd71928c2 Create a new status manager that's built in glade
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
335 static void
8befd71928c2 Create a new status manager that's built in glade
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
336 pidgin_status_manager_finalize(GObject *obj) {
8befd71928c2 Create a new status manager that's built in glade
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
337 purple_signals_disconnect_by_handle(obj);
8befd71928c2 Create a new status manager that's built in glade
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
338
8befd71928c2 Create a new status manager that's built in glade
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
339 G_OBJECT_CLASS(pidgin_status_manager_parent_class)->finalize(obj);
8befd71928c2 Create a new status manager that's built in glade
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
340 }
8befd71928c2 Create a new status manager that's built in glade
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
341
8befd71928c2 Create a new status manager that's built in glade
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
342 static void
8befd71928c2 Create a new status manager that's built in glade
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
343 pidgin_status_manager_init(PidginStatusManager *manager) {
8befd71928c2 Create a new status manager that's built in glade
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
344 gpointer handle = NULL;
8befd71928c2 Create a new status manager that's built in glade
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
345
8befd71928c2 Create a new status manager that's built in glade
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
346 gtk_widget_init_template(GTK_WIDGET(manager));
8befd71928c2 Create a new status manager that's built in glade
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
347
8befd71928c2 Create a new status manager that's built in glade
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
348 pidgin_status_manager_refresh(manager);
8befd71928c2 Create a new status manager that's built in glade
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
349
8befd71928c2 Create a new status manager that's built in glade
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
350 handle = purple_savedstatuses_get_handle();
8befd71928c2 Create a new status manager that's built in glade
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
351 purple_signal_connect(handle, "savedstatus-changed", manager,
41314
0dc72eacd8bf Replace PURPLE_CALLBACK by G_CALLBACK
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41306
diff changeset
352 G_CALLBACK(pidgin_status_manager_savedstatus_changed_cb),
41306
8befd71928c2 Create a new status manager that's built in glade
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
353 manager);
8befd71928c2 Create a new status manager that's built in glade
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
354 purple_signal_connect(handle, "savedstatus-added", manager,
41314
0dc72eacd8bf Replace PURPLE_CALLBACK by G_CALLBACK
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41306
diff changeset
355 G_CALLBACK(pidgin_status_manager_savedstatus_updated_cb),
41306
8befd71928c2 Create a new status manager that's built in glade
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
356 manager);
8befd71928c2 Create a new status manager that's built in glade
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
357 purple_signal_connect(handle, "savedstatus-deleted", manager,
41314
0dc72eacd8bf Replace PURPLE_CALLBACK by G_CALLBACK
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41306
diff changeset
358 G_CALLBACK(pidgin_status_manager_savedstatus_updated_cb),
41306
8befd71928c2 Create a new status manager that's built in glade
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
359 manager);
8befd71928c2 Create a new status manager that's built in glade
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
360 purple_signal_connect(handle, "savedstatus-modified", manager,
41314
0dc72eacd8bf Replace PURPLE_CALLBACK by G_CALLBACK
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41306
diff changeset
361 G_CALLBACK(pidgin_status_manager_savedstatus_updated_cb),
41306
8befd71928c2 Create a new status manager that's built in glade
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
362 manager);
8befd71928c2 Create a new status manager that's built in glade
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
363 }
8befd71928c2 Create a new status manager that's built in glade
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
364
8befd71928c2 Create a new status manager that's built in glade
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
365 static void
8befd71928c2 Create a new status manager that's built in glade
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
366 pidgin_status_manager_class_init(PidginStatusManagerClass *klass) {
8befd71928c2 Create a new status manager that's built in glade
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
367 GObjectClass *obj_class = G_OBJECT_CLASS(klass);
8befd71928c2 Create a new status manager that's built in glade
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
368 GtkWidgetClass *widget_class = GTK_WIDGET_CLASS(klass);
8befd71928c2 Create a new status manager that's built in glade
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
369
8befd71928c2 Create a new status manager that's built in glade
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
370 obj_class->finalize = pidgin_status_manager_finalize;
8befd71928c2 Create a new status manager that's built in glade
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
371
8befd71928c2 Create a new status manager that's built in glade
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
372 gtk_widget_class_set_template_from_resource(
8befd71928c2 Create a new status manager that's built in glade
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
373 widget_class,
8befd71928c2 Create a new status manager that's built in glade
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
374 "/im/pidgin/Pidgin3/Status/manager.ui"
8befd71928c2 Create a new status manager that's built in glade
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
375 );
8befd71928c2 Create a new status manager that's built in glade
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
376
8befd71928c2 Create a new status manager that's built in glade
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
377 gtk_widget_class_bind_template_child(widget_class, PidginStatusManager,
8befd71928c2 Create a new status manager that's built in glade
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
378 model);
8befd71928c2 Create a new status manager that's built in glade
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
379 gtk_widget_class_bind_template_child(widget_class, PidginStatusManager,
8befd71928c2 Create a new status manager that's built in glade
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
380 selection);
8befd71928c2 Create a new status manager that's built in glade
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
381 gtk_widget_class_bind_template_child(widget_class, PidginStatusManager,
8befd71928c2 Create a new status manager that's built in glade
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
382 use_button);
8befd71928c2 Create a new status manager that's built in glade
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
383 gtk_widget_class_bind_template_child(widget_class, PidginStatusManager,
8befd71928c2 Create a new status manager that's built in glade
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
384 modify_button);
8befd71928c2 Create a new status manager that's built in glade
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
385 gtk_widget_class_bind_template_child(widget_class, PidginStatusManager,
8befd71928c2 Create a new status manager that's built in glade
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
386 remove_button);
8befd71928c2 Create a new status manager that's built in glade
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
387
8befd71928c2 Create a new status manager that's built in glade
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
388 gtk_widget_class_bind_template_callback(widget_class,
8befd71928c2 Create a new status manager that's built in glade
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
389 pidgin_status_manager_response_cb);
8befd71928c2 Create a new status manager that's built in glade
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
390 gtk_widget_class_bind_template_callback(widget_class,
42026
14aae1aaeb98 Convert GtkTreeView in status editor to GtkColumnView
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41596
diff changeset
391 pidgin_status_manager_lookup_text_data_cb);
14aae1aaeb98 Convert GtkTreeView in status editor to GtkColumnView
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41596
diff changeset
392 gtk_widget_class_bind_template_callback(widget_class,
14aae1aaeb98 Convert GtkTreeView in status editor to GtkColumnView
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41596
diff changeset
393 pidgin_status_manager_sort_data_cb);
14aae1aaeb98 Convert GtkTreeView in status editor to GtkColumnView
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41596
diff changeset
394 gtk_widget_class_bind_template_callback(widget_class,
41306
8befd71928c2 Create a new status manager that's built in glade
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
395 pidgin_status_manager_row_activated_cb);
8befd71928c2 Create a new status manager that's built in glade
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
396 gtk_widget_class_bind_template_callback(widget_class,
8befd71928c2 Create a new status manager that's built in glade
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
397 pidgin_status_manager_selection_changed_cb);
8befd71928c2 Create a new status manager that's built in glade
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
398 }
8befd71928c2 Create a new status manager that's built in glade
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
399
8befd71928c2 Create a new status manager that's built in glade
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
400 /******************************************************************************
8befd71928c2 Create a new status manager that's built in glade
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
401 * Public API
8befd71928c2 Create a new status manager that's built in glade
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
402 *****************************************************************************/
8befd71928c2 Create a new status manager that's built in glade
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
403 GtkWidget *
8befd71928c2 Create a new status manager that's built in glade
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
404 pidgin_status_manager_new(void) {
8befd71928c2 Create a new status manager that's built in glade
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
405 return g_object_new(PIDGIN_TYPE_STATUS_MANAGER, NULL);
8befd71928c2 Create a new status manager that's built in glade
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
406 }

mercurial