Mercurial > pidgin.yaz
comparison src/gtkconn.c @ 7493:6b9f452e84e1
[gaim-migrate @ 8106]
Otro patchita de Daniel Atallah.
Este es mejor disconnection dialog stuff.
Muchos gracias Daniel!
committer: Tailor Script <tailor@pidgin.im>
author | Mark Doliner <mark@kingant.net> |
---|---|
date | Thu, 13 Nov 2003 07:14:01 +0000 |
parents | 4a416ff9cb4f |
children | 39185ff57842 |
comparison
equal
deleted
inserted
replaced
7492:0ecc3ab93938 | 7493:6b9f452e84e1 |
---|---|
273 GtkWidget *sw; | 273 GtkWidget *sw; |
274 GtkWidget *label; | 274 GtkWidget *label; |
275 }; | 275 }; |
276 struct disconnect_window *disconnect_window = NULL; | 276 struct disconnect_window *disconnect_window = NULL; |
277 | 277 |
278 static void disconnect_window_hide() | |
279 { | |
280 gtk_widget_destroy(disconnect_window->window); | |
281 g_free(disconnect_window); | |
282 disconnect_window = NULL; | |
283 } | |
284 | |
278 static void disconnect_response_cb(GtkDialog *dialog, gint id, GtkWidget *widget) | 285 static void disconnect_response_cb(GtkDialog *dialog, gint id, GtkWidget *widget) |
279 { | 286 { |
280 GtkTreeIter iter; | 287 GtkTreeIter iter; |
281 GValue val = { 0, }; | 288 GValue val = { 0, }; |
282 GtkTreeSelection *sel = NULL; | 289 GtkTreeSelection *sel = NULL; |
283 GtkTreeModel *model = NULL; | 290 GtkTreeModel *model = NULL; |
284 GaimAccount *account = NULL; | 291 GaimAccount *account = NULL; |
292 GaimConnection *gc = NULL; | |
285 | 293 |
286 switch(id) { | 294 switch(id) { |
287 case GTK_RESPONSE_CLOSE: | 295 case GTK_RESPONSE_CLOSE: |
288 gtk_widget_destroy(disconnect_window->window); | 296 disconnect_window_hide(); |
289 g_free(disconnect_window); | |
290 disconnect_window = NULL; | |
291 break; | 297 break; |
292 case GTK_RESPONSE_ACCEPT: | 298 case GTK_RESPONSE_ACCEPT: |
293 model = gtk_tree_view_get_model(GTK_TREE_VIEW(disconnect_window->treeview)); | 299 model = gtk_tree_view_get_model(GTK_TREE_VIEW(disconnect_window->treeview)); |
294 /* | 300 /* |
295 * If we have more than one account disconnection displayed, then | 301 * If we have more than one account disconnection displayed, then |
303 } else { | 309 } else { |
304 /* There is only one account disconnection, so reconnect to it. */ | 310 /* There is only one account disconnection, so reconnect to it. */ |
305 if (!gtk_tree_model_get_iter_first(model, &iter)) | 311 if (!gtk_tree_model_get_iter_first(model, &iter)) |
306 return; | 312 return; |
307 } | 313 } |
308 gtk_tree_model_get_value (model, &iter, 4, &val); | 314 gtk_tree_model_get_value(model, &iter, 4, &val); |
309 account = g_value_get_pointer(&val); | 315 account = g_value_get_pointer(&val); |
310 gaim_account_connect(account); | 316 gc = gaim_account_connect(account); |
311 g_value_unset(&val); | 317 g_value_unset(&val); |
318 if (gaim_connection_get_state(gc) != GAIM_DISCONNECTED) { | |
319 gtk_list_store_remove(GTK_LIST_STORE(model), &iter); | |
320 if (!gtk_tree_model_get_iter_first(model, &iter)) | |
321 disconnect_window_hide(); | |
322 else { | |
323 gtk_tree_selection_select_iter(sel, &iter); | |
324 if (!gtk_tree_model_iter_next(model, &iter)) | |
325 gtk_widget_hide_all(disconnect_window->sw); | |
326 } | |
327 } | |
312 break; | 328 break; |
313 } | 329 } |
314 } | 330 } |
315 | 331 |
316 static void disconnect_tree_cb(GtkTreeSelection *sel, GtkTreeModel *model) | 332 static void disconnect_tree_cb(GtkTreeSelection *sel, GtkTreeModel *model) |
420 gtk_widget_set_size_request(disconnect_window->treeview, -1, 96); | 436 gtk_widget_set_size_request(disconnect_window->treeview, -1, 96); |
421 g_signal_connect (G_OBJECT (sel), "changed", | 437 g_signal_connect (G_OBJECT (sel), "changed", |
422 G_CALLBACK (disconnect_tree_cb), list_store); | 438 G_CALLBACK (disconnect_tree_cb), list_store); |
423 } else { | 439 } else { |
424 list_store = GTK_LIST_STORE(gtk_tree_view_get_model(GTK_TREE_VIEW(disconnect_window->treeview))); | 440 list_store = GTK_LIST_STORE(gtk_tree_view_get_model(GTK_TREE_VIEW(disconnect_window->treeview))); |
425 | 441 gboolean removedPreviousAccountDisconnection = FALSE; |
426 gtk_tree_model_get_iter_first(GTK_TREE_MODEL(list_store), &iter); | 442 |
427 do { | 443 if (gtk_tree_model_get_iter_first(GTK_TREE_MODEL(list_store), &iter)) { |
428 gtk_tree_model_get_value(GTK_TREE_MODEL(list_store), &iter, 4, &val); | 444 do { |
429 account = g_value_get_pointer(&val); | 445 gtk_tree_model_get_value(GTK_TREE_MODEL(list_store), &iter, 4, &val); |
430 if (account == gaim_connection_get_account(gc)) | 446 account = g_value_get_pointer(&val); |
431 gtk_list_store_remove(list_store, &iter); | 447 g_value_unset(&val); |
432 } while (gtk_tree_model_iter_next(GTK_TREE_MODEL(list_store), &iter)); | 448 if (account == gaim_connection_get_account(gc)) { |
449 gtk_list_store_remove(list_store, &iter); | |
450 removedPreviousAccountDisconnection = TRUE; | |
451 break; | |
452 } | |
453 } while (gtk_tree_model_iter_next(GTK_TREE_MODEL(list_store), &iter)); | |
454 } | |
433 | 455 |
434 gtk_list_store_append (list_store, &iter); | 456 gtk_list_store_append (list_store, &iter); |
435 gtk_list_store_set(list_store, &iter, | 457 gtk_list_store_set(list_store, &iter, |
436 0, scale, | 458 0, scale, |
437 1, gaim_account_get_username(gaim_connection_get_account(gc)), | 459 1, gaim_account_get_username(gaim_connection_get_account(gc)), |
438 2, gaim_date_full(), | 460 2, gaim_date_full(), |
439 3, label_text, | 461 3, label_text, |
440 4, gaim_connection_get_account(gc), -1); | 462 4, gaim_connection_get_account(gc), -1); |
441 gtk_label_set_markup(GTK_LABEL(disconnect_window->label), label_text); | 463 gtk_label_set_markup(GTK_LABEL(disconnect_window->label), label_text); |
464 /* | |
465 * Only cause the tree view to show up if there will be | |
466 * more than one disconnection event listed in it. | |
467 */ | |
468 if (!removedPreviousAccountDisconnection || GTK_WIDGET_VISIBLE(disconnect_window->sw)) | |
442 gtk_widget_show_all(disconnect_window->sw); | 469 gtk_widget_show_all(disconnect_window->sw); |
443 } | 470 } |
444 g_free(label_text); | 471 g_free(label_text); |
445 g_object_unref(G_OBJECT(icon)); | 472 g_object_unref(G_OBJECT(icon)); |
446 g_object_unref(G_OBJECT(scale)); | 473 g_object_unref(G_OBJECT(scale)); |
474 gtk_window_present(GTK_WINDOW(disconnect_window->window)); | |
447 } | 475 } |
448 | 476 |
449 static GaimConnectionUiOps conn_ui_ops = | 477 static GaimConnectionUiOps conn_ui_ops = |
450 { | 478 { |
451 gaim_gtk_connection_connect_progress, | 479 gaim_gtk_connection_connect_progress, |