From 9d4730f96d07c5f320640e8a5fc74a1b248c0902 Mon Sep 17 00:00:00 2001 From: Felix Kaser Date: Tue, 10 Nov 2009 11:45:43 +0100 Subject: ui change: added 3 buttons to infobar the current ui shows 3 buttons next to the error message: retry, edit, close --- src/empathy-main-window.c | 110 ++++++++++++++++++++++++++++++++++++++++------ 1 file changed, 97 insertions(+), 13 deletions(-) diff --git a/src/empathy-main-window.c b/src/empathy-main-window.c index 88048d722..9f66f072c 100644 --- a/src/empathy-main-window.c +++ b/src/empathy-main-window.c @@ -307,26 +307,48 @@ main_window_row_activated_cb (EmpathyContactListView *view, } static void -main_window_error_infobar_button_clicked_cb (GtkInfoBar *info_bar, - gint response_id, +main_window_error_retry_clicked_cb (GtkButton *button, EmpathyMainWindow *window) { TpAccount *account; GtkWidget *error_widget; - account = g_object_get_data (G_OBJECT (info_bar), "account"); - switch (response_id) { - case GTK_RESPONSE_CLOSE: - break; - default: - break; - } + account = g_object_get_data (G_OBJECT (button), "account"); + empathy_account_reconnect_async (account, NULL, NULL); error_widget = g_hash_table_lookup (window->errors, account); gtk_widget_destroy (error_widget); g_hash_table_remove (window->errors, account); } +static void +main_window_error_edit_clicked_cb (GtkButton *button, + EmpathyMainWindow *window) +{ + EmpathyAccount *account; + GtkWidget *error_widget; + + account = g_object_get_data (G_OBJECT (button), "account"); + empathy_accounts_dialog_show (GTK_WINDOW (window->window), account); + + error_widget = g_hash_table_lookup (window->errors, account); + gtk_widget_destroy (error_widget); + g_hash_table_remove (window->errors, account); +} + +static void +main_window_error_close_clicked_cb (GtkButton *button, + EmpathyMainWindow *window) +{ + EmpathyAccount *account; + GtkWidget *error_widget; + + account = g_object_get_data (G_OBJECT (button), "account"); + error_widget = g_hash_table_lookup (window->errors, account); + gtk_widget_destroy (error_widget); + g_hash_table_remove (window->errors, account); +} + static void main_window_error_display (EmpathyMainWindow *window, TpAccount *account, @@ -336,6 +358,12 @@ main_window_error_display (EmpathyMainWindow *window, GtkWidget *content_area; GtkWidget *label; GtkWidget *image; + GtkWidget *retry_button; + GtkWidget *edit_button; + GtkWidget *close_button; + GtkWidget *action_area; + GtkWidget *action_table; + GtkRcStyle *rc_style; gchar *str; const gchar *icon_name; @@ -354,11 +382,8 @@ main_window_error_display (EmpathyMainWindow *window, return; } - info_bar = gtk_info_bar_new_with_buttons (GTK_STOCK_CLOSE, GTK_RESPONSE_CLOSE, NULL); + info_bar = gtk_info_bar_new (); gtk_info_bar_set_message_type (GTK_INFO_BAR (info_bar), GTK_MESSAGE_WARNING); - g_signal_connect (info_bar, "response", - G_CALLBACK (main_window_error_infobar_button_clicked_cb), - window); gtk_widget_set_no_show_all (info_bar, TRUE); gtk_box_pack_start (GTK_BOX (window->errors_vbox), info_bar, FALSE, TRUE, 0); @@ -377,13 +402,72 @@ main_window_error_display (EmpathyMainWindow *window, gtk_box_pack_start (GTK_BOX (content_area), image, FALSE, FALSE, 0); gtk_box_pack_start (GTK_BOX (content_area), label, FALSE, FALSE, 0); + /* make small style for the buttons */ + rc_style = gtk_rc_style_new (); + rc_style->xthickness = rc_style->ythickness = 4; + + image = gtk_image_new_from_stock (GTK_STOCK_REFRESH, GTK_ICON_SIZE_BUTTON); + retry_button = gtk_button_new (); + gtk_button_set_image (GTK_BUTTON (retry_button), image); + gtk_widget_modify_style (retry_button, rc_style); + gtk_widget_show (retry_button); + + image = gtk_image_new_from_stock (GTK_STOCK_EDIT, GTK_ICON_SIZE_BUTTON); + edit_button = gtk_button_new (); + gtk_button_set_image (GTK_BUTTON (edit_button), image); + gtk_widget_modify_style (edit_button, rc_style); + gtk_widget_show (edit_button); + + image = gtk_image_new_from_stock (GTK_STOCK_CLOSE, GTK_ICON_SIZE_BUTTON); + close_button = gtk_button_new (); + gtk_button_set_image (GTK_BUTTON (close_button), image); + gtk_widget_modify_style (close_button, rc_style); + gtk_widget_show (close_button); + + action_table = gtk_table_new (1, 3, FALSE); + gtk_table_set_col_spacings (GTK_TABLE (action_table), 2); + gtk_widget_show (action_table); + + action_area = gtk_info_bar_get_action_area (GTK_INFO_BAR (info_bar)); + gtk_box_pack_start (GTK_BOX (action_area), action_table, FALSE, FALSE, 0); + + gtk_table_attach (GTK_TABLE (action_table), retry_button, 0, 1, 0, 1, + (GtkAttachOptions) (GTK_SHRINK), + (GtkAttachOptions) (GTK_SHRINK), 0, 0); + gtk_table_attach (GTK_TABLE (action_table), edit_button, 1, 2, 0, 1, + (GtkAttachOptions) (GTK_SHRINK), + (GtkAttachOptions) (GTK_SHRINK), 0, 0); + gtk_table_attach (GTK_TABLE (action_table), close_button, 2, 3, 0, 1, + (GtkAttachOptions) (GTK_SHRINK), + (GtkAttachOptions) (GTK_SHRINK), 0, 0); + g_object_set_data (G_OBJECT (info_bar), "label", label); g_object_set_data_full (G_OBJECT (info_bar), "account", g_object_ref (account), g_object_unref); + g_object_set_data_full (G_OBJECT (edit_button), + "account", g_object_ref (account), + g_object_unref); + g_object_set_data_full (G_OBJECT (close_button), + "account", g_object_ref (account), + g_object_unref); + g_object_set_data_full (G_OBJECT (retry_button), + "account", g_object_ref (account), + g_object_unref); + + g_signal_connect (edit_button, "clicked", + G_CALLBACK (main_window_error_edit_clicked_cb), + window); + g_signal_connect (close_button, "clicked", + G_CALLBACK (main_window_error_close_clicked_cb), + window); + g_signal_connect (retry_button, "clicked", + G_CALLBACK (main_window_error_retry_clicked_cb), + window); gtk_widget_show (window->errors_vbox); + gtk_rc_style_unref (rc_style); g_hash_table_insert (window->errors, g_object_ref (account), info_bar); } -- cgit v1.2.3