Tue, 17 Jan 2023 02:29:19 -0600
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 | } |