From 375187b866499e37817e2781e076b3460c2a3a1a Mon Sep 17 00:00:00 2001 From: Jose Antonio Ortega Ruiz Date: Tue, 8 Aug 2006 00:22:15 +0000 Subject: External programs management improvement - External programs (editor and mixasm) execution is more robustly controlled both in mixvm and gmixvm. - In gmixvm the external programs dialog has been revamped: - Only proper paths can be introduced for the executables (via a graphical file chooser). - Flags for mixasm are no longer free text, but a check button. - Internally, the code has been refactored. git-archimport-id: mdk@sv.gnu.org/mdk--devel--1--patch-28 --- mixgtk/mixgtk_cmd_dispatcher.c | 78 +++--------------------------------------- 1 file changed, 4 insertions(+), 74 deletions(-) (limited to 'mixgtk/mixgtk_cmd_dispatcher.c') diff --git a/mixgtk/mixgtk_cmd_dispatcher.c b/mixgtk/mixgtk_cmd_dispatcher.c index 1fc6b10..12d11d9 100644 --- a/mixgtk/mixgtk_cmd_dispatcher.c +++ b/mixgtk/mixgtk_cmd_dispatcher.c @@ -43,6 +43,7 @@ #include "mixgtk_mixal.h" #include "mixgtk_fontsel.h" #include "mixgtk_config.h" +#include "mixgtk_external.h" #include "mixgtk_cmd_dispatcher.h" @@ -61,13 +62,6 @@ typedef struct mixgtk_dispatch_ static struct mixgtk_dispatch_ dis_data_ = {NULL}; -static GtkWidget *ext_dlg_ = NULL; -static GtkWidget *ed_entry_ = NULL; -static GtkWidget *asm_entry_ = NULL; - -static const gchar *ED_NAME_ = "editor_entry"; -static const gchar *ASM_NAME_ = "mixasm_entry"; - static const gchar *TITLE_FORMAT_ = "gmixvm - %s"; static void @@ -221,68 +215,6 @@ install_hooks_ (void) NULL); } -/* configuration stuff */ -static const gchar *EDITOR_KEY_ = "Editor"; -static const gchar *MIXASM_KEY_ = "Mixasm"; - -static void -read_config_ (void) -{ - const gchar *editor = mixgtk_config_get (EDITOR_KEY_); - const gchar *assem = mixgtk_config_get (MIXASM_KEY_); - - if (!editor) - { - static const gchar *ENV[] = {"MDK_EDITOR", "X_EDITOR", NULL}; - gchar *edit = NULL; - int k = 0; - while (!edit && ENV[k]) edit = getenv (ENV[k++]); - if (edit) edit = g_strconcat (edit, " %s", NULL); - else edit = g_strdup ("xterm -e vi %s"); - mix_vm_cmd_dispatcher_set_editor (dis_data_.dispatcher, edit); - g_free (edit); - } - else - { - mix_vm_cmd_dispatcher_set_editor (dis_data_.dispatcher, editor); - } - if (!assem) assem = "mixasm %s"; - mix_vm_cmd_dispatcher_set_assembler (dis_data_.dispatcher, assem); - -} - -void -on_external_programs_activate () -{ - if (!ext_dlg_) - { - ext_dlg_ = mixgtk_widget_factory_get_dialog (MIXGTK_EXTERNPROG_DIALOG); - g_return_if_fail (ext_dlg_ != NULL); - ed_entry_ = mixgtk_widget_factory_get_child_by_name - (MIXGTK_EXTERNPROG_DIALOG, ED_NAME_); - g_assert (ed_entry_); - asm_entry_ = mixgtk_widget_factory_get_child_by_name - (MIXGTK_EXTERNPROG_DIALOG, ASM_NAME_); - g_assert (asm_entry_); - } - gtk_entry_set_text (GTK_ENTRY (ed_entry_), - mix_vm_cmd_dispatcher_get_editor (dis_data_.dispatcher)); - gtk_entry_set_text (GTK_ENTRY (asm_entry_), - mix_vm_cmd_dispatcher_get_assembler - (dis_data_.dispatcher)); - gtk_widget_show (ext_dlg_); - if (gtk_dialog_run (GTK_DIALOG (ext_dlg_)) == GTK_RESPONSE_OK) - { - const gchar *value = gtk_entry_get_text (GTK_ENTRY (ed_entry_)); - mix_vm_cmd_dispatcher_set_editor (dis_data_.dispatcher, value); - mixgtk_config_update (EDITOR_KEY_, value); - value = gtk_entry_get_text (GTK_ENTRY (asm_entry_)); - mix_vm_cmd_dispatcher_set_assembler (dis_data_.dispatcher, value); - mixgtk_config_update (MIXASM_KEY_, value); - } - - gtk_widget_hide (ext_dlg_); -} /* initialise the command dispatcher */ gboolean @@ -291,10 +223,6 @@ mixgtk_cmd_dispatcher_init (mixgtk_dialog_id_t top) static gboolean restart = FALSE; gchar *text = NULL; - ext_dlg_ = NULL; - ed_entry_ = NULL; - asm_entry_ = NULL; - dis_data_.prompt = mixgtk_widget_factory_get (top, MIXGTK_WIDGET_PROMPT); g_return_val_if_fail (dis_data_.prompt != NULL, FALSE); @@ -354,7 +282,9 @@ mixgtk_cmd_dispatcher_init (mixgtk_dialog_id_t top) dis_data_.context = gtk_statusbar_get_context_id (GTK_STATUSBAR (dis_data_.status), "cmd_dis_context"); - if (!restart) read_config_ (); + + if (!restart) mixgtk_external_init (dis_data_.dispatcher); + if (dis_data_.last_file) gtk_window_set_title (GTK_WINDOW (mixgtk_widget_factory_get_dialog (MIXGTK_MAIN)), -- cgit v1.2.3