~ubuntu-branches/debian/experimental/geany/experimental

« back to all changes in this revision

Viewing changes to src/prefs.c

  • Committer: Bazaar Package Importer
  • Author(s): Damián Viano
  • Date: 2008-05-02 11:37:45 UTC
  • mfrom: (1.2.1 upstream) (3.1.6 hardy)
  • Revision ID: james.westby@ubuntu.com-20080502113745-xzp4g6dmovrpoj17
Tags: 0.14-1
New upstream release (Closes: #478126)

Show diffs side-by-side

added added

removed removed

Lines of Context:
1
1
/*
2
2
 *      prefs.c - this file is part of Geany, a fast and lightweight IDE
3
3
 *
4
 
 *      Copyright 2006 Enrico Troeger <enrico.troeger@uvena.de>
 
4
 *      Copyright 2005-2008 Enrico Tröger <enrico(dot)troeger(at)uvena(dot)de>
 
5
 *      Copyright 2006-2008 Nick Treleaven <nick(dot)treleaven(at)btinternet(dot)com>
5
6
 *
6
7
 *      This program is free software; you can redistribute it and/or modify
7
8
 *      it under the terms of the GNU General Public License as published by
17
18
 *      along with this program; if not, write to the Free Software
18
19
 *      Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
19
20
 *
20
 
 * $Id: prefs.c 811 2006-09-11 11:13:36Z eht16 $
 
21
 * $Id: prefs.c 2389 2008-03-23 16:29:43Z eht16 $
21
22
 */
22
23
 
 
24
/*
 
25
 * Preferences dialog support functions.
 
26
 */
23
27
 
24
28
#include <stdlib.h>
25
29
#include <string.h>
 
30
#include <gdk/gdkkeysyms.h>
26
31
 
27
32
#include "geany.h"
28
33
 
38
43
#include "keybindings.h"
39
44
#include "interface.h"
40
45
#include "encodings.h"
41
 
#include "callbacks.h"
 
46
#include "project.h"
 
47
#include "editor.h"
 
48
#include "main.h"
 
49
#include "treeviews.h"
 
50
#include "printing.h"
 
51
#include "geanywraplabel.h"
42
52
 
43
53
#ifdef HAVE_VTE
44
54
# include "vte.h"
45
55
#endif
46
56
 
47
 
 
48
 
gchar *dialog_key_name;
49
 
static GtkListStore *store = NULL;
 
57
#ifdef G_OS_WIN32
 
58
# include "win32.h"
 
59
#endif
 
60
 
 
61
 
 
62
GeanyPrefs prefs;
 
63
 
 
64
static gchar *dialog_key_name;
 
65
static GtkTreeIter g_iter;
 
66
static GtkTreeStore *store = NULL;
50
67
static GtkTreeView *tree = NULL;
51
 
GtkWidget *dialog_label;
 
68
static GtkWidget *dialog_label;
52
69
static gboolean edited = FALSE;
53
70
 
54
 
static gboolean on_prefs_tree_view_button_press_event(
 
71
static gboolean on_tree_view_button_press_event(
55
72
                                                GtkWidget *widget, GdkEventButton *event, gpointer user_data);
56
73
static void on_cell_edited(GtkCellRendererText *cellrenderertext, gchar *path, gchar *new_text, gpointer user_data);
57
74
static gboolean on_keytype_dialog_response(GtkWidget *dialog, GdkEventKey *event, gpointer user_data);
58
75
static void on_dialog_response(GtkWidget *dialog, gint response, gpointer user_data);
59
 
static gboolean find_duplicate(guint idx, guint key, GdkModifierType mods, const gchar *action);
 
76
static gboolean find_duplicate(KeyBinding *search_kb,
 
77
                guint key, GdkModifierType mods, const gchar *action);
 
78
static void on_toolbar_show_toggled(GtkToggleButton *togglebutton, gpointer user_data);
 
79
static void on_show_notebook_tabs_toggled(GtkToggleButton *togglebutton, gpointer user_data);
 
80
static void on_use_folding_toggled(GtkToggleButton *togglebutton, gpointer user_data);
 
81
static void on_open_encoding_toggled(GtkToggleButton *togglebutton, gpointer user_data);
 
82
static void on_openfiles_visible_toggled(GtkToggleButton *togglebutton, gpointer user_data);
 
83
static void on_prefs_print_radio_button_toggled(GtkToggleButton *togglebutton, gpointer user_data);
 
84
static void on_prefs_print_page_header_toggled(GtkToggleButton *togglebutton, gpointer user_data);
 
85
 
 
86
 
 
87
enum
 
88
{
 
89
        KB_TREE_ACTION,
 
90
        KB_TREE_SHORTCUT,
 
91
        KB_TREE_INDEX
 
92
};
 
93
 
 
94
static void init_kb_tree(void)
 
95
{
 
96
        GtkCellRenderer *renderer;
 
97
        GtkTreeViewColumn *column;
 
98
 
 
99
        tree = GTK_TREE_VIEW(lookup_widget(ui_widgets.prefs_dialog, "treeview7"));
 
100
        /*g_object_set(tree, "vertical-separator", 6, NULL);*/
 
101
 
 
102
        store = gtk_tree_store_new(3, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_INT);
 
103
        gtk_tree_view_set_model(GTK_TREE_VIEW(tree), GTK_TREE_MODEL(store));
 
104
 
 
105
        renderer = gtk_cell_renderer_text_new();
 
106
        column = gtk_tree_view_column_new_with_attributes(_("Action"), renderer, "text", KB_TREE_ACTION, NULL);
 
107
        gtk_tree_view_append_column(GTK_TREE_VIEW(tree), column);
 
108
 
 
109
        renderer = gtk_cell_renderer_text_new();
 
110
        g_object_set(renderer, "editable", TRUE, NULL);
 
111
        column = gtk_tree_view_column_new_with_attributes(_("Shortcut"), renderer, "text", KB_TREE_SHORTCUT, NULL);
 
112
        gtk_tree_view_append_column(GTK_TREE_VIEW(tree), column);
 
113
 
 
114
        /* set policy settings for the scollwedwindow around the treeview again, because glade
 
115
         * doesn't keep the settings */
 
116
        gtk_scrolled_window_set_policy(
 
117
                        GTK_SCROLLED_WINDOW(lookup_widget(ui_widgets.prefs_dialog, "scrolledwindow8")),
 
118
                        GTK_POLICY_NEVER, GTK_POLICY_AUTOMATIC);
 
119
 
 
120
        g_signal_connect(G_OBJECT(renderer), "edited", G_CALLBACK(on_cell_edited), NULL);
 
121
        g_signal_connect(G_OBJECT(tree), "button-press-event",
 
122
                                G_CALLBACK(on_tree_view_button_press_event), NULL);
 
123
        g_signal_connect(G_OBJECT(lookup_widget(ui_widgets.prefs_dialog, "button2")), "clicked",
 
124
                                G_CALLBACK(on_tree_view_button_press_event), NULL);
 
125
}
 
126
 
 
127
 
 
128
static void init_keybindings(void)
 
129
{
 
130
        GtkTreeIter parent, iter;
 
131
        gsize g, i;
 
132
 
 
133
        if (store == NULL)
 
134
                init_kb_tree();
 
135
 
 
136
        for (g = 0; g < keybinding_groups->len; g++)
 
137
        {
 
138
                KeyBindingGroup *group = g_ptr_array_index(keybinding_groups, g);
 
139
 
 
140
                gtk_tree_store_append(store, &parent, NULL);
 
141
                gtk_tree_store_set(store, &parent, KB_TREE_ACTION, group->label,
 
142
                        KB_TREE_INDEX, g, -1);
 
143
 
 
144
                for (i = 0; i < group->count; i++)
 
145
                {
 
146
                        KeyBinding *kb = &group->keys[i];
 
147
                        gchar *key_string;
 
148
 
 
149
                        key_string = gtk_accelerator_name(kb->key, kb->mods);
 
150
                        gtk_tree_store_append(store, &iter, &parent);
 
151
                        gtk_tree_store_set(store, &iter, KB_TREE_ACTION, kb->label,
 
152
                                KB_TREE_SHORTCUT, key_string, KB_TREE_INDEX, i, -1);
 
153
                        g_free(key_string);
 
154
                }
 
155
        }
 
156
        gtk_tree_view_expand_all(GTK_TREE_VIEW(tree));
 
157
}
60
158
 
61
159
 
62
160
void prefs_init_dialog(void)
63
161
{
64
162
        GtkWidget *widget;
65
163
        GdkColor *color;
66
 
        GtkTreeIter iter;
67
 
        guint i;
68
 
        gchar *key_string;
69
 
 
70
 
        // General settings
71
 
        widget = lookup_widget(app->prefs_dialog, "spin_mru");
72
 
        gtk_spin_button_set_value(GTK_SPIN_BUTTON(widget), app->mru_length);
73
 
 
74
 
        widget = lookup_widget(app->prefs_dialog, "check_load_session");
75
 
        gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(widget), app->pref_main_load_session);
76
 
 
77
 
        widget = lookup_widget(app->prefs_dialog, "check_save_win_pos");
78
 
        gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(widget), app->pref_main_save_winpos);
79
 
 
80
 
        widget = lookup_widget(app->prefs_dialog, "check_beep");
81
 
        gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(widget), app->beep_on_errors);
82
 
 
83
 
        widget = lookup_widget(app->prefs_dialog, "check_switch_pages");
84
 
        gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(widget), app->switch_msgwin_pages);
85
 
 
86
 
        widget = lookup_widget(app->prefs_dialog, "check_ask_for_quit");
87
 
        gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(widget), app->pref_main_confirm_exit);
88
 
 
89
 
        if (app->tab_order_ltr)
90
 
                widget = lookup_widget(app->prefs_dialog, "radio_tab_right");
91
 
        else
92
 
                widget = lookup_widget(app->prefs_dialog, "radio_tab_left");
93
 
        gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(widget), TRUE);
94
 
 
95
 
 
96
 
        // Interface settings
97
 
        widget = lookup_widget(app->prefs_dialog, "check_list_symbol");
98
 
        gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(widget), app->sidebar_symbol_visible);
99
 
 
100
 
        widget = lookup_widget(app->prefs_dialog, "check_list_openfiles");
101
 
        gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(widget), app->sidebar_openfiles_visible);
102
 
 
103
 
        widget = lookup_widget(app->prefs_dialog, "tagbar_font");
104
 
        gtk_font_button_set_font_name(GTK_FONT_BUTTON(widget), app->tagbar_font);
105
 
 
106
 
        widget = lookup_widget(app->prefs_dialog, "msgwin_font");
107
 
        gtk_font_button_set_font_name(GTK_FONT_BUTTON(widget), app->msgwin_font);
108
 
 
109
 
        widget = lookup_widget(app->prefs_dialog, "editor_font");
110
 
        gtk_font_button_set_font_name(GTK_FONT_BUTTON(widget), app->editor_font);
111
 
 
112
 
        widget = lookup_widget(app->prefs_dialog, "spin_long_line");
113
 
        gtk_spin_button_set_value(GTK_SPIN_BUTTON(widget), app->long_line_column);
114
 
 
115
 
        switch (app->long_line_type)
 
164
 
 
165
        /* General settings */
 
166
        widget = lookup_widget(ui_widgets.prefs_dialog, "spin_mru");
 
167
        gtk_spin_button_set_value(GTK_SPIN_BUTTON(widget), prefs.mru_length);
 
168
 
 
169
        /* startup */
 
170
        widget = lookup_widget(ui_widgets.prefs_dialog, "check_load_session");
 
171
        gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(widget), prefs.load_session);
 
172
 
 
173
        widget = lookup_widget(ui_widgets.prefs_dialog, "check_project_session");
 
174
        gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(widget), project_prefs.project_session);
 
175
 
 
176
        widget = lookup_widget(ui_widgets.prefs_dialog, "check_save_win_pos");
 
177
        gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(widget), prefs.save_winpos);
 
178
 
 
179
        widget = lookup_widget(ui_widgets.prefs_dialog, "check_plugins");
 
180
        gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(widget), prefs.load_plugins);
 
181
 
 
182
        widget = lookup_widget(ui_widgets.prefs_dialog, "check_ask_for_quit");
 
183
        gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(widget), prefs.confirm_exit);
 
184
 
 
185
        /* behaviour */
 
186
        widget = lookup_widget(ui_widgets.prefs_dialog, "check_beep");
 
187
        gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(widget), prefs.beep_on_errors);
 
188
 
 
189
        widget = lookup_widget(ui_widgets.prefs_dialog, "check_switch_pages");
 
190
        gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(widget), prefs.switch_msgwin_pages);
 
191
 
 
192
        widget = lookup_widget(ui_widgets.prefs_dialog, "check_suppress_status_msgs");
 
193
        gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(widget), prefs.suppress_status_messages);
 
194
 
 
195
        widget = lookup_widget(ui_widgets.prefs_dialog, "check_auto_focus");
 
196
        gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(widget), prefs.auto_focus);
 
197
 
 
198
        widget = lookup_widget(ui_widgets.prefs_dialog, "check_ask_suppress_search_dialogs");
 
199
        gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(widget), prefs.suppress_search_dialogs);
 
200
 
 
201
        widget = lookup_widget(ui_widgets.prefs_dialog, "check_search_use_current_word");
 
202
        gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(widget), prefs.search_use_current_word);
 
203
 
 
204
        widget = lookup_widget(ui_widgets.prefs_dialog, "entry_contextaction");
 
205
        gtk_entry_set_text(GTK_ENTRY(widget), prefs.context_action_cmd);
 
206
 
 
207
        widget = lookup_widget(ui_widgets.prefs_dialog, "startup_path_entry");
 
208
        gtk_entry_set_text(GTK_ENTRY(widget), prefs.default_open_path);
 
209
 
 
210
        project_setup_prefs();  /* project files path */
 
211
 
 
212
 
 
213
        /* Interface settings */
 
214
        widget = lookup_widget(ui_widgets.prefs_dialog, "check_list_symbol");
 
215
        gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(widget), prefs.sidebar_symbol_visible);
 
216
 
 
217
        widget = lookup_widget(ui_widgets.prefs_dialog, "check_list_openfiles");
 
218
        gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(widget), prefs.sidebar_openfiles_visible);
 
219
        on_openfiles_visible_toggled(GTK_TOGGLE_BUTTON(widget), NULL);
 
220
 
 
221
        widget = lookup_widget(ui_widgets.prefs_dialog, "check_list_openfiles_fullpath");
 
222
        gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(widget), prefs.sidebar_openfiles_fullpath);
 
223
 
 
224
        widget = lookup_widget(ui_widgets.prefs_dialog, "tagbar_font");
 
225
        gtk_font_button_set_font_name(GTK_FONT_BUTTON(widget), prefs.tagbar_font);
 
226
 
 
227
        widget = lookup_widget(ui_widgets.prefs_dialog, "msgwin_font");
 
228
        gtk_font_button_set_font_name(GTK_FONT_BUTTON(widget), prefs.msgwin_font);
 
229
 
 
230
        widget = lookup_widget(ui_widgets.prefs_dialog, "editor_font");
 
231
        gtk_font_button_set_font_name(GTK_FONT_BUTTON(widget), prefs.editor_font);
 
232
 
 
233
        widget = lookup_widget(ui_widgets.prefs_dialog, "spin_long_line");
 
234
        gtk_spin_button_set_value(GTK_SPIN_BUTTON(widget), editor_prefs.long_line_column);
 
235
 
 
236
        switch (editor_prefs.long_line_type)
116
237
        {
117
 
                case 0: widget = lookup_widget(app->prefs_dialog, "radio_long_line_line"); break;
118
 
                case 1: widget = lookup_widget(app->prefs_dialog, "radio_long_line_background"); break;
119
 
                default: widget = lookup_widget(app->prefs_dialog, "radio_long_line_disabled"); break;
 
238
                case 0: widget = lookup_widget(ui_widgets.prefs_dialog, "radio_long_line_line"); break;
 
239
                case 1: widget = lookup_widget(ui_widgets.prefs_dialog, "radio_long_line_background"); break;
 
240
                default: widget = lookup_widget(ui_widgets.prefs_dialog, "radio_long_line_disabled"); break;
120
241
        }
121
242
        gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(widget), TRUE);
122
243
 
123
244
        color = g_new0(GdkColor, 1);
124
 
        gdk_color_parse(app->long_line_color, color);
125
 
        widget = lookup_widget(app->prefs_dialog, "long_line_color");
 
245
        gdk_color_parse(editor_prefs.long_line_color, color);
 
246
        widget = lookup_widget(ui_widgets.prefs_dialog, "long_line_color");
126
247
        gtk_color_button_set_color(GTK_COLOR_BUTTON(widget), color);
127
248
        g_free(color);
128
249
 
129
 
        widget = lookup_widget(app->prefs_dialog, "combo_tab_editor");
130
 
        gtk_combo_box_set_active(GTK_COMBO_BOX(widget), app->tab_pos_editor);
131
 
 
132
 
        widget = lookup_widget(app->prefs_dialog, "combo_tab_msgwin");
133
 
        gtk_combo_box_set_active(GTK_COMBO_BOX(widget), app->tab_pos_msgwin);
134
 
 
135
 
        widget = lookup_widget(app->prefs_dialog, "combo_tab_sidebar");
