From a27ae12b98f6ce945517164940a6eaf7a8301e66 Mon Sep 17 00:00:00 2001 From: Jose Antonio Ortega Ruiz Date: Sat, 30 Jun 2001 19:35:44 +0000 Subject: split improved --- mixgtk/mixgtk.c | 3 ++- mixgtk/mixgtk_cmd_dispatcher.c | 22 ++++++++++++++-------- mixgtk/mixgtk_device.c | 39 +++++++++++++++++++++++++++++---------- mixgtk/mixgtk_widgets.c | 10 +--------- mixgtk/mixgtk_wm.c | 7 +++++++ 5 files changed, 53 insertions(+), 28 deletions(-) (limited to 'mixgtk') diff --git a/mixgtk/mixgtk.c b/mixgtk/mixgtk.c index b94f819..1198fb3 100644 --- a/mixgtk/mixgtk.c +++ b/mixgtk/mixgtk.c @@ -49,6 +49,8 @@ mixgtk_restart (void) return FALSE; } + mixgtk_fontsel_load_defaults (); + if (!mixgtk_cmd_dispatcher_init (MIXGTK_MAIN)) { g_error ("Unable to initialise application (command dispatcher)\n"); @@ -86,7 +88,6 @@ mixgtk_restart (void) mixgtk_input_init (); mixgtk_colorsel_init (); - mixgtk_fontsel_load_defaults (); gtk_widget_show (mixgtk_widget_factory_get_dialog (MIXGTK_MAIN)); mixgtk_mixvm_update_vm_widgets (); diff --git a/mixgtk/mixgtk_cmd_dispatcher.c b/mixgtk/mixgtk_cmd_dispatcher.c index f034cd3..c03db47 100644 --- a/mixgtk/mixgtk_cmd_dispatcher.c +++ b/mixgtk/mixgtk_cmd_dispatcher.c @@ -54,6 +54,7 @@ typedef struct mixgtk_dispatch_ GtkWidget *status; /* the status bar widget */ guint context; /* context of the status bar messages */ GCompletion *completions; /* mixvm command completions */ + gchar *last_file; } mixgtk_dispatch_data_t; static struct mixgtk_dispatch_ dis_data_ = {NULL}; @@ -65,6 +66,7 @@ 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 log_command_ (mixgtk_dispatch_data_t *dis, const gchar *cmd) @@ -123,26 +125,26 @@ load_post_hook_ (mix_vm_cmd_dispatcher_t *dis, const gchar *arg, gpointer data) { static glong id = -1; - static GtkWindow *mainw = NULL; if (mix_vm_cmd_dispatcher_get_last_result (dis)) { - gchar *file = g_strdup_printf ("gmixvm - %s", arg); + GtkWindow *mainw = + GTK_WINDOW (mixgtk_widget_factory_get_dialog (MIXGTK_MAIN)); + + if (dis_data_.last_file) g_free (dis_data_.last_file); + dis_data_.last_file = g_strdup_printf (TITLE_FORMAT_, arg); + gtk_window_set_title (mainw, dis_data_.last_file); + mixgtk_mixal_load_file (); mixgtk_mixal_update (); mixgtk_mixal_update_bp_all (); - if (!mainw) - mainw = GTK_WINDOW (mixgtk_widget_factory_get_dialog (MIXGTK_MAIN)); - if (id != -1) gtk_statusbar_remove (GTK_STATUSBAR (dis_data_.status), dis_data_.context, (guint)id); id = gtk_statusbar_push (GTK_STATUSBAR (dis_data_.status), dis_data_.context, - file); - gtk_window_set_title (mainw, file); - g_free (file); + dis_data_.last_file); } } @@ -342,6 +344,10 @@ mixgtk_cmd_dispatcher_init (mixgtk_dialog_id_t top) "cmd_dis_context"); if (!dis_data_.completions) init_completions_ (); if (!restart) read_config_ (); + if (dis_data_.last_file) + gtk_window_set_title + (GTK_WINDOW (mixgtk_widget_factory_get_dialog (MIXGTK_MAIN)), + dis_data_.last_file); #ifdef HAVE_LIBHISTORY if (!restart) diff --git a/mixgtk/mixgtk_device.c b/mixgtk/mixgtk_device.c index ac0092d..71e83bd 100644 --- a/mixgtk/mixgtk_device.c +++ b/mixgtk/mixgtk_device.c @@ -316,21 +316,36 @@ mixgtk_device_new_ (mix_device_type_t type) return (mix_device_t *)dev; } +static mix_device_t * +mixgtk_device_copy_ (const struct mixgtk_device_t *from) +{ + struct mixgtk_device_t *result = + (struct mixgtk_device_t *)mixgtk_device_new_ (from->device.type); + g_return_val_if_fail (result != NULL, NULL); + if (MODES_[from->device.type] == mix_dev_CHAR) + { + gchar *text = gtk_editable_get_chars (GTK_EDITABLE (from->widget), + 0, -1); + gtk_text_insert (GTK_TEXT (result->widget), NULL, NULL, NULL, text, -1); + g_free (text); + } + else + { + } + return (mix_device_t *)result; +} + /* init default devices */ gboolean mixgtk_device_init (GtkNotebook *container, mix_vm_t *vm) { - static mix_device_type_t def_types[] = { - /* mix_dev_CONSOLE,*/ mix_dev_INVALID - }; - gint k = 0; g_return_val_if_fail (container != NULL, FALSE); g_return_val_if_fail (vm != NULL, FALSE); container_ = container; vm_ = vm; - /** configuration stuff */ + last_pos_ = 0; devdlg_ = NULL; dtoggle_ = NULL; wtoggle_ = NULL; @@ -345,12 +360,16 @@ mixgtk_device_init (GtkNotebook *container, mix_vm_t *vm) if (mixgtk_config_get (DEV_FORMAT_KEY_)) decs_ = atoi (mixgtk_config_get (DEV_FORMAT_KEY_)); - /* connect default devices */ - while (def_types[k] != mix_dev_INVALID) + /* re-create existing devices */ + for (k = 0; k < mix_dev_INVALID; ++k) { - struct mix_device_t *dev = mixgtk_device_new_ (def_types[k]); - if (dev != NULL) mix_vm_connect_device (vm, dev); - ++k; + mix_device_t *dev = mix_vm_get_device (vm, k); + if (dev != NULL) + { + mix_device_t *newdev = + mixgtk_device_copy_ ((struct mixgtk_device_t *)dev); + mix_vm_connect_device (vm, newdev); + } } /* set to first page */ diff --git a/mixgtk/mixgtk_widgets.c b/mixgtk/mixgtk_widgets.c index be4d4ae..0a1acda 100644 --- a/mixgtk/mixgtk_widgets.c +++ b/mixgtk/mixgtk_widgets.c @@ -154,15 +154,7 @@ mixgtk_widget_factory_init (void) else { gint k; - for (k = 0; k < DLG_NO_; ++k) - { - if (xml_[k]) - { - if (k != MIXGTK_MAIN) - gtk_widget_destroy (mixgtk_widget_factory_get_dialog (k)); - xml_[k] = NULL; - } - } + for (k = 0; k < DLG_NO_; ++k) if (xml_[k]) xml_[k] = NULL; } split_ = split; diff --git a/mixgtk/mixgtk_wm.c b/mixgtk/mixgtk_wm.c index ce6a6c5..7e28baf 100644 --- a/mixgtk/mixgtk_wm.c +++ b/mixgtk/mixgtk_wm.c @@ -84,6 +84,13 @@ mixgtk_wm_init (void) gtk_check_menu_item_set_active (infos_[i].menu, infos_[i].visible); } } + else + { + gint k; + for (k = 0; k < INF_NO_; ++k) + if (infos_[k].widget) gtk_widget_destroy (infos_[k].widget); + } + restart = TRUE; return TRUE; } -- cgit v1.2.3