Fri, 22 Nov 2024 00:58:21 -0600
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/
--- 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.