pidgin/plugins/notify/notify.c

changeset 41718
785c4056ce54
parent 41696
35f8ce475b21
child 41840
fe350460fb1c
--- a/pidgin/plugins/notify/notify.c	Tue Sep 20 02:09:28 2022 -0500
+++ b/pidgin/plugins/notify/notify.c	Tue Sep 20 02:24:00 2022 -0500
@@ -153,6 +153,7 @@
 	gint count;
 	gboolean has_focus;
 	PidginConvWindow *purplewin = NULL;
+	GSettings *settings = NULL;
 
 	if (conv == NULL || PIDGIN_CONVERSATION(conv) == NULL)
 		return 0;
@@ -162,18 +163,23 @@
 
 	purplewin = PIDGIN_CONVERSATION(conv)->win;
 
+	settings = g_settings_new_with_backend("im.pidgin.Pidgin.plugin.Notify",
+	                                       purple_core_get_settings_backend());
+
 	/* If we aren't doing notifications for this type of conversation, return */
 	if ((PURPLE_IS_IM_CONVERSATION(conv) &&
-	     !purple_prefs_get_bool("/plugins/gtk/X11/notify/type_im")) ||
+	     !g_settings_get_boolean(settings, "type-im")) ||
 	    (PURPLE_IS_CHAT_CONVERSATION(conv) &&
-	     !purple_prefs_get_bool("/plugins/gtk/X11/notify/type_chat")))
+	     !g_settings_get_boolean(settings, "type-chat")))
+	{
+		g_object_unref(settings);
 		return 0;
+	}
 
 	g_object_get(G_OBJECT(purplewin->window),
 	             "has-toplevel-focus", &has_focus, NULL);
 
