# HG changeset patch # User Sean Egan # Date 1067580898 0 # Node ID 9ab1987e5d8b72ea1c6bf0b775aa6f4de6b857e5 # Parent d60e1629ffde3af854bd7f3144f90c0c38983c69 [gaim-migrate @ 7995] This should end all the "STOP MAKING GAIM POP UP 70 GAZILLION ERROR MESSAGES BECAUSE MY NETWORK CONNECTION BLOWS" whines. NOTE TO SELF: Finish this tomorrow. I'm going to bed. committer: Tailor Script diff -r d60e1629ffde -r 9ab1987e5d8b src/gtkconn.c --- a/src/gtkconn.c Fri Oct 31 05:14:27 2003 +0000 +++ b/src/gtkconn.c Fri Oct 31 06:14:58 2003 +0000 @@ -23,6 +23,7 @@ #include "debug.h" #include "notify.h" #include "prefs.h" +#include "stock.h" #include "util.h" #include "gtkblist.h" @@ -266,18 +267,146 @@ { } +struct disconnect_window { + GtkWidget *window; + GtkWidget *treeview; + GtkWidget *sw; + GtkWidget *label; +}; +struct disconnect_window *disconnect_window = NULL; + +static void disconnect_response_cb(GtkDialog *dialog, gint id, GtkWidget *widget) +{ + switch(id) { + case GTK_RESPONSE_CLOSE: + gtk_widget_destroy(disconnect_window->window); + g_free(disconnect_window); + disconnect_window = NULL; + break; + case GTK_RESPONSE_ACCEPT: + break; + } +} + +static void disconnect_tree_cb(GtkTreeSelection *sel, GtkTreeModel *model) +{ + GtkTreeIter iter; + GValue val = { 0, }; + const char *label_text; + + if (! gtk_tree_selection_get_selected (sel, &model, &iter)) + return; + gtk_tree_model_get_value (model, &iter, 3, &val); + label_text = g_value_get_string(&val); + gtk_label_set_markup(GTK_LABEL(disconnect_window->label), label_text); + g_value_unset(&val); +} + + static void gaim_gtk_connection_report_disconnect(GaimConnection *gc, const char *text) { - gchar *primary, *secondary; + char *label_text = NULL; + GdkPixbuf *scale, *icon; + GtkTreeViewColumn *col; + GtkListStore *list_store; + GtkTreeIter iter; + + icon = create_prpl_icon(gaim_connection_get_account(gc)); + scale = gdk_pixbuf_scale_simple(icon, 16, 16, GDK_INTERP_BILINEAR); + + label_text = g_strdup_printf("%s has been disconencted.\n\n%s\n%s", + gaim_account_get_username(gaim_connection_get_account(gc)), gaim_date_full(), + text ? text : _("Reason Unknown.")); + + if (!disconnect_window) { + GtkWidget *hbox, *vbox, *img; + GtkCellRenderer *rend, *rend2; + GtkTreeSelection *sel; + + disconnect_window = g_malloc(sizeof(disconnect_window)); + disconnect_window->window = gtk_dialog_new_with_buttons("", NULL, GTK_DIALOG_NO_SEPARATOR, + _("Reconnect"), GTK_RESPONSE_ACCEPT, + GTK_STOCK_CLOSE, GTK_RESPONSE_CLOSE, NULL); + g_signal_connect(G_OBJECT(disconnect_window->window), "response", G_CALLBACK(disconnect_response_cb), disconnect_window); + + gtk_container_set_border_width(GTK_CONTAINER(disconnect_window->window), 6); + gtk_window_set_resizable(GTK_WINDOW(disconnect_window->window), FALSE); + gtk_dialog_set_has_separator(GTK_DIALOG(disconnect_window->window), FALSE); + gtk_box_set_spacing(GTK_BOX(GTK_DIALOG(disconnect_window->window)->vbox), 12); + gtk_container_set_border_width(GTK_CONTAINER(GTK_DIALOG(disconnect_window->window)->vbox), 6); + + hbox = gtk_hbox_new(FALSE, 12); + gtk_container_add(GTK_CONTAINER(GTK_DIALOG(disconnect_window->window)->vbox), hbox); + img = gtk_image_new_from_stock(GAIM_STOCK_DIALOG_ERROR, GTK_ICON_SIZE_DIALOG); + gtk_misc_set_alignment(GTK_MISC(img), 0, 0); + gtk_box_pack_start(GTK_BOX(hbox), img, FALSE, FALSE, 0); + + vbox = gtk_vbox_new(FALSE, 12); + gtk_box_pack_start(GTK_BOX(hbox), vbox, FALSE, FALSE, 0); + + disconnect_window->label = gtk_label_new(NULL); + + 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); + + gtk_widget_show_all(disconnect_window->window); - primary = g_strdup_printf(_("%s has been disconnected"), - gaim_account_get_username(gaim_connection_get_account(gc))); - secondary = g_strdup_printf("%s\n%s", gaim_date_full(), - text ? text : _("Reason Unknown.")); - gaim_notify_error(NULL, _("Connection Error"), primary, secondary); - g_free(primary); - g_free(secondary); + /* Tree View */ + disconnect_window->sw = gtk_scrolled_window_new(NULL,NULL); + gtk_scrolled_window_set_shadow_type (GTK_SCROLLED_WINDOW(disconnect_window->sw), GTK_SHADOW_IN); + 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); + 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); + + disconnect_window->treeview = gtk_tree_view_new_with_model (GTK_TREE_MODEL(list_store)); + + rend = gtk_cell_renderer_pixbuf_new(); + rend2 = gtk_cell_renderer_text_new(); + col = gtk_tree_view_column_new(); + gtk_tree_view_column_set_title(col, _("Account")); + gtk_tree_view_column_pack_start(col, rend, FALSE); + gtk_tree_view_column_pack_start(col, rend2, FALSE); + gtk_tree_view_column_set_attributes(col, rend, "pixbuf", 0, NULL); + gtk_tree_view_column_set_attributes(col, rend2, "text", 1, NULL); + gtk_tree_view_append_column (GTK_TREE_VIEW(disconnect_window->treeview), col); + + rend = gtk_cell_renderer_text_new(); + col = gtk_tree_view_column_new_with_attributes (_("Time"), + rend, "text", 2, NULL); + gtk_tree_view_append_column (GTK_TREE_VIEW(disconnect_window->treeview), col); + + g_object_unref(G_OBJECT(list_store)); + gtk_container_add(GTK_CONTAINER(disconnect_window->sw), disconnect_window->treeview); + + sel = gtk_tree_view_get_selection (GTK_TREE_VIEW (disconnect_window->treeview)); + g_signal_connect (G_OBJECT (sel), "changed", + G_CALLBACK (disconnect_tree_cb), list_store); + } else { + list_store = GTK_LIST_STORE(gtk_tree_view_get_model(GTK_TREE_VIEW(disconnect_window->treeview))); + 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); + gtk_label_set_markup(GTK_LABEL(disconnect_window->label), label_text); + gtk_widget_show_all(disconnect_window->sw); + } + g_free(label_text); + g_object_unref(G_OBJECT(icon)); + g_object_unref(G_OBJECT(scale)); } static GaimConnectionUiOps conn_ui_ops = diff -r d60e1629ffde -r 9ab1987e5d8b src/gtknotify.c --- a/src/gtknotify.c Fri Oct 31 05:14:27 2003 +0000 +++ b/src/gtknotify.c Fri Oct 31 06:14:58 2003 +0000 @@ -105,9 +105,9 @@ gtk_misc_set_alignment(GTK_MISC(img), 0, 0); } - dialog = gtk_dialog_new_with_buttons(title, NULL, 0, - GTK_STOCK_OK, GTK_RESPONSE_ACCEPT, - NULL); + dialog = gtk_dialog_new_with_buttons(title ? title : "", NULL, 0, + GTK_STOCK_OK, GTK_RESPONSE_ACCEPT, + NULL); g_signal_connect(G_OBJECT(dialog), "response", G_CALLBACK(message_response_cb), dialog);