Move default window tracking to the application

Fri, 22 Nov 2024 00:58:21 -0600

author
Elliott Sales de Andrade <quantum.analyst@gmail.com>
date
Fri, 22 Nov 2024 00:58:21 -0600
changeset 43079
82415d67612f
parent 43078
d6d76c53fc95
child 43080
dd2d26e6c6f9

Move default window tracking to the application

Testing Done:
Started program which opened the main window; closed main window, which properly exited the program.
Opened a conversation with Echo, and closed it to confirm that the conversation tracking worked.

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

pidgin/pidginapplication.c file | annotate | diff | comparison | revisions
pidgin/pidgindisplaywindow.c file | annotate | diff | comparison | revisions
pidgin/pidgindisplaywindow.h file | annotate | diff | comparison | revisions
--- a/pidgin/pidginapplication.c	Fri Nov 22 00:49:59 2024 -0600
+++ b/pidgin/pidginapplication.c	Fri Nov 22 00:58:21 2024 -0600
@@ -852,10 +852,16 @@
 
 static void
 pidgin_application_activate(G_GNUC_UNUSED GApplication *application) {
-	GtkWidget *convwin = pidgin_display_window_get_default();
+	static GtkWidget *default_window = NULL;
 
-	if(GTK_IS_WINDOW(convwin)) {
-		gtk_window_present(GTK_WINDOW(convwin));
+	if(!GTK_IS_WIDGET(default_window)) {
+		default_window = pidgin_display_window_new();
+		g_object_add_weak_pointer(G_OBJECT(default_window),
+		                          (gpointer)&default_window);
+	}
+
+	if(GTK_IS_WINDOW(default_window)) {
+		gtk_window_present(GTK_WINDOW(default_window));
 	}
 }
 
--- a/pidgin/pidgindisplaywindow.c	Fri Nov 22 00:49:59 2024 -0600
+++ b/pidgin/pidgindisplaywindow.c	Fri Nov 22 00:58:21 2024 -0600
@@ -58,8 +58,6 @@
 G_DEFINE_FINAL_TYPE(PidginDisplayWindow, pidgin_display_window,
                     GTK_TYPE_APPLICATION_WINDOW)
 
-static GtkWidget *default_window = NULL;
-
 /******************************************************************************
  * Helpers
  *****************************************************************************/
@@ -356,6 +354,7 @@
 	GtkTreeListModel *tree_model = NULL;
 	GSimpleActionGroup *conversation_actions = NULL;
 	GPluginManager *plugin_manager = NULL;
+	PurpleConversationManager *conversation_manager = NULL;
 	gpointer settings_backend = NULL;
 
 	gtk_widget_init_template(GTK_WIDGET(window));
@@ -406,6 +405,14 @@
 	settings_backend = purple_core_get_settings_backend();
 	gplugin_gtk_view_set_settings_backend(GPLUGIN_GTK_VIEW(window->plugin_list),
 	                                      settings_backend);
+
+	conversation_manager = purple_conversation_manager_get_default();
+	g_signal_connect_object(conversation_manager, "added",
+	                        G_CALLBACK(pidgin_display_window_conversation_added_cb),
+	                        window, 0);
+	g_signal_connect_object(conversation_manager, "removed",
+	                        G_CALLBACK(pidgin_display_window_conversation_removed_cb),
+	                        window, 0);
 }
 
 static void
@@ -471,27 +478,6 @@
  * API
  *****************************************************************************/
 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, "added",
-		                        G_CALLBACK(pidgin_display_window_conversation_added_cb),
-		                        default_window, 0);
-		g_signal_connect_object(manager, "removed",
-		                        G_CALLBACK(pidgin_display_window_conversation_removed_cb),
-		                        default_window, 0);
-	}
-
-	return default_window;
-}
-
-GtkWidget *
 pidgin_display_window_new(void) {
 	return g_object_new(
 		PIDGIN_TYPE_DISPLAY_WINDOW,
--- a/pidgin/pidgindisplaywindow.h	Fri Nov 22 00:49:59 2024 -0600
+++ b/pidgin/pidgindisplaywindow.h	Fri Nov 22 00:58:21 2024 -0600
@@ -64,18 +64,6 @@
 GtkWidget *pidgin_display_window_new(void);
 
 /**
- * pidgin_display_window_get_default:
- *
- * Gets or creates the default conversation window.
- *
- * Returns: (transfer none): The default #PidginDisplayWindow.
- *
- * Since: 3.0
- */
-PIDGIN_AVAILABLE_IN_3_0
-GtkWidget *pidgin_display_window_get_default(void);
-
-/**
  * pidgin_display_window_add:
  * @window: The #PidginDisplayWindow instance.
  * @conversation: The #PurpleConversation to add to @window.

mercurial