136
 
        gtk_combo_box_set_active(GTK_COMBO_BOX(widget), app->tab_pos_sidebar);
137
 
 
138
 
 
139
 
        // Toolbar settings
140
 
        widget = lookup_widget(app->prefs_dialog, "check_toolbar_show");
141
 
        gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(widget), app->toolbar_visible);
142
 
 
143
 
        widget = lookup_widget(app->prefs_dialog, "check_toolbar_search");
144
 
        gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(widget), app->pref_toolbar_show_search);
145
 
 
146
 
        widget = lookup_widget(app->prefs_dialog, "check_toolbar_goto");
147
 
        gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(widget), app->pref_toolbar_show_goto);
148
 
 
149
 
        widget = lookup_widget(app->prefs_dialog, "check_toolbar_compile");
150
 
        gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(widget), app->pref_toolbar_show_compile);
151
 
 
152
 
        widget = lookup_widget(app->prefs_dialog, "check_toolbar_zoom");
153
 
        gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(widget), app->pref_toolbar_show_zoom);
154
 
 
155
 
        widget = lookup_widget(app->prefs_dialog, "check_toolbar_undo");
156
 
        gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(widget), app->pref_toolbar_show_undo);
157
 
 
158
 
        widget = lookup_widget(app->prefs_dialog, "check_toolbar_colour");
159
 
        gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(widget), app->pref_toolbar_show_colour);
160
 
 
161
 
        widget = lookup_widget(app->prefs_dialog, "check_toolbar_fileops");
162
 
        gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(widget), app->pref_toolbar_show_fileops);
163
 
 
164
 
 
165
 
        switch (app->toolbar_icon_style)
 
250
        widget = lookup_widget(ui_widgets.prefs_dialog, "check_show_notebook_tabs");
 
251
        gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(widget), prefs.show_notebook_tabs);
 
252
        /* disable following setting if notebook tabs are hidden */
 
253
        on_show_notebook_tabs_toggled(GTK_TOGGLE_BUTTON(
 
254
                                        lookup_widget(ui_widgets.prefs_dialog, "check_show_notebook_tabs")), NULL);
 
255
 
 
256
        widget = lookup_widget(ui_widgets.prefs_dialog, "check_show_tab_cross");
 
257
        gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(widget), prefs.show_tab_cross);
 
258
 
 
259
        widget = lookup_widget(ui_widgets.prefs_dialog, "combo_tab_editor");
 
260
        gtk_combo_box_set_active(GTK_COMBO_BOX(widget), prefs.tab_pos_editor);
 
261
 
 
262
        widget = lookup_widget(ui_widgets.prefs_dialog, "combo_tab_msgwin");
 
263
        gtk_combo_box_set_active(GTK_COMBO_BOX(widget), prefs.tab_pos_msgwin);
 
264
 
 
265
        widget = lookup_widget(ui_widgets.prefs_dialog, "combo_tab_sidebar");
 
266
        gtk_combo_box_set_active(GTK_COMBO_BOX(widget), prefs.tab_pos_sidebar);
 
267
 
 
268
        widget = lookup_widget(ui_widgets.prefs_dialog, "check_statusbar_visible");
 
269
        gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(widget), prefs.statusbar_visible);
 
270
 
 
271
 
 
272
        /* Toolbar settings */
 
273
        widget = lookup_widget(ui_widgets.prefs_dialog, "check_toolbar_show");
 
274
        gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(widget), prefs.toolbar_visible);
 
275
 
 
276
        widget = lookup_widget(ui_widgets.prefs_dialog, "check_toolbar_search");
 
277
        gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(widget), prefs.toolbar_show_search);
 
278
 
 
279
        widget = lookup_widget(ui_widgets.prefs_dialog, "check_toolbar_goto");
 
280
        gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(widget), prefs.toolbar_show_goto);
 
281
 
 
282
        widget = lookup_widget(ui_widgets.prefs_dialog, "check_toolbar_compile");
 
283
        gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(widget), prefs.toolbar_show_compile);
 
284
 
 
285
        widget = lookup_widget(ui_widgets.prefs_dialog, "check_toolbar_zoom");
 
286
        gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(widget), prefs.toolbar_show_zoom);
 
287
 
 
288
        widget = lookup_widget(ui_widgets.prefs_dialog, "check_toolbar_indent");
 
289
        gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(widget), prefs.toolbar_show_indent);
 
290
 
 
291
        widget = lookup_widget(ui_widgets.prefs_dialog, "check_toolbar_undo");
 
292
        gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(widget), prefs.toolbar_show_undo);
 
293
 
 
294
        widget = lookup_widget(ui_widgets.prefs_dialog, "check_toolbar_navigation");
 
295
        gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(widget), prefs.toolbar_show_navigation);
 
296
 
 
297
        widget = lookup_widget(ui_widgets.prefs_dialog, "check_toolbar_colour");
 
298
        gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(widget), prefs.toolbar_show_colour);
 
299
 
 
300
        widget = lookup_widget(ui_widgets.prefs_dialog, "check_toolbar_fileops");
 
301
        gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(widget), prefs.toolbar_show_fileops);
 
302
 
 
303
        widget = lookup_widget(ui_widgets.prefs_dialog, "check_toolbar_quit");
 
304
        gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(widget), prefs.toolbar_show_quit);
 
305
 
 
306
 
 
307
        switch (prefs.toolbar_icon_style)
166
308
        {
167
 
                case 0: widget = lookup_widget(app->prefs_dialog, "radio_toolbar_image"); break;
168
 
                case 1: widget = lookup_widget(app->prefs_dialog, "radio_toolbar_text"); break;
169
 
                default: widget = lookup_widget(app->prefs_dialog, "radio_toolbar_imagetext"); break;
 
309
                case 0: widget = lookup_widget(ui_widgets.prefs_dialog, "radio_toolbar_image"); break;
 
310
                case 1: widget = lookup_widget(ui_widgets.prefs_dialog, "radio_toolbar_text"); break;
 
311
                default: widget = lookup_widget(ui_widgets.prefs_dialog, "radio_toolbar_imagetext"); break;
170
312
        }
171
313
        gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(widget), TRUE);
172
314
 
173
315
 
174
 
        switch (app->toolbar_icon_size)
 
316
        switch (prefs.toolbar_icon_size)
175
317
        {
176
318
                case GTK_ICON_SIZE_LARGE_TOOLBAR:
177
 
                                widget = lookup_widget(app->prefs_dialog, "radio_toolbar_large"); break;
178
 
                default: widget = lookup_widget(app->prefs_dialog, "radio_toolbar_small"); break;
179
 
        }
180
 
        gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(widget), TRUE);
181
 
        // disable elements if toolbar is hidden
182
 
        on_pref_toolbar_show_toggled(GTK_TOGGLE_BUTTON(
183
 
                                        lookup_widget(app->prefs_dialog, "check_toolbar_show")), NULL);
184
 
 
185
 
 
186
 
        // Editor settings
187
 
        widget = lookup_widget(app->prefs_dialog, "spin_tab_width");
188
 
        gtk_spin_button_set_value(GTK_SPIN_BUTTON(widget), app->pref_editor_tab_width);
189
 
 
190
 
        widget = lookup_widget(app->prefs_dialog, "combo_encoding");
191
 
        // luckily the index of the combo box items match the index of the encodings array
192
 
        gtk_combo_box_set_active(GTK_COMBO_BOX(widget), app->pref_editor_default_encoding);
193
 
 
194
 
        widget = lookup_widget(app->prefs_dialog, "check_trailing_spaces");
195
 
        gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(widget), app->pref_editor_trail_space);
196
 
 
197
 
        widget = lookup_widget(app->prefs_dialog, "check_new_line");
198
 
        gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(widget), app->pref_editor_new_line);
199
 
 
200
 
        widget = lookup_widget(app->prefs_dialog, "check_replace_tabs");
201
 
        gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(widget), app->pref_editor_replace_tabs);
202
 
 
203
 
        widget = lookup_widget(app->prefs_dialog, "check_indent");
204
 
        gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(widget), app->pref_editor_show_indent_guide);
205
 
 
206
 
        widget = lookup_widget(app->prefs_dialog, "check_white_space");
207
 
        gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(widget), app->pref_editor_show_white_space);
208
 
 
209
 
        widget = lookup_widget(app->prefs_dialog, "check_line_end");
210
 
        gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(widget), app->pref_editor_show_line_endings);
211
 
 
212
 
        widget = lookup_widget(app->prefs_dialog, "check_auto_indent");
213
 
        gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(widget), app->pref_editor_use_auto_indention);
214
 
 
215
 
        widget = lookup_widget(app->prefs_dialog, "check_line_wrapping");
216
 
        gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(widget), app->pref_editor_line_breaking);
217
 
 
218
 
        widget = lookup_widget(app->prefs_dialog, "check_auto_complete");
219
 
        gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(widget), app->pref_editor_auto_complete_constructs);
220
 
 
221
 
        widget = lookup_widget(app->prefs_dialog, "check_xmltag");
222
 
        gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(widget), app->pref_editor_auto_close_xml_tags);
223
 
 
224
 
        widget = lookup_widget(app->prefs_dialog, "check_folding");
225
 
        gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(widget), app->pref_editor_folding);
226
 
 
227
 
        widget = lookup_widget(app->prefs_dialog, "check_indicators");
228
 
        gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(widget), app->pref_editor_use_indicators);
229
 
 
230
 
        widget = lookup_widget(app->prefs_dialog, "spin_autocheight");
231
 
        gtk_spin_button_set_value(GTK_SPIN_BUTTON(widget), app->autocompletion_max_height);
232
 
 
233
 
 
234
 
        // Tools Settings
235
 
#ifdef G_OS_WIN32
236
 
        // hide related Make path setting
237
 
        gtk_widget_set_sensitive(lookup_widget(app->prefs_dialog, "label11"), FALSE);
238
 
        gtk_widget_set_sensitive(lookup_widget(app->prefs_dialog, "entry_com_make"), FALSE);
239
 
        gtk_widget_set_sensitive(lookup_widget(app->prefs_dialog, "button_make"), FALSE);
240
 
#else
241
 
        if (app->tools_make_cmd)
242
 
                gtk_entry_set_text(GTK_ENTRY(lookup_widget(app->prefs_dialog, "entry_com_make")), app->tools_make_cmd);
243
 
#endif
244
 
    if (app->tools_term_cmd)
245
 
            gtk_entry_set_text(GTK_ENTRY(lookup_widget(app->prefs_dialog, "entry_com_term")), app->tools_term_cmd);
246
 
 
247
 
        if (app->tools_browser_cmd)
248
 
                gtk_entry_set_text(GTK_ENTRY(lookup_widget(app->prefs_dialog, "entry_browser")), app->tools_browser_cmd);
249
 
 
250
 
        if (app->tools_print_cmd)
251
 
                gtk_entry_set_text(GTK_ENTRY(lookup_widget(app->prefs_dialog, "entry_print")), app->tools_print_cmd);
252
 
 
253
 
        if (app->tools_grep_cmd)
254
 
                gtk_entry_set_text(GTK_ENTRY(lookup_widget(app->prefs_dialog, "entry_grep")), app->tools_grep_cmd);
255
 
 
256
 
 
257
 
        // Template settings
258
 
        widget = lookup_widget(app->prefs_dialog, "entry_template_developer");
259
 
        gtk_entry_set_text(GTK_ENTRY(widget), app->pref_template_developer);
260
 
 
261
 
        widget = lookup_widget(app->prefs_dialog, "entry_template_company");
262
 
        gtk_entry_set_text(GTK_ENTRY(widget), app->pref_template_company);
263
 
 
264
 
        widget = lookup_widget(app->prefs_dialog, "entry_template_mail");
265
 
        gtk_entry_set_text(GTK_ENTRY(widget), app->pref_template_mail);
266
 
 
267
 
        widget = lookup_widget(app->prefs_dialog, "entry_template_initial");
268
 
        gtk_entry_set_text(GTK_ENTRY(widget), app->pref_template_initial);
269
 
 
270
 
        widget = lookup_widget(app->prefs_dialog, "entry_template_version");
271
 
        gtk_entry_set_text(GTK_ENTRY(widget), app->pref_template_version);
272
 
 
273
 
 
274
 
        // Keybindings
275
 
        if (store == NULL)
276
 
        {
277
 
                GtkCellRenderer *renderer;
278
 
                GtkTreeViewColumn *column;
279
 
 
280
 
                tree = GTK_TREE_VIEW(lookup_widget(app->prefs_dialog, "treeview7"));
281
 
                //g_object_set(tree, "vertical-separator", 6, NULL);
282
 
 
283
 
                store = gtk_list_store_new(2, G_TYPE_STRING, G_TYPE_STRING);
284
 
                gtk_tree_view_set_model(GTK_TREE_VIEW(tree), GTK_TREE_MODEL(store));
285
 
 
286
 
                renderer = gtk_cell_renderer_text_new();
287
 
                column = gtk_tree_view_column_new_with_attributes(_("Action"), renderer, "text", 0, NULL);
288
 
                gtk_tree_view_append_column(GTK_TREE_VIEW(tree), column);
289
 
 
290
 
                renderer = gtk_cell_renderer_text_new();
291
 
                g_object_set(renderer, "editable", TRUE, NULL);
292
 
                column = gtk_tree_view_column_new_with_attributes(_("Shortcut"), renderer, "text", 1, NULL);
293
 
                gtk_tree_view_append_column(GTK_TREE_VIEW(tree), column);
294
 
 
295
 
                // set policy settings for the scollwedwindow around the treeview again, because glade
296
 
                // doesn't keep the settings
297
 
                gtk_scrolled_window_set_policy(
298
 
                                GTK_SCROLLED_WINDOW(lookup_widget(app->prefs_dialog, "scrolledwindow8")),
299
 
                                GTK_POLICY_NEVER, GTK_POLICY_AUTOMATIC);
300
 
 
301
 
                g_signal_connect(G_OBJECT(renderer), "edited", G_CALLBACK(on_cell_edited), NULL);
302
 
                g_signal_connect(G_OBJECT(tree), "button-press-event",
303
 
                                        G_CALLBACK(on_prefs_tree_view_button_press_event), NULL);
304
 
                g_signal_connect(G_OBJECT(lookup_widget(app->prefs_dialog, "button2")), "button-press-event",
305
 
                                        G_CALLBACK(on_prefs_tree_view_button_press_event), NULL);
306
 
        }
307
 
 
308
 
        for (i = 0; i < GEANY_MAX_KEYS; i++)
309
 
        {
310
 
                key_string = gtk_accelerator_name(keys[i]->key, keys[i]->mods);
311
 
                gtk_list_store_append(store, &iter);
312
 
                gtk_list_store_set(store, &iter, 0, keys[i]->label, 1, key_string, -1);
313
 
                g_free(key_string);
314
 
        }
315
 
 
 
319
                                widget = lookup_widget(ui_widgets.prefs_dialog, "radio_toolbar_large"); break;
 
320
                default: widget = lookup_widget(ui_widgets.prefs_dialog, "radio_toolbar_small"); break;
 
321
        }
 
322
        gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(widget), TRUE);
 
323
        /* disable elements if toolbar is hidden */
 
324
        on_toolbar_show_toggled(GTK_TOGGLE_BUTTON(
 
325
                                        lookup_widget(ui_widgets.prefs_dialog, "check_toolbar_show")), NULL);
 
326
 
 
327
 
 
328
        /* Files settings */
 
329
        if (prefs.tab_order_ltr)
 
330
                widget = lookup_widget(ui_widgets.prefs_dialog, "radio_tab_right");
 
331
        else
 
332
                widget = lookup_widget(ui_widgets.prefs_dialog, "radio_tab_left");
 
333
        gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(widget), TRUE);
 
334
 
 
335
 
 
336
        /* Editor settings */
 
337
        widget = lookup_widget(ui_widgets.prefs_dialog, "spin_tab_width");
 
338
        gtk_spin_button_set_value(GTK_SPIN_BUTTON(widget), editor_prefs.tab_width);
 
339
 
 
340
        widget = lookup_widget(ui_widgets.prefs_dialog, "combo_new_encoding");
 
341
        /* luckily the index of the combo box items match the index of the encodings array */
 
342
        gtk_combo_box_set_active(GTK_COMBO_BOX(widget), prefs.default_new_encoding);
 
343
 
 
344
        widget = lookup_widget(ui_widgets.prefs_dialog, "check_open_encoding");
 
345
        gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(widget),
 
346
                        (prefs.default_open_encoding >= 0) ? TRUE : FALSE);
 
347
        on_open_encoding_toggled(GTK_TOGGLE_BUTTON(widget), NULL);
 
348
 
 
349
        widget = lookup_widget(ui_widgets.prefs_dialog, "combo_open_encoding");
 
350
        if (prefs.default_open_encoding >= 0)
 
351
        {
 
352
                gtk_combo_box_set_active(GTK_COMBO_BOX(widget), prefs.default_open_encoding);
 
353
        }
 
354
        else
 
355
                gtk_combo_box_set_active(GTK_COMBO_BOX(widget), GEANY_ENCODING_UTF_8);
 
356
 
 
357
        widget = lookup_widget(ui_widgets.prefs_dialog, "check_trailing_spaces");
 
