--- uae/src/gtkui.c 2018/04/24 17:02:01 1.1.1.11 +++ uae/src/gtkui.c 2018/04/24 17:10:50 1.1.1.16 @@ -27,6 +27,7 @@ #include "threaddep/thread.h" #include "sounddep/sound.h" #include "savestate.h" +#include "debug.h" #include #include @@ -85,6 +86,9 @@ static GtkWidget *volname_entry, *path_e static GtkWidget *dirdlg; static char dirdlg_volname[256], dirdlg_path[256]; +static GtkWidget *lab_info; +static GtkWidget *notebook; + static smp_comm_pipe to_gui_pipe, from_gui_pipe; static uae_sem_t gui_sem, gui_init_sem, gui_quit_sem; /* gui_sem protects the DFx fields */ @@ -102,7 +106,7 @@ static void save_config (void) f = fopen (optionsfile, "w"); if (f == NULL) { - fprintf (stderr, "Error saving options file!\n"); + write_log ("Error saving options file!\n"); return; } save_options (f, &currprefs); @@ -183,7 +187,7 @@ static void set_chipset_state (void) static void set_sound_state (void) { - int stereo = currprefs.stereo + currprefs.mixed_stereo; + int stereo = currprefs.sound_stereo + currprefs.mixed_stereo; gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (sound_widget[currprefs.produce_sound]), 1); gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (sound_ch_widget[stereo]), 1); gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (sound_bits_widget[currprefs.sound_bits == 16]), 1); @@ -323,11 +327,11 @@ static int my_idle (void) int cmd = read_comm_pipe_int_blocking (&to_gui_pipe); int n; switch (cmd) { - case 0: + case 0: n = read_comm_pipe_int_blocking (&to_gui_pipe); gtk_label_set_text (GTK_LABEL (disk_text_widget[n]), currprefs.df[n]); break; - case 1: + case 1: /* Initialization. */ set_cpu_widget (); set_cpu_state (); @@ -342,21 +346,31 @@ static int my_idle (void) uae_sem_post (&gui_init_sem); gui_active = 1; break; + case 2: + /* Set Pause-Button active */ + gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (pause_uae_widget), TRUE); + break; + case 3: + /* Set Pause-Button inactive */ + gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (pause_uae_widget), FALSE); + break; } } - for (i = 0; i < 5; i++) { - unsigned int mask = 1 << i; - unsigned int on = leds & mask; - - if (on == (prevledstate & mask)) - continue; - -/* printf(": %d %d\n", i, on);*/ - draw_led (i); + if (gtk_notebook_get_current_page (GTK_NOTEBOOK (notebook)) == 0) { + for (i = 0; i < 5; i++) { + unsigned int mask = 1 << i; + unsigned int on = leds & mask; + + if (on == (prevledstate & mask)) + continue; + + /* printf(": %d %d\n", i, on);*/ + draw_led (i); + } + prevledstate = leds; } - prevledstate = leds; -out: + out: return 1; } @@ -366,7 +380,7 @@ static int find_current_toggle (GtkWidge for (i = 0; i < count; i++) if (GTK_TOGGLE_BUTTON (*widgets++)->active) return i; - fprintf (stderr, "GTKUI: Can't happen!\n"); + write_log ("GTKUI: Can't happen!\n"); return -1; } @@ -482,10 +496,10 @@ static void p96size_changed (void) static void sound_changed (void) { changed_prefs.produce_sound = find_current_toggle (sound_widget, 4); - changed_prefs.stereo = find_current_toggle (sound_ch_widget, 3); + changed_prefs.sound_stereo = find_current_toggle (sound_ch_widget, 3); changed_prefs.mixed_stereo = 0; - if (changed_prefs.stereo == 2) - changed_prefs.mixed_stereo = changed_prefs.stereo = 1; + if (changed_prefs.sound_stereo == 2) + changed_prefs.mixed_stereo = changed_prefs.sound_stereo = 1; changed_prefs.sound_bits = (find_current_toggle (sound_bits_widget, 2) + 1) * 8; } @@ -501,7 +515,7 @@ static void did_debug (void) { if (quit_gui) return; - + write_comm_pipe_int (&from_gui_pipe, 3, 1); } @@ -509,7 +523,7 @@ static void did_quit (void) { if (quit_gui) return; - + write_comm_pipe_int (&from_gui_pipe, 4, 1); } @@ -517,22 +531,25 @@ static void did_eject (GtkWidget *w, gpo { if (quit_gui) return; - + write_comm_pipe_int (&from_gui_pipe, 0, 0); write_comm_pipe_int (&from_gui_pipe, (int)data, 1); + gtk_label_set_text (GTK_LABEL (disk_text_widget[(int)data]), ""); } -static void pause_uae (GtkWidget *widget, gpointer data) +static void pause_uae (void) { if (quit_gui) return; - write_comm_pipe_int (&from_gui_pipe, GTK_TOGGLE_BUTTON (widget)->active ? 5 : 6, 1); + write_comm_pipe_int (&from_gui_pipe, GTK_TOGGLE_BUTTON (pause_uae_widget)->active ? 5 : 6, 1); + if (! GTK_TOGGLE_BUTTON (pause_uae_widget)->active) + gtk_widget_hide (lab_info); } static void end_pause_uae (void) { - gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (pause_uae_widget), FALSE); + write_comm_pipe_int (&to_gui_pipe, 3, 1); } static int filesel_active = -1; @@ -550,7 +567,7 @@ static void did_close_insert (gpointer d static void did_insert_select (GtkObject *o) { char *s = gtk_file_selection_get_filename (GTK_FILE_SELECTION (disk_selector)); - printf ("%s\n", s); + printf ("%d %s\n", filesel_active, s); if (quit_gui) return; @@ -561,6 +578,7 @@ static void did_insert_select (GtkObject uae_sem_post (&gui_sem); write_comm_pipe_int (&from_gui_pipe, 1, 0); write_comm_pipe_int (&from_gui_pipe, filesel_active, 1); + gtk_label_set_text (GTK_LABEL (disk_text_widget[filesel_active]), strdup (s)); filesel_active = -1; enable_disk_buttons (1); gtk_widget_destroy (disk_selector); @@ -890,7 +908,7 @@ static GtkWidget *make_led (int nr) thing = gtk_preview_new (GTK_PREVIEW_COLOR); gtk_box_pack_start (GTK_BOX (the_led), thing, TRUE, TRUE, 0); gtk_widget_show (thing); - + return the_led; } @@ -1285,6 +1303,8 @@ static void make_joy_widgets (GtkWidget add_empty_vbox (dvbox); } +static int hd_change_mode; + static void newdir_ok (void) { int n; @@ -1299,6 +1319,10 @@ static void newdir_ok (void) } if (strlen (dirdlg_volname) == 0 || strlen (dirdlg_path) == 0) { /* Uh, no messageboxes in gtk? */ + } else if (hd_change_mode) { + set_filesys_unit (currprefs.mountinfo, selected_hd_row, dirdlg_volname, dirdlg_path, + 0, 0, 0, 0, 0); + set_hd_state (); } else { add_filesys_unit (currprefs.mountinfo, dirdlg_volname, dirdlg_path, 0, 0, 0, 0, 0); @@ -1349,7 +1373,7 @@ static GtkWidget *create_dirdlg (const c GTK_WIDGET_SET_FLAGS (button, GTK_CAN_DEFAULT); gtk_box_pack_start (GTK_BOX (hbox), button, TRUE, TRUE, 0); gtk_widget_grab_default (button); - gtk_widget_show (button); + gtk_widget_show (button); button = gtk_button_new_with_label ("Cancel"); gtk_signal_connect_object (GTK_OBJECT (button), "clicked", @@ -1357,14 +1381,17 @@ static GtkWidget *create_dirdlg (const c GTK_OBJECT (dirdlg)); gtk_box_pack_start (GTK_BOX (hbox), button, TRUE, TRUE, 0); gtk_widget_show (button); + return 0; } static void did_newdir (void) { + hd_change_mode = 0; create_dirdlg ("Add a new mounted directory"); } static void did_newhdf (void) { + hd_change_mode = 0; } static void did_hdchange (void) @@ -1379,6 +1406,7 @@ static void did_hdchange (void) &secspertrack, &surfaces, &reserved, &cylinders, &size, &blocksize); + hd_change_mode = 1; if (is_hardfile (currprefs.mountinfo, selected_hd_row)) { } else { create_dirdlg ("Change a mounted directory"); @@ -1430,8 +1458,10 @@ static void make_hd_widgets (GtkWidget * gtk_clist_set_selection_mode (GTK_CLIST (thing), GTK_SELECTION_SINGLE); gtk_signal_connect (GTK_OBJECT (thing), "select_row", (GtkSignalFunc) hdselect, NULL); gtk_signal_connect (GTK_OBJECT (thing), "unselect_row", (GtkSignalFunc) hdunselect, NULL); - hdlist_widget = thing; + gtk_clist_set_column_auto_resize (GTK_CLIST (thing), 0, TRUE); + gtk_clist_set_column_auto_resize (GTK_CLIST (thing), 1, TRUE); gtk_widget_set_usize (thing, -1, 200); + hdlist_widget = thing; gtk_widget_show (thing); add_centered_to_vbox (dvbox, thing); @@ -1458,7 +1488,7 @@ static void make_hd_widgets (GtkWidget * static void make_about_widgets (GtkWidget *dvbox) { - GtkWidget *thing; + GtkWidget *lab_version; GtkStyle *style; GdkFont *font; char t[20]; @@ -1466,33 +1496,34 @@ static void make_about_widgets (GtkWidge add_empty_vbox (dvbox); sprintf (t, "UAE %d.%d.%d", UAEMAJOR, UAEMINOR, UAESUBREV); - thing = gtk_label_new (t); - gtk_widget_show (thing); - add_centered_to_vbox (dvbox, thing); + lab_version = gtk_label_new (t); + lab_info = gtk_label_new ("Choose your settings, then deselect the Pause button to start!"); font = gdk_font_load ("-*-helvetica-medium-r-normal--*-240-*-*-*-*-*-*"); if (font) { - style = gtk_style_copy (GTK_WIDGET (thing)->style); + style = gtk_style_new (); gdk_font_unref (style->font); style->font = font; gdk_font_ref (style->font); - gtk_widget_push_style (style); - gtk_widget_set_style (thing, style); + gtk_widget_set_style (lab_version, style); + /*gtk_widget_set_style (lab_info, style); */ } - thing = gtk_label_new ("Choose your settings, then deselect the Pause button to start!"); - gtk_widget_show (thing); - add_centered_to_vbox (dvbox, thing); + + add_centered_to_vbox (dvbox, lab_version); + add_centered_to_vbox (dvbox, lab_info); + gtk_widget_show (lab_version); + if (currprefs.start_gui == 1) + gtk_widget_show (lab_info); add_empty_vbox (dvbox); } - static void create_guidlg (void) { - GtkWidget *window, *notebook; + GtkWidget *window; GtkWidget *buttonbox, *vbox, *hbox; GtkWidget *thing; - int i; + unsigned int i; int argc = 1; char *a[] = {"UAE"}; char **argv = a; @@ -1592,7 +1623,6 @@ static void *gtk_gui_thread (void *dummy void gui_changesettings(void) { - } void gui_fps (int x) @@ -1645,7 +1675,7 @@ void gui_handle_events (void) uae_sem_wait (&gui_sem); strncpy (changed_prefs.df[n], new_disk_string[n], 255); free (new_disk_string[n]); - new_disk_string[n][0] = '\0'; + new_disk_string[n] = 0; changed_prefs.df[n][255] = '\0'; uae_sem_post (&gui_sem); break; @@ -1717,7 +1747,7 @@ int gui_init (void) gui_update (); if (currprefs.start_gui == 1) { - gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (pause_uae_widget), TRUE); + write_comm_pipe_int (&to_gui_pipe, 2, 1); write_comm_pipe_int (&from_gui_pipe, 5, 1); /* Handle events until Pause is unchecked. */ gui_handle_events (); @@ -1749,3 +1779,17 @@ void gui_exit (void) quit_gui = 1; uae_sem_wait (&gui_quit_sem); } + +void gui_lock (void) +{ + if (no_gui) + return; + uae_sem_wait (&gui_sem); +} + +void gui_unlock (void) +{ + if (no_gui) + return; + uae_sem_post (&gui_sem); +}