pidgin/pidginaddchatdialog.c

Sat, 29 Oct 2022 01:14:13 -0500

author
Gary Kramlich <grim@reaperworld.com>
date
Sat, 29 Oct 2022 01:14:13 -0500
changeset 41859
ed82ab63d15a
parent 41854
c1d7e7445b0f
child 41860
9315e7772780
permissions
-rw-r--r--

Convert PidginProxyPrefs to Adwaita 1.2

Testing Done:
Set all the values via the ui and the config file and tested bad values in the port in both as well. Bad values in the ui will store whatever atoi returned, but bad values in the config file will fallback to the default.

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

41508
b248346ee70b Create a new PidginAddChatDialog widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
1 /*
b248346ee70b Create a new PidginAddChatDialog widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
2 * Pidgin - Internet Messenger
b248346ee70b Create a new PidginAddChatDialog widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
3 * Copyright (C) Pidgin Developers <devel@pidgin.im>
b248346ee70b Create a new PidginAddChatDialog widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
4 *
b248346ee70b Create a new PidginAddChatDialog widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
5 * Pidgin is the legal property of its developers, whose names are too numerous
b248346ee70b Create a new PidginAddChatDialog widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
6 * to list here. Please refer to the COPYRIGHT file distributed with this
b248346ee70b Create a new PidginAddChatDialog widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
7 * source distribution.
b248346ee70b Create a new PidginAddChatDialog widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
8 *
b248346ee70b Create a new PidginAddChatDialog widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
9 * This program is free software; you can redistribute it and/or modify
b248346ee70b Create a new PidginAddChatDialog widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
10 * it under the terms of the GNU General Public License as published by
b248346ee70b Create a new PidginAddChatDialog widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
11 * the Free Software Foundation; either version 2 of the License, or
b248346ee70b Create a new PidginAddChatDialog widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
12 * (at your option) any later version.
b248346ee70b Create a new PidginAddChatDialog widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
13 *
b248346ee70b Create a new PidginAddChatDialog widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
14 * This program is distributed in the hope that it will be useful,
b248346ee70b Create a new PidginAddChatDialog widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
15 * but WITHOUT ANY WARRANTY; without even the implied warranty of
b248346ee70b Create a new PidginAddChatDialog widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
16 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
b248346ee70b Create a new PidginAddChatDialog widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
17 * GNU General Public License for more details.
b248346ee70b Create a new PidginAddChatDialog widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
18 *
b248346ee70b Create a new PidginAddChatDialog widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
19 * You should have received a copy of the GNU General Public License
b248346ee70b Create a new PidginAddChatDialog widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
20 * along with this program; if not, see <https://www.gnu.org/licenses/>.
b248346ee70b Create a new PidginAddChatDialog widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
21 */
b248346ee70b Create a new PidginAddChatDialog widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
22
b248346ee70b Create a new PidginAddChatDialog widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
23 #include <glib/gi18n.h>
b248346ee70b Create a new PidginAddChatDialog widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
24
b248346ee70b Create a new PidginAddChatDialog widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
25 #include "pidginaddchatdialog.h"
b248346ee70b Create a new PidginAddChatDialog widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
26
b248346ee70b Create a new PidginAddChatDialog widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
27 #include "gtkaccount.h"
b248346ee70b Create a new PidginAddChatDialog widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
28 #include "gtkroomlist.h"
b248346ee70b Create a new PidginAddChatDialog widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
29 #include "pidginaccountchooser.h"
b248346ee70b Create a new PidginAddChatDialog widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
30 #include "pidginaccountstore.h"
b248346ee70b Create a new PidginAddChatDialog widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
31 #include "pidgincore.h"
b248346ee70b Create a new PidginAddChatDialog widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
32
b248346ee70b Create a new PidginAddChatDialog widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
33 struct _PidginAddChatDialog {
b248346ee70b Create a new PidginAddChatDialog widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
34 GtkDialog parent;
b248346ee70b Create a new PidginAddChatDialog widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
35
b248346ee70b Create a new PidginAddChatDialog widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
36 GtkTreeModel *filter;
b248346ee70b Create a new PidginAddChatDialog widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
37
b248346ee70b Create a new PidginAddChatDialog widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
38 const gchar *default_name;
b248346ee70b Create a new PidginAddChatDialog widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
39
b248346ee70b Create a new PidginAddChatDialog widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
40 GtkWidget *account;
b248346ee70b Create a new PidginAddChatDialog widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
41 GtkWidget *dynamic_box;
b248346ee70b Create a new PidginAddChatDialog widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
42 GtkWidget *alias;
b248346ee70b Create a new PidginAddChatDialog widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
43 GtkWidget *group;
b248346ee70b Create a new PidginAddChatDialog widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
44 GtkWidget *autojoin;
b248346ee70b Create a new PidginAddChatDialog widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
45 GtkWidget *persistent;
b248346ee70b Create a new PidginAddChatDialog widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
46 GtkSizeGroup *sg;
b248346ee70b Create a new PidginAddChatDialog widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
47
b248346ee70b Create a new PidginAddChatDialog widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
48 GList *inputs;
b248346ee70b Create a new PidginAddChatDialog widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
49 };
b248346ee70b Create a new PidginAddChatDialog widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
50
b248346ee70b Create a new PidginAddChatDialog widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
51 G_DEFINE_TYPE(PidginAddChatDialog, pidgin_add_chat_dialog, GTK_TYPE_DIALOG)
b248346ee70b Create a new PidginAddChatDialog widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
52
b248346ee70b Create a new PidginAddChatDialog widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
53 /* ugh, prototypes... */
b248346ee70b Create a new PidginAddChatDialog widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
54 static void pidgin_add_chat_dialog_input_changed_cb(GtkEditable *editable, gpointer data);
b248346ee70b Create a new PidginAddChatDialog widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
55
b248346ee70b Create a new PidginAddChatDialog widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
56 /******************************************************************************
b248346ee70b Create a new PidginAddChatDialog widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
57 * Helpers
b248346ee70b Create a new PidginAddChatDialog widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
58 *****************************************************************************/
b248346ee70b Create a new PidginAddChatDialog widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
59 static void
b248346ee70b Create a new PidginAddChatDialog widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
60 pidgin_add_chat_dialog_validate_input(gpointer data, gpointer user_data) {
b248346ee70b Create a new PidginAddChatDialog widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
61 gboolean *valid = user_data;
b248346ee70b Create a new PidginAddChatDialog widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
62
b248346ee70b Create a new PidginAddChatDialog widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
63 if(!g_object_get_data(data, "integer")) {
b248346ee70b Create a new PidginAddChatDialog widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
64 gboolean required = FALSE;
b248346ee70b Create a new PidginAddChatDialog widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
65
b248346ee70b Create a new PidginAddChatDialog widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
66 required = GPOINTER_TO_INT(g_object_get_data(data, "required"));
b248346ee70b Create a new PidginAddChatDialog widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
67 if(required) {
b248346ee70b Create a new PidginAddChatDialog widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
68 const gchar *value = NULL;
b248346ee70b Create a new PidginAddChatDialog widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
69
41563
17c8c3d42aa0 Port PidginAddChatDialog to GTK4
Gary Kramlich <grim@reaperworld.com>
parents: 41508
diff changeset
70 value = gtk_editable_get_text(GTK_EDITABLE(data));
41508
b248346ee70b Create a new PidginAddChatDialog widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
71 if(value == NULL || *value == '\0') {
b248346ee70b Create a new PidginAddChatDialog widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
72 *valid = FALSE;
b248346ee70b Create a new PidginAddChatDialog widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
73 }
b248346ee70b Create a new PidginAddChatDialog widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
74 }
b248346ee70b Create a new PidginAddChatDialog widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
75 }
b248346ee70b Create a new PidginAddChatDialog widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
76 }
b248346ee70b Create a new PidginAddChatDialog widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
77
b248346ee70b Create a new PidginAddChatDialog widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
78 static void
b248346ee70b Create a new PidginAddChatDialog widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
79 pidgin_add_chat_dialog_validate(PidginAddChatDialog *dialog) {
b248346ee70b Create a new PidginAddChatDialog widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
80 gboolean valid = TRUE;
b248346ee70b Create a new PidginAddChatDialog widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
81
b248346ee70b Create a new PidginAddChatDialog widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
82 /* The callback should only set valid to FALSE if a field is invalid and
b248346ee70b Create a new PidginAddChatDialog widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
83 * not set valid if the field is valid.
b248346ee70b Create a new PidginAddChatDialog widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
84 */
b248346ee70b Create a new PidginAddChatDialog widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
85 g_list_foreach(dialog->inputs,
b248346ee70b Create a new PidginAddChatDialog widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
86 pidgin_add_chat_dialog_validate_input,
b248346ee70b Create a new PidginAddChatDialog widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
87 &valid);
b248346ee70b Create a new PidginAddChatDialog widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
88
b248346ee70b Create a new PidginAddChatDialog widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
89 gtk_dialog_set_response_sensitive(GTK_DIALOG(dialog), GTK_RESPONSE_OK,
b248346ee70b Create a new PidginAddChatDialog widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
90 valid);
b248346ee70b Create a new PidginAddChatDialog widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
91 }
b248346ee70b Create a new PidginAddChatDialog widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
92
b248346ee70b Create a new PidginAddChatDialog widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
93 static void
b248346ee70b Create a new PidginAddChatDialog widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
94 pidgin_add_chat_dialog_update_components(PidginAddChatDialog *dialog) {
b248346ee70b Create a new PidginAddChatDialog widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
95 PurpleAccount *account = NULL;
b248346ee70b Create a new PidginAddChatDialog widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
96 PurpleConnection *connection = NULL;
b248346ee70b Create a new PidginAddChatDialog widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
97 PurpleProtocol *protocol = NULL;
41563
17c8c3d42aa0 Port PidginAddChatDialog to GTK4
Gary Kramlich <grim@reaperworld.com>
parents: 41508
diff changeset
98 GtkWidget *child = NULL;
41508
b248346ee70b Create a new PidginAddChatDialog widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
99 GList *info = NULL;
b248346ee70b Create a new PidginAddChatDialog widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
100 GHashTable *defaults = NULL;
b248346ee70b Create a new PidginAddChatDialog widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
101 gboolean focus_set = FALSE;
b248346ee70b Create a new PidginAddChatDialog widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
102
b248346ee70b Create a new PidginAddChatDialog widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
103 account = pidgin_account_chooser_get_selected(PIDGIN_ACCOUNT_CHOOSER(dialog->account));
b248346ee70b Create a new PidginAddChatDialog widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
104 connection = purple_account_get_connection(account);
b248346ee70b Create a new PidginAddChatDialog widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
105 protocol = purple_account_get_protocol(account);
b248346ee70b Create a new PidginAddChatDialog widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
106
b248346ee70b Create a new PidginAddChatDialog widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
107 /* Clean up the dynamic box and our list of entires. */
41563
17c8c3d42aa0 Port PidginAddChatDialog to GTK4
Gary Kramlich <grim@reaperworld.com>
parents: 41508
diff changeset
108 while((child = gtk_widget_get_first_child(dialog->dynamic_box)) != NULL) {
17c8c3d42aa0 Port PidginAddChatDialog to GTK4
Gary Kramlich <grim@reaperworld.com>
parents: 41508
diff changeset
109 gtk_box_remove(GTK_BOX(dialog->dynamic_box), child);
17c8c3d42aa0 Port PidginAddChatDialog to GTK4
Gary Kramlich <grim@reaperworld.com>
parents: 41508
diff changeset
110 }
41508
b248346ee70b Create a new PidginAddChatDialog widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
111 g_clear_pointer(&dialog->inputs, g_list_free);
b248346ee70b Create a new PidginAddChatDialog widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
112
b248346ee70b Create a new PidginAddChatDialog widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
113 info = purple_protocol_chat_info(PURPLE_PROTOCOL_CHAT(protocol),
b248346ee70b Create a new PidginAddChatDialog widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
114 connection);
b248346ee70b Create a new PidginAddChatDialog widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
115 defaults = purple_protocol_chat_info_defaults(PURPLE_PROTOCOL_CHAT(protocol),
b248346ee70b Create a new PidginAddChatDialog widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
116 connection,
b248346ee70b Create a new PidginAddChatDialog widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
117 dialog->default_name);
b248346ee70b Create a new PidginAddChatDialog widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
118
b248346ee70b Create a new PidginAddChatDialog widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
119 while(info != NULL) {
b248346ee70b Create a new PidginAddChatDialog widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
120 GtkWidget *box = NULL, *label = NULL, *input = NULL;
b248346ee70b Create a new PidginAddChatDialog widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
121 PurpleProtocolChatEntry *pce = info->data;
b248346ee70b Create a new PidginAddChatDialog widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
122
b248346ee70b Create a new PidginAddChatDialog widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
123 if(pce->is_int) {
b248346ee70b Create a new PidginAddChatDialog widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
124 GtkAdjustment *adjustment = gtk_adjustment_new(pce->min, pce->min,
b248346ee70b Create a new PidginAddChatDialog widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
125 pce->max, 1, 10, 10);
b248346ee70b Create a new PidginAddChatDialog widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
126 input = gtk_spin_button_new(adjustment, 1, 0);
b248346ee70b Create a new PidginAddChatDialog widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
127 } else {
b248346ee70b Create a new PidginAddChatDialog widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
128 gchar *value = NULL;
b248346ee70b Create a new PidginAddChatDialog widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
129
b248346ee70b Create a new PidginAddChatDialog widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
130 input = gtk_entry_new();
b248346ee70b Create a new PidginAddChatDialog widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
131 g_signal_connect(input, "changed",
b248346ee70b Create a new PidginAddChatDialog widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
132 G_CALLBACK(pidgin_add_chat_dialog_input_changed_cb),
b248346ee70b Create a new PidginAddChatDialog widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
133 dialog);
b248346ee70b Create a new PidginAddChatDialog widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
134
b248346ee70b Create a new PidginAddChatDialog widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
135 value = g_hash_table_lookup(defaults, pce->identifier);
b248346ee70b Create a new PidginAddChatDialog widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
136 if(value != NULL) {
41563
17c8c3d42aa0 Port PidginAddChatDialog to GTK4
Gary Kramlich <grim@reaperworld.com>
parents: 41508
diff changeset
137 gtk_editable_set_text(GTK_EDITABLE(input), value);
41508
b248346ee70b Create a new PidginAddChatDialog widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
138 }
b248346ee70b Create a new PidginAddChatDialog widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
139
b248346ee70b Create a new PidginAddChatDialog widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
140 if(pce->secret) {
b248346ee70b Create a new PidginAddChatDialog widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
141 gtk_entry_set_visibility(GTK_ENTRY(input), FALSE);
b248346ee70b Create a new PidginAddChatDialog widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
142 gtk_entry_set_input_purpose(GTK_ENTRY(input),
b248346ee70b Create a new PidginAddChatDialog widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
143 GTK_INPUT_PURPOSE_PASSWORD);
b248346ee70b Create a new PidginAddChatDialog widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
144 }
b248346ee70b Create a new PidginAddChatDialog widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
145 }
b248346ee70b Create a new PidginAddChatDialog widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
146
b248346ee70b Create a new PidginAddChatDialog widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
147 box = gtk_box_new(GTK_ORIENTATION_HORIZONTAL, 6);
41563
17c8c3d42aa0 Port PidginAddChatDialog to GTK4
Gary Kramlich <grim@reaperworld.com>
parents: 41508
diff changeset
148 gtk_box_append(GTK_BOX(dialog->dynamic_box), box);
41508
b248346ee70b Create a new PidginAddChatDialog widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
149
b248346ee70b Create a new PidginAddChatDialog widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
150 label = gtk_label_new_with_mnemonic(pce->label);
b248346ee70b Create a new PidginAddChatDialog widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
151 gtk_label_set_xalign(GTK_LABEL(label), 0.0f);
b248346ee70b Create a new PidginAddChatDialog widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
152 gtk_label_set_yalign(GTK_LABEL(label), 0.0f);
41563
17c8c3d42aa0 Port PidginAddChatDialog to GTK4
Gary Kramlich <grim@reaperworld.com>
parents: 41508
diff changeset
153 gtk_box_append(GTK_BOX(box), label);
41508
b248346ee70b Create a new PidginAddChatDialog widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
154 gtk_size_group_add_widget(dialog->sg, label);
b248346ee70b Create a new PidginAddChatDialog widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
155
41563
17c8c3d42aa0 Port PidginAddChatDialog to GTK4
Gary Kramlich <grim@reaperworld.com>
parents: 41508
diff changeset
156 gtk_widget_set_hexpand(input, TRUE);
17c8c3d42aa0 Port PidginAddChatDialog to GTK4
Gary Kramlich <grim@reaperworld.com>
parents: 41508
diff changeset
157 gtk_box_append(GTK_BOX(box), input);
41508
b248346ee70b Create a new PidginAddChatDialog widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
158 if(!focus_set) {
b248346ee70b Create a new PidginAddChatDialog widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
159 gtk_widget_grab_focus(input);
b248346ee70b Create a new PidginAddChatDialog widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
160 focus_set = TRUE;
b248346ee70b Create a new PidginAddChatDialog widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
161 }
b248346ee70b Create a new PidginAddChatDialog widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
162
b248346ee70b Create a new PidginAddChatDialog widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
163 g_object_set_data(G_OBJECT(input), "identifier",
b248346ee70b Create a new PidginAddChatDialog widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
164 (gpointer)pce->identifier);
b248346ee70b Create a new PidginAddChatDialog widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
165 g_object_set_data(G_OBJECT(input), "integer",
b248346ee70b Create a new PidginAddChatDialog widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
166 GINT_TO_POINTER(pce->is_int));
b248346ee70b Create a new PidginAddChatDialog widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
167 g_object_set_data(G_OBJECT(input), "required",
b248346ee70b Create a new PidginAddChatDialog widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
168 GINT_TO_POINTER(pce->required));
b248346ee70b Create a new PidginAddChatDialog widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
169
b248346ee70b Create a new PidginAddChatDialog widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
170 dialog->inputs = g_list_append(dialog->inputs, input);
b248346ee70b Create a new PidginAddChatDialog widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
171
b248346ee70b Create a new PidginAddChatDialog widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
172 g_free(pce);
b248346ee70b Create a new PidginAddChatDialog widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
173
b248346ee70b Create a new PidginAddChatDialog widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
174 info = g_list_delete_link(info, info);
b248346ee70b Create a new PidginAddChatDialog widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
175 }
b248346ee70b Create a new PidginAddChatDialog widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
176
b248346ee70b Create a new PidginAddChatDialog widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
177 g_hash_table_destroy(defaults);
b248346ee70b Create a new PidginAddChatDialog widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
178
b248346ee70b Create a new PidginAddChatDialog widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
179 pidgin_add_chat_dialog_validate(dialog);
b248346ee70b Create a new PidginAddChatDialog widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
180 }
b248346ee70b Create a new PidginAddChatDialog widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
181
b248346ee70b Create a new PidginAddChatDialog widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
182 static gboolean
b248346ee70b Create a new PidginAddChatDialog widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
183 pidgin_add_chat_dialog_filter_accounts(GtkTreeModel *model, GtkTreeIter *iter,
b248346ee70b Create a new PidginAddChatDialog widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
184 gpointer data)
b248346ee70b Create a new PidginAddChatDialog widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
185 {
b248346ee70b Create a new PidginAddChatDialog widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
186 PurpleAccount *account = NULL;
b248346ee70b Create a new PidginAddChatDialog widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
187 PurpleProtocol *protocol = NULL;
b248346ee70b Create a new PidginAddChatDialog widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
188 gboolean ret = FALSE;
b248346ee70b Create a new PidginAddChatDialog widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
189
b248346ee70b Create a new PidginAddChatDialog widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
190 g_return_val_if_fail(GTK_IS_TREE_MODEL(model), FALSE);
b248346ee70b Create a new PidginAddChatDialog widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
191 g_return_val_if_fail(iter != NULL, FALSE);
b248346ee70b Create a new PidginAddChatDialog widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
192
b248346ee70b Create a new PidginAddChatDialog widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
193 gtk_tree_model_get(model, iter, PIDGIN_ACCOUNT_STORE_COLUMN_ACCOUNT,
b248346ee70b Create a new PidginAddChatDialog widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
194 &account, -1);
b248346ee70b Create a new PidginAddChatDialog widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
195
b248346ee70b Create a new PidginAddChatDialog widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
196 if(!PURPLE_IS_ACCOUNT(account)) {
b248346ee70b Create a new PidginAddChatDialog widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
197 return FALSE;
b248346ee70b Create a new PidginAddChatDialog widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
198 }
b248346ee70b Create a new PidginAddChatDialog widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
199
b248346ee70b Create a new PidginAddChatDialog widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
200 protocol = purple_account_get_protocol(account);
b248346ee70b Create a new PidginAddChatDialog widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
201 if(PURPLE_IS_PROTOCOL(protocol)) {
b248346ee70b Create a new PidginAddChatDialog widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
202 ret = PURPLE_PROTOCOL_IMPLEMENTS(protocol, CHAT, info);
b248346ee70b Create a new PidginAddChatDialog widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
203 }
b248346ee70b Create a new PidginAddChatDialog widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
204
b248346ee70b Create a new PidginAddChatDialog widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
205 g_object_unref(G_OBJECT(account));
b248346ee70b Create a new PidginAddChatDialog widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
206
b248346ee70b Create a new PidginAddChatDialog widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
207 return ret;
b248346ee70b Create a new PidginAddChatDialog widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
208 }
b248346ee70b Create a new PidginAddChatDialog widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
209
b248346ee70b Create a new PidginAddChatDialog widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
210 static void
b248346ee70b Create a new PidginAddChatDialog widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
211 pidgin_add_chat_dialog_add_input_to_components(gpointer data,
b248346ee70b Create a new PidginAddChatDialog widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
212 gpointer user_data)
b248346ee70b Create a new PidginAddChatDialog widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
213 {
b248346ee70b Create a new PidginAddChatDialog widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
214 GHashTable *components = user_data;
b248346ee70b Create a new PidginAddChatDialog widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
215 gchar *identifier = NULL;
b248346ee70b Create a new PidginAddChatDialog widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
216 gchar *value = NULL;
b248346ee70b Create a new PidginAddChatDialog widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
217
b248346ee70b Create a new PidginAddChatDialog widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
218 identifier = g_strdup(g_object_get_data(data, "identifier"));
b248346ee70b Create a new PidginAddChatDialog widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
219
b248346ee70b Create a new PidginAddChatDialog widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
220 if(g_object_get_data(data, "integer")) {
b248346ee70b Create a new PidginAddChatDialog widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
221 gint int_value = gtk_spin_button_get_value_as_int(GTK_SPIN_BUTTON(data));
b248346ee70b Create a new PidginAddChatDialog widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
222
b248346ee70b Create a new PidginAddChatDialog widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
223 value = g_strdup_printf("%d", int_value);
b248346ee70b Create a new PidginAddChatDialog widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
224 } else {
41563
17c8c3d42aa0 Port PidginAddChatDialog to GTK4
Gary Kramlich <grim@reaperworld.com>
parents: 41508
diff changeset
225 const gchar *str_value = gtk_editable_get_text(GTK_EDITABLE(data));
41508
b248346ee70b Create a new PidginAddChatDialog widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
226
b248346ee70b Create a new PidginAddChatDialog widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
227 if(*str_value != '\0') {
b248346ee70b Create a new PidginAddChatDialog widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
228 value = g_strdup(str_value);
b248346ee70b Create a new PidginAddChatDialog widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
229 }
b248346ee70b Create a new PidginAddChatDialog widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
230 }
b248346ee70b Create a new PidginAddChatDialog widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
231
b248346ee70b Create a new PidginAddChatDialog widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
232 /* If the value was changed to an empty string, we should remove it from the
b248346ee70b Create a new PidginAddChatDialog widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
233 * components.
b248346ee70b Create a new PidginAddChatDialog widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
234 */
b248346ee70b Create a new PidginAddChatDialog widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
235 if(value == NULL) {
b248346ee70b Create a new PidginAddChatDialog widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
236 g_hash_table_remove(components, identifier);
b248346ee70b Create a new PidginAddChatDialog widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
237 g_free(identifier);
b248346ee70b Create a new PidginAddChatDialog widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
238 } else {
b248346ee70b Create a new PidginAddChatDialog widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
239 g_hash_table_replace(components, identifier, value);
b248346ee70b Create a new PidginAddChatDialog widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
240 }
b248346ee70b Create a new PidginAddChatDialog widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
241 }
b248346ee70b Create a new PidginAddChatDialog widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
242
b248346ee70b Create a new PidginAddChatDialog widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
243 /******************************************************************************
b248346ee70b Create a new PidginAddChatDialog widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
244 * Callbacks
b248346ee70b Create a new PidginAddChatDialog widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
245 *****************************************************************************/
b248346ee70b Create a new PidginAddChatDialog widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
246 static void
b248346ee70b Create a new PidginAddChatDialog widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
247 pidgin_add_chat_dialog_input_changed_cb(G_GNUC_UNUSED GtkEditable *editable,
b248346ee70b Create a new PidginAddChatDialog widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
248 gpointer data)
b248346ee70b Create a new PidginAddChatDialog widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
249 {
b248346ee70b Create a new PidginAddChatDialog widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
250 pidgin_add_chat_dialog_validate(data);
b248346ee70b Create a new PidginAddChatDialog widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
251 }
b248346ee70b Create a new PidginAddChatDialog widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
252
b248346ee70b Create a new PidginAddChatDialog widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
253 static void
b248346ee70b Create a new PidginAddChatDialog widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
254 pidgin_add_chat_dialog_response_cb(GtkDialog *dialog, gint response_id,
b248346ee70b Create a new PidginAddChatDialog widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
255 G_GNUC_UNUSED gpointer data)
b248346ee70b Create a new PidginAddChatDialog widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
256 {
b248346ee70b Create a new PidginAddChatDialog widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
257 PurpleAccount *account = NULL;
b248346ee70b Create a new PidginAddChatDialog widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
258 PidginAddChatDialog *acdialog = PIDGIN_ADD_CHAT_DIALOG(dialog);
b248346ee70b Create a new PidginAddChatDialog widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
259 gboolean close = TRUE;
b248346ee70b Create a new PidginAddChatDialog widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
260
b248346ee70b Create a new PidginAddChatDialog widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
261 account = pidgin_account_chooser_get_selected(PIDGIN_ACCOUNT_CHOOSER(acdialog->account));
b248346ee70b Create a new PidginAddChatDialog widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
262
b248346ee70b Create a new PidginAddChatDialog widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
263 if(response_id == 1) {
b248346ee70b Create a new PidginAddChatDialog widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
264 pidgin_roomlist_dialog_show_with_account(account);
b248346ee70b Create a new PidginAddChatDialog widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
265
b248346ee70b Create a new PidginAddChatDialog widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
266 close = FALSE;
b248346ee70b Create a new PidginAddChatDialog widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
267 } else if(response_id == GTK_RESPONSE_OK) {
b248346ee70b Create a new PidginAddChatDialog widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
268 PurpleChat *chat = NULL;
b248346ee70b Create a new PidginAddChatDialog widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
269 GHashTable *components = NULL;
b248346ee70b Create a new PidginAddChatDialog widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
270 const gchar *alias = NULL;
b248346ee70b Create a new PidginAddChatDialog widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
271
b248346ee70b Create a new PidginAddChatDialog widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
272 components = g_hash_table_new_full(g_str_hash, g_str_equal, g_free,
b248346ee70b Create a new PidginAddChatDialog widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
273 g_free);
b248346ee70b Create a new PidginAddChatDialog widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
274 g_list_foreach(acdialog->inputs,
b248346ee70b Create a new PidginAddChatDialog widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
275 pidgin_add_chat_dialog_add_input_to_components,
b248346ee70b Create a new PidginAddChatDialog widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
276 components);
b248346ee70b Create a new PidginAddChatDialog widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
277
41563
17c8c3d42aa0 Port PidginAddChatDialog to GTK4
Gary Kramlich <grim@reaperworld.com>
parents: 41508
diff changeset
278 alias = gtk_editable_get_text(GTK_EDITABLE(acdialog->alias));
41508
b248346ee70b Create a new PidginAddChatDialog widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
279
b248346ee70b Create a new PidginAddChatDialog widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
280 chat = purple_chat_new(account, alias, components);
b248346ee70b Create a new PidginAddChatDialog widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
281
b248346ee70b Create a new PidginAddChatDialog widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
282 if(PURPLE_IS_CHAT(chat)) {
b248346ee70b Create a new PidginAddChatDialog widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
283 PurpleGroup *group = NULL;
b248346ee70b Create a new PidginAddChatDialog widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
284 gchar *group_name = NULL;
b248346ee70b Create a new PidginAddChatDialog widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
285
b248346ee70b Create a new PidginAddChatDialog widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
286 group_name = gtk_combo_box_text_get_active_text(GTK_COMBO_BOX_TEXT(acdialog->group));
b248346ee70b Create a new PidginAddChatDialog widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
287 if(group_name != NULL && *group_name != '\0') {
b248346ee70b Create a new PidginAddChatDialog widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
288 group = purple_blist_find_group(group_name);
b248346ee70b Create a new PidginAddChatDialog widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
289 }
b248346ee70b Create a new PidginAddChatDialog widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
290
b248346ee70b Create a new PidginAddChatDialog widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
291 if(!PURPLE_IS_GROUP(group)) {
b248346ee70b Create a new PidginAddChatDialog widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
292 group = purple_group_new(group_name);
b248346ee70b Create a new PidginAddChatDialog widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
293 purple_blist_add_group(group, NULL);
b248346ee70b Create a new PidginAddChatDialog widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
294 }
b248346ee70b Create a new PidginAddChatDialog widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
295
b248346ee70b Create a new PidginAddChatDialog widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
296 purple_blist_add_chat(chat, group, NULL);
b248346ee70b Create a new PidginAddChatDialog widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
297
b248346ee70b Create a new PidginAddChatDialog widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
298 if(gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(acdialog->autojoin))) {
b248346ee70b Create a new PidginAddChatDialog widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
299 purple_blist_node_set_bool(PURPLE_BLIST_NODE(chat),
b248346ee70b Create a new PidginAddChatDialog widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
300 "gtk-autojoin", TRUE);
b248346ee70b Create a new PidginAddChatDialog widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
301 }
b248346ee70b Create a new PidginAddChatDialog widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
302 if(gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(acdialog->persistent))) {
b248346ee70b Create a new PidginAddChatDialog widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
303 purple_blist_node_set_bool(PURPLE_BLIST_NODE(chat),
b248346ee70b Create a new PidginAddChatDialog widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
304 "gtk-persistent", TRUE);
b248346ee70b Create a new PidginAddChatDialog widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
305 }
b248346ee70b Create a new PidginAddChatDialog widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
306
b248346ee70b Create a new PidginAddChatDialog widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
307 g_free(group_name);
b248346ee70b Create a new PidginAddChatDialog widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
308 } else {
b248346ee70b Create a new PidginAddChatDialog widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
309 g_warning("failed to create chat");
b248346ee70b Create a new PidginAddChatDialog widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
310 }
b248346ee70b Create a new PidginAddChatDialog widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
311 }
b248346ee70b Create a new PidginAddChatDialog widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
312
b248346ee70b Create a new PidginAddChatDialog widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
313 if(close) {
41563
17c8c3d42aa0 Port PidginAddChatDialog to GTK4
Gary Kramlich <grim@reaperworld.com>
parents: 41508
diff changeset
314 gtk_window_destroy(GTK_WINDOW(dialog));
41508
b248346ee70b Create a new PidginAddChatDialog widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
315 }
b248346ee70b Create a new PidginAddChatDialog widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
316 }
b248346ee70b Create a new PidginAddChatDialog widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
317
b248346ee70b Create a new PidginAddChatDialog widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
318 static void
41854
c1d7e7445b0f Avoid GtkComboBox-isms with PidginAccountChooser
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41629
diff changeset
319 pidgin_add_chat_dialog_account_changed_cb(GObject *obj,
c1d7e7445b0f Avoid GtkComboBox-isms with PidginAccountChooser
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41629
diff changeset
320 G_GNUC_UNUSED GParamSpec *pspec,
c1d7e7445b0f Avoid GtkComboBox-isms with PidginAccountChooser
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41629
diff changeset
321 gpointer data)
c1d7e7445b0f Avoid GtkComboBox-isms with PidginAccountChooser
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41629
diff changeset
322 {
41508
b248346ee70b Create a new PidginAddChatDialog widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
323 PidginAddChatDialog *dialog = data;
b248346ee70b Create a new PidginAddChatDialog widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
324 PurpleAccount *account = NULL;
b248346ee70b Create a new PidginAddChatDialog widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
325
41854
c1d7e7445b0f Avoid GtkComboBox-isms with PidginAccountChooser
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41629
diff changeset
326 account = pidgin_account_chooser_get_selected(PIDGIN_ACCOUNT_CHOOSER(obj));
41508
b248346ee70b Create a new PidginAddChatDialog widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
327
b248346ee70b Create a new PidginAddChatDialog widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
328 if(PURPLE_IS_ACCOUNT(account)) {
b248346ee70b Create a new PidginAddChatDialog widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
329 PurpleProtocol *protocol = purple_account_get_protocol(account);
b248346ee70b Create a new PidginAddChatDialog widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
330
b248346ee70b Create a new PidginAddChatDialog widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
331 if(PURPLE_IS_PROTOCOL(protocol)) {
b248346ee70b Create a new PidginAddChatDialog widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
332 gboolean roomlist = FALSE;
b248346ee70b Create a new PidginAddChatDialog widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
333
b248346ee70b Create a new PidginAddChatDialog widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
334 roomlist = PURPLE_PROTOCOL_IMPLEMENTS(protocol, ROOMLIST, get_list);
b248346ee70b Create a new PidginAddChatDialog widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
335
b248346ee70b Create a new PidginAddChatDialog widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
336 gtk_dialog_set_response_sensitive(GTK_DIALOG(dialog), 1, roomlist);
b248346ee70b Create a new PidginAddChatDialog widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
337 }
b248346ee70b Create a new PidginAddChatDialog widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
338 }
b248346ee70b Create a new PidginAddChatDialog widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
339
b248346ee70b Create a new PidginAddChatDialog widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
340 pidgin_add_chat_dialog_update_components(dialog);
b248346ee70b Create a new PidginAddChatDialog widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
341
b248346ee70b Create a new PidginAddChatDialog widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
342 pidgin_add_chat_dialog_validate(dialog);
b248346ee70b Create a new PidginAddChatDialog widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
343 }
b248346ee70b Create a new PidginAddChatDialog widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
344
b248346ee70b Create a new PidginAddChatDialog widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
345 static void
b248346ee70b Create a new PidginAddChatDialog widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
346 pidgin_add_chat_dialog_username_changed_cb(G_GNUC_UNUSED GtkEditable *editable,
b248346ee70b Create a new PidginAddChatDialog widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
347 gpointer data)
b248346ee70b Create a new PidginAddChatDialog widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
348 {
b248346ee70b Create a new PidginAddChatDialog widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
349 pidgin_add_chat_dialog_validate(data);
b248346ee70b Create a new PidginAddChatDialog widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
350 }
b248346ee70b Create a new PidginAddChatDialog widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
351
b248346ee70b Create a new PidginAddChatDialog widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
352 static void
b248346ee70b Create a new PidginAddChatDialog widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
353 pidgin_add_chat_dialog_group_cb(PurpleBlistNode *node, gpointer data) {
b248346ee70b Create a new PidginAddChatDialog widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
354 PidginAddChatDialog *dialog = data;
b248346ee70b Create a new PidginAddChatDialog widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
355 PurpleGroup *group = PURPLE_GROUP(node);
b248346ee70b Create a new PidginAddChatDialog widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
356
b248346ee70b Create a new PidginAddChatDialog widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
357 gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(dialog->group),
b248346ee70b Create a new PidginAddChatDialog widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
358 purple_group_get_name(group));
b248346ee70b Create a new PidginAddChatDialog widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
359 }
b248346ee70b Create a new PidginAddChatDialog widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
360
b248346ee70b Create a new PidginAddChatDialog widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
361 /******************************************************************************
b248346ee70b Create a new PidginAddChatDialog widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
362 * GObject Implementation
b248346ee70b Create a new PidginAddChatDialog widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
363 *****************************************************************************/
b248346ee70b Create a new PidginAddChatDialog widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
364 static void
b248346ee70b Create a new PidginAddChatDialog widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
365 pidgin_add_chat_dialog_finalize(GObject *obj) {
b248346ee70b Create a new PidginAddChatDialog widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
366 PidginAddChatDialog *dialog = PIDGIN_ADD_CHAT_DIALOG(obj);
b248346ee70b Create a new PidginAddChatDialog widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
367
b248346ee70b Create a new PidginAddChatDialog widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
368 g_list_free(dialog->inputs);
b248346ee70b Create a new PidginAddChatDialog widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
369
b248346ee70b Create a new PidginAddChatDialog widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
370 G_OBJECT_CLASS(pidgin_add_chat_dialog_parent_class)->finalize(obj);
b248346ee70b Create a new PidginAddChatDialog widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
371 }
b248346ee70b Create a new PidginAddChatDialog widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
372
b248346ee70b Create a new PidginAddChatDialog widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
373 static void
b248346ee70b Create a new PidginAddChatDialog widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
374 pidgin_add_chat_dialog_init(PidginAddChatDialog *dialog) {
b248346ee70b Create a new PidginAddChatDialog widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
375 gtk_widget_init_template(GTK_WIDGET(dialog));
b248346ee70b Create a new PidginAddChatDialog widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
376
b248346ee70b Create a new PidginAddChatDialog widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
377 gtk_dialog_set_default_response(GTK_DIALOG(dialog), GTK_RESPONSE_OK);
b248346ee70b Create a new PidginAddChatDialog widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
378
b248346ee70b Create a new PidginAddChatDialog widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
379 gtk_tree_model_filter_set_visible_func(GTK_TREE_MODEL_FILTER(dialog->filter),
b248346ee70b Create a new PidginAddChatDialog widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
380 pidgin_add_chat_dialog_filter_accounts,
b248346ee70b Create a new PidginAddChatDialog widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
381 NULL, NULL);
b248346ee70b Create a new PidginAddChatDialog widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
382 gtk_tree_model_filter_refilter(GTK_TREE_MODEL_FILTER(dialog->filter));
b248346ee70b Create a new PidginAddChatDialog widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
383
b248346ee70b Create a new PidginAddChatDialog widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
384 gtk_combo_box_set_active(GTK_COMBO_BOX(dialog->account), 0);
b248346ee70b Create a new PidginAddChatDialog widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
385
b248346ee70b Create a new PidginAddChatDialog widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
386 purple_blist_walk(pidgin_add_chat_dialog_group_cb, NULL, NULL, NULL,
b248346ee70b Create a new PidginAddChatDialog widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
387 dialog);
b248346ee70b Create a new PidginAddChatDialog widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
388 }
b248346ee70b Create a new PidginAddChatDialog widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
389
b248346ee70b Create a new PidginAddChatDialog widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
390 static void
b248346ee70b Create a new PidginAddChatDialog widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
391 pidgin_add_chat_dialog_class_init(PidginAddChatDialogClass *klass) {
b248346ee70b Create a new PidginAddChatDialog widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
392 GObjectClass *obj_class = G_OBJECT_CLASS(klass);
b248346ee70b Create a new PidginAddChatDialog widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
393 GtkWidgetClass *widget_class = GTK_WIDGET_CLASS(klass);
b248346ee70b Create a new PidginAddChatDialog widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
394
b248346ee70b Create a new PidginAddChatDialog widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
395 obj_class->finalize = pidgin_add_chat_dialog_finalize;
b248346ee70b Create a new PidginAddChatDialog widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
396
b248346ee70b Create a new PidginAddChatDialog widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
397 gtk_widget_class_set_template_from_resource(
b248346ee70b Create a new PidginAddChatDialog widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
398 widget_class,
b248346ee70b Create a new PidginAddChatDialog widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
399 "/im/pidgin/Pidgin3/Dialogs/addchat.ui"
b248346ee70b Create a new PidginAddChatDialog widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
400 );
b248346ee70b Create a new PidginAddChatDialog widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
401
b248346ee70b Create a new PidginAddChatDialog widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
402 gtk_widget_class_bind_template_child(widget_class, PidginAddChatDialog,
b248346ee70b Create a new PidginAddChatDialog widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
403 filter);
b248346ee70b Create a new PidginAddChatDialog widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
404
b248346ee70b Create a new PidginAddChatDialog widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
405 gtk_widget_class_bind_template_child(widget_class, PidginAddChatDialog,
b248346ee70b Create a new PidginAddChatDialog widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
406 account);
b248346ee70b Create a new PidginAddChatDialog widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
407 gtk_widget_class_bind_template_child(widget_class, PidginAddChatDialog,
b248346ee70b Create a new PidginAddChatDialog widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
408 dynamic_box);
b248346ee70b Create a new PidginAddChatDialog widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
409 gtk_widget_class_bind_template_child(widget_class, PidginAddChatDialog,
b248346ee70b Create a new PidginAddChatDialog widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
410 alias);
b248346ee70b Create a new PidginAddChatDialog widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
411 gtk_widget_class_bind_template_child(widget_class, PidginAddChatDialog,
b248346ee70b Create a new PidginAddChatDialog widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
412 group);
b248346ee70b Create a new PidginAddChatDialog widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
413 gtk_widget_class_bind_template_child(widget_class, PidginAddChatDialog,
b248346ee70b Create a new PidginAddChatDialog widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
414 autojoin);
b248346ee70b Create a new PidginAddChatDialog widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
415 gtk_widget_class_bind_template_child(widget_class, PidginAddChatDialog,
b248346ee70b Create a new PidginAddChatDialog widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
416 persistent);
b248346ee70b Create a new PidginAddChatDialog widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
417 gtk_widget_class_bind_template_child(widget_class, PidginAddChatDialog,
b248346ee70b Create a new PidginAddChatDialog widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
418 sg);
b248346ee70b Create a new PidginAddChatDialog widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
419
b248346ee70b Create a new PidginAddChatDialog widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
420 gtk_widget_class_bind_template_callback(widget_class,
b248346ee70b Create a new PidginAddChatDialog widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
421 pidgin_add_chat_dialog_response_cb);
b248346ee70b Create a new PidginAddChatDialog widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
422 gtk_widget_class_bind_template_callback(widget_class,
b248346ee70b Create a new PidginAddChatDialog widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
423 pidgin_add_chat_dialog_account_changed_cb);
b248346ee70b Create a new PidginAddChatDialog widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
424 gtk_widget_class_bind_template_callback(widget_class,
b248346ee70b Create a new PidginAddChatDialog widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
425 pidgin_add_chat_dialog_username_changed_cb);
b248346ee70b Create a new PidginAddChatDialog widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
426 }
b248346ee70b Create a new PidginAddChatDialog widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
427
b248346ee70b Create a new PidginAddChatDialog widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
428 /******************************************************************************
b248346ee70b Create a new PidginAddChatDialog widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
429 * Public API
b248346ee70b Create a new PidginAddChatDialog widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
430 *****************************************************************************/
b248346ee70b Create a new PidginAddChatDialog widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
431 GtkWidget *
b248346ee70b Create a new PidginAddChatDialog widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
432 pidgin_add_chat_dialog_new(PurpleAccount *account, PurpleGroup *group,
b248346ee70b Create a new PidginAddChatDialog widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
433 const gchar *alias, const gchar *name)
b248346ee70b Create a new PidginAddChatDialog widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
434 {
b248346ee70b Create a new PidginAddChatDialog widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
435 GtkWidget *dialog = g_object_new(PIDGIN_TYPE_ADD_CHAT_DIALOG, NULL);
b248346ee70b Create a new PidginAddChatDialog widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
436 PidginAddChatDialog *acdialog = PIDGIN_ADD_CHAT_DIALOG(dialog);
b248346ee70b Create a new PidginAddChatDialog widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
437
b248346ee70b Create a new PidginAddChatDialog widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
438 if(PURPLE_IS_ACCOUNT(account)) {
b248346ee70b Create a new PidginAddChatDialog widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
439 pidgin_account_chooser_set_selected(PIDGIN_ACCOUNT_CHOOSER(acdialog->account),
b248346ee70b Create a new PidginAddChatDialog widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
440 account);
b248346ee70b Create a new PidginAddChatDialog widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
441 }
b248346ee70b Create a new PidginAddChatDialog widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
442
b248346ee70b Create a new PidginAddChatDialog widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
443 if(alias != NULL) {
41563
17c8c3d42aa0 Port PidginAddChatDialog to GTK4
Gary Kramlich <grim@reaperworld.com>
parents: 41508
diff changeset
444 gtk_editable_set_text(GTK_EDITABLE(acdialog->alias), alias);
41508
b248346ee70b Create a new PidginAddChatDialog widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
445 }
b248346ee70b Create a new PidginAddChatDialog widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
446
b248346ee70b Create a new PidginAddChatDialog widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
447 if(PURPLE_IS_GROUP(group)) {
b248346ee70b Create a new PidginAddChatDialog widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
448 GtkWidget *entry = NULL;
b248346ee70b Create a new PidginAddChatDialog widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
449
41563
17c8c3d42aa0 Port PidginAddChatDialog to GTK4
Gary Kramlich <grim@reaperworld.com>
parents: 41508
diff changeset
450 entry = gtk_combo_box_get_child(GTK_COMBO_BOX(acdialog->group));
17c8c3d42aa0 Port PidginAddChatDialog to GTK4
Gary Kramlich <grim@reaperworld.com>
parents: 41508
diff changeset
451 gtk_editable_set_text(GTK_EDITABLE(entry),
17c8c3d42aa0 Port PidginAddChatDialog to GTK4
Gary Kramlich <grim@reaperworld.com>
parents: 41508
diff changeset
452 purple_group_get_name(group));
41508
b248346ee70b Create a new PidginAddChatDialog widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
453 }
b248346ee70b Create a new PidginAddChatDialog widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
454
b248346ee70b Create a new PidginAddChatDialog widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
455 acdialog->default_name = name;
b248346ee70b Create a new PidginAddChatDialog widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
456
b248346ee70b Create a new PidginAddChatDialog widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
457 pidgin_add_chat_dialog_update_components(acdialog);
b248346ee70b Create a new PidginAddChatDialog widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
458
b248346ee70b Create a new PidginAddChatDialog widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
459 return dialog;
b248346ee70b Create a new PidginAddChatDialog widget.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
460 }

mercurial