358
        gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(widget), prefs.strip_trailing_spaces);
 
359
 
 
360
        widget = lookup_widget(ui_widgets.prefs_dialog, "check_new_line");
 
361
        gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(widget), prefs.final_new_line);
 
362
 
 
363
        widget = lookup_widget(ui_widgets.prefs_dialog, "check_replace_tabs");
 
364
        gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(widget), prefs.replace_tabs);
 
365
 
 
366
        widget = lookup_widget(ui_widgets.prefs_dialog, "check_indent");
 
367
        gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(widget), editor_prefs.show_indent_guide);
 
368
 
 
369
        widget = lookup_widget(ui_widgets.prefs_dialog, "check_white_space");
 
370
        gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(widget), editor_prefs.show_white_space);
 
371
 
 
372
        widget = lookup_widget(ui_widgets.prefs_dialog, "check_line_end");
 
373
        gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(widget), editor_prefs.show_line_endings);
 
374
 
 
375
        widget = lookup_widget(ui_widgets.prefs_dialog, "combo_auto_indent_mode");
 
376
        gtk_combo_box_set_active(GTK_COMBO_BOX(widget), editor_prefs.indent_mode);
 
377
 
 
378
        widget = lookup_widget(ui_widgets.prefs_dialog, "check_detect_indent");
 
379
        gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(widget), editor_prefs.detect_tab_mode);
 
380
 
 
381
        widget = lookup_widget(ui_widgets.prefs_dialog, "check_line_wrapping");
 
382
        gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(widget), editor_prefs.line_wrapping);
 
383
 
 
384
        widget = lookup_widget(ui_widgets.prefs_dialog, "check_complete_snippets");
 
385
        gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(widget), editor_prefs.complete_snippets);
 
386
 
 
387
        widget = lookup_widget(ui_widgets.prefs_dialog, "check_xmltag");
 
388
        gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(widget), editor_prefs.auto_close_xml_tags);
 
389
 
 
390
        widget = lookup_widget(ui_widgets.prefs_dialog, "check_folding");
 
391
        gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(widget), editor_prefs.folding);
 
392
 
 
393
        widget = lookup_widget(ui_widgets.prefs_dialog, "check_unfold_children");
 
394
        gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(widget), editor_prefs.unfold_all_children);
 
395
        on_use_folding_toggled(GTK_TOGGLE_BUTTON(
 
396
                                        lookup_widget(ui_widgets.prefs_dialog, "check_folding")), NULL);
 
397
 
 
398
        widget = lookup_widget(ui_widgets.prefs_dialog, "check_disable_dnd");
 
399
        gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(widget), editor_prefs.disable_dnd);
 
400
 
 
401
        widget = lookup_widget(ui_widgets.prefs_dialog, "check_smart_home");
 
402
        gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(widget), editor_prefs.smart_home_key);
 
403
 
 
404
        widget = lookup_widget(ui_widgets.prefs_dialog, "check_newline_strip");
 
405
        gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(widget), editor_prefs.newline_strip);
 
406
 
 
407
        if (editor_prefs.use_tabs)
 
408
                widget = lookup_widget(ui_widgets.prefs_dialog, "radio_indent_tabs");
 
409
        else
 
410
                widget = lookup_widget(ui_widgets.prefs_dialog, "radio_indent_spaces");
 
411
        gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(widget), TRUE);
 
412
 
 
413
        widget = lookup_widget(ui_widgets.prefs_dialog, "check_indicators");
 
414
        gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(widget), editor_prefs.use_indicators);
 
415
 
 
416
        widget = lookup_widget(ui_widgets.prefs_dialog, "check_symbol_auto_completion");
 
417
        gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(widget), editor_prefs.auto_complete_symbols);
 
418
 
 
419
        widget = lookup_widget(ui_widgets.prefs_dialog, "spin_symbollistheight");
 
420
        gtk_spin_button_set_value(GTK_SPIN_BUTTON(widget), editor_prefs.symbolcompletion_max_height);
 
421
 
 
422
        widget = lookup_widget(ui_widgets.prefs_dialog, "spin_symbol_complete_chars");
 
423
        gtk_spin_button_set_value(GTK_SPIN_BUTTON(widget), editor_prefs.symbolcompletion_min_chars);
 
424
 
 
425
 
 
426
        /* Tools Settings */
 
427
        if (prefs.tools_make_cmd)
 
428
                        gtk_entry_set_text(GTK_ENTRY(lookup_widget(ui_widgets.prefs_dialog, "entry_com_make")), prefs.tools_make_cmd);
 
429
 
 
430
    if (prefs.tools_term_cmd)
 
431
            gtk_entry_set_text(GTK_ENTRY(lookup_widget(ui_widgets.prefs_dialog, "entry_com_term")), prefs.tools_term_cmd);
 
432
 
 
433
        if (prefs.tools_browser_cmd)
 
434
                gtk_entry_set_text(GTK_ENTRY(lookup_widget(ui_widgets.prefs_dialog, "entry_browser")), prefs.tools_browser_cmd);
 
435
 
 
436
        if (prefs.tools_grep_cmd)
 
437
                gtk_entry_set_text(GTK_ENTRY(lookup_widget(ui_widgets.prefs_dialog, "entry_grep")), prefs.tools_grep_cmd);
 
438
 
 
439
 
 
440
        /* Template settings */
 
441
        widget = lookup_widget(ui_widgets.prefs_dialog, "entry_template_developer");
 
442
        gtk_entry_set_text(GTK_ENTRY(widget), prefs.template_developer);
 
443
 
 
444
        widget = lookup_widget(ui_widgets.prefs_dialog, "entry_template_company");
 
445
        gtk_entry_set_text(GTK_ENTRY(widget), prefs.template_company);
 
446
 
 
447
        widget = lookup_widget(ui_widgets.prefs_dialog, "entry_template_mail");
 
448
        gtk_entry_set_text(GTK_ENTRY(widget), prefs.template_mail);
 
449
 
 
450
        widget = lookup_widget(ui_widgets.prefs_dialog, "entry_template_initial");
 
451
        gtk_entry_set_text(GTK_ENTRY(widget), prefs.template_initial);
 
452
 
 
453
        widget = lookup_widget(ui_widgets.prefs_dialog, "entry_template_version");
 
454
        gtk_entry_set_text(GTK_ENTRY(widget), prefs.template_version);
 
455
 
 
456
 
 
457
        /* Keybindings */
 
458
        init_keybindings();
 
459
 
 
460
        /* Printing */
 
461
        {
 
462
                GtkWidget *widget_gtk = lookup_widget(ui_widgets.prefs_dialog, "radio_print_gtk");
 
463
                if (printing_prefs.use_gtk_printing)
 
464
                        widget = widget_gtk;
 
465
                else
 
466
                        widget = lookup_widget(ui_widgets.prefs_dialog, "radio_print_external");
 
467
 
 
468
#if GTK_CHECK_VERSION(2, 10, 0)
 
469
                if (gtk_check_version(2, 10, 0) != NULL)
 
470
#endif
 
471
                {
 
472
                        gtk_widget_set_sensitive(widget_gtk, FALSE); /* disable the whole option block */
 
473
                        widget = lookup_widget(ui_widgets.prefs_dialog, "radio_print_external");
 
474
                }
 
475
                gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(widget), TRUE);
 
476
 
 
477
                on_prefs_print_radio_button_toggled(GTK_TOGGLE_BUTTON(widget_gtk), NULL);
 
478
        }
 
479
        if (printing_prefs.external_print_cmd)
 
480
                gtk_entry_set_text(
 
481
                        GTK_ENTRY(lookup_widget(ui_widgets.prefs_dialog, "entry_print_external_cmd")),
 
482
                        printing_prefs.external_print_cmd);
 
483
 
 
484
        widget = lookup_widget(ui_widgets.prefs_dialog, "check_print_linenumbers");
 
485
        gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(widget), printing_prefs.print_line_numbers);
 
486
 
 
487
        widget = lookup_widget(ui_widgets.prefs_dialog, "check_print_pagenumbers");
 
488
        gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(widget), printing_prefs.print_page_numbers);
 
489
 
 
490
        widget = lookup_widget(ui_widgets.prefs_dialog, "check_print_pageheader");
 
491
        gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(widget), printing_prefs.print_page_header);
 
492
        on_prefs_print_page_header_toggled(GTK_TOGGLE_BUTTON(widget), NULL);
 
493
 
 
494
        widget = lookup_widget(ui_widgets.prefs_dialog, "check_print_basename");
 
495
        gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(widget), printing_prefs.page_header_basename);
 
496
 
 
497
        if (printing_prefs.page_header_datefmt)
 
498
                gtk_entry_set_text(
 
499
                        GTK_ENTRY(lookup_widget(ui_widgets.prefs_dialog, "entry_print_dateformat")),
 
500
                        printing_prefs.page_header_datefmt);
 
501
 
 
502
 
 
503
#ifndef HAVE_PLUGINS
 
504
        gtk_widget_set_sensitive(lookup_widget(ui_widgets.prefs_dialog, "check_plugins"), FALSE);
 
505
#endif
316
506
 
317
507
#ifdef HAVE_VTE
318
 
        // make VTE switch visible only when VTE is compiled in, it is hidden by default
319
 
        widget = lookup_widget(app->prefs_dialog, "check_vte");
 
508
        /* make VTE switch visible only when VTE is compiled in, it is hidden by default */
 
509
        widget = lookup_widget(ui_widgets.prefs_dialog, "check_vte");
320
510
        gtk_widget_show(widget);
321
511
        gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(widget), vte_info.load_vte);
322
512
 
323
 
        // VTE settings
 
513
        /* VTE settings */
324
514
        if (vte_info.have_vte)
325
515
        {
326
 
                widget = lookup_widget(app->prefs_dialog, "font_term");
 
516
                widget = lookup_widget(ui_widgets.prefs_dialog, "font_term");
327
517
                gtk_font_button_set_font_name(GTK_FONT_BUTTON(widget), vc->font);
328
518
 
329
 
                widget = lookup_widget(app->prefs_dialog, "color_fore");
 
519
                widget = lookup_widget(ui_widgets.prefs_dialog, "color_fore");
330
520
                gtk_color_button_set_color(GTK_COLOR_BUTTON(widget), vc->colour_fore);
331
521
 
332
 
                widget = lookup_widget(app->prefs_dialog, "color_back");
 
522
                widget = lookup_widget(ui_widgets.prefs_dialog, "color_back");
333
523
                gtk_color_button_set_color(GTK_COLOR_BUTTON(widget), vc->colour_back);
334
524
 
335
 
                widget = lookup_widget(app->prefs_dialog, "spin_scrollback");
 
525
                widget = lookup_widget(ui_widgets.prefs_dialog, "spin_scrollback");
336
526
                gtk_spin_button_set_value(GTK_SPIN_BUTTON(widget), vc->scrollback_lines);
337
527
 
338
 
                widget = lookup_widget(app->prefs_dialog, "entry_emulation");
 
528
                widget = lookup_widget(ui_widgets.prefs_dialog, "entry_emulation");
339
529
                gtk_entry_set_text(GTK_ENTRY(widget), vc->emulation);
340
530
 
341
 
                widget = lookup_widget(app->prefs_dialog, "entry_shell");
 
531
                widget = lookup_widget(ui_widgets.prefs_dialog, "entry_shell");
342
532
                gtk_entry_set_text(GTK_ENTRY(widget), vc->shell);
343
533
 
344
 
                widget = lookup_widget(app->prefs_dialog, "check_scroll_key");
 
534
                widget = lookup_widget(ui_widgets.prefs_dialog, "check_scroll_key");
345
535
                gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(widget), vc->scroll_on_key);
346
536
 
347
 
                widget = lookup_widget(app->prefs_dialog, "check_scroll_out");
 
537
                widget = lookup_widget(ui_widgets.prefs_dialog, "check_scroll_out");
348
538
                gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(widget), vc->scroll_on_out);
349
539
 
350
 
                widget = lookup_widget(app->prefs_dialog, "check_ignore_menu_key");
 
540
                widget = lookup_widget(ui_widgets.prefs_dialog, "check_enable_bash_keys");
 
541
                gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(widget), vc->enable_bash_keys);
 
542
 
 
543
                widget = lookup_widget(ui_widgets.prefs_dialog, "check_ignore_menu_key");
351
544
                gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(widget), vc->ignore_menu_bar_accel);
352
545
 
353
 
                widget = lookup_widget(app->prefs_dialog, "check_follow_path");
 
546
                widget = lookup_widget(ui_widgets.prefs_dialog, "check_follow_path");
354
547
                gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(widget), vc->follow_path);
 
548
 
 
549
                widget = lookup_widget(ui_widgets.prefs_dialog, "check_run_in_vte");
 
550
                gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(widget), vc->run_in_vte);
 
551
 
 
552
                widget = lookup_widget(ui_widgets.prefs_dialog, "check_skip_script");
 
553
                gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(widget), vc->skip_run_script);
355
554
        }
356
555
#endif
357
556
}
358
557
 
359
 
//gtk_notebook_set_tab_pos
360
558
 
361
559
/*
362
560
 * callbacks
363
561
 */
364
 
void on_prefs_button_clicked(GtkDialog *dialog, gint response, gpointer user_data)
 
562
static void
 
563
on_prefs_button_clicked(GtkDialog *dialog, gint response, gpointer user_data)
365
564
{
366
 
        if (response == GTK_RESPONSE_OK)
 
565
        if (response == GTK_RESPONSE_OK || response == GTK_RESPONSE_APPLY)
367
566
        {
368
567
                GtkWidget *widget;
369
 
                gint i;
370
 
 
371
 
                // General settings
372
 
                widget = lookup_widget(app->prefs_dialog, "spin_mru");
373
 
                app->mru_length = gtk_spin_button_get_value_as_int(GTK_SPIN_BUTTON(widget));
374
 
 
375
 
                widget = lookup_widget(app->prefs_dialog, "check_load_session");
376
 
                app->pref_main_load_session = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(widget));
377
 
 
378
 
                widget = lookup_widget(app->prefs_dialog, "check_save_win_pos");
379
 
                app->pref_main_save_winpos = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(widget));
380
 
 
381
 
                widget = lookup_widget(app->prefs_dialog, "check_beep");
382
 
                app->beep_on_errors = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(widget));
383
 
 
384
 
                widget = lookup_widget(app->prefs_dialog, "check_ask_for_quit");
385
 
                app->pref_main_confirm_exit = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(widget));
386
 
 
387
 
                widget = lookup_widget(app->prefs_dialog, "check_switch_pages");
388
 
                app->switch_msgwin_pages = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(widget));
389
 
 
390
 
                widget = lookup_widget(app->prefs_dialog, "radio_tab_right");
391
 
                app->tab_order_ltr = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(widget));
392
 
 
393
 
 
394
 
                // Interface settings
395
 
                widget = lookup_widget(app->prefs_dialog, "check_list_symbol");
396
 
                app->sidebar_symbol_visible = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(widget));
397
 
 
398
 
                widget = lookup_widget(app->prefs_dialog, "check_list_openfiles");
399
 
                app->sidebar_openfiles_visible = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(widget));
400
 
 
401
 
                widget = lookup_widget(app->prefs_dialog, "radio_long_line_line");
402
 
                if (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(widget))) app->long_line_type = 0;
 
568
                guint i;
 
569
 
 
570
                /* General settings */
 
571
                widget = lookup_widget(ui_widgets.prefs_dialog, "spin_mru");
 
572
                prefs.mru_length = gtk_spin_button_get_value_as_int(GTK_SPIN_BUTTON(widget));
 
573
 
 
574
                /* startup */
 
575
                widget = lookup_widget(ui_widgets.prefs_dialog, "check_load_session");
 
576
                prefs.load_session = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(widget));
 
577
 
 
578
                widget = lookup_widget(ui_widgets.prefs_dialog, "check_project_session");
 
579
                project_prefs.project_session = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(widget));
 
580
 
 
581
                widget = lookup_widget(ui_widgets.prefs_dialog, "check_save_win_pos");
 
582
                prefs.save_winpos = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(widget));
 
583
 
 
584
                widget = lookup_widget(ui_widgets.prefs_dialog, "check_plugins");
 
585
                prefs.load_plugins = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(widget));
 
586
 
 
587
                widget = lookup_widget(ui_widgets.prefs_dialog, "check_ask_for_quit");
 
588
                prefs.confirm_exit = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(widget));
 
589
 
 
590
                /* behaviour */
 
591
                widget = lookup_widget(ui_widgets.prefs_dialog, "check_beep");
 
592
                prefs.beep_on_errors = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(widget));
 
593
 
 
594
                widget = lookup_widget(ui_widgets.prefs_dialog, "check_ask_suppress_search_dialogs");
 
595
                prefs.suppress_search_dialogs = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(widget));
 
596
 
 
597
                widget = lookup_widget(ui_widgets.prefs_dialog, "check_switch_pages");
 
598
                prefs.switch_msgwin_pages = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(widget));
 
599
 
 
600
                widget = lookup_widget(ui_widgets.prefs_dialog, "check_suppress_status_msgs");
 
601
                prefs.suppress_status_messages = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(widget));
 
602
 
 
603
                widget = lookup_widget(ui_widgets.prefs_dialog, "check_search_use_current_word");
 
