summaryrefslogtreecommitdiff
path: root/pidgin
Commit message (Collapse)AuthorAgeFilesLines
...
* Convert PurpleRequestGroup into a GObjectElliott Sales de Andrade2023-03-073-21/+21
| | | | | | | | | | | And go through with the renaming of `PurpleRequestFieldGroup` to `PurpleRequestGroup`. Also, this now implements `GListModel`, but nothing is yet updated to use that. Testing Done: Compiled, and opened Request Fields from Demo protocol. Reviewed at https://reviews.imfreedom.org/r/2322/
* Replace PurpleRequestField UI data with GObject dataElliott Sales de Andrade2023-03-061-4/+7
| | | | | | | Testing Done: Compiled and opened Request Fields from Demo protocol. Reviewed at https://reviews.imfreedom.org/r/2321/
* Convert PurpleRequestField into a GObjectElliott Sales de Andrade2023-03-061-4/+2
| | | | | | | | | | | This is just a straight conversion with not much attempt to make things nice. Also, this leaves `PurpleRequestField` as a multi-type object, but derivable, so we can change to a bunch of subclasses after. Testing Done: Compiled and opened Request Fields from Demo protocol. Reviewed at https://reviews.imfreedom.org/r/2320/
* Fix typo in request field getterElliott Sales de Andrade2023-03-051-2/+2
| | | | | | | | | The setter does not have the extra "field" in the name. Testing Done: Compiled. Reviewed at https://reviews.imfreedom.org/r/2319/
* Remove our stun codeGary Kramlich2023-03-041-9/+1
| | | | | | | | | | I left in the preferences widgets for now as these will be wired to traversity at some point. Testing Done: Opened the preferences dialog and made sure it worked as expected. Reviewed at https://reviews.imfreedom.org/r/2309/
* Remove autosensitivity from request fieldElliott Sales de Andrade2023-03-041-16/+0
| | | | | | | | | | | Nothing sets a sensitivity callback, and this induces a lot of bookkeeping to track. When things are GObject, then interested parties can connect to property notification instead of these callbacks. Testing Done: Compiled only. Reviewed at https://reviews.imfreedom.org/r/2310/
* Fix leaks in debug windowElliott Sales de Andrade2023-03-021-3/+10
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Fixes two leaks from the debug window: ``` 22 bytes in 1 blocks are definitely lost in loss record 7,038 of 41,972 at 0x484386F: malloc (vg_replace_malloc.c:393) by 0x4980168: g_malloc (gmem.c:130) by 0x4995602: g_strdup (gstrfuncs.c:363) by 0x4CFB782: purple_prefs_connect_callback (prefs.c:1301) by 0x48AA524: pidgin_debug_init (pidgindebug.c:918) by 0x48B8F9E: pidgin_ui_start (pidginui.c:146) by 0x4D37B01: purple_ui_start (purpleui.c:397) by 0x4CE3BA6: purple_core_init (core.c:211) by 0x48A384F: pidgin_application_startup (pidginapplication.c:820) by 0x4DD3553: UnknownInlinedFun (gclosure.c:895) by 0x4DD3553: g_signal_emit_valist (gsignal.c:3456) by 0x4DD3632: g_signal_emit (gsignal.c:3606) by 0x5815B82: g_application_register (gapplication.c:2211) ``` and ``` 32 bytes in 1 blocks are definitely lost in loss record 15,308 of 41,972 at 0x484386F: malloc (vg_replace_malloc.c:393) by 0x4980168: g_malloc (gmem.c:130) by 0x4997AB5: g_slice_alloc (gslice.c:1074) by 0x495E14C: UnknownInlinedFun (gdatetime.c:678) by 0x495E14C: g_date_time_from_instant (gdatetime.c:774) by 0x495F4E9: g_date_time_new_now_local (gdatetime.c:989) by 0x48A82F9: save_response_cb (pidgindebug.c:136) by 0x4DB4375: g_cclosure_marshal_VOID__INTv (gmarshal.c:596) by 0x4DD3553: UnknownInlinedFun (gclosure.c:895) by 0x4DD3553: g_signal_emit_valist (gsignal.c:3456) by 0x4DD3632: g_signal_emit (gsignal.c:3606) by 0x4DB5FBF: g_closure_invoke (gclosure.c:832) by 0x4DE3D85: signal_emit_unlocked_R.isra.0 (gsignal.c:3796) by 0x4DD3419: g_signal_emit_valist (gsignal.c:3549) ``` Testing Done: Ran in valgrind, saved the debug logs to a file, and the above leaks were gone. Reviewed at https://reviews.imfreedom.org/r/2304/
* Fix leaks in preferences windowElliott Sales de Andrade2023-03-021-1/+3
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | This fixes two leaks (of various amounts): ``` 90 bytes in 5 blocks are definitely lost in loss record 27,394 of 41,972 at 0x484386F: malloc (vg_replace_malloc.c:393) by 0x4980168: g_malloc (gmem.c:130) by 0x4995602: g_strdup (gstrfuncs.c:363) by 0x4DE1EEC: value_lcopy_string.lto_priv.0 (gvaluetypes.c:315) by 0x4DC7F13: g_object_get_valist (gobject.c:2893) by 0x4DC8243: g_object_get (gobject.c:2988) by 0x4CF53A1: purple_media_element_info_get_name (mediamanager.c:2404) by 0x48BE32A: populate_vv_device_menuitems (pidginvvprefs.c:87) by 0x48BF440: bind_vv_dropdown (pidginvvprefs.c:443) by 0x48BF48B: bind_vv_frame (pidginvvprefs.c:454) by 0x48BFA7F: pidgin_vv_prefs_init (pidginvvprefs.c:574) by 0x4DDF0E7: g_type_create_instance (gtype.c:1931) ``` ``` 121 bytes in 5 blocks are definitely lost in loss record 31,627 of 41,972 at 0x484386F: malloc (vg_replace_malloc.c:393) by 0x4980168: g_malloc (gmem.c:130) by 0x4995602: g_strdup (gstrfuncs.c:363) by 0x4DE1EEC: value_lcopy_string.lto_priv.0 (gvaluetypes.c:315) by 0x4DC7F13: g_object_get_valist (gobject.c:2893) by 0x4DC8243: g_object_get (gobject.c:2988) by 0x4CF5334: purple_media_element_info_get_id (mediamanager.c:2395) by 0x48BE33A: populate_vv_device_menuitems (pidginvvprefs.c:88) by 0x48BF440: bind_vv_dropdown (pidginvvprefs.c:443) by 0x48BF48B: bind_vv_frame (pidginvvprefs.c:454) by 0x48BFA7F: pidgin_vv_prefs_init (pidginvvprefs.c:574) by 0x4DDF0E7: g_type_create_instance (gtype.c:1931) ``` Testing Done: Ran with valgrind, opened the Preferences window, and the leaks were gone. Reviewed at https://reviews.imfreedom.org/r/2303/
* Fix leak in Status Manager dialogElliott Sales de Andrade2023-02-281-2/+6
| | | | | | | | | | | | | | | | | | | | | | | | Fix the leak of the GObject wrapper ``` 580 (72 direct, 508 indirect) bytes in 3 blocks are definitely lost in loss record 30,987 of 34,328 at 0x484386F: malloc (vg_replace_malloc.c:393) by 0x4980168: g_malloc (gmem.c:130) by 0x4997AB5: g_slice_alloc (gslice.c:1074) by 0x49980EC: g_slice_alloc0 (gslice.c:1100) by 0x4DDF04B: g_type_create_instance (gtype.c:1913) by 0x4DC4C1F: g_object_new_internal (gobject.c:2228) by 0x4DC6247: g_object_new_with_properties (gobject.c:2391) by 0x4DC6FF0: g_object_new (gobject.c:2037) by 0x48B79DF: pidgin_status_manager_add (pidginstatusmanager.c:138) by 0x48B7B2A: pidgin_status_manager_populate_helper (pidginstatusmanager.c:158) by 0x496801F: g_list_foreach (glist.c:1092) by 0x48B7B74: pidgin_status_manager_refresh (pidginstatusmanager.c:169) ``` Testing Done: Ran valgrind, opened Statuses and an editor for a status, and the leak was gone. Reviewed at https://reviews.imfreedom.org/r/2301/
* Fix leaks in requestsElliott Sales de Andrade2023-02-281-1/+3
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Fixes a leak for images in requests: ``` 3,627 bytes in 1 blocks are definitely lost in loss record 35,636 of 36,499 at 0x484386F: malloc (vg_replace_malloc.c:393) by 0x4980168: g_malloc (gmem.c:130) by 0x4995723: UnknownInlinedFun (gstrfuncs.c:426) by 0x4995723: g_memdup2 (gstrfuncs.c:419) by 0x4D3E534: purple_request_field_image_new (request.c:1677) by 0x1CA970B1: purple_demo_protocol_request_fields_activate (purpledemoprotocolactions.c:553) by 0x4DB5FBF: g_closure_invoke (gclosure.c:832) by 0x4DE3D85: signal_emit_unlocked_R.isra.0 (gsignal.c:3796) by 0x4DD3419: g_signal_emit_valist (gsignal.c:3549) by 0x4DD3632: g_signal_emit (gsignal.c:3606) by 0x581C784: g_simple_action_activate (gsimpleaction.c:227) by 0x581B132: g_action_activate (gaction.c:399) by 0x51221B6: UnknownInlinedFun (gtkmenutrackeritem.c:842) by 0x51221B6: gtk_popover_item_activate.lto_priv.0 (gtkmenusectionbox.c:200) ``` and leak of the GObject wrapper for request fields: ``` 4 bytes in 1 blocks are possibly lost in loss record 713 of 36,499 at 0x484386F: malloc (vg_replace_malloc.c:393) by 0x4980168: g_malloc (gmem.c:130) by 0x4995602: g_strdup (gstrfuncs.c:363) by 0x488B324: create_list_field (gtkrequest.c:1504) by 0x488D1D7: pidgin_request_fields (gtkrequest.c:2160) by 0x4D3FFB8: purple_request_fields (request.c:2283) by 0x1CA971D6: purple_demo_protocol_request_fields_activate (purpledemoprotocolactions.c:562) by 0x4DB5FBF: g_closure_invoke (gclosure.c:832) by 0x4DE3D85: signal_emit_unlocked_R.isra.0 (gsignal.c:3796) by 0x4DD3419: g_signal_emit_valist (gsignal.c:3549) by 0x4DD3632: g_signal_emit (gsignal.c:3606) by 0x581C784: g_simple_action_activate (gsimpleaction.c:227) 56 bytes in 1 blocks are possibly lost in loss record 19,209 of 36,499 at 0x48486AF: realloc (vg_replace_malloc.c:1451) by 0x498071F: g_realloc (gmem.c:201) by 0x49592C4: g_data_set_internal (gdataset.c:474) by 0x488B347: create_list_field (gtkrequest.c:1504) by 0x488D1D7: pidgin_request_fields (gtkrequest.c:2160) by 0x4D3FFB8: purple_request_fields (request.c:2283) by 0x1CA971D6: purple_demo_protocol_request_fields_activate (purpledemoprotocolactions.c:562) by 0x4DB5FBF: g_closure_invoke (gclosure.c:832) by 0x4DE3D85: signal_emit_unlocked_R.isra.0 (gsignal.c:3796) by 0x4DD3419: g_signal_emit_valist (gsignal.c:3549) by 0x4DD3632: g_signal_emit (gsignal.c:3606) by 0x581C784: g_simple_action_activate (gsimpleaction.c:227) 614 (192 direct, 422 indirect) bytes in 8 blocks are definitely lost in loss record 33,122 of 36,499 at 0x484386F: malloc (vg_replace_malloc.c:393) by 0x4980168: g_malloc (gmem.c:130) by 0x4997AB5: g_slice_alloc (gslice.c:1074) by 0x49980EC: g_slice_alloc0 (gslice.c:1100) by 0x4DDF04B: g_type_create_instance (gtype.c:1913) by 0x4DC4C1F: g_object_new_internal (gobject.c:2228) by 0x4DC6247: g_object_new_with_properties (gobject.c:2391) by 0x4DC6FF0: g_object_new (gobject.c:2037) by 0x488B2D5: create_list_field (gtkrequest.c:1499) by 0x488D1D7: pidgin_request_fields (gtkrequest.c:2160) by 0x4D3FFB8: purple_request_fields (request.c:2283) by 0x1CA971D6: purple_demo_protocol_request_fields_activate (purpledemoprotocolactions.c:562) ``` and a request label: ``` 128 bytes in 1 blocks are definitely lost in loss record 27,735 of 36,499 at 0x484378A: malloc (vg_replace_malloc.c:392) by 0x484870B: realloc (vg_replace_malloc.c:1451) by 0x498071F: g_realloc (gmem.c:201) by 0x499A343: g_string_maybe_expand (gstring.c:92) by 0x499A3BF: g_string_sized_new (gstring.c:116) by 0x4981BCB: g_markup_escape_text (gmarkup.c:2323) by 0x4887D8A: pidgin_request_escape (gtkrequest.c:360) by 0x488CED9: pidgin_request_fields (gtkrequest.c:2105) by 0x4D3FFB8: purple_request_fields (request.c:2283) by 0x1CA971D6: purple_demo_protocol_request_fields_activate (purpledemoprotocolactions.c:562) by 0x4DB5FBF: g_closure_invoke (gclosure.c:832) by 0x4DE3D85: signal_emit_unlocked_R.isra.0 (gsignal.c:3796) ``` and one in the demo protocol: ``` 40 bytes in 1 blocks are definitely lost in loss record 15,277 of 36,499 at 0x484386F: malloc (vg_replace_malloc.c:393) by 0x4AE3017: __vasprintf_internal (vasprintf.c:71) by 0x49C2E81: UnknownInlinedFun (stdio2.h:169) by 0x49C2E81: g_vasprintf (gprintf.c:340) by 0x4998EA0: g_strdup_vprintf (gstrfuncs.c:553) by 0x4998F5C: g_strdup_printf (gstrfuncs.c:583) by 0x1CA9584E: purple_demo_protocol_request_input_activate (purpledemoprotocolactions.c:203) by 0x4DB5FBF: g_closure_invoke (gclosure.c:832) by 0x4DE3D85: signal_emit_unlocked_R.isra.0 (gsignal.c:3796) by 0x4DD3419: g_signal_emit_valist (gsignal.c:3549) by 0x4DD3632: g_signal_emit (gsignal.c:3606) by 0x581C784: g_simple_action_activate (gsimpleaction.c:227) by 0x581B132: g_action_activate (gaction.c:399) ``` Testing Done: Ran valgrind and confirmed above leaks were not there after opening Request Input and Request Fields. Reviewed at https://reviews.imfreedom.org/r/2300/
* Fix leaks in dynamic menusElliott Sales de Andrade2023-02-282-0/+2
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Fixes two leaks: ``` 10,463 (48 direct, 10,415 indirect) bytes in 1 blocks are definitely lost in loss record 34,138 of 34,479 at 0x484386F: malloc (vg_replace_malloc.c:393) by 0x4980168: g_malloc (gmem.c:130) by 0x4997AB5: g_slice_alloc (gslice.c:1074) by 0x49980EC: g_slice_alloc0 (gslice.c:1100) by 0x4DDF04B: g_type_create_instance (gtype.c:1913) by 0x4DC4C1F: g_object_new_internal (gobject.c:2228) by 0x4DC6247: g_object_new_with_properties (gobject.c:2391) by 0x4DC6FF0: g_object_new (gobject.c:2037) by 0x1CA978CF: purple_demo_protocol_get_menu (purpledemoprotocolactions.c:750) by 0x4D2DB1F: purple_protocol_actions_get_menu (purpleprotocolactions.c:110) by 0x489F74C: pidgin_accounts_enabled_menu_get_item_links (pidginaccountsenabledmenu.c:279) by 0x5817C3F: g_menu_model_real_get_item_link (gmenumodel.c:397) ``` and ``` 2,051 (144 direct, 1,907 indirect) bytes in 3 blocks are definitely lost in loss record 33,018 of 34,479 at 0x484386F: malloc (vg_replace_malloc.c:393) by 0x4980168: g_malloc (gmem.c:130) by 0x4997AB5: g_slice_alloc (gslice.c:1074) by 0x49980EC: g_slice_alloc0 (gslice.c:1100) by 0x4DDF04B: g_type_create_instance (gtype.c:1913) by 0x4DC4C1F: g_object_new_internal (gobject.c:2228) by 0x4DC6247: g_object_new_with_properties (gobject.c:2391) by 0x4DC6FF0: g_object_new (gobject.c:2037) by 0x581E9EE: g_menu_item_new_section (gmenu.c:1256) by 0x48B465F: pidgin_plugins_menu_get_item_links (pidginpluginsmenu.c:204) by 0x5817C3F: g_menu_model_real_get_item_link (gmenumodel.c:397) by 0x5124B78: gtk_menu_tracker_add_items (gtkmenutracker.c:313) ``` Testing Done: Ran in `valgrind --leak-check=full` and confirmed that the leak was gone. Reviewed at https://reviews.imfreedom.org/r/2298/
* Port list request fields from GtkTreeView to GtkListViewElliott Sales de Andrade2023-02-261-61/+100
| | | | | | | | | | | | | | This uses the same "trick" used elsewhere of a plain `GObject` to store the data we need in the list model. Note this does not change datasheets. Testing Done: Opened a request with a list field and confirmed that the selected options were correct upon accepting the dialog. Bugs closed: PIDGIN-17750 Reviewed at https://reviews.imfreedom.org/r/2294/
* Close wait request when dialog is destroyedElliott Sales de Andrade2023-02-261-5/+7
| | | | | | | | | | | Because the request was previously only closed when the Cancel button was clicked, the request was dangling if the user clicked the window Close button, or pressed Escape. Testing Done: Opened a wait request, then closed the dialog with Escape/the close button, and confirmed the cancel callback was triggered. Reviewed at https://reviews.imfreedom.org/r/2293/
* Fix requesting files/foldersElliott Sales de Andrade2023-02-261-11/+11
| | | | | | | | | | `gtk_file_chooser_get_current_name` returns the value entered by the user, but is _not_ the path selected. It also only works in a save dialog. Testing Done: Requested a file/folder and confirmed that the callback received the selected paths from the dialog. Reviewed at https://reviews.imfreedom.org/r/2292/
* Port choices in request widgets to GtkDropDownElliott Sales de Andrade2023-02-251-149/+72
| | | | | | | | | | | This also fixes the actual response as well. Unlike before, the choice field no longer differentiates between "many" choices/compact choices vs "few", and just always uses a drop down. Testing Done: Opened a choice request, as well as a request field with a choice in it. Confirmed that selected choices were returned from the dialog. Reviewed at https://reviews.imfreedom.org/r/2290/
* Fix property warning when requesting an int fieldElliott Sales de Andrade2023-02-251-4/+3
| | | | | | | | | | | | | The `GtkSpinButton` does not have an `activates-default` property, and so this warned when creating an integer request field. But `setup_entry_field` is only called in two places, so we can inline the property setting to the place that needs it. Testing Done: Opened a request with an int field. Reviewed at https://reviews.imfreedom.org/r/2291/
* Update to talkatu 0.2.0Gary Kramlich2023-02-249-19/+66
| | | | | | | Testing Done: Compiled, ran, and veried the status editor and about dialogs worked as expected. Reviewed at https://reviews.imfreedom.org/r/2279/
* Set settings backend on the plugin viewElliott Sales de Andrade2023-02-241-0/+7
| | | | | | | Testing Done: Compiled and ran with /r/2128, opened Plugins dialog and nothing crashed. Reviewed at https://reviews.imfreedom.org/r/2130/
* Fix new warning in XMPP disco pluginElliott Sales de Andrade2023-02-241-1/+3
| | | | | | | Testing Done: Compiled. Reviewed at https://reviews.imfreedom.org/r/2280/
* Convert XMPP Service Discovery to GtkColumnViewElliott Sales de Andrade2023-02-245-335/+255
| | | | | | | | | | | | | As with the other ports to GtkColumnView, this drops the popover and the tooltip. Connecting to the expanded property (in order to lazy-load children) is a bit weird, but seems to be the only way I could find to do it. Testing Done: Browsed `pidgin.im`, double-clicked `conference.pidgin.im`/clicked the expander, and the rooms were loaded. Double-clicked all the rooms and confirmed the Add Chat dialog was correctly filled. Also clicked the Add button after selecting one and confirmed the same. Bugs closed: PIDGIN-17747 Reviewed at https://reviews.imfreedom.org/r/2256/
* disco: Move chat name to Description columnElliott Sales de Andrade2023-02-231-5/+2
| | | | | | | | | | | I find it weird that the name of chats ends up in the Name column, so that you don't get the JID. So move it to the Description, and put the JID back in the Name column. Testing Done: Browsed to `pidgin.im`, and expanded `conference.pidgin.im`. Reviewed at https://reviews.imfreedom.org/r/2275/
* Mark unused parameters as such for all of the pidgin pluginsGary Kramlich2023-02-216-50/+78
| | | | | | | Testing Done: Turned the warning level up to 2, compiled, and verified the warnings were gone. Reviewed at https://reviews.imfreedom.org/r/2252/
* Set our global C standard to C17 and warning_level to 2Gary Kramlich2023-02-211-4/+2
| | | | | | | | | | Testing Done: I compiled this on Debian unstable, FreeBSD 13 amd64 and i386, OpenBSD 7.2 amd64 and i386, RaspberryPI OS unstable, Windows 11, and macOS Monterey and all compiled without issue. As for MSVC, support was added for C11 and C17 in Visual Studio 2019 so we should be fine there as well. Reviewed at https://reviews.imfreedom.org/r/2248/
* Display the preferences window as a singleton from the applicationGary Kramlich2023-02-214-38/+22
| | | | | | | | | | | This is how we handle displaying other dialogs and apparently the preferences window just got missed. We also make it transient for whatever window is active which means it won't fill an entire cell in a tiling window manager. Testing Done: Opened the preferences dialog in i3 and verified it was no longer a full tile and that everything worked as expected. Reviewed at https://reviews.imfreedom.org/r/2242/
* Remove conversation's internal history api as it will be replace by the new ↵Gary Kramlich2023-02-201-37/+0
| | | | | | | | | history api Testing Done: Joined a MUC and verified that that history was still displayed and that sending messages and stuff worked. Reviewed at https://reviews.imfreedom.org/r/2238/
* Remove a bunch stuff from PidginConversationGary Kramlich2023-02-202-1438/+5
| | | | | | | | | | | | This removes the memberlist, the typing stuff, the send history, as well as the history loading. The memberlist will be it's on widget in the near future with libpurple managing the list model, send history will talk to the history api, and the rest either is or will be implemented in talkatu. Testing Done: Joined a MUC and verified that the chat functioned as expected. Reviewed at https://reviews.imfreedom.org/r/2237/
* Mark a number of unused parameters as suchGary Kramlich2023-02-191-1/+1
| | | | | | | Testing Done: Compiled and Windows and verified the warnings were gone. Reviewed at https://reviews.imfreedom.org/r/2247/
* Fix the Windows buildGary Kramlich2023-02-191-0/+1
| | | | | | | | | | Include pidgindisplaywindow.h in gtkwin32dep.c which was causing the build to fail. Testing Done: Compiled and ran on Windows. Reviewed at https://reviews.imfreedom.org/r/2246/
* Clean up the null checking in pidgin_contact_list_avatar_cbGary Kramlich2023-02-191-10/+7
| | | | | | | | | Somehow I made a mess of the `NULL` handling here so this just cleans it all up. Testing Done: Navigated away and back to the contact list a few times and verified the warnings were gone. Reviewed at https://reviews.imfreedom.org/r/2243/
* Avoid some GWarnings when selecting away from contactsGary Kramlich2023-02-171-0/+4
| | | | | | | | | | | | | When we move the DisplayWindow to GtkListView, we moved to using an AdwBin as the container widget and just set the child to what should be displayed. When this happens to a ListView, each item gets deleted and for some reason the bound property closures in the factory get called with an item that is set to NULL. So if we get passed NULL, we just need to bail. Testing Done: Ran under `gdb` with `G_DEBUG=fatal-warnings` and verified that it didn't break when I switched the display window from contacts to conversations. Reviewed at https://reviews.imfreedom.org/r/2233/
* Remove PidginBlistGary Kramlich2023-02-1710-4182/+13
| | | | | | | | | | | | | | | | | | | | PidginContactList is functional enough for us to start adding features and since GtkTreeView is being deprecated, now seemed like a great time to purge PidginBlist. There's a few remaining pieces in gtkblist.[ch] relating to the join chat and im buddy dialogs, as well as the PurpleBlist subclass we need to work out yet. I also removed the gtkbuddynote plugin as all it did was add the buddy note to the tooltip. My future plans here will have this built in to the ui because a few protocols support this already and we can mock it for those that don't. Testing Done: Launched Pidgin 3 and verified stuff worked! Bugs closed: PIDGIN-17751 Reviewed at https://reviews.imfreedom.org/r/2228/
* Add search support to the contact listGary Kramlich2023-02-173-9/+80
| | | | | | | | | | | | | | | This searches everything in `PurplePerson` and all of it's contacts, but does not yet cover tags. I am planning on covering that in another review request. Right now the matching is just using `strstr`, but will will update this as part of [PIDGIN-17737](https://issues.imfreedom.org/issue/PIDGIN-17737/). I also tried to figure out how to get focus back to the list view, but didn't come up with any viable solutions. Testing Done: Ran the unit tests and did a bunch of searches in the contact list with the demo protocol plugin. Bugs closed: PIDGIN-17717 Reviewed at https://reviews.imfreedom.org/r/2211/
* Add a property and accessor for getting the avatar to display for a PurplePersonGary Kramlich2023-02-101-0/+6
| | | | | | | | | Testing Done: Ran the unit tests and verified everything looks looks right in the contact list. Bugs closed: PIDGIN-17735 Reviewed at https://reviews.imfreedom.org/r/2232/
* Add a name-for-display property to PurplePersonGary Kramlich2023-02-101-4/+2
| | | | | | | | | | | | This will first return the alias of the person if set. If there is no alias set on the person but there is a priority contact info, the value of purple_contact_info_get_name_for_display will be called on the priority contact info, otherwise NULL will be returned. Testing Done: Verified everything looked right in the contact list and verified everything looked alright in the docs and ran the unit tests. Reviewed at https://reviews.imfreedom.org/r/2205/
* Add status-messages to PidginContactListGary Kramlich2023-02-102-10/+59
| | | | | | | | | Testing Done: Connected the demo protocol plugin and verified everything looked correct. Bugs closed: PIDGIN-17754 Reviewed at https://reviews.imfreedom.org/r/2231/
* Make the DisplayWindow use a GtkListViewGary Kramlich2023-02-095-393/+956
| | | | | | | | | | | | | | | | | The traditional pattern of using a TreeView and Notebook/stack has been removed. This now use a ListView with a model that contains the child widgets, and an AdwBin where we swap the children in and out. I didn't implement everything, as now that this window is a bit more mixed content, things aren't as clear cut. I left some TODO's in the code describing these scenarios. Testing Done: Tested opening and closing chats in the ui. Verified the keybinds work for navigating everything thing. Bugs closed: PIDGIN-17752 Reviewed at https://reviews.imfreedom.org/r/2227/
* Export Account::errorGary Kramlich2023-02-081-1/+1
| | | | | | | | | | | I can't think of a good reason why we shouldn't expose the error property on Accounts. But I would like to be able to set the error from the UI when there is an error in the settings for example. Testing Done: Built the docs, ran the tests, used the prune connection action in the demo protocol plugin and verified everything was still working. Reviewed at https://reviews.imfreedom.org/r/2216/
* Convert XmppDiscoService into a GObjectElliott Sales de Andrade2023-01-246-166/+688
| | | | | | | | | | | This will enable porting things to binding/expression lookup. I probably didn't _really_ need to make everything properties, but that was easier to do than figure out which ones would really be needed. Testing Done: Ran discovery on `pidgin.im`; saw `conference.pidgin.im` show up, then expanded it and the various rooms appeared, as they should. Clicked Add on a few and verified that the Add Chat dialog appeared with the correct values. Reviewed at https://reviews.imfreedom.org/r/2210/
* Port the room list from GtkTreeView to GtkColumnViewElliott Sales de Andrade2023-01-232-213/+108
| | | | | | | | | | | Note, this removes the tooltip. It's not super easy to get the cell that the mouse is over, plus all it showed was the Name, which is pretty redundant. It also removes the popup menu, for the same reason, as it just duplicates the response buttons, and on a `ColumnView`, right-clicking does not select the hovered row anyway. Testing Done: Fetched room list for `conference.pidgin.im`, clicked on the rows, and saw that the buttons were enabled (though I think all responses were chats so they were always enabled once one was selected.) Typed some bit of the names and they were filtered. Reviewed at https://reviews.imfreedom.org/r/2209/
* Remove unused enums from PidginElliott Sales de Andrade2023-01-234-35/+13
| | | | | | | | | | | None of the listed headers define any public & used enums, so they can be removed from the Meson list. But actually, none of the headers in Pidgin define any enums, so remove the whole `pidginenums.h`. We can re-add it later if needed. Testing Done: Compiled only. Reviewed at https://reviews.imfreedom.org/r/2208/
* Use icon-name to set up XMPP Discovery icons insteadElliott Sales de Andrade2023-01-232-38/+15
| | | | | | | | | This will make it easier to move away from `GtkTreeView`. Testing Done: Fetched discovery results from `pidgin.im` and the entries had icons (though I think only chats exist on there.) Reviewed at https://reviews.imfreedom.org/r/2207/
* Remove the remaining nat-pmp code for auto discovering ip addressesGary Kramlich2023-01-211-5/+1
| | | | | | | Testing Done: Compiled Reviewed at https://reviews.imfreedom.org/r/2161/
* Remove the TURN stuff as it didn't do much and is going to move to TraversityGary Kramlich2023-01-212-115/+0
| | | | | | | Testing Done: Compiled and verified the network preferences page still functioned properly. Reviewed at https://reviews.imfreedom.org/r/2160/
* Align the account manager to the top rather than centerGary Kramlich2023-01-201-1/+0
| | | | | | | Testing Done: Ran and verified the changes. Reviewed at https://reviews.imfreedom.org/r/2204/
* Re-design account manager as a GtkListBoxElliott Sales de Andrade2023-01-177-397/+758
| | | | | | | | | | | Moves to a nicely spaced `GtkListBox`. The avatar is implemented using `AdwAvatar` solely for the autogenerated colour for accounts without an icon to give them some uniqueness, but it could be moved to `PidginAvatar`. As a followup, I'd probably move the Account Editors from a separate dialog to stack within the manager, similar to how the Plugin dialog works. Neither the previous manager nor this one prevents you from opening two editors for an account, but this would remove that issue as well. Testing Done: Toggled enabled/disabled to check that account status worked and was displayed. Added a few bogus accounts to confirm that errors are shown. Activated a row to show the editor. Hit the delete button and cancelled/approved and confirmed that account was kept/removed. Reviewed at https://reviews.imfreedom.org/r/2079/
* Convert GtkTreeView in status editor to GtkColumnViewElliott Sales de Andrade2023-01-172-135/+212
| | | | | | | | | | | | | | | | | | There is a (big or small, up to you) hack in this implementation: `PidginSavedStatus` is a boxed type and so cannot be placed in a `GListModel`. Thus the model uses a dummy `GObject` instance for each row that works similar to each `GtkTreeModel` row. This is annoying, but means the rest of the `.ui` remains _similar_ to how it would be with a non-boxed type. Compared to before, this is only missing search. Like the account manager, we might want to redesign this entirely, but this is just a straight move away from `GtkTreeView` due to its impending deprecation. Also, now I have some idea how `GtkColumnView` works at least. Testing Done: Double-clicked a few saved statuses to confirm the editor dialogs opened, then clicked Modify to confirm that it opened the existing editor dialog. Added a new saved status and confirmed that they were in the view. Deleted a saved status and confirmed it was no longer in the view. Closed the manager window with editor dialogs opened and confirmed all the editor dialogs closed as they used to. Confirmed that Remove button was disabled when selecting an in-use status. Clicked the column headers and confirmed that the statuses were sorted by them. Reviewed at https://reviews.imfreedom.org/r/2199/
* Create new conversation when activating users in the new contact listGary Kramlich2023-01-172-0/+37
| | | | | | | | | | I also had to remove an unnecessary g_date_time_unref in the demo protocol plugin for testing. Testing Done: Using the demo protocol plugin, I opened a conversation to `Echo` and sent a message. I then went to the buddy list window and double clicked on `Echo` again. I saw history got loaded, which I'll be removing in the near future, but I was able to send messages correctly. Reviewed at https://reviews.imfreedom.org/r/2201/
* Fix the bottom margin on the frame in General page of the About boxGary Kramlich2023-01-172-2/+7
| | | | | | | | | Also fix some formatting in the text of the General page. Testing Done: Opened the about dialog and verified the changes. Reviewed at https://reviews.imfreedom.org/r/2200/
* Add copy button to Build Information sectionsElliott Sales de Andrade2023-01-162-0/+301
| | | | | | | | | | | | These buttons on each group allow exporting the sections to the clipboard in a markdown format. The Copy All button allows exporting everything. Note that this information is purposely _not_ translated as I expect it to primarily be used for debugging by us in bug reports. Testing Done: Opened About dialog, clicked all the Copy buttons and confirmed their contents; clicked the Copy All button and confirmed everything was there. Reviewed at https://reviews.imfreedom.org/r/2196/
* Tweak general page in About dialogElliott Sales de Andrade2023-01-161-11/+20
| | | | | | | | | This makes it look similar to the Adwaita-styled boxed on the other pages. Testing Done: Opened About page and checked main page. Reviewed at https://reviews.imfreedom.org/r/2195/