pidgin/pidgin

98c20aec9aba
Parents b405b4eb38fa
Children aa1b5a73d32a
Make PurpleUi.start return a gboolean and GError

This allows the user interface to handle initialization errors in one place as
purple_core_init calls purple_ui_start.

Testing Done:
Compiled and ran pidgin3

Reviewed at https://reviews.imfreedom.org/r/2008/
--- a/finch/finchui.c Tue Nov 01 00:03:51 2022 -0500
+++ b/finch/finchui.c Tue Nov 01 00:27:44 2022 -0500
@@ -92,10 +92,8 @@
finch_prefs_init();
}
-static void
-finch_ui_start(G_GNUC_UNUSED PurpleUi *ui) {
- GError *error = NULL;
-
+static gboolean
+finch_ui_start(G_GNUC_UNUSED PurpleUi *ui, GError **error) {
finch_debug_init();
#ifdef STANDALONE
@@ -106,10 +104,16 @@
gnt_init();
#endif /* STANDALONE */
- if(!finch_history_init(&error)) {
- g_critical("failed to initialize the history api: %s",
- error != NULL ? error->message : "unknown");
- g_clear_error(&error);
+ if(!finch_history_init(error)) {
+ const char *error_message = "unknown";
+
+ if(error != NULL && *error != NULL) {
+ error_message = (*error)->message;
+ }
+
+ g_critical("failed to initialize the history api: %s", error_message);
+
+ return FALSE;
}
purple_prefs_add_none("/purple/gnt");
@@ -158,6 +162,8 @@
gnt_register_action(_("Preferences"), finch_prefs_show_all);
gnt_register_action(_("Statuses"), finch_savedstatus_show_all);
+ return TRUE;
+
#ifdef STANDALONE
}
--- a/libpurple/core.c Tue Nov 01 00:03:51 2022 -0500
+++ b/libpurple/core.c Tue Nov 01 00:27:44 2022 -0500
@@ -207,7 +207,9 @@
return FALSE;
}
- purple_ui_start(core->ui);
+ if(!purple_ui_start(core->ui, error)) {
+ return FALSE;
+ }
/* Load the buddy list after UI init */
purple_blist_boot();
--- a/libpurple/purpleui.c Tue Nov 01 00:03:51 2022 -0500
+++ b/libpurple/purpleui.c Tue Nov 01 00:27:44 2022 -0500
@@ -386,16 +386,18 @@
}
}
-void
-purple_ui_start(PurpleUi *ui) {
+gboolean
+purple_ui_start(PurpleUi *ui, GError **error) {
PurpleUiClass *klass = NULL;
- g_return_if_fail(PURPLE_IS_UI(ui));
+ g_return_val_if_fail(PURPLE_IS_UI(ui), FALSE);
klass = PURPLE_UI_GET_CLASS(ui);
if(klass != NULL && klass->start != NULL) {
- klass->start(ui);
+ return klass->start(ui, error);
}
+
+ return FALSE;
}
void
--- a/libpurple/purpleui.h Tue Nov 01 00:03:51 2022 -0500
+++ b/libpurple/purpleui.h Tue Nov 01 00:27:44 2022 -0500
@@ -63,7 +63,7 @@
/*< public >*/
void (*prefs_init)(PurpleUi *ui);
- void (*start)(PurpleUi *ui);
+ gboolean (*start)(PurpleUi *ui, GError **error);
void (*stop)(PurpleUi *ui);
gpointer (*get_settings_backend)(PurpleUi *ui);
@@ -159,15 +159,21 @@
/**
* purple_ui_start:
* @ui: The instance.
+ * @error: (optional) (nullable): A return address for a [type@GLib.GError].
*
* Tells @ui that libpurple is done initializing and that @ui should continue
* its initialization.
*
+ * The user interface can return errors here which will be propagated by
+ * [func@Purple.core_init] which calls this function.
+ *
* Note: This should only be called by libpurple.
*
+ * Returns: %TRUE if successful, otherwise %FALSE with @error optionally set.
+ *
* Since: 3.0.0
*/
-void purple_ui_start(PurpleUi *ui);
+gboolean purple_ui_start(PurpleUi *ui, GError **error);
/**
* purple_ui_stop:
--- a/libpurple/tests/test_ui.c Tue Nov 01 00:03:51 2022 -0500
+++ b/libpurple/tests/test_ui.c Tue Nov 01 00:27:44 2022 -0500
@@ -70,9 +70,11 @@
G_DEFINE_TYPE(TestPurpleUi, test_purple_ui, PURPLE_TYPE_UI)
-static void
-test_purple_ui_start(G_GNUC_UNUSED PurpleUi *ui) {
+static gboolean
+test_purple_ui_start(G_GNUC_UNUSED PurpleUi *ui, G_GNUC_UNUSED GError **error) {
purple_conversations_set_ui_ops(&test_conv_uiops);
+
+ return TRUE;
}
static gpointer
--- a/pidgin/pidginui.c Tue Nov 01 00:03:51 2022 -0500
+++ b/pidgin/pidginui.c Tue Nov 01 00:27:44 2022 -0500
@@ -138,12 +138,11 @@
pidgin_prefs_init();
}
-static void
-pidgin_ui_start(G_GNUC_UNUSED PurpleUi *ui) {
+static gboolean
+pidgin_ui_start(G_GNUC_UNUSED PurpleUi *ui, GError **error) {
PurpleProtocolManager *protocol_manager = NULL;
GdkDisplay *display = NULL;
GtkIconTheme *theme = NULL;
- GError *error = NULL;
gchar *path;
pidgin_debug_init();
@@ -168,10 +167,16 @@
purple_protocol_manager_foreach(protocol_manager,
pidgin_ui_protocol_foreach_theme_cb, NULL);
- if(!pidgin_history_init(&error)) {
- g_critical("failed to initialize the history api: %s",
- error != NULL ? error->message : "unknown");
- g_clear_error(&error);
+ if(!pidgin_history_init(error)) {
+ const char *error_message = "unknown";
+
+ if(error != NULL && *error != NULL) {
+ error_message = (*error)->message;
+ }
+
+ g_critical("failed to initialize the history api: %s", error_message);
+
+ return FALSE;
}
/* Set the UI operation structures. */
@@ -194,6 +199,8 @@
pidgin_roomlist_init();
pidgin_medias_init();
pidgin_notify_init();
+
+ return TRUE;
}
static void