604
                prefs.search_use_current_word = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(widget));
 
605
 
 
606
                widget = lookup_widget(ui_widgets.prefs_dialog, "check_auto_focus");
 
607
                prefs.auto_focus = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(widget));
 
608
 
 
609
                widget = lookup_widget(ui_widgets.prefs_dialog, "entry_contextaction");
 
610
                g_free(prefs.context_action_cmd);
 
611
                prefs.context_action_cmd = g_strdup(gtk_entry_get_text(GTK_ENTRY(widget)));
 
612
 
 
613
                widget = lookup_widget(ui_widgets.prefs_dialog, "startup_path_entry");
 
614
                g_free(prefs.default_open_path);
 
615
                prefs.default_open_path = g_strdup(gtk_entry_get_text(GTK_ENTRY(widget)));
 
616
 
 
617
                project_apply_prefs();  /* project file path */
 
618
 
 
619
 
 
620
                /* Interface settings */
 
621
                widget = lookup_widget(ui_widgets.prefs_dialog, "check_list_symbol");
 
622
                prefs.sidebar_symbol_visible = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(widget));
 
623
 
 
624
                widget = lookup_widget(ui_widgets.prefs_dialog, "check_list_openfiles");
 
625
                prefs.sidebar_openfiles_visible = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(widget));
 
626
 
 
627
                widget = lookup_widget(ui_widgets.prefs_dialog, "check_list_openfiles_fullpath");
 
628
                prefs.sidebar_openfiles_fullpath = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(widget));
 
629
 
 
630
                widget = lookup_widget(ui_widgets.prefs_dialog, "radio_long_line_line");
 
631
                if (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(widget))) editor_prefs.long_line_type = 0;
403
632
                else
404
633
                {
405
 
                        widget = lookup_widget(app->prefs_dialog, "radio_long_line_background");
406
 
                        if (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(widget))) app->long_line_type = 1;
 
634
                        widget = lookup_widget(ui_widgets.prefs_dialog, "radio_long_line_background");
 
635
                        if (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(widget))) editor_prefs.long_line_type = 1;
407
636
                        else
408
 
                        {       // now only the disabled radio remains, so disable it
409
 
                                app->long_line_type = 2;
 
637
                        {       /* now only the disabled radio remains, so disable it */
 
638
                                editor_prefs.long_line_type = 2;
410
639
                        }
411
640
                }
412
 
                if (app->long_line_column == 0) app->long_line_type = 2;
413
 
 
414
 
                widget = lookup_widget(app->prefs_dialog, "combo_tab_editor");
415
 
                app->tab_pos_editor = gtk_combo_box_get_active(GTK_COMBO_BOX(widget));
416
 
 
417
 
                widget = lookup_widget(app->prefs_dialog, "combo_tab_msgwin");
418
 
                app->tab_pos_msgwin = gtk_combo_box_get_active(GTK_COMBO_BOX(widget));
419
 
 
420
 
                widget = lookup_widget(app->prefs_dialog, "combo_tab_sidebar");
421
 
                app->tab_pos_sidebar = gtk_combo_box_get_active(GTK_COMBO_BOX(widget));
422
 
 
423
 
 
424
 
                // Toolbar settings
425
 
                widget = lookup_widget(app->prefs_dialog, "check_toolbar_show");
426
 
                app->toolbar_visible = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(widget));
427
 
 
428
 
                widget = lookup_widget(app->prefs_dialog, "check_toolbar_search");
429
 
                app->pref_toolbar_show_search = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(widget));
430
 
 
431
 
                widget = lookup_widget(app->prefs_dialog, "check_toolbar_goto");
432
 
                app->pref_toolbar_show_goto = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(widget));
433
 
 
434
 
                widget = lookup_widget(app->prefs_dialog, "check_toolbar_zoom");
435
 
                app->pref_toolbar_show_zoom = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(widget));
436
 
 
437
 
                widget = lookup_widget(app->prefs_dialog, "check_toolbar_undo");
438
 
                app->pref_toolbar_show_undo = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(widget));
439
 
 
440
 
                widget = lookup_widget(app->prefs_dialog, "check_toolbar_compile");
441
 
                app->pref_toolbar_show_compile = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(widget));
442
 
 
443
 
                widget = lookup_widget(app->prefs_dialog, "check_toolbar_colour");
444
 
                app->pref_toolbar_show_colour = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(widget));
445
 
 
446
 
                widget = lookup_widget(app->prefs_dialog, "check_toolbar_fileops");
447
 
                app->pref_toolbar_show_fileops = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(widget));
448
 
 
449
 
                widget = lookup_widget(app->prefs_dialog, "radio_toolbar_imagetext");
450
 
                if (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(widget))) app->toolbar_icon_style = 2;
 
641
                if (editor_prefs.long_line_column == 0) editor_prefs.long_line_type = 2;
 
642
 
 
643
                widget = lookup_widget(ui_widgets.prefs_dialog, "check_show_notebook_tabs");
 
644
                prefs.show_notebook_tabs = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(widget));
 
645
 
 
646
                widget = lookup_widget(ui_widgets.prefs_dialog, "check_show_tab_cross");
 
647
                prefs.show_tab_cross = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(widget));
 
648
 
 
649
                widget = lookup_widget(ui_widgets.prefs_dialog, "combo_tab_editor");
 
650
                prefs.tab_pos_editor = gtk_combo_box_get_active(GTK_COMBO_BOX(widget));
 
651
 
 
652
                widget = lookup_widget(ui_widgets.prefs_dialog, "combo_tab_msgwin");
 
653
                prefs.tab_pos_msgwin = gtk_combo_box_get_active(GTK_COMBO_BOX(widget));
 
654
 
 
655
                widget = lookup_widget(ui_widgets.prefs_dialog, "combo_tab_sidebar");
 
656
                prefs.tab_pos_sidebar = gtk_combo_box_get_active(GTK_COMBO_BOX(widget));
 
657
 
 
658
                widget = lookup_widget(ui_widgets.prefs_dialog, "check_statusbar_visible");
 
659
                prefs.statusbar_visible = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(widget));
 
660
 
 
661
 
 
662
                /* Toolbar settings */
 
663
                widget = lookup_widget(ui_widgets.prefs_dialog, "check_toolbar_show");
 
664
                prefs.toolbar_visible = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(widget));
 
665
 
 
666
                widget = lookup_widget(ui_widgets.prefs_dialog, "check_toolbar_search");
 
667
                prefs.toolbar_show_search = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(widget));
 
668
 
 
669
                widget = lookup_widget(ui_widgets.prefs_dialog, "check_toolbar_goto");
 
670
                prefs.toolbar_show_goto = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(widget));
 
671
 
 
672
                widget = lookup_widget(ui_widgets.prefs_dialog, "check_toolbar_zoom");
 
673
                prefs.toolbar_show_zoom = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(widget));
 
674
 
 
675
                widget = lookup_widget(ui_widgets.prefs_dialog, "check_toolbar_indent");
 
676
                prefs.toolbar_show_indent = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(widget));
 
677
 
 
678
                widget = lookup_widget(ui_widgets.prefs_dialog, "check_toolbar_undo");
 
679
                prefs.toolbar_show_undo = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(widget));
 
680
 
 
681
                widget = lookup_widget(ui_widgets.prefs_dialog, "check_toolbar_navigation");
 
682
                prefs.toolbar_show_navigation = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(widget));
 
683
 
 
684
                widget = lookup_widget(ui_widgets.prefs_dialog, "check_toolbar_compile");
 
685
                prefs.toolbar_show_compile = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(widget));
 
686
 
 
687
                widget = lookup_widget(ui_widgets.prefs_dialog, "check_toolbar_colour");
 
688
                prefs.toolbar_show_colour = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(widget));
 
689
 
 
690
                widget = lookup_widget(ui_widgets.prefs_dialog, "check_toolbar_fileops");
 
691
                prefs.toolbar_show_fileops = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(widget));
 
692
 
 
693
                widget = lookup_widget(ui_widgets.prefs_dialog, "check_toolbar_quit");
 
694
                prefs.toolbar_show_quit = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(widget));
 
695
 
 
696
                widget = lookup_widget(ui_widgets.prefs_dialog, "radio_toolbar_imagetext");
 
697
                if (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(widget))) prefs.toolbar_icon_style = 2;
451
698
                else
452
699
                {
453
 
                        widget = lookup_widget(app->prefs_dialog, "radio_toolbar_image");
 
700
                        widget = lookup_widget(ui_widgets.prefs_dialog, "radio_toolbar_image");
454
701
                        if (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(widget)))
455
 
                                app->toolbar_icon_style = 0;
 
702
                                prefs.toolbar_icon_style = 0;
456
703
                        else
457
 
                                // now only the text only radio remains, so set text only
458
 
                                app->toolbar_icon_style = 1;
459
 
                }
460
 
 
461
 
 
462
 
                widget = lookup_widget(app->prefs_dialog, "radio_toolbar_large");
463
 
                if (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(widget)))
464
 
                        app->toolbar_icon_size = GTK_ICON_SIZE_LARGE_TOOLBAR;
465
 
                else
466
 
                        app->toolbar_icon_size = GTK_ICON_SIZE_SMALL_TOOLBAR;
467
 
 
468
 
 
469
 
                // Editor settings
470
 
                widget = lookup_widget(app->prefs_dialog, "spin_tab_width");
471
 
                app->pref_editor_tab_width = gtk_spin_button_get_value_as_int(GTK_SPIN_BUTTON(widget));
472
 
 
473
 
                widget = lookup_widget(app->prefs_dialog, "combo_encoding");
474
 
                app->pref_editor_default_encoding = gtk_combo_box_get_active(GTK_COMBO_BOX(widget));
475
 
 
476
 
                widget = lookup_widget(app->prefs_dialog, "check_trailing_spaces");
477
 
                app->pref_editor_trail_space = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(widget));
478
 
 
479
 
                widget = lookup_widget(app->prefs_dialog, "check_new_line");
480
 
                app->pref_editor_new_line = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(widget));
481
 
 
482
 
                widget = lookup_widget(app->prefs_dialog, "check_replace_tabs");
483
 
                app->pref_editor_replace_tabs = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(widget));
484
 
 
485
 
                widget = lookup_widget(app->prefs_dialog, "spin_long_line");
486
 
                app->long_line_column = gtk_spin_button_get_value_as_int(GTK_SPIN_BUTTON(widget));
487
 
 
488
 
                widget = lookup_widget(app->prefs_dialog, "check_folding");
489
 
                app->pref_editor_folding = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(widget));
 
704
                                /* now only the text only radio remains, so set text only */
 
705
                                prefs.toolbar_icon_style = 1;
 
706
                }
 
707
 
 
708
 
 
709
                widget = lookup_widget(ui_widgets.prefs_dialog, "radio_toolbar_large");
 
710
                if (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(widget)))
 
711
                        prefs.toolbar_icon_size = GTK_ICON_SIZE_LARGE_TOOLBAR;
 
712
                else
 
713
                        prefs.toolbar_icon_size = GTK_ICON_SIZE_SMALL_TOOLBAR;
 
714
 
 
715
 
 
716
                /* Files settings */
 
717
                widget = lookup_widget(ui_widgets.prefs_dialog, "radio_tab_right");
 
718
                prefs.tab_order_ltr = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(widget));
 
719
 
 
720
 
 
721
                /* Editor settings */
 
722
                widget = lookup_widget(ui_widgets.prefs_dialog, "spin_tab_width");
 
723
                editor_prefs.tab_width = gtk_spin_button_get_value_as_int(GTK_SPIN_BUTTON(widget));
 
724
 
 
725
                widget = lookup_widget(ui_widgets.prefs_dialog, "combo_new_encoding");
 
726
                prefs.default_new_encoding = gtk_combo_box_get_active(GTK_COMBO_BOX(widget));
 
727
 
 
728
                widget = lookup_widget(ui_widgets.prefs_dialog, "check_open_encoding");
 
729
                if (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(widget)))
 
730
                {
 
731
                        widget = lookup_widget(ui_widgets.prefs_dialog, "combo_open_encoding");
 
732
                        prefs.default_open_encoding = gtk_combo_box_get_active(GTK_COMBO_BOX(widget));
 
733
                }
 
734
                else
 
735
                        prefs.default_open_encoding = -1;
 
736
 
 
737
                widget = lookup_widget(ui_widgets.prefs_dialog, "check_trailing_spaces");
 
738
                prefs.strip_trailing_spaces = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(widget));
 
739
 
 
740
                widget = lookup_widget(ui_widgets.prefs_dialog, "check_new_line");
 
741
                prefs.final_new_line = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(widget));
 
742
 
 
743
                widget = lookup_widget(ui_widgets.prefs_dialog, "check_replace_tabs");
 
744
                prefs.replace_tabs = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(widget));
 
745
 
 
746
                widget = lookup_widget(ui_widgets.prefs_dialog, "spin_long_line");
 
747
                editor_prefs.long_line_column = gtk_spin_button_get_value_as_int(GTK_SPIN_BUTTON(widget));
 
748
 
 
749
                widget = lookup_widget(ui_widgets.prefs_dialog, "check_folding");
 
750
                editor_prefs.folding = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(widget));
490
751
                ui_update_fold_items();
491
752
 
492
 
                widget = lookup_widget(app->prefs_dialog, "check_indent");
493
 
                app->pref_editor_show_indent_guide = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(widget));
494
 
 
495
 
                widget = lookup_widget(app->prefs_dialog, "check_white_space");
496
 
                app->pref_editor_show_white_space = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(widget));
497
 
 
498
 
                widget = lookup_widget(app->prefs_dialog, "check_line_end");
499
 
                app->pref_editor_show_line_endings = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(widget));
500
 
 
501
 
                widget = lookup_widget(app->prefs_dialog, "check_auto_indent");
502
 
                app->pref_editor_use_auto_indention = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(widget));
503
 
 
504
 
                widget = lookup_widget(app->prefs_dialog, "check_line_wrapping");
505
 
                app->pref_editor_line_breaking = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(widget));
506
 
 
507
 
                widget = lookup_widget(app->prefs_dialog, "check_auto_complete");
508
 
                app->pref_editor_auto_complete_constructs = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(widget));
509
 
 
510
 
                widget = lookup_widget(app->prefs_dialog, "check_xmltag");
511
 
                app->pref_editor_auto_close_xml_tags = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(widget));
512
 
 
513
 
                widget = lookup_widget(app->prefs_dialog, "check_indicators");
514
 
                app->pref_editor_use_indicators = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(widget));
515
 
 
516
 
                widget = lookup_widget(app->prefs_dialog, "spin_autocheight");
517
 
                app->autocompletion_max_height = gtk_spin_button_get_value_as_int(GTK_SPIN_BUTTON(widget));
518
 
 
519
 
 
520
 
                // Tools Settings
521
 
                widget = lookup_widget(app->prefs_dialog, "entry_com_make");
522
 
                g_free(app->tools_make_cmd);
523
 
                app->tools_make_cmd = g_strdup(gtk_entry_get_text(GTK_ENTRY(widget)));
524
 
 
525
 
                widget = lookup_widget(app->prefs_dialog, "entry_com_term");
526
 
                g_free(app->tools_term_cmd);
527
 
                app->tools_term_cmd = g_strdup(gtk_entry_get_text(GTK_ENTRY(widget)));
528
 
 
529
 
                widget = lookup_widget(app->prefs_dialog, "entry_browser");
530
 
                g_free(app->tools_browser_cmd);
531
 
                app->tools_browser_cmd = g_strdup(gtk_entry_get_text(GTK_ENTRY(widget)));
532
 
 
533
 
                widget = lookup_widget(app->prefs_dialog, "entry_print");
534
 
                g_free(app->tools_print_cmd);
535
 
                app->tools_print_cmd = g_strdup(gtk_entry_get_text(GTK_ENTRY(widget)));
536
 
 
537
 
                widget = lookup_widget(app->prefs_dialog, "entry_grep");
538
 
                g_free(app->tools_grep_cmd);
539
 
                app->tools_grep_cmd = g_strdup(gtk_entry_get_text(GTK_ENTRY(widget)));
540
 
 
541
 
 
542
 
                // Template settings
543
 
                widget = lookup_widget(app->prefs_dialog, "entry_template_developer");
544
 
                g_free(app->pref_template_developer);
545
 
                app->pref_template_developer = g_strdup(gtk_entry_get_text(GTK_ENTRY(widget)));
546
 
 
547
 
                widget = lookup_widget(app->prefs_dialog, "entry_template_company");
548
 
                g_free(app->pref_template_company);
549
 
                app->pref_template_company = g_strdup(gtk_entry_get_text(GTK_ENTRY(widget)));
550
 
 
551
 
                widget = lookup_widget(app->prefs_dialog, "entry_template_mail");
552
 
                g_free(app->pref_template_mail);
553
 
                app->pref_template_mail = g_strdup(gtk_entry_get_text(GTK_ENTRY(widget)));
554
 
 
555
 
                widget = lookup_widget(app->prefs_dialog, "entry_template_initial");
556
 
                g_free(app->pref_template_initial);
557
 
                app->pref_template_initial = g_strdup(gtk_entry_get_text(GTK_ENTRY(widget)));
558
 
 
559
 
                widget = lookup_widget(app->prefs_dialog, "entry_template_version");
560
 
                g_free(app->pref_template_version);
