comparison src/gtkconn.c @ 7496:39185ff57842

[gaim-migrate @ 8109] I lick this better. Do you? committer: Tailor Script <tailor@pidgin.im>
author Mark Doliner <mark@kingant.net>
date Thu, 13 Nov 2003 08:30:37 +0000
parents 6b9f452e84e1
children 240aca6344b6
comparison
equal deleted inserted replaced
7495:d620bfb81384 7496:39185ff57842
352 GtkTreeViewColumn *col; 352 GtkTreeViewColumn *col;
353 GtkListStore *list_store; 353 GtkListStore *list_store;
354 GtkTreeIter iter; 354 GtkTreeIter iter;
355 GValue val = { 0, }; 355 GValue val = { 0, };
356 GaimAccount *account = NULL; 356 GaimAccount *account = NULL;
357 357 gboolean multiple_disconnected = FALSE;
358 icon = create_prpl_icon(gaim_connection_get_account(gc)); 358
359 scale = gdk_pixbuf_scale_simple(icon, 16, 16, GDK_INTERP_BILINEAR); 359 /* Make sure we have a list_store */
360 if (!disconnect_window || !disconnect_window->treeview)
361 list_store = gtk_list_store_new (5, GDK_TYPE_PIXBUF, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_POINTER);
362 else
363 list_store = GTK_LIST_STORE(gtk_tree_view_get_model(GTK_TREE_VIEW(disconnect_window->treeview)));
364
365 /* If this account is already in our list then remove it */
366 if (gtk_tree_model_get_iter_first(GTK_TREE_MODEL(list_store), &iter)) {
367 do {
368 gtk_tree_model_get_value(GTK_TREE_MODEL(list_store), &iter, 4, &val);
369 account = g_value_get_pointer(&val);
370 g_value_unset(&val);
371 if (account == gaim_connection_get_account(gc)) {
372 gtk_list_store_remove(list_store, &iter);
373 break;
374 }
375 } while (gtk_tree_model_iter_next(GTK_TREE_MODEL(list_store), &iter));
376 }
360 377
361 label_text = g_strdup_printf("<span weight=\"bold\" size=\"larger\">%s has been disconnected.</span>\n\n%s\n%s", 378 label_text = g_strdup_printf("<span weight=\"bold\" size=\"larger\">%s has been disconnected.</span>\n\n%s\n%s",
362 gaim_account_get_username(gaim_connection_get_account(gc)), gaim_date_full(), 379 gaim_account_get_username(gaim_connection_get_account(gc)), gaim_date_full(),
363 text ? text : _("Reason Unknown.")); 380 text ? text : _("Reason Unknown."));
364 381
365 if (!disconnect_window) { 382 /* Add this account to our list of disconnected accounts */
383 icon = create_prpl_icon(gaim_connection_get_account(gc));
384 scale = gdk_pixbuf_scale_simple(icon, 16, 16, GDK_INTERP_BILINEAR);
385 gtk_list_store_append(list_store, &iter);
386 gtk_list_store_set(list_store, &iter,
387 0, scale,
388 1, gaim_account_get_username(gaim_connection_get_account(gc)),
389 2, gaim_date_full(),
390 3, label_text,
391 4, gaim_connection_get_account(gc), -1);
392 g_object_unref(G_OBJECT(icon));
393 g_object_unref(G_OBJECT(scale));
394
395 /* Check how many disconnected accounts we have */
396 if (gtk_tree_model_get_iter_first(GTK_TREE_MODEL(list_store), &iter))
397 if (gtk_tree_model_iter_next(GTK_TREE_MODEL(list_store), &iter))
398 multiple_disconnected = TRUE;
399
400 if (!disconnect_window || !multiple_disconnected) {
366 GtkWidget *hbox, *vbox, *img; 401 GtkWidget *hbox, *vbox, *img;
367 GtkCellRenderer *rend, *rend2; 402 GtkCellRenderer *rend, *rend2;
368 GtkTreeSelection *sel; 403 GtkTreeSelection *sel;
369 404
370 disconnect_window = g_new0(struct disconnect_window, 1); 405 disconnect_window = g_new0(struct disconnect_window, 1);
371 disconnect_window->window = gtk_dialog_new_with_buttons("", NULL, GTK_DIALOG_NO_SEPARATOR, 406 disconnect_window->window = gtk_dialog_new_with_buttons("", NULL, GTK_DIALOG_NO_SEPARATOR,
372 _("Reconnect"), GTK_RESPONSE_ACCEPT, 407 _("Reconnect"), GTK_RESPONSE_ACCEPT,
373 GTK_STOCK_CLOSE, GTK_RESPONSE_CLOSE, NULL); 408 GTK_STOCK_CLOSE, GTK_RESPONSE_CLOSE, NULL);
374 g_signal_connect(G_OBJECT(disconnect_window->window), "response", G_CALLBACK(disconnect_response_cb), disconnect_window); 409 g_signal_connect(G_OBJECT(disconnect_window->window), "response", G_CALLBACK(disconnect_response_cb), disconnect_window);
382 hbox = gtk_hbox_new(FALSE, 12); 417 hbox = gtk_hbox_new(FALSE, 12);
383 gtk_container_add(GTK_CONTAINER(GTK_DIALOG(disconnect_window->window)->vbox), hbox); 418 gtk_container_add(GTK_CONTAINER(GTK_DIALOG(disconnect_window->window)->vbox), hbox);
384 img = gtk_image_new_from_stock(GAIM_STOCK_DIALOG_ERROR, GTK_ICON_SIZE_DIALOG); 419 img = gtk_image_new_from_stock(GAIM_STOCK_DIALOG_ERROR, GTK_ICON_SIZE_DIALOG);
385 gtk_misc_set_alignment(GTK_MISC(img), 0, 0); 420 gtk_misc_set_alignment(GTK_MISC(img), 0, 0);
386 gtk_box_pack_start(GTK_BOX(hbox), img, FALSE, FALSE, 0); 421 gtk_box_pack_start(GTK_BOX(hbox), img, FALSE, FALSE, 0);
387 422
388 vbox = gtk_vbox_new(FALSE, 12); 423 vbox = gtk_vbox_new(FALSE, 12);
389 gtk_box_pack_start(GTK_BOX(hbox), vbox, FALSE, FALSE, 0); 424 gtk_box_pack_start(GTK_BOX(hbox), vbox, FALSE, FALSE, 0);
390 425
391 disconnect_window->label = gtk_label_new(NULL); 426 disconnect_window->label = gtk_label_new(NULL);
392 427
393 gtk_label_set_markup(GTK_LABEL(disconnect_window->label), label_text); 428 gtk_label_set_markup(GTK_LABEL(disconnect_window->label), label_text);
394 gtk_label_set_line_wrap(GTK_LABEL(disconnect_window->label), TRUE); 429 gtk_label_set_line_wrap(GTK_LABEL(disconnect_window->label), TRUE);
395 gtk_misc_set_alignment(GTK_MISC(disconnect_window->label), 0, 0); 430 gtk_misc_set_alignment(GTK_MISC(disconnect_window->label), 0, 0);
396 gtk_box_pack_start(GTK_BOX(vbox), disconnect_window->label, FALSE, FALSE, 0); 431 gtk_box_pack_start(GTK_BOX(vbox), disconnect_window->label, FALSE, FALSE, 0);
397 432
400 /* Tree View */ 435 /* Tree View */
401 disconnect_window->sw = gtk_scrolled_window_new(NULL,NULL); 436 disconnect_window->sw = gtk_scrolled_window_new(NULL,NULL);
402 gtk_scrolled_window_set_shadow_type (GTK_SCROLLED_WINDOW(disconnect_window->sw), GTK_SHADOW_IN); 437 gtk_scrolled_window_set_shadow_type (GTK_SCROLLED_WINDOW(disconnect_window->sw), GTK_SHADOW_IN);
403 gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW(disconnect_window->sw), GTK_POLICY_NEVER, GTK_POLICY_AUTOMATIC); 438 gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW(disconnect_window->sw), GTK_POLICY_NEVER, GTK_POLICY_AUTOMATIC);
404 gtk_box_pack_start(GTK_BOX(vbox), disconnect_window->sw, TRUE, TRUE, 0); 439 gtk_box_pack_start(GTK_BOX(vbox), disconnect_window->sw, TRUE, TRUE, 0);
405 440
406 list_store = gtk_list_store_new (5, GDK_TYPE_PIXBUF, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_POINTER);
407 gtk_list_store_append (list_store, &iter);
408 gtk_list_store_set(list_store, &iter,
409 0, scale,
410 1, gaim_account_get_username(gaim_connection_get_account(gc)),
411 2, gaim_date_full(),
412 3, label_text,
413 4, gaim_connection_get_account(gc), -1);
414
415 disconnect_window->treeview = gtk_tree_view_new_with_model (GTK_TREE_MODEL(list_store)); 441 disconnect_window->treeview = gtk_tree_view_new_with_model (GTK_TREE_MODEL(list_store));
416 442
417 rend = gtk_cell_renderer_pixbuf_new(); 443 rend = gtk_cell_renderer_pixbuf_new();
418 rend2 = gtk_cell_renderer_text_new(); 444 rend2 = gtk_cell_renderer_text_new();
419 col = gtk_tree_view_column_new(); 445 col = gtk_tree_view_column_new();
420 gtk_tree_view_column_set_title(col, _("Account")); 446 gtk_tree_view_column_set_title(col, _("Account"));
421 gtk_tree_view_column_pack_start(col, rend, FALSE); 447 gtk_tree_view_column_pack_start(col, rend, FALSE);
422 gtk_tree_view_column_pack_start(col, rend2, FALSE); 448 gtk_tree_view_column_pack_start(col, rend2, FALSE);
423 gtk_tree_view_column_set_attributes(col, rend, "pixbuf", 0, NULL); 449 gtk_tree_view_column_set_attributes(col, rend, "pixbuf", 0, NULL);
424 gtk_tree_view_column_set_attributes(col, rend2, "text", 1, NULL); 450 gtk_tree_view_column_set_attributes(col, rend2, "text", 1, NULL);
425 gtk_tree_view_append_column (GTK_TREE_VIEW(disconnect_window->treeview), col); 451 gtk_tree_view_append_column (GTK_TREE_VIEW(disconnect_window->treeview), col);
426 452
427 rend = gtk_cell_renderer_text_new(); 453 rend = gtk_cell_renderer_text_new();
428 col = gtk_tree_view_column_new_with_attributes (_("Time"), 454 col = gtk_tree_view_column_new_with_attributes (_("Time"),
429 rend, "text", 2, NULL); 455 rend, "text", 2, NULL);
430 gtk_tree_view_append_column (GTK_TREE_VIEW(disconnect_window->treeview), col); 456 gtk_tree_view_append_column (GTK_TREE_VIEW(disconnect_window->treeview), col);
431 457
432 g_object_unref(G_OBJECT(list_store)); 458 g_object_unref(G_OBJECT(list_store));
433 gtk_container_add(GTK_CONTAINER(disconnect_window->sw), disconnect_window->treeview); 459 gtk_container_add(GTK_CONTAINER(disconnect_window->sw), disconnect_window->treeview);
434 460
435 sel = gtk_tree_view_get_selection (GTK_TREE_VIEW (disconnect_window->treeview)); 461 sel = gtk_tree_view_get_selection (GTK_TREE_VIEW (disconnect_window->treeview));
436 gtk_widget_set_size_request(disconnect_window->treeview, -1, 96); 462 gtk_widget_set_size_request(disconnect_window->treeview, -1, 96);
437 g_signal_connect (G_OBJECT (sel), "changed", 463 g_signal_connect (G_OBJECT (sel), "changed",
438 G_CALLBACK (disconnect_tree_cb), list_store); 464 G_CALLBACK (disconnect_tree_cb), list_store);
439 } else { 465 } else {
440 list_store = GTK_LIST_STORE(gtk_tree_view_get_model(GTK_TREE_VIEW(disconnect_window->treeview)));
441 gboolean removedPreviousAccountDisconnection = FALSE;
442
443 if (gtk_tree_model_get_iter_first(GTK_TREE_MODEL(list_store), &iter)) {
444 do {
445 gtk_tree_model_get_value(GTK_TREE_MODEL(list_store), &iter, 4, &val);
446 account = g_value_get_pointer(&val);
447 g_value_unset(&val);
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 }
455
456 gtk_list_store_append (list_store, &iter);
457 gtk_list_store_set(list_store, &iter,
458 0, scale,
459 1, gaim_account_get_username(gaim_connection_get_account(gc)),
460 2, gaim_date_full(),
461 3, label_text,
462 4, gaim_connection_get_account(gc), -1);
463 gtk_label_set_markup(GTK_LABEL(disconnect_window->label), label_text); 466 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))
469 gtk_widget_show_all(disconnect_window->sw); 467 gtk_widget_show_all(disconnect_window->sw);
470 } 468 }
469
471 g_free(label_text); 470 g_free(label_text);
472 g_object_unref(G_OBJECT(icon));
473 g_object_unref(G_OBJECT(scale));
474 gtk_window_present(GTK_WINDOW(disconnect_window->window)); 471 gtk_window_present(GTK_WINDOW(disconnect_window->window));
475 } 472 }
476 473
477 static GaimConnectionUiOps conn_ui_ops = 474 static GaimConnectionUiOps conn_ui_ops =
478 { 475 {