pidgin/pidginaccountrow.c

Tue, 17 Jan 2023 02:29:19 -0600

author
Elliott Sales de Andrade <quantum.analyst@gmail.com>
date
Tue, 17 Jan 2023 02:29:19 -0600
changeset 42028
f3090252de57
child 42049
16d2e16bd24f
permissions
-rw-r--r--

Re-design account manager as a GtkListBox

Moves to a nicely spaced `GtkListBox`. The avatar is implemented using `AdwAvatar` solely for the autogenerated colour for accounts without an icon to give them some uniqueness, but it could be moved to `PidginAvatar`.

As a followup, I'd probably move the Account Editors from a separate dialog to stack within the manager, similar to how the Plugin dialog works. Neither the previous manager nor this one prevents you from opening two editors for an account, but this would remove that issue as well.

Testing Done:
Toggled enabled/disabled to check that account status worked and was displayed. Added a few bogus accounts to confirm that errors are shown. Activated a row to show the editor. Hit the delete button and cancelled/approved and confirmed that account was kept/removed.

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

42028
f3090252de57 Re-design account manager as a GtkListBox
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents:
diff changeset
1 /*
f3090252de57 Re-design account manager as a GtkListBox
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents:
diff changeset
2 * Pidgin - Internet Messenger
f3090252de57 Re-design account manager as a GtkListBox
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents:
diff changeset
3 * Copyright (C) Pidgin Developers <devel@pidgin.im>
f3090252de57 Re-design account manager as a GtkListBox
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents:
diff changeset
4 *
f3090252de57 Re-design account manager as a GtkListBox
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents:
diff changeset
5 * Pidgin is the legal property of its developers, whose names are too numerous
f3090252de57 Re-design account manager as a GtkListBox
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents:
diff changeset
6 * to list here. Please refer to the COPYRIGHT file distributed with this
f3090252de57 Re-design account manager as a GtkListBox
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents:
diff changeset
7 * source distribution.
f3090252de57 Re-design account manager as a GtkListBox
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents:
diff changeset
8 *
f3090252de57 Re-design account manager as a GtkListBox
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents:
diff changeset
9 * This program is free software; you can redistribute it and/or modify
f3090252de57 Re-design account manager as a GtkListBox
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents:
diff changeset
10 * it under the terms of the GNU General Public License as published by
f3090252de57 Re-design account manager as a GtkListBox
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents:
diff changeset
11 * the Free Software Foundation; either version 2 of the License, or
f3090252de57 Re-design account manager as a GtkListBox
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents:
diff changeset
12 * (at your option) any later version.
f3090252de57 Re-design account manager as a GtkListBox
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents:
diff changeset
13 *
f3090252de57 Re-design account manager as a GtkListBox
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents:
diff changeset
14 * This program is distributed in the hope that it will be useful,
f3090252de57 Re-design account manager as a GtkListBox
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents:
diff changeset
15 * but WITHOUT ANY WARRANTY; without even the implied warranty of
f3090252de57 Re-design account manager as a GtkListBox
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents:
diff changeset
16 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
f3090252de57 Re-design account manager as a GtkListBox
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents:
diff changeset
17 * GNU General Public License for more details.
f3090252de57 Re-design account manager as a GtkListBox
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents:
diff changeset
18 *
f3090252de57 Re-design account manager as a GtkListBox
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents:
diff changeset
19 * You should have received a copy of the GNU General Public License
f3090252de57 Re-design account manager as a GtkListBox
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents:
diff changeset
20 * along with this program; if not, see <https://www.gnu.org/licenses/>.
f3090252de57 Re-design account manager as a GtkListBox
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents:
diff changeset
21 */
f3090252de57 Re-design account manager as a GtkListBox
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents:
diff changeset
22
f3090252de57 Re-design account manager as a GtkListBox
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents:
diff changeset
23 #include <glib/gi18n-lib.h>
f3090252de57 Re-design account manager as a GtkListBox
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents:
diff changeset
24
f3090252de57 Re-design account manager as a GtkListBox
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents:
diff changeset
25 #include <adwaita.h>
f3090252de57 Re-design account manager as a GtkListBox
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents:
diff changeset
26
f3090252de57 Re-design account manager as a GtkListBox
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents:
diff changeset
27 #include "pidgin/pidginaccountrow.h"
f3090252de57 Re-design account manager as a GtkListBox
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents:
diff changeset
28
f3090252de57 Re-design account manager as a GtkListBox
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents:
diff changeset
29 struct _PidginAccountRow {
f3090252de57 Re-design account manager as a GtkListBox
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents:
diff changeset
30 GtkListBoxRow parent;
f3090252de57 Re-design account manager as a GtkListBox
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents:
diff changeset
31
f3090252de57 Re-design account manager as a GtkListBox
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents:
diff changeset
32 PurpleAccount *account;
f3090252de57 Re-design account manager as a GtkListBox
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents:
diff changeset
33
f3090252de57 Re-design account manager as a GtkListBox
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents:
diff changeset
34 GtkSwitch *enabled;
f3090252de57 Re-design account manager as a GtkListBox
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents:
diff changeset
35 AdwAvatar *avatar;
f3090252de57 Re-design account manager as a GtkListBox
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents:
diff changeset
36 GtkLabel *name;
f3090252de57 Re-design account manager as a GtkListBox
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents:
diff changeset
37 GtkLabel *status;
f3090252de57 Re-design account manager as a GtkListBox
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents:
diff changeset
38 };
f3090252de57 Re-design account manager as a GtkListBox
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents:
diff changeset
39
f3090252de57 Re-design account manager as a GtkListBox
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents:
diff changeset
40 enum {
f3090252de57 Re-design account manager as a GtkListBox
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents:
diff changeset
41 PROP_0,
f3090252de57 Re-design account manager as a GtkListBox
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents:
diff changeset
42 PROP_ACCOUNT,
f3090252de57 Re-design account manager as a GtkListBox
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents:
diff changeset
43 N_PROPERTIES
f3090252de57 Re-design account manager as a GtkListBox
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents:
diff changeset
44 };
f3090252de57 Re-design account manager as a GtkListBox
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents:
diff changeset
45 static GParamSpec *properties[N_PROPERTIES] = { NULL, };
f3090252de57 Re-design account manager as a GtkListBox
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents:
diff changeset
46
f3090252de57 Re-design account manager as a GtkListBox
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents:
diff changeset
47 /******************************************************************************
f3090252de57 Re-design account manager as a GtkListBox
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents:
diff changeset
48 * Helpers
f3090252de57 Re-design account manager as a GtkListBox
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents:
diff changeset
49 *****************************************************************************/
f3090252de57 Re-design account manager as a GtkListBox
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents:
diff changeset
50 static void
f3090252de57 Re-design account manager as a GtkListBox
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents:
diff changeset
51 pidgin_account_row_refresh_buddy_icon(PidginAccountRow *row) {
f3090252de57 Re-design account manager as a GtkListBox
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents:
diff changeset
52 PurpleImage *image = NULL;
f3090252de57 Re-design account manager as a GtkListBox
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents:
diff changeset
53
f3090252de57 Re-design account manager as a GtkListBox
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents:
diff changeset
54 #warning FIX call this in the right place when buddy icons are better and can autorefresh
f3090252de57 Re-design account manager as a GtkListBox
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents:
diff changeset
55 if(!PURPLE_IS_ACCOUNT(row->account)) {
f3090252de57 Re-design account manager as a GtkListBox
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents:
diff changeset
56 return;
f3090252de57 Re-design account manager as a GtkListBox
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents:
diff changeset
57 }
f3090252de57 Re-design account manager as a GtkListBox
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents:
diff changeset
58
f3090252de57 Re-design account manager as a GtkListBox
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents:
diff changeset
59 image = purple_buddy_icons_find_account_icon(row->account);
f3090252de57 Re-design account manager as a GtkListBox
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents:
diff changeset
60 if(PURPLE_IS_IMAGE(image)) {
f3090252de57 Re-design account manager as a GtkListBox
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents:
diff changeset
61 GdkTexture *texture = NULL;
f3090252de57 Re-design account manager as a GtkListBox
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents:
diff changeset
62 GBytes *bytes = NULL;
f3090252de57 Re-design account manager as a GtkListBox
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents:
diff changeset
63
f3090252de57 Re-design account manager as a GtkListBox
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents:
diff changeset
64 bytes = purple_image_get_contents(image);
f3090252de57 Re-design account manager as a GtkListBox
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents:
diff changeset
65 texture = gdk_texture_new_from_bytes(bytes, NULL);
f3090252de57 Re-design account manager as a GtkListBox
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents:
diff changeset
66 g_bytes_unref(bytes);
f3090252de57 Re-design account manager as a GtkListBox
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents:
diff changeset
67
f3090252de57 Re-design account manager as a GtkListBox
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents:
diff changeset
68 if(GDK_IS_TEXTURE(texture)) {
f3090252de57 Re-design account manager as a GtkListBox
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents:
diff changeset
69 adw_avatar_set_custom_image(row->avatar, GDK_PAINTABLE(texture));
f3090252de57 Re-design account manager as a GtkListBox
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents:
diff changeset
70 g_object_unref(texture);
f3090252de57 Re-design account manager as a GtkListBox
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents:
diff changeset
71 }
f3090252de57 Re-design account manager as a GtkListBox
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents:
diff changeset
72 }
f3090252de57 Re-design account manager as a GtkListBox
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents:
diff changeset
73 }
f3090252de57 Re-design account manager as a GtkListBox
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents:
diff changeset
74
f3090252de57 Re-design account manager as a GtkListBox
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents:
diff changeset
75 static void
f3090252de57 Re-design account manager as a GtkListBox
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents:
diff changeset
76 pidgin_account_row_refresh_status(PidginAccountRow *row) {
f3090252de57 Re-design account manager as a GtkListBox
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents:
diff changeset
77 const char *status = NULL;
f3090252de57 Re-design account manager as a GtkListBox
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents:
diff changeset
78 gboolean connected = FALSE;
f3090252de57 Re-design account manager as a GtkListBox
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents:
diff changeset
79 gboolean error = FALSE;
f3090252de57 Re-design account manager as a GtkListBox
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents:
diff changeset
80
f3090252de57 Re-design account manager as a GtkListBox
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents:
diff changeset
81 if(PURPLE_IS_ACCOUNT(row->account)) {
f3090252de57 Re-design account manager as a GtkListBox
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents:
diff changeset
82 if(!purple_account_get_enabled(row->account)) {
f3090252de57 Re-design account manager as a GtkListBox
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents:
diff changeset
83 status = _("Disabled");
f3090252de57 Re-design account manager as a GtkListBox
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents:
diff changeset
84 } else {
f3090252de57 Re-design account manager as a GtkListBox
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents:
diff changeset
85 const PurpleConnectionErrorInfo *error_info = NULL;
f3090252de57 Re-design account manager as a GtkListBox
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents:
diff changeset
86
f3090252de57 Re-design account manager as a GtkListBox
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents:
diff changeset
87 error_info = purple_account_get_current_error(row->account);
f3090252de57 Re-design account manager as a GtkListBox
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents:
diff changeset
88 if(error_info != NULL) {
f3090252de57 Re-design account manager as a GtkListBox
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents:
diff changeset
89 status = error_info->description;
f3090252de57 Re-design account manager as a GtkListBox
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents:
diff changeset
90 error = TRUE;
f3090252de57 Re-design account manager as a GtkListBox
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents:
diff changeset
91 } else {
f3090252de57 Re-design account manager as a GtkListBox
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents:
diff changeset
92 PurpleConnection *connection = NULL;
f3090252de57 Re-design account manager as a GtkListBox
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents:
diff changeset
93
f3090252de57 Re-design account manager as a GtkListBox
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents:
diff changeset
94 connection = purple_account_get_connection(row->account);
f3090252de57 Re-design account manager as a GtkListBox
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents:
diff changeset
95 if(PURPLE_IS_CONNECTION(connection)) {
f3090252de57 Re-design account manager as a GtkListBox
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents:
diff changeset
96 switch(purple_connection_get_state(connection)) {
f3090252de57 Re-design account manager as a GtkListBox
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents:
diff changeset
97 case PURPLE_CONNECTION_STATE_DISCONNECTED:
f3090252de57 Re-design account manager as a GtkListBox
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents:
diff changeset
98 status = _("Disconnected");
f3090252de57 Re-design account manager as a GtkListBox
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents:
diff changeset
99 break;
f3090252de57 Re-design account manager as a GtkListBox
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents:
diff changeset
100 case PURPLE_CONNECTION_STATE_DISCONNECTING:
f3090252de57 Re-design account manager as a GtkListBox
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents:
diff changeset
101 status = _("Disconnecting...");
f3090252de57 Re-design account manager as a GtkListBox
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents:
diff changeset
102 break;
f3090252de57 Re-design account manager as a GtkListBox
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents:
diff changeset
103 case PURPLE_CONNECTION_STATE_CONNECTED:
f3090252de57 Re-design account manager as a GtkListBox
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents:
diff changeset
104 status = _("Connected");
f3090252de57 Re-design account manager as a GtkListBox
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents:
diff changeset
105 connected = TRUE;
f3090252de57 Re-design account manager as a GtkListBox
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents:
diff changeset
106 break;
f3090252de57 Re-design account manager as a GtkListBox
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents:
diff changeset
107 case PURPLE_CONNECTION_STATE_CONNECTING:
f3090252de57 Re-design account manager as a GtkListBox
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents:
diff changeset
108 status = _("Connecting...");
f3090252de57 Re-design account manager as a GtkListBox
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents:
diff changeset
109 break;
f3090252de57 Re-design account manager as a GtkListBox
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents:
diff changeset
110 }
f3090252de57 Re-design account manager as a GtkListBox
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents:
diff changeset
111 }
f3090252de57 Re-design account manager as a GtkListBox
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents:
diff changeset
112 }
f3090252de57 Re-design account manager as a GtkListBox
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents:
diff changeset
113 }
f3090252de57 Re-design account manager as a GtkListBox
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents:
diff changeset
114 }
f3090252de57 Re-design account manager as a GtkListBox
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents:
diff changeset
115
f3090252de57 Re-design account manager as a GtkListBox
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents:
diff changeset
116 gtk_switch_set_state(row->enabled, connected);
f3090252de57 Re-design account manager as a GtkListBox
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents:
diff changeset
117 gtk_label_set_text(row->status, status);
f3090252de57 Re-design account manager as a GtkListBox
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents:
diff changeset
118 if(error) {
f3090252de57 Re-design account manager as a GtkListBox
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents:
diff changeset
119 gtk_widget_add_css_class(GTK_WIDGET(row->status), "error");
f3090252de57 Re-design account manager as a GtkListBox
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents:
diff changeset
120 } else {
f3090252de57 Re-design account manager as a GtkListBox
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents:
diff changeset
121 gtk_widget_remove_css_class(GTK_WIDGET(row->status), "error");
f3090252de57 Re-design account manager as a GtkListBox
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents:
diff changeset
122 }
f3090252de57 Re-design account manager as a GtkListBox
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents:
diff changeset
123 }
f3090252de57 Re-design account manager as a GtkListBox
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents:
diff changeset
124
f3090252de57 Re-design account manager as a GtkListBox
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents:
diff changeset
125 /******************************************************************************
f3090252de57 Re-design account manager as a GtkListBox
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents:
diff changeset
126 * Callbacks
f3090252de57 Re-design account manager as a GtkListBox
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents:
diff changeset
127 *****************************************************************************/
f3090252de57 Re-design account manager as a GtkListBox
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents:
diff changeset
128 static void
f3090252de57 Re-design account manager as a GtkListBox
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents:
diff changeset
129 pidgin_account_row_state_changed_cb(G_GNUC_UNUSED GObject *obj,
f3090252de57 Re-design account manager as a GtkListBox
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents:
diff changeset
130 G_GNUC_UNUSED GParamSpec *pspec,
f3090252de57 Re-design account manager as a GtkListBox
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents:
diff changeset
131 gpointer data)
f3090252de57 Re-design account manager as a GtkListBox
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents:
diff changeset
132 {
f3090252de57 Re-design account manager as a GtkListBox
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents:
diff changeset
133 PidginAccountRow *row = data;
f3090252de57 Re-design account manager as a GtkListBox
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents:
diff changeset
134
f3090252de57 Re-design account manager as a GtkListBox
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents:
diff changeset
135 pidgin_account_row_refresh_status(row);
f3090252de57 Re-design account manager as a GtkListBox
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents:
diff changeset
136 }
f3090252de57 Re-design account manager as a GtkListBox
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents:
diff changeset
137
f3090252de57 Re-design account manager as a GtkListBox
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents:
diff changeset
138 static void
f3090252de57 Re-design account manager as a GtkListBox
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents:
diff changeset
139 pidgin_account_row_connection_changed_cb(G_GNUC_UNUSED GObject *obj,
f3090252de57 Re-design account manager as a GtkListBox
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents:
diff changeset
140 G_GNUC_UNUSED GParamSpec *pspec,
f3090252de57 Re-design account manager as a GtkListBox
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents:
diff changeset
141 gpointer data)
f3090252de57 Re-design account manager as a GtkListBox
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents:
diff changeset
142 {
f3090252de57 Re-design account manager as a GtkListBox
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents:
diff changeset
143 PidginAccountRow *row = data;
f3090252de57 Re-design account manager as a GtkListBox
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents:
diff changeset
144 PurpleConnection *connection = NULL;
f3090252de57 Re-design account manager as a GtkListBox
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents:
diff changeset
145
f3090252de57 Re-design account manager as a GtkListBox
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents:
diff changeset
146 connection = purple_account_get_connection(row->account);
f3090252de57 Re-design account manager as a GtkListBox
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents:
diff changeset
147 if(PURPLE_IS_CONNECTION(connection)) {
f3090252de57 Re-design account manager as a GtkListBox
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents:
diff changeset
148 g_signal_connect_object(connection, "notify::state",
f3090252de57 Re-design account manager as a GtkListBox
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents:
diff changeset
149 G_CALLBACK(pidgin_account_row_state_changed_cb),
f3090252de57 Re-design account manager as a GtkListBox
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents:
diff changeset
150 row, 0);
f3090252de57 Re-design account manager as a GtkListBox
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents:
diff changeset
151 }
f3090252de57 Re-design account manager as a GtkListBox
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents:
diff changeset
152
f3090252de57 Re-design account manager as a GtkListBox
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents:
diff changeset
153 pidgin_account_row_refresh_status(row);
f3090252de57 Re-design account manager as a GtkListBox
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents:
diff changeset
154 }
f3090252de57 Re-design account manager as a GtkListBox
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents:
diff changeset
155
f3090252de57 Re-design account manager as a GtkListBox
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents:
diff changeset
156 static void
f3090252de57 Re-design account manager as a GtkListBox
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents:
diff changeset
157 pidgin_account_row_enable_state_set_cb(G_GNUC_UNUSED GtkSwitch *sw,
f3090252de57 Re-design account manager as a GtkListBox
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents:
diff changeset
158 gboolean state, gpointer data)
f3090252de57 Re-design account manager as a GtkListBox
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents:
diff changeset
159 {
f3090252de57 Re-design account manager as a GtkListBox
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents:
diff changeset
160 PidginAccountRow *row = data;
f3090252de57 Re-design account manager as a GtkListBox
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents:
diff changeset
161 PurpleAccount *account = row->account;
f3090252de57 Re-design account manager as a GtkListBox
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents:
diff changeset
162
f3090252de57 Re-design account manager as a GtkListBox
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents:
diff changeset
163 if(purple_account_get_enabled(account) == state) {
f3090252de57 Re-design account manager as a GtkListBox
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents:
diff changeset
164 return;
f3090252de57 Re-design account manager as a GtkListBox
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents:
diff changeset
165 }
f3090252de57 Re-design account manager as a GtkListBox
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents:
diff changeset
166
f3090252de57 Re-design account manager as a GtkListBox
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents:
diff changeset
167 /* The account was just enabled, so set its status. */
f3090252de57 Re-design account manager as a GtkListBox
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents:
diff changeset
168 if(state) {
f3090252de57 Re-design account manager as a GtkListBox
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents:
diff changeset
169 PurpleSavedStatus *status = purple_savedstatus_get_current();
f3090252de57 Re-design account manager as a GtkListBox
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents:
diff changeset
170 purple_savedstatus_activate_for_account(status, account);
f3090252de57 Re-design account manager as a GtkListBox
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents:
diff changeset
171 }
f3090252de57 Re-design account manager as a GtkListBox
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents:
diff changeset
172
f3090252de57 Re-design account manager as a GtkListBox
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents:
diff changeset
173 purple_account_set_enabled(account, state);
f3090252de57 Re-design account manager as a GtkListBox
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents:
diff changeset
174 }
f3090252de57 Re-design account manager as a GtkListBox
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents:
diff changeset
175
f3090252de57 Re-design account manager as a GtkListBox
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents:
diff changeset
176 static char *
f3090252de57 Re-design account manager as a GtkListBox
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents:
diff changeset
177 pidgin_account_row_buddyicon_cb(G_GNUC_UNUSED GObject *self,
f3090252de57 Re-design account manager as a GtkListBox
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents:
diff changeset
178 PurpleAccount *account,
f3090252de57 Re-design account manager as a GtkListBox
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents:
diff changeset
179 G_GNUC_UNUSED gpointer data)
f3090252de57 Re-design account manager as a GtkListBox
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents:
diff changeset
180 {
f3090252de57 Re-design account manager as a GtkListBox
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents:
diff changeset
181 const char *buddy_icon_path = NULL;
f3090252de57 Re-design account manager as a GtkListBox
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents:
diff changeset
182 char *path = NULL;
f3090252de57 Re-design account manager as a GtkListBox
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents:
diff changeset
183
f3090252de57 Re-design account manager as a GtkListBox
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents:
diff changeset
184 if(!PURPLE_IS_ACCOUNT(account)) {
f3090252de57 Re-design account manager as a GtkListBox
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents:
diff changeset
185 return NULL;
f3090252de57 Re-design account manager as a GtkListBox
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents:
diff changeset
186 }
f3090252de57 Re-design account manager as a GtkListBox
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents:
diff changeset
187
f3090252de57 Re-design account manager as a GtkListBox
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents:
diff changeset
188 buddy_icon_path = purple_account_get_buddy_icon_path(account);
f3090252de57 Re-design account manager as a GtkListBox
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents:
diff changeset
189 if(buddy_icon_path != NULL) {
f3090252de57 Re-design account manager as a GtkListBox
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents:
diff changeset
190 path = g_strdup_printf("file://%s", buddy_icon_path);
f3090252de57 Re-design account manager as a GtkListBox
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents:
diff changeset
191 }
f3090252de57 Re-design account manager as a GtkListBox
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents:
diff changeset
192
f3090252de57 Re-design account manager as a GtkListBox
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents:
diff changeset
193 return path;
f3090252de57 Re-design account manager as a GtkListBox
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents:
diff changeset
194 }
f3090252de57 Re-design account manager as a GtkListBox
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents:
diff changeset
195
f3090252de57 Re-design account manager as a GtkListBox
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents:
diff changeset
196 static char *
f3090252de57 Re-design account manager as a GtkListBox
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents:
diff changeset
197 pidgin_account_row_protocol_name_cb(G_GNUC_UNUSED GObject *self,
f3090252de57 Re-design account manager as a GtkListBox
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents:
diff changeset
198 PurpleAccount *account,
f3090252de57 Re-design account manager as a GtkListBox
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents:
diff changeset
199 G_GNUC_UNUSED gpointer data)
f3090252de57 Re-design account manager as a GtkListBox
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents:
diff changeset
200 {
f3090252de57 Re-design account manager as a GtkListBox
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents:
diff changeset
201 const char *name = _("Unknown");
f3090252de57 Re-design account manager as a GtkListBox
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents:
diff changeset
202
f3090252de57 Re-design account manager as a GtkListBox
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents:
diff changeset
203 if(PURPLE_IS_ACCOUNT(account)) {
f3090252de57 Re-design account manager as a GtkListBox
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents:
diff changeset
204 PurpleProtocol *protocol = purple_account_get_protocol(account);
f3090252de57 Re-design account manager as a GtkListBox
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents:
diff changeset
205 if(PURPLE_IS_PROTOCOL(protocol)) {
f3090252de57 Re-design account manager as a GtkListBox
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents:
diff changeset
206 name = purple_protocol_get_name(protocol);
f3090252de57 Re-design account manager as a GtkListBox
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents:
diff changeset
207 }
f3090252de57 Re-design account manager as a GtkListBox
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents:
diff changeset
208 }
f3090252de57 Re-design account manager as a GtkListBox
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents:
diff changeset
209
f3090252de57 Re-design account manager as a GtkListBox
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents:
diff changeset
210 return g_strdup(name);
f3090252de57 Re-design account manager as a GtkListBox
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents:
diff changeset
211 }
f3090252de57 Re-design account manager as a GtkListBox
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents:
diff changeset
212
f3090252de57 Re-design account manager as a GtkListBox
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents:
diff changeset
213 static char *
f3090252de57 Re-design account manager as a GtkListBox
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents:
diff changeset
214 pidgin_account_row_protocol_icon_cb(G_GNUC_UNUSED GObject *self,
f3090252de57 Re-design account manager as a GtkListBox
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents:
diff changeset
215 PurpleAccount *account,
f3090252de57 Re-design account manager as a GtkListBox
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents:
diff changeset
216 G_GNUC_UNUSED gpointer data)
f3090252de57 Re-design account manager as a GtkListBox
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents:
diff changeset
217 {
f3090252de57 Re-design account manager as a GtkListBox
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents:
diff changeset
218 const char *icon_name = NULL;
f3090252de57 Re-design account manager as a GtkListBox
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents:
diff changeset
219
f3090252de57 Re-design account manager as a GtkListBox
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents:
diff changeset
220 if(PURPLE_IS_ACCOUNT(account)) {
f3090252de57 Re-design account manager as a GtkListBox
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents:
diff changeset
221 PurpleProtocol *protocol = purple_account_get_protocol(account);
f3090252de57 Re-design account manager as a GtkListBox
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents:
diff changeset
222 if(PURPLE_IS_PROTOCOL(protocol)) {
f3090252de57 Re-design account manager as a GtkListBox
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents:
diff changeset
223 icon_name = purple_protocol_get_icon_name(protocol);
f3090252de57 Re-design account manager as a GtkListBox
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents:
diff changeset
224 }
f3090252de57 Re-design account manager as a GtkListBox
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents:
diff changeset
225 }
f3090252de57 Re-design account manager as a GtkListBox
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents:
diff changeset
226
f3090252de57 Re-design account manager as a GtkListBox
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents:
diff changeset
227 return g_strdup(icon_name);
f3090252de57 Re-design account manager as a GtkListBox
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents:
diff changeset
228 }
f3090252de57 Re-design account manager as a GtkListBox
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents:
diff changeset
229
f3090252de57 Re-design account manager as a GtkListBox
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents:
diff changeset
230 static void
f3090252de57 Re-design account manager as a GtkListBox
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents:
diff changeset
231 pidgin_account_manager_remove_account_cb(G_GNUC_UNUSED AdwMessageDialog *self,
f3090252de57 Re-design account manager as a GtkListBox
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents:
diff changeset
232 char *response, gpointer data)
f3090252de57 Re-design account manager as a GtkListBox
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents:
diff changeset
233 {
f3090252de57 Re-design account manager as a GtkListBox
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents:
diff changeset
234 PurpleAccount *account = data;
f3090252de57 Re-design account manager as a GtkListBox
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents:
diff changeset
235 PurpleNotificationManager *notification_manager = NULL;
f3090252de57 Re-design account manager as a GtkListBox
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents:
diff changeset
236
f3090252de57 Re-design account manager as a GtkListBox
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents:
diff changeset
237 if(!purple_strequal(response, "remove")) {
f3090252de57 Re-design account manager as a GtkListBox
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents:
diff changeset
238 return;
f3090252de57 Re-design account manager as a GtkListBox
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents:
diff changeset
239 }
f3090252de57 Re-design account manager as a GtkListBox
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents:
diff changeset
240
f3090252de57 Re-design account manager as a GtkListBox
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents:
diff changeset
241 /* Remove all notifications including connection errors for the account. */
f3090252de57 Re-design account manager as a GtkListBox
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents:
diff changeset
242 notification_manager = purple_notification_manager_get_default();
f3090252de57 Re-design account manager as a GtkListBox
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents:
diff changeset
243 purple_notification_manager_remove_with_account(notification_manager,
f3090252de57 Re-design account manager as a GtkListBox
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents:
diff changeset
244 account, TRUE);
f3090252de57 Re-design account manager as a GtkListBox
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents:
diff changeset
245
f3090252de57 Re-design account manager as a GtkListBox
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents:
diff changeset
246 /* Delete the account. */
f3090252de57 Re-design account manager as a GtkListBox
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents:
diff changeset
247 purple_accounts_delete(account);
f3090252de57 Re-design account manager as a GtkListBox
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents:
diff changeset
248 }
f3090252de57 Re-design account manager as a GtkListBox
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents:
diff changeset
249
f3090252de57 Re-design account manager as a GtkListBox
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents:
diff changeset
250 static void
f3090252de57 Re-design account manager as a GtkListBox
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents:
diff changeset
251 pidgin_account_row_remove_cb(G_GNUC_UNUSED GtkButton *self, gpointer data) {
f3090252de57 Re-design account manager as a GtkListBox
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents:
diff changeset
252 PidginAccountRow *row = data;
f3090252de57 Re-design account manager as a GtkListBox
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents:
diff changeset
253 GtkRoot *root = NULL;
f3090252de57 Re-design account manager as a GtkListBox
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents:
diff changeset
254 AdwMessageDialog *dialog = NULL;
f3090252de57 Re-design account manager as a GtkListBox
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents:
diff changeset
255 PurpleContactInfo *info = NULL;
f3090252de57 Re-design account manager as a GtkListBox
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents:
diff changeset
256 const char *name = NULL;
f3090252de57 Re-design account manager as a GtkListBox
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents:
diff changeset
257 char *protocol_name = NULL;
f3090252de57 Re-design account manager as a GtkListBox
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents:
diff changeset
258
f3090252de57 Re-design account manager as a GtkListBox
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents:
diff changeset
259 info = PURPLE_CONTACT_INFO(row->account);
f3090252de57 Re-design account manager as a GtkListBox
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents:
diff changeset
260 name = purple_contact_info_get_name_for_display(info);
f3090252de57 Re-design account manager as a GtkListBox
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents:
diff changeset
261 protocol_name = pidgin_account_row_protocol_name_cb(NULL, row->account,
f3090252de57 Re-design account manager as a GtkListBox
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents:
diff changeset
262 NULL);
f3090252de57 Re-design account manager as a GtkListBox
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents:
diff changeset
263
f3090252de57 Re-design account manager as a GtkListBox
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents:
diff changeset
264 root = gtk_widget_get_root(GTK_WIDGET(row));
f3090252de57 Re-design account manager as a GtkListBox
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents:
diff changeset
265 dialog = ADW_MESSAGE_DIALOG(adw_message_dialog_new(GTK_WINDOW(root),
f3090252de57 Re-design account manager as a GtkListBox
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents:
diff changeset
266 _("Remove account?"),
f3090252de57 Re-design account manager as a GtkListBox
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents:
diff changeset
267 NULL));
f3090252de57 Re-design account manager as a GtkListBox
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents:
diff changeset
268 adw_message_dialog_format_body(dialog,
f3090252de57 Re-design account manager as a GtkListBox
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents:
diff changeset
269 _("Do you want to remove the %s (%s) "
f3090252de57 Re-design account manager as a GtkListBox
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents:
diff changeset
270 "account from Pidgin?"),
f3090252de57 Re-design account manager as a GtkListBox
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents:
diff changeset
271 name, protocol_name);
f3090252de57 Re-design account manager as a GtkListBox
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents:
diff changeset
272 adw_message_dialog_add_responses(dialog, "cancel", _("Cancel"),
f3090252de57 Re-design account manager as a GtkListBox
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents:
diff changeset
273 "remove", _("Remove"), NULL);
f3090252de57 Re-design account manager as a GtkListBox
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents:
diff changeset
274 adw_message_dialog_set_response_appearance(dialog, "remove",
f3090252de57 Re-design account manager as a GtkListBox
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents:
diff changeset
275 ADW_RESPONSE_DESTRUCTIVE);
f3090252de57 Re-design account manager as a GtkListBox
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents:
diff changeset
276 adw_message_dialog_set_default_response(dialog, "cancel");
f3090252de57 Re-design account manager as a GtkListBox
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents:
diff changeset
277 adw_message_dialog_set_close_response(dialog, "cancel");
f3090252de57 Re-design account manager as a GtkListBox
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents:
diff changeset
278
f3090252de57 Re-design account manager as a GtkListBox
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents:
diff changeset
279 g_signal_connect_object(dialog, "response",
f3090252de57 Re-design account manager as a GtkListBox
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents:
diff changeset
280 G_CALLBACK(pidgin_account_manager_remove_account_cb),
f3090252de57 Re-design account manager as a GtkListBox
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents:
diff changeset
281 row->account, 0);
f3090252de57 Re-design account manager as a GtkListBox
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents:
diff changeset
282
f3090252de57 Re-design account manager as a GtkListBox
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents:
diff changeset
283 gtk_window_present(GTK_WINDOW(dialog));
f3090252de57 Re-design account manager as a GtkListBox
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents:
diff changeset
284
f3090252de57 Re-design account manager as a GtkListBox
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents:
diff changeset
285 g_free(protocol_name);
f3090252de57 Re-design account manager as a GtkListBox
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents:
diff changeset
286 }
f3090252de57 Re-design account manager as a GtkListBox
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents:
diff changeset
287
f3090252de57 Re-design account manager as a GtkListBox
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents:
diff changeset
288 /******************************************************************************
f3090252de57 Re-design account manager as a GtkListBox
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents:
diff changeset
289 * GObject Implementation
f3090252de57 Re-design account manager as a GtkListBox
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents:
diff changeset
290 *****************************************************************************/
f3090252de57 Re-design account manager as a GtkListBox
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents:
diff changeset
291 G_DEFINE_TYPE(PidginAccountRow, pidgin_account_row, GTK_TYPE_LIST_BOX_ROW)
f3090252de57 Re-design account manager as a GtkListBox
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents:
diff changeset
292
f3090252de57 Re-design account manager as a GtkListBox
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents:
diff changeset
293 static void
f3090252de57 Re-design account manager as a GtkListBox
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents:
diff changeset
294 pidgin_account_row_get_property(GObject *obj, guint param_id, GValue *value,
f3090252de57 Re-design account manager as a GtkListBox
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents:
diff changeset
295 GParamSpec *pspec)
f3090252de57 Re-design account manager as a GtkListBox
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents:
diff changeset
296 {
f3090252de57 Re-design account manager as a GtkListBox
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents:
diff changeset
297 PidginAccountRow *row = PIDGIN_ACCOUNT_ROW(obj);
f3090252de57 Re-design account manager as a GtkListBox
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents:
diff changeset
298
f3090252de57 Re-design account manager as a GtkListBox
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents:
diff changeset
299 switch(param_id) {
f3090252de57 Re-design account manager as a GtkListBox
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents:
diff changeset
300 case PROP_ACCOUNT:
f3090252de57 Re-design account manager as a GtkListBox
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents:
diff changeset
301 g_value_set_object(value, pidgin_account_row_get_account(row));
f3090252de57 Re-design account manager as a GtkListBox
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents:
diff changeset
302 break;
f3090252de57 Re-design account manager as a GtkListBox
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents:
diff changeset
303 default:
f3090252de57 Re-design account manager as a GtkListBox
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents:
diff changeset
304 G_OBJECT_WARN_INVALID_PROPERTY_ID(obj, param_id, pspec);
f3090252de57 Re-design account manager as a GtkListBox
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents:
diff changeset
305 break;
f3090252de57 Re-design account manager as a GtkListBox
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents:
diff changeset
306 }
f3090252de57 Re-design account manager as a GtkListBox
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents:
diff changeset
307 }
f3090252de57 Re-design account manager as a GtkListBox
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents:
diff changeset
308
f3090252de57 Re-design account manager as a GtkListBox
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents:
diff changeset
309 static void
f3090252de57 Re-design account manager as a GtkListBox
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents:
diff changeset
310 pidgin_account_row_set_property(GObject *obj, guint param_id,
f3090252de57 Re-design account manager as a GtkListBox
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents:
diff changeset
311 const GValue *value, GParamSpec *pspec)
f3090252de57 Re-design account manager as a GtkListBox
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents:
diff changeset
312 {
f3090252de57 Re-design account manager as a GtkListBox
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents:
diff changeset
313 PidginAccountRow *row = PIDGIN_ACCOUNT_ROW(obj);
f3090252de57 Re-design account manager as a GtkListBox
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents:
diff changeset
314
f3090252de57 Re-design account manager as a GtkListBox
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents:
diff changeset
315 switch(param_id) {
f3090252de57 Re-design account manager as a GtkListBox
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents:
diff changeset
316 case PROP_ACCOUNT:
f3090252de57 Re-design account manager as a GtkListBox
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents:
diff changeset
317 pidgin_account_row_set_account(row, g_value_get_object(value));
f3090252de57 Re-design account manager as a GtkListBox
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents:
diff changeset
318 break;
f3090252de57 Re-design account manager as a GtkListBox
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents:
diff changeset
319 default:
f3090252de57 Re-design account manager as a GtkListBox
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents:
diff changeset
320 G_OBJECT_WARN_INVALID_PROPERTY_ID(obj, param_id, pspec);
f3090252de57 Re-design account manager as a GtkListBox
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents:
diff changeset
321 break;
f3090252de57 Re-design account manager as a GtkListBox
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents:
diff changeset
322 }
f3090252de57 Re-design account manager as a GtkListBox
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents:
diff changeset
323 }
f3090252de57 Re-design account manager as a GtkListBox
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents:
diff changeset
324
f3090252de57 Re-design account manager as a GtkListBox
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents:
diff changeset
325 static void
f3090252de57 Re-design account manager as a GtkListBox
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents:
diff changeset
326 pidgin_account_row_finalize(GObject *obj) {
f3090252de57 Re-design account manager as a GtkListBox
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents:
diff changeset
327 PidginAccountRow *row = PIDGIN_ACCOUNT_ROW(obj);
f3090252de57 Re-design account manager as a GtkListBox
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents:
diff changeset
328
f3090252de57 Re-design account manager as a GtkListBox
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents:
diff changeset
329 g_clear_object(&row->account);
f3090252de57 Re-design account manager as a GtkListBox
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents:
diff changeset
330
f3090252de57 Re-design account manager as a GtkListBox
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents:
diff changeset
331 G_OBJECT_CLASS(pidgin_account_row_parent_class)->finalize(obj);
f3090252de57 Re-design account manager as a GtkListBox
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents:
diff changeset
332 }
f3090252de57 Re-design account manager as a GtkListBox
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents:
diff changeset
333
f3090252de57 Re-design account manager as a GtkListBox
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents:
diff changeset
334 static void
f3090252de57 Re-design account manager as a GtkListBox
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents:
diff changeset
335 pidgin_account_row_init(PidginAccountRow *row) {
f3090252de57 Re-design account manager as a GtkListBox
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents:
diff changeset
336 gtk_widget_init_template(GTK_WIDGET(row));
f3090252de57 Re-design account manager as a GtkListBox
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents:
diff changeset
337
f3090252de57 Re-design account manager as a GtkListBox
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents:
diff changeset
338 pidgin_account_row_refresh_buddy_icon(row);
f3090252de57 Re-design account manager as a GtkListBox
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents:
diff changeset
339 pidgin_account_row_refresh_status(row);
f3090252de57 Re-design account manager as a GtkListBox
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents:
diff changeset
340 }
f3090252de57 Re-design account manager as a GtkListBox
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents:
diff changeset
341
f3090252de57 Re-design account manager as a GtkListBox
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents:
diff changeset
342 static void
f3090252de57 Re-design account manager as a GtkListBox
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents:
diff changeset
343 pidgin_account_row_class_init(PidginAccountRowClass *klass) {
f3090252de57 Re-design account manager as a GtkListBox
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents:
diff changeset
344 GObjectClass *obj_class = G_OBJECT_CLASS(klass);
f3090252de57 Re-design account manager as a GtkListBox
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents:
diff changeset
345 GtkWidgetClass *widget_class = GTK_WIDGET_CLASS(klass);
f3090252de57 Re-design account manager as a GtkListBox
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents:
diff changeset
346
f3090252de57 Re-design account manager as a GtkListBox
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents:
diff changeset
347 obj_class->finalize = pidgin_account_row_finalize;
f3090252de57 Re-design account manager as a GtkListBox
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents:
diff changeset
348 obj_class->get_property = pidgin_account_row_get_property;
f3090252de57 Re-design account manager as a GtkListBox
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents:
diff changeset
349 obj_class->set_property = pidgin_account_row_set_property;
f3090252de57 Re-design account manager as a GtkListBox
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents:
diff changeset
350
f3090252de57 Re-design account manager as a GtkListBox
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents:
diff changeset
351 /* properties */
f3090252de57 Re-design account manager as a GtkListBox
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents:
diff changeset
352
f3090252de57 Re-design account manager as a GtkListBox
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents:
diff changeset
353 /**
f3090252de57 Re-design account manager as a GtkListBox
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents:
diff changeset
354 * PidginAccountRow:account:
f3090252de57 Re-design account manager as a GtkListBox
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents:
diff changeset
355 *
f3090252de57 Re-design account manager as a GtkListBox
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents:
diff changeset
356 * The account that this row will be representing.
f3090252de57 Re-design account manager as a GtkListBox
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents:
diff changeset
357 *
f3090252de57 Re-design account manager as a GtkListBox
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents:
diff changeset
358 * Since: 3.0.0
f3090252de57 Re-design account manager as a GtkListBox
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents:
diff changeset
359 */
f3090252de57 Re-design account manager as a GtkListBox
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents:
diff changeset
360 properties[PROP_ACCOUNT] = g_param_spec_object(
f3090252de57 Re-design account manager as a GtkListBox
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents:
diff changeset
361 "account", "account",
f3090252de57 Re-design account manager as a GtkListBox
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents:
diff changeset
362 "The account that this row is representing",
f3090252de57 Re-design account manager as a GtkListBox
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents:
diff changeset
363 PURPLE_TYPE_ACCOUNT,
f3090252de57 Re-design account manager as a GtkListBox
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents:
diff changeset
364 G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS);
f3090252de57 Re-design account manager as a GtkListBox
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents:
diff changeset
365
f3090252de57 Re-design account manager as a GtkListBox
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents:
diff changeset
366 g_object_class_install_properties(obj_class, N_PROPERTIES, properties);
f3090252de57 Re-design account manager as a GtkListBox
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents:
diff changeset
367
f3090252de57 Re-design account manager as a GtkListBox
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents:
diff changeset
368 gtk_widget_class_set_template_from_resource(
f3090252de57 Re-design account manager as a GtkListBox
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents:
diff changeset
369 widget_class,
f3090252de57 Re-design account manager as a GtkListBox
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents:
diff changeset
370 "/im/pidgin/Pidgin3/Accounts/account-row.ui"
f3090252de57 Re-design account manager as a GtkListBox
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents:
diff changeset
371 );
f3090252de57 Re-design account manager as a GtkListBox
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents:
diff changeset
372
f3090252de57 Re-design account manager as a GtkListBox
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents:
diff changeset
373 gtk_widget_class_bind_template_child(widget_class, PidginAccountRow,
f3090252de57 Re-design account manager as a GtkListBox
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents:
diff changeset
374 enabled);
f3090252de57 Re-design account manager as a GtkListBox
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents:
diff changeset
375 gtk_widget_class_bind_template_child(widget_class, PidginAccountRow,
f3090252de57 Re-design account manager as a GtkListBox
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents:
diff changeset
376 avatar);
f3090252de57 Re-design account manager as a GtkListBox
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents:
diff changeset
377 gtk_widget_class_bind_template_child(widget_class, PidginAccountRow,
f3090252de57 Re-design account manager as a GtkListBox
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents:
diff changeset
378 name);
f3090252de57 Re-design account manager as a GtkListBox
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents:
diff changeset
379 gtk_widget_class_bind_template_child(widget_class, PidginAccountRow,
f3090252de57 Re-design account manager as a GtkListBox
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents:
diff changeset
380 status);
f3090252de57 Re-design account manager as a GtkListBox
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents:
diff changeset
381
f3090252de57 Re-design account manager as a GtkListBox
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents:
diff changeset
382 gtk_widget_class_bind_template_callback(widget_class,
f3090252de57 Re-design account manager as a GtkListBox
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents:
diff changeset
383 pidgin_account_row_enable_state_set_cb);
f3090252de57 Re-design account manager as a GtkListBox
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents:
diff changeset
384 gtk_widget_class_bind_template_callback(widget_class,
f3090252de57 Re-design account manager as a GtkListBox
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents:
diff changeset
385 pidgin_account_row_buddyicon_cb);
f3090252de57 Re-design account manager as a GtkListBox
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents:
diff changeset
386 gtk_widget_class_bind_template_callback(widget_class,
f3090252de57 Re-design account manager as a GtkListBox
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents:
diff changeset
387 pidgin_account_row_protocol_name_cb);
f3090252de57 Re-design account manager as a GtkListBox
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents:
diff changeset
388 gtk_widget_class_bind_template_callback(widget_class,
f3090252de57 Re-design account manager as a GtkListBox
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents:
diff changeset
389 pidgin_account_row_protocol_icon_cb);
f3090252de57 Re-design account manager as a GtkListBox
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents:
diff changeset
390 gtk_widget_class_bind_template_callback(widget_class,
f3090252de57 Re-design account manager as a GtkListBox
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents:
diff changeset
391 pidgin_account_row_remove_cb);
f3090252de57 Re-design account manager as a GtkListBox
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents:
diff changeset
392 }
f3090252de57 Re-design account manager as a GtkListBox
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents:
diff changeset
393
f3090252de57 Re-design account manager as a GtkListBox
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents:
diff changeset
394 /******************************************************************************
f3090252de57 Re-design account manager as a GtkListBox
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents:
diff changeset
395 * Public API
f3090252de57 Re-design account manager as a GtkListBox
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents:
diff changeset
396 *****************************************************************************/
f3090252de57 Re-design account manager as a GtkListBox
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents:
diff changeset
397 GtkWidget *
f3090252de57 Re-design account manager as a GtkListBox
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents:
diff changeset
398 pidgin_account_row_new(PurpleAccount *account) {
f3090252de57 Re-design account manager as a GtkListBox
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents:
diff changeset
399 return g_object_new(PIDGIN_TYPE_ACCOUNT_ROW, "account", account, NULL);
f3090252de57 Re-design account manager as a GtkListBox
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents:
diff changeset
400 }
f3090252de57 Re-design account manager as a GtkListBox
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents:
diff changeset
401
f3090252de57 Re-design account manager as a GtkListBox
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents:
diff changeset
402 PurpleAccount *
f3090252de57 Re-design account manager as a GtkListBox
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents:
diff changeset
403 pidgin_account_row_get_account(PidginAccountRow *row) {
f3090252de57 Re-design account manager as a GtkListBox
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents:
diff changeset
404 g_return_val_if_fail(PIDGIN_IS_ACCOUNT_ROW(row), NULL);
f3090252de57 Re-design account manager as a GtkListBox
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents:
diff changeset
405
f3090252de57 Re-design account manager as a GtkListBox
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents:
diff changeset
406 return row->account;
f3090252de57 Re-design account manager as a GtkListBox
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents:
diff changeset
407 }
f3090252de57 Re-design account manager as a GtkListBox
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents:
diff changeset
408
f3090252de57 Re-design account manager as a GtkListBox
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents:
diff changeset
409 void
f3090252de57 Re-design account manager as a GtkListBox
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents:
diff changeset
410 pidgin_account_row_set_account(PidginAccountRow *row, PurpleAccount *account) {
f3090252de57 Re-design account manager as a GtkListBox
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents:
diff changeset
411 PurpleAccount *old = NULL;
f3090252de57 Re-design account manager as a GtkListBox
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents:
diff changeset
412
f3090252de57 Re-design account manager as a GtkListBox
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents:
diff changeset
413 g_return_if_fail(PIDGIN_IS_ACCOUNT_ROW(row));
f3090252de57 Re-design account manager as a GtkListBox
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents:
diff changeset
414
f3090252de57 Re-design account manager as a GtkListBox
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents:
diff changeset
415 old = (row->account != NULL) ? g_object_ref(row->account) : NULL;
f3090252de57 Re-design account manager as a GtkListBox
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents:
diff changeset
416
f3090252de57 Re-design account manager as a GtkListBox
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents:
diff changeset
417 if(g_set_object(&row->account, account)) {
f3090252de57 Re-design account manager as a GtkListBox
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents:
diff changeset
418 if(PURPLE_IS_ACCOUNT(old)) {
f3090252de57 Re-design account manager as a GtkListBox
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents:
diff changeset
419 PurpleConnection *connection = purple_account_get_connection(old);
f3090252de57 Re-design account manager as a GtkListBox
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents:
diff changeset
420
f3090252de57 Re-design account manager as a GtkListBox
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents:
diff changeset
421 if(PURPLE_IS_CONNECTION(connection)) {
f3090252de57 Re-design account manager as a GtkListBox
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents:
diff changeset
422 g_signal_handlers_disconnect_by_func(connection,
f3090252de57 Re-design account manager as a GtkListBox
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents:
diff changeset
423 pidgin_account_row_state_changed_cb,
f3090252de57 Re-design account manager as a GtkListBox
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents:
diff changeset
424 row);
f3090252de57 Re-design account manager as a GtkListBox
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents:
diff changeset
425 }
f3090252de57 Re-design account manager as a GtkListBox
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents:
diff changeset
426
f3090252de57 Re-design account manager as a GtkListBox
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents:
diff changeset
427 g_signal_handlers_disconnect_by_func(old,
f3090252de57 Re-design account manager as a GtkListBox
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents:
diff changeset
428 pidgin_account_row_connection_changed_cb,
f3090252de57 Re-design account manager as a GtkListBox
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents:
diff changeset
429 row);
f3090252de57 Re-design account manager as a GtkListBox
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents:
diff changeset
430 }
f3090252de57 Re-design account manager as a GtkListBox
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents:
diff changeset
431
f3090252de57 Re-design account manager as a GtkListBox
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents:
diff changeset
432 if(PURPLE_IS_ACCOUNT(account)) {
f3090252de57 Re-design account manager as a GtkListBox
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents:
diff changeset
433 g_signal_connect_object(account, "notify::connection",
f3090252de57 Re-design account manager as a GtkListBox
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents:
diff changeset
434 G_CALLBACK(pidgin_account_row_connection_changed_cb),
f3090252de57 Re-design account manager as a GtkListBox
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents:
diff changeset
435 row, 0);
f3090252de57 Re-design account manager as a GtkListBox
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents:
diff changeset
436 g_signal_connect_object(account, "notify::error",
f3090252de57 Re-design account manager as a GtkListBox
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents:
diff changeset
437 G_CALLBACK(pidgin_account_row_state_changed_cb),
f3090252de57 Re-design account manager as a GtkListBox
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents:
diff changeset
438 row, 0);
f3090252de57 Re-design account manager as a GtkListBox
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents:
diff changeset
439 pidgin_account_row_refresh_buddy_icon(row);
f3090252de57 Re-design account manager as a GtkListBox
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents:
diff changeset
440 pidgin_account_row_refresh_status(row);
f3090252de57 Re-design account manager as a GtkListBox
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents:
diff changeset
441 }
f3090252de57 Re-design account manager as a GtkListBox
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents:
diff changeset
442
f3090252de57 Re-design account manager as a GtkListBox
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents:
diff changeset
443 g_object_notify_by_pspec(G_OBJECT(row), properties[PROP_ACCOUNT]);
f3090252de57 Re-design account manager as a GtkListBox
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents:
diff changeset
444 }
f3090252de57 Re-design account manager as a GtkListBox
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents:
diff changeset
445
f3090252de57 Re-design account manager as a GtkListBox
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents:
diff changeset
446 g_clear_object(&old);
f3090252de57 Re-design account manager as a GtkListBox
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents:
diff changeset
447 }

mercurial