561
 
                app->pref_template_version = g_strdup(gtk_entry_get_text(GTK_ENTRY(widget)));
562
 
 
563
 
 
564
 
                // Keybindings
 
753
                widget = lookup_widget(ui_widgets.prefs_dialog, "check_unfold_children");
 
754
                editor_prefs.unfold_all_children = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(widget));
 
755
 
 
756
                widget = lookup_widget(ui_widgets.prefs_dialog, "check_indent");
 
757
                editor_prefs.show_indent_guide = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(widget));
 
758
 
 
759
                widget = lookup_widget(ui_widgets.prefs_dialog, "check_white_space");
 
760
                editor_prefs.show_white_space = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(widget));
 
761
 
 
762
                widget = lookup_widget(ui_widgets.prefs_dialog, "check_line_end");
 
763
                editor_prefs.show_line_endings = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(widget));
 
764
 
 
765
                widget = lookup_widget(ui_widgets.prefs_dialog, "combo_auto_indent_mode");
 
766
                editor_prefs.indent_mode = gtk_combo_box_get_active(GTK_COMBO_BOX(widget));
 
767
 
 
768
                widget = lookup_widget(ui_widgets.prefs_dialog, "check_line_wrapping");
 
769
                editor_prefs.line_wrapping = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(widget));
 
770
 
 
771
                widget = lookup_widget(ui_widgets.prefs_dialog, "check_complete_snippets");
 
772
                editor_prefs.complete_snippets = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(widget));
 
773
 
 
774
                widget = lookup_widget(ui_widgets.prefs_dialog, "check_xmltag");
 
775
                editor_prefs.auto_close_xml_tags = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(widget));
 
776
 
 
777
                widget = lookup_widget(ui_widgets.prefs_dialog, "check_indicators");
 
778
                editor_prefs.use_indicators = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(widget));
 
779
 
 
780
                widget = lookup_widget(ui_widgets.prefs_dialog, "check_disable_dnd");
 
781
                editor_prefs.disable_dnd = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(widget));
 
782
 
 
783
                widget = lookup_widget(ui_widgets.prefs_dialog, "check_smart_home");
 
784
                editor_prefs.smart_home_key = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(widget));
 
785
 
 
786
                widget = lookup_widget(ui_widgets.prefs_dialog, "check_newline_strip");
 
787
                editor_prefs.newline_strip = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(widget));
 
788
 
 
789
                widget = lookup_widget(ui_widgets.prefs_dialog, "radio_indent_tabs");
 
790
                {
 
791
                        gboolean use_tabs = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(widget));
 
792
 
 
793
                        /* override each document setting only if the default has changed */
 
794
                        if (editor_prefs.use_tabs != use_tabs)
 
795
                        {
 
796
                                editor_prefs.use_tabs = use_tabs;
 
797
                                for (i = 0; i < doc_array->len; i++)
 
798
                                {
 
799
                                        if (doc_list[i].is_valid)
 
800
                                                document_set_use_tabs(i, editor_prefs.use_tabs);
 
801
                                }
 
802
                        }
 
803
                }
 
804
 
 
805
                widget = lookup_widget(ui_widgets.prefs_dialog, "check_detect_indent");
 
806
                editor_prefs.detect_tab_mode = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(widget));
 
807
 
 
808
                widget = lookup_widget(ui_widgets.prefs_dialog, "check_symbol_auto_completion");
 
809
                editor_prefs.auto_complete_symbols = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(widget));
 
810
 
 
811
                widget = lookup_widget(ui_widgets.prefs_dialog, "spin_symbol_complete_chars");
 
812
                editor_prefs.symbolcompletion_min_chars = gtk_spin_button_get_value_as_int(GTK_SPIN_BUTTON(widget));
 
813
 
 
814
                widget = lookup_widget(ui_widgets.prefs_dialog, "spin_symbollistheight");
 
815
                editor_prefs.symbolcompletion_max_height = gtk_spin_button_get_value_as_int(GTK_SPIN_BUTTON(widget));
 
816
 
 
817
 
 
818
                /* Tools Settings */
 
819
                widget = lookup_widget(ui_widgets.prefs_dialog, "entry_com_make");
 
820
                g_free(prefs.tools_make_cmd);
 
821
                prefs.tools_make_cmd = g_strdup(gtk_entry_get_text(GTK_ENTRY(widget)));
 
822
 
 
823
                widget = lookup_widget(ui_widgets.prefs_dialog, "entry_com_term");
 
824
                g_free(prefs.tools_term_cmd);
 
825
                prefs.tools_term_cmd = g_strdup(gtk_entry_get_text(GTK_ENTRY(widget)));
 
826
 
 
827
                widget = lookup_widget(ui_widgets.prefs_dialog, "entry_browser");
 
828
                g_free(prefs.tools_browser_cmd);
 
829
                prefs.tools_browser_cmd = g_strdup(gtk_entry_get_text(GTK_ENTRY(widget)));
 
830
 
 
831
                widget = lookup_widget(ui_widgets.prefs_dialog, "entry_grep");
 
832
                g_free(prefs.tools_grep_cmd);
 
833
                prefs.tools_grep_cmd = g_strdup(gtk_entry_get_text(GTK_ENTRY(widget)));
 
834
 
 
835
 
 
836
                /* Template settings */
 
837
                widget = lookup_widget(ui_widgets.prefs_dialog, "entry_template_developer");
 
838
                g_free(prefs.template_developer);
 
839
                prefs.template_developer = g_strdup(gtk_entry_get_text(GTK_ENTRY(widget)));
 
840
 
 
841
                widget = lookup_widget(ui_widgets.prefs_dialog, "entry_template_company");
 
842
                g_free(prefs.template_company);
 
843
                prefs.template_company = g_strdup(gtk_entry_get_text(GTK_ENTRY(widget)));
 
844
 
 
845
                widget = lookup_widget(ui_widgets.prefs_dialog, "entry_template_mail");
 
846
                g_free(prefs.template_mail);
 
847
                prefs.template_mail = g_strdup(gtk_entry_get_text(GTK_ENTRY(widget)));
 
848
 
 
849
                widget = lookup_widget(ui_widgets.prefs_dialog, "entry_template_initial");
 
850
                g_free(prefs.template_initial);
 
851
                prefs.template_initial = g_strdup(gtk_entry_get_text(GTK_ENTRY(widget)));
 
852
 
 
853
                widget = lookup_widget(ui_widgets.prefs_dialog, "entry_template_version");
 
854
                g_free(prefs.template_version);
 
855
                prefs.template_version = g_strdup(gtk_entry_get_text(GTK_ENTRY(widget)));
 
856
 
 
857
 
 
858
                /* Keybindings */
565
859
                if (edited) keybindings_write_to_file();
566
860
 
 
861
 
 
862
                /* Printing */
 
863
                widget = lookup_widget(ui_widgets.prefs_dialog, "radio_print_gtk");
 
864
                printing_prefs.use_gtk_printing = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(widget));
 
865
 
 
866
                widget = lookup_widget(ui_widgets.prefs_dialog, "entry_print_external_cmd");
 
867
                g_free(printing_prefs.external_print_cmd);
 
868
                printing_prefs.external_print_cmd = g_strdup(gtk_entry_get_text(GTK_ENTRY(widget)));
 
869
 
 
870
                widget = lookup_widget(ui_widgets.prefs_dialog, "check_print_linenumbers");
 
871
                printing_prefs.print_line_numbers = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(widget));
 
872
 
 
873
                widget = lookup_widget(ui_widgets.prefs_dialog, "check_print_pagenumbers");
 
874
                printing_prefs.print_page_numbers = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(widget));
 
875
 
 
876
                widget = lookup_widget(ui_widgets.prefs_dialog, "check_print_pageheader");
 
877
                printing_prefs.print_page_header = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(widget));
 
878
 
 
879
                widget = lookup_widget(ui_widgets.prefs_dialog, "check_print_basename");
 
880
                printing_prefs.page_header_basename = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(widget));
 
881
 
 
882
                widget = lookup_widget(ui_widgets.prefs_dialog, "entry_print_dateformat");
 
883
                g_free(printing_prefs.page_header_datefmt);
 
884
                printing_prefs.page_header_datefmt = g_strdup(gtk_entry_get_text(GTK_ENTRY(widget)));
 
885
 
 
886
 
567
887
#ifdef HAVE_VTE
568
 
                widget = lookup_widget(app->prefs_dialog, "check_vte");
 
888
                widget = lookup_widget(ui_widgets.prefs_dialog, "check_vte");
569
889
                vte_info.load_vte = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(widget));
570
890
 
571
 
                // VTE settings
 
891
                /* VTE settings */
572
892
                if (vte_info.have_vte)
573
893
                {
574
 
                        widget = lookup_widget(app->prefs_dialog, "spin_scrollback");
 
894
                        widget = lookup_widget(ui_widgets.prefs_dialog, "spin_scrollback");
575
895
                        vc->scrollback_lines = gtk_spin_button_get_value_as_int(GTK_SPIN_BUTTON(widget));
576
896
 
577
 
                        widget = lookup_widget(app->prefs_dialog, "entry_emulation");
 
897
                        widget = lookup_widget(ui_widgets.prefs_dialog, "entry_emulation");
578
898
                        g_free(vc->emulation);
579
899
                        vc->emulation = g_strdup(gtk_entry_get_text(GTK_ENTRY(widget)));
580
900
 
581
 
                        widget = lookup_widget(app->prefs_dialog, "entry_shell");
 
901
                        widget = lookup_widget(ui_widgets.prefs_dialog, "entry_shell");
582
902
                        g_free(vc->shell);
583
903
                        vc->shell = g_strdup(gtk_entry_get_text(GTK_ENTRY(widget)));
584
904
 
585
 
                        widget = lookup_widget(app->prefs_dialog, "check_scroll_key");
 
905
                        widget = lookup_widget(ui_widgets.prefs_dialog, "check_scroll_key");
586
906
                        vc->scroll_on_key = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(widget));
587
907
 
588
 
                        widget = lookup_widget(app->prefs_dialog, "check_scroll_out");
 
908
                        widget = lookup_widget(ui_widgets.prefs_dialog, "check_scroll_out");
589
909
                        vc->scroll_on_out = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(widget));
590
910
 
591
 
                        widget = lookup_widget(app->prefs_dialog, "check_ignore_menu_key");
 
911
                        widget = lookup_widget(ui_widgets.prefs_dialog, "check_enable_bash_keys");
 
912
                        vc->enable_bash_keys = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(widget));
 
913
 
 
914
                        widget = lookup_widget(ui_widgets.prefs_dialog, "check_ignore_menu_key");
592
915
                        vc->ignore_menu_bar_accel = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(widget));
593
916
 
594
 
                        widget = lookup_widget(app->prefs_dialog, "check_follow_path");
 
917
                        widget = lookup_widget(ui_widgets.prefs_dialog, "check_follow_path");
595
918
                        vc->follow_path = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(widget));
596
919
 
 
920
                        widget = lookup_widget(ui_widgets.prefs_dialog, "check_run_in_vte");
 
921
                        vc->run_in_vte = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(widget));
 
922
 
 
923
                        widget = lookup_widget(ui_widgets.prefs_dialog, "check_skip_script");
 
924
                        vc->skip_run_script = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(widget));
 
925
 
597
926
                        vte_apply_user_settings();
598
927
                }
599
928
#endif
600
929
 
601
 
                // apply the changes made
 
930
                /* apply the changes made */
 
931
                ui_statusbar_showhide(prefs.statusbar_visible);
 
932
                treeviews_openfiles_update_all(); /* to update if full path setting has changed */
602
933
                ui_update_toolbar_items();
603
 
                ui_update_toolbar_icons(app->toolbar_icon_size);
604
 
                gtk_toolbar_set_style(GTK_TOOLBAR(app->toolbar), app->toolbar_icon_style);
605
 
                ui_treeviews_show_hide(FALSE);
606
 
 
607
 
                gtk_notebook_set_tab_pos(GTK_NOTEBOOK(app->notebook), app->tab_pos_editor);
608
 
                gtk_notebook_set_tab_pos(GTK_NOTEBOOK(msgwindow.notebook), app->tab_pos_msgwin);
609
 
                gtk_notebook_set_tab_pos(GTK_NOTEBOOK(app->treeview_notebook), app->tab_pos_sidebar);
610
 
 
611
 
                // re-colourise all open documents, if tab width or long line settings have changed
612
 
                for (i = 0; i < GEANY_MAX_OPEN_FILES; i++)
 
934
                ui_update_toolbar_icons(prefs.toolbar_icon_size);
 
935
                gtk_toolbar_set_style(GTK_TOOLBAR(app->toolbar), prefs.toolbar_icon_style);
 
936
                ui_sidebar_show_hide();
 
937
                gtk_notebook_set_show_tabs(GTK_NOTEBOOK(app->notebook), prefs.show_notebook_tabs);
 
938
 
 
939
                gtk_notebook_set_tab_pos(GTK_NOTEBOOK(app->notebook), prefs.tab_pos_editor);
 
940
                gtk_notebook_set_tab_pos(GTK_NOTEBOOK(msgwindow.notebook), prefs.tab_pos_msgwin);
 
941
                gtk_notebook_set_tab_pos(GTK_NOTEBOOK(app->treeview_notebook), prefs.tab_pos_sidebar);
 
942
 
 
943
                /* re-colourise all open documents, if tab width or long line settings have changed */
 
944
                for (i = 0; i < doc_array->len; i++)
613
945
                {
614
946
                        if (doc_list[i].is_valid)
615
947
                        {
616
 
                                document_apply_update_prefs(doc_list[i].sci);
617
 
                                if (! app->pref_editor_folding) document_unfold_all(i);
 
948
                                document_apply_update_prefs(i);
 
949
                                if (! editor_prefs.folding)
 
950
                                        document_unfold_all(i);
618
951
                        }
619
952
                }
 
953
                ui_document_show_hide(-1);
620
954
 
621
 
                // store all settings
 
955
                /* store all settings */
622
956
                configuration_save();
623
957
        }
624
 
        gtk_list_store_clear(store);
625
 
        gtk_widget_hide(GTK_WIDGET(dialog));
626
 
}
627
 
 
628
 
 
629
 
gboolean on_prefs_delete_event(GtkWidget *widget, GdkEvent *event, gpointer user_data)
630
 
{
631
 
        gtk_widget_hide(widget);
632
 
 
633
 
        return TRUE;
 
958
 
 
959
        if (response != GTK_RESPONSE_APPLY)
 
960
        {
 
961
                gtk_tree_store_clear(store);
 
962
                gtk_widget_hide(GTK_WIDGET(dialog));
 
963
        }
634
964
}
635
965
 
636
966
 
643
973
                case 1:
644
974
                {
645
975
                        gtk_color_button_get_color(widget, &color);
646
 
                        app->long_line_color = utils_get_hex_from_color(&color);
 
976
                        editor_prefs.long_line_color = utils_get_hex_from_color(&color);
647
977
                        break;
648
978
                }
