Fix opening of conversations

Sun, 31 Dec 2023 22:01:13 -0600

author
Gary Kramlich <grim@reaperworld.com>
date
Sun, 31 Dec 2023 22:01:13 -0600
changeset 42559
7bde7363e0f3
parent 42558
05f7fd3db190
child 42560
dcdf8a9a686b

Fix opening of conversations

This was broken when gtkconv.[ch] was removed and the create_conversation uiop
implementation with it.

Testing Done:
Opened an IM and a Channel and sent messages.

Reviewed at https://reviews.imfreedom.org/r/2903/

pidgin/pidgindisplaywindow.c file | annotate | diff | comparison | revisions
--- a/pidgin/pidgindisplaywindow.c	Sun Dec 31 21:59:37 2023 -0600
+++ b/pidgin/pidgindisplaywindow.c	Sun Dec 31 22:01:13 2023 -0600
@@ -290,6 +290,26 @@
 	}
 }
 
+static void
+pidgin_display_window_conversation_registered_cb(G_GNUC_UNUSED PurpleConversationManager *manager,
+                                                 PurpleConversation *conversation,
+                                                 gpointer data)
+{
+	PidginDisplayWindow *window = data;
+
+	pidgin_display_window_add(window, conversation);
+}
+
+static void
+pidgin_display_window_conversation_unregistered_cb(G_GNUC_UNUSED PurpleConversationManager *manager,
+                                                   PurpleConversation *conversation,
+                                                   gpointer data)
+{
+	PidginDisplayWindow *window = data;
+
+	pidgin_display_window_remove(window, conversation);
+}
+
 /******************************************************************************
  * GObject Implementation
  *****************************************************************************/
@@ -397,9 +417,19 @@
 GtkWidget *
 pidgin_display_window_get_default(void) {
 	if(!GTK_IS_WIDGET(default_window)) {
+		PurpleConversationManager *manager = NULL;
+
 		default_window = pidgin_display_window_new();
 		g_object_add_weak_pointer(G_OBJECT(default_window),
 		                          (gpointer)&default_window);
+
+		manager = purple_conversation_manager_get_default();
+		g_signal_connect_object(manager, "registered",
+		                        G_CALLBACK(pidgin_display_window_conversation_registered_cb),
+		                        default_window, 0);
+		g_signal_connect_object(manager, "unregistered",
+		                        G_CALLBACK(pidgin_display_window_conversation_unregistered_cb),
+		                        default_window, 0);
 	}
 
 	return default_window;

mercurial