Mercurial > pidgin
changeset 7506:240aca6344b6
[gaim-migrate @ 8119]
I'm going climbing soon, but I'll be around later to make Mandrake
9.1 RPMs. 9.2 ISOs haven't been released to the public yet, AFAIK.
This is some more disconnection dialog stuff from Daniel Atallah.
It fixes a memleak (that I think I introduced), makes the most
recently disconnected account the selected account, and makes the
window manager close work correctly.
datallah: The fix for the window-manager-close-button is the
"case GTK_RESPONSE_DELETE_EVENT:" line.
committer: Tailor Script <tailor@pidgin.im>
author | Mark Doliner <mark@kingant.net> |
---|---|
date | Thu, 13 Nov 2003 23:57:45 +0000 |
parents | d29c2f50ac24 |
children | 5dbb710e39f2 |
files | ChangeLog src/gtkconn.c |
diffstat | 2 files changed, 46 insertions(+), 48 deletions(-) [+] |
line wrap: on
line diff
--- a/ChangeLog Thu Nov 13 22:46:41 2003 +0000 +++ b/ChangeLog Thu Nov 13 23:57:45 2003 +0000 @@ -5,6 +5,7 @@ * fixes i18n issues with logs * compatable with old logs * hopefully fixes segfault in viewing logs + * New disconnection account dialog (with bug fixes from Daniel Atallah) * Fixes several Jabber bugs * Fixes the bug where some dialogs would crash when spell checking was enabled. Closes #827930.
--- a/src/gtkconn.c Thu Nov 13 22:46:41 2003 +0000 +++ b/src/gtkconn.c Thu Nov 13 23:57:45 2003 +0000 @@ -292,6 +292,7 @@ GaimConnection *gc = NULL; switch(id) { + case GTK_RESPONSE_DELETE_EVENT: case GTK_RESPONSE_CLOSE: disconnect_window_hide(); break; @@ -349,58 +350,21 @@ { char *label_text = NULL; GdkPixbuf *scale, *icon; - GtkTreeViewColumn *col; - GtkListStore *list_store; - GtkTreeIter iter; + GtkTreeIter new_row_iter, iter; GValue val = { 0, }; GaimAccount *account = NULL; - gboolean multiple_disconnected = FALSE; - - /* Make sure we have a list_store */ - if (!disconnect_window || !disconnect_window->treeview) - list_store = gtk_list_store_new (5, GDK_TYPE_PIXBUF, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_POINTER); - else - list_store = GTK_LIST_STORE(gtk_tree_view_get_model(GTK_TREE_VIEW(disconnect_window->treeview))); - - /* If this account is already in our list then remove it */ - if (gtk_tree_model_get_iter_first(GTK_TREE_MODEL(list_store), &iter)) { - do { - gtk_tree_model_get_value(GTK_TREE_MODEL(list_store), &iter, 4, &val); - account = g_value_get_pointer(&val); - g_value_unset(&val); - if (account == gaim_connection_get_account(gc)) { - gtk_list_store_remove(list_store, &iter); - break; - } - } while (gtk_tree_model_iter_next(GTK_TREE_MODEL(list_store), &iter)); - } + GtkListStore *list_store; + GtkTreeViewColumn *col; + GtkTreeSelection *sel = NULL; label_text = g_strdup_printf("<span weight=\"bold\" size=\"larger\">%s has been disconnected.</span>\n\n%s\n%s", gaim_account_get_username(gaim_connection_get_account(gc)), gaim_date_full(), text ? text : _("Reason Unknown.")); - /* Add this account to our list of disconnected accounts */ - icon = create_prpl_icon(gaim_connection_get_account(gc)); - scale = gdk_pixbuf_scale_simple(icon, 16, 16, GDK_INTERP_BILINEAR); - gtk_list_store_append(list_store, &iter); - gtk_list_store_set(list_store, &iter, - 0, scale, - 1, gaim_account_get_username(gaim_connection_get_account(gc)), - 2, gaim_date_full(), - 3, label_text, - 4, gaim_connection_get_account(gc), -1); - g_object_unref(G_OBJECT(icon)); - g_object_unref(G_OBJECT(scale)); - - /* Check how many disconnected accounts we have */ - if (gtk_tree_model_get_iter_first(GTK_TREE_MODEL(list_store), &iter)) - if (gtk_tree_model_iter_next(GTK_TREE_MODEL(list_store), &iter)) - multiple_disconnected = TRUE; - - if (!disconnect_window || !multiple_disconnected) { + /* Build the window if it isn't there yet */ + if (!disconnect_window) { GtkWidget *hbox, *vbox, *img; GtkCellRenderer *rend, *rend2; - GtkTreeSelection *sel; disconnect_window = g_new0(struct disconnect_window, 1); disconnect_window->window = gtk_dialog_new_with_buttons("", NULL, GTK_DIALOG_NO_SEPARATOR, @@ -423,9 +387,8 @@ vbox = gtk_vbox_new(FALSE, 12); gtk_box_pack_start(GTK_BOX(hbox), vbox, FALSE, FALSE, 0); - disconnect_window->label = gtk_label_new(NULL); + disconnect_window->label = gtk_label_new(label_text); - gtk_label_set_markup(GTK_LABEL(disconnect_window->label), label_text); gtk_label_set_line_wrap(GTK_LABEL(disconnect_window->label), TRUE); gtk_misc_set_alignment(GTK_MISC(disconnect_window->label), 0, 0); gtk_box_pack_start(GTK_BOX(vbox), disconnect_window->label, FALSE, FALSE, 0); @@ -438,6 +401,7 @@ gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW(disconnect_window->sw), GTK_POLICY_NEVER, GTK_POLICY_AUTOMATIC); gtk_box_pack_start(GTK_BOX(vbox), disconnect_window->sw, TRUE, TRUE, 0); + list_store = gtk_list_store_new (5, GDK_TYPE_PIXBUF, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_POINTER); disconnect_window->treeview = gtk_tree_view_new_with_model (GTK_TREE_MODEL(list_store)); rend = gtk_cell_renderer_pixbuf_new(); @@ -462,9 +426,42 @@ gtk_widget_set_size_request(disconnect_window->treeview, -1, 96); g_signal_connect (G_OBJECT (sel), "changed", G_CALLBACK (disconnect_tree_cb), list_store); - } else { - gtk_label_set_markup(GTK_LABEL(disconnect_window->label), label_text); - gtk_widget_show_all(disconnect_window->sw); + } else + list_store = GTK_LIST_STORE(gtk_tree_view_get_model(GTK_TREE_VIEW(disconnect_window->treeview))); + + /* If this account is already in our list then remove it */ + if (gtk_tree_model_get_iter_first(GTK_TREE_MODEL(list_store), &iter)) { + do { + gtk_tree_model_get_value(GTK_TREE_MODEL(list_store), &iter, 4, &val); + account = g_value_get_pointer(&val); + g_value_unset(&val); + if (account == gaim_connection_get_account(gc)) { + gtk_list_store_remove(list_store, &iter); + break; + } + } while (gtk_tree_model_iter_next(GTK_TREE_MODEL(list_store), &iter)); + } + + /* Add this account to our list of disconnected accounts */ + icon = create_prpl_icon(gaim_connection_get_account(gc)); + scale = gdk_pixbuf_scale_simple(icon, 16, 16, GDK_INTERP_BILINEAR); + gtk_list_store_append(list_store, &new_row_iter); + gtk_list_store_set(list_store, &new_row_iter, + 0, scale, + 1, gaim_account_get_username(gaim_connection_get_account(gc)), + 2, gaim_date_full(), + 3, label_text, + 4, gaim_connection_get_account(gc), -1); + g_object_unref(G_OBJECT(icon)); + g_object_unref(G_OBJECT(scale)); + + if (gtk_tree_model_get_iter_first(GTK_TREE_MODEL(list_store), &iter)) + { + sel = gtk_tree_view_get_selection(GTK_TREE_VIEW(disconnect_window->treeview)); + gtk_tree_selection_select_iter(sel, &new_row_iter); + /* if we have more than one disconnected acct, display the treeview */ + if (gtk_tree_model_iter_next(GTK_TREE_MODEL(list_store), &iter)) + gtk_widget_show_all(disconnect_window->sw); } g_free(label_text);