3
* gdb-ui-envir.c - Environment and option settings for a GTK-based GDB user interface.
5
* See the file "gdb-ui.h" for license information.
21
GtkWidget *w = gtk_label_new(s);
22
gtk_misc_set_alignment(GTK_MISC(w), 0.0f, 0.0f);
27
gtk_box_pack_start(vbox, newlabel(s), TRUE, TRUE, 0); \
28
gtk_box_pack_start(vbox, w, TRUE, TRUE, 0); \
29
gtk_entry_set_activates_default(GTK_ENTRY(w), TRUE);
32
same_str(const gchar * a, const gchar * b)
46
return g_str_equal(a, b);
52
fixup_path(const gchar * path)
56
gchar **dirs = g_strsplit(path, ":", 0);
61
for (i = 0; dirs[i]; i++)
63
if (strchr(dirs[i], ' '))
65
gchar *tmp = g_strconcat("\"", dirs[i], "\"", NULL);
70
rv = g_strjoinv(" ", dirs);
81
gdbui_env_dlg(const GdbEnvironInfo * env)
83
GtkWidget *dlg = gtk_dialog_new_with_buttons(_("Environment settings"),
84
GTK_WINDOW(gdbui_setup.main_window),
86
GTK_DIALOG_DESTROY_WITH_PARENT,
87
GTK_STOCK_OK, GTK_RESPONSE_OK,
88
GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL, NULL);
90
GtkBox *vbox = GTK_BOX(GTK_DIALOG(dlg)->vbox);
91
GtkWidget *cwd_box = gtk_entry_new();
92
GtkWidget *path_box = gtk_entry_new();
93
GtkWidget *args_box = gtk_entry_new();
94
GtkWidget *dirs_box = gtk_entry_new();
96
gtk_window_set_transient_for(GTK_WINDOW(dlg), GTK_WINDOW(gdbui_setup.main_window));
97
gtk_window_set_position(GTK_WINDOW(dlg), GTK_WIN_POS_CENTER);
98
gtk_dialog_set_default_response(GTK_DIALOG(dlg), GTK_RESPONSE_OK);
100
gtk_entry_set_text(GTK_ENTRY(cwd_box), env->cwd ? env->cwd : "");
101
gtk_entry_set_text(GTK_ENTRY(path_box), env->path ? env->path : "");
102
gtk_entry_set_text(GTK_ENTRY(args_box), env->args ? env->args : "");
103
gtk_entry_set_text(GTK_ENTRY(dirs_box), env->dirs ? env->dirs : "");
105
label(args_box, _("\n Command-line arguments passed to target program:"));
106
label(dirs_box, _("\n Search path for source files:"));
107
label(cwd_box, _("\n Working directory for target program:"));
108
label(path_box, _("\n Search path for executables:"));
110
gtk_widget_show_all(dlg);
111
gtk_widget_set_usize(dlg, (gdk_screen_get_width(gdk_screen_get_default()) / 2) * 1, 0);
112
if (gtk_dialog_run(GTK_DIALOG(dlg)) == GTK_RESPONSE_OK)
114
const gchar *cwd = gtk_entry_get_text(GTK_ENTRY(cwd_box));
115
const gchar *path = gtk_entry_get_text(GTK_ENTRY(path_box));
116
const gchar *args = gtk_entry_get_text(GTK_ENTRY(args_box));
117
const gchar *dirs = gtk_entry_get_text(GTK_ENTRY(dirs_box));
118
if (!same_str(cwd, env->cwd))
120
gdbio_send_cmd("-environment-cd %s\n", cwd);
122
if (!same_str(path, env->path))
124
gchar *fixed = fixup_path(path);
125
gdbio_send_cmd("-environment-path -r %s\n", fixed);
128
if (!same_str(args, env->args))
130
gdbio_send_cmd("-exec-arguments %s\n", args);
132
if (!same_str(dirs, env->dirs))
134
gchar *fixed = fixup_path(dirs);
135
gdbio_send_cmd("-environment-directory -r %s\n", fixed);
139
gtk_widget_destroy(dlg);
142
#define MONO_FONT "monospace 12"
145
font_click(GtkButton * button, gpointer user_data)
150
fn = (gchar *) gtk_entry_get_text(GTK_ENTRY(user_data));
151
dlg = gtk_font_selection_dialog_new(_("Select Font"));
154
gtk_font_selection_dialog_set_font_name(GTK_FONT_SELECTION_DIALOG(dlg), fn);
156
resp = gtk_dialog_run(GTK_DIALOG(dlg));
157
if (resp == GTK_RESPONSE_OK)
159
fn = gtk_font_selection_dialog_get_font_name(GTK_FONT_SELECTION_DIALOG(dlg));
162
gtk_entry_set_text(GTK_ENTRY(user_data), fn);
166
gtk_widget_destroy(dlg);
173
GtkWidget *dlg = gtk_dialog_new_with_buttons(_("Preferences"),
174
GTK_WINDOW(gdbui_setup.main_window),
176
GTK_DIALOG_DESTROY_WITH_PARENT,
177
GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL,
178
GTK_STOCK_OK, GTK_RESPONSE_OK, NULL);
180
GtkBox *vbox = GTK_BOX(GTK_DIALOG(dlg)->vbox);
182
GtkWidget *font_btn = gtk_button_new();
183
// GtkWidget*font_btn=gtk_button_new_with_label("Choose...");
184
// GtkWidget*font_btn=gtk_button_new_from_stock(GTK_STOCK_SELECT_FONT);
186
GtkWidget *font_box = gtk_entry_new();
187
GtkWidget *term_box = gtk_entry_new();
189
GtkWidget *top_chk = gtk_check_button_new_with_label(_("Keep debug window on top."));
191
GtkWidget *tip_chk = gtk_check_button_new_with_label(_("Show tooltips."));
192
GtkWidget *ico_chk = gtk_check_button_new_with_label(_("Show icons."));
194
gtk_button_set_image(GTK_BUTTON(font_btn),
195
gtk_image_new_from_stock(GTK_STOCK_SELECT_FONT, GTK_ICON_SIZE_BUTTON));
197
gtk_box_pack_start(vbox, newlabel(_("Font for source code listings:")), FALSE, FALSE, 2);
198
if (gdbui_setup.options.mono_font)
200
gtk_entry_set_text(GTK_ENTRY(font_box), gdbui_setup.options.mono_font);
202
g_signal_connect(G_OBJECT(font_btn), "clicked", G_CALLBACK(font_click), font_box);
203
hbox = gtk_hbox_new(FALSE, 0);
204
gtk_box_pack_start(vbox, hbox, FALSE, FALSE, 0);
205
gtk_box_pack_start(GTK_BOX(hbox), font_box, TRUE, TRUE, 0);
206
gtk_box_pack_start(GTK_BOX(hbox), font_btn, FALSE, FALSE, 0);
208
gtk_box_pack_start(vbox, gtk_hseparator_new(), FALSE, FALSE, 8);
209
gtk_box_pack_start(vbox, newlabel(_("Terminal program:")), FALSE, FALSE, 2);
210
gtk_box_pack_start(vbox, term_box, FALSE, FALSE, 0);
211
if (gdbui_setup.options.term_cmd)
213
gtk_entry_set_text(GTK_ENTRY(term_box), gdbui_setup.options.term_cmd);
216
gtk_box_pack_start(vbox, gtk_hseparator_new(), FALSE, FALSE, 8);
218
gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(top_chk), gdbui_setup.options.stay_on_top);
219
gtk_box_pack_start(vbox, top_chk, FALSE, FALSE, 0);
221
gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(tip_chk), gdbui_setup.options.show_tooltips);
222
gtk_box_pack_start(vbox, tip_chk, FALSE, FALSE, 0);
224
gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(ico_chk), gdbui_setup.options.show_icons);
225
gtk_box_pack_start(vbox, ico_chk, FALSE, FALSE, 0);
228
gtk_widget_show_all(dlg);
229
if (gtk_dialog_run(GTK_DIALOG(dlg)) == GTK_RESPONSE_OK)
231
gchar *font = (gchar *) gtk_entry_get_text(GTK_ENTRY(font_box));
232
gchar *term = (gchar *) gtk_entry_get_text(GTK_ENTRY(term_box));
234
&& !(gdbui_setup.options.mono_font
235
&& g_str_equal(gdbui_setup.options.mono_font, font)))
237
g_free(gdbui_setup.options.mono_font);
238
gdbui_setup.options.mono_font = g_strdup(font);
242
&& !(gdbui_setup.options.term_cmd
243
&& g_str_equal(gdbui_setup.options.term_cmd, term)))
245
g_free(gdbui_setup.options.term_cmd);
246
gdbui_setup.options.term_cmd = g_strdup(term);
250
gdbui_opts.stay_on_top = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(top_chk));
252
gdbui_setup.options.show_tooltips =
253
gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(tip_chk));
254
gdbui_setup.options.show_icons = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(ico_chk));
255
gtk_widget_destroy(dlg);
256
if (gdbui_setup.opts_func)
258
gdbui_setup.opts_func();
266
gdbui_setup.options.term_cmd = g_strdup("xterm");
267
gdbui_setup.options.mono_font = g_strdup(MONO_FONT);
268
gdbui_setup.options.show_tooltips = TRUE;
269
gdbui_setup.options.show_icons = TRUE;
271
gdbui_setup.options.stay_on_top = FALSE;
279
g_free(gdbui_setup.options.mono_font);
280
gdbui_setup.options.mono_font = NULL;