Sun, 14 Dec 2003 19:32:41 +0000
[gaim-migrate @ 8528]
Change the order of the buttons on the disconnected dialog to
Reconnect | Reconnect All | Close
Do we really need the "reconnect" button on the disconnect dialog
to toggle back and forth between "reconnect" and "remove"?
It seems like it would be better if it were always "reconnect" and
just grayed out if the account had already been reconnected
| 5717 | 1 | /* |
| 2 | * gaim | |
| 3 | * | |
| 4 | * Copyright (C) 1998-1999, Mark Spencer <markster@marko.net> | |
| 5 | * | |
| 6 | * This program is free software; you can redistribute it and/or modify | |
| 7 | * it under the terms of the GNU General Public License as published by | |
| 8 | * the Free Software Foundation; either version 2 of the License, or | |
| 9 | * (at your option) any later version. | |
| 10 | * | |
| 11 | * This program is distributed in the hope that it will be useful, | |
| 12 | * but WITHOUT ANY WARRANTY; without even the implied warranty of | |
| 13 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |
| 14 | * GNU General Public License for more details. | |
| 15 | * | |
| 16 | * You should have received a copy of the GNU General Public License | |
| 17 | * along with this program; if not, write to the Free Software | |
| 18 | * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA | |
| 19 | */ | |
|
6371
e92b66ee5518
[gaim-migrate @ 6876]
Christian Hammond <chipx86@chipx86.com>
parents:
6216
diff
changeset
|
20 | #include "gtkinternal.h" |
| 5717 | 21 | |
| 22 | #include "account.h" | |
|
5872
754c63f29b77
[gaim-migrate @ 6304]
Christian Hammond <chipx86@chipx86.com>
parents:
5746
diff
changeset
|
23 | #include "debug.h" |
|
6460
fc288e7221ca
[gaim-migrate @ 6969]
Christian Hammond <chipx86@chipx86.com>
parents:
6371
diff
changeset
|
24 | #include "notify.h" |
| 6216 | 25 | #include "prefs.h" |
| 7399 | 26 | #include "stock.h" |
|
5872
754c63f29b77
[gaim-migrate @ 6304]
Christian Hammond <chipx86@chipx86.com>
parents:
5746
diff
changeset
|
27 | #include "util.h" |
| 5717 | 28 | |
|
5872
754c63f29b77
[gaim-migrate @ 6304]
Christian Hammond <chipx86@chipx86.com>
parents:
5746
diff
changeset
|
29 | #include "gtkblist.h" |
|
754c63f29b77
[gaim-migrate @ 6304]
Christian Hammond <chipx86@chipx86.com>
parents:
5746
diff
changeset
|
30 | #include "gtkutils.h" |
|
754c63f29b77
[gaim-migrate @ 6304]
Christian Hammond <chipx86@chipx86.com>
parents:
5746
diff
changeset
|
31 | |
|
754c63f29b77
[gaim-migrate @ 6304]
Christian Hammond <chipx86@chipx86.com>
parents:
5746
diff
changeset
|
32 | #include "ui.h" |
| 5717 | 33 | |
| 34 | struct signon_meter { | |
| 35 | GaimAccount *account; | |
| 36 | GtkWidget *button; | |
| 37 | GtkWidget *progress; | |
| 38 | GtkWidget *status; | |
| 39 | }; | |
| 40 | ||
| 41 | struct meter_window { | |
| 42 | GtkWidget *window; | |
| 43 | GtkWidget *table; | |
| 44 | gint rows; | |
| 45 | gint active_count; | |
| 46 | GSList *meters; | |
| 47 | } *meter_win = NULL; | |
| 48 | ||
|
5991
317739d57cb7
[gaim-migrate @ 6439]
Christian Hammond <chipx86@chipx86.com>
parents:
5989
diff
changeset
|
49 | static void kill_meter(struct signon_meter *meter, const char *text); |
|
317739d57cb7
[gaim-migrate @ 6439]
Christian Hammond <chipx86@chipx86.com>
parents:
5989
diff
changeset
|
50 | |
| 5717 | 51 | static void cancel_signon(GtkWidget *button, struct signon_meter *meter) |
| 52 | { | |
|
5991
317739d57cb7
[gaim-migrate @ 6439]
Christian Hammond <chipx86@chipx86.com>
parents:
5989
diff
changeset
|
53 | if (meter->account->gc != NULL) { |
|
317739d57cb7
[gaim-migrate @ 6439]
Christian Hammond <chipx86@chipx86.com>
parents:
5989
diff
changeset
|
54 | meter->account->gc->wants_to_die = TRUE; |
|
317739d57cb7
[gaim-migrate @ 6439]
Christian Hammond <chipx86@chipx86.com>
parents:
5989
diff
changeset
|
55 | gaim_connection_destroy(meter->account->gc); |
|
317739d57cb7
[gaim-migrate @ 6439]
Christian Hammond <chipx86@chipx86.com>
parents:
5989
diff
changeset
|
56 | } |
|
317739d57cb7
[gaim-migrate @ 6439]
Christian Hammond <chipx86@chipx86.com>
parents:
5989
diff
changeset
|
57 | else { |
|
317739d57cb7
[gaim-migrate @ 6439]
Christian Hammond <chipx86@chipx86.com>
parents:
5989
diff
changeset
|
58 | kill_meter(meter, _("Done.")); |
|
5987
1c35193f8dcb
[gaim-migrate @ 6435]
Christian Hammond <chipx86@chipx86.com>
parents:
5936
diff
changeset
|
59 | |
|
5991
317739d57cb7
[gaim-migrate @ 6439]
Christian Hammond <chipx86@chipx86.com>
parents:
5989
diff
changeset
|
60 | if (gaim_connections_get_all() == NULL) { |
|
317739d57cb7
[gaim-migrate @ 6439]
Christian Hammond <chipx86@chipx86.com>
parents:
5989
diff
changeset
|
61 | destroy_all_dialogs(); |
|
317739d57cb7
[gaim-migrate @ 6439]
Christian Hammond <chipx86@chipx86.com>
parents:
5989
diff
changeset
|
62 | |
|
317739d57cb7
[gaim-migrate @ 6439]
Christian Hammond <chipx86@chipx86.com>
parents:
5989
diff
changeset
|
63 | gaim_blist_destroy(); |
|
317739d57cb7
[gaim-migrate @ 6439]
Christian Hammond <chipx86@chipx86.com>
parents:
5989
diff
changeset
|
64 | |
|
317739d57cb7
[gaim-migrate @ 6439]
Christian Hammond <chipx86@chipx86.com>
parents:
5989
diff
changeset
|
65 | show_login(); |
|
317739d57cb7
[gaim-migrate @ 6439]
Christian Hammond <chipx86@chipx86.com>
parents:
5989
diff
changeset
|
66 | } |
|
317739d57cb7
[gaim-migrate @ 6439]
Christian Hammond <chipx86@chipx86.com>
parents:
5989
diff
changeset
|
67 | } |
| 5717 | 68 | } |
| 69 | ||
| 70 | static void cancel_all () { | |
| 71 | GSList *m = meter_win ? meter_win->meters : NULL; | |
|
6114
ba8b05cce5a3
[gaim-migrate @ 6576]
Mark Doliner <markdoliner@pidgin.im>
parents:
6109
diff
changeset
|
72 | struct signon_meter *meter; |
| 5717 | 73 | |
| 74 | while (m) { | |
|
6114
ba8b05cce5a3
[gaim-migrate @ 6576]
Mark Doliner <markdoliner@pidgin.im>
parents:
6109
diff
changeset
|
75 | meter = m->data; |
|
ba8b05cce5a3
[gaim-migrate @ 6576]
Mark Doliner <markdoliner@pidgin.im>
parents:
6109
diff
changeset
|
76 | cancel_signon(NULL, meter); |
|
ba8b05cce5a3
[gaim-migrate @ 6576]
Mark Doliner <markdoliner@pidgin.im>
parents:
6109
diff
changeset
|
77 | m = m->next; |
| 5717 | 78 | } |
| 79 | } | |
| 80 | ||
| 81 | static gint meter_destroy(GtkWidget *window, GdkEvent *evt, struct signon_meter *meter) | |
| 82 | { | |
| 83 | return TRUE; | |
| 84 | } | |
| 85 | ||
| 86 | static struct signon_meter *find_signon_meter(GaimConnection *gc) | |
| 87 | { | |
| 88 | GSList *m = meter_win ? meter_win->meters : NULL; | |
|
6114
ba8b05cce5a3
[gaim-migrate @ 6576]
Mark Doliner <markdoliner@pidgin.im>
parents:
6109
diff
changeset
|
89 | struct signon_meter *meter; |
| 5717 | 90 | |
| 91 | while (m) { | |
|
6114
ba8b05cce5a3
[gaim-migrate @ 6576]
Mark Doliner <markdoliner@pidgin.im>
parents:
6109
diff
changeset
|
92 | meter = m->data; |
|
ba8b05cce5a3
[gaim-migrate @ 6576]
Mark Doliner <markdoliner@pidgin.im>
parents:
6109
diff
changeset
|
93 | if (meter->account == gaim_connection_get_account(gc)) |
| 5717 | 94 | return m->data; |
| 95 | m = m->next; | |
| 96 | } | |
| 97 | ||
| 98 | return NULL; | |
| 99 | } | |
| 100 | ||
| 101 | static GtkWidget* create_meter_pixmap (GaimConnection *gc) | |
| 102 | { | |
| 103 | GdkPixbuf *pb = create_prpl_icon(gc->account); | |
| 104 | GdkPixbuf *scale = gdk_pixbuf_scale_simple(pb, 30,30,GDK_INTERP_BILINEAR); | |
| 105 | GtkWidget *image = | |
| 106 | gtk_image_new_from_pixbuf(scale); | |
| 107 | g_object_unref(G_OBJECT(pb)); | |
| 108 | g_object_unref(G_OBJECT(scale)); | |
| 109 | return image; | |
| 110 | } | |
| 111 | ||
| 112 | ||
| 113 | ||
| 114 | static struct signon_meter * | |
| 115 | new_meter(GaimConnection *gc, GtkWidget *widget, | |
| 116 | GtkWidget *table, gint *rows) | |
| 117 | { | |
| 118 | GtkWidget *graphic; | |
| 119 | GtkWidget *label; | |
| 120 | GtkWidget *nest_vbox; | |
| 121 | GString *name_to_print; | |
| 122 | struct signon_meter *meter; | |
| 123 | ||
| 124 | ||
| 125 | meter = g_new0(struct signon_meter, 1); | |
| 126 | ||
| 127 | meter->account = gaim_connection_get_account(gc); | |
| 128 | name_to_print = g_string_new(gaim_account_get_username(meter->account)); | |
| 129 | ||
| 130 | (*rows)++; | |
| 131 | gtk_table_resize (GTK_TABLE(table), *rows, 4); | |
| 132 | ||
| 133 | graphic = create_meter_pixmap(gc); | |
| 134 | ||
| 135 | nest_vbox = gtk_vbox_new (FALSE, 0); | |
| 136 | ||
| 137 | g_string_prepend(name_to_print, _("Signon: ")); | |
| 138 | label = gtk_label_new (name_to_print->str); | |
| 139 | g_string_free(name_to_print, TRUE); | |
| 140 | gtk_misc_set_alignment (GTK_MISC (label), 0, 0.5); | |
| 141 | ||
| 142 | meter->status = gtk_label_new(""); | |
| 143 | gtk_misc_set_alignment(GTK_MISC(meter->status), 0, 0.5); | |
| 144 | gtk_widget_set_size_request(meter->status, 250, -1); | |
| 145 | ||
| 146 | meter->progress = gtk_progress_bar_new (); | |
| 147 | ||
| 148 | meter->button = gaim_pixbuf_button_from_stock (_("Cancel"), GTK_STOCK_CANCEL, GAIM_BUTTON_HORIZONTAL); | |
| 149 | g_signal_connect(G_OBJECT (meter->button), "clicked", | |
| 150 | G_CALLBACK (cancel_signon), meter); | |
| 151 | ||
| 152 | gtk_table_attach (GTK_TABLE (table), graphic, 0, 1, *rows, *rows+1, (GtkAttachOptions) (GTK_FILL), (GtkAttachOptions) (0), 0, 0); | |
| 153 | gtk_table_attach (GTK_TABLE (table), nest_vbox, 1, 2, *rows, *rows+1, (GtkAttachOptions) (GTK_FILL), (GtkAttachOptions) (0), 0, 0); | |
| 154 | gtk_box_pack_start (GTK_BOX (nest_vbox), GTK_WIDGET (label), FALSE, FALSE, 0); | |
| 155 | gtk_box_pack_start (GTK_BOX (nest_vbox), GTK_WIDGET (meter->status), FALSE, FALSE, 0); | |
| 156 | gtk_table_attach (GTK_TABLE (table), meter->progress, 2, 3, *rows, *rows+1, (GtkAttachOptions) (GTK_FILL), (GtkAttachOptions) (0), 0, 0); | |
| 157 | gtk_table_attach (GTK_TABLE (table), meter->button, 3, 4, *rows, *rows+1, (GtkAttachOptions) (GTK_FILL), (GtkAttachOptions) (0), 0, 0); | |
| 158 | ||
| 159 | gtk_widget_show_all (GTK_WIDGET (meter_win->window)); | |
| 160 | ||
| 161 | meter_win->active_count++; | |
| 162 | ||
| 163 | return meter; | |
| 164 | } | |
| 165 | ||
| 166 | static void kill_meter(struct signon_meter *meter, const char *text) { | |
| 167 | gtk_widget_set_sensitive (meter->button, FALSE); | |
| 168 | gtk_progress_bar_set_fraction(GTK_PROGRESS_BAR(meter->progress), 1); | |
| 169 | gtk_label_set_text(GTK_LABEL(meter->status), text); | |
| 170 | meter_win->active_count--; | |
| 171 | if (meter_win->active_count == 0) { | |
| 172 | gtk_widget_destroy(meter_win->window); | |
| 173 | g_free (meter_win); | |
| 174 | meter_win = NULL; | |
| 175 | } | |
| 176 | } | |
| 177 | ||
| 178 | static void gaim_gtk_connection_connect_progress(GaimConnection *gc, | |
| 179 | const char *text, size_t step, size_t step_count) | |
| 180 | { | |
| 181 | struct signon_meter *meter; | |
| 182 | ||
| 183 | if(!meter_win) { | |
| 184 | GtkWidget *vbox; | |
| 185 | GtkWidget *cancel_button; | |
| 186 | ||
| 187 | if(mainwindow) | |
| 188 | gtk_widget_hide(mainwindow); | |
| 189 | ||
| 190 | meter_win = g_new0(struct meter_window, 1); | |
| 191 | meter_win->window = gtk_window_new(GTK_WINDOW_TOPLEVEL); | |
| 192 | gtk_window_set_resizable(GTK_WINDOW(meter_win->window), FALSE); | |
| 193 | gtk_window_set_role(GTK_WINDOW(meter_win->window), "signon"); | |
| 194 | gtk_container_set_border_width(GTK_CONTAINER(meter_win->window), 5); | |
| 195 | gtk_window_set_title(GTK_WINDOW(meter_win->window), _("Signon")); | |
| 196 | gtk_widget_realize(meter_win->window); | |
| 197 | ||
| 198 | vbox = gtk_vbox_new (FALSE, 0); | |
| 199 | gtk_container_add(GTK_CONTAINER(meter_win->window), vbox); | |
| 200 | ||
| 201 | meter_win->table = gtk_table_new(1, 4, FALSE); | |
| 202 | gtk_box_pack_start(GTK_BOX(vbox), GTK_WIDGET(meter_win->table), | |
| 203 | FALSE, FALSE, 0); | |
| 204 | gtk_container_set_border_width(GTK_CONTAINER(meter_win->table), 5); | |
| 205 | gtk_table_set_row_spacings(GTK_TABLE(meter_win->table), 5); | |
| 206 | gtk_table_set_col_spacings(GTK_TABLE(meter_win->table), 10); | |
| 207 | ||
| 208 | cancel_button = gaim_pixbuf_button_from_stock(_("Cancel All"), | |
| 209 | GTK_STOCK_QUIT, GAIM_BUTTON_HORIZONTAL); | |
| 210 | g_signal_connect_swapped(G_OBJECT(cancel_button), "clicked", | |
| 211 | G_CALLBACK(cancel_all), NULL); | |
| 212 | gtk_box_pack_start(GTK_BOX(vbox), GTK_WIDGET(cancel_button), | |
| 213 | FALSE, FALSE, 0); | |
| 214 | ||
| 215 | g_signal_connect(G_OBJECT(meter_win->window), "delete_event", | |
| 216 | G_CALLBACK(meter_destroy), NULL); | |
| 217 | } | |
| 218 | ||
| 219 | meter = find_signon_meter(gc); | |
| 220 | if(!meter) { | |
| 221 | meter = new_meter(gc, meter_win->window, meter_win->table, | |
| 222 | &meter_win->rows); | |
| 223 | ||
| 224 | meter_win->meters = g_slist_append(meter_win->meters, meter); | |
| 225 | } | |
| 226 | ||
| 227 | gtk_progress_bar_set_fraction(GTK_PROGRESS_BAR(meter->progress), | |
| 228 | (float)step / (float)step_count); | |
| 229 | gtk_label_set_text(GTK_LABEL(meter->status), text); | |
| 230 | } | |
| 231 | ||
| 232 | static void gaim_gtk_connection_connected(GaimConnection *gc) | |
| 233 | { | |
| 234 | struct signon_meter *meter = find_signon_meter(gc); | |
| 235 | ||
|
5885
223ac977eed2
[gaim-migrate @ 6317]
Christian Hammond <chipx86@chipx86.com>
parents:
5883
diff
changeset
|
236 | gaim_setup(gc); |
|
223ac977eed2
[gaim-migrate @ 6317]
Christian Hammond <chipx86@chipx86.com>
parents:
5883
diff
changeset
|
237 | |
|
223ac977eed2
[gaim-migrate @ 6317]
Christian Hammond <chipx86@chipx86.com>
parents:
5883
diff
changeset
|
238 | do_away_menu(); |
|
5936
4bac764cc792
[gaim-migrate @ 6376]
Christian Hammond <chipx86@chipx86.com>
parents:
5885
diff
changeset
|
239 | gaim_gtk_blist_update_protocol_actions(); |
|
5885
223ac977eed2
[gaim-migrate @ 6317]
Christian Hammond <chipx86@chipx86.com>
parents:
5883
diff
changeset
|
240 | |
| 5717 | 241 | if(meter) |
| 242 | kill_meter(meter, _("Done.")); | |
| 243 | } | |
| 244 | ||
|
6460
fc288e7221ca
[gaim-migrate @ 6969]
Christian Hammond <chipx86@chipx86.com>
parents:
6371
diff
changeset
|
245 | static void gaim_gtk_connection_disconnected(GaimConnection *gc) |
| 5717 | 246 | { |
| 247 | struct signon_meter *meter = find_signon_meter(gc); | |
|
5883
290fe1d16e60
[gaim-migrate @ 6315]
Christian Hammond <chipx86@chipx86.com>
parents:
5872
diff
changeset
|
248 | |
|
5885
223ac977eed2
[gaim-migrate @ 6317]
Christian Hammond <chipx86@chipx86.com>
parents:
5883
diff
changeset
|
249 | do_away_menu(); |
|
5936
4bac764cc792
[gaim-migrate @ 6376]
Christian Hammond <chipx86@chipx86.com>
parents:
5885
diff
changeset
|
250 | gaim_gtk_blist_update_protocol_actions(); |
|
5883
290fe1d16e60
[gaim-migrate @ 6315]
Christian Hammond <chipx86@chipx86.com>
parents:
5872
diff
changeset
|
251 | |
| 5717 | 252 | if(meter) |
| 253 | kill_meter(meter, _("Done.")); | |
|
5883
290fe1d16e60
[gaim-migrate @ 6315]
Christian Hammond <chipx86@chipx86.com>
parents:
5872
diff
changeset
|
254 | |
|
290fe1d16e60
[gaim-migrate @ 6315]
Christian Hammond <chipx86@chipx86.com>
parents:
5872
diff
changeset
|
255 | if (gaim_connections_get_all() != NULL) |
|
290fe1d16e60
[gaim-migrate @ 6315]
Christian Hammond <chipx86@chipx86.com>
parents:
5872
diff
changeset
|
256 | return; |
|
290fe1d16e60
[gaim-migrate @ 6315]
Christian Hammond <chipx86@chipx86.com>
parents:
5872
diff
changeset
|
257 | |
|
290fe1d16e60
[gaim-migrate @ 6315]
Christian Hammond <chipx86@chipx86.com>
parents:
5872
diff
changeset
|
258 | destroy_all_dialogs(); |
|
290fe1d16e60
[gaim-migrate @ 6315]
Christian Hammond <chipx86@chipx86.com>
parents:
5872
diff
changeset
|
259 | |
|
290fe1d16e60
[gaim-migrate @ 6315]
Christian Hammond <chipx86@chipx86.com>
parents:
5872
diff
changeset
|
260 | gaim_blist_destroy(); |
|
290fe1d16e60
[gaim-migrate @ 6315]
Christian Hammond <chipx86@chipx86.com>
parents:
5872
diff
changeset
|
261 | |
|
290fe1d16e60
[gaim-migrate @ 6315]
Christian Hammond <chipx86@chipx86.com>
parents:
5872
diff
changeset
|
262 | show_login(); |
| 5717 | 263 | } |
| 264 | ||
| 265 | static void gaim_gtk_connection_notice(GaimConnection *gc, | |
| 266 | const char *text) | |
| 267 | { | |
| 268 | } | |
| 269 | ||
| 7399 | 270 | struct disconnect_window { |
| 271 | GtkWidget *window; | |
| 272 | GtkWidget *treeview; | |
| 273 | GtkWidget *sw; | |
| 274 | GtkWidget *label; | |
| 7808 | 275 | GtkWidget *reconnect_btn; |
| 7399 | 276 | }; |
| 277 | struct disconnect_window *disconnect_window = NULL; | |
| 278 | ||
| 7493 | 279 | static void disconnect_window_hide() |
| 280 | { | |
| 281 | gtk_widget_destroy(disconnect_window->window); | |
| 282 | g_free(disconnect_window); | |
| 283 | disconnect_window = NULL; | |
| 284 | } | |
| 285 | ||
| 7399 | 286 | static void disconnect_response_cb(GtkDialog *dialog, gint id, GtkWidget *widget) |
| 287 | { | |
|
7483
08237091e8a5
[gaim-migrate @ 8096]
Mark Doliner <markdoliner@pidgin.im>
parents:
7431
diff
changeset
|
288 | GtkTreeIter iter; |
|
08237091e8a5
[gaim-migrate @ 8096]
Mark Doliner <markdoliner@pidgin.im>
parents:
7431
diff
changeset
|
289 | GtkTreeSelection *sel = NULL; |
|
08237091e8a5
[gaim-migrate @ 8096]
Mark Doliner <markdoliner@pidgin.im>
parents:
7431
diff
changeset
|
290 | GtkTreeModel *model = NULL; |
| 7431 | 291 | GaimAccount *account = NULL; |
| 292 | ||
| 7399 | 293 | switch(id) { |
| 7506 | 294 | case GTK_RESPONSE_DELETE_EVENT: |
| 7399 | 295 | case GTK_RESPONSE_CLOSE: |
| 7493 | 296 | disconnect_window_hide(); |
| 7399 | 297 | break; |
| 7808 | 298 | case GTK_RESPONSE_APPLY: //Reconnect All |
| 299 | model = gtk_tree_view_get_model(GTK_TREE_VIEW(disconnect_window->treeview)); | |
| 300 | if (gtk_tree_model_get_iter_first(model, &iter)) { | |
| 301 | /* tree rows to be deleted */ | |
| 302 | GList *l_del = NULL, *l_del_iter = NULL; | |
| 303 | /* accounts to be connected */ | |
| 304 | GList *l_accts = NULL, *l_accts_iter =NULL; | |
| 305 | do { | |
| 306 | GtkTreePath *path = gtk_tree_model_get_path(model, &iter); | |
| 307 | GtkTreeRowReference* del_row = gtk_tree_row_reference_new(model, path); | |
| 308 | l_del = g_list_append(l_del, del_row); | |
| 309 | gtk_tree_path_free(path); | |
| 310 | ||
| 311 | gtk_tree_model_get(model, &iter, 4, &account, -1); | |
| 312 | if (!gaim_account_is_connected(account) && g_list_find(l_accts, account) == NULL) | |
| 313 | l_accts = g_list_append(l_accts, account); | |
| 314 | } while (gtk_tree_model_iter_next(model, &iter)); | |
| 315 | ||
| 316 | /* remove all rows */ | |
| 317 | l_del_iter = l_del; | |
| 318 | while (l_del_iter != NULL) { | |
| 319 | GtkTreeRowReference* del_row = l_del_iter->data; | |
| 320 | GtkTreePath *path = gtk_tree_row_reference_get_path(del_row); | |
| 321 | if (gtk_tree_model_get_iter(model, &iter, path)) | |
| 322 | gtk_list_store_remove(GTK_LIST_STORE(model), &iter); | |
| 323 | gtk_tree_path_free(path); | |
| 324 | gtk_tree_row_reference_free(del_row); | |
| 325 | l_del_iter = l_del_iter->next; | |
| 326 | } | |
| 327 | g_list_free(l_del); | |
| 328 | ||
| 329 | /* reconnect disconnected accounts */ | |
| 330 | l_accts_iter = l_accts; | |
| 331 | while (l_accts_iter != NULL) { | |
| 332 | account = l_accts_iter->data; | |
| 333 | gaim_account_connect(account); | |
| 334 | l_accts_iter = l_accts_iter->next; | |
| 335 | } | |
| 336 | g_list_free(l_accts); | |
| 337 | ||
| 338 | /* | |
| 339 | * if we don't have any rows left, | |
| 340 | * meaning that nothing was disconnected during our reconnections, | |
| 341 | * hide the dialog | |
| 342 | */ | |
| 343 | if (!gtk_tree_model_get_iter_first(model, &iter)) | |
| 344 | disconnect_window_hide(); | |
| 345 | else { | |
| 346 | gtk_tree_selection_select_iter(sel, &iter); | |
| 347 | if (!gtk_tree_model_iter_next(model, &iter)) { | |
| 348 | gtk_widget_hide_all(disconnect_window->sw); | |
| 349 | } | |
| 350 | } | |
| 351 | } | |
| 352 | ||
| 353 | break; | |
| 354 | case GTK_RESPONSE_ACCEPT: //Reconnect Selected | |
|
7483
08237091e8a5
[gaim-migrate @ 8096]
Mark Doliner <markdoliner@pidgin.im>
parents:
7431
diff
changeset
|
355 | model = gtk_tree_view_get_model(GTK_TREE_VIEW(disconnect_window->treeview)); |
|
08237091e8a5
[gaim-migrate @ 8096]
Mark Doliner <markdoliner@pidgin.im>
parents:
7431
diff
changeset
|
356 | /* |
|
08237091e8a5
[gaim-migrate @ 8096]
Mark Doliner <markdoliner@pidgin.im>
parents:
7431
diff
changeset
|
357 | * If we have more than one account disconnection displayed, then |
|
08237091e8a5
[gaim-migrate @ 8096]
Mark Doliner <markdoliner@pidgin.im>
parents:
7431
diff
changeset
|
358 | * the scroll window is visible and we should use the selected |
|
08237091e8a5
[gaim-migrate @ 8096]
Mark Doliner <markdoliner@pidgin.im>
parents:
7431
diff
changeset
|
359 | * account to reconnect. |
|
08237091e8a5
[gaim-migrate @ 8096]
Mark Doliner <markdoliner@pidgin.im>
parents:
7431
diff
changeset
|
360 | */ |
|
08237091e8a5
[gaim-migrate @ 8096]
Mark Doliner <markdoliner@pidgin.im>
parents:
7431
diff
changeset
|
361 | if (GTK_WIDGET_VISIBLE(disconnect_window->sw)) { |
|
08237091e8a5
[gaim-migrate @ 8096]
Mark Doliner <markdoliner@pidgin.im>
parents:
7431
diff
changeset
|
362 | sel = gtk_tree_view_get_selection(GTK_TREE_VIEW(disconnect_window->treeview)); |
|
08237091e8a5
[gaim-migrate @ 8096]
Mark Doliner <markdoliner@pidgin.im>
parents:
7431
diff
changeset
|
363 | if (!gtk_tree_selection_get_selected(sel, &model, &iter)) |
|
08237091e8a5
[gaim-migrate @ 8096]
Mark Doliner <markdoliner@pidgin.im>
parents:
7431
diff
changeset
|
364 | return; |
|
08237091e8a5
[gaim-migrate @ 8096]
Mark Doliner <markdoliner@pidgin.im>
parents:
7431
diff
changeset
|
365 | } else { |
|
08237091e8a5
[gaim-migrate @ 8096]
Mark Doliner <markdoliner@pidgin.im>
parents:
7431
diff
changeset
|
366 | /* There is only one account disconnection, so reconnect to it. */ |
|
08237091e8a5
[gaim-migrate @ 8096]
Mark Doliner <markdoliner@pidgin.im>
parents:
7431
diff
changeset
|
367 | if (!gtk_tree_model_get_iter_first(model, &iter)) |
|
08237091e8a5
[gaim-migrate @ 8096]
Mark Doliner <markdoliner@pidgin.im>
parents:
7431
diff
changeset
|
368 | return; |
|
08237091e8a5
[gaim-migrate @ 8096]
Mark Doliner <markdoliner@pidgin.im>
parents:
7431
diff
changeset
|
369 | } |
| 7808 | 370 | gtk_tree_model_get(model, &iter, 4, &account, -1); |
| 7643 | 371 | /* remove all disconnections of the account to be reconnected */ |
| 7637 | 372 | if (gtk_tree_model_get_iter_first(model, &iter)) { |
| 7808 | 373 | GList *l_del = NULL, *l_del_iter = NULL; |
| 7637 | 374 | GaimAccount *account2 = NULL; |
| 375 | do { | |
| 7808 | 376 | gtk_tree_model_get(model, &iter, 4, &account2, -1); |
| 7637 | 377 | if (account2 == account) { |
| 7643 | 378 | GtkTreePath *path = gtk_tree_model_get_path(model, &iter); |
| 379 | GtkTreeRowReference* del_row = gtk_tree_row_reference_new(model, path); | |
| 380 | l_del = g_list_append(l_del, del_row); | |
| 7808 | 381 | gtk_tree_path_free(path); |
| 7637 | 382 | } |
| 7643 | 383 | } while (gtk_tree_model_iter_next(model, &iter)); |
| 384 | ||
| 7808 | 385 | l_del_iter = l_del; |
| 386 | while (l_del_iter != NULL) { | |
| 387 | GtkTreeRowReference* del_row = l_del_iter->data; | |
| 7643 | 388 | GtkTreePath *path = gtk_tree_row_reference_get_path(del_row); |
| 389 | if (gtk_tree_model_get_iter(model, &iter, path)) | |
| 390 | gtk_list_store_remove(GTK_LIST_STORE(model), &iter); | |
| 7808 | 391 | gtk_tree_path_free(path); |
| 392 | gtk_tree_row_reference_free(del_row); | |
| 393 | l_del_iter = l_del_iter->next; | |
| 7643 | 394 | } |
| 7808 | 395 | g_list_free(l_del); |
| 7637 | 396 | } |
| 397 | ||
| 7643 | 398 | gaim_account_connect(account); |
| 399 | ||
| 7552 | 400 | if (!gtk_tree_model_get_iter_first(model, &iter)) |
| 401 | disconnect_window_hide(); | |
| 402 | else { | |
| 403 | gtk_tree_selection_select_iter(sel, &iter); | |
| 404 | if (!gtk_tree_model_iter_next(model, &iter)) | |
| 405 | gtk_widget_hide_all(disconnect_window->sw); | |
| 7493 | 406 | } |
| 7399 | 407 | break; |
| 408 | } | |
| 409 | } | |
| 410 | ||
| 411 | static void disconnect_tree_cb(GtkTreeSelection *sel, GtkTreeModel *model) | |
| 412 | { | |
| 413 | GtkTreeIter iter; | |
| 414 | ||
| 7808 | 415 | if (gtk_tree_selection_get_selected (sel, &model, &iter)) { |
| 416 | const char *label_text; | |
| 417 | GaimAccount *account = NULL; | |
| 418 | gtk_tree_model_get(model, &iter, | |
| 419 | 3, &label_text, | |
| 420 | 4, &account, -1); | |
| 421 | gtk_button_set_label( | |
| 422 | GTK_BUTTON(disconnect_window->reconnect_btn), | |
| 423 | gaim_account_is_connected(account) | |
| 424 | ? _("_Remove") | |
| 425 | : _("_Reconnect")); | |
| 426 | gtk_label_set_markup(GTK_LABEL(disconnect_window->label), label_text); | |
| 427 | gtk_dialog_set_response_sensitive(GTK_DIALOG(disconnect_window->window), GTK_RESPONSE_ACCEPT, TRUE); | |
| 428 | } else | |
| 7637 | 429 | gtk_dialog_set_response_sensitive(GTK_DIALOG(disconnect_window->window), GTK_RESPONSE_ACCEPT, FALSE); |
| 7399 | 430 | } |
| 431 | ||
| 7808 | 432 | static void disconnect_connection_change_cb(GaimConnection *gc, void *data) { |
| 7625 | 433 | if (disconnect_window) { |
| 7808 | 434 | GaimAccount *account = gaim_connection_get_account(gc); |
| 435 | gboolean signed_off = !gaim_account_is_connected(account); | |
| 436 | GtkTreeIter iter; | |
| 7625 | 437 | GtkTreeModel *model = gtk_tree_view_get_model(GTK_TREE_VIEW(disconnect_window->treeview)); |
| 7637 | 438 | GdkPixbuf *icon = create_prpl_icon(account); |
| 439 | GdkPixbuf *scale = gdk_pixbuf_scale_simple(icon, 16, 16, GDK_INTERP_BILINEAR); | |
| 7808 | 440 | /* mark all disconnections w/ the account type disconnected /w grey icon */ |
| 441 | if (signed_off) | |
| 442 | gdk_pixbuf_saturate_and_pixelate(scale, scale, 0.0, FALSE); | |
| 7625 | 443 | if (gtk_tree_model_get_iter_first(model, &iter)) { |
| 7808 | 444 | GList *l_disc_accts = NULL; |
| 445 | GtkTreeSelection *sel = gtk_tree_view_get_selection(GTK_TREE_VIEW(disconnect_window->treeview)); | |
| 446 | GtkTreeIter iter_selected; | |
| 447 | GtkTreePath *sel_path = NULL; | |
| 448 | if (gtk_tree_selection_get_selected(sel, &model, &iter_selected)) | |
| 449 | sel_path = gtk_tree_model_get_path(model, &iter_selected); | |
| 7625 | 450 | do { |
| 7808 | 451 | GaimAccount *account2 = NULL; |
| 452 | gtk_tree_model_get(model, &iter, 4, &account2, -1); | |
| 7637 | 453 | if (account2 == account) { |
| 7808 | 454 | GtkTreePath *path = gtk_tree_model_get_path(model, &iter); |
| 7637 | 455 | gtk_list_store_set(GTK_LIST_STORE(model), &iter, 0, scale, -1); |
| 7808 | 456 | /* update the reconnect button if appropriate */ |
| 457 | if (sel_path != NULL && gtk_tree_path_compare(path, sel_path) == 0) | |
| 458 | gtk_button_set_label( | |
| 459 | GTK_BUTTON(disconnect_window->reconnect_btn), | |
| 460 | signed_off ? _("_Reconnect") : _("_Remove")); | |
| 461 | gtk_tree_path_free(path); | |
| 7625 | 462 | } |
| 7808 | 463 | if (!gaim_account_is_connected(account2) |
| 464 | && g_list_find(l_disc_accts, account2) == NULL) | |
| 465 | l_disc_accts = g_list_append(l_disc_accts, account2); | |
| 7625 | 466 | } while (gtk_tree_model_iter_next(model, &iter)); |
| 7808 | 467 | |
| 468 | gtk_tree_path_free(sel_path); | |
| 469 | ||
| 470 | gtk_dialog_set_response_sensitive( | |
| 471 | GTK_DIALOG(disconnect_window->window), | |
| 472 | GTK_RESPONSE_APPLY, | |
| 473 | g_list_length(l_disc_accts) > 1); | |
| 474 | g_list_free(l_disc_accts); | |
| 7625 | 475 | } |
| 7637 | 476 | if (icon != NULL) g_object_unref(G_OBJECT(icon)); |
| 477 | if (scale != NULL) g_object_unref(G_OBJECT(scale)); | |
| 7625 | 478 | } |
| 479 | } | |
| 7399 | 480 | |
|
6460
fc288e7221ca
[gaim-migrate @ 6969]
Christian Hammond <chipx86@chipx86.com>
parents:
6371
diff
changeset
|
481 | static void |
|
fc288e7221ca
[gaim-migrate @ 6969]
Christian Hammond <chipx86@chipx86.com>
parents:
6371
diff
changeset
|
482 | gaim_gtk_connection_report_disconnect(GaimConnection *gc, const char *text) |
|
fc288e7221ca
[gaim-migrate @ 6969]
Christian Hammond <chipx86@chipx86.com>
parents:
6371
diff
changeset
|
483 | { |
| 7399 | 484 | char *label_text = NULL; |
| 7506 | 485 | GtkTreeIter new_row_iter, iter; |
| 486 | GtkListStore *list_store; | |
| 487 | GtkTreeViewColumn *col; | |
| 488 | GtkTreeSelection *sel = NULL; | |
| 7399 | 489 | |
| 7648 | 490 | label_text = g_strdup_printf(_("<span weight=\"bold\" size=\"larger\">%s has been disconnected.</span>\n\n%s\n%s"), |
| 7399 | 491 | gaim_account_get_username(gaim_connection_get_account(gc)), gaim_date_full(), |
| 492 | text ? text : _("Reason Unknown.")); | |
|
7496
3b934f0e54ef
[gaim-migrate @ 8109]
Mark Doliner <markdoliner@pidgin.im>
parents:
7493
diff
changeset
|
493 | |
| 7506 | 494 | /* Build the window if it isn't there yet */ |
| 495 | if (!disconnect_window) { | |
| 7399 | 496 | GtkWidget *hbox, *vbox, *img; |
| 497 | GtkCellRenderer *rend, *rend2; | |
|
7496
3b934f0e54ef
[gaim-migrate @ 8109]
Mark Doliner <markdoliner@pidgin.im>
parents:
7493
diff
changeset
|
498 | |
| 7407 | 499 | disconnect_window = g_new0(struct disconnect_window, 1); |
|
7874
03ead7bb8033
[gaim-migrate @ 8528]
Mark Doliner <markdoliner@pidgin.im>
parents:
7808
diff
changeset
|
500 | disconnect_window->window = gtk_dialog_new_with_buttons(GAIM_ALERT_TITLE, NULL, GTK_DIALOG_NO_SEPARATOR, NULL); |
| 7399 | 501 | g_signal_connect(G_OBJECT(disconnect_window->window), "response", G_CALLBACK(disconnect_response_cb), disconnect_window); |
| 502 | ||
| 503 | gtk_container_set_border_width(GTK_CONTAINER(disconnect_window->window), 6); | |
| 504 | gtk_window_set_resizable(GTK_WINDOW(disconnect_window->window), FALSE); | |
| 505 | gtk_dialog_set_has_separator(GTK_DIALOG(disconnect_window->window), FALSE); | |
| 506 | gtk_box_set_spacing(GTK_BOX(GTK_DIALOG(disconnect_window->window)->vbox), 12); | |
| 507 | gtk_container_set_border_width(GTK_CONTAINER(GTK_DIALOG(disconnect_window->window)->vbox), 6); | |
| 508 | ||
| 509 | hbox = gtk_hbox_new(FALSE, 12); | |
| 510 | gtk_container_add(GTK_CONTAINER(GTK_DIALOG(disconnect_window->window)->vbox), hbox); | |
| 511 | img = gtk_image_new_from_stock(GAIM_STOCK_DIALOG_ERROR, GTK_ICON_SIZE_DIALOG); | |
| 512 | gtk_misc_set_alignment(GTK_MISC(img), 0, 0); | |
| 513 | gtk_box_pack_start(GTK_BOX(hbox), img, FALSE, FALSE, 0); | |
|
7496
3b934f0e54ef
[gaim-migrate @ 8109]
Mark Doliner <markdoliner@pidgin.im>
parents:
7493
diff
changeset
|
514 | |
| 7399 | 515 | vbox = gtk_vbox_new(FALSE, 12); |
| 516 | gtk_box_pack_start(GTK_BOX(hbox), vbox, FALSE, FALSE, 0); | |
| 517 | ||
| 7506 | 518 | disconnect_window->label = gtk_label_new(label_text); |
|
7496
3b934f0e54ef
[gaim-migrate @ 8109]
Mark Doliner <markdoliner@pidgin.im>
parents:
7493
diff
changeset
|
519 | |
| 7399 | 520 | gtk_label_set_line_wrap(GTK_LABEL(disconnect_window->label), TRUE); |
| 521 | gtk_misc_set_alignment(GTK_MISC(disconnect_window->label), 0, 0); | |
| 522 | gtk_box_pack_start(GTK_BOX(vbox), disconnect_window->label, FALSE, FALSE, 0); | |
| 523 | ||
| 7808 | 524 | disconnect_window->reconnect_btn = gtk_dialog_add_button( |
| 525 | GTK_DIALOG(disconnect_window->window), | |
| 526 | _("_Reconnect"), | |
| 527 | GTK_RESPONSE_ACCEPT); | |
| 528 | ||
| 529 | gtk_dialog_add_button( | |
| 530 | GTK_DIALOG(disconnect_window->window), | |
| 531 | _("Reconnect _All"), | |
| 532 | GTK_RESPONSE_APPLY); | |
| 533 | ||
|
7874
03ead7bb8033
[gaim-migrate @ 8528]
Mark Doliner <markdoliner@pidgin.im>
parents:
7808
diff
changeset
|
534 | gtk_dialog_add_button( |
|
03ead7bb8033
[gaim-migrate @ 8528]
Mark Doliner <markdoliner@pidgin.im>
parents:
7808
diff
changeset
|
535 | GTK_DIALOG(disconnect_window->window), |
|
03ead7bb8033
[gaim-migrate @ 8528]
Mark Doliner <markdoliner@pidgin.im>
parents:
7808
diff
changeset
|
536 | GTK_STOCK_CLOSE, |
|
03ead7bb8033
[gaim-migrate @ 8528]
Mark Doliner <markdoliner@pidgin.im>
parents:
7808
diff
changeset
|
537 | GTK_RESPONSE_CLOSE); |
|
03ead7bb8033
[gaim-migrate @ 8528]
Mark Doliner <markdoliner@pidgin.im>
parents:
7808
diff
changeset
|
538 | |
| 7399 | 539 | gtk_widget_show_all(disconnect_window->window); |
|
6460
fc288e7221ca
[gaim-migrate @ 6969]
Christian Hammond <chipx86@chipx86.com>
parents:
6371
diff
changeset
|
540 | |
| 7808 | 541 | |
| 7399 | 542 | /* Tree View */ |
| 543 | disconnect_window->sw = gtk_scrolled_window_new(NULL,NULL); | |
| 544 | gtk_scrolled_window_set_shadow_type (GTK_SCROLLED_WINDOW(disconnect_window->sw), GTK_SHADOW_IN); | |
| 545 | gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW(disconnect_window->sw), GTK_POLICY_NEVER, GTK_POLICY_AUTOMATIC); | |
| 546 | gtk_box_pack_start(GTK_BOX(vbox), disconnect_window->sw, TRUE, TRUE, 0); | |
|
7496
3b934f0e54ef
[gaim-migrate @ 8109]
Mark Doliner <markdoliner@pidgin.im>
parents:
7493
diff
changeset
|
547 | |
| 7506 | 548 | list_store = gtk_list_store_new (5, GDK_TYPE_PIXBUF, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_POINTER); |
| 7399 | 549 | disconnect_window->treeview = gtk_tree_view_new_with_model (GTK_TREE_MODEL(list_store)); |
|
7496
3b934f0e54ef
[gaim-migrate @ 8109]
Mark Doliner <markdoliner@pidgin.im>
parents:
7493
diff
changeset
|
550 | |
| 7399 | 551 | rend = gtk_cell_renderer_pixbuf_new(); |
| 552 | rend2 = gtk_cell_renderer_text_new(); | |
| 553 | col = gtk_tree_view_column_new(); | |
| 554 | gtk_tree_view_column_set_title(col, _("Account")); | |
| 555 | gtk_tree_view_column_pack_start(col, rend, FALSE); | |
| 556 | gtk_tree_view_column_pack_start(col, rend2, FALSE); | |
| 557 | gtk_tree_view_column_set_attributes(col, rend, "pixbuf", 0, NULL); | |
| 558 | gtk_tree_view_column_set_attributes(col, rend2, "text", 1, NULL); | |
| 559 | gtk_tree_view_append_column (GTK_TREE_VIEW(disconnect_window->treeview), col); | |
|
7496
3b934f0e54ef
[gaim-migrate @ 8109]
Mark Doliner <markdoliner@pidgin.im>
parents:
7493
diff
changeset
|
560 | |
| 7399 | 561 | rend = gtk_cell_renderer_text_new(); |
| 562 | col = gtk_tree_view_column_new_with_attributes (_("Time"), | |
| 563 | rend, "text", 2, NULL); | |
| 564 | gtk_tree_view_append_column (GTK_TREE_VIEW(disconnect_window->treeview), col); | |
| 7637 | 565 | |
| 7399 | 566 | g_object_unref(G_OBJECT(list_store)); |
| 567 | gtk_container_add(GTK_CONTAINER(disconnect_window->sw), disconnect_window->treeview); | |
|
7496
3b934f0e54ef
[gaim-migrate @ 8109]
Mark Doliner <markdoliner@pidgin.im>
parents:
7493
diff
changeset
|
568 | |
| 7399 | 569 | sel = gtk_tree_view_get_selection (GTK_TREE_VIEW (disconnect_window->treeview)); |
| 7409 | 570 | gtk_widget_set_size_request(disconnect_window->treeview, -1, 96); |
| 7399 | 571 | g_signal_connect (G_OBJECT (sel), "changed", |
| 572 | G_CALLBACK (disconnect_tree_cb), list_store); | |
| 7625 | 573 | |
| 574 | gaim_signal_connect(gaim_connections_get_handle(), "signed-on", | |
| 7808 | 575 | disconnect_window, GAIM_CALLBACK(disconnect_connection_change_cb), NULL); |
| 576 | ||
| 577 | gaim_signal_connect(gaim_connections_get_handle(), "signed-off", | |
| 578 | disconnect_window, GAIM_CALLBACK(disconnect_connection_change_cb), NULL); | |
| 7625 | 579 | |
| 7506 | 580 | } else |
| 581 | list_store = GTK_LIST_STORE(gtk_tree_view_get_model(GTK_TREE_VIEW(disconnect_window->treeview))); | |
| 582 | ||
| 583 | /* Add this account to our list of disconnected accounts */ | |
| 584 | gtk_list_store_append(list_store, &new_row_iter); | |
| 585 | gtk_list_store_set(list_store, &new_row_iter, | |
| 7808 | 586 | 0, NULL, |
| 7506 | 587 | 1, gaim_account_get_username(gaim_connection_get_account(gc)), |
| 588 | 2, gaim_date_full(), | |
| 589 | 3, label_text, | |
| 590 | 4, gaim_connection_get_account(gc), -1); | |
| 591 | ||
| 592 | if (gtk_tree_model_get_iter_first(GTK_TREE_MODEL(list_store), &iter)) | |
| 593 | { | |
| 594 | sel = gtk_tree_view_get_selection(GTK_TREE_VIEW(disconnect_window->treeview)); | |
| 595 | gtk_tree_selection_select_iter(sel, &new_row_iter); | |
| 596 | /* if we have more than one disconnected acct, display the treeview */ | |
| 597 | if (gtk_tree_model_iter_next(GTK_TREE_MODEL(list_store), &iter)) | |
| 598 | gtk_widget_show_all(disconnect_window->sw); | |
| 7399 | 599 | } |
|
7496
3b934f0e54ef
[gaim-migrate @ 8109]
Mark Doliner <markdoliner@pidgin.im>
parents:
7493
diff
changeset
|
600 | |
| 7399 | 601 | g_free(label_text); |
| 7493 | 602 | gtk_window_present(GTK_WINDOW(disconnect_window->window)); |
|
6460
fc288e7221ca
[gaim-migrate @ 6969]
Christian Hammond <chipx86@chipx86.com>
parents:
6371
diff
changeset
|
603 | } |
|
fc288e7221ca
[gaim-migrate @ 6969]
Christian Hammond <chipx86@chipx86.com>
parents:
6371
diff
changeset
|
604 | |
| 5717 | 605 | static GaimConnectionUiOps conn_ui_ops = |
| 606 | { | |
| 607 | gaim_gtk_connection_connect_progress, | |
| 608 | gaim_gtk_connection_connected, | |
| 609 | gaim_gtk_connection_disconnected, | |
|
6460
fc288e7221ca
[gaim-migrate @ 6969]
Christian Hammond <chipx86@chipx86.com>
parents:
6371
diff
changeset
|
610 | gaim_gtk_connection_notice, |
|
fc288e7221ca
[gaim-migrate @ 6969]
Christian Hammond <chipx86@chipx86.com>
parents:
6371
diff
changeset
|
611 | gaim_gtk_connection_report_disconnect |
| 5717 | 612 | }; |
| 613 | ||
|
7035
76bca80cd91d
[gaim-migrate @ 7598]
Christian Hammond <chipx86@chipx86.com>
parents:
6460
diff
changeset
|
614 | GaimConnectionUiOps * |
|
76bca80cd91d
[gaim-migrate @ 7598]
Christian Hammond <chipx86@chipx86.com>
parents:
6460
diff
changeset
|
615 | gaim_gtk_connections_get_ui_ops(void) |
| 5717 | 616 | { |
| 617 | return &conn_ui_ops; | |
| 618 | } | |
| 619 | ||
| 6216 | 620 | void away_on_login(const char *mesg) |
| 5717 | 621 | { |
| 622 | GSList *awy = away_messages; | |
| 623 | struct away_message *a, *message = NULL; | |
|
7098
22eabd4f5ed4
[gaim-migrate @ 7663]
Christian Hammond <chipx86@chipx86.com>
parents:
7035
diff
changeset
|
624 | GaimGtkBuddyList *gtkblist; |
| 5717 | 625 | |
| 626 | gtkblist = GAIM_GTK_BLIST(gaim_get_blist()); | |
| 627 | ||
| 628 | if (!gtkblist->window) { | |
| 629 | return; | |
| 630 | } | |
| 631 | ||
| 6216 | 632 | if (mesg == NULL) |
| 633 | mesg = gaim_prefs_get_string("/core/away/default_message"); | |
| 634 | while (awy) { | |
| 635 | a = (struct away_message *)awy->data; | |
| 636 | if (strcmp(a->name, mesg) == 0) { | |
| 637 | message = a; | |
| 638 | break; | |
| 5717 | 639 | } |
| 6216 | 640 | awy = awy->next; |
| 5717 | 641 | } |
| 6216 | 642 | if (message == NULL) { |
| 643 | if(!away_messages) | |
| 644 | return; | |
| 645 | message = away_messages->data; | |
| 646 | } | |
| 647 | do_away_message(NULL, message); | |
| 5717 | 648 | } |