diff options
author | Gary Kramlich <grim@reaperworld.com> | 2022-10-31 04:02:09 -0500 |
---|---|---|
committer | Gary Kramlich <grim@reaperworld.com> | 2022-10-31 04:02:09 -0500 |
commit | 901f4ebdfe8b3a3740a0757c169cef54551dc381 (patch) | |
tree | 21ce0f8042a22a90bd05fbf9efe2033fb862548d /finch | |
parent | df3f2aad7a4089fe49014c33f079cbda4cc9fce5 (diff) | |
download | pidgin-901f4ebdfe8b3a3740a0757c169cef54551dc381.tar.gz |
Create PurpleUi that merges PurpleCoreUiOps and PurpleUiInfo
This created a lot more refactoring that I imagined, but it's mostly just moving stuff around.
I skipped the unit tests for now because we already have a `test_ui.[ch]` in the tests directory which we can/should move to a separate library or something, so it's available outside of the `libpurple/tests/` directory.
Testing Done:
Ran the unit tests, launched pidgin3, and launched finch3 with out issue.
Bugs closed: PIDGIN-17697
Reviewed at https://reviews.imfreedom.org/r/1925/
Diffstat (limited to 'finch')
-rw-r--r-- | finch/finchui.c (renamed from finch/gntui.c) | 92 | ||||
-rw-r--r-- | finch/finchui.h (renamed from finch/gntui.h) | 27 | ||||
-rw-r--r-- | finch/libfinch.c | 45 | ||||
-rw-r--r-- | finch/meson.build | 4 |
4 files changed, 102 insertions, 66 deletions
diff --git a/finch/gntui.c b/finch/finchui.c index f0f15a1563..f4af9330fd 100644 --- a/finch/gntui.c +++ b/finch/finchui.c @@ -1,5 +1,6 @@ /* - * finch + * Finch - Universal Text Chat Client + * Copyright (C) Pidgin Developers <devel@pidgin.im> * * Finch is the legal property of its developers, whose names are too numerous * to list here. Please refer to the COPYRIGHT file distributed with this @@ -16,17 +17,16 @@ * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA + * along with this program; if not, see <https://www.gnu.org/licenses/>. */ -#include <config.h> +#include <glib.h> +#include <glib/gi18n.h> -#include <glib/gi18n-lib.h> +#define G_SETTINGS_ENABLE_BACKEND +#include <gio/gsettingsbackend.h> -#include <purple.h> - -#include "gntui.h" +#include "finchui.h" #include "finchnotifications.h" #include "gntaccount.h" @@ -34,15 +34,25 @@ #include "gntconn.h" #include "gntconv.h" #include "gntdebug.h" -#include "gntxfer.h" #include "gntmedia.h" #include "gntnotify.h" #include "gntplugin.h" #include "gntprefs.h" +#include "gntprefs.h" #include "gntrequest.h" #include "gntroomlist.h" #include "gntstatus.h" +#include "gntxfer.h" + +struct _FinchUi { + PurpleUi parent; +}; +G_DEFINE_TYPE(FinchUi, finch_ui, PURPLE_TYPE_UI) + +/****************************************************************************** + * Helpers + *****************************************************************************/ static gboolean finch_history_init(GError **error) { PurpleHistoryManager *manager = NULL; @@ -74,9 +84,16 @@ finch_history_init(GError **error) { return purple_history_manager_set_active(manager, id, error); } -void -finch_ui_init(void) -{ +/****************************************************************************** + * PurpleUi Implementation + *****************************************************************************/ +static void +finch_ui_prefs_init(G_GNUC_UNUSED PurpleUi *ui) { + finch_prefs_init(); +} + +static void +finch_ui_start(G_GNUC_UNUSED PurpleUi *ui) { GError *error = NULL; finch_debug_init(); @@ -144,9 +161,8 @@ finch_ui_init(void) #ifdef STANDALONE } -void -finch_ui_uninit(void) -{ +static void +finch_ui_stop(G_GNUC_UNUSED PurpleUi *ui) { purple_accounts_set_ui_ops(NULL); finch_accounts_uninit(); @@ -182,3 +198,49 @@ finch_ui_uninit(void) #endif /* _WIN32 */ #endif /* STANDALONE */ } + +static gpointer +finch_ui_get_settings_backend(G_GNUC_UNUSED PurpleUi *ui) { + GSettingsBackend *backend = NULL; + char *config = NULL; + + config = g_build_filename(purple_config_dir(), "finch3.ini", NULL); + backend = g_keyfile_settings_backend_new(config, "/", NULL); + + g_free(config); + + return backend; +} + +/****************************************************************************** + * GObject Implementation + *****************************************************************************/ +static void +finch_ui_init(G_GNUC_UNUSED FinchUi *ui) { +} + +static void +finch_ui_class_init(FinchUiClass *klass) { + PurpleUiClass *ui_class = PURPLE_UI_CLASS(klass); + + ui_class->prefs_init = finch_ui_prefs_init; + ui_class->start = finch_ui_start; + ui_class->stop = finch_ui_stop; + ui_class->get_settings_backend = finch_ui_get_settings_backend; +} + +/****************************************************************************** + * Public API + *****************************************************************************/ +PurpleUi * +finch_ui_new(void) { + return g_object_new( + FINCH_TYPE_UI, + "id", "finch3", + "name", _("Finch"), + "version", VERSION, + "website", "https://pidgin.im", + "support-website", "https://pidgin.im/contact/", + "client-type", "console", + NULL); +} diff --git a/finch/gntui.h b/finch/finchui.h index 36597cae56..4913707067 100644 --- a/finch/gntui.h +++ b/finch/finchui.h @@ -1,5 +1,6 @@ /* - * finch + * Finch - Universal Text Chat Client + * Copyright (C) Pidgin Developers <devel@pidgin.im> * * Finch is the legal property of its developers, whose names are too numerous * to list here. Please refer to the COPYRIGHT file distributed with this @@ -16,8 +17,7 @@ * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA + * along with this program; if not, see <https://www.gnu.org/licenses/>. */ #if !defined(FINCH_GLOBAL_HEADER_INSIDE) && !defined(FINCH_COMPILATION) @@ -27,10 +27,25 @@ #ifndef FINCH_UI_H #define FINCH_UI_H -#include "gnt.h" +#include <purple.h> -void finch_ui_init(void); -void finch_ui_uninit(void); +G_BEGIN_DECLS + +#define FINCH_TYPE_UI (finch_ui_get_type()) +G_DECLARE_FINAL_TYPE(FinchUi, finch_ui, FINCH, UI, PurpleUi) + +/** + * finch_ui_new: + * + * Creates the [class@Purple.Ui] for finch. + * + * Note: This isn't really useful outside of Finch itself. + * + * Since: 3.0.0 + */ +PurpleUi *finch_ui_new(void); + +G_END_DECLS #endif /* FINCH_UI_H */ diff --git a/finch/libfinch.c b/finch/libfinch.c index 191a9eb9e4..d978d34289 100644 --- a/finch/libfinch.c +++ b/finch/libfinch.c @@ -26,54 +26,19 @@ #include <glib/gi18n-lib.h> #include <glib/gstdio.h> -#define G_SETTINGS_ENABLE_BACKEND -#include <gio/gsettingsbackend.h> - #include <locale.h> #include <purple.h> +#include "finchui.h" #include "gntdebug.h" #include "gntidle.h" #include "gntprefs.h" -#include "gntui.h" #include "libfinch.h" #include "config.h" #include "package_revision.h" -static void -finch_quit(void) -{ - finch_ui_uninit(); -} - -static gpointer -finch_get_settings_backend(void) { - GSettingsBackend *backend = NULL; - char *config = NULL; - - config = g_build_filename(purple_config_dir(), "finch3.ini", NULL); - backend = g_keyfile_settings_backend_new(config, "/", NULL); - - g_free(config); - - return backend; -} - -static PurpleCoreUiOps core_ops = { - .ui_prefs_init = finch_prefs_init, - .ui_init = finch_ui_init, - .quit = finch_quit, - .get_settings_backend = finch_get_settings_backend, -}; - -static PurpleCoreUiOps * -gnt_core_get_ui_ops(void) -{ - return &core_ops; -} - static gboolean start_with_debugwin(gpointer null) { @@ -106,7 +71,6 @@ finch_plugins_init(void) { static int init_libpurple(int argc, char **argv) { - PurpleUiInfo *ui_info = NULL; gboolean opt_nologin = FALSE; gboolean opt_version = FALSE; gboolean opt_debug = FALSE; @@ -196,14 +160,9 @@ init_libpurple(int argc, char **argv) g_timeout_add(0, start_with_debugwin, NULL); } - purple_core_set_ui_ops(gnt_core_get_ui_ops()); purple_idle_set_ui(finch_idle_new()); - ui_info = purple_ui_info_new("finch3", _("Finch"), VERSION, - "https://pidgin.im", - "https://developer.pidgin.im", "console"); - - if (!purple_core_init(ui_info)) + if (!purple_core_init(finch_ui_new())) { fprintf(stderr, "Initialization of the Purple core failed. Dumping core.\n" diff --git a/finch/meson.build b/finch/meson.build index e6b7bcca12..56d5af6ab6 100644 --- a/finch/meson.build +++ b/finch/meson.build @@ -79,6 +79,7 @@ enable_consoleui = true libfinch_SOURCES = [ 'finchnotifications.c', + 'finchui.c', 'gntaccount.c', 'gntblist.c', 'gntconn.c', @@ -93,7 +94,6 @@ libfinch_SOURCES = [ 'gntrequest.c', 'gntroomlist.c', 'gntstatus.c', - 'gntui.c', 'gntxfer.c', package_revision, 'libfinch.c' @@ -101,6 +101,7 @@ libfinch_SOURCES = [ libfinch_headers = [ 'finchnotifications.h', + 'finchui.h', 'gntaccount.h', 'gntblist.h', 'gntconn.h', @@ -115,7 +116,6 @@ libfinch_headers = [ 'gntrequest.h', 'gntroomlist.h', 'gntstatus.h', - 'gntui.h', 'gntxfer.h', 'libfinch.h' ] |