-	if (purple_prefs_get_bool("/plugins/gtk/X11/notify/type_focused") ||
-	    !has_focus) {
+	if(g_settings_get_boolean(settings, "type-focused") || !has_focus) {
 		if (increment) {
 			count = GPOINTER_TO_INT(g_object_get_data(G_OBJECT(conv), "notify-message-count"));
 			count++;
@@ -183,25 +189,39 @@
 		notify_win(purplewin, conv);
 	}
 
+	g_object_unref(settings);
+
 	return 0;
 }
 
 static void
 notify_win(PidginConvWindow *purplewin, PurpleConversation *conv)
 {
+	GSettings *settings = NULL;
+
 	if (count_messages(purplewin) <= 0)
 		return;
 
-	if (purple_prefs_get_bool("/plugins/gtk/X11/notify/method_count"))
+	settings = g_settings_new_with_backend("im.pidgin.Pidgin.plugin.Notify",
+	                                       purple_core_get_settings_backend());
+
+	if(g_settings_get_boolean(settings, "method-count")) {
 		handle_count_title(purplewin);
-	if (purple_prefs_get_bool("/plugins/gtk/X11/notify/method_count_xprop"))
+	}
+	if(g_settings_get_boolean(settings, "method-count-xprop")) {
 		handle_count_xprop(purplewin);
-	if (purple_prefs_get_bool("/plugins/gtk/X11/notify/method_string"))
+	}
+	if(g_settings_get_boolean(settings, "method-string")) {
 		handle_string(purplewin);
-	if (purple_prefs_get_bool("/plugins/gtk/X11/notify/method_urgent"))
+	}
+	if(g_settings_get_boolean(settings, "method-urgent")) {
 		handle_urgent(purplewin, TRUE);
-	if (purple_prefs_get_bool("/plugins/gtk/X11/notify/method_present"))
+	}
+	if(g_settings_get_boolean(settings, "method-present")) {
 		handle_present(conv);
+	}
+
+	g_object_unref(settings);
 }
 
 static void
@@ -251,36 +271,53 @@
 message_displayed_cb(PurpleConversation *conv, PurpleMessage *msg, gpointer _unused)
 {
 	PurpleMessageFlags flags = purple_message_get_flags(msg);
+	GSettings *settings = NULL;
+
+	settings = g_settings_new_with_backend("im.pidgin.Pidgin.plugin.Notify",
+	                                       purple_core_get_settings_backend());
 
 	/* Ignore anything that's not a received message or a system message */
-	if (!(flags & (PURPLE_MESSAGE_RECV|PURPLE_MESSAGE_SYSTEM)))
+	if(!(flags & (PURPLE_MESSAGE_RECV|PURPLE_MESSAGE_SYSTEM))) {
+		g_object_unref(settings);
 		return FALSE;
+	}
 	/* Don't highlight for delayed messages */
-	if ((flags & PURPLE_MESSAGE_RECV) && (flags & PURPLE_MESSAGE_DELAYED))
+	if((flags & PURPLE_MESSAGE_RECV) && (flags & PURPLE_MESSAGE_DELAYED)) {
+		g_object_unref(settings);
 		return FALSE;
+	}
 	/* Check whether to highlight for system message for either chat or IM */
 	if (flags & PURPLE_MESSAGE_SYSTEM) {
 		if (PURPLE_IS_CHAT_CONVERSATION(conv)) {
-			if (!purple_prefs_get_bool("/plugins/gtk/X11/notify/type_chat_sys"))
+			if (!g_settings_get_boolean(settings, "type-chat-sys")) {
+				g_object_unref(settings);
 				return FALSE;
+			}
 		} else if (PURPLE_IS_IM_CONVERSATION(conv)) {
-			if (!purple_prefs_get_bool("/plugins/gtk/X11/notify/type_im_sys"))
+			if (!g_settings_get_boolean(settings, "type-im-sys")) {
+				g_object_unref(settings);
 				return FALSE;
+			}
 		} else {
 			/* System message not from chat or IM, ignore */
+			g_object_unref(settings);
 			return FALSE;
 		}
 	}
 	
 	/* If it's a chat, check if we should only highlight when nick is mentioned */
 	if ((PURPLE_IS_CHAT_CONVERSATION(conv) &&
-	     purple_prefs_get_bool("/plugins/gtk/X11/notify/type_chat_nick") &&
+	     g_settings_get_boolean(settings, "type-chat-nick") &&
 	     !(flags & PURPLE_MESSAGE_NICK)))
-	    return FALSE;
+	{
+		g_object_unref(settings);
+		return FALSE;
+	}
 
 	/* Nothing speaks against notifying, do so */
 	notify(conv, TRUE);
 
+	g_object_unref(settings);
 	return FALSE;
 }
 
@@ -288,23 +325,35 @@
 im_sent_im(PurpleAccount *account, PurpleMessage *msg, gpointer _unused)
 {
 	PurpleIMConversation *im = NULL;
+	GSettings *settings = NULL;
 
-	if (purple_prefs_get_bool("/plugins/gtk/X11/notify/notify_send")) {
+	settings = g_settings_new_with_backend("im.pidgin.Pidgin.plugin.Notify",
+	                                       purple_core_get_settings_backend());
+
+	if(g_settings_get_boolean(settings, "notify-send")) {
 		im = purple_conversations_find_im_with_account(
 			purple_message_get_recipient(msg), account);
 		unnotify(PURPLE_CONVERSATION(im), TRUE);
 	}
+
+	g_object_unref(settings);
 }
 
 static void
 chat_sent_im(PurpleAccount *account, PurpleMessage *msg, int id)
 {
 	PurpleChatConversation *chat = NULL;
+	GSettings *settings = NULL;
 
-	if (purple_prefs_get_bool("/plugins/gtk/X11/notify/notify_send")) {
+	settings = g_settings_new_with_backend("im.pidgin.Pidgin.plugin.Notify",
+	                                       purple_core_get_settings_backend());
+
+	if(g_settings_get_boolean(settings, "notify-send")) {
 		chat = purple_conversations_find_chat(purple_account_get_connection(account), id);
 		unnotify(PURPLE_CONVERSATION(chat), TRUE);
 	}
+
+	g_object_unref(settings);
 }
 
 static int
@@ -313,6 +362,7 @@
 	PidginConversation *gtkconv = NULL;
 	GSList *webview_ids = NULL, *entry_ids = NULL;
 	guint id;
+	GSettings *settings = NULL;
 
 	gtkconv = PIDGIN_CONVERSATION(conv);
 	if (!gtkconv) {
@@ -320,7 +370,10 @@
 		return 0;
 	}
 
-	if (purple_prefs_get_bool("/plugins/gtk/X11/notify/notify_focus")) {
+	settings = g_settings_new_with_backend("im.pidgin.Pidgin.plugin.Notify",
+	                                       purple_core_get_settings_backend());
+
+	if(g_settings_get_boolean(settings, "notify_focus")) {
 		/* TODO should really find a way to make this work no matter
 		 * where the focus is inside the conv window, without having
 		 * to bind to focus-in-event on the g(d|t)kwindow */
@@ -335,7 +388,7 @@
 		webview_ids = g_slist_append(webview_ids, GUINT_TO_POINTER(id));
 	}
 
-	if (purple_prefs_get_bool("/plugins/gtk/X11/notify/notify_click")) {
+	if(g_settings_get_boolean(settings, "notify-click")) {
 		/* TODO similarly should really find a way to allow for
 		 * clicking in other places of the window */
 		id = g_signal_connect(G_OBJECT(gtkconv->entry), "button-press-event",
@@ -347,7 +400,7 @@
 		webview_ids = g_slist_append(webview_ids, GUINT_TO_POINTER(id));
 	}
 
-	if (purple_prefs_get_bool("/plugins/gtk/X11/notify/notify_type")) {
+	if(g_settings_get_boolean(settings, "notify-type")) {
 		id = g_signal_connect(G_OBJECT(gtkconv->entry), "key-press-event",
 		                      G_CALLBACK(unnotify_cb), conv);
 		entry_ids = g_slist_append(entry_ids, GUINT_TO_POINTER(id));
@@ -356,6 +409,7 @@
 	g_object_set_data(G_OBJECT(conv), "notify-webview-signals", webview_ids);
 	g_object_set_data(G_OBJECT(conv), "notify-entry-signals", entry_ids);
 
+	g_object_unref(settings);
 	return 0;
 }
 
@@ -401,6 +455,7 @@
 {
 #if 0
 	PidginConvWindow *purplewin = purple_conversation_get_window(new_conv);
+	GSettings *settings = NULL;
 #endif
 
 	/*
@@ -410,16 +465,21 @@
 	notify(conv, FALSE);
 
 #if 0
+	settings = g_settings_new_with_backend("im.pidgin.Pidgin.plugin.Notify",
+	                                       purple_core_get_settings_backend());
+
 	printf("conv_switched - %p - %p\n", old_conv, new_conv);
 	printf("count - %d\n", count_messages(purplewin));
-	if (purple_prefs_get_bool("/plugins/gtk/X11/notify/notify_switch"))
+	if(g_settings_get_boolean(settings, "notify-switch")) {
 		unnotify(new_conv, FALSE);
-	else {
+	} else {
 		/* if we don't have notification on the window then we don't want to
 		 * re-notify it */
 		if (count_messages(purplewin))
 			notify_win(purplewin);
 	}
+
+	g_object_unref(settings);
 #endif
 }
 
@@ -452,17 +512,25 @@
 handle_string(PidginConvWindow *purplewin)
 {
 	GtkWindow *window = NULL;
-	gchar newtitle[256];
+	gchar *prefix = NULL;
+	gchar *newtitle = NULL;
+	GSettings *settings = NULL;
 
 	g_return_if_fail(purplewin != NULL);
 
 	window = GTK_WINDOW(purplewin->window);
 	g_return_if_fail(window != NULL);
 
-	g_snprintf(newtitle, sizeof(newtitle), "%s%s",
-	           purple_prefs_get_string("/plugins/gtk/X11/notify/title_string"),
-	           gtk_window_get_title(window));
+	settings = g_settings_new_with_backend("im.pidgin.Pidgin.plugin.Notify",
+	                                       purple_core_get_settings_backend());
+
+	prefix = g_settings_get_string("title-string");
+	newtitle = g_strconcat(prefix, gtk_window_get_title(window), NULL);
 	gtk_window_set_title(window, newtitle);
+
+	g_free(prefix);
+	g_free(newtitle);
+	g_object_unref(settings);
 }
 
 static void
@@ -847,29 +915,6 @@
 
 	my_plugin = plugin;
 
-	purple_prefs_add_none("/plugins/gtk");
-	purple_prefs_add_none("/plugins/gtk/X11");
-	purple_prefs_add_none("/plugins/gtk/X11/notify");
-
-	purple_prefs_add_bool("/plugins/gtk/X11/notify/type_im", TRUE);
-	purple_prefs_add_bool("/plugins/gtk/X11/notify/type_im_sys", FALSE);
-	purple_prefs_add_bool("/plugins/gtk/X11/notify/type_chat", FALSE);
-	purple_prefs_add_bool("/plugins/gtk/X11/notify/type_chat_nick", FALSE);
-	purple_prefs_add_bool("/plugins/gtk/X11/notify/type_chat_sys", FALSE);
-	purple_prefs_add_bool("/plugins/gtk/X11/notify/type_focused", FALSE);
-	purple_prefs_add_bool("/plugins/gtk/X11/notify/method_string", FALSE);
-	purple_prefs_add_string("/plugins/gtk/X11/notify/title_string", "(*)");
-	purple_prefs_add_bool("/plugins/gtk/X11/notify/method_urgent", FALSE);
-	purple_prefs_add_bool("/plugins/gtk/X11/notify/method_count", FALSE);
-	purple_prefs_add_bool("/plugins/gtk/X11/notify/method_count_xprop", FALSE);
-	purple_prefs_add_bool("/plugins/gtk/X11/notify/method_raise", FALSE);
-	purple_prefs_add_bool("/plugins/gtk/X11/notify/method_present", FALSE);
-	purple_prefs_add_bool("/plugins/gtk/X11/notify/notify_focus", TRUE);
-	purple_prefs_add_bool("/plugins/gtk/X11/notify/notify_click", FALSE);
-	purple_prefs_add_bool("/plugins/gtk/X11/notify/notify_type", TRUE);
-	purple_prefs_add_bool("/plugins/gtk/X11/notify/notify_send", TRUE);
-	purple_prefs_add_bool("/plugins/gtk/X11/notify/notify_switch", TRUE);
-
 	purple_signal_connect(gtk_conv_handle, "displayed-im-msg", plugin,
 	                    G_CALLBACK(message_displayed_cb), NULL);
 	purple_signal_connect(gtk_conv_handle, "displayed-chat-msg", plugin,
@@ -914,4 +959,4 @@
 	return TRUE;
 }
 
-GPLUGIN_NATIVE_PLUGIN_DECLARE(notify)
\ No newline at end of file
+GPLUGIN_NATIVE_PLUGIN_DECLARE(notify)

mercurial