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
master
Nick Treleaven 2007-04-29 16:36:42 +00:00
parent 98f64da8f6
commit 737f9c6542
6 changed files with 287 additions and 33 deletions

View File

@ -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 <enrico.troeger@uvena.de>

View File

@ -3274,7 +3274,7 @@
<property name="angle">0</property>
</widget>
<packing>
<property name="padding">0</property>
<property name="padding">6</property>
<property name="expand">False</property>
<property name="fill">False</property>
</packing>
@ -3333,6 +3333,147 @@
<property name="fill">True</property>
</packing>
</child>
<child>
<widget class="GtkFrame" id="frame25">
<property name="visible">True</property>
<property name="label_xalign">0</property>
<property name="label_yalign">0.5</property>
<property name="shadow_type">GTK_SHADOW_NONE</property>
<child>
<widget class="GtkAlignment" id="alignment28">
<property name="visible">True</property>
<property name="xalign">0.5</property>
<property name="yalign">0.5</property>
<property name="xscale">1</property>
<property name="yscale">1</property>
<property name="top_padding">0</property>
<property name="bottom_padding">0</property>
<property name="left_padding">12</property>
<property name="right_padding">0</property>
<child>
<widget class="GtkTable" id="table11">
<property name="visible">True</property>
<property name="n_rows">1</property>
<property name="n_columns">3</property>
<property name="homogeneous">False</property>
<property name="row_spacing">0</property>
<property name="column_spacing">6</property>
<child>
<widget class="GtkLabel" id="label191">
<property name="visible">True</property>
<property name="label" translatable="yes">Project files:</property>
<property name="use_underline">False</property>
<property name="use_markup">False</property>
<property name="justify">GTK_JUSTIFY_LEFT</property>
<property name="wrap">False</property>
<property name="selectable">False</property>
<property name="xalign">0</property>
<property name="yalign">0.5</property>
<property name="xpad">6</property>
<property name="ypad">0</property>
<property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
<property name="width_chars">-1</property>
<property name="single_line_mode">False</property>
<property name="angle">0</property>
</widget>
<packing>
<property name="left_attach">0</property>
<property name="right_attach">1</property>
<property name="top_attach">0</property>
<property name="bottom_attach">1</property>
<property name="x_options">fill</property>
<property name="y_options"></property>
</packing>
</child>
<child>
<widget class="GtkEntry" id="project_file_path_entry">
<property name="visible">True</property>
<property name="tooltip" translatable="yes">Path to start in when opening project files</property>
<property name="can_focus">True</property>
<property name="editable">True</property>
<property name="visibility">True</property>
<property name="max_length">0</property>
<property name="text" translatable="yes"></property>
<property name="has_frame">True</property>
<property name="invisible_char">•</property>
<property name="activates_default">False</property>
</widget>
<packing>
<property name="left_attach">1</property>
<property name="right_attach">2</property>
<property name="top_attach">0</property>
<property name="bottom_attach">1</property>
<property name="y_options"></property>
</packing>
</child>
<child>
<widget class="GtkButton" id="project_file_path_button">
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="relief">GTK_RELIEF_NORMAL</property>
<property name="focus_on_click">True</property>
<child>
<widget class="GtkImage" id="image1741">
<property name="visible">True</property>
<property name="stock">gtk-open</property>
<property name="icon_size">4</property>
<property name="xalign">0.5</property>
<property name="yalign">0.5</property>
<property name="xpad">0</property>
<property name="ypad">0</property>
</widget>
</child>
</widget>
<packing>
<property name="left_attach">2</property>
<property name="right_attach">3</property>
<property name="top_attach">0</property>
<property name="bottom_attach">1</property>
<property name="x_options">fill</property>
<property name="y_options"></property>
</packing>
</child>
</widget>
</child>
</widget>
</child>
<child>
<widget class="GtkLabel" id="label190">
<property name="visible">True</property>
<property name="label" translatable="yes">&lt;b&gt;Paths&lt;/b&gt;</property>
<property name="use_underline">False</property>
<property name="use_markup">True</property>
<property name="justify">GTK_JUSTIFY_LEFT</property>
<property name="wrap">False</property>
<property name="selectable">False</property>
<property name="xalign">0.5</property>
<property name="yalign">0.5</property>
<property name="xpad">0</property>
<property name="ypad">0</property>
<property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
<property name="width_chars">-1</property>
<property name="single_line_mode">False</property>
<property name="angle">0</property>
</widget>
<packing>
<property name="type">label_item</property>
</packing>
</child>
</widget>
<packing>
<property name="padding">0</property>
<property name="expand">True</property>
<property name="fill">True</property>
</packing>
</child>
</widget>
<packing>
<property name="tab_expand">False</property>

View File

@ -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 (_("<b>Paths</b>"));
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");

View File

@ -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));

View File

@ -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);
}

View File

@ -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