summaryrefslogtreecommitdiff
path: root/finch
diff options
context:
space:
mode:
authorGary Kramlich <grim@reaperworld.com>2022-10-31 04:02:09 -0500
committerGary Kramlich <grim@reaperworld.com>2022-10-31 04:02:09 -0500
commit901f4ebdfe8b3a3740a0757c169cef54551dc381 (patch)
tree21ce0f8042a22a90bd05fbf9efe2033fb862548d /finch
parentdf3f2aad7a4089fe49014c33f079cbda4cc9fce5 (diff)
downloadpidgin-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.c45
-rw-r--r--finch/meson.build4
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'
]