649
979
#ifdef HAVE_VTE
669
999
void on_prefs_font_choosed(GtkFontButton *widget, gpointer user_data)
670
1000
{
671
1001
        const gchar *fontbtn = gtk_font_button_get_font_name(widget);
672
 
        gint i;
 
1002
        guint i;
673
1003
 
674
1004
        switch (GPOINTER_TO_INT(user_data))
675
1005
        {
676
1006
                case 1:
677
1007
                {
678
 
                        if (strcmp(fontbtn, app->tagbar_font) == 0) break;
679
 
                        g_free(app->tagbar_font);
680
 
                        app->tagbar_font = g_strdup(fontbtn);
681
 
                        for (i = 0; i < GEANY_MAX_OPEN_FILES; i++)
 
1008
                        if (strcmp(fontbtn, prefs.tagbar_font) == 0) break;
 
1009
                        g_free(prefs.tagbar_font);
 
1010
                        prefs.tagbar_font = g_strdup(fontbtn);
 
1011
                        for (i = 0; i < doc_array->len; i++)
682
1012
                        {
683
1013
                                if (doc_list[i].is_valid && GTK_IS_WIDGET(doc_list[i].tag_tree))
684
 
                                        gtk_widget_modify_font(doc_list[i].tag_tree,
685
 
                                                pango_font_description_from_string(app->tagbar_font));
 
1014
                                        ui_widget_modify_font_from_string(doc_list[i].tag_tree,
 
1015
                                                prefs.tagbar_font);
686
1016
                        }
687
 
                        if (GTK_IS_WIDGET(app->default_tag_tree))
688
 
                                gtk_widget_modify_font(app->default_tag_tree,
689
 
                                        pango_font_description_from_string(app->tagbar_font));
690
 
                        gtk_widget_modify_font(lookup_widget(app->window, "entry1"),
691
 
                                pango_font_description_from_string(app->tagbar_font));
 
1017
                        if (GTK_IS_WIDGET(tv.default_tag_tree))
 
1018
                                ui_widget_modify_font_from_string(tv.default_tag_tree, prefs.tagbar_font);
 
1019
                        ui_widget_modify_font_from_string(lookup_widget(app->window, "entry1"),
 
1020
                                prefs.tagbar_font);
692
1021
                        break;
693
1022
                }
694
1023
                case 2:
695
1024
                {
696
 
                        if (strcmp(fontbtn, app->msgwin_font) == 0) break;
697
 
                        g_free(app->msgwin_font);
698
 
                        app->msgwin_font = g_strdup(fontbtn);
699
 
                        gtk_widget_modify_font(msgwindow.tree_compiler,
700
 
                                pango_font_description_from_string(app->msgwin_font));
701
 
                        gtk_widget_modify_font(msgwindow.tree_msg,
702
 
                                pango_font_description_from_string(app->msgwin_font));
703
 
                        gtk_widget_modify_font(msgwindow.tree_status,
704
 
                                pango_font_description_from_string(app->msgwin_font));
 
1025
                        if (strcmp(fontbtn, prefs.msgwin_font) == 0) break;
 
1026
                        g_free(prefs.msgwin_font);
 
1027
                        prefs.msgwin_font = g_strdup(fontbtn);
 
1028
                        ui_widget_modify_font_from_string(msgwindow.tree_compiler, prefs.msgwin_font);
 
1029
                        ui_widget_modify_font_from_string(msgwindow.tree_msg, prefs.msgwin_font);
 
1030
                        ui_widget_modify_font_from_string(msgwindow.tree_status, prefs.msgwin_font);
705
1031
                        break;
706
1032
                }
707
1033
                case 3:
712
1038
#ifdef HAVE_VTE
713
1039
                case 4:
714
1040
                {
715
 
                        // VTE settings
 
1041
                        /* VTE settings */
716
1042
                        if (strcmp(fontbtn, vc->font) == 0) break;
717
1043
                        g_free(vc->font);
718
1044
                        vc->font = g_strdup(gtk_font_button_get_font_name(widget));
724
1050
}
725
1051
 
726
1052
 
727
 
 
728
 
static gboolean on_prefs_tree_view_button_press_event(
 
1053
static gboolean on_tree_view_button_press_event(
729
1054
                                                GtkWidget *widget, GdkEventButton *event, gpointer user_data)
730
1055
{
731
 
        GtkTreeIter iter;
732
1056
        GtkTreeModel *model;
733
1057
        GtkTreeSelection *selection;
734
1058
        gchar *name;
735
1059
 
736
 
        // discard click events in the tree unless it is a double click
737
 
        if (widget == (GtkWidget*)tree && event->type != GDK_2BUTTON_PRESS) return FALSE;
 
1060
        /* discard click events in the tree unless it is a double click */
 
1061
        if (widget == (GtkWidget*)tree && event->type != GDK_2BUTTON_PRESS)
 
1062
                return FALSE;
738
1063
 
739
1064
        selection = gtk_tree_view_get_selection(GTK_TREE_VIEW(tree));
740
 
        if (gtk_tree_selection_get_selected(selection, &model, &iter))
 
1065
        if (gtk_tree_selection_get_selected(selection, &model, &g_iter))
741
1066
        {
742
 
                gtk_tree_model_get(model, &iter, 0, &name, -1);
 
1067
                if (gtk_tree_model_iter_has_child(model, &g_iter))
 
1068
                {       /* double click on a section to expand or collapse it */
 
1069
                        GtkTreePath *path = gtk_tree_model_get_path(model, &g_iter);
 
1070
 
 
1071
                        if (gtk_tree_view_row_expanded(tree, path))
 
1072
                                gtk_tree_view_collapse_row(tree, path);
 
1073
                        else
 
1074
                                gtk_tree_view_expand_row(tree, path, FALSE);
 
1075
 
 
1076
                        gtk_tree_path_free(path);
 
1077
                        return TRUE;
 
1078
                }
 
1079
 
 
1080
                gtk_tree_model_get(model, &g_iter, KB_TREE_ACTION, &name, -1);
743
1081
                if (name != NULL)
744
1082
                {
745
1083
                        GtkWidget *dialog;
746
1084
                        GtkWidget *label;
747
1085
                        gchar *str;
748
1086
 
749
 
                        dialog = gtk_dialog_new_with_buttons(_("Grab key"), GTK_WINDOW(app->prefs_dialog),
 
1087
                        dialog = gtk_dialog_new_with_buttons(_("Grab Key"), GTK_WINDOW(ui_widgets.prefs_dialog),
750
1088
                                        GTK_DIALOG_MODAL | GTK_DIALOG_DESTROY_WITH_PARENT | GTK_DIALOG_NO_SEPARATOR,
751
 
                                        GTK_STOCK_CANCEL, GTK_RESPONSE_REJECT, GTK_STOCK_OK, GTK_RESPONSE_ACCEPT, NULL);
 
1089
                                        GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL,
 
1090
                                        GTK_STOCK_OK, GTK_RESPONSE_ACCEPT, NULL);
752
1091
 
753
 
                        str = g_strdup_printf(_("Type the combination of the keys you want to use for \"%s\""), name);
 
1092
                        str = g_strdup_printf(
 
1093
                                        _("Type the combination of the keys you want to use for \"%s\""), name);
754
1094
                        label = gtk_label_new(str);
755
1095
                        gtk_misc_set_padding(GTK_MISC(label), 5, 10);
756
1096
                        gtk_container_add(GTK_CONTAINER(GTK_DIALOG(dialog)->vbox), label);
759
1099
                        gtk_misc_set_padding(GTK_MISC(dialog_label), 5, 10);
760
1100
                        gtk_container_add(GTK_CONTAINER(GTK_DIALOG(dialog)->vbox), dialog_label);
761
1101
 
762
 
                        g_signal_connect(G_OBJECT(dialog), "key-press-event", G_CALLBACK(on_keytype_dialog_response), NULL);
 
1102
                        g_signal_connect(G_OBJECT(dialog), "key-press-event",
 
1103
                                                                G_CALLBACK(on_keytype_dialog_response), NULL);
763
1104
                        g_signal_connect(G_OBJECT(dialog), "response", G_CALLBACK(on_dialog_response), NULL);
764
 
                        g_signal_connect(G_OBJECT(dialog), "close", G_CALLBACK(gtk_widget_destroy), NULL);
765
1105
 
766
 
                        // copy name to global variable to hold it, will be freed in on_dialog_response()
 
1106
                        /* copy name to global variable to hold it, will be freed in on_dialog_response() */
767
1107
                        dialog_key_name = g_strdup(name);
768
1108
 
769
1109
                        gtk_widget_show_all(dialog);
775
1115
}
776
1116
 
777
1117
 
 
1118
static KeyBinding *lookup_kb_from_iter(G_GNUC_UNUSED GtkTreeModel *model, GtkTreeIter *iter)
 
1119
{
 
1120
        guint group_idx, keybinding_idx;
 
1121
        GtkTreeIter parent;
 
1122
 
 
1123
        /* get kb index */
 
1124
        gtk_tree_model_get(GTK_TREE_MODEL(store), iter, KB_TREE_INDEX, &keybinding_idx, -1);
 
1125
 
 
1126
        /* lookup the parent to get group index */
 
1127
        gtk_tree_model_iter_parent(GTK_TREE_MODEL(store), &parent, iter);
 
1128
        gtk_tree_model_get(GTK_TREE_MODEL(store), &parent, KB_TREE_INDEX, &group_idx, -1);
 
1129
 
 
1130
        return keybindings_lookup_item(group_idx, keybinding_idx);
 
1131
}
 
1132
 
 
1133
 
778
1134
static void on_cell_edited(GtkCellRendererText *cellrenderertext, gchar *path, gchar *new_text, gpointer user_data)
779
1135
{
780
1136
        if (path != NULL && new_text != NULL)
781
1137
        {
782
 
                guint idx;
 
1138
                GtkTreeIter iter;
783
1139
                guint lkey;
784
1140
                GdkModifierType lmods;
785
 
                gchar *test;
786
 
                GtkTreeIter iter;
 
1141
                KeyBinding *kb;
787
1142
 
788
 
                // get the index of the shortcut
789
 
                idx = strtol(path, &test, 10);
790
 
                if (test == path) return;
 
1143
                gtk_tree_model_get_iter_from_string(GTK_TREE_MODEL(store), &iter, path);
 
1144
                if (gtk_tree_model_iter_has_child(GTK_TREE_MODEL(store), &iter))
 
1145
                        return; /* ignore group items */
791
1146
 
792
1147
                gtk_accelerator_parse(new_text, &lkey, &lmods);
793
1148
 
794
 
                if (find_duplicate(idx, lkey, lmods, new_text)) return;
795
 
 
796
 
                // set the values here, because of the above check, setting it in gtk_accelerator_parse would
797
 
                // return a wrong key combination if it is duplicate
798
 
                keys[idx]->key = lkey;
799
 
                keys[idx]->mods = lmods;
800
 
 
801
 
                gtk_tree_model_get_iter_from_string(GTK_TREE_MODEL(store), &iter, path);
802
 
                gtk_list_store_set(store, &iter, 1, new_text, -1);
 
1149
                kb = lookup_kb_from_iter(GTK_TREE_MODEL(store), &iter);
 
1150
 
 
1151
                if (find_duplicate(kb, lkey, lmods, new_text))
 
1152
                        return;
 
1153
 
 
1154
                /* set the values here, because of the above check, setting it in
 
1155
                 * gtk_accelerator_parse would return a wrong key combination if it is duplicate */
 
1156
                kb->key = lkey;
 
1157
                kb->mods = lmods;
 
1158
 
 
1159
                gtk_tree_store_set(store, &iter, KB_TREE_SHORTCUT, new_text, -1);
803
1160
 
804
1161
                edited = TRUE;
805
1162
        }
809
1166
static gboolean on_keytype_dialog_response(GtkWidget *dialog, GdkEventKey *event, gpointer user_data)
810
1167
{
811
1168
        gchar *str;
812
 
 
813
 
        // ignore numlock key, not necessary but nice
814
 
        if (event->state & GDK_MOD2_MASK) event->state -= GDK_MOD2_MASK;
815
 
 
816
 
        str = gtk_accelerator_name(event->keyval, event->state);
 
1169
        gint state;
 
1170
 
 
1171
    state = event->state & GEANY_KEYS_MODIFIER_MASK;
 
1172
 
 
1173
        if (event->keyval == GDK_Escape)
 
1174
                return FALSE;   /* close the dialog, don't allow escape when detecting keybindings. */
 
1175
 
 
1176
        str = gtk_accelerator_name(event->keyval, state);
817
1177
 
818
1178
        gtk_label_set_text(GTK_LABEL(dialog_label), str);
819
1179
        g_free(str);
822
1182
}
823
1183
 
824
1184
 
825
 
static void on_dialog_response(GtkWidget *dialog, gint response, gpointer user_data)
 
1185
static void on_dialog_response(GtkWidget *dialog, gint response, G_GNUC_UNUSED gpointer iter)
826
1186
{
827
1187
        if (response == GTK_RESPONSE_ACCEPT)
828
1188
        {
829
 
                GtkTreeIter iter;
830
 
                guint idx;
831
1189
                guint lkey;
832
1190
                GdkModifierType lmods;
833
 
                gchar path[3];
 
1191
                KeyBinding *kb;
834
1192
 
835
 
                for (idx = 0; idx < GEANY_MAX_KEYS; idx++)
836
 
                {
837
 
                        if (utils_strcmp(dialog_key_name, keys[idx]->label)) break;
838
 
                }
 
1193
                kb = lookup_kb_from_iter(GTK_TREE_MODEL(store), &g_iter);
839
1194
 
840
1195
                gtk_accelerator_parse(gtk_label_get_text(GTK_LABEL(dialog_label)), &lkey, &lmods);
841
1196
 
842
 
                if (find_duplicate(idx, lkey, lmods, gtk_label_get_text(GTK_LABEL(dialog_label)))) return;
843
 
 
844
 
                // set the values here, because of the above check, setting it in gtk_accelerator_parse would
845
 
                // return a wrong key combination if it is duplicate
846
 
                keys[idx]->key = lkey;
847
 
                keys[idx]->mods = lmods;
848
 
 
849
 
                // generate the path, it is exactly the index
850
 
                g_snprintf(path, 3, "%d", idx);
851
 
                gtk_tree_model_get_iter_from_string(GTK_TREE_MODEL(store), &iter, path);
852
 
                gtk_list_store_set(store, &iter, 1, gtk_label_get_text(GTK_LABEL(dialog_label)), -1);
 
1197
                if (find_duplicate(kb, lkey, lmods, gtk_label_get_text(GTK_LABEL(dialog_label))))
 
1198
                        return;
 
1199
 
 
1200
                /* set the values here, because of the above check, setting it in
 
1201
                 * gtk_accelerator_parse would return a wrong key combination if it is duplicate */
 
1202
                kb->key = lkey;
 
1203
                kb->mods = lmods;
 
1204
 
 
1205
                gtk_tree_store_set(store, &g_iter,
 
1206
                        KB_TREE_SHORTCUT, gtk_label_get_text(GTK_LABEL(dialog_label)), -1);
 
1207
 
853
1208
                g_free(dialog_key_name);
854
1209
                dialog_key_name = NULL;
855
1210
 
859
1214
}
860
1215
 
861
1216
 
862
 
// test if the entered key combination is already used
863
 
static gboolean find_duplicate(guint idx, guint key, GdkModifierType mods, const gchar *action)
864
 
{
865
 
        guint i;
866
 
 
867
 
        // allow duplicate if there is no key combination
 
1217
/* Look for a (1st-level) child of parent whose KB_TREE_INDEX matches i,
 
1218
 * setting iter to point to the node if found.
 
1219
 * If parent is NULL, look for a parent node whose KB_TREE_INDEX matches i. */
 
1220
static gboolean find_child_iter(GtkTreeIter *parent, guint i, GtkTreeIter *iter)
 
1221
{
 
1222
        GtkTreeModel *model = GTK_TREE_MODEL(store);
 
1223
        guint idx;
 
1224
 
 
1225
        /* get first child of parent */
 
1226
        if (! gtk_tree_model_iter_children(model, iter, parent))
 
1227
                return FALSE;
 
1228
 
 
1229
        while (TRUE)    /* foreach child */
 
1230
        {
 
1231
                gtk_tree_model_get(model, iter, KB_TREE_INDEX, &idx, -1);
 
1232
                if (idx == i)
 
1233
                        return TRUE;
 
1234
                if (! gtk_tree_model_iter_next(model, iter))
 
1235
                        return FALSE;   /* no more children */
 
1236
        }
 
1237
}
 
1238
 
 
1239
 
 
1240
static void clear_tree_shortcut(gsize group_id, gsize keybinding_id)
 
1241
{
 
1242
        GtkTreeIter parent;
 
1243
        GtkTreeIter child;
 
1244
 
 
1245
        /* find parent kb group */
 
1246
        if (! find_child_iter(NULL, group_id, &parent))
 
1247
                return;
 
1248
 
 
1249
        /* find child kb node*/
 
1250
        if (! find_child_iter(&parent, keybinding_id, &child))
 
1251
                return;
 
1252
 
 
1253
        gtk_tree_store_set(store, &child, KB_TREE_SHORTCUT, NULL, -1);  /* clear shortcut */
 
1254
}
 
1255
 
 
1256
 
 
1257
/* test if the entered key combination is already used */
 
1258
static gboolean find_duplicate(KeyBinding *search_kb,
 
1259
                guint key, GdkModifierType mods, const gchar *action)
 
1260
{
 
1261
        gsize g, i;
 
1262
 
 
1263
        /* allow duplicate if there is no key combination */
868
1264
        if (key == 0 && mods == 0) return FALSE;
869
1265
 
870
 
        for (i = 0; i < GEANY_MAX_KEYS; i++)
 
1266
        for (g = 0; g < keybinding_groups->len; g++)
871
1267
        {
872
 
                // search another item with the same key, but take not the key we are searching for(-> idx)
873
 
                if (keys[i]->key == key && keys[i]->mods == mods
874
 
                        && ! (keys[i]->key == keys[idx]->key && keys[i]->mods == keys[idx]->mods))
 
1268
                KeyBindingGroup *group = g_ptr_array_index(keybinding_groups, g);
 
1269
 
 
1270
                for (i = 0; i < group->count; i++)
875
1271
                {
876
 
                        dialogs_show_error(
877
 
                                _("The combination '%s' is already used for \"%s\". Please choose another one."),
878
 
                                action, keys[i]->label);
879
 
                        return TRUE;
 
1272
                        KeyBinding *keys = group->keys;
 
1273
                        KeyBinding *kb = &keys[i];
 
1274
 
 
1275
                        /* search another item with the same key,
 
1276
                         * but don't search the key we're looking for keys[idx] */
 
1277
                        if (kb->key == key && kb->mods == mods
 
1278
                                && ! (kb->key == search_kb->key && kb->mods == search_kb->mods))
 
1279
                        {
 
1280
                                if (dialogs_show_question_full(app->window, _("_Override"), GTK_STOCK_CANCEL,
 
1281
                                        _("Override that keybinding?"),
 
1282
                                        _("The combination '%s' is already used for \"%s\"."),
 
1283
                                        action, kb->label))
 
1284
                                {
 
1285
                                        kb->key = 0;
 
1286
                                        kb->mods = 0;
 
1287
                                        clear_tree_shortcut(g, i);
 
1288
                                        continue;
 
1289
                                }
 
1290
                                return TRUE;
 
1291
                        }
880
1292
                }
881
1293
        }
882
1294
        return FALSE;
883
1295
}
884
1296
 
885
1297
 
886
 
void on_pref_toolbar_show_toggled(GtkToggleButton *togglebutton, gpointer user_data)
887
 
{
888
 
        gboolean sens = gtk_toggle_button_get_active(togglebutton);
889
 
 
890
 
        gtk_widget_set_sensitive(lookup_widget(app->prefs_dialog, "frame11"), sens);
891
 
        gtk_widget_set_sensitive(lookup_widget(app->prefs_dialog, "frame13"), sens);
892
 
}
893
 
 
894
 
 
895
 
void dialogs_show_prefs_dialog(void)
896
 
{
897
 
        if (app->prefs_dialog == NULL)
 
1298
static void on_toolbar_show_toggled(GtkToggleButton *togglebutton, gpointer user_data)
 
1299
{
 
1300
        gboolean sens = gtk_toggle_button_get_active(togglebutton);
 
1301
 
 
1302
        gtk_widget_set_sensitive(lookup_widget(ui_widgets.prefs_dialog, "frame11"), sens);
 
1303
        gtk_widget_set_sensitive(lookup_widget(ui_widgets.prefs_dialog, "frame13"), sens);
 
1304
}
 
1305
 
 
1306
 
 
1307
static void on_show_notebook_tabs_toggled(GtkToggleButton *togglebutton, gpointer user_data)
 
1308
{
 
1309
        gboolean sens = gtk_toggle_button_get_active(togglebutton);
 
1310
 
 
1311
        /* tab placement only enabled when tabs are visible */
 
1312
        gtk_widget_set_sensitive(lookup_widget(ui_widgets.prefs_dialog, "combo_tab_editor"), sens);
 
1313
        gtk_widget_set_sensitive(lookup_widget(ui_widgets.prefs_dialog, "check_show_tab_cross"), sens);
 
1314
}
 
1315
 
 
1316
 
 
1317
static void on_use_folding_toggled(GtkToggleButton *togglebutton, gpointer user_data)
 
1318
{
 
1319
        gboolean sens = gtk_toggle_button_get_active(togglebutton);
 
1320
 
 
1321
        gtk_widget_set_sensitive(lookup_widget(ui_widgets.prefs_dialog, "check_unfold_children"), sens);
 
1322
}
 
1323
 
 
1324
 
 
1325
static void on_open_encoding_toggled(GtkToggleButton *togglebutton, gpointer user_data)
 
1326
{
 
1327
        gboolean sens = gtk_toggle_button_get_active(togglebutton);
 
1328
 
 
1329
        gtk_widget_set_sensitive(lookup_widget(ui_widgets.prefs_dialog, "eventbox3"), sens);
 
1330
        gtk_widget_set_sensitive(lookup_widget(ui_widgets.prefs_dialog, "label_open_encoding"), sens);
 
1331
}
 
1332
 
 
1333
 
 
1334
static void on_openfiles_visible_toggled(GtkToggleButton *togglebutton, gpointer user_data)
 
1335
{
 
1336
        gboolean sens = gtk_toggle_button_get_active(togglebutton);
 
1337
 
 
1338
        gtk_widget_set_sensitive(lookup_widget(ui_widgets.prefs_dialog, "check_list_openfiles_fullpath"), sens);
 
1339
}
 
1340
 
 
1341
 
 
1342
static void on_prefs_print_radio_button_toggled(GtkToggleButton *togglebutton, gpointer user_data)
 
1343
{
 
1344
        gboolean sens = gtk_toggle_button_get_active(togglebutton);
 
1345
 
 
1346
        gtk_widget_set_sensitive(lookup_widget(ui_widgets.prefs_dialog, "vbox29"), sens);
 
1347
        gtk_widget_set_sensitive(lookup_widget(ui_widgets.prefs_dialog, "hbox9"), ! sens);
 
1348
}
 
1349
 
 
1350
 
 
1351
static void on_prefs_print_page_header_toggled(GtkToggleButton *togglebutton, gpointer user_data)
 
1352
{
 
1353
        gboolean sens = gtk_toggle_button_get_active(togglebutton);
 
1354
 
 
1355
        gtk_widget_set_sensitive(lookup_widget(ui_widgets.prefs_dialog, "check_print_basename"), sens);
 
1356
        gtk_widget_set_sensitive(lookup_widget(ui_widgets.prefs_dialog, "entry_print_dateformat"), sens);
 
1357
}
 
1358
 
 
1359
 
 
1360
void prefs_show_dialog(void)
 
1361
{
 
1362
        if (ui_widgets.prefs_dialog == NULL)
898
1363
        {
899
 
                GtkWidget *combo;
 
1364
                GtkWidget *combo_new, *combo_open;
 
1365
                GtkWidget *label;
900
1366
                guint i;
901
1367
                gchar *encoding_string;
902
1368
 
903
 
                app->prefs_dialog = create_prefs_dialog();
904
 
                gtk_window_set_transient_for(GTK_WINDOW(app->prefs_dialog), GTK_WINDOW(app->window));
 
1369
                ui_widgets.prefs_dialog = create_prefs_dialog();
 
1370
                gtk_widget_set_name(ui_widgets.prefs_dialog, "GeanyPrefsDialog");
 
1371
                gtk_window_set_transient_for(GTK_WINDOW(ui_widgets.prefs_dialog), GTK_WINDOW(app->window));
905
1372
 
906
 
                // init the default file encoding combo box
907
 
                combo = lookup_widget(app->prefs_dialog, "combo_encoding");
908
 
                gtk_combo_box_set_wrap_width(GTK_COMBO_BOX(combo), 3);
 
1373
                /* init the default file encoding combo box */
 
1374
                combo_new = lookup_widget(ui_widgets.prefs_dialog, "combo_new_encoding");
 
1375
                combo_open = lookup_widget(ui_widgets.prefs_dialog, "combo_open_encoding");
 
1376
                gtk_combo_box_set_wrap_width(GTK_COMBO_BOX(combo_new), 3);
 
1377
                gtk_combo_box_set_wrap_width(GTK_COMBO_BOX(combo_open), 3);
909
1378
                for (i = 0; i < GEANY_ENCODINGS_MAX; i++)
910
1379
                {
911
1380
                        encoding_string = encodings_to_string(&encodings[i]);
912
 
                        gtk_combo_box_append_text(GTK_COMBO_BOX(combo), encoding_string);
 
1381
                        gtk_combo_box_append_text(GTK_COMBO_BOX(combo_new), encoding_string);
 
1382
                        gtk_combo_box_append_text(GTK_COMBO_BOX(combo_open), encoding_string);
913
1383
                        g_free(encoding_string);
914
1384
                }
915
1385
 
 
1386
                /* add manually GeanyWrapLabels because it can't be added with Glade
 
1387
                 * page Tools */
 
1388
                label = geany_wrap_label_new(_("Enter tool paths below. Tools you do not need can be left blank."));
 
1389
                gtk_widget_show(label);
 
1390
                gtk_box_pack_start(GTK_BOX(lookup_widget(ui_widgets.prefs_dialog, "vbox33")),
 
1391
                        label, FALSE, TRUE, 5);
 
1392
                /* page Templates */
 
1393
                label = geany_wrap_label_new(_("Set the information to be used in templates. See the documentation for details."));
 
1394
                gtk_widget_show(label);
 
1395
                gtk_box_pack_start(GTK_BOX(lookup_widget(ui_widgets.prefs_dialog, "vbox31")),
 
1396
                        label, FALSE, TRUE, 5);
 
1397
                label = geany_wrap_label_new(_("<i>Notice: For all changes you make here to take effect, you need to restart Geany.</i>"));
 
1398
                gtk_widget_show(label);
 
1399
                gtk_label_set_use_markup(GTK_LABEL(label), TRUE);
 
1400
                gtk_box_pack_start(GTK_BOX(lookup_widget(ui_widgets.prefs_dialog, "vbox9")),
 
1401
                        label, FALSE, TRUE, 5);
 
1402
                /* page Keybindings */
 
1403
                label = geany_wrap_label_new(_("Here you can change keyboard shortcuts for various actions. Select one and press the Change button to enter a new shortcut, or double click on an action to edit the string representation of the shortcut directly."));
 
1404
                gtk_widget_show(label);
 
1405
                gtk_box_pack_start(GTK_BOX(lookup_widget(ui_widgets.prefs_dialog, "vbox32")),
 
1406
                        label, FALSE, TRUE, 5);
 
1407
                /* page Printing */
 
1408
                label = geany_wrap_label_new(_("<i>Notice: Native GTK printing is only available if Geany was built against GTK 2.10 (or above) <b>and</b> Geany is running with GTK 2.10 (or above).</i>"));
 
1409
                gtk_widget_show(label);
 
1410
                gtk_label_set_use_markup(GTK_LABEL(label), TRUE);
 
1411
                gtk_box_pack_start(GTK_BOX(lookup_widget(ui_widgets.prefs_dialog, "vbox27")),
 
1412
                        label, FALSE, TRUE, 5);
 
1413
 
 
1414
 
916
1415
#ifdef HAVE_VTE
917
 
                if (vte_info.have_vte)
918
 
                {
919
 
                        GtkWidget *notebook, *vbox, *label, *alignment, *table;
920
 
                        GtkWidget *font_term, *color_fore, *color_back, *spin_scrollback, *entry_emulation;
921
 
                        GtkWidget *check_scroll_key, *check_scroll_out, *check_follow_path, *check_ignore_menu_key;
922
 
                        GtkWidget *entry_shell, *button_shell, *image_shell;
923
 
                        GtkTooltips *tooltips;
924
 
                        GtkObject *spin_scrollback_adj;
925
 
 
926
 
                        tooltips = GTK_TOOLTIPS(lookup_widget(app->prefs_dialog, "tooltips"));
927
 
                        notebook = lookup_widget(app->prefs_dialog, "notebook2");
928
 
                        vbox = gtk_vbox_new(FALSE, 0);
929
 
                        gtk_container_add(GTK_CONTAINER(notebook), vbox);
930
 
 
931
 
                        label = gtk_label_new(_("These are settings for the virtual terminal emulator widget (VTE). They only apply, if the VTE library could be loaded."));
932
 
                        gtk_box_pack_start(GTK_BOX(vbox), label, FALSE, FALSE, 0);
933
 
                        gtk_label_set_justify(GTK_LABEL(label), GTK_JUSTIFY_FILL);
934
 
                        gtk_label_set_line_wrap(GTK_LABEL(label), TRUE);
935
 
                        gtk_misc_set_alignment(GTK_MISC(label), 0.14, 0.19);
936
 
                        gtk_misc_set_padding(GTK_MISC(label), 0, 8);
937
 
 
938
 
                        alignment = gtk_alignment_new(0.5, 0.5, 1, 1);
939
 
                        gtk_box_pack_start(GTK_BOX(vbox), alignment, FALSE, FALSE, 0);
940
 
                        gtk_alignment_set_padding(GTK_ALIGNMENT(alignment), 0, 0, 12, 6);
941
 
 
942
 
                        table = gtk_table_new(10, 3, FALSE);
943
 
                        gtk_container_add(GTK_CONTAINER(alignment), table);
944
 
                        gtk_table_set_row_spacings(GTK_TABLE(table), 3);
945
 
                        gtk_table_set_col_spacings(GTK_TABLE(table), 10);
946
 
 
947
 
                        label = gtk_label_new(_("Terminal font"));
948
 
                        gtk_table_attach(GTK_TABLE(table), label, 0, 1, 0, 1,
949
 
                                                (GtkAttachOptions) (GTK_FILL),
950
 
                                                (GtkAttachOptions) (0), 0, 0);
951
 
                        gtk_misc_set_alignment(GTK_MISC(label), 0, 0.5);
952
 
 
953
 
                        font_term = gtk_font_button_new();
954
 
                        gtk_table_attach(GTK_TABLE(table), font_term, 1, 2, 0, 1,
955
 
                                                (GtkAttachOptions) (GTK_EXPAND | GTK_FILL),
956
 
                                                (GtkAttachOptions) (0), 0, 0);
957
 
                        gtk_tooltips_set_tip(tooltips, font_term, _("Sets the font for the terminal widget."), NULL);
958
 
 
959
 
                        label = gtk_label_new(_("Foreground color"));
960
 
                        gtk_table_attach(GTK_TABLE(table), label, 0, 1, 1, 2,
961
 
                                                (GtkAttachOptions) (GTK_FILL),
962
 
                                                (GtkAttachOptions) (0), 0, 0);
963
 
                        gtk_misc_set_alignment(GTK_MISC(label), 0, 0.5);
964
 
 
965
 
                        label = gtk_label_new(_("Background color"));
966
 
                        gtk_table_attach(GTK_TABLE(table), label, 0, 1, 2, 3,
967
 
                                                (GtkAttachOptions) (GTK_FILL),
968
 
                                                (GtkAttachOptions) (0), 0, 0);
969
 
                        gtk_misc_set_alignment(GTK_MISC(label), 0, 0.5);
970
 
 
971
 
                        color_fore = gtk_color_button_new();
972
 
                        gtk_table_attach(GTK_TABLE(table), color_fore, 1, 2, 1, 2,
973
 
                                                (GtkAttachOptions) (GTK_FILL),
974
 
                                                (GtkAttachOptions) (0), 0, 0);
975
 
                        gtk_tooltips_set_tip(tooltips, color_fore, _("Sets the foreground color of the text in the terminal widget."), NULL);
976
 
                        gtk_color_button_set_title(GTK_COLOR_BUTTON(color_fore), _("Color Chooser"));
977
 
 
978
 
                        color_back = gtk_color_button_new();
979
 
                        gtk_table_attach(GTK_TABLE(table), color_back, 1, 2, 2, 3,
980
 
                                                (GtkAttachOptions) (GTK_FILL),
981
 
                                                (GtkAttachOptions) (0), 0, 0);
982
 
                        gtk_tooltips_set_tip(tooltips, color_back, _("Sets the background color of the text in the terminal widget."), NULL);
983
 
                        gtk_color_button_set_title(GTK_COLOR_BUTTON(color_back), _("Color Chooser"));
984
 
 
985
 
                        label = gtk_label_new(_("Scrollback lines"));
986
 
                        gtk_table_attach(GTK_TABLE(table), label, 0, 1, 3, 4,
987
 
                                                (GtkAttachOptions) (GTK_FILL),
988
 
                                                (GtkAttachOptions) (0), 0, 0);
989
 
                        gtk_misc_set_alignment(GTK_MISC(label), 0, 0.5);
990
 
 
991
 
                        spin_scrollback_adj = gtk_adjustment_new(500, 0, 5000, 1, 10, 10);
992
 
                        spin_scrollback = gtk_spin_button_new(GTK_ADJUSTMENT(spin_scrollback_adj), 1, 0);
993
 
                        gtk_table_attach(GTK_TABLE(table), spin_scrollback, 1, 2, 3, 4,
994
 
                                                (GtkAttachOptions) (GTK_EXPAND | GTK_FILL),
995
 
                                                (GtkAttachOptions) (0), 0, 0);
996
 
                        gtk_tooltips_set_tip(tooltips, spin_scrollback, _("Specifies the history in lines, which you can scroll back in the terminal widget."), NULL);
997
 
                        gtk_spin_button_set_numeric(GTK_SPIN_BUTTON(spin_scrollback), TRUE);
998
 
                        gtk_spin_button_set_wrap(GTK_SPIN_BUTTON(spin_scrollback), TRUE);
999
 
 
1000
 
                        label = gtk_label_new(_("Terminal emulation"));
1001
 
                        gtk_table_attach(GTK_TABLE(table), label, 0, 1, 4, 5,
1002
 
                                                (GtkAttachOptions) (GTK_FILL),
1003
 
                                                (GtkAttachOptions) (0), 0, 0);
1004
 
                        gtk_misc_set_alignment(GTK_MISC(label), 0, 0.5);
1005
 
 
1006
 
                        entry_emulation = gtk_entry_new();
1007
 
                        gtk_table_attach(GTK_TABLE(table), entry_emulation, 1, 2, 4, 5,
1008
 
                                                (GtkAttachOptions) (GTK_EXPAND | GTK_FILL),
1009
 
                                                (GtkAttachOptions) (0), 0, 0);
1010
 
                        gtk_tooltips_set_tip(tooltips, entry_emulation, _("Controls how the terminal emulator should behave. xterm is a good start."), NULL);
1011
 
 
1012
 
                        label = gtk_label_new(_("Shell"));
1013
 
                        gtk_table_attach(GTK_TABLE(table), label, 0, 1, 5, 6,
1014
 
                                                (GtkAttachOptions) (GTK_FILL),
1015
 
                                                (GtkAttachOptions) (0), 0, 0);
1016
 
                        gtk_misc_set_alignment(GTK_MISC(label), 0, 0.5);
1017
 
 
1018
 
                        entry_shell = gtk_entry_new();
1019
 
                        gtk_table_attach(GTK_TABLE(table), entry_shell, 1, 2, 5, 6,
1020
 
                                                (GtkAttachOptions) (GTK_EXPAND | GTK_FILL),
1021
 
                                                (GtkAttachOptions) (0), 0, 0);
1022
 
                        gtk_tooltips_set_tip(tooltips, entry_shell, _("Sets the path to the shell which should be started inside the terminal emulation."), NULL);
1023
 
 
1024
 
                        button_shell = gtk_button_new();
1025
 
                        gtk_widget_show(button_shell);
1026
 
                        gtk_table_attach(GTK_TABLE(table), button_shell, 2, 3, 5, 6,
1027
 
                                                (GtkAttachOptions) (GTK_FILL),
1028
 
                                                (GtkAttachOptions) (0), 0, 0);
1029
 
 
1030
 
                        image_shell = gtk_image_new_from_stock("gtk-open", GTK_ICON_SIZE_BUTTON);
1031
 
                        gtk_widget_show(image_shell);
1032
 
                        gtk_container_add(GTK_CONTAINER(button_shell), image_shell);
1033
 
 
1034
 
                        check_scroll_key = gtk_check_button_new_with_mnemonic(_("Scroll on keystroke"));
1035
 
                        gtk_table_attach(GTK_TABLE(table), check_scroll_key, 1, 2, 6, 7,
1036
 
                                                (GtkAttachOptions) (GTK_FILL),
1037
 
                                                (GtkAttachOptions) (0), 0, 0);
1038
 
                        gtk_tooltips_set_tip(tooltips, check_scroll_key, _("Whether to scroll to the bottom if a key was pressed."), NULL);
1039
 
                        gtk_button_set_focus_on_click(GTK_BUTTON(check_scroll_key), FALSE);
1040
 
 
1041
 
                        check_scroll_out = gtk_check_button_new_with_mnemonic(_("Scroll on output"));
1042
 
                        gtk_table_attach(GTK_TABLE(table), check_scroll_out, 1, 2, 7, 8,
1043
 
                                                (GtkAttachOptions) (GTK_FILL),
1044
 
                                                (GtkAttachOptions) (0), 0, 0);
1045
 
                        gtk_tooltips_set_tip(tooltips, check_scroll_out, _("Whether to scroll to the bottom if an output was generated."), NULL);
1046
 
                        gtk_button_set_focus_on_click(GTK_BUTTON(check_scroll_out), FALSE);
1047
 
 
1048
 
                        check_ignore_menu_key = gtk_check_button_new_with_mnemonic(_("Disable menu shortcut key (F10 by default)"));
1049
 
                        gtk_table_attach(GTK_TABLE(table), check_ignore_menu_key, 1, 2, 8, 9,
1050
 
                                                (GtkAttachOptions) (GTK_FILL),
1051
 
                                                (GtkAttachOptions) (0), 0, 0);
1052
 
                        gtk_tooltips_set_tip(tooltips, check_ignore_menu_key, _("This option disables the keybinding to popup the menu bar (default is F10). Disabling it can be useful if you use, for example, Midnight Commander within the VTE."), NULL);
1053
 
                        gtk_button_set_focus_on_click(GTK_BUTTON(check_ignore_menu_key), FALSE);
1054
 
 
1055
 
                        check_follow_path = gtk_check_button_new_with_mnemonic(_("Follow the path of the current file"));
1056
 
                        gtk_table_attach(GTK_TABLE(table), check_follow_path, 1, 2, 9, 10,
1057
 
                                                (GtkAttachOptions) (GTK_FILL),
1058
 
                                                (GtkAttachOptions) (0), 0, 0);
1059
 
                        gtk_tooltips_set_tip(tooltips, check_follow_path, _("Whether to execute \"cd $path\" when you switch between opened files."), NULL);
1060
 
                        gtk_button_set_focus_on_click(GTK_BUTTON(check_follow_path), FALSE);
1061
 
 
1062
 
                        label = gtk_label_new(_("Terminal"));
1063
 
                        gtk_notebook_set_tab_label(GTK_NOTEBOOK(notebook), gtk_notebook_get_nth_page(
1064
 
                                                GTK_NOTEBOOK(notebook), 7), label);
1065
 
 
1066
 
                        g_object_set_data_full(G_OBJECT(app->prefs_dialog), "font_term",
1067
 
                                        gtk_widget_ref(font_term),      (GDestroyNotify) gtk_widget_unref);
1068
 
                        g_object_set_data_full(G_OBJECT(app->prefs_dialog), "color_fore",
1069
 
                                        gtk_widget_ref(color_fore),     (GDestroyNotify) gtk_widget_unref);
1070
 
                        g_object_set_data_full(G_OBJECT(app->prefs_dialog), "color_back",
1071
 
                                        gtk_widget_ref(color_back),     (GDestroyNotify) gtk_widget_unref);
1072
 
                        g_object_set_data_full(G_OBJECT(app->prefs_dialog), "spin_scrollback",
1073
 
                                        gtk_widget_ref(spin_scrollback),        (GDestroyNotify) gtk_widget_unref);
1074
 
                        g_object_set_data_full(G_OBJECT(app->prefs_dialog), "entry_emulation",
1075
 
                                        gtk_widget_ref(entry_emulation),        (GDestroyNotify) gtk_widget_unref);
1076
 
                        g_object_set_data_full(G_OBJECT(app->prefs_dialog), "entry_shell",
1077
 
                                        gtk_widget_ref(entry_shell),    (GDestroyNotify) gtk_widget_unref);
1078
 
                        g_object_set_data_full(G_OBJECT(app->prefs_dialog), "check_scroll_key",
1079
 
                                        gtk_widget_ref(check_scroll_key),       (GDestroyNotify) gtk_widget_unref);
1080
 
                        g_object_set_data_full(G_OBJECT(app->prefs_dialog), "check_scroll_out",
1081
 
                                        gtk_widget_ref(check_scroll_out),       (GDestroyNotify) gtk_widget_unref);
1082
 
                        g_object_set_data_full(G_OBJECT(app->prefs_dialog), "check_ignore_menu_key",
1083
 
                                        gtk_widget_ref(check_ignore_menu_key),  (GDestroyNotify) gtk_widget_unref);
1084
 
                        g_object_set_data_full(G_OBJECT(app->prefs_dialog), "check_follow_path",
1085
 
                                        gtk_widget_ref(check_follow_path),      (GDestroyNotify) gtk_widget_unref);
1086
 
 
1087
 
                        gtk_widget_show_all(vbox);
1088
 
 
1089
 
                        g_signal_connect((gpointer) font_term, "font-set", G_CALLBACK(on_prefs_font_choosed),
1090
 
                                                                                                                           GINT_TO_POINTER(4));
1091
 
                        g_signal_connect((gpointer) color_fore, "color-set", G_CALLBACK(on_prefs_color_choosed),
1092
 
                                                                                                                                 GINT_TO_POINTER(2));
1093
 
                        g_signal_connect((gpointer) color_back, "color-set", G_CALLBACK(on_prefs_color_choosed),
1094
 
                                                                                                                                 GINT_TO_POINTER(3));
1095
 
                        g_signal_connect((gpointer) button_shell, "clicked",
1096
 
                                        G_CALLBACK(on_pref_tools_button_clicked), entry_shell);
1097
 
                }
 
1416
                vte_append_preferences_tab();
1098
1417
#endif
1099
 
                g_signal_connect((gpointer) app->prefs_dialog, "response", G_CALLBACK(on_prefs_button_clicked), NULL);
1100
 
                g_signal_connect((gpointer) app->prefs_dialog, "delete_event", G_CALLBACK(on_prefs_delete_event), NULL);
1101
 
                g_signal_connect((gpointer) lookup_widget(app->prefs_dialog, "tagbar_font"),
 
1418
 
 
1419
                ui_setup_open_button_callback(lookup_widget(ui_widgets.prefs_dialog, "startup_path_button"), NULL,
 
1420
                        GTK_FILE_CHOOSER_ACTION_SELECT_FOLDER, GTK_ENTRY(lookup_widget(ui_widgets.prefs_dialog, "startup_path_entry")));
 
1421
 
 
1422
                g_signal_connect((gpointer) ui_widgets.prefs_dialog, "response",
 
1423
                        G_CALLBACK(on_prefs_button_clicked), NULL);
 
1424
                g_signal_connect((gpointer) ui_widgets.prefs_dialog, "delete_event",
 
1425
                        G_CALLBACK(gtk_widget_hide_on_delete), NULL);
 
1426
 
 
1427
                g_signal_connect((gpointer) lookup_widget(ui_widgets.prefs_dialog, "tagbar_font"),
1102
1428
                                "font-set", G_CALLBACK(on_prefs_font_choosed), GINT_TO_POINTER(1));
1103
 
                g_signal_connect((gpointer) lookup_widget(app->prefs_dialog, "msgwin_font"),
 
1429
                g_signal_connect((gpointer) lookup_widget(ui_widgets.prefs_dialog, "msgwin_font"),
1104
1430
                                "font-set", G_CALLBACK(on_prefs_font_choosed), GINT_TO_POINTER(2));
1105
 
                g_signal_connect((gpointer) lookup_widget(app->prefs_dialog, "editor_font"),
 
1431
                g_signal_connect((gpointer) lookup_widget(ui_widgets.prefs_dialog, "editor_font"),
1106
1432
                                "font-set", G_CALLBACK(on_prefs_font_choosed), GINT_TO_POINTER(3));
1107
 
                g_signal_connect((gpointer) lookup_widget(app->prefs_dialog, "long_line_color"),
 
1433
                g_signal_connect((gpointer) lookup_widget(ui_widgets.prefs_dialog, "long_line_color"),
1108
1434
                                "color-set", G_CALLBACK(on_prefs_color_choosed), GINT_TO_POINTER(1));
1109
 
                // file chooser buttons in the tools tab
1110
 
                g_signal_connect((gpointer) lookup_widget(app->prefs_dialog, "button_make"),
1111
 
                                "clicked", G_CALLBACK(on_pref_tools_button_clicked), lookup_widget(app->prefs_dialog, "entry_com_make"));
1112
 
                g_signal_connect((gpointer) lookup_widget(app->prefs_dialog, "button_term"),
1113
 
                                "clicked", G_CALLBACK(on_pref_tools_button_clicked), lookup_widget(app->prefs_dialog, "entry_com_term"));
1114
 
                g_signal_connect((gpointer) lookup_widget(app->prefs_dialog, "button_browser"),
1115
 
                                "clicked", G_CALLBACK(on_pref_tools_button_clicked), lookup_widget(app->prefs_dialog, "entry_browser"));
1116
 
                g_signal_connect((gpointer) lookup_widget(app->prefs_dialog, "button_print"),
1117
 
                                "clicked", G_CALLBACK(on_pref_tools_button_clicked), lookup_widget(app->prefs_dialog, "entry_print"));
1118
 
                g_signal_connect((gpointer) lookup_widget(app->prefs_dialog, "button_grep"),
1119
 
                                "clicked", G_CALLBACK(on_pref_tools_button_clicked), lookup_widget(app->prefs_dialog, "entry_grep"));
1120
 
 
1121
 
                g_signal_connect((gpointer) lookup_widget(app->prefs_dialog, "check_toolbar_show"),
1122
 
                                "toggled", G_CALLBACK(on_pref_toolbar_show_toggled), NULL);
1123
 
 
 
1435
                /* file chooser buttons in the tools tab */
 
1436
                g_signal_connect((gpointer) lookup_widget(ui_widgets.prefs_dialog, "button_make"),
 
1437
                                "clicked", G_CALLBACK(on_prefs_tools_button_clicked), lookup_widget(ui_widgets.prefs_dialog, "entry_com_make"));
 
1438
                g_signal_connect((gpointer) lookup_widget(ui_widgets.prefs_dialog, "button_term"),
 
1439
                                "clicked", G_CALLBACK(on_prefs_tools_button_clicked), lookup_widget(ui_widgets.prefs_dialog, "entry_com_term"));
 
1440
                g_signal_connect((gpointer) lookup_widget(ui_widgets.prefs_dialog, "button_browser"),
 
1441
                                "clicked", G_CALLBACK(on_prefs_tools_button_clicked), lookup_widget(ui_widgets.prefs_dialog, "entry_browser"));
 
1442
                g_signal_connect((gpointer) lookup_widget(ui_widgets.prefs_dialog, "button_grep"),
 
1443
                                "clicked", G_CALLBACK(on_prefs_tools_button_clicked), lookup_widget(ui_widgets.prefs_dialog, "entry_grep"));
 
1444
 
 
1445
                /* tools commands */
 
1446
                g_signal_connect((gpointer) lookup_widget(ui_widgets.prefs_dialog, "button_contextaction"),
 
1447
                        "clicked", G_CALLBACK(on_prefs_tools_button_clicked), lookup_widget(ui_widgets.prefs_dialog, "entry_contextaction"));
 
1448
                g_signal_connect((gpointer) lookup_widget(ui_widgets.prefs_dialog, "button_contextaction"),
 
1449
                        "clicked", G_CALLBACK(on_prefs_tools_button_clicked), lookup_widget(ui_widgets.prefs_dialog, "entry_contextaction"));
 
1450
 
 
1451
                /* printing */
 
1452
                g_signal_connect((gpointer) lookup_widget(ui_widgets.prefs_dialog, "button_print_external_cmd"),
 
1453
                        "clicked", G_CALLBACK(on_prefs_tools_button_clicked), lookup_widget(ui_widgets.prefs_dialog, "entry_print_external_cmd"));
 
1454
                g_signal_connect((gpointer) lookup_widget(ui_widgets.prefs_dialog, "radio_print_gtk"),
 
1455
                        "toggled", G_CALLBACK(on_prefs_print_radio_button_toggled), NULL);
 
1456
                g_signal_connect((gpointer) lookup_widget(ui_widgets.prefs_dialog, "check_print_pageheader"),
 
1457
                        "toggled", G_CALLBACK(on_prefs_print_page_header_toggled), NULL);
 
1458
 
 
1459
                g_signal_connect((gpointer) lookup_widget(ui_widgets.prefs_dialog, "check_toolbar_show"),
 
1460
                                "toggled", G_CALLBACK(on_toolbar_show_toggled), NULL);
 
1461
                g_signal_connect((gpointer) lookup_widget(ui_widgets.prefs_dialog, "check_show_notebook_tabs"),
 
1462
                                "toggled", G_CALLBACK(on_show_notebook_tabs_toggled), NULL);
 
1463
                g_signal_connect((gpointer) lookup_widget(ui_widgets.prefs_dialog, "check_folding"),
 
1464
                                "toggled", G_CALLBACK(on_use_folding_toggled), NULL);
 
1465
                g_signal_connect((gpointer) lookup_widget(ui_widgets.prefs_dialog, "check_open_encoding"),
 
1466
                                "toggled", G_CALLBACK(on_open_encoding_toggled), NULL);
 
1467
                g_signal_connect((gpointer) lookup_widget(ui_widgets.prefs_dialog, "check_list_openfiles"),
 
1468
                                "toggled", G_CALLBACK(on_openfiles_visible_toggled), NULL);
1124
1469
        }
1125
1470
 
1126
1471
        prefs_init_dialog();
1127
 
        gtk_widget_show(app->prefs_dialog);
1128
 
}
 
1472
        gtk_widget_show(ui_widgets.prefs_dialog);
 
1473
}
 
1474
 
 
1475
 
 
1476
void
 
1477
on_prefs_tools_button_clicked           (GtkButton       *button,
 
1478
                                        gpointer         item)
 
1479
{
 
1480
#ifdef G_OS_WIN32
 
1481
        win32_show_pref_file_dialog(item);
 
1482
#else
 
1483
        GtkWidget *dialog;
 
1484
        gchar *filename, *tmp, **field;
 
1485
 
 
1486
        /* initialize the dialog */
 
1487
        dialog = gtk_file_chooser_dialog_new(_("Open File"), GTK_WINDOW(ui_widgets.prefs_dialog),
 
1488
                                        GTK_FILE_CHOOSER_ACTION_OPEN,
 
1489
                                        GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL,
 
1490
                                        GTK_STOCK_OPEN, GTK_RESPONSE_ACCEPT, NULL);
 
1491
        /* cut the options from the command line */
 
1492
        field = g_strsplit(gtk_entry_get_text(GTK_ENTRY(item)), " ", 2);
 
1493
        if (field[0])
 
1494
        {
 
1495
                filename = g_find_program_in_path(field[0]);
 
1496
                if (filename)
 
1497
                {
 
1498
                        gtk_file_chooser_select_filename(GTK_FILE_CHOOSER(dialog), filename);
 
1499
                        g_free(filename);
 
1500
                }
 
1501
        }
 
1502
 
 
1503
        /* run it */
 
1504
        if (gtk_dialog_run(GTK_DIALOG(dialog)) == GTK_RESPONSE_ACCEPT)
 
1505
        {
 
1506
                tmp = gtk_file_chooser_get_filename(GTK_FILE_CHOOSER(dialog));
 
1507
                if (g_strv_length(field) > 1)
 
1508
                        filename = g_strconcat(tmp, " ", field[1], NULL);
 
1509
                else
 
1510
                {
 
1511
                        filename = tmp;
 
1512
                        tmp = NULL;
 
1513
                }
 
1514
                gtk_entry_set_text(GTK_ENTRY(item), filename);
 
1515
                g_free(filename);
 
1516
                g_free(tmp);
 
1517
        }
 
1518
 
 
1519
        g_strfreev(field);
 
1520
        gtk_widget_destroy(dialog);
 
1521
#endif
 
1522
}
 
1523
 
 
1524