From 737f9c6542170ef2d4f027701990daafd9c34634 Mon Sep 17 00:00:00 2001 From: Nick Treleaven Date: Sun, 29 Apr 2007 16:36:42 +0000 Subject: [PATCH] Add project file path preferences option in General tab. git-svn-id: https://geany.svn.sourceforge.net/svnroot/geany/trunk@1486 ea778897-0a13-0410-b9d1-a72fbfd435f5 --- ChangeLog | 3 + geany.glade | 143 +++++++++++++++++++++++++++++++++++++++++++++++- src/interface.c | 64 +++++++++++++++++++++- src/prefs.c | 45 +++++++++------ src/project.c | 61 ++++++++++++++++----- src/project.h | 4 ++ 6 files changed, 287 insertions(+), 33 deletions(-) diff --git a/ChangeLog b/ChangeLog index 203a5efb9..36c32d08d 100644 --- a/ChangeLog +++ b/ChangeLog @@ -8,6 +8,9 @@ Add ui_setup_open_button_callback() for setting up a button callback that behaves like the open button in ui_path_box_new(). Use ui_path_box_new() in FIF dialog setup. + * src/interface.c, src/project.c, src/project.h, src/prefs.c, + geany.glade: + Add project file path preferences option in General tab. 2007-04-29 Enrico Tröger diff --git a/geany.glade b/geany.glade index a5a9ed2c8..a60c9c6a3 100644 --- a/geany.glade +++ b/geany.glade @@ -3274,7 +3274,7 @@ 0 - 0 + 6 False False @@ -3333,6 +3333,147 @@ True + + + + True + 0 + 0.5 + GTK_SHADOW_NONE + + + + True + 0.5 + 0.5 + 1 + 1 + 0 + 0 + 12 + 0 + + + + True + 1 + 3 + False + 0 + 6 + + + + True + Project files: + False + False + GTK_JUSTIFY_LEFT + False + False + 0 + 0.5 + 6 + 0 + PANGO_ELLIPSIZE_NONE + -1 + False + 0 + + + 0 + 1 + 0 + 1 + fill + + + + + + + True + Path to start in when opening project files + True + True + True + 0 + + True + + False + + + 1 + 2 + 0 + 1 + + + + + + + True + True + GTK_RELIEF_NORMAL + True + + + + True + gtk-open + 4 + 0.5 + 0.5 + 0 + 0 + + + + + 2 + 3 + 0 + 1 + fill + + + + + + + + + + + True + <b>Paths</b> + False + True + GTK_JUSTIFY_LEFT + False + False + 0.5 + 0.5 + 0 + 0 + PANGO_ELLIPSIZE_NONE + -1 + False + 0 + + + label_item + + + + + 0 + True + True + + False diff --git a/src/interface.c b/src/interface.c index df822f624..c2ed1abb1 100644 --- a/src/interface.c +++ b/src/interface.c @@ -2366,6 +2366,14 @@ create_prefs_dialog (void) GtkWidget *label189; GtkWidget *entry_contextaction; GtkWidget *label188; + GtkWidget *frame25; + GtkWidget *alignment28; + GtkWidget *table11; + GtkWidget *label191; + GtkWidget *project_file_path_entry; + GtkWidget *project_file_path_button; + GtkWidget *image1741; + GtkWidget *label190; GtkWidget *label94; GtkWidget *vbox14; GtkWidget *frame7; @@ -2697,7 +2705,7 @@ create_prefs_dialog (void) label189 = gtk_label_new (_("Context Action command:")); gtk_widget_show (label189); - gtk_box_pack_start (GTK_BOX (hbox8), label189, FALSE, FALSE, 0); + gtk_box_pack_start (GTK_BOX (hbox8), label189, FALSE, FALSE, 6); entry_contextaction = gtk_entry_new (); gtk_widget_show (entry_contextaction); @@ -2710,6 +2718,52 @@ create_prefs_dialog (void) gtk_frame_set_label_widget (GTK_FRAME (frame24), label188); gtk_label_set_use_markup (GTK_LABEL (label188), TRUE); + frame25 = gtk_frame_new (NULL); + gtk_widget_show (frame25); + gtk_box_pack_start (GTK_BOX (vbox20), frame25, TRUE, TRUE, 0); + gtk_frame_set_shadow_type (GTK_FRAME (frame25), GTK_SHADOW_NONE); + + alignment28 = gtk_alignment_new (0.5, 0.5, 1, 1); + gtk_widget_show (alignment28); + gtk_container_add (GTK_CONTAINER (frame25), alignment28); + gtk_alignment_set_padding (GTK_ALIGNMENT (alignment28), 0, 0, 12, 0); + + table11 = gtk_table_new (1, 3, FALSE); + gtk_widget_show (table11); + gtk_container_add (GTK_CONTAINER (alignment28), table11); + gtk_table_set_col_spacings (GTK_TABLE (table11), 6); + + label191 = gtk_label_new (_("Project files:")); + gtk_widget_show (label191); + gtk_table_attach (GTK_TABLE (table11), label191, 0, 1, 0, 1, + (GtkAttachOptions) (GTK_FILL), + (GtkAttachOptions) (0), 0, 0); + gtk_misc_set_alignment (GTK_MISC (label191), 0, 0.5); + gtk_misc_set_padding (GTK_MISC (label191), 6, 0); + + project_file_path_entry = gtk_entry_new (); + gtk_widget_show (project_file_path_entry); + gtk_table_attach (GTK_TABLE (table11), project_file_path_entry, 1, 2, 0, 1, + (GtkAttachOptions) (GTK_EXPAND | GTK_FILL), + (GtkAttachOptions) (0), 0, 0); + gtk_tooltips_set_tip (tooltips, project_file_path_entry, _("Path to start in when opening project files"), NULL); + gtk_entry_set_invisible_char (GTK_ENTRY (project_file_path_entry), 8226); + + project_file_path_button = gtk_button_new (); + gtk_widget_show (project_file_path_button); + gtk_table_attach (GTK_TABLE (table11), project_file_path_button, 2, 3, 0, 1, + (GtkAttachOptions) (GTK_FILL), + (GtkAttachOptions) (0), 0, 0); + + image1741 = gtk_image_new_from_stock ("gtk-open", GTK_ICON_SIZE_BUTTON); + gtk_widget_show (image1741); + gtk_container_add (GTK_CONTAINER (project_file_path_button), image1741); + + label190 = gtk_label_new (_("Paths")); + gtk_widget_show (label190); + gtk_frame_set_label_widget (GTK_FRAME (frame25), label190); + gtk_label_set_use_markup (GTK_LABEL (label190), TRUE); + label94 = gtk_label_new (_("General")); gtk_widget_show (label94); gtk_notebook_set_tab_label (GTK_NOTEBOOK (notebook2), gtk_notebook_get_nth_page (GTK_NOTEBOOK (notebook2), 0), label94); @@ -3903,6 +3957,14 @@ create_prefs_dialog (void) GLADE_HOOKUP_OBJECT (prefs_dialog, label189, "label189"); GLADE_HOOKUP_OBJECT (prefs_dialog, entry_contextaction, "entry_contextaction"); GLADE_HOOKUP_OBJECT (prefs_dialog, label188, "label188"); + GLADE_HOOKUP_OBJECT (prefs_dialog, frame25, "frame25"); + GLADE_HOOKUP_OBJECT (prefs_dialog, alignment28, "alignment28"); + GLADE_HOOKUP_OBJECT (prefs_dialog, table11, "table11"); + GLADE_HOOKUP_OBJECT (prefs_dialog, label191, "label191"); + GLADE_HOOKUP_OBJECT (prefs_dialog, project_file_path_entry, "project_file_path_entry"); + GLADE_HOOKUP_OBJECT (prefs_dialog, project_file_path_button, "project_file_path_button"); + GLADE_HOOKUP_OBJECT (prefs_dialog, image1741, "image1741"); + GLADE_HOOKUP_OBJECT (prefs_dialog, label190, "label190"); GLADE_HOOKUP_OBJECT (prefs_dialog, label94, "label94"); GLADE_HOOKUP_OBJECT (prefs_dialog, vbox14, "vbox14"); GLADE_HOOKUP_OBJECT (prefs_dialog, frame7, "frame7"); diff --git a/src/prefs.c b/src/prefs.c index 87b8b0de7..116cf79f8 100644 --- a/src/prefs.c +++ b/src/prefs.c @@ -42,6 +42,7 @@ #include "keybindings.h" #include "interface.h" #include "encodings.h" +#include "project.h" #ifdef HAVE_VTE # include "vte.h" @@ -100,21 +101,11 @@ void prefs_init_dialog(void) widget = lookup_widget(app->prefs_dialog, "check_ask_suppress_search_dialogs"); gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(widget), app->pref_main_suppress_search_dialogs); - widget = lookup_widget(app->prefs_dialog, "check_show_notebook_tabs"); - gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(widget), app->show_notebook_tabs); - // disable following setting if notebook tabs are hidden - on_show_notebook_tabs_toggled(GTK_TOGGLE_BUTTON( - lookup_widget(app->prefs_dialog, "check_show_notebook_tabs")), NULL); - - if (app->tab_order_ltr) - widget = lookup_widget(app->prefs_dialog, "radio_tab_right"); - else - widget = lookup_widget(app->prefs_dialog, "radio_tab_left"); - gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(widget), TRUE); - widget = lookup_widget(app->prefs_dialog, "entry_contextaction"); gtk_entry_set_text(GTK_ENTRY(widget), app->context_action_cmd); + project_setup_prefs(); // project files path + // Interface settings widget = lookup_widget(app->prefs_dialog, "check_list_symbol"); @@ -149,6 +140,12 @@ void prefs_init_dialog(void) gtk_color_button_set_color(GTK_COLOR_BUTTON(widget), color); g_free(color); + widget = lookup_widget(app->prefs_dialog, "check_show_notebook_tabs"); + gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(widget), app->show_notebook_tabs); + // disable following setting if notebook tabs are hidden + on_show_notebook_tabs_toggled(GTK_TOGGLE_BUTTON( + lookup_widget(app->prefs_dialog, "check_show_notebook_tabs")), NULL); + widget = lookup_widget(app->prefs_dialog, "combo_tab_editor"); gtk_combo_box_set_active(GTK_COMBO_BOX(widget), app->tab_pos_editor); @@ -212,6 +209,14 @@ void prefs_init_dialog(void) lookup_widget(app->prefs_dialog, "check_toolbar_show")), NULL); + // Files settings + if (app->tab_order_ltr) + widget = lookup_widget(app->prefs_dialog, "radio_tab_right"); + else + widget = lookup_widget(app->prefs_dialog, "radio_tab_left"); + gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(widget), TRUE); + + // Editor settings widget = lookup_widget(app->prefs_dialog, "spin_tab_width"); gtk_spin_button_set_value(GTK_SPIN_BUTTON(widget), app->pref_editor_tab_width); @@ -436,16 +441,12 @@ void on_prefs_button_clicked(GtkDialog *dialog, gint response, gpointer user_dat widget = lookup_widget(app->prefs_dialog, "check_switch_pages"); app->switch_msgwin_pages = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(widget)); - widget = lookup_widget(app->prefs_dialog, "radio_tab_right"); - app->tab_order_ltr = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(widget)); - - widget = lookup_widget(app->prefs_dialog, "check_show_notebook_tabs"); - app->show_notebook_tabs = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(widget)); - widget = lookup_widget(app->prefs_dialog, "entry_contextaction"); g_free(app->context_action_cmd); app->context_action_cmd = g_strdup(gtk_entry_get_text(GTK_ENTRY(widget))); + project_apply_prefs(); // project file path + // Interface settings widget = lookup_widget(app->prefs_dialog, "check_list_symbol"); @@ -467,6 +468,9 @@ void on_prefs_button_clicked(GtkDialog *dialog, gint response, gpointer user_dat } if (app->long_line_column == 0) app->long_line_type = 2; + widget = lookup_widget(app->prefs_dialog, "check_show_notebook_tabs"); + app->show_notebook_tabs = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(widget)); + widget = lookup_widget(app->prefs_dialog, "combo_tab_editor"); app->tab_pos_editor = gtk_combo_box_get_active(GTK_COMBO_BOX(widget)); @@ -528,6 +532,11 @@ void on_prefs_button_clicked(GtkDialog *dialog, gint response, gpointer user_dat app->toolbar_icon_size = GTK_ICON_SIZE_SMALL_TOOLBAR; + // Files settings + widget = lookup_widget(app->prefs_dialog, "radio_tab_right"); + app->tab_order_ltr = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(widget)); + + // Editor settings widget = lookup_widget(app->prefs_dialog, "spin_tab_width"); app->pref_editor_tab_width = gtk_spin_button_get_value_as_int(GTK_SPIN_BUTTON(widget)); diff --git a/src/project.c b/src/project.c index ea3327c13..38b97aa34 100644 --- a/src/project.c +++ b/src/project.c @@ -43,6 +43,11 @@ ProjectPrefs project_prefs = {NULL}; +static struct +{ + gchar *project_file_path; +} local_prefs = {NULL}; + static gboolean entries_modified; @@ -74,7 +79,7 @@ static void on_entries_changed(GtkEditable *editable, PropertyDialogElements *e) // avoid using __VA_ARGS__ because older gcc 2.x versions probably don't support C99 #define SHOW_ERR(args...) dialogs_show_msgbox(GTK_MESSAGE_ERROR, args) #define MAX_NAME_LEN 50 -// "projects" is part of the default project base path so be carefully when translating +// "projects" is part of the default project base path so be careful when translating // please avoid special characters and spaces, look at the source for details or ask Frank #define PROJECT_DIR _("projects") @@ -225,7 +230,7 @@ static void run_open_dialog(GtkDialog *dialog) void project_open() { - gchar *dir = g_strconcat(GEANY_HOME_DIR, G_DIR_SEPARATOR_S, PROJECT_DIR, NULL); + const gchar *dir = local_prefs.project_file_path; #ifdef G_OS_WIN32 gchar *file; #else @@ -273,8 +278,6 @@ void project_open() run_open_dialog(GTK_DIALOG(dialog)); gtk_widget_destroy(GTK_WIDGET(dialog)); #endif - - g_free(dir); } @@ -744,6 +747,7 @@ static void on_name_entry_changed(GtkEditable *editable, PropertyDialogElements gchar *base_path; gchar *file_name; gchar *name; + const gchar *project_dir = local_prefs.project_file_path; if (entries_modified) return; @@ -751,21 +755,17 @@ static void on_name_entry_changed(GtkEditable *editable, PropertyDialogElements name = gtk_editable_get_chars(editable, 0, -1); if (name != NULL && strlen(name) > 0) { - base_path = g_strconcat( - GEANY_HOME_DIR, G_DIR_SEPARATOR_S, PROJECT_DIR, G_DIR_SEPARATOR_S, + base_path = g_strconcat(project_dir, G_DIR_SEPARATOR_S, name, G_DIR_SEPARATOR_S, NULL); - file_name = g_strconcat( - GEANY_HOME_DIR, G_DIR_SEPARATOR_S, PROJECT_DIR, G_DIR_SEPARATOR_S, + file_name = g_strconcat(project_dir, G_DIR_SEPARATOR_S, name, "." GEANY_PROJECT_EXT, NULL); - g_free(name); } else { - base_path = g_strconcat( - GEANY_HOME_DIR, G_DIR_SEPARATOR_S, PROJECT_DIR, G_DIR_SEPARATOR_S, NULL); - file_name = g_strconcat( - GEANY_HOME_DIR, G_DIR_SEPARATOR_S, PROJECT_DIR, G_DIR_SEPARATOR_S, NULL); + base_path = g_strconcat(project_dir, G_DIR_SEPARATOR_S, NULL); + file_name = g_strconcat(project_dir, G_DIR_SEPARATOR_S, NULL); } + g_free(name); gtk_entry_set_text(GTK_ENTRY(e->base_path), base_path); gtk_entry_set_text(GTK_ENTRY(e->file_name), file_name); @@ -897,6 +897,8 @@ void project_save_prefs(GKeyFile *config) g_key_file_set_string(config, "project", "session_file", utf8_filename); } + g_key_file_set_string(config, "project", "project_file_path", + NVL(local_prefs.project_file_path, "")); } @@ -908,5 +910,38 @@ void project_load_prefs(GKeyFile *config) project_prefs.session_file = utils_get_setting_string(config, "project", "session_file", ""); } + local_prefs.project_file_path = utils_get_setting_string(config, "project", + "project_file_path", NULL); + if (local_prefs.project_file_path == NULL) + { + local_prefs.project_file_path = g_strconcat(GEANY_HOME_DIR, + G_DIR_SEPARATOR_S, PROJECT_DIR, NULL); + } } + +/* Initialize project-related preferences in the Preferences dialog. */ +void project_setup_prefs() +{ + GtkWidget *path_entry = lookup_widget(app->prefs_dialog, "project_file_path_entry"); + GtkWidget *path_btn = lookup_widget(app->prefs_dialog, "project_file_path_button"); + + g_return_if_fail(local_prefs.project_file_path != NULL); + gtk_entry_set_text(GTK_ENTRY(path_entry), local_prefs.project_file_path); + ui_setup_open_button_callback(path_btn, GTK_ENTRY(path_entry), + GTK_FILE_CHOOSER_ACTION_SELECT_FOLDER); +} + + +/* Update project-related preferences after using the Preferences dialog. */ +void project_apply_prefs() +{ + GtkWidget *path_entry = lookup_widget(app->prefs_dialog, "project_file_path_entry"); + const gchar *str; + + str = gtk_entry_get_text(GTK_ENTRY(path_entry)); + g_free(local_prefs.project_file_path); + local_prefs.project_file_path = g_strdup(str); +} + + diff --git a/src/project.h b/src/project.h index 68a03f3d3..3105faffd 100644 --- a/src/project.h +++ b/src/project.h @@ -67,4 +67,8 @@ void project_save_prefs(GKeyFile *config); void project_load_prefs(GKeyFile *config); +void project_setup_prefs(); + +void project_apply_prefs(); + #endif