pidgin/pidginaccountmanager.c

Sun, 09 Jun 2024 15:36:02 -0500

author
Markus Fischer <ivanhoe@fiscari.de>
date
Sun, 09 Jun 2024 15:36:02 -0500
changeset 42787
a96dfca87750
parent 42575
580339aa47cc
child 43073
b97e5e85b97d
permissions
-rw-r--r--

IRCv3: Only set up SASL if the account requires a password

Testing Done:
Connected both an account with and without password.

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

41310
53e4815ef254 Create a new PidginAccountManager that replaces the manually built one.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
1 /*
53e4815ef254 Create a new PidginAccountManager that replaces the manually built one.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
2 * Pidgin - Internet Messenger
53e4815ef254 Create a new PidginAccountManager that replaces the manually built one.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
3 * Copyright (C) Pidgin Developers <devel@pidgin.im>
53e4815ef254 Create a new PidginAccountManager that replaces the manually built one.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
4 *
53e4815ef254 Create a new PidginAccountManager that replaces the manually built one.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
5 * Pidgin is the legal property of its developers, whose names are too numerous
53e4815ef254 Create a new PidginAccountManager that replaces the manually built one.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
6 * to list here. Please refer to the COPYRIGHT file distributed with this
53e4815ef254 Create a new PidginAccountManager that replaces the manually built one.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
7 * source distribution.
53e4815ef254 Create a new PidginAccountManager that replaces the manually built one.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
8 *
53e4815ef254 Create a new PidginAccountManager that replaces the manually built one.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
9 * This program is free software; you can redistribute it and/or modify
53e4815ef254 Create a new PidginAccountManager that replaces the manually built one.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
10 * it under the terms of the GNU General Public License as published by
53e4815ef254 Create a new PidginAccountManager that replaces the manually built one.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
11 * the Free Software Foundation; either version 2 of the License, or
53e4815ef254 Create a new PidginAccountManager that replaces the manually built one.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
12 * (at your option) any later version.
53e4815ef254 Create a new PidginAccountManager that replaces the manually built one.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
13 *
53e4815ef254 Create a new PidginAccountManager that replaces the manually built one.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
14 * This program is distributed in the hope that it will be useful,
53e4815ef254 Create a new PidginAccountManager that replaces the manually built one.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
15 * but WITHOUT ANY WARRANTY; without even the implied warranty of
53e4815ef254 Create a new PidginAccountManager that replaces the manually built one.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
16 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
53e4815ef254 Create a new PidginAccountManager that replaces the manually built one.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
17 * GNU General Public License for more details.
53e4815ef254 Create a new PidginAccountManager that replaces the manually built one.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
18 *
53e4815ef254 Create a new PidginAccountManager that replaces the manually built one.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
19 * You should have received a copy of the GNU General Public License
53e4815ef254 Create a new PidginAccountManager that replaces the manually built one.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
20 * along with this program; if not, see <https://www.gnu.org/licenses/>.
53e4815ef254 Create a new PidginAccountManager that replaces the manually built one.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
21 */
53e4815ef254 Create a new PidginAccountManager that replaces the manually built one.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
22
53e4815ef254 Create a new PidginAccountManager that replaces the manually built one.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
23 #include <glib/gi18n.h>
53e4815ef254 Create a new PidginAccountManager that replaces the manually built one.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
24
53e4815ef254 Create a new PidginAccountManager that replaces the manually built one.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
25 #include <purple.h>
53e4815ef254 Create a new PidginAccountManager that replaces the manually built one.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
26
53e4815ef254 Create a new PidginAccountManager that replaces the manually built one.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
27 #include "pidginaccountmanager.h"
53e4815ef254 Create a new PidginAccountManager that replaces the manually built one.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
28
53e4815ef254 Create a new PidginAccountManager that replaces the manually built one.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
29 #include "pidgincore.h"
41483
e3bd18c1769d The start of the new account editor.
Gary Kramlich <grim@reaperworld.com>
parents: 41439
diff changeset
30 #include "pidginaccounteditor.h"
42363
25ccd3d6e30e Rename PidginAccountRow to PidginAccountManagerRow
Gary Kramlich <grim@reaperworld.com>
parents: 42255
diff changeset
31 #include "pidginaccountmanagerrow.h"
41310
53e4815ef254 Create a new PidginAccountManager that replaces the manually built one.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
32
53e4815ef254 Create a new PidginAccountManager that replaces the manually built one.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
33 struct _PidginAccountManager {
53e4815ef254 Create a new PidginAccountManager that replaces the manually built one.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
34 GtkDialog parent;
53e4815ef254 Create a new PidginAccountManager that replaces the manually built one.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
35
42028
f3090252de57 Re-design account manager as a GtkListBox
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41962
diff changeset
36 GtkListBox *list_box;
f3090252de57 Re-design account manager as a GtkListBox
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41962
diff changeset
37 GtkWidget *add;
42151
41b9c5be8965 Embed PidginAccountEditor into PidginAccountManager
Gary Kramlich <grim@reaperworld.com>
parents: 42028
diff changeset
38
41b9c5be8965 Embed PidginAccountEditor into PidginAccountManager
Gary Kramlich <grim@reaperworld.com>
parents: 42028
diff changeset
39 GtkWidget *stack;
41b9c5be8965 Embed PidginAccountEditor into PidginAccountManager
Gary Kramlich <grim@reaperworld.com>
parents: 42028
diff changeset
40 GtkWidget *editor;
41b9c5be8965 Embed PidginAccountEditor into PidginAccountManager
Gary Kramlich <grim@reaperworld.com>
parents: 42028
diff changeset
41
41b9c5be8965 Embed PidginAccountEditor into PidginAccountManager
Gary Kramlich <grim@reaperworld.com>
parents: 42028
diff changeset
42 /* This is used to not go back to the manager when an account was edited
41b9c5be8965 Embed PidginAccountEditor into PidginAccountManager
Gary Kramlich <grim@reaperworld.com>
parents: 42028
diff changeset
43 * directly, via the `accounts->(account)->edit` menu or the
41b9c5be8965 Embed PidginAccountEditor into PidginAccountManager
Gary Kramlich <grim@reaperworld.com>
parents: 42028
diff changeset
44 * `connection error` notification.
41b9c5be8965 Embed PidginAccountEditor into PidginAccountManager
Gary Kramlich <grim@reaperworld.com>
parents: 42028
diff changeset
45 */
41b9c5be8965 Embed PidginAccountEditor into PidginAccountManager
Gary Kramlich <grim@reaperworld.com>
parents: 42028
diff changeset
46 gboolean edit_only;
41310
53e4815ef254 Create a new PidginAccountManager that replaces the manually built one.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
47 };
53e4815ef254 Create a new PidginAccountManager that replaces the manually built one.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
48
53e4815ef254 Create a new PidginAccountManager that replaces the manually built one.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
49 enum {
53e4815ef254 Create a new PidginAccountManager that replaces the manually built one.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
50 RESPONSE_ADD,
53e4815ef254 Create a new PidginAccountManager that replaces the manually built one.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
51 };
53e4815ef254 Create a new PidginAccountManager that replaces the manually built one.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
52
42575
580339aa47cc Make sure all of the final types in pidgin are defined as such
Gary Kramlich <grim@reaperworld.com>
parents: 42363
diff changeset
53 G_DEFINE_FINAL_TYPE(PidginAccountManager, pidgin_account_manager,
580339aa47cc Make sure all of the final types in pidgin are defined as such
Gary Kramlich <grim@reaperworld.com>
parents: 42363
diff changeset
54 GTK_TYPE_DIALOG)
41310
53e4815ef254 Create a new PidginAccountManager that replaces the manually built one.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
55
53e4815ef254 Create a new PidginAccountManager that replaces the manually built one.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
56 /******************************************************************************
53e4815ef254 Create a new PidginAccountManager that replaces the manually built one.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
57 * Helpers
53e4815ef254 Create a new PidginAccountManager that replaces the manually built one.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
58 *****************************************************************************/
42028
f3090252de57 Re-design account manager as a GtkListBox
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41962
diff changeset
59 static GtkWidget *
f3090252de57 Re-design account manager as a GtkListBox
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41962
diff changeset
60 pidgin_account_manager_create_widget(gpointer item,
f3090252de57 Re-design account manager as a GtkListBox
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41962
diff changeset
61 G_GNUC_UNUSED gpointer data)
41310
53e4815ef254 Create a new PidginAccountManager that replaces the manually built one.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
62 {
42028
f3090252de57 Re-design account manager as a GtkListBox
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41962
diff changeset
63 if(!PURPLE_IS_ACCOUNT(item)) {
41310
53e4815ef254 Create a new PidginAccountManager that replaces the manually built one.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
64 return NULL;
53e4815ef254 Create a new PidginAccountManager that replaces the manually built one.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
65 }
53e4815ef254 Create a new PidginAccountManager that replaces the manually built one.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
66
42363
25ccd3d6e30e Rename PidginAccountRow to PidginAccountManagerRow
Gary Kramlich <grim@reaperworld.com>
parents: 42255
diff changeset
67 return pidgin_account_manager_row_new(PURPLE_ACCOUNT(item));
41310
53e4815ef254 Create a new PidginAccountManager that replaces the manually built one.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
68 }
53e4815ef254 Create a new PidginAccountManager that replaces the manually built one.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
69
41818
60b85f276728 Clean up pidgin_account_manager_response_cb to make it a bit more readable
Gary Kramlich <grim@reaperworld.com>
parents: 41817
diff changeset
70 static void
42151
41b9c5be8965 Embed PidginAccountEditor into PidginAccountManager
Gary Kramlich <grim@reaperworld.com>
parents: 42028
diff changeset
71 pidgin_account_manager_real_edit_account(PidginAccountManager *manager,
41b9c5be8965 Embed PidginAccountEditor into PidginAccountManager
Gary Kramlich <grim@reaperworld.com>
parents: 42028
diff changeset
72 PurpleAccount *account,
41b9c5be8965 Embed PidginAccountEditor into PidginAccountManager
Gary Kramlich <grim@reaperworld.com>
parents: 42028
diff changeset
73 gboolean edit_only)
41b9c5be8965 Embed PidginAccountEditor into PidginAccountManager
Gary Kramlich <grim@reaperworld.com>
parents: 42028
diff changeset
74 {
41b9c5be8965 Embed PidginAccountEditor into PidginAccountManager
Gary Kramlich <grim@reaperworld.com>
parents: 42028
diff changeset
75 g_return_if_fail(PIDGIN_IS_ACCOUNT_MANAGER(manager));
41b9c5be8965 Embed PidginAccountEditor into PidginAccountManager
Gary Kramlich <grim@reaperworld.com>
parents: 42028
diff changeset
76
41b9c5be8965 Embed PidginAccountEditor into PidginAccountManager
Gary Kramlich <grim@reaperworld.com>
parents: 42028
diff changeset
77 manager->edit_only = edit_only;
41b9c5be8965 Embed PidginAccountEditor into PidginAccountManager
Gary Kramlich <grim@reaperworld.com>
parents: 42028
diff changeset
78
41b9c5be8965 Embed PidginAccountEditor into PidginAccountManager
Gary Kramlich <grim@reaperworld.com>
parents: 42028
diff changeset
79 pidgin_account_editor_set_account(PIDGIN_ACCOUNT_EDITOR(manager->editor),
41b9c5be8965 Embed PidginAccountEditor into PidginAccountManager
Gary Kramlich <grim@reaperworld.com>
parents: 42028
diff changeset
80 account);
41b9c5be8965 Embed PidginAccountEditor into PidginAccountManager
Gary Kramlich <grim@reaperworld.com>
parents: 42028
diff changeset
81
41b9c5be8965 Embed PidginAccountEditor into PidginAccountManager
Gary Kramlich <grim@reaperworld.com>
parents: 42028
diff changeset
82 gtk_stack_set_visible_child_name(GTK_STACK(manager->stack), "editor-page");
41818
60b85f276728 Clean up pidgin_account_manager_response_cb to make it a bit more readable
Gary Kramlich <grim@reaperworld.com>
parents: 41817
diff changeset
83 }
60b85f276728 Clean up pidgin_account_manager_response_cb to make it a bit more readable
Gary Kramlich <grim@reaperworld.com>
parents: 41817
diff changeset
84
41310
53e4815ef254 Create a new PidginAccountManager that replaces the manually built one.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
85 /******************************************************************************
53e4815ef254 Create a new PidginAccountManager that replaces the manually built one.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
86 * Callbacks
53e4815ef254 Create a new PidginAccountManager that replaces the manually built one.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
87 *****************************************************************************/
42151
41b9c5be8965 Embed PidginAccountEditor into PidginAccountManager
Gary Kramlich <grim@reaperworld.com>
parents: 42028
diff changeset
88 /* This is used by the add button on the placeholder page. */
41b9c5be8965 Embed PidginAccountEditor into PidginAccountManager
Gary Kramlich <grim@reaperworld.com>
parents: 42028
diff changeset
89 static void
41b9c5be8965 Embed PidginAccountEditor into PidginAccountManager
Gary Kramlich <grim@reaperworld.com>
parents: 42028
diff changeset
90 pidgin_account_manager_create_account(G_GNUC_UNUSED GtkButton *self,
41b9c5be8965 Embed PidginAccountEditor into PidginAccountManager
Gary Kramlich <grim@reaperworld.com>
parents: 42028
diff changeset
91 gpointer data)
41b9c5be8965 Embed PidginAccountEditor into PidginAccountManager
Gary Kramlich <grim@reaperworld.com>
parents: 42028
diff changeset
92 {
41b9c5be8965 Embed PidginAccountEditor into PidginAccountManager
Gary Kramlich <grim@reaperworld.com>
parents: 42028
diff changeset
93 PidginAccountManager *manager = data;
41b9c5be8965 Embed PidginAccountEditor into PidginAccountManager
Gary Kramlich <grim@reaperworld.com>
parents: 42028
diff changeset
94
41b9c5be8965 Embed PidginAccountEditor into PidginAccountManager
Gary Kramlich <grim@reaperworld.com>
parents: 42028
diff changeset
95 pidgin_account_manager_real_edit_account(manager, NULL, FALSE);
41b9c5be8965 Embed PidginAccountEditor into PidginAccountManager
Gary Kramlich <grim@reaperworld.com>
parents: 42028
diff changeset
96 }
42028
f3090252de57 Re-design account manager as a GtkListBox
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41962
diff changeset
97
41310
53e4815ef254 Create a new PidginAccountManager that replaces the manually built one.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
98 static void
42028
f3090252de57 Re-design account manager as a GtkListBox
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41962
diff changeset
99 pidgin_account_manager_refresh_add_cb(GListModel *list,
f3090252de57 Re-design account manager as a GtkListBox
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41962
diff changeset
100 G_GNUC_UNUSED guint position,
f3090252de57 Re-design account manager as a GtkListBox
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41962
diff changeset
101 G_GNUC_UNUSED guint removed,
f3090252de57 Re-design account manager as a GtkListBox
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41962
diff changeset
102 G_GNUC_UNUSED guint added,
f3090252de57 Re-design account manager as a GtkListBox
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41962
diff changeset
103 gpointer data)
41310
53e4815ef254 Create a new PidginAccountManager that replaces the manually built one.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
104 {
42028
f3090252de57 Re-design account manager as a GtkListBox
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41962
diff changeset
105 PidginAccountManager *manager = data;
41310
53e4815ef254 Create a new PidginAccountManager that replaces the manually built one.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
106
42028
f3090252de57 Re-design account manager as a GtkListBox
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41962
diff changeset
107 /* If there are no accounts, the placeholder is shown, which includes an
f3090252de57 Re-design account manager as a GtkListBox
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41962
diff changeset
108 * Add button. So hide the one in the button box if that's the case. */
f3090252de57 Re-design account manager as a GtkListBox
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41962
diff changeset
109 gtk_widget_set_visible(manager->add, g_list_model_get_n_items(list) != 0);
41310
53e4815ef254 Create a new PidginAccountManager that replaces the manually built one.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
110 }
53e4815ef254 Create a new PidginAccountManager that replaces the manually built one.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
111
53e4815ef254 Create a new PidginAccountManager that replaces the manually built one.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
112 static void
53e4815ef254 Create a new PidginAccountManager that replaces the manually built one.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
113 pidgin_account_manager_response_cb(GtkDialog *dialog, gint response_id,
53e4815ef254 Create a new PidginAccountManager that replaces the manually built one.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
114 G_GNUC_UNUSED gpointer data)
53e4815ef254 Create a new PidginAccountManager that replaces the manually built one.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
115 {
53e4815ef254 Create a new PidginAccountManager that replaces the manually built one.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
116 PidginAccountManager *manager = PIDGIN_ACCOUNT_MANAGER(dialog);
53e4815ef254 Create a new PidginAccountManager that replaces the manually built one.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
117
53e4815ef254 Create a new PidginAccountManager that replaces the manually built one.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
118 switch(response_id) {
53e4815ef254 Create a new PidginAccountManager that replaces the manually built one.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
119 case RESPONSE_ADD:
42151
41b9c5be8965 Embed PidginAccountEditor into PidginAccountManager
Gary Kramlich <grim@reaperworld.com>
parents: 42028
diff changeset
120 pidgin_account_manager_real_edit_account(manager, NULL, FALSE);
41483
e3bd18c1769d The start of the new account editor.
Gary Kramlich <grim@reaperworld.com>
parents: 41439
diff changeset
121 break;
41596
2f0fec76cfbc Handle delete event in more dialogs (probably all, but can't be too sure.)
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41560
diff changeset
122 case GTK_RESPONSE_CLOSE:
41439
3745e6e9d836 handle GTK_RESPONSE_DELETE_EVENT when closing account manager via window manager
ivanhoe <ivanhoe@fiscari.de>
parents: 41392
diff changeset
123 case GTK_RESPONSE_DELETE_EVENT:
41546
f9c9174d3747 Update PidginAccountManager for GTK4
Gary Kramlich <grim@reaperworld.com>
parents: 41483
diff changeset
124 gtk_window_destroy(GTK_WINDOW(dialog));
41310
53e4815ef254 Create a new PidginAccountManager that replaces the manually built one.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
125 break;
53e4815ef254 Create a new PidginAccountManager that replaces the manually built one.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
126 default:
53e4815ef254 Create a new PidginAccountManager that replaces the manually built one.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
127 g_warning("not sure how you got here...");
53e4815ef254 Create a new PidginAccountManager that replaces the manually built one.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
128 }
53e4815ef254 Create a new PidginAccountManager that replaces the manually built one.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
129 }
53e4815ef254 Create a new PidginAccountManager that replaces the manually built one.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
130
53e4815ef254 Create a new PidginAccountManager that replaces the manually built one.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
131 static void
42028
f3090252de57 Re-design account manager as a GtkListBox
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41962
diff changeset
132 pidgin_account_manager_row_activated_cb(G_GNUC_UNUSED GtkListBox *box,
f3090252de57 Re-design account manager as a GtkListBox
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41962
diff changeset
133 GtkListBoxRow *row,
42151
41b9c5be8965 Embed PidginAccountEditor into PidginAccountManager
Gary Kramlich <grim@reaperworld.com>
parents: 42028
diff changeset
134 gpointer data)
41310
53e4815ef254 Create a new PidginAccountManager that replaces the manually built one.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
135 {
42028
f3090252de57 Re-design account manager as a GtkListBox
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41962
diff changeset
136 PurpleAccount *account = NULL;
42151
41b9c5be8965 Embed PidginAccountEditor into PidginAccountManager
Gary Kramlich <grim@reaperworld.com>
parents: 42028
diff changeset
137 PidginAccountManager *manager = data;
42363
25ccd3d6e30e Rename PidginAccountRow to PidginAccountManagerRow
Gary Kramlich <grim@reaperworld.com>
parents: 42255
diff changeset
138 PidginAccountManagerRow *manager_row = NULL;
41310
53e4815ef254 Create a new PidginAccountManager that replaces the manually built one.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
139
42363
25ccd3d6e30e Rename PidginAccountRow to PidginAccountManagerRow
Gary Kramlich <grim@reaperworld.com>
parents: 42255
diff changeset
140 manager_row = PIDGIN_ACCOUNT_MANAGER_ROW(row);
25ccd3d6e30e Rename PidginAccountRow to PidginAccountManagerRow
Gary Kramlich <grim@reaperworld.com>
parents: 42255
diff changeset
141 account = pidgin_account_manager_row_get_account(manager_row);
42151
41b9c5be8965 Embed PidginAccountEditor into PidginAccountManager
Gary Kramlich <grim@reaperworld.com>
parents: 42028
diff changeset
142
41b9c5be8965 Embed PidginAccountEditor into PidginAccountManager
Gary Kramlich <grim@reaperworld.com>
parents: 42028
diff changeset
143 pidgin_account_manager_real_edit_account(manager, account, FALSE);
41b9c5be8965 Embed PidginAccountEditor into PidginAccountManager
Gary Kramlich <grim@reaperworld.com>
parents: 42028
diff changeset
144 }
41b9c5be8965 Embed PidginAccountEditor into PidginAccountManager
Gary Kramlich <grim@reaperworld.com>
parents: 42028
diff changeset
145
41b9c5be8965 Embed PidginAccountEditor into PidginAccountManager
Gary Kramlich <grim@reaperworld.com>
parents: 42028
diff changeset
146 static void
41b9c5be8965 Embed PidginAccountEditor into PidginAccountManager
Gary Kramlich <grim@reaperworld.com>
parents: 42028
diff changeset
147 pidgin_account_manager_back_clicked_cb(G_GNUC_UNUSED GtkButton *self,
41b9c5be8965 Embed PidginAccountEditor into PidginAccountManager
Gary Kramlich <grim@reaperworld.com>
parents: 42028
diff changeset
148 gpointer data)
41b9c5be8965 Embed PidginAccountEditor into PidginAccountManager
Gary Kramlich <grim@reaperworld.com>
parents: 42028
diff changeset
149 {
41b9c5be8965 Embed PidginAccountEditor into PidginAccountManager
Gary Kramlich <grim@reaperworld.com>
parents: 42028
diff changeset
150 PidginAccountManager *manager = data;
41b9c5be8965 Embed PidginAccountEditor into PidginAccountManager
Gary Kramlich <grim@reaperworld.com>
parents: 42028
diff changeset
151
41b9c5be8965 Embed PidginAccountEditor into PidginAccountManager
Gary Kramlich <grim@reaperworld.com>
parents: 42028
diff changeset
152 #if ADW_CHECK_VERSION(1, 3, 0)
41b9c5be8965 Embed PidginAccountEditor into PidginAccountManager
Gary Kramlich <grim@reaperworld.com>
parents: 42028
diff changeset
153 /* Scroll the editor back to the top of the scrolled window. */
41b9c5be8965 Embed PidginAccountEditor into PidginAccountManager
Gary Kramlich <grim@reaperworld.com>
parents: 42028
diff changeset
154 adw_preferences_page_scroll_to_top(ADW_PREFERENCES_PAGE(manager->editor));
41b9c5be8965 Embed PidginAccountEditor into PidginAccountManager
Gary Kramlich <grim@reaperworld.com>
parents: 42028
diff changeset
155 #endif
41b9c5be8965 Embed PidginAccountEditor into PidginAccountManager
Gary Kramlich <grim@reaperworld.com>
parents: 42028
diff changeset
156
41b9c5be8965 Embed PidginAccountEditor into PidginAccountManager
Gary Kramlich <grim@reaperworld.com>
parents: 42028
diff changeset
157 pidgin_account_manager_show_overview(manager);
41b9c5be8965 Embed PidginAccountEditor into PidginAccountManager
Gary Kramlich <grim@reaperworld.com>
parents: 42028
diff changeset
158 }
41b9c5be8965 Embed PidginAccountEditor into PidginAccountManager
Gary Kramlich <grim@reaperworld.com>
parents: 42028
diff changeset
159
41b9c5be8965 Embed PidginAccountEditor into PidginAccountManager
Gary Kramlich <grim@reaperworld.com>
parents: 42028
diff changeset
160 static void
41b9c5be8965 Embed PidginAccountEditor into PidginAccountManager
Gary Kramlich <grim@reaperworld.com>
parents: 42028
diff changeset
161 pidgin_account_manager_save_clicked_cb(G_GNUC_UNUSED GtkButton *self,
41b9c5be8965 Embed PidginAccountEditor into PidginAccountManager
Gary Kramlich <grim@reaperworld.com>
parents: 42028
diff changeset
162 gpointer data)
41b9c5be8965 Embed PidginAccountEditor into PidginAccountManager
Gary Kramlich <grim@reaperworld.com>
parents: 42028
diff changeset
163 {
41b9c5be8965 Embed PidginAccountEditor into PidginAccountManager
Gary Kramlich <grim@reaperworld.com>
parents: 42028
diff changeset
164 PidginAccountManager *manager = data;
41b9c5be8965 Embed PidginAccountEditor into PidginAccountManager
Gary Kramlich <grim@reaperworld.com>
parents: 42028
diff changeset
165
41b9c5be8965 Embed PidginAccountEditor into PidginAccountManager
Gary Kramlich <grim@reaperworld.com>
parents: 42028
diff changeset
166 pidgin_account_editor_save(PIDGIN_ACCOUNT_EDITOR(manager->editor));
41b9c5be8965 Embed PidginAccountEditor into PidginAccountManager
Gary Kramlich <grim@reaperworld.com>
parents: 42028
diff changeset
167
41b9c5be8965 Embed PidginAccountEditor into PidginAccountManager
Gary Kramlich <grim@reaperworld.com>
parents: 42028
diff changeset
168 if(manager->edit_only) {
41b9c5be8965 Embed PidginAccountEditor into PidginAccountManager
Gary Kramlich <grim@reaperworld.com>
parents: 42028
diff changeset
169 gtk_window_destroy(GTK_WINDOW(manager));
41b9c5be8965 Embed PidginAccountEditor into PidginAccountManager
Gary Kramlich <grim@reaperworld.com>
parents: 42028
diff changeset
170 } else {
42255
642478e32820 Fix a number of bugs in the account editor
Gary Kramlich <grim@reaperworld.com>
parents: 42231
diff changeset
171 pidgin_account_manager_show_overview(manager);
42151
41b9c5be8965 Embed PidginAccountEditor into PidginAccountManager
Gary Kramlich <grim@reaperworld.com>
parents: 42028
diff changeset
172 }
41310
53e4815ef254 Create a new PidginAccountManager that replaces the manually built one.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
173 }
53e4815ef254 Create a new PidginAccountManager that replaces the manually built one.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
174
53e4815ef254 Create a new PidginAccountManager that replaces the manually built one.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
175 /******************************************************************************
53e4815ef254 Create a new PidginAccountManager that replaces the manually built one.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
176 * GObject Implementation
53e4815ef254 Create a new PidginAccountManager that replaces the manually built one.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
177 *****************************************************************************/
53e4815ef254 Create a new PidginAccountManager that replaces the manually built one.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
178 static void
53e4815ef254 Create a new PidginAccountManager that replaces the manually built one.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
179 pidgin_account_manager_init(PidginAccountManager *manager) {
42028
f3090252de57 Re-design account manager as a GtkListBox
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41962
diff changeset
180 GListModel *purple_manager = NULL;
41310
53e4815ef254 Create a new PidginAccountManager that replaces the manually built one.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
181
53e4815ef254 Create a new PidginAccountManager that replaces the manually built one.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
182 gtk_widget_init_template(GTK_WIDGET(manager));
53e4815ef254 Create a new PidginAccountManager that replaces the manually built one.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
183
42028
f3090252de57 Re-design account manager as a GtkListBox
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41962
diff changeset
184 purple_manager = purple_account_manager_get_default_as_model();
f3090252de57 Re-design account manager as a GtkListBox
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41962
diff changeset
185 gtk_list_box_bind_model(manager->list_box, purple_manager,
f3090252de57 Re-design account manager as a GtkListBox
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41962
diff changeset
186 pidgin_account_manager_create_widget, NULL, NULL);
f3090252de57 Re-design account manager as a GtkListBox
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41962
diff changeset
187 g_signal_connect_object(purple_manager, "items-changed",
f3090252de57 Re-design account manager as a GtkListBox
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41962
diff changeset
188 G_CALLBACK(pidgin_account_manager_refresh_add_cb),
41310
53e4815ef254 Create a new PidginAccountManager that replaces the manually built one.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
189 manager, 0);
42028
f3090252de57 Re-design account manager as a GtkListBox
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41962
diff changeset
190 pidgin_account_manager_refresh_add_cb(purple_manager, 0, 0, 0, manager);
41310
53e4815ef254 Create a new PidginAccountManager that replaces the manually built one.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
191 }
53e4815ef254 Create a new PidginAccountManager that replaces the manually built one.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
192
53e4815ef254 Create a new PidginAccountManager that replaces the manually built one.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
193 static void
53e4815ef254 Create a new PidginAccountManager that replaces the manually built one.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
194 pidgin_account_manager_class_init(PidginAccountManagerClass *klass) {
53e4815ef254 Create a new PidginAccountManager that replaces the manually built one.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
195 GtkWidgetClass *widget_class = GTK_WIDGET_CLASS(klass);
53e4815ef254 Create a new PidginAccountManager that replaces the manually built one.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
196
53e4815ef254 Create a new PidginAccountManager that replaces the manually built one.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
197 gtk_widget_class_set_template_from_resource(
53e4815ef254 Create a new PidginAccountManager that replaces the manually built one.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
198 widget_class,
53e4815ef254 Create a new PidginAccountManager that replaces the manually built one.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
199 "/im/pidgin/Pidgin3/Accounts/manager.ui"
53e4815ef254 Create a new PidginAccountManager that replaces the manually built one.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
200 );
53e4815ef254 Create a new PidginAccountManager that replaces the manually built one.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
201
53e4815ef254 Create a new PidginAccountManager that replaces the manually built one.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
202 gtk_widget_class_bind_template_child(widget_class, PidginAccountManager,
42028
f3090252de57 Re-design account manager as a GtkListBox
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41962
diff changeset
203 list_box);
41310
53e4815ef254 Create a new PidginAccountManager that replaces the manually built one.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
204 gtk_widget_class_bind_template_child(widget_class, PidginAccountManager,
42028
f3090252de57 Re-design account manager as a GtkListBox
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41962
diff changeset
205 add);
42151
41b9c5be8965 Embed PidginAccountEditor into PidginAccountManager
Gary Kramlich <grim@reaperworld.com>
parents: 42028
diff changeset
206 gtk_widget_class_bind_template_child(widget_class, PidginAccountManager,
41b9c5be8965 Embed PidginAccountEditor into PidginAccountManager
Gary Kramlich <grim@reaperworld.com>
parents: 42028
diff changeset
207 stack);
41b9c5be8965 Embed PidginAccountEditor into PidginAccountManager
Gary Kramlich <grim@reaperworld.com>
parents: 42028
diff changeset
208 gtk_widget_class_bind_template_child(widget_class, PidginAccountManager,
41b9c5be8965 Embed PidginAccountEditor into PidginAccountManager
Gary Kramlich <grim@reaperworld.com>
parents: 42028
diff changeset
209 editor);
41310
53e4815ef254 Create a new PidginAccountManager that replaces the manually built one.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
210
53e4815ef254 Create a new PidginAccountManager that replaces the manually built one.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
211 gtk_widget_class_bind_template_callback(widget_class,
53e4815ef254 Create a new PidginAccountManager that replaces the manually built one.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
212 pidgin_account_manager_response_cb);
53e4815ef254 Create a new PidginAccountManager that replaces the manually built one.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
213 gtk_widget_class_bind_template_callback(widget_class,
53e4815ef254 Create a new PidginAccountManager that replaces the manually built one.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
214 pidgin_account_manager_row_activated_cb);
53e4815ef254 Create a new PidginAccountManager that replaces the manually built one.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
215 gtk_widget_class_bind_template_callback(widget_class,
42028
f3090252de57 Re-design account manager as a GtkListBox
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41962
diff changeset
216 pidgin_account_manager_create_account);
42151
41b9c5be8965 Embed PidginAccountEditor into PidginAccountManager
Gary Kramlich <grim@reaperworld.com>
parents: 42028
diff changeset
217 gtk_widget_class_bind_template_callback(widget_class,
41b9c5be8965 Embed PidginAccountEditor into PidginAccountManager
Gary Kramlich <grim@reaperworld.com>
parents: 42028
diff changeset
218 pidgin_account_manager_back_clicked_cb);
41b9c5be8965 Embed PidginAccountEditor into PidginAccountManager
Gary Kramlich <grim@reaperworld.com>
parents: 42028
diff changeset
219 gtk_widget_class_bind_template_callback(widget_class,
41b9c5be8965 Embed PidginAccountEditor into PidginAccountManager
Gary Kramlich <grim@reaperworld.com>
parents: 42028
diff changeset
220 pidgin_account_manager_save_clicked_cb);
41310
53e4815ef254 Create a new PidginAccountManager that replaces the manually built one.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
221 }
53e4815ef254 Create a new PidginAccountManager that replaces the manually built one.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
222
53e4815ef254 Create a new PidginAccountManager that replaces the manually built one.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
223 /******************************************************************************
53e4815ef254 Create a new PidginAccountManager that replaces the manually built one.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
224 * Public API
53e4815ef254 Create a new PidginAccountManager that replaces the manually built one.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
225 *****************************************************************************/
53e4815ef254 Create a new PidginAccountManager that replaces the manually built one.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
226 GtkWidget *
53e4815ef254 Create a new PidginAccountManager that replaces the manually built one.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
227 pidgin_account_manager_new(void) {
53e4815ef254 Create a new PidginAccountManager that replaces the manually built one.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
228 return g_object_new(PIDGIN_TYPE_ACCOUNT_MANAGER, NULL);
53e4815ef254 Create a new PidginAccountManager that replaces the manually built one.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
229 }
42151
41b9c5be8965 Embed PidginAccountEditor into PidginAccountManager
Gary Kramlich <grim@reaperworld.com>
parents: 42028
diff changeset
230
41b9c5be8965 Embed PidginAccountEditor into PidginAccountManager
Gary Kramlich <grim@reaperworld.com>
parents: 42028
diff changeset
231 void
41b9c5be8965 Embed PidginAccountEditor into PidginAccountManager
Gary Kramlich <grim@reaperworld.com>
parents: 42028
diff changeset
232 pidgin_account_manager_show_overview(PidginAccountManager *manager) {
41b9c5be8965 Embed PidginAccountEditor into PidginAccountManager
Gary Kramlich <grim@reaperworld.com>
parents: 42028
diff changeset
233 g_return_if_fail(PIDGIN_IS_ACCOUNT_MANAGER(manager));
41b9c5be8965 Embed PidginAccountEditor into PidginAccountManager
Gary Kramlich <grim@reaperworld.com>
parents: 42028
diff changeset
234
41b9c5be8965 Embed PidginAccountEditor into PidginAccountManager
Gary Kramlich <grim@reaperworld.com>
parents: 42028
diff changeset
235 gtk_stack_set_visible_child_name(GTK_STACK(manager->stack), "overview");
42255
642478e32820 Fix a number of bugs in the account editor
Gary Kramlich <grim@reaperworld.com>
parents: 42231
diff changeset
236
642478e32820 Fix a number of bugs in the account editor
Gary Kramlich <grim@reaperworld.com>
parents: 42231
diff changeset
237 pidgin_account_editor_set_account(PIDGIN_ACCOUNT_EDITOR(manager->editor),
642478e32820 Fix a number of bugs in the account editor
Gary Kramlich <grim@reaperworld.com>
parents: 42231
diff changeset
238 NULL);
42151
41b9c5be8965 Embed PidginAccountEditor into PidginAccountManager
Gary Kramlich <grim@reaperworld.com>
parents: 42028
diff changeset
239 }
41b9c5be8965 Embed PidginAccountEditor into PidginAccountManager
Gary Kramlich <grim@reaperworld.com>
parents: 42028
diff changeset
240
41b9c5be8965 Embed PidginAccountEditor into PidginAccountManager
Gary Kramlich <grim@reaperworld.com>
parents: 42028
diff changeset
241 void
41b9c5be8965 Embed PidginAccountEditor into PidginAccountManager
Gary Kramlich <grim@reaperworld.com>
parents: 42028
diff changeset
242 pidgin_account_manager_edit_account(PidginAccountManager *manager,
41b9c5be8965 Embed PidginAccountEditor into PidginAccountManager
Gary Kramlich <grim@reaperworld.com>
parents: 42028
diff changeset
243 PurpleAccount *account)
41b9c5be8965 Embed PidginAccountEditor into PidginAccountManager
Gary Kramlich <grim@reaperworld.com>
parents: 42028
diff changeset
244 {
41b9c5be8965 Embed PidginAccountEditor into PidginAccountManager
Gary Kramlich <grim@reaperworld.com>
parents: 42028
diff changeset
245 g_return_if_fail(PIDGIN_IS_ACCOUNT_MANAGER(manager));
41b9c5be8965 Embed PidginAccountEditor into PidginAccountManager
Gary Kramlich <grim@reaperworld.com>
parents: 42028
diff changeset
246 g_return_if_fail(PURPLE_IS_ACCOUNT(account));
41b9c5be8965 Embed PidginAccountEditor into PidginAccountManager
Gary Kramlich <grim@reaperworld.com>
parents: 42028
diff changeset
247
41b9c5be8965 Embed PidginAccountEditor into PidginAccountManager
Gary Kramlich <grim@reaperworld.com>
parents: 42028
diff changeset
248 pidgin_account_manager_real_edit_account(manager, account, TRUE);
41b9c5be8965 Embed PidginAccountEditor into PidginAccountManager
Gary Kramlich <grim@reaperworld.com>
parents: 42028
diff changeset
249 }

mercurial