From c390f1e69b0721a7108c78c893641d07f11dfb6d Mon Sep 17 00:00:00 2001 From: Bhaskar Bhat Date: Sat, 5 Nov 2011 12:03:33 +0530 Subject: [PATCH] Changes to behavior of Options Dialog's Layout Tab. Apply preferences when changed. --- src/gnome-cmd-data.cc | 1 + src/gnome-cmd-data.h | 1 + src/gnome-cmd-options-dialog.cc | 108 +++++++++++++++++++++++++++++++++++--- 3 files changed, 101 insertions(+), 9 deletions(-) diff --git a/src/gnome-cmd-data.cc b/src/gnome-cmd-data.cc index 5dc37e4..cc62815 100644 --- a/src/gnome-cmd-data.cc +++ b/src/gnome-cmd-data.cc @@ -43,6 +43,7 @@ using namespace std; #define DEFAULT_GUI_UPDATE_RATE 100 GnomeCmdData gnome_cmd_data; +GnomeCmdData prev_gnome_cmd_data; GnomeVFSVolumeMonitor *monitor = NULL; struct GnomeCmdData::Private diff --git a/src/gnome-cmd-data.h b/src/gnome-cmd-data.h index 3a9842b..68227c6 100644 --- a/src/gnome-cmd-data.h +++ b/src/gnome-cmd-data.h @@ -363,6 +363,7 @@ void gnome_cmd_data_set_symlink_prefix (const gchar *value); extern GnomeCmdData gnome_cmd_data; +extern GnomeCmdData prev_gnome_cmd_data; extern gchar *start_dir_left; extern gchar *start_dir_right; diff --git a/src/gnome-cmd-options-dialog.cc b/src/gnome-cmd-options-dialog.cc index bb3a8e3..9d4c919 100644 --- a/src/gnome-cmd-options-dialog.cc +++ b/src/gnome-cmd-options-dialog.cc @@ -359,6 +359,44 @@ inline void store_format_options (GtkWidget *dialog) * The Layout tab * **********************************************************************/ +static void on_font_changed (GtkFontButton *button, GtkWidget *dialog) +{ + g_return_if_fail (GTK_IS_FONT_BUTTON (button)); + + const gchar* list_font = gtk_font_button_get_font_name (button); + gnome_cmd_data_set_list_font (list_font); + + // Update style + gnome_cmd_style_create (); + main_win->update_style (); +} + + +static void on_row_height_changed (GtkSpinButton *row_height_spin_button, GtkWidget *dialog) +{ + g_return_if_fail (GTK_IS_SPIN_BUTTON (row_height_spin_button)); + + gint row_height = gtk_spin_button_get_value_as_int (row_height_spin_button); + gnome_cmd_data.list_row_height = row_height; + + // Update style + gnome_cmd_style_create (); + main_win->update_style (); +} + + +static void on_ext_display_mode_changed (GtkOptionMenu *optmenu, GtkWidget *dialog) +{ + g_return_if_fail (GTK_IS_OPTION_MENU (optmenu)); + + GnomeCmdExtDispMode mode = (GnomeCmdExtDispMode) gtk_option_menu_get_history (GTK_OPTION_MENU (optmenu)); + gnome_cmd_data.ext_disp_mode = mode; + + // Update style + gnome_cmd_style_create (); + main_win->update_style (); +} + static void on_layout_mode_changed (GtkOptionMenu *optmenu, GtkWidget *dialog) { @@ -367,10 +405,27 @@ static void on_layout_mode_changed (GtkOptionMenu *optmenu, GtkWidget *dialog) GtkWidget *icon_frame = lookup_widget (GTK_WIDGET (dialog), "mime_icon_settings_frame"); GnomeCmdLayout mode = (GnomeCmdLayout) gtk_option_menu_get_history (GTK_OPTION_MENU (optmenu)); + // Apply Layout theme + gnome_cmd_data.layout = mode; + gnome_cmd_style_create (); + main_win->update_style (); + if (icon_frame) gtk_widget_set_sensitive (icon_frame, mode == GNOME_CMD_LAYOUT_MIME_ICONS); } +static void on_icon_size_changed (GtkSpinButton *icon_size_spin_button, GtkWidget *dialog) +{ + g_return_if_fail (GTK_IS_SPIN_BUTTON (icon_size_spin_button)); + + gint icon_size = gtk_spin_button_get_value_as_int (icon_size_spin_button); + gnome_cmd_data.icon_size = icon_size; + + // Update style + gnome_cmd_style_create (); + main_win->update_style (); +} + static void on_color_mode_changed (GtkOptionMenu *optmenu, GtkWidget *dialog) { @@ -379,6 +434,11 @@ static void on_color_mode_changed (GtkOptionMenu *optmenu, GtkWidget *dialog) GtkWidget *btn = lookup_widget (GTK_WIDGET (dialog), "color_btn"); GnomeCmdColorMode mode = (GnomeCmdColorMode) gtk_option_menu_get_history (GTK_OPTION_MENU (optmenu)); + // Apply color theme + gnome_cmd_data.color_mode = mode; + gnome_cmd_style_create (); + main_win->update_style (); + if (btn) gtk_widget_set_sensitive (btn, mode == GNOME_CMD_COLOR_CUSTOM); } @@ -397,6 +457,10 @@ static void on_edit_colors_close (GtkButton *btn, GtkWidget *dlg) gtk_color_button_get_color (GTK_COLOR_BUTTON (lookup_widget (dlg, "cursor_fg")), colors->curs_fg); gtk_color_button_get_color (GTK_COLOR_BUTTON (lookup_widget (dlg, "cursor_bg")), colors->curs_bg); + // Apply color theme + gnome_cmd_style_create (); + main_win->update_style (); + gtk_widget_destroy (dlg); } @@ -470,6 +534,13 @@ static void on_colors_edit (GtkButton *btn, GtkWidget *parent) static void on_ls_colors_toggled (GtkToggleButton *btn, GtkWidget *dialog) { GtkWidget *edit_btn = lookup_widget (GTK_WIDGET (dialog), "ls_colors_edit_btn"); + + gnome_cmd_data.use_ls_colors = gtk_toggle_button_get_active (btn); + + // Update style + gnome_cmd_style_create (); + main_win->update_style (); + if (edit_btn) gtk_widget_set_sensitive (edit_btn, gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (btn))); } @@ -502,6 +573,10 @@ static void on_edit_ls_colors_ok (GtkButton *btn, GtkWidget *dlg) gtk_color_button_get_color (GTK_COLOR_BUTTON (lookup_widget (dlg, "white_fg")), palette->white_fg); gtk_color_button_get_color (GTK_COLOR_BUTTON (lookup_widget (dlg, "white_bg")), palette->white_bg); + // Update style + gnome_cmd_style_create (); + main_win->update_style (); + gtk_widget_destroy (dlg); } @@ -645,7 +720,7 @@ static void on_ls_colors_edit (GtkButton *btn, GtkWidget *parent) static GtkWidget *create_layout_tab (GtkWidget *parent) { GtkWidget *frame, *hbox, *vbox, *cat; - GtkWidget *entry, *spin, *scale, *table, *label, *fpicker, *btn; + GtkWidget *entry, *spin, *scale, *table, *label, *fpicker, *btn, *row_ht_spin, *icon_sz_spin; GtkWidget *lm_optmenu, *cm_optmenu, *fe_optmenu, *check; const gchar *ext_modes[] = { _("With file name"), @@ -688,8 +763,8 @@ static GtkWidget *create_layout_tab (GtkWidget *parent) table_add (table, fpicker, 1, 0, GTK_FILL); gtk_font_button_set_font_name (GTK_FONT_BUTTON (fpicker), gnome_cmd_data_get_list_font ()); - spin = create_spin (parent, "row_height_spin", 8, 64, gnome_cmd_data.list_row_height); - table_add (table, spin, 1, 1, GTK_FILL); + row_ht_spin = create_spin (parent, "row_height_spin", 8, 64, gnome_cmd_data.list_row_height); + table_add (table, row_ht_spin, 1, 1, GTK_FILL); label = create_label (parent, _("Font:")); table_add (table, label, 0, 0, GTK_FILL); @@ -710,7 +785,6 @@ static GtkWidget *create_layout_tab (GtkWidget *parent) lm_optmenu = create_option_menu (parent, gfx_modes); g_object_set_data (G_OBJECT (parent), "lm_optmenu", lm_optmenu); - g_signal_connect (lm_optmenu, "changed", G_CALLBACK (on_layout_mode_changed), parent); table_add (table, lm_optmenu, 1, 3, (GtkAttachOptions) (GTK_FILL|GTK_EXPAND)); // Color scheme @@ -722,7 +796,6 @@ static GtkWidget *create_layout_tab (GtkWidget *parent) cm_optmenu = create_option_menu (parent, color_modes); g_object_set_data (G_OBJECT (parent), "cm_optmenu", cm_optmenu); - g_signal_connect (cm_optmenu, "changed", G_CALLBACK (on_color_mode_changed), parent); gtk_box_pack_start (GTK_BOX (hbox), cm_optmenu, TRUE, TRUE, 0); @@ -737,8 +810,6 @@ static GtkWidget *create_layout_tab (GtkWidget *parent) gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (check), gnome_cmd_data.use_ls_colors); hbox = create_hbox (parent, FALSE, 6); gtk_table_attach (GTK_TABLE (table), hbox, 0, 2, 5, 6, GTK_FILL, GTK_FILL, 0, 0); - - g_signal_connect (check, "toggled", G_CALLBACK (on_ls_colors_toggled), parent); gtk_box_pack_start (GTK_BOX (hbox), check, TRUE, TRUE, 0); btn = create_button_with_data (parent, _("Edit colors..."), GTK_SIGNAL_FUNC (on_ls_colors_edit), parent); @@ -753,8 +824,8 @@ static GtkWidget *create_layout_tab (GtkWidget *parent) g_object_set_data (G_OBJECT (parent), "mime_icon_settings_frame", cat); gtk_box_pack_start (GTK_BOX (vbox), cat, FALSE, FALSE, 0); - spin = create_spin (parent, "iconsize_spin", 8, 64, gnome_cmd_data.icon_size); - table_add (table, spin, 1, 0, (GtkAttachOptions) GTK_FILL); + icon_sz_spin = create_spin (parent, "iconsize_spin", 8, 64, gnome_cmd_data.icon_size); + table_add (table, icon_sz_spin, 1, 0, (GtkAttachOptions) GTK_FILL); scale = create_scale (parent, "iconquality_scale", gnome_cmd_data.icon_scale_quality, 0, 3); table_add (table, scale, 1, 1, (GtkAttachOptions) GTK_FILL); entry = create_file_entry (parent, "theme_icondir_entry", gnome_cmd_data_get_theme_icon_dir ()); @@ -776,6 +847,14 @@ static GtkWidget *create_layout_tab (GtkWidget *parent) gtk_option_menu_set_history (GTK_OPTION_MENU (lm_optmenu), (gint) gnome_cmd_data.layout); gtk_option_menu_set_history (GTK_OPTION_MENU (cm_optmenu), (gint) gnome_cmd_data.color_mode); + g_signal_connect (fpicker, "font-set", G_CALLBACK (on_font_changed), parent); + g_signal_connect (row_ht_spin, "value-changed", G_CALLBACK (on_row_height_changed), parent); + g_signal_connect (fe_optmenu, "changed", G_CALLBACK (on_ext_display_mode_changed), parent); + g_signal_connect (lm_optmenu, "changed", G_CALLBACK (on_layout_mode_changed), parent); + g_signal_connect (cm_optmenu, "changed", G_CALLBACK (on_color_mode_changed), parent); + g_signal_connect (check, "toggled", G_CALLBACK (on_ls_colors_toggled), parent); + g_signal_connect (icon_sz_spin, "value-changed", G_CALLBACK (on_icon_size_changed), parent); + return frame; } @@ -2027,6 +2106,9 @@ gboolean gnome_cmd_options_dialog (GtkWindow *parent, GnomeCmdData &cfg) g_signal_connect (dialog, "response", G_CALLBACK (response_callback), notebook); + // Store the current option settings + memcpy (&prev_gnome_cmd_data, &cfg, sizeof (GnomeCmdData)); + gint result = gtk_dialog_run (GTK_DIALOG (dialog)); if (result==GTK_RESPONSE_OK) @@ -2045,6 +2127,14 @@ gboolean gnome_cmd_options_dialog (GtkWindow *parent, GnomeCmdData &cfg) gnome_cmd_data.save(); } + else if ((result==GTK_RESPONSE_NONE) || (result==GTK_RESPONSE_DELETE_EVENT) || (result==GTK_RESPONSE_CANCEL)) + { + // Revert back the changes done to preferences + memcpy (&gnome_cmd_data, &prev_gnome_cmd_data, sizeof (GnomeCmdData)); + + gnome_cmd_style_create (); + main_win->update_style (); + } gtk_widget_destroy (dialog); -- 1.7.5.1