comparison src/gtkconn.c @ 7637:6afe28251c85

[gaim-migrate @ 8279] one very cool Mr. Daniel Atallah submitted this patch to make the disconnect dialog work the way I intended it to. committer: Tailor Script <tailor@pidgin.im>
author Sean Egan <seanegan@gmail.com>
date Wed, 26 Nov 2003 08:05:45 +0000
parents 1ffe44bb2573
children 99ae80bdffa1
comparison
equal deleted inserted replaced
7636:01c1b3ea70c6 7637:6afe28251c85
312 return; 312 return;
313 } 313 }
314 gtk_tree_model_get_value(model, &iter, 4, &val); 314 gtk_tree_model_get_value(model, &iter, 4, &val);
315 account = g_value_get_pointer(&val); 315 account = g_value_get_pointer(&val);
316 g_value_unset(&val); 316 g_value_unset(&val);
317 gtk_list_store_remove(GTK_LIST_STORE(model), &iter); 317 gaim_account_connect(account);
318 /* remove all disconnections of the account reconnected */
319 if (gtk_tree_model_get_iter_first(model, &iter)) {
320 GaimAccount *account2 = NULL;
321 gboolean alreadyIterated = FALSE;
322 do {
323 alreadyIterated = FALSE;
324 gtk_tree_model_get_value(model, &iter, 4, &val);
325 account2 = g_value_get_pointer(&val);
326 g_value_unset(&val);
327 if (account2 == account) {
328 if (!gtk_list_store_remove(GTK_LIST_STORE(model), &iter))
329 return;
330 alreadyIterated = TRUE;
331 }
332 g_value_unset(&val);
333 } while (alreadyIterated || gtk_tree_model_iter_next(model, &iter));
334 }
335
318 if (!gtk_tree_model_get_iter_first(model, &iter)) 336 if (!gtk_tree_model_get_iter_first(model, &iter))
319 disconnect_window_hide(); 337 disconnect_window_hide();
320 else { 338 else {
321 gtk_tree_selection_select_iter(sel, &iter); 339 gtk_tree_selection_select_iter(sel, &iter);
322 if (!gtk_tree_model_iter_next(model, &iter)) 340 if (!gtk_tree_model_iter_next(model, &iter))
323 gtk_widget_hide_all(disconnect_window->sw); 341 gtk_widget_hide_all(disconnect_window->sw);
324 } 342 }
325 gaim_account_connect(account);
326 break; 343 break;
327 } 344 }
328 } 345 }
329 346
330 static void disconnect_tree_cb(GtkTreeSelection *sel, GtkTreeModel *model) 347 static void disconnect_tree_cb(GtkTreeSelection *sel, GtkTreeModel *model)
331 { 348 {
332 GtkTreeIter iter; 349 GtkTreeIter iter;
333 GValue val = { 0, }; 350 GValue val = { 0, };
334 const char *label_text; 351 const char *label_text;
335 352
336 if (! gtk_tree_selection_get_selected (sel, &model, &iter)) 353 if (! gtk_tree_selection_get_selected (sel, &model, &iter)) {
354 gtk_dialog_set_response_sensitive(GTK_DIALOG(disconnect_window->window), GTK_RESPONSE_ACCEPT, FALSE);
337 return; 355 return;
356 } else
357 gtk_dialog_set_response_sensitive(GTK_DIALOG(disconnect_window->window), GTK_RESPONSE_ACCEPT, TRUE);
338 gtk_tree_model_get_value (model, &iter, 3, &val); 358 gtk_tree_model_get_value (model, &iter, 3, &val);
339 label_text = g_value_get_string(&val); 359 label_text = g_value_get_string(&val);
340 gtk_label_set_markup(GTK_LABEL(disconnect_window->label), label_text); 360 gtk_label_set_markup(GTK_LABEL(disconnect_window->label), label_text);
341 g_value_unset(&val); 361 g_value_unset(&val);
342 } 362 }
343 363
344 static void disconnect_signed_on_cb(GaimConnection *gc, void *data) 364 static void disconnect_signed_on_cb(GaimConnection *gc, void *data)
345 { 365 {
346 if (disconnect_window) { 366 if (disconnect_window) {
347 GtkTreeModel *model = gtk_tree_view_get_model(GTK_TREE_VIEW(disconnect_window->treeview)); 367 GtkTreeModel *model = gtk_tree_view_get_model(GTK_TREE_VIEW(disconnect_window->treeview));
368 GaimAccount *account = gaim_connection_get_account(gc);
369 GdkPixbuf *icon = create_prpl_icon(account);
370 GdkPixbuf *scale = gdk_pixbuf_scale_simple(icon, 16, 16, GDK_INTERP_BILINEAR);
348 GtkTreeIter iter; 371 GtkTreeIter iter;
349 if (gtk_tree_model_get_iter_first(model, &iter)) { 372 if (gtk_tree_model_get_iter_first(model, &iter)) {
350 GaimAccount *account = NULL; 373 GaimAccount *account2 = NULL;
351 do { 374 do {
352 GValue val = { 0, }; 375 GValue val = { 0, };
353 gtk_tree_model_get_value(model, &iter, 4, &val); 376 gtk_tree_model_get_value(model, &iter, 4, &val);
354 account = g_value_get_pointer(&val); 377 account2 = g_value_get_pointer(&val);
355 g_value_unset(&val); 378 g_value_unset(&val);
356 if (account == gaim_connection_get_account(gc)) { 379 if (account2 == account) {
357 gtk_list_store_remove(GTK_LIST_STORE(model), &iter); 380 gtk_list_store_set(GTK_LIST_STORE(model), &iter, 0, scale, -1);
358
359 if (!gtk_tree_model_get_iter_first(model, &iter))
360 disconnect_window_hide();
361 else {
362 GtkTreeSelection *sel = gtk_tree_view_get_selection(GTK_TREE_VIEW(disconnect_window->treeview));
363 gtk_tree_selection_select_iter(sel, &iter);
364 if (!gtk_tree_model_iter_next(model, &iter))
365 gtk_widget_hide_all(disconnect_window->sw);
366 }
367 break;
368 } 381 }
369 } while (gtk_tree_model_iter_next(model, &iter)); 382 } while (gtk_tree_model_iter_next(model, &iter));
370 } 383 }
384 if (icon != NULL) g_object_unref(G_OBJECT(icon));
385 if (scale != NULL) g_object_unref(G_OBJECT(scale));
371 } 386 }
372 } 387 }
373 388
374 static void 389 static void
375 gaim_gtk_connection_report_disconnect(GaimConnection *gc, const char *text) 390 gaim_gtk_connection_report_disconnect(GaimConnection *gc, const char *text)
442 457
443 rend = gtk_cell_renderer_text_new(); 458 rend = gtk_cell_renderer_text_new();
444 col = gtk_tree_view_column_new_with_attributes (_("Time"), 459 col = gtk_tree_view_column_new_with_attributes (_("Time"),
445 rend, "text", 2, NULL); 460 rend, "text", 2, NULL);
446 gtk_tree_view_append_column (GTK_TREE_VIEW(disconnect_window->treeview), col); 461 gtk_tree_view_append_column (GTK_TREE_VIEW(disconnect_window->treeview), col);
447 462
448 g_object_unref(G_OBJECT(list_store)); 463 g_object_unref(G_OBJECT(list_store));
449 gtk_container_add(GTK_CONTAINER(disconnect_window->sw), disconnect_window->treeview); 464 gtk_container_add(GTK_CONTAINER(disconnect_window->sw), disconnect_window->treeview);
450 465
451 sel = gtk_tree_view_get_selection (GTK_TREE_VIEW (disconnect_window->treeview)); 466 sel = gtk_tree_view_get_selection (GTK_TREE_VIEW (disconnect_window->treeview));
452 gtk_widget_set_size_request(disconnect_window->treeview, -1, 96); 467 gtk_widget_set_size_request(disconnect_window->treeview, -1, 96);
456 gaim_signal_connect(gaim_connections_get_handle(), "signed-on", 471 gaim_signal_connect(gaim_connections_get_handle(), "signed-on",
457 disconnect_window, GAIM_CALLBACK(disconnect_signed_on_cb), NULL); 472 disconnect_window, GAIM_CALLBACK(disconnect_signed_on_cb), NULL);
458 473
459 } else 474 } else
460 list_store = GTK_LIST_STORE(gtk_tree_view_get_model(GTK_TREE_VIEW(disconnect_window->treeview))); 475 list_store = GTK_LIST_STORE(gtk_tree_view_get_model(GTK_TREE_VIEW(disconnect_window->treeview)));
461 476 /* mark all disconnections w/ the account type disconnected /w grey icon */
462 /* If this account is already in our list then remove it */ 477 icon = create_prpl_icon(gaim_connection_get_account(gc));
478 scale = gdk_pixbuf_scale_simple(icon, 16, 16, GDK_INTERP_BILINEAR);
479 gdk_pixbuf_saturate_and_pixelate(scale, scale, 0.0, FALSE);
463 if (gtk_tree_model_get_iter_first(GTK_TREE_MODEL(list_store), &iter)) { 480 if (gtk_tree_model_get_iter_first(GTK_TREE_MODEL(list_store), &iter)) {
464 do { 481 do {
465 gtk_tree_model_get_value(GTK_TREE_MODEL(list_store), &iter, 4, &val); 482 gtk_tree_model_get_value(GTK_TREE_MODEL(list_store), &iter, 4, &val);
466 account = g_value_get_pointer(&val); 483 account = g_value_get_pointer(&val);
467 g_value_unset(&val); 484 g_value_unset(&val);
468 if (account == gaim_connection_get_account(gc)) { 485 if (account == gaim_connection_get_account(gc)) {
469 gtk_list_store_remove(list_store, &iter); 486 gtk_list_store_set(list_store, &iter, 0, scale, -1);
470 break;
471 } 487 }
472 } while (gtk_tree_model_iter_next(GTK_TREE_MODEL(list_store), &iter)); 488 } while (gtk_tree_model_iter_next(GTK_TREE_MODEL(list_store), &iter));
473 } 489 }
474 490
475 /* Add this account to our list of disconnected accounts */ 491 /* Add this account to our list of disconnected accounts */
476 icon = create_prpl_icon(gaim_connection_get_account(gc));
477 scale = gdk_pixbuf_scale_simple(icon, 16, 16, GDK_INTERP_BILINEAR);
478 gtk_list_store_append(list_store, &new_row_iter); 492 gtk_list_store_append(list_store, &new_row_iter);
479 gtk_list_store_set(list_store, &new_row_iter, 493 gtk_list_store_set(list_store, &new_row_iter,
480 0, scale, 494 0, scale,
481 1, gaim_account_get_username(gaim_connection_get_account(gc)), 495 1, gaim_account_get_username(gaim_connection_get_account(gc)),
482 2, gaim_date_full(), 496 2, gaim_date_full(),