pidgin/plugins/unity/unity.c

changeset 42452
8b5a5b21d6da
parent 42342
7498c6982122
child 42453
1c13bc243b7d
--- a/pidgin/plugins/unity/unity.c	Mon Oct 30 21:55:21 2023 -0500
+++ b/pidgin/plugins/unity/unity.c	Mon Oct 30 23:11:23 2023 -0500
@@ -27,6 +27,7 @@
 #include <messaging-menu.h>
 
 #define UNITY_PLUGIN_ID "gtk-unity-integration"
+#define SETTINGS_SCHEMA_ID "im.pidgin.Pidgin.plugin.Unity"
 
 static MessagingMenuApp *mmapp = NULL;
 static UnityLauncherEntry *launcher = NULL;
@@ -417,38 +418,24 @@
 }
 
 static void
-alert_config_cb(GtkWidget *widget, G_GNUC_UNUSED gpointer data)
-{
-	gboolean on = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(widget));
-	purple_prefs_set_bool("/plugins/gtk/unity/alert_chat_nick", on);
-	alert_chat_nick = on;
-}
-
-static void
-launcher_config_cb(GtkWidget *widget, gpointer data)
+settings_change_cb(GSettings *settings, char *key, G_GNUC_UNUSED gpointer data)
 {
-	gint option = GPOINTER_TO_INT(data);
-	if (!gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(widget)))
-		return;
-
-	purple_prefs_set_int("/plugins/gtk/unity/launcher_count", option);
-	launcher_count = option;
-	if (option == LAUNCHER_COUNT_DISABLE)
-		unity_launcher_entry_set_count_visible(launcher, FALSE);
-	else
-		update_launcher();
-}
-
-static void
-messaging_menu_config_cb(GtkWidget *widget, gpointer data)
-{
-	gint option = GPOINTER_TO_INT(data);
-	if (!gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(widget)))
-		return;
-
-	purple_prefs_set_int("/plugins/gtk/unity/messaging_menu_text", option);
-	messaging_menu_text = option;
-	refill_messaging_menu();
+	if(purple_strequal(key, "alert-chat-nick")) {
+		alert_chat_nick = g_settings_get_boolean(settings, key);
+	} else if(purple_strequal(key, "launcher-count")) {
+		launcher_count = g_settings_get_enum(settings, key);
+		if(launcher_count == LAUNCHER_COUNT_DISABLE) {
+			unity_launcher_entry_set_count_visible(launcher, FALSE);
+		} else {
+			update_launcher();
+		}
+	} else if(purple_strequal(key, "messaging-menu-text")) {
+		messaging_menu_text = g_settings_get_enum(settings, key);
+		refill_messaging_menu();
+	} else {
+		g_warning("Got unity-integration settings change for unknown key: %s",
+		          key);
+	}
 }
 
 static int
@@ -491,89 +478,6 @@
 			GINT_TO_POINTER(0));
 }
 
