Diff for /np2/x11/gtk2/gtk_menu.c between versions 1.7 and 1.28

version 1.7, 2007/01/12 19:09:58 version 1.28, 2012/01/23 04:57:24
Line 1 Line 1
 /*      $Id$    */  
   
 /*  /*
  * Copyright (c) 2004 NONAKA Kimihiro (aw9k-nnk@asahi-net.or.jp)   * Copyright (c) 2004-2011 NONAKA Kimihiro
  * All rights reserved.   * All rights reserved.
  *   *
  * Redistribution and use in source and binary forms, with or without   * Redistribution and use in source and binary forms, with or without
Line 60 Line 58
 #include "gtk2/gtk_menu.h"  #include "gtk2/gtk_menu.h"
 #include "gtk2/gtk_keyboard.h"  #include "gtk2/gtk_keyboard.h"
   
   #ifndef NSTATSAVE
   #define NSTATSAVE       10
   #endif
   
 /* normal */  /* normal */
 static void cb_bmpsave(GtkAction *action, gpointer user_data);  static void cb_bmpsave(GtkAction *action, gpointer user_data);
Line 79  static void cb_reset(GtkAction *action,  Line 80  static void cb_reset(GtkAction *action, 
 static void cb_sasiopen(GtkAction *action, gpointer user_data);  static void cb_sasiopen(GtkAction *action, gpointer user_data);
 static void cb_sasiremove(GtkAction *action, gpointer user_data);  static void cb_sasiremove(GtkAction *action, gpointer user_data);
 #endif  #endif
   #if defined(SUPPORT_STATSAVE)
   static void cb_statsave(GtkAction *action, gpointer user_data);
   static void cb_statload(GtkAction *action, gpointer user_data);
   #endif
   
 static void cb_dialog(GtkAction *action, gpointer user_data);  static void cb_dialog(GtkAction *action, gpointer user_data);
 static void cb_radio(GtkRadioAction *action, GtkRadioAction *current, gpointer user_data);  static void cb_radio(GtkRadioAction *action, GtkRadioAction *current, gpointer user_data);
Line 91  static GtkActionEntry menu_entries[] = { Line 96  static GtkActionEntry menu_entries[] = {
 { "ScreenMenu",   NULL, "Screen",   NULL, NULL, NULL },  { "ScreenMenu",   NULL, "Screen",   NULL, NULL, NULL },
 { "DeviceMenu",   NULL, "Device",   NULL, NULL, NULL },  { "DeviceMenu",   NULL, "Device",   NULL, NULL, NULL },
 { "OtherMenu",    NULL, "Other",    NULL, NULL, NULL },  { "OtherMenu",    NULL, "Other",    NULL, NULL, NULL },
   { "StatMenu",     NULL, "Stat",     NULL, NULL, NULL },
   
 /* Submenu */  /* Submenu */
 { "Drive1Menu",   NULL, "Drive_1",   NULL, NULL, NULL },  { "Drive1Menu",   NULL, "Drive_1",   NULL, NULL, NULL },
Line 108  static GtkActionEntry menu_entries[] = { Line 114  static GtkActionEntry menu_entries[] = {
 { "SASI1Menu",    NULL, "SASI-_1",   NULL, NULL, NULL },  { "SASI1Menu",    NULL, "SASI-_1",   NULL, NULL, NULL },
 { "SASI2Menu",    NULL, "SASI-_2",   NULL, NULL, NULL },  { "SASI2Menu",    NULL, "SASI-_2",   NULL, NULL, NULL },
 #endif  #endif
   { "ScrnSizeMenu", NULL, "Size",      NULL, NULL, NULL },
 { "SoundMenu",    NULL, "_Sound",    NULL, NULL, NULL },  { "SoundMenu",    NULL, "_Sound",    NULL, NULL, NULL },
   
 /* MenuItem */  /* MenuItem */
Line 146  static GtkActionEntry menu_entries[] = { Line 153  static GtkActionEntry menu_entries[] = {
 { "serialopt",   NULL, "Se_rial option...", NULL, NULL, G_CALLBACK(cb_dialog) },  { "serialopt",   NULL, "Se_rial option...", NULL, NULL, G_CALLBACK(cb_dialog) },
 { "soundopt",    NULL, "So_und option...",  NULL, NULL, G_CALLBACK(cb_dialog) },  { "soundopt",    NULL, "So_und option...",  NULL, NULL, G_CALLBACK(cb_dialog) },
 { "reset",       NULL, "_Reset",            NULL, NULL, G_CALLBACK(cb_reset) },  { "reset",       NULL, "_Reset",            NULL, NULL, G_CALLBACK(cb_reset) },
   #if defined(SUPPORT_STATSAVE)
   { "stat00save",  NULL, "Save 0",            NULL, NULL, G_CALLBACK(cb_statsave), },
   { "stat01save",  NULL, "Save 1",            NULL, NULL, G_CALLBACK(cb_statsave), },
   { "stat02save",  NULL, "Save 2",            NULL, NULL, G_CALLBACK(cb_statsave), },
   { "stat03save",  NULL, "Save 3",            NULL, NULL, G_CALLBACK(cb_statsave), },
   { "stat04save",  NULL, "Save 4",            NULL, NULL, G_CALLBACK(cb_statsave), },
   { "stat05save",  NULL, "Save 5",            NULL, NULL, G_CALLBACK(cb_statsave), },
   { "stat06save",  NULL, "Save 6",            NULL, NULL, G_CALLBACK(cb_statsave), },
   { "stat07save",  NULL, "Save 7",            NULL, NULL, G_CALLBACK(cb_statsave), },
   { "stat08save",  NULL, "Save 8",            NULL, NULL, G_CALLBACK(cb_statsave), },
   { "stat09save",  NULL, "Save 9",            NULL, NULL, G_CALLBACK(cb_statsave), },
   { "stat00load",  NULL, "Load 0",            NULL, NULL, G_CALLBACK(cb_statload), },
   { "stat01load",  NULL, "Load 1",            NULL, NULL, G_CALLBACK(cb_statload), },
   { "stat02load",  NULL, "Load 2",            NULL, NULL, G_CALLBACK(cb_statload), },
   { "stat03load",  NULL, "Load 3",            NULL, NULL, G_CALLBACK(cb_statload), },
   { "stat04load",  NULL, "Load 4",            NULL, NULL, G_CALLBACK(cb_statload), },
   { "stat05load",  NULL, "Load 5",            NULL, NULL, G_CALLBACK(cb_statload), },
   { "stat06load",  NULL, "Load 6",            NULL, NULL, G_CALLBACK(cb_statload), },
   { "stat07load",  NULL, "Load 7",            NULL, NULL, G_CALLBACK(cb_statload), },
   { "stat08load",  NULL, "Load 8",            NULL, NULL, G_CALLBACK(cb_statload), },
   { "stat09load",  NULL, "Load 9",            NULL, NULL, G_CALLBACK(cb_statload), },
   #endif
 };  };
 static const guint n_menu_entries = G_N_ELEMENTS(menu_entries);  static const guint n_menu_entries = G_N_ELEMENTS(menu_entries);
   
Line 212  static GtkRadioActionEntry f12key_entrie Line 241  static GtkRadioActionEntry f12key_entrie
 { "f12mouse", NULL, "F12 = _Mouse",     NULL, NULL, 0 },  { "f12mouse", NULL, "F12 = _Mouse",     NULL, NULL, 0 },
 { "f12copy",  NULL, "F12 = Co_py",      NULL, NULL, 1 },  { "f12copy",  NULL, "F12 = Co_py",      NULL, NULL, 1 },
 { "f12stop",  NULL, "F12 = S_top",      NULL, NULL, 2 },  { "f12stop",  NULL, "F12 = S_top",      NULL, NULL, 2 },
   { "f12help",  NULL, "F12 = _Help",      NULL, NULL, 7 },
 { "f12equal", NULL, "F12 = tenkey [=]", NULL, NULL, 4 },  { "f12equal", NULL, "F12 = tenkey [=]", NULL, NULL, 4 },
 { "f12comma", NULL, "F12 = tenkey [,]", NULL, NULL, 3 },  { "f12comma", NULL, "F12 = tenkey [,]", NULL, NULL, 3 },
 };  };
Line 263  static GtkRadioActionEntry rotate_entrie Line 293  static GtkRadioActionEntry rotate_entrie
 };  };
 static const guint n_rotate_entries = G_N_ELEMENTS(rotate_entries);  static const guint n_rotate_entries = G_N_ELEMENTS(rotate_entries);
   
   static GtkRadioActionEntry screensize_entries[] = {
   { "320x200",  NULL, "320x200",  NULL, NULL, 4 },
   { "480x300",  NULL, "480x300",  NULL, NULL, 6 },
   { "640x400",  NULL, "640x400",  NULL, NULL, 8 },
   { "800x500",  NULL, "800x500",  NULL, NULL, 10 },
   { "960x600",  NULL, "960x600",  NULL, NULL, 12 },
   { "1280x800", NULL, "1280x800", NULL, NULL, 16 },
   };
   static const guint n_screensize_entries = G_N_ELEMENTS(screensize_entries);
   
 static void cb_beepvol(gint idx);  static void cb_beepvol(gint idx);
 static void cb_f12key(gint idx);  static void cb_f12key(gint idx);
 static void cb_framerate(gint idx);  static void cb_framerate(gint idx);
Line 270  static void cb_joykey(gint idx); Line 310  static void cb_joykey(gint idx);
 static void cb_memory(gint idx);  static void cb_memory(gint idx);
 static void cb_rotate(gint idx);  static void cb_rotate(gint idx);
 static void cb_screenmode(gint idx);  static void cb_screenmode(gint idx);
   static void cb_screensize(gint idx);
 static void cb_soundboard(gint idx);  static void cb_soundboard(gint idx);
   
 static const struct {  static const struct {
Line 284  static const struct { Line 325  static const struct {
         { memory_entries, G_N_ELEMENTS(memory_entries), cb_memory },          { memory_entries, G_N_ELEMENTS(memory_entries), cb_memory },
         { rotate_entries, G_N_ELEMENTS(rotate_entries), cb_rotate },          { rotate_entries, G_N_ELEMENTS(rotate_entries), cb_rotate },
         { screenmode_entries, G_N_ELEMENTS(screenmode_entries), cb_screenmode },          { screenmode_entries, G_N_ELEMENTS(screenmode_entries), cb_screenmode },
           { screensize_entries, G_N_ELEMENTS(screensize_entries), cb_screensize },
         { soundboard_entries, G_N_ELEMENTS(soundboard_entries), cb_soundboard },          { soundboard_entries, G_N_ELEMENTS(soundboard_entries), cb_soundboard },
 };  };
 static const guint n_radiomenu_entries = G_N_ELEMENTS(radiomenu_entries);  static const guint n_radiomenu_entries = G_N_ELEMENTS(radiomenu_entries);
Line 298  static const gchar *ui_info = Line 340  static const gchar *ui_info =
 "   <menuitem action='configure'/>\n"  "   <menuitem action='configure'/>\n"
 "   <menuitem action='newdisk'/>\n"  "   <menuitem action='newdisk'/>\n"
 "   <menuitem action='font'/>\n"  "   <menuitem action='font'/>\n"
 "   <menuitem action='configure'/>\n"  
 "   <separator/>\n"  "   <separator/>\n"
 "   <menuitem action='exit'/>\n"  "   <menuitem action='exit'/>\n"
 "  </menu>\n"  "  </menu>\n"
   #if defined(SUPPORT_STATSAVE)
   "  <menu name='Stat' action='StatMenu'>\n"
   "  </menu>\n"
   #endif
 "  <menu name='FDD' action='FDDMenu'>\n"  "  <menu name='FDD' action='FDDMenu'>\n"
 "  </menu>\n"  "  </menu>\n"
 "  <menu name='HardDisk' action='HardDiskMenu'>\n"  "  <menu name='HardDisk' action='HardDiskMenu'>\n"
Line 340  static const gchar *ui_info = Line 385  static const gchar *ui_info =
 "   <menuitem action='dispvsync'/>\n"  "   <menuitem action='dispvsync'/>\n"
 "   <menuitem action='realpalettes'/>\n"  "   <menuitem action='realpalettes'/>\n"
 "   <menuitem action='nowait'/>\n"  "   <menuitem action='nowait'/>\n"
 "   <menuitem name='framerate' action='autoframe'/>\n"  "   <menuitem action='autoframe'/>\n"
 "   <menuitem action='fullframe'/>\n"  "   <menuitem action='fullframe'/>\n"
 "   <menuitem action='1/2 frame'/>\n"  "   <menuitem action='1/2 frame'/>\n"
 "   <menuitem action='1/3 frame'/>\n"  "   <menuitem action='1/3 frame'/>\n"
 "   <menuitem action='1/4 frame'/>\n"  "   <menuitem action='1/4 frame'/>\n"
   #if defined(SUPPORT_SCREENSIZE)
   "   <separator/>\n"
   "   <menu name='Size' action='ScrnSizeMenu'>\n"
   "    <menuitem action='320x200'/>\n"
   "    <menuitem action='480x300'/>\n"
   "    <menuitem action='640x400'/>\n"
   "    <menuitem action='800x500'/>\n"
   "    <menuitem action='960x600'/>\n"
   "    <menuitem action='1280x800'/>\n"
   "   </menu>\n"
   #endif
 "   <separator/>\n"  "   <separator/>\n"
 "   <menuitem action='screenopt'/>\n"  "   <menuitem action='screenopt'/>\n"
 "  </menu>\n"  "  </menu>\n"
Line 361  static const gchar *ui_info = Line 417  static const gchar *ui_info =
 "    <menuitem action='f12mouse'/>\n"  "    <menuitem action='f12mouse'/>\n"
 "    <menuitem action='f12copy'/>\n"  "    <menuitem action='f12copy'/>\n"
 "    <menuitem action='f12stop'/>\n"  "    <menuitem action='f12stop'/>\n"
   "    <menuitem action='f12help'/>\n"
 "    <menuitem action='f12equal'/>\n"  "    <menuitem action='f12equal'/>\n"
 "    <menuitem action='f12comma'/>\n"  "    <menuitem action='f12comma'/>\n"
 "   </menu>\n"  "   </menu>\n"
Line 486  xmenu_select_item_by_index(MENU_HDL hdl, Line 543  xmenu_select_item_by_index(MENU_HDL hdl,
         xmenu_select_item_by_index(NULL, rotate_entries, n_rotate_entries, v);          xmenu_select_item_by_index(NULL, rotate_entries, n_rotate_entries, v);
 #define xmenu_select_screenmode(v) \  #define xmenu_select_screenmode(v) \
         xmenu_select_item_by_index(NULL, screenmode_entries, n_screenmode_entries, v);          xmenu_select_item_by_index(NULL, screenmode_entries, n_screenmode_entries, v);
   #define xmenu_select_screensize(v) \
           xmenu_select_item_by_index(NULL, screensize_entries, n_screensize_entries, v);
 #define xmenu_select_soundboard(v) \  #define xmenu_select_soundboard(v) \
         xmenu_select_item_by_index(NULL, soundboard_entries, n_soundboard_entries, v);          xmenu_select_item_by_index(NULL, soundboard_entries, n_soundboard_entries, v);
   
Line 505  cb_bmpsave(GtkAction *action, gpointer u Line 564  cb_bmpsave(GtkAction *action, gpointer u
         SCRNBMP bmp = NULL;          SCRNBMP bmp = NULL;
         FILEH fh;          FILEH fh;
   
         UNUSED(action);  
         UNUSED(user_data);  
   
         uninstall_idle_process();          uninstall_idle_process();
   
         bmp = scrnbmp();          bmp = scrnbmp();
Line 522  cb_bmpsave(GtkAction *action, gpointer u Line 578  cb_bmpsave(GtkAction *action, gpointer u
         if (dialog == NULL)          if (dialog == NULL)
                 goto end;                  goto end;
   
         g_object_set(G_OBJECT(dialog), "show-hidden", TRUE, NULL);          gtk_file_chooser_set_show_hidden(GTK_FILE_CHOOSER(dialog), TRUE);
         gtk_file_chooser_set_select_multiple(GTK_FILE_CHOOSER(dialog), FALSE);  #if GTK_MAJOR_VERSION >= 2 && GTK_MINOR_VERSION >= 8
           gtk_file_chooser_set_do_overwrite_confirmation(GTK_FILE_CHOOSER(dialog),
               TRUE);
   #endif
           if (strlen(bmpfilefolder) == 0) {
                   g_strlcpy(bmpfilefolder, modulefile, sizeof(bmpfilefolder));
                   file_cutname(bmpfilefolder);
           }
         utf8 = g_filename_to_utf8(bmpfilefolder, -1, NULL, NULL, NULL);          utf8 = g_filename_to_utf8(bmpfilefolder, -1, NULL, NULL, NULL);
         if (utf8) {          if (utf8) {
                 gtk_file_chooser_set_current_folder(GTK_FILE_CHOOSER(dialog), utf8);                  gtk_file_chooser_set_filename(GTK_FILE_CHOOSER(dialog), utf8);
                 g_free(utf8);                  g_free(utf8);
         }          }
   
Line 551  cb_bmpsave(GtkAction *action, gpointer u Line 614  cb_bmpsave(GtkAction *action, gpointer u
         if (utf8) {          if (utf8) {
                 path = g_filename_from_utf8(utf8, -1, NULL, NULL, NULL);                  path = g_filename_from_utf8(utf8, -1, NULL, NULL, NULL);
                 if (path) {                  if (path) {
                           gchar *ext = file_getext(path);
                           if (strlen(ext) != 3 || file_cmpname(ext, "bmp")) {
                                   gchar *tmp = g_strjoin(".", path, "bmp", NULL);
                                   g_free(path);
                                   path = tmp;
                           }
                         file_cpyname(bmpfilefolder, path, sizeof(bmpfilefolder));                          file_cpyname(bmpfilefolder, path, sizeof(bmpfilefolder));
                         sysmng_update(SYS_UPDATEOSCFG);                          sysmng_update(SYS_UPDATEOSCFG);
                         fh = file_create(path);                          fh = file_create(path);
Line 579  cb_change_font(GtkAction *action, gpoint Line 648  cb_change_font(GtkAction *action, gpoint
         gchar *utf8, *path;          gchar *utf8, *path;
         struct stat sb;          struct stat sb;
   
         UNUSED(action);  
         UNUSED(user_data);  
   
         uninstall_idle_process();          uninstall_idle_process();
   
         dialog = gtk_file_chooser_dialog_new("Open a font file",          dialog = gtk_file_chooser_dialog_new("Open a font file",
Line 592  cb_change_font(GtkAction *action, gpoint Line 658  cb_change_font(GtkAction *action, gpoint
         if (dialog == NULL)          if (dialog == NULL)
                 goto end;                  goto end;
   
         g_object_set(G_OBJECT(dialog), "show-hidden", TRUE, NULL);          gtk_file_chooser_set_show_hidden(GTK_FILE_CHOOSER(dialog), TRUE);
         gtk_file_chooser_set_select_multiple(GTK_FILE_CHOOSER(dialog), FALSE);  
         utf8 = g_filename_to_utf8(np2cfg.fontfile, -1, NULL, NULL, NULL);          utf8 = g_filename_to_utf8(np2cfg.fontfile, -1, NULL, NULL, NULL);
         if (utf8) {          if (utf8) {
                 gtk_file_chooser_set_filename(GTK_FILE_CHOOSER(dialog), utf8);                  gtk_file_chooser_set_filename(GTK_FILE_CHOOSER(dialog), utf8);
Line 645  cb_diskeject(GtkAction *action, gpointer Line 710  cb_diskeject(GtkAction *action, gpointer
         const gchar *name = gtk_action_get_name(action);          const gchar *name = gtk_action_get_name(action);
         guint drive;          guint drive;
   
         UNUSED(user_data);  
   
         /* name = "disk?eject" */          /* name = "disk?eject" */
         if ((strlen(name) >= 5) && (g_ascii_isdigit(name[4]))) {          if ((strlen(name) >= 5) && (g_ascii_isdigit(name[4]))) {
                 drive = g_ascii_digit_value(name[4]) - 1;                  drive = g_ascii_digit_value(name[4]) - 1;
Line 667  cb_diskopen(GtkAction *action, gpointer  Line 730  cb_diskopen(GtkAction *action, gpointer 
         const gchar *name = gtk_action_get_name(action);          const gchar *name = gtk_action_get_name(action);
         guint drive;          guint drive;
   
         UNUSED(user_data);  
   
         if ((strlen(name) < 5) || (!g_ascii_isdigit(name[4])))          if ((strlen(name) < 5) || (!g_ascii_isdigit(name[4])))
                 return;                  return;
         drive = g_ascii_digit_value(name[4]) - 1;          drive = g_ascii_digit_value(name[4]) - 1;
Line 683  cb_diskopen(GtkAction *action, gpointer  Line 744  cb_diskopen(GtkAction *action, gpointer 
         if (dialog == NULL)          if (dialog == NULL)
                 goto end;                  goto end;
   
         g_object_set(G_OBJECT(dialog), "show-hidden", TRUE, NULL);          gtk_file_chooser_set_show_hidden(GTK_FILE_CHOOSER(dialog), TRUE);
         gtk_file_chooser_set_select_multiple(GTK_FILE_CHOOSER(dialog), FALSE);  
         utf8 = g_filename_to_utf8(fddfolder, -1, NULL, NULL, NULL);          utf8 = g_filename_to_utf8(fddfolder, -1, NULL, NULL, NULL);
         if (utf8) {          if (utf8) {
                 gtk_file_chooser_set_filename(GTK_FILE_CHOOSER(dialog), utf8);                  gtk_file_chooser_set_filename(GTK_FILE_CHOOSER(dialog), utf8);
Line 710  cb_diskopen(GtkAction *action, gpointer  Line 770  cb_diskopen(GtkAction *action, gpointer 
                 gtk_file_filter_add_pattern(filter, "*.2[hH][dD]");                  gtk_file_filter_add_pattern(filter, "*.2[hH][dD]");
                 gtk_file_filter_add_pattern(filter, "*.[fF][dD][iI]");                  gtk_file_filter_add_pattern(filter, "*.[fF][dD][iI]");
                 gtk_file_filter_add_pattern(filter, "*.[fF][sS]");                  gtk_file_filter_add_pattern(filter, "*.[fF][sS]");
                   gtk_file_filter_add_pattern(filter, "*.[fF][lL][pP]");
                 gtk_file_chooser_add_filter(GTK_FILE_CHOOSER(dialog), filter);                  gtk_file_chooser_add_filter(GTK_FILE_CHOOSER(dialog), filter);
         }          }
         filter = gtk_file_filter_new();          filter = gtk_file_filter_new();
Line 726  cb_diskopen(GtkAction *action, gpointer  Line 787  cb_diskopen(GtkAction *action, gpointer 
                 gtk_file_filter_add_pattern(filter, "*.2[hH][dD]");                  gtk_file_filter_add_pattern(filter, "*.2[hH][dD]");
                 gtk_file_filter_add_pattern(filter, "*.[fF][dD][iI]");                  gtk_file_filter_add_pattern(filter, "*.[fF][dD][iI]");
                 gtk_file_filter_add_pattern(filter, "*.[fF][sS]");                  gtk_file_filter_add_pattern(filter, "*.[fF][sS]");
                   gtk_file_filter_add_pattern(filter, "*.[fF][lL][pP]");
                 gtk_file_chooser_add_filter(GTK_FILE_CHOOSER(dialog), filter);                  gtk_file_chooser_add_filter(GTK_FILE_CHOOSER(dialog), filter);
         }          }
         gtk_file_chooser_set_filter(GTK_FILE_CHOOSER(dialog), filter);          gtk_file_chooser_set_filter(GTK_FILE_CHOOSER(dialog), filter);
Line 770  cb_ataopen(GtkAction *action, gpointer u Line 832  cb_ataopen(GtkAction *action, gpointer u
         const gchar *name = gtk_action_get_name(action);          const gchar *name = gtk_action_get_name(action);
         guint channel, drive;          guint channel, drive;
   
         UNUSED(user_data);  
   
         /* "ata??open" */          /* "ata??open" */
         if ((strlen(name) < 5)          if ((strlen(name) < 5)
          || (!g_ascii_isdigit(name[3]))           || (!g_ascii_isdigit(name[3]))
Line 794  cb_ataopen(GtkAction *action, gpointer u Line 854  cb_ataopen(GtkAction *action, gpointer u
         if (dialog == NULL)          if (dialog == NULL)
                 goto end;                  goto end;
   
         g_object_set(G_OBJECT(dialog), "show-hidden", TRUE, NULL);          gtk_file_chooser_set_show_hidden(GTK_FILE_CHOOSER(dialog), TRUE);
         gtk_file_chooser_set_select_multiple(GTK_FILE_CHOOSER(dialog), FALSE);  
         utf8 = g_filename_to_utf8(hddfolder, -1, NULL, NULL, NULL);          utf8 = g_filename_to_utf8(hddfolder, -1, NULL, NULL, NULL);
         if (utf8) {          if (utf8) {
                 gtk_file_chooser_set_filename(GTK_FILE_CHOOSER(dialog), utf8);                  gtk_file_chooser_set_filename(GTK_FILE_CHOOSER(dialog), utf8);
Line 811  cb_ataopen(GtkAction *action, gpointer u Line 870  cb_ataopen(GtkAction *action, gpointer u
         filter = gtk_file_filter_new();          filter = gtk_file_filter_new();
         if (filter) {          if (filter) {
                 gtk_file_filter_set_name(filter, "IDE disk image files");                  gtk_file_filter_set_name(filter, "IDE disk image files");
                   gtk_file_filter_add_pattern(filter, "*.[tT][hH][dD]");
                   gtk_file_filter_add_pattern(filter, "*.[hH][dD][iI]");
                 gtk_file_filter_add_pattern(filter, "*.[nN][hH][dD]");                  gtk_file_filter_add_pattern(filter, "*.[nN][hH][dD]");
                 gtk_file_chooser_add_filter(GTK_FILE_CHOOSER(dialog), filter);                  gtk_file_chooser_add_filter(GTK_FILE_CHOOSER(dialog), filter);
         }          }
Line 845  cb_ataremove(GtkAction *action, gpointer Line 906  cb_ataremove(GtkAction *action, gpointer
         const gchar *name = gtk_action_get_name(GTK_ACTION(action));          const gchar *name = gtk_action_get_name(GTK_ACTION(action));
         guint channel, drive;          guint channel, drive;
   
         UNUSED(user_data);  
   
         /* "ata??open" */          /* "ata??open" */
         if ((strlen(name) < 5)          if ((strlen(name) < 5)
          || (!g_ascii_isdigit(name[3]))           || (!g_ascii_isdigit(name[3]))
Line 871  cb_atapiopen(GtkAction *action, gpointer Line 930  cb_atapiopen(GtkAction *action, gpointer
         gchar *utf8, *path;          gchar *utf8, *path;
         struct stat sb;          struct stat sb;
   
         UNUSED(action);  
         UNUSED(user_data);  
   
         uninstall_idle_process();          uninstall_idle_process();
   
         dialog = gtk_file_chooser_dialog_new("Open a ATAPI CD-ROM image",          dialog = gtk_file_chooser_dialog_new("Open a ATAPI CD-ROM image",
Line 884  cb_atapiopen(GtkAction *action, gpointer Line 940  cb_atapiopen(GtkAction *action, gpointer
         if (dialog == NULL)          if (dialog == NULL)
                 goto end;                  goto end;
   
         g_object_set(G_OBJECT(dialog), "show-hidden", TRUE, NULL);          gtk_file_chooser_set_show_hidden(GTK_FILE_CHOOSER(dialog), TRUE);
         gtk_file_chooser_set_select_multiple(GTK_FILE_CHOOSER(dialog), FALSE);  
         utf8 = g_filename_to_utf8(hddfolder, -1, NULL, NULL, NULL);          utf8 = g_filename_to_utf8(hddfolder, -1, NULL, NULL, NULL);
         if (utf8) {          if (utf8) {
                 gtk_file_chooser_set_filename(GTK_FILE_CHOOSER(dialog), utf8);                  gtk_file_chooser_set_filename(GTK_FILE_CHOOSER(dialog), utf8);
Line 939  static void Line 994  static void
 cb_atapiremove(GtkAction *action, gpointer user_data)  cb_atapiremove(GtkAction *action, gpointer user_data)
 {  {
   
         UNUSED(action);  
         UNUSED(user_data);  
   
         sxsi_devclose(0x02);          sxsi_devclose(0x02);
 }  }
 #endif  /* SUPPORT_IDEIO */  #endif  /* SUPPORT_IDEIO */
Line 950  static void Line 1002  static void
 cb_midipanic(GtkAction *action, gpointer user_data)  cb_midipanic(GtkAction *action, gpointer user_data)
 {  {
   
         UNUSED(action);  
         UNUSED(user_data);  
   
         rs232c_midipanic();          rs232c_midipanic();
         mpu98ii_midipanic();          mpu98ii_midipanic();
         pc9861k_midipanic();          pc9861k_midipanic();
Line 981  cb_newdisk(GtkAction *action, gpointer u Line 1030  cb_newdisk(GtkAction *action, gpointer u
         int kind;          int kind;
         int i;          int i;
   
         UNUSED(action);  
         UNUSED(user_data);  
   
         uninstall_idle_process();          uninstall_idle_process();
   
         dialog = gtk_file_chooser_dialog_new("Create new disk image file",          dialog = gtk_file_chooser_dialog_new("Create new disk image file",
Line 994  cb_newdisk(GtkAction *action, gpointer u Line 1040  cb_newdisk(GtkAction *action, gpointer u
         if (dialog == NULL)          if (dialog == NULL)
                 goto end;                  goto end;
   
         g_object_set(G_OBJECT(dialog), "show-hidden", TRUE, NULL);          gtk_file_chooser_set_show_hidden(GTK_FILE_CHOOSER(dialog), TRUE);
         gtk_file_chooser_set_select_multiple(GTK_FILE_CHOOSER(dialog), FALSE);  #if GTK_MAJOR_VERSION >= 2 && GTK_MINOR_VERSION >= 8
           gtk_file_chooser_set_do_overwrite_confirmation(GTK_FILE_CHOOSER(dialog),
               TRUE);
   #endif
           if (strlen(fddfolder) == 0) {
                   g_strlcpy(fddfolder, modulefile, sizeof(fddfolder));
                   file_cutname(fddfolder);
           }
         utf8 = g_filename_to_utf8(fddfolder, -1, NULL, NULL, NULL);          utf8 = g_filename_to_utf8(fddfolder, -1, NULL, NULL, NULL);
         if (utf8) {          if (utf8) {
                 gtk_file_chooser_set_current_folder(GTK_FILE_CHOOSER(dialog), utf8);                  gtk_file_chooser_set_current_folder(GTK_FILE_CHOOSER(dialog), utf8);
Line 1009  cb_newdisk(GtkAction *action, gpointer u Line 1062  cb_newdisk(GtkAction *action, gpointer u
   
         filter[0] = gtk_file_filter_new();          filter[0] = gtk_file_filter_new();
         if (filter[0]) {          if (filter[0]) {
                 gtk_file_filter_set_name(filter[0], "D88 floppy disk image");                  gtk_file_filter_set_name(filter[0], "D88 floppy disk image (*.d88,*.d98,*.88d,*.98d)");
                 gtk_file_filter_add_pattern(filter[0], "*.[dD]88");                  gtk_file_filter_add_pattern(filter[0], "*.[dD]88");
                 gtk_file_filter_add_pattern(filter[0], "*.88[dD]");                  gtk_file_filter_add_pattern(filter[0], "*.88[dD]");
                 gtk_file_filter_add_pattern(filter[0], "*.[dD]98");                  gtk_file_filter_add_pattern(filter[0], "*.[dD]98");
Line 1018  cb_newdisk(GtkAction *action, gpointer u Line 1071  cb_newdisk(GtkAction *action, gpointer u
         }          }
         filter[1] = gtk_file_filter_new();          filter[1] = gtk_file_filter_new();
         if (filter[1]) {          if (filter[1]) {
                 gtk_file_filter_set_name(filter[1], "Anex86 hard disk image files");                  gtk_file_filter_set_name(filter[1], "Anex86 hard disk image (*.hdi)");
                 gtk_file_filter_add_pattern(filter[1], "*.[hH][dD][iI]");                  gtk_file_filter_add_pattern(filter[1], "*.[hH][dD][iI]");
                 gtk_file_chooser_add_filter(GTK_FILE_CHOOSER(dialog), filter[1]);                  gtk_file_chooser_add_filter(GTK_FILE_CHOOSER(dialog), filter[1]);
         }          }
         filter[2] = gtk_file_filter_new();          filter[2] = gtk_file_filter_new();
         if (filter[2]) {          if (filter[2]) {
                 gtk_file_filter_set_name(filter[2], "T98 hard disk image files");                  gtk_file_filter_set_name(filter[2], "T98 hard disk image (*.thd)");
                 gtk_file_filter_add_pattern(filter[2], "*.[tT][hH][dD]");                  gtk_file_filter_add_pattern(filter[2], "*.[tT][hH][dD]");
                 gtk_file_chooser_add_filter(GTK_FILE_CHOOSER(dialog), filter[2]);                  gtk_file_chooser_add_filter(GTK_FILE_CHOOSER(dialog), filter[2]);
         }          }
         filter[3] = gtk_file_filter_new();          filter[3] = gtk_file_filter_new();
         if (filter[3]) {          if (filter[3]) {
                 gtk_file_filter_set_name(filter[3], "T98-Next hard disk image files");                  gtk_file_filter_set_name(filter[3], "T98-Next hard disk image (*.nhd)");
                 gtk_file_filter_add_pattern(filter[3], "*.[nN][hH][dD]");                  gtk_file_filter_add_pattern(filter[3], "*.[nN][hH][dD]");
                 gtk_file_chooser_add_filter(GTK_FILE_CHOOSER(dialog), filter[3]);                  gtk_file_chooser_add_filter(GTK_FILE_CHOOSER(dialog), filter[3]);
         }          }
         gtk_file_chooser_set_filter(GTK_FILE_CHOOSER(dialog), filter[0]);          gtk_file_chooser_set_filter(GTK_FILE_CHOOSER(dialog), filter[0]);
   
         if (gtk_dialog_run(GTK_DIALOG(dialog)) != GTK_RESPONSE_OK) {          if (gtk_dialog_run(GTK_DIALOG(dialog)) != GTK_RESPONSE_OK)
                 gtk_widget_destroy(dialog);                  goto end;
                 install_idle_process();  
                 return;  
         }  
   
         utf8 = gtk_file_chooser_get_filename(GTK_FILE_CHOOSER(dialog));          utf8 = gtk_file_chooser_get_filename(GTK_FILE_CHOOSER(dialog));
         if (utf8 == NULL)          if (utf8 == NULL)
Line 1106  static void Line 1156  static void
 cb_reset(GtkAction *action, gpointer user_data)  cb_reset(GtkAction *action, gpointer user_data)
 {  {
   
         UNUSED(action);  
         UNUSED(user_data);  
   
         pccore_cfgupdate();          pccore_cfgupdate();
         pccore_reset();          pccore_reset();
 }  }
Line 1124  cb_sasiopen(GtkAction *action, gpointer  Line 1171  cb_sasiopen(GtkAction *action, gpointer 
         const gchar *name = gtk_action_get_name(action);          const gchar *name = gtk_action_get_name(action);
         guint drive;          guint drive;
   
         UNUSED(user_data);  
   
         if ((strlen(name) < 5) || (!g_ascii_isdigit(name[4])))          if ((strlen(name) < 5) || (!g_ascii_isdigit(name[4])))
                 return;                  return;
         drive = g_ascii_digit_value(name[4]) - 1;          drive = g_ascii_digit_value(name[4]) - 1;
Line 1140  cb_sasiopen(GtkAction *action, gpointer  Line 1185  cb_sasiopen(GtkAction *action, gpointer 
         if (dialog == NULL)          if (dialog == NULL)
                 goto end;                  goto end;
   
         g_object_set(G_OBJECT(dialog), "show-hidden", TRUE, NULL);          gtk_file_chooser_set_show_hidden(GTK_FILE_CHOOSER(dialog), TRUE);
         gtk_file_chooser_set_select_multiple(GTK_FILE_CHOOSER(dialog), FALSE);  
         utf8 = g_filename_to_utf8(hddfolder, -1, NULL, NULL, NULL);          utf8 = g_filename_to_utf8(hddfolder, -1, NULL, NULL, NULL);
         if (utf8) {          if (utf8) {
                 gtk_file_chooser_set_filename(GTK_FILE_CHOOSER(dialog), utf8);                  gtk_file_chooser_set_filename(GTK_FILE_CHOOSER(dialog), utf8);
Line 1193  cb_sasiremove(GtkAction *action, gpointe Line 1237  cb_sasiremove(GtkAction *action, gpointe
         const gchar *name = gtk_action_get_name(GTK_ACTION(action));          const gchar *name = gtk_action_get_name(GTK_ACTION(action));
         guint drive;          guint drive;
   
         UNUSED(user_data);  
   
         /* name = "sasi?eject" */          /* name = "sasi?eject" */
         if ((strlen(name) >= 5) && (g_ascii_isdigit(name[4]))) {          if ((strlen(name) >= 5) && (g_ascii_isdigit(name[4]))) {
                 drive = g_ascii_digit_value(name[4]) - 1;                  drive = g_ascii_digit_value(name[4]) - 1;
Line 1205  cb_sasiremove(GtkAction *action, gpointe Line 1247  cb_sasiremove(GtkAction *action, gpointe
 }  }
 #endif  /* !SUPPORT_IDEIO */  #endif  /* !SUPPORT_IDEIO */
   
   #if defined(SUPPORT_STATSAVE)
   static void
   cb_statsave(GtkAction *action, gpointer user_data)
   {
           const gchar *name = gtk_action_get_name(GTK_ACTION(action));
           char ext[4];
           guint n;
   
           /* name = "stat??save" */
           if ((strlen(name) >= 6)
            && (g_ascii_isdigit(name[4]))
            && (g_ascii_isdigit(name[5]))) {
                   n = g_ascii_digit_value(name[4]) * 10;
                   n += g_ascii_digit_value(name[5]);
                   g_snprintf(ext, sizeof(ext), np2flagext, n);
                   flagsave(ext);
           }
   }
   
   static void
   cb_statload(GtkAction *action, gpointer user_data)
   {
           const gchar *name = gtk_action_get_name(GTK_ACTION(action));
           char ext[4];
           guint n;
   
           /* name = "stat??load" */
           if ((strlen(name) >= 6)
            && (g_ascii_isdigit(name[4]))
            && (g_ascii_isdigit(name[5]))) {
                   n = g_ascii_digit_value(name[4]) * 10;
                   n += g_ascii_digit_value(name[5]);
                   g_snprintf(ext, sizeof(ext), np2flagext, n);
                   flagload(ext, "Status Load", TRUE);
           }
   }
   #endif
   
 static void  static void
 cb_dialog(GtkAction *action, gpointer user_data)  cb_dialog(GtkAction *action, gpointer user_data)
 {  {
         const gchar *name = gtk_action_get_name(action);          const gchar *name = gtk_action_get_name(action);
   
         UNUSED(user_data);  
   
         if (g_ascii_strcasecmp(name, "configure") == 0) {          if (g_ascii_strcasecmp(name, "configure") == 0) {
                 create_configure_dialog();                  create_configure_dialog();
         } else if (g_ascii_strcasecmp(name, "soundopt") == 0) {          } else if (g_ascii_strcasecmp(name, "soundopt") == 0) {
Line 1238  cb_clockdisp(GtkToggleAction *action, gp Line 1316  cb_clockdisp(GtkToggleAction *action, gp
         gboolean b = gtk_toggle_action_get_active(action);          gboolean b = gtk_toggle_action_get_active(action);
         gboolean f;          gboolean f;
   
         UNUSED(user_data);  
   
         f = (np2oscfg.DISPCLK & 1) ^ (b ? 1 : 0);          f = (np2oscfg.DISPCLK & 1) ^ (b ? 1 : 0);
         if (f) {          if (f) {
                 np2oscfg.DISPCLK ^= 1;                  np2oscfg.DISPCLK ^= 1;
Line 1255  cb_dispvsync(GtkToggleAction *action, gp Line 1331  cb_dispvsync(GtkToggleAction *action, gp
         gboolean b = gtk_toggle_action_get_active(action);          gboolean b = gtk_toggle_action_get_active(action);
         gboolean f;          gboolean f;
   
         UNUSED(user_data);  
   
         f = (np2cfg.DISPSYNC ? 1 : 0) ^ (b ? 1 : 0);          f = (np2cfg.DISPSYNC ? 1 : 0) ^ (b ? 1 : 0);
         if (f) {          if (f) {
                 np2cfg.DISPSYNC = !np2cfg.DISPSYNC;                  np2cfg.DISPSYNC = !np2cfg.DISPSYNC;
Line 1270  cb_framedisp(GtkToggleAction *action, gp Line 1344  cb_framedisp(GtkToggleAction *action, gp
         gboolean b = gtk_toggle_action_get_active(action);          gboolean b = gtk_toggle_action_get_active(action);
         gboolean f;          gboolean f;
   
         UNUSED(user_data);  
   
         f = (np2oscfg.DISPCLK & 2) ^ (b ? 2 : 0);          f = (np2oscfg.DISPCLK & 2) ^ (b ? 2 : 0);
         if (f) {          if (f) {
                 np2oscfg.DISPCLK ^= 2;                  np2oscfg.DISPCLK ^= 2;
Line 1287  cb_jastsound(GtkToggleAction *action, gp Line 1359  cb_jastsound(GtkToggleAction *action, gp
         gboolean b = gtk_toggle_action_get_active(action);          gboolean b = gtk_toggle_action_get_active(action);
         gboolean f;          gboolean f;
   
         UNUSED(user_data);  
   
         f = (np2oscfg.jastsnd ? 1 : 0) ^ (b ? 1 : 0);          f = (np2oscfg.jastsnd ? 1 : 0) ^ (b ? 1 : 0);
         if (f) {          if (f) {
                 np2oscfg.jastsnd = !np2oscfg.jastsnd;                  np2oscfg.jastsnd = !np2oscfg.jastsnd;
Line 1302  cb_joyrapid(GtkToggleAction *action, gpo Line 1372  cb_joyrapid(GtkToggleAction *action, gpo
         gboolean b = gtk_toggle_action_get_active(action);          gboolean b = gtk_toggle_action_get_active(action);
         gboolean f;          gboolean f;
   
         UNUSED(user_data);  
   
         f = (np2cfg.BTN_RAPID ? 1 : 0) ^ (b ? 1 : 0);          f = (np2cfg.BTN_RAPID ? 1 : 0) ^ (b ? 1 : 0);
         if (f) {          if (f) {
                 np2cfg.BTN_RAPID = !np2cfg.BTN_RAPID;                  np2cfg.BTN_RAPID = !np2cfg.BTN_RAPID;
Line 1317  cb_joyreverse(GtkToggleAction *action, g Line 1385  cb_joyreverse(GtkToggleAction *action, g
         gboolean b = gtk_toggle_action_get_active(action);          gboolean b = gtk_toggle_action_get_active(action);
         gboolean f;          gboolean f;
   
         UNUSED(user_data);  
   
         f = (np2cfg.BTN_MODE ? 1 : 0) ^ (b ? 1 : 0);          f = (np2cfg.BTN_MODE ? 1 : 0) ^ (b ? 1 : 0);
         if (f) {          if (f) {
                 np2cfg.BTN_MODE = !np2cfg.BTN_MODE;                  np2cfg.BTN_MODE = !np2cfg.BTN_MODE;
Line 1332  cb_keydisplay(GtkToggleAction *action, g Line 1398  cb_keydisplay(GtkToggleAction *action, g
         gboolean b = gtk_toggle_action_get_active(action);          gboolean b = gtk_toggle_action_get_active(action);
         gboolean f;          gboolean f;
   
         UNUSED(user_data);  
   
         f = (np2oscfg.keydisp ? 1 : 0) ^ (b ? 1 : 0);          f = (np2oscfg.keydisp ? 1 : 0) ^ (b ? 1 : 0);
         if (f) {          if (f) {
                 np2oscfg.keydisp = !np2oscfg.keydisp;                  np2oscfg.keydisp = !np2oscfg.keydisp;
Line 1352  cb_mousemode(GtkToggleAction *action, gp Line 1416  cb_mousemode(GtkToggleAction *action, gp
         gboolean b = gtk_toggle_action_get_active(action);          gboolean b = gtk_toggle_action_get_active(action);
         gboolean f;          gboolean f;
   
         UNUSED(user_data);  
   
         f = (np2oscfg.MOUSE_SW ? 1 : 0) ^ (b ? 1 : 0);          f = (np2oscfg.MOUSE_SW ? 1 : 0) ^ (b ? 1 : 0);
         if (f) {          if (f) {
                 mouse_running(MOUSE_XOR);                  mouse_running(MOUSE_XOR);
Line 1368  cb_mouserapid(GtkToggleAction *action, g Line 1430  cb_mouserapid(GtkToggleAction *action, g
         gboolean b = gtk_toggle_action_get_active(action);          gboolean b = gtk_toggle_action_get_active(action);
         gboolean f;          gboolean f;
   
         UNUSED(user_data);  
   
         f = (np2cfg.MOUSERAPID ? 1 : 0) ^ (b ? 1 : 0);          f = (np2cfg.MOUSERAPID ? 1 : 0) ^ (b ? 1 : 0);
         if (f) {          if (f) {
                 np2cfg.MOUSERAPID = !np2cfg.MOUSERAPID;                  np2cfg.MOUSERAPID = !np2cfg.MOUSERAPID;
Line 1383  cb_nowait(GtkToggleAction *action, gpoin Line 1443  cb_nowait(GtkToggleAction *action, gpoin
         gboolean b = gtk_toggle_action_get_active(action);          gboolean b = gtk_toggle_action_get_active(action);
         gboolean f;          gboolean f;
   
         UNUSED(user_data);  
   
         f = (np2oscfg.NOWAIT ? 1 : 0) ^ (b ? 1 : 0);          f = (np2oscfg.NOWAIT ? 1 : 0) ^ (b ? 1 : 0);
         if (f) {          if (f) {
                 np2oscfg.NOWAIT = !np2oscfg.NOWAIT;                  np2oscfg.NOWAIT = !np2oscfg.NOWAIT;
Line 1398  cb_realpalettes(GtkToggleAction *action, Line 1456  cb_realpalettes(GtkToggleAction *action,
         gboolean b = gtk_toggle_action_get_active(action);          gboolean b = gtk_toggle_action_get_active(action);
         gboolean f;          gboolean f;
   
         UNUSED(user_data);  
   
         f = (np2cfg.RASTER ? 1 : 0) ^ (b ? 1 : 0);          f = (np2cfg.RASTER ? 1 : 0) ^ (b ? 1 : 0);
         if (f) {          if (f) {
                 np2cfg.RASTER = !np2cfg.RASTER;                  np2cfg.RASTER = !np2cfg.RASTER;
Line 1415  cb_s98logging(GtkToggleAction *action, g Line 1471  cb_s98logging(GtkToggleAction *action, g
         gboolean b = gtk_toggle_action_get_active(action);          gboolean b = gtk_toggle_action_get_active(action);
         gboolean f;          gboolean f;
   
         UNUSED(user_data);  
   
         f = (s98logging ? 1 : 0) ^ (b ? 1 : 0);          f = (s98logging ? 1 : 0) ^ (b ? 1 : 0);
         if (f) {          if (f) {
                 s98logging = !s98logging;                  s98logging = !s98logging;
Line 1438  cb_seeksound(GtkToggleAction *action, gp Line 1492  cb_seeksound(GtkToggleAction *action, gp
         gboolean b = gtk_toggle_action_get_active(action);          gboolean b = gtk_toggle_action_get_active(action);
         gboolean f;          gboolean f;
   
         UNUSED(user_data);  
   
         f = (np2cfg.MOTOR ? 1 : 0) ^ (b ? 1 : 0);          f = (np2cfg.MOTOR ? 1 : 0) ^ (b ? 1 : 0);
         if (f) {          if (f) {
                 np2cfg.MOTOR = !np2cfg.MOTOR;                  np2cfg.MOTOR = !np2cfg.MOTOR;
Line 1453  cb_softkeyboard(GtkToggleAction *action, Line 1505  cb_softkeyboard(GtkToggleAction *action,
         gboolean b = gtk_toggle_action_get_active(action);          gboolean b = gtk_toggle_action_get_active(action);
         gboolean f;          gboolean f;
   
         UNUSED(user_data);  
   
         f = (np2oscfg.softkbd ? 1 : 0) ^ (b ? 1 : 0);          f = (np2oscfg.softkbd ? 1 : 0) ^ (b ? 1 : 0);
         if (f) {          if (f) {
                 np2oscfg.softkbd = !np2oscfg.softkbd;                  np2oscfg.softkbd = !np2oscfg.softkbd;
Line 1473  cb_toolwindow(GtkToggleAction *action, g Line 1523  cb_toolwindow(GtkToggleAction *action, g
         gboolean b = gtk_toggle_action_get_active(action);          gboolean b = gtk_toggle_action_get_active(action);
         gboolean f;          gboolean f;
   
         UNUSED(user_data);  
   
         f = (np2oscfg.toolwin ? 1 : 0) ^ (b ? 1 : 0);          f = (np2oscfg.toolwin ? 1 : 0) ^ (b ? 1 : 0);
         if (f) {          if (f) {
                 np2oscfg.toolwin = !np2oscfg.toolwin;                  np2oscfg.toolwin = !np2oscfg.toolwin;
Line 1493  cb_xctrlkey(GtkToggleAction *action, gpo Line 1541  cb_xctrlkey(GtkToggleAction *action, gpo
         gboolean b = gtk_toggle_action_get_active(action);          gboolean b = gtk_toggle_action_get_active(action);
         gboolean f;          gboolean f;
   
         UNUSED(user_data);  
   
         f = (np2cfg.XSHIFT & 2) ^ (b ? 2 : 0);          f = (np2cfg.XSHIFT & 2) ^ (b ? 2 : 0);
         if (f) {          if (f) {
                 np2cfg.XSHIFT ^= 2;                  np2cfg.XSHIFT ^= 2;
Line 1509  cb_xgrphkey(GtkToggleAction *action, gpo Line 1555  cb_xgrphkey(GtkToggleAction *action, gpo
         gboolean b = gtk_toggle_action_get_active(action);          gboolean b = gtk_toggle_action_get_active(action);
         gboolean f;          gboolean f;
   
         UNUSED(user_data);  
   
         f = (np2cfg.XSHIFT & 4) ^ (b ? 4 : 0);          f = (np2cfg.XSHIFT & 4) ^ (b ? 4 : 0);
         if (f) {          if (f) {
                 np2cfg.XSHIFT ^= 4;                  np2cfg.XSHIFT ^= 4;
Line 1525  cb_xshiftkey(GtkToggleAction *action, gp Line 1569  cb_xshiftkey(GtkToggleAction *action, gp
         gboolean b = gtk_toggle_action_get_active(action);          gboolean b = gtk_toggle_action_get_active(action);
         gboolean f;          gboolean f;
   
         UNUSED(user_data);  
   
         f = (np2cfg.XSHIFT & 1) ^ (b ? 1 : 0);          f = (np2cfg.XSHIFT & 1) ^ (b ? 1 : 0);
         if (f) {          if (f) {
                 np2cfg.XSHIFT ^= 1;                  np2cfg.XSHIFT ^= 1;
Line 1649  cb_screenmode(gint idx) Line 1691  cb_screenmode(gint idx)
 }  }
   
 static void  static void
   cb_screensize(gint idx)
   {
           guint value;
   
           if (idx >= 0) {
                   value = screensize_entries[idx].value;
           } else {
                   value = 0;
           }
           scrnmng_setmultiple(value);
   }
   
   static void
 cb_soundboard(gint idx)  cb_soundboard(gint idx)
 {  {
         guint value;          guint value;
Line 1667  cb_soundboard(gint idx) Line 1722  cb_soundboard(gint idx)
 static void  static void
 cb_radio(GtkRadioAction *action, GtkRadioAction *current, gpointer user_data)  cb_radio(GtkRadioAction *action, GtkRadioAction *current, gpointer user_data)
 {  {
         guint value = (guint)gtk_radio_action_get_current_value(action);          gint value = gtk_radio_action_get_current_value(action);
         guint menu_idx = (guint)GPOINTER_TO_INT(user_data);          guint menu_idx = (guint)GPOINTER_TO_INT(user_data);
         gint i;          gint i;
   
         UNUSED(current);        /* emitted item */  
   
         if (menu_idx < n_radiomenu_entries) {          if (menu_idx < n_radiomenu_entries) {
                 for (i = 0; i < radiomenu_entries[menu_idx].count; i++) {                  for (i = 0; i < radiomenu_entries[menu_idx].count; i++) {
                         if (radiomenu_entries[menu_idx].entry[i].value == value)                          if (radiomenu_entries[menu_idx].entry[i].value == value)
Line 1694  cb_radio(GtkRadioAction *action, GtkRadi Line 1747  cb_radio(GtkRadioAction *action, GtkRadi
 static GtkWidget *menubar;  static GtkWidget *menubar;
 static guint menubar_timerid;  static guint menubar_timerid;
   
 #define EVENT_MASK      (GDK_LEAVE_NOTIFY_MASK|GDK_LEAVE_NOTIFY_MASK)  #define EVENT_MASK      (GDK_ENTER_NOTIFY_MASK|GDK_LEAVE_NOTIFY_MASK)
   
 static gboolean  static gboolean
 menubar_timeout(gpointer p)  menubar_timeout(gpointer p)
 {  {
   
         UNUSED(p);  
   
         if (menubar_timerid) {          if (menubar_timerid) {
                 g_source_remove(menubar_timerid);                  g_source_remove(menubar_timerid);
                 menubar_timerid = 0;                  menubar_timerid = 0;
Line 1722  static gboolean Line 1773  static gboolean
 enter_notify_evhandler(GtkWidget *w, GdkEventCrossing *ev, gpointer p)  enter_notify_evhandler(GtkWidget *w, GdkEventCrossing *ev, gpointer p)
 {  {
   
         UNUSED(w);  
         UNUSED(ev);  
         UNUSED(p);  
   
         if (menubar_timerid) {          if (menubar_timerid) {
                 g_source_remove(menubar_timerid);                  g_source_remove(menubar_timerid);
                 menubar_timerid = 0;                  menubar_timerid = 0;
Line 1742  static gboolean Line 1789  static gboolean
 leave_notify_evhandler(GtkWidget *w, GdkEventCrossing *ev, gpointer p)  leave_notify_evhandler(GtkWidget *w, GdkEventCrossing *ev, gpointer p)
 {  {
   
         UNUSED(w);  
         UNUSED(ev);  
         UNUSED(p);  
   
         if (menubar_timerid) {          if (menubar_timerid) {
                 g_source_remove(menubar_timerid);                  g_source_remove(menubar_timerid);
                 menubar_timerid = 0;                  menubar_timerid = 0;
Line 1758  leave_notify_evhandler(GtkWidget *w, Gdk Line 1801  leave_notify_evhandler(GtkWidget *w, Gdk
         return TRUE;          return TRUE;
 }  }
   
   #if defined(SUPPORT_STATSAVE)
   static void
   create_menu_statsave(GtkUIManager *ui_manager, int num)
   {
           char *name, *action;
           guint id;
           int i;
   
           if (num <= 0)
                   return;
   
           /* Save %d */
           for (i = 0; i < num; i++) {
                   id = gtk_ui_manager_new_merge_id(ui_manager);
                   name = g_strdup_printf("Save %d", i);
                   action = g_strdup_printf("stat%02dsave", i);
                   gtk_ui_manager_add_ui(ui_manager, id, "/MainMenu/Stat",
                       name, action, GTK_UI_MANAGER_MENUITEM, FALSE);
                   g_free(action);
                   g_free(name);
           }
   
           /* separator */
           id = gtk_ui_manager_new_merge_id(ui_manager);
           gtk_ui_manager_add_ui(ui_manager, id, "/MainMenu/Stat",
               "", "", GTK_UI_MANAGER_SEPARATOR, FALSE);
   
           /* Load %d */
           for (i = 0; i < num; i++) {
                   id = gtk_ui_manager_new_merge_id(ui_manager);
                   name = g_strdup_printf("Load %d", i);
                   action = g_strdup_printf("stat%02dload", i);
                   gtk_ui_manager_add_ui(ui_manager, id, "/MainMenu/Stat",
                       name, action, GTK_UI_MANAGER_MENUITEM, FALSE);
                   g_free(action);
                   g_free(name);
           }
   }
   #endif
   
 static void  static void
 equip_fddrive(GtkUIManager *ui_manager, guint no)  equip_fddrive(GtkUIManager *ui_manager, guint no)
 {  {
         char path[32], name[32], action[32];          char *path, *name, *action;
         guint id;          guint id;
   
         if (no >= 4)          if (no >= 4)
Line 1769  equip_fddrive(GtkUIManager *ui_manager,  Line 1852  equip_fddrive(GtkUIManager *ui_manager, 
         no++;          no++;
   
         id = gtk_ui_manager_new_merge_id(ui_manager);          id = gtk_ui_manager_new_merge_id(ui_manager);
         g_snprintf(name, sizeof(name), "Drive%d", no);          name = g_strdup_printf("Drive%d", no);
         g_snprintf(action, sizeof(action), "Drive%dMenu", no);          action = g_strdup_printf("Drive%dMenu", no);
         gtk_ui_manager_add_ui(ui_manager, id,          gtk_ui_manager_add_ui(ui_manager, id,
             "/MainMenu/FDD", name, action, GTK_UI_MANAGER_MENU, FALSE);              "/MainMenu/FDD", name, action, GTK_UI_MANAGER_MENU, FALSE);
           g_free(action);
           g_free(name);
   
           path = g_strdup_printf("/MainMenu/FDD/Drive%d", no);
   
         g_snprintf(path, sizeof(path), "/MainMenu/FDD/Drive%d", no);  
         id = gtk_ui_manager_new_merge_id(ui_manager);          id = gtk_ui_manager_new_merge_id(ui_manager);
         g_snprintf(name, sizeof(name), "Drive%dOpen", no);          name = g_strdup_printf("Drive%dOpen", no);
         g_snprintf(action, sizeof(action), "disk%dopen", no);          action = g_strdup_printf("disk%dopen", no);
         gtk_ui_manager_add_ui(ui_manager, id,          gtk_ui_manager_add_ui(ui_manager, id,
             path, name, action, GTK_UI_MANAGER_MENUITEM, FALSE);              path, name, action, GTK_UI_MANAGER_MENUITEM, FALSE);
           g_free(action);
           g_free(name);
   
         id = gtk_ui_manager_new_merge_id(ui_manager);          id = gtk_ui_manager_new_merge_id(ui_manager);
         g_snprintf(name, sizeof(name), "Drive%dEject", no);          name = g_strdup_printf("Drive%dEject", no);
         g_snprintf(action, sizeof(action), "disk%deject", no);          action = g_strdup_printf("disk%deject", no);
         gtk_ui_manager_add_ui(ui_manager, id,          gtk_ui_manager_add_ui(ui_manager, id,
             path, name, action, GTK_UI_MANAGER_MENUITEM, FALSE);              path, name, action, GTK_UI_MANAGER_MENUITEM, FALSE);
           g_free(action);
           g_free(name);
   
           g_free(path);
 }  }
   
 GtkWidget *  GtkWidget *
Line 1821  create_menu(void) Line 1913  create_menu(void)
                 return NULL;                  return NULL;
         }          }
   
   #if defined(SUPPORT_STATSAVE)
           if (np2oscfg.statsave) {
                   create_menu_statsave(menu_hdl.ui_manager, NSTATSAVE);
           }
   #endif
           if (np2cfg.fddequip) {
                   for (i = 0; i < 4; i++) {
                           if (np2cfg.fddequip & (1 << i)) {
                                   equip_fddrive(menu_hdl.ui_manager, i);
                           }
                   }
           }
   
         xmenu_toggle_item(NULL, "dispvsync", np2cfg.DISPSYNC);          xmenu_toggle_item(NULL, "dispvsync", np2cfg.DISPSYNC);
         xmenu_toggle_item(NULL, "joyrapid", np2cfg.BTN_RAPID);          xmenu_toggle_item(NULL, "joyrapid", np2cfg.BTN_RAPID);
         xmenu_toggle_item(NULL, "joyreverse", np2cfg.BTN_MODE);          xmenu_toggle_item(NULL, "joyreverse", np2cfg.BTN_MODE);
Line 1847  create_menu(void) Line 1952  create_menu(void)
         xmenu_select_memory(np2cfg.EXTMEM);          xmenu_select_memory(np2cfg.EXTMEM);
         xmenu_select_rotate(scrnmode & SCRNMODE_ROTATEMASK);          xmenu_select_rotate(scrnmode & SCRNMODE_ROTATEMASK);
         xmenu_select_screenmode(scrnmode & SCRNMODE_FULLSCREEN);          xmenu_select_screenmode(scrnmode & SCRNMODE_FULLSCREEN);
           xmenu_select_screensize(SCREEN_DEFMUL);
         xmenu_select_soundboard(np2cfg.SOUND_SW);          xmenu_select_soundboard(np2cfg.SOUND_SW);
   
         if (np2cfg.fddequip) {  
                 for (i = 0; i < 4; i++) {  
                         if (np2cfg.fddequip & (1 << i)) {  
                                 equip_fddrive(menu_hdl.ui_manager, i);  
                         }  
                 }  
         }  
   
         menubar = gtk_ui_manager_get_widget(menu_hdl.ui_manager, "/MainMenu");          menubar = gtk_ui_manager_get_widget(menu_hdl.ui_manager, "/MainMenu");
   
         gtk_widget_add_events(menubar, EVENT_MASK);          gtk_widget_add_events(menubar, EVENT_MASK);
         g_signal_connect(GTK_OBJECT(menubar), "enter_notify_event",          g_signal_connect(GTK_OBJECT(menubar), "enter_notify_event",
                     GTK_SIGNAL_FUNC(enter_notify_evhandler), NULL);                      G_CALLBACK(enter_notify_evhandler), NULL);
         g_signal_connect(GTK_OBJECT(menubar), "leave_notify_event",          g_signal_connect(GTK_OBJECT(menubar), "leave_notify_event",
                     GTK_SIGNAL_FUNC(leave_notify_evhandler), NULL);                      G_CALLBACK(leave_notify_evhandler), NULL);
   
         return menubar;          return menubar;
 }  }
Line 1886  void Line 1984  void
 xmenu_toggle_menu(void)  xmenu_toggle_menu(void)
 {  {
   
         if (GTK_WIDGET_VISIBLE(menubar))          if (gtk_widget_get_visible(menubar))
                 xmenu_hide();                  xmenu_hide();
         else          else
                 xmenu_show();                  xmenu_show();

Removed from v.1.7  
changed lines
  Added in v.1.28


RetroPC.NET-CVS <cvs@retropc.net>