Remove the old add chat dialog
This is going to happen automatically going forward and chats will be saved
via the conversation manager whether or not a user has "saved" them.
Testing Done:
Ran `ninja turtles`.
Reviewed at https://reviews.imfreedom.org/r/2850/
--- a/pidgin/gtkblist.c Mon Nov 27 21:05:35 2023 -0600
+++ b/pidgin/gtkblist.c Mon Nov 27 22:18:26 2023 -0600
@@ -33,7 +33,6 @@
#include "pidgin/pidginaccountchooser.h"
#include "pidgin/pidginaccountfilterconnected.h"
#include "pidgin/pidginaddbuddydialog.h"
-#include "pidgin/pidginaddchatdialog.h"
@@ -428,18 +427,6 @@
-pidgin_blist_request_add_chat(G_GNUC_UNUSED PurpleBuddyList *list,
- PurpleAccount *account, PurpleGroup *group,
- const char *alias, const char *name)
- GtkWidget *dialog = NULL;
- dialog = pidgin_add_chat_dialog_new(account, group, alias, name);
- gtk_widget_set_visible(dialog, TRUE);
add_group_cb(G_GNUC_UNUSED PurpleConnection *connection,
@@ -476,6 +463,5 @@
PurpleBuddyListClass *purple_blist_class = PURPLE_BUDDY_LIST_CLASS(klass);
purple_blist_class->request_add_buddy = pidgin_blist_request_add_buddy;
- purple_blist_class->request_add_chat = pidgin_blist_request_add_chat;
purple_blist_class->request_add_group = pidgin_blist_request_add_group;
--- a/pidgin/meson.build Mon Nov 27 21:05:35 2023 -0600
+++ b/pidgin/meson.build Mon Nov 27 22:18:26 2023 -0600
@@ -27,7 +27,6 @@
'pidginaccountsenabledmenu.c',
'pidginaddbuddydialog.c',
- 'pidginaddchatdialog.c',
'pidginautoadjustment.c',
@@ -94,7 +93,6 @@
'pidginaccountsenabledmenu.h',
'pidginaddbuddydialog.h',
- 'pidginaddchatdialog.h',
'pidginautoadjustment.h',
--- a/pidgin/pidginaddchatdialog.c Mon Nov 27 21:05:35 2023 -0600
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,442 +0,0 @@
- * Pidgin - Internet Messenger
- * Copyright (C) Pidgin Developers <devel@pidgin.im>
- * Pidgin is the legal property of its developers, whose names are too numerous
- * to list here. Please refer to the COPYRIGHT file distributed with this
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, see <https://www.gnu.org/licenses/>.
-#include "pidginaddchatdialog.h"
-#include "gtkroomlist.h"
-#include "pidginaccountchooser.h"
-struct _PidginAddChatDialog {
- GtkCustomFilter *filter;
- const gchar *default_name;
- GtkWidget *dynamic_group;
-G_DEFINE_TYPE(PidginAddChatDialog, pidgin_add_chat_dialog, GTK_TYPE_DIALOG)
-/* ugh, prototypes... */
-static void pidgin_add_chat_dialog_input_changed_cb(GtkEditable *editable, gpointer data);
-/******************************************************************************
- *****************************************************************************/
-pidgin_add_chat_dialog_validate_input(gpointer data, gpointer user_data) {
- gboolean *valid = user_data;
- gboolean required = FALSE;
- required = GPOINTER_TO_INT(g_object_get_data(data, "required"));
- const gchar *value = gtk_editable_get_text(GTK_EDITABLE(data));
- if(value == NULL || *value == '\0') {
- } else if(g_object_get_data(data, "integer")) {
- gint int_value = atoi(value);
- char *str_value = g_strdup_printf("%d", int_value);
- if(!purple_strequal(value, str_value)) {
-pidgin_add_chat_dialog_validate(PidginAddChatDialog *dialog) {
- /* The callback should only set valid to FALSE if a field is invalid and
- * not set valid if the field is valid.
- g_list_foreach(dialog->rows,
- pidgin_add_chat_dialog_validate_input,
- gtk_dialog_set_response_sensitive(GTK_DIALOG(dialog), GTK_RESPONSE_OK,
-pidgin_add_chat_dialog_update_components(PidginAddChatDialog *dialog) {
- PurpleAccount *account = NULL;
- PurpleConnection *connection = NULL;
- PurpleProtocol *protocol = NULL;
- GHashTable *defaults = NULL;
- gboolean focus_set = FALSE;
- /* Clean up the dynamic group and our list of rows. */
- while(dialog->rows != NULL) {
- adw_preferences_group_remove(ADW_PREFERENCES_GROUP(dialog->dynamic_group),
- dialog->rows = g_list_delete_link(dialog->rows, dialog->rows);
- account = pidgin_account_chooser_get_selected(PIDGIN_ACCOUNT_CHOOSER(dialog->account));
- if(!PURPLE_IS_ACCOUNT(account)) {
- connection = purple_account_get_connection(account);
- protocol = purple_account_get_protocol(account);
- info = purple_protocol_chat_info(PURPLE_PROTOCOL_CHAT(protocol),
- defaults = purple_protocol_chat_info_defaults(PURPLE_PROTOCOL_CHAT(protocol),
- PurpleProtocolChatEntry *pce = info->data;
- row = adw_entry_row_new();
- adw_entry_row_set_input_purpose(ADW_ENTRY_ROW(row),
- GTK_INPUT_PURPOSE_NUMBER);
- } else if(pce->secret) {
- row = adw_password_entry_row_new();
- row = adw_entry_row_new();
- value = g_hash_table_lookup(defaults, pce->identifier);
- gtk_editable_set_text(GTK_EDITABLE(row), value);
- g_signal_connect(row, "changed",
- G_CALLBACK(pidgin_add_chat_dialog_input_changed_cb),
- adw_preferences_row_set_title(ADW_PREFERENCES_ROW(row), pce->label);
- adw_preferences_row_set_use_underline(ADW_PREFERENCES_ROW(row), TRUE);
- adw_preferences_group_add(ADW_PREFERENCES_GROUP(dialog->dynamic_group),
- gtk_widget_grab_focus(row);
- g_object_set_data(G_OBJECT(row), "identifier",
- (gpointer)pce->identifier);
- g_object_set_data(G_OBJECT(row), "integer",
- GINT_TO_POINTER(pce->is_int));
- g_object_set_data(G_OBJECT(row), "required",
- GINT_TO_POINTER(pce->required));
- dialog->rows = g_list_append(dialog->rows, row);
- info = g_list_delete_link(info, info);
- g_hash_table_destroy(defaults);
- pidgin_add_chat_dialog_validate(dialog);
-pidgin_add_chat_dialog_filter_accounts(gpointer item,
- G_GNUC_UNUSED gpointer data)
- if(PURPLE_IS_ACCOUNT(item)) {
- PurpleAccount *account = PURPLE_ACCOUNT(item);
- PurpleProtocol *protocol = purple_account_get_protocol(account);
- if(PURPLE_IS_PROTOCOL(protocol)) {
- ret = PURPLE_PROTOCOL_IMPLEMENTS(protocol, CHAT, info);
-pidgin_add_chat_dialog_add_input_to_components(gpointer data,
- GHashTable *components = user_data;
- gchar *identifier = NULL;
- identifier = g_strdup(g_object_get_data(data, "identifier"));
- if(g_object_get_data(data, "integer")) {
- const char *str_value = gtk_editable_get_text(GTK_EDITABLE(data));
- gint int_value = atoi(str_value);
- value = g_strdup_printf("%d", int_value);
- const gchar *str_value = gtk_editable_get_text(GTK_EDITABLE(data));
- if(*str_value != '\0') {
- value = g_strdup(str_value);
- /* If the value was changed to an empty string, we should remove it from the
- g_hash_table_remove(components, identifier);
- g_hash_table_replace(components, identifier, value);
-/******************************************************************************
- *****************************************************************************/
-pidgin_add_chat_dialog_input_changed_cb(G_GNUC_UNUSED GtkEditable *editable,
- pidgin_add_chat_dialog_validate(data);
-pidgin_add_chat_dialog_response_cb(GtkDialog *dialog, gint response_id,
- G_GNUC_UNUSED gpointer data)
- PurpleAccount *account = NULL;
- PidginAddChatDialog *acdialog = PIDGIN_ADD_CHAT_DIALOG(dialog);
- account = pidgin_account_chooser_get_selected(PIDGIN_ACCOUNT_CHOOSER(acdialog->account));
- pidgin_roomlist_dialog_show_with_account(account);
- } else if(response_id == GTK_RESPONSE_OK) {
- PurpleChat *chat = NULL;
- GHashTable *components = NULL;
- const gchar *alias = NULL;
- components = g_hash_table_new_full(g_str_hash, g_str_equal, g_free,
- g_list_foreach(acdialog->rows,
- pidgin_add_chat_dialog_add_input_to_components,
- alias = gtk_editable_get_text(GTK_EDITABLE(acdialog->alias));
- chat = purple_chat_new(account, alias, components);
- if(PURPLE_IS_CHAT(chat)) {
- PurpleGroup *group = NULL;
- gchar *group_name = NULL;
- group_name = gtk_combo_box_text_get_active_text(GTK_COMBO_BOX_TEXT(acdialog->group));
- if(group_name != NULL && *group_name != '\0') {
- group = purple_blist_find_group(group_name);
- if(!PURPLE_IS_GROUP(group)) {
- group = purple_group_new(group_name);
- purple_blist_add_group(group, NULL);
- purple_blist_add_chat(chat, group, NULL);
- if(gtk_switch_get_active(GTK_SWITCH(acdialog->autojoin))) {
- purple_blist_node_set_bool(PURPLE_BLIST_NODE(chat),
- if(gtk_switch_get_active(GTK_SWITCH(acdialog->persistent))) {
- purple_blist_node_set_bool(PURPLE_BLIST_NODE(chat),
- "gtk-persistent", TRUE);
- g_warning("failed to create chat");
- gtk_window_destroy(GTK_WINDOW(dialog));
-pidgin_add_chat_dialog_account_changed_cb(GObject *obj,
- G_GNUC_UNUSED GParamSpec *pspec,
- PidginAddChatDialog *dialog = data;
- PurpleAccount *account = NULL;
- account = pidgin_account_chooser_get_selected(PIDGIN_ACCOUNT_CHOOSER(obj));
- if(PURPLE_IS_ACCOUNT(account)) {
- PurpleProtocol *protocol = purple_account_get_protocol(account);
- if(PURPLE_IS_PROTOCOL(protocol)) {
- gboolean roomlist = FALSE;
- roomlist = PURPLE_PROTOCOL_IMPLEMENTS(protocol, ROOMLIST, get_list);
- gtk_dialog_set_response_sensitive(GTK_DIALOG(dialog), 1, roomlist);
- pidgin_add_chat_dialog_update_components(dialog);
- pidgin_add_chat_dialog_validate(dialog);
-pidgin_add_chat_dialog_username_changed_cb(G_GNUC_UNUSED GtkEditable *editable,
- pidgin_add_chat_dialog_validate(data);
-pidgin_add_chat_dialog_group_cb(PurpleBlistNode *node, gpointer data) {
- PidginAddChatDialog *dialog = data;
- PurpleGroup *group = PURPLE_GROUP(node);
- gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(dialog->group),
- purple_group_get_name(group));
-/******************************************************************************
- * GObject Implementation
- *****************************************************************************/
-pidgin_add_chat_dialog_finalize(GObject *obj) {
- PidginAddChatDialog *dialog = PIDGIN_ADD_CHAT_DIALOG(obj);
- g_list_free(dialog->rows);
- G_OBJECT_CLASS(pidgin_add_chat_dialog_parent_class)->finalize(obj);
-pidgin_add_chat_dialog_init(PidginAddChatDialog *dialog) {
- gtk_widget_init_template(GTK_WIDGET(dialog));
- gtk_dialog_set_default_response(GTK_DIALOG(dialog), GTK_RESPONSE_OK);
- gtk_custom_filter_set_filter_func(dialog->filter,
- pidgin_add_chat_dialog_filter_accounts,
- purple_blist_walk(pidgin_add_chat_dialog_group_cb, NULL, NULL, NULL,
-pidgin_add_chat_dialog_class_init(PidginAddChatDialogClass *klass) {
- GObjectClass *obj_class = G_OBJECT_CLASS(klass);
- GtkWidgetClass *widget_class = GTK_WIDGET_CLASS(klass);
- obj_class->finalize = pidgin_add_chat_dialog_finalize;
- gtk_widget_class_set_template_from_resource(
- "/im/pidgin/Pidgin3/Dialogs/addchat.ui"
- gtk_widget_class_bind_template_child(widget_class, PidginAddChatDialog,
- gtk_widget_class_bind_template_child(widget_class, PidginAddChatDialog,
- gtk_widget_class_bind_template_child(widget_class, PidginAddChatDialog,
- gtk_widget_class_bind_template_child(widget_class, PidginAddChatDialog,
- gtk_widget_class_bind_template_child(widget_class, PidginAddChatDialog,
- gtk_widget_class_bind_template_child(widget_class, PidginAddChatDialog,
- gtk_widget_class_bind_template_child(widget_class, PidginAddChatDialog,
- gtk_widget_class_bind_template_callback(widget_class,
- pidgin_add_chat_dialog_response_cb);
- gtk_widget_class_bind_template_callback(widget_class,
- pidgin_add_chat_dialog_account_changed_cb);
- gtk_widget_class_bind_template_callback(widget_class,
- pidgin_add_chat_dialog_username_changed_cb);
-/******************************************************************************
- *****************************************************************************/
-pidgin_add_chat_dialog_new(PurpleAccount *account, PurpleGroup *group,
- const gchar *alias, const gchar *name)
- GtkWidget *dialog = g_object_new(PIDGIN_TYPE_ADD_CHAT_DIALOG, NULL);
- PidginAddChatDialog *acdialog = PIDGIN_ADD_CHAT_DIALOG(dialog);
- if(PURPLE_IS_ACCOUNT(account)) {
- pidgin_account_chooser_set_selected(PIDGIN_ACCOUNT_CHOOSER(acdialog->account),
- gtk_editable_set_text(GTK_EDITABLE(acdialog->alias), alias);
- if(PURPLE_IS_GROUP(group)) {
- GtkWidget *entry = NULL;
- entry = gtk_combo_box_get_child(GTK_COMBO_BOX(acdialog->group));
- gtk_editable_set_text(GTK_EDITABLE(entry),
- purple_group_get_name(group));
- acdialog->default_name = name;
- pidgin_add_chat_dialog_update_components(acdialog);
--- a/pidgin/pidginaddchatdialog.h Mon Nov 27 21:05:35 2023 -0600
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,70 +0,0 @@
- * Pidgin - Internet Messenger
- * Copyright (C) Pidgin Developers <devel@pidgin.im>
- * Pidgin is the legal property of its developers, whose names are too numerous
- * to list here. Please refer to the COPYRIGHT file distributed with this
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, see <https://www.gnu.org/licenses/>.
-#if !defined(PIDGIN_GLOBAL_HEADER_INSIDE) && !defined(PIDGIN_COMPILATION)
-# error "only <pidgin.h> may be included directly"
-#ifndef PIDGIN_ADD_CHAT_DIALOG_H
-#define PIDGIN_ADD_CHAT_DIALOG_H
-#include "pidginversion.h"
- * A dialog for adding chats to your contact list.
-#define PIDGIN_TYPE_ADD_CHAT_DIALOG (pidgin_add_chat_dialog_get_type())
-G_DECLARE_FINAL_TYPE(PidginAddChatDialog, pidgin_add_chat_dialog, PIDGIN,
- ADD_CHAT_DIALOG, GtkDialog)
- * pidgin_add_chat_dialog_new:
- * @account: (nullable): The [class@Purple.Account] to pre-select.
- * @group: (nullable): The [class@Purple.Group] to pre-fill.
- * @alias: (nullable): The alias to pre-fill.
- * @name: (nullable): The name of the chat to pre-fill.
- * Creates an add chat dialog with the pre-filled optional values.
- * Returns: (transfer full): The widget.
-GtkWidget *pidgin_add_chat_dialog_new(PurpleAccount *account, PurpleGroup *group, const gchar *alias, const gchar *name);
-#endif /* PIDGIN_ADD_CHAT_DIALOG_H */
--- a/pidgin/resources/Dialogs/addchat.ui Mon Nov 27 21:05:35 2023 -0600
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,167 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- Generated with glade 3.38.2
-Pidgin - Internet Messenger
-Copyright (C) Pidgin Developers <devel@pidgin.im>
-This program is free software; you can redistribute it and/or
-modify it under the terms of the GNU General Public License
-as published by the Free Software Foundation; either version 2
-of the License, or (at your option) any later version.
-This program is distributed in the hope that it will be useful,
-but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-GNU General Public License for more details.
-You should have received a copy of the GNU General Public License
-along with this program; if not, see <https://www.gnu.org/licenses/>.
--->
- <requires lib="gtk" version="4.0"/>
- <requires lib="pidgin" version="3.0"/>
- <!-- interface-license-type gplv2 -->
- <!-- interface-name Pidgin -->
- <!-- interface-description Internet Messenger -->
- <!-- interface-copyright Pidgin Developers <devel@pidgin.im> -->
- <template class="PidginAddChatDialog" parent="GtkDialog">
- <property name="title" translatable="1">Add Chat</property>
- <signal name="response" handler="pidgin_add_chat_dialog_response_cb" swapped="no"/>
- <child internal-child="content_area">
- <object class="GtkBox">
- <property name="margin-bottom">24</property>
- <property name="margin-end">24</property>
- <property name="margin-start">24</property>
- <property name="margin-top">24</property>
- <property name="orientation">vertical</property>
- <property name="spacing">24</property>
- <object class="GtkLabel">
- <property name="css-classes">title-1</property>
- <property name="label" translatable="1">Add a chat</property>
- <object class="GtkBox">
- <property name="spacing">5</property>
- <object class="GtkLabel" id="label1">
- <property name="label" translatable="1">A_ccount:</property>
- <property name="use-underline">1</property>
- <property name="mnemonic-widget">account</property>
- <property name="xalign">0</property>
- <object class="PidginAccountChooser" id="account">
- <property name="hexpand">1</property>
- <property name="filter">
- <object class="GtkEveryFilter">
- <object class="GtkCustomFilter" id="filter"/>
- <object class="PidginAccountFilterConnected"/>
- <signal name="notify::account" handler="pidgin_add_chat_dialog_account_changed_cb" swapped="no"/>
- <relation name="labelled-by">label1</relation>
- <object class="AdwPreferencesGroup" id="dynamic_group">
- <property name="title" translatable="1">Chat information</property>
- <property name="description" translatable="1">Please enter the appropriate information about the chat you would like to add to your buddy list.</property>
- <object class="AdwPreferencesGroup">
- <property name="title" translatable="1">Local information</property>
- <object class="AdwEntryRow" id="alias">
- <property name="title" translatable="1">A_lias</property>
- <property name="use-underline">1</property>
- <object class="AdwActionRow">
- <property name="activatable-widget">group</property>
- <property name="focusable">0</property>
- <property name="title" translatable="1">_Group</property>
- <property name="use-underline">1</property>
- <object class="GtkComboBoxText" id="group">
- <property name="hexpand">1</property>
- <property name="has-entry">1</property>
- <property name="valign">center</property>
- <object class="AdwActionRow">
- <property name="activatable-widget">autojoin</property>
- <property name="focusable">0</property>
- <property name="title" translatable="1">Automatically _join when account connects</property>
- <property name="use-underline">1</property>
- <object class="GtkSwitch" id="autojoin">
- <property name="valign">center</property>
- <object class="AdwActionRow">
- <property name="activatable-widget">persistent</property>
- <property name="focusable">0</property>
- <property name="title" translatable="1">_Remain in chat after window is closed</property>
- <property name="use-underline">1</property>
- <object class="GtkSwitch" id="persistent">
- <property name="valign">center</property>
- <object class="GtkButton" id="button3">
- <property name="label" translatable="1">Room List</property>
- <property name="focusable">1</property>
- <property name="receives-default">1</property>
- <object class="GtkButton" id="button1">
- <property name="label" translatable="1">_Cancel</property>
- <property name="focusable">1</property>
- <property name="receives-default">1</property>
- <property name="use-underline">1</property>
- <object class="GtkButton" id="button2">
- <property name="label" translatable="1">_Add</property>
- <property name="sensitive">0</property>
- <property name="focusable">1</property>
- <property name="receives-default">1</property>
- <property name="use-underline">1</property>
- <action-widget response="1">button3</action-widget>
- <action-widget response="cancel">button1</action-widget>
- <action-widget response="ok">button2</action-widget>
--- a/pidgin/resources/pidgin.gresource.xml Mon Nov 27 21:05:35 2023 -0600
+++ b/pidgin/resources/pidgin.gresource.xml Mon Nov 27 22:18:26 2023 -0600
@@ -17,7 +17,6 @@
<file compressed="true" preprocess="xml-stripblanks">ContactList/widget.ui</file>
<file compressed="true" preprocess="xml-stripblanks">Debug/debug.ui</file>
<file compressed="true" preprocess="xml-stripblanks">Dialogs/addbuddy.ui</file>
- <file compressed="true" preprocess="xml-stripblanks">Dialogs/addchat.ui</file>
<file compressed="true" preprocess="xml-stripblanks">Display/window.ui</file>
<file compressed="true" preprocess="xml-stripblanks">Keypad/keypad.ui</file>
<file compressed="true" preprocess="xml-stripblanks">Media/window.ui</file>
--- a/po/POTFILES.in Mon Nov 27 21:05:35 2023 -0600
+++ b/po/POTFILES.in Mon Nov 27 22:18:26 2023 -0600
@@ -255,7 +255,6 @@
pidgin/pidginaccountsenabledmenu.c
pidgin/pidginactiongroup.c
pidgin/pidginaddbuddydialog.c
-pidgin/pidginaddchatdialog.c
pidgin/pidginapplication.c
@@ -306,7 +305,6 @@
pidgin/resources/Conversations/invite_dialog.ui
pidgin/resources/Debug/debug.ui
pidgin/resources/Dialogs/addbuddy.ui
-pidgin/resources/Dialogs/addchat.ui
pidgin/resources/Display/window.ui
pidgin/resources/Keypad/keypad.ui
pidgin/resources/Media/window.ui