diff options
| -rw-r--r-- | mixgtk/mixgtk.c | 3 | ||||
| -rw-r--r-- | mixgtk/mixgtk_cmd_dispatcher.c | 22 | ||||
| -rw-r--r-- | mixgtk/mixgtk_device.c | 39 | ||||
| -rw-r--r-- | mixgtk/mixgtk_widgets.c | 10 | ||||
| -rw-r--r-- | mixgtk/mixgtk_wm.c | 7 | 
5 files changed, 53 insertions, 28 deletions
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;  }  | 