-static GtkWidget *
-get_config_frame(G_GNUC_UNUSED PurplePlugin *plugin)
-{
-	GtkWidget *ret = NULL, *frame = NULL;
-	GtkWidget *vbox = NULL, *toggle = NULL, *group = NULL;
-
-	ret = gtk_box_new(GTK_ORIENTATION_VERTICAL, 18);
-
-	/* Alerts */
-
-	frame = pidgin_make_frame(ret, _("Chatroom alerts"));
-	vbox = gtk_box_new(GTK_ORIENTATION_VERTICAL, 5);
-	gtk_box_append(GTK_BOX(frame), vbox);
-
-	toggle = gtk_check_button_new_with_mnemonic(_("Chatroom message alerts _only where someone says your username"));
-	gtk_box_append(GTK_BOX(vbox), toggle);
-	gtk_check_button_set_active(GTK_CHECK_BUTTON(toggle),
-			purple_prefs_get_bool("/plugins/gtk/unity/alert_chat_nick"));
-	g_signal_connect(G_OBJECT(toggle), "toggled",
-			G_CALLBACK(alert_config_cb), NULL);
-
-	/* Launcher integration */
-
-	frame = pidgin_make_frame(ret, _("Launcher Icon"));
-	vbox = gtk_box_new(GTK_ORIENTATION_VERTICAL, 5);
-	gtk_box_append(GTK_BOX(frame), vbox);
-
-	toggle = gtk_check_button_new_with_mnemonic(_("_Disable launcher integration"));
-	group = toggle;
-	gtk_box_append(GTK_BOX(vbox), toggle);
-	gtk_check_button_set_active(GTK_CHECK_BUTTON(toggle),
-		purple_prefs_get_int("/plugins/gtk/unity/launcher_count") == LAUNCHER_COUNT_DISABLE);
-	g_signal_connect(G_OBJECT(toggle), "toggled",
-			G_CALLBACK(launcher_config_cb), GUINT_TO_POINTER(LAUNCHER_COUNT_DISABLE));
-
-	toggle = gtk_check_button_new_with_mnemonic(
-			_("Show number of unread _messages on launcher icon"));
-	gtk_check_button_set_group(GTK_CHECK_BUTTON(toggle),
-	                           GTK_CHECK_BUTTON(group));
-	gtk_box_append(GTK_BOX(vbox), toggle);
-	gtk_check_button_set_active(GTK_CHECK_BUTTON(toggle),
-		purple_prefs_get_int("/plugins/gtk/unity/launcher_count") == LAUNCHER_COUNT_MESSAGES);
-	g_signal_connect(G_OBJECT(toggle), "toggled",
-			G_CALLBACK(launcher_config_cb), GUINT_TO_POINTER(LAUNCHER_COUNT_MESSAGES));
-
-	toggle = gtk_check_button_new_with_mnemonic(
-			_("Show number of unread co_nversations on launcher icon"));
-	gtk_check_button_set_group(GTK_CHECK_BUTTON(toggle),
-	                           GTK_CHECK_BUTTON(group));
-	gtk_box_append(GTK_BOX(vbox), toggle);
-	gtk_check_button_set_active(GTK_CHECK_BUTTON(toggle),
-		purple_prefs_get_int("/plugins/gtk/unity/launcher_count") == LAUNCHER_COUNT_SOURCES);
-	g_signal_connect(G_OBJECT(toggle), "toggled",
-			G_CALLBACK(launcher_config_cb), GUINT_TO_POINTER(LAUNCHER_COUNT_SOURCES));
-
-	/* Messaging menu integration */
-
-	frame = pidgin_make_frame(ret, _("Messaging Menu"));
-	vbox = gtk_box_new(GTK_ORIENTATION_VERTICAL, 5);
-	gtk_box_append(GTK_BOX(frame), vbox);
-
-	toggle = gtk_check_button_new_with_mnemonic(
-			_("Show number of _unread messages for conversations in messaging menu"));
-	group = toggle;
-	gtk_box_append(GTK_BOX(vbox), toggle);
-	gtk_check_button_set_active(GTK_CHECK_BUTTON(toggle),
-		purple_prefs_get_int("/plugins/gtk/unity/messaging_menu_text") == MESSAGING_MENU_COUNT);
-	g_signal_connect(G_OBJECT(toggle), "toggled",
-			G_CALLBACK(messaging_menu_config_cb), GUINT_TO_POINTER(MESSAGING_MENU_COUNT));
-
-	toggle = gtk_check_button_new_with_mnemonic(
-			_("Show _elapsed time for unread conversations in messaging menu"));
-	gtk_check_button_set_group(GTK_CHECK_BUTTON(toggle),
-	                           GTK_CHECK_BUTTON(group));
-	gtk_box_append(GTK_BOX(vbox), toggle);
-	gtk_check_button_set_active(GTK_CHECK_BUTTON(toggle),
-		purple_prefs_get_int("/plugins/gtk/unity/messaging_menu_text") == MESSAGING_MENU_TIME);
-	g_signal_connect(G_OBJECT(toggle), "toggled",
-			G_CALLBACK(messaging_menu_config_cb), GUINT_TO_POINTER(MESSAGING_MENU_TIME));
-
-	return ret;
-}
-
 static GPluginPluginInfo *
 unity_query(G_GNUC_UNUSED GError **error)
 {
@@ -593,13 +497,14 @@
 		"authors",              authors,
 		"website",              PURPLE_WEBSITE,
 		"abi-version",          PURPLE_ABI_VERSION,
-		"gtk-config-frame-cb",  get_config_frame,
+		"settings-schema",      SETTINGS_SCHEMA_ID,
 		NULL
 	);
 }
 
 static gboolean
 unity_load(GPluginPlugin *plugin, G_GNUC_UNUSED GError **error) {
+	GSettings *settings = NULL;
 	GList *convs = NULL;
 	PurpleConversationManager *manager = NULL;
 	PurpleSavedStatus *saved_status;
@@ -607,18 +512,17 @@
 	void *gtk_conv_handle = pidgin_conversations_get_handle();
 	void *savedstat_handle = purple_savedstatuses_get_handle();
 
-	purple_prefs_add_none("/plugins/gtk");
-	purple_prefs_add_none("/plugins/gtk/unity");
-	purple_prefs_add_int("/plugins/gtk/unity/launcher_count", LAUNCHER_COUNT_SOURCES);
-	purple_prefs_add_int("/plugins/gtk/unity/messaging_menu_text", MESSAGING_MENU_COUNT);
-	purple_prefs_add_bool("/plugins/gtk/unity/alert_chat_nick", TRUE);
+	settings = g_settings_new_with_backend(SETTINGS_SCHEMA_ID,
+	                                       purple_core_get_settings_backend());
+	g_signal_connect(settings, "changed",
+	                 G_CALLBACK(settings_change_cb), NULL);
 
-	alert_chat_nick = purple_prefs_get_bool("/plugins/gtk/unity/alert_chat_nick");
+	alert_chat_nick = g_settings_get_boolean(settings, "alert-chat-nick");
 
 	mmapp = messaging_menu_app_new("pidgin.desktop");
 	g_object_ref(mmapp);
 	messaging_menu_app_register(mmapp);
-	messaging_menu_text = purple_prefs_get_int("/plugins/gtk/unity/messaging_menu_text");
+	messaging_menu_text = g_settings_get_enum(settings, "messaging-menu-text");
 
 	g_signal_connect(mmapp, "activate-source",
 			G_CALLBACK(message_source_activated), NULL);
@@ -633,7 +537,7 @@
 
 	launcher = unity_launcher_entry_get_for_desktop_id("pidgin.desktop");
 	g_object_ref(launcher);
-	launcher_count = purple_prefs_get_int("/plugins/gtk/unity/launcher_count");
+	launcher_count = g_settings_get_enum(settings, "launcher-count");
 
 	purple_signal_connect(gtk_conv_handle, "displayed-im-msg", plugin,
 			G_CALLBACK(message_displayed_cb), NULL);
@@ -656,6 +560,8 @@
 		convs = g_list_delete_link(convs, convs);
 	}
 
+	g_object_unref(settings);
+
 	return TRUE;
 }
 

mercurial