]> git.unchartedbackwaters.co.uk Git - francis/winuae.git/commitdiff
Option to disable default on screen keyboard pad button mapping
authorToni Wilen <twilen@winuae.net>
Fri, 22 Mar 2024 18:43:23 +0000 (20:43 +0200)
committerToni Wilen <twilen@winuae.net>
Fri, 22 Mar 2024 18:43:23 +0000 (20:43 +0200)
include/inputdevice.h
include/options.h
inputdevice.cpp
od-win32/dinput.cpp
od-win32/resources/resource.h
od-win32/resources/winuae.rc
od-win32/win32gui.cpp

index 2ffce1485402b1d722281608a58dcf4de93b8f9a..188f2131ccf4abb7fd9637e278d26e385fa35f48 100644 (file)
@@ -206,8 +206,8 @@ extern void release_keys(void);
 
 extern int input_get_default_mouse (struct uae_input_device *uid, int num, int port, int af, bool gp, bool wheel, bool joymouseswap);
 extern int input_get_default_lightpen (struct uae_input_device *uid, int num, int port, int af, bool gp, bool joymouseswap, int submode);
-extern int input_get_default_joystick (struct uae_input_device *uid, int num, int port, int af, int mode, bool gp, bool joymouseswap);
-extern int input_get_default_joystick_analog (struct uae_input_device *uid, int num, int port, int af, bool gp, bool joymouseswap);
+extern int input_get_default_joystick (struct uae_input_device *uid, int num, int port, int af, int mode, bool gp, bool joymouseswap, bool default_osk);
+extern int input_get_default_joystick_analog (struct uae_input_device *uid, int num, int port, int af, bool gp, bool joymouseswap, bool default_osk);
 extern int input_get_default_keyboard (int num);
 
 #define DEFEVENT(A, B, C, D, E, F) INPUTEVENT_ ## A,
index 284a760a7992785841353fa509bdc8ff9f2263af..677cb1368ed38e198600c8b3c80f81b7f3b95495 100644 (file)
@@ -946,6 +946,7 @@ struct uae_prefs {
        bool input_autoswitch;
        bool input_autoswitchleftright;
        bool input_advancedmultiinput;
+       bool input_default_onscreen_keyboard;
        struct uae_input_device joystick_settings[MAX_INPUT_SETTINGS][MAX_INPUT_DEVICES];
        struct uae_input_device mouse_settings[MAX_INPUT_SETTINGS][MAX_INPUT_DEVICES];
        struct uae_input_device keyboard_settings[MAX_INPUT_SETTINGS][MAX_INPUT_DEVICES];
index a6403c257adf508e6d51edef4036441b772c9e21..9ac34701e18651f0072b2867d64e486545bb7ac0 100644 (file)
@@ -1046,6 +1046,7 @@ void write_inputdevice_config (struct uae_prefs *p, struct zfile *f)
        cfgfile_dwrite(f, _T("input.devicematchflags"), _T("%d"), p->input_device_match_mask);
        cfgfile_dwrite_bool(f, _T("input.autoswitchleftright"), p->input_autoswitchleftright);
        cfgfile_dwrite_bool(f, _T("input.advancedmultiinput"), p->input_advancedmultiinput);
+       cfgfile_dwrite_bool(f, _T("input.default_osk"), p->input_default_onscreen_keyboard);
        for (id = 0; id < MAX_INPUT_SETTINGS; id++) {
                TCHAR tmp[MAX_DPATH];
                if (id < GAMEPORT_INPUT_SETTINGS) {
@@ -1649,6 +1650,8 @@ void read_inputdevice_config (struct uae_prefs *pr, const TCHAR *option, TCHAR *
                pr->input_autoswitchleftright = !_tcsicmp(value, _T("true")) || _tstol(value) != 0;
        if (!strcasecmp(p, _T("advancedmultiinput")))
                pr->input_advancedmultiinput = !_tcsicmp(value, _T("true")) || _tstol(value) != 0;
+       if (!strcasecmp(p, _T("default_osk")))
+               pr->input_default_onscreen_keyboard = !_tcsicmp(value, _T("true")) || _tstol(value) != 0;
        if (!strcasecmp(p, _T("keyboard_type"))) {
                cfgfile_strval(p, value, p, &pr->input_keyboard_type, kbtypes, 0);
                keyboard_default = keyboard_default_table[pr->input_keyboard_type];
@@ -7503,11 +7506,11 @@ static void compatibility_copy (struct uae_prefs *prefs, bool gameports)
                                        case JSEM_MODE_JOYSTICK:
                                        case JSEM_MODE_GAMEPAD:
                                        case JSEM_MODE_JOYSTICK_CD32:
-                                               input_get_default_joystick(mice, joy, i, af, mode, !gameports, true);
+                                               input_get_default_joystick(mice, joy, i, af, mode, !gameports, true, prefs->input_default_onscreen_keyboard);
                                                joymodes[i][j] = mode;
                                                break;
                                        case JSEM_MODE_JOYSTICK_ANALOG:
-                                               input_get_default_joystick_analog(mice, joy, i, af, !gameports, true);
+                                               input_get_default_joystick_analog(mice, joy, i, af, !gameports, true, prefs->input_default_onscreen_keyboard);
                                                joymodes[i][j] = JSEM_MODE_JOYSTICK_ANALOG;
                                                break;
                                        }
@@ -7539,7 +7542,7 @@ static void compatibility_copy (struct uae_prefs *prefs, bool gameports)
                                        {
                                                bool iscd32 = mode == JSEM_MODE_JOYSTICK_CD32 || (mode == JSEM_MODE_DEFAULT && prefs->cs_cd32cd);
                                                int jmode = iscd32 ? JSEM_MODE_JOYSTICK_CD32 : mode;
-                                               input_get_default_joystick(joysticks, joy, i, af, jmode, !gameports, false);
+                                               input_get_default_joystick(joysticks, joy, i, af, jmode, !gameports, false, prefs->input_default_onscreen_keyboard);
                                                if (iscd32)
                                                        joymodes[i][j] = JSEM_MODE_JOYSTICK_CD32;
                                                else if (mode == JSEM_MODE_GAMEPAD)
@@ -7549,7 +7552,7 @@ static void compatibility_copy (struct uae_prefs *prefs, bool gameports)
                                                break;
                                        }
                                        case JSEM_MODE_JOYSTICK_ANALOG:
-                                               input_get_default_joystick_analog(joysticks, joy, i, af, !gameports, false);
+                                               input_get_default_joystick_analog(joysticks, joy, i, af, !gameports, false, prefs->input_default_onscreen_keyboard);
                                                joymodes[i][j] = JSEM_MODE_JOYSTICK_ANALOG;
                                                break;
                                        case JSEM_MODE_MOUSE:
@@ -7563,7 +7566,7 @@ static void compatibility_copy (struct uae_prefs *prefs, bool gameports)
                                                break;
                                        case JSEM_MODE_MOUSE_CDTV:
                                                joymodes[i][j] = JSEM_MODE_MOUSE_CDTV;
-                                               input_get_default_joystick(joysticks, joy, i, af, mode, !gameports, false);
+                                               input_get_default_joystick(joysticks, joy, i, af, mode, !gameports, false, prefs->input_default_onscreen_keyboard);
                                                break;
 
                                        }
@@ -7672,7 +7675,7 @@ static void compatibility_copy (struct uae_prefs *prefs, bool gameports)
                                int af = jd->autofire;
                                joy = jsem_isjoy(i, j, prefs);
                                if (joy >= 0) {
-                                       input_get_default_joystick(joysticks, joy, i, af, 0, !gameports, false);
+                                       input_get_default_joystick(joysticks, joy, i, af, 0, !gameports, false, prefs->input_default_onscreen_keyboard);
                                        _tcsncpy(jd->idc.name, idev[IDTYPE_JOYSTICK].get_friendlyname (joy), MAX_JPORT_NAME - 1);
                                        _tcsncpy(jd->idc.configname, idev[IDTYPE_JOYSTICK].get_uniquename (joy), MAX_JPORT_CONFIG - 1);
                                        jd->idc.name[MAX_JPORT_NAME - 1] = 0;
@@ -8273,6 +8276,7 @@ void inputdevice_default_prefs (struct uae_prefs *p)
        p->input_autoswitchleftright = false;
        p->input_device_match_mask = -1;
        keyboard_default = keyboard_default_table[p->input_keyboard_type];
+       p->input_default_onscreen_keyboard = true;
        inputdevice_default_kb_all (p);
 
 }
index d8c64fd8ad861a00d37f96edc12aa338e2febfb8..0ed0e4e9db000751f3bd45381e06cbbcbd15d7a0 100644 (file)
@@ -4569,7 +4569,7 @@ int input_get_default_lightpen (struct uae_input_device *uid, int i, int port, i
        return 0;
 }
 
-int input_get_default_joystick (struct uae_input_device *uid, int i, int port, int af, int mode, bool gp, bool joymouseswap)
+int input_get_default_joystick (struct uae_input_device *uid, int i, int port, int af, int mode, bool gp, bool joymouseswap, bool default_osk)
 {
        int j;
        struct didata *did = NULL;
@@ -4607,7 +4607,7 @@ int input_get_default_joystick (struct uae_input_device *uid, int i, int port, i
                        if (isrealbutton (did, 2))
                                setid (uid, i, ID_BUTTON_OFFSET + 2, 0, port, port ? INPUTEVENT_JOY2_3RD_BUTTON : INPUTEVENT_JOY1_3RD_BUTTON, gp);
                }
-               if (isrealbutton(did, 3) && isemptyslot(uid, i, ID_BUTTON_OFFSET + 3, 0, port)) {
+               if (isrealbutton(did, 3) && isemptyslot(uid, i, ID_BUTTON_OFFSET + 3, 0, port) && default_osk) {
                        setid(uid, i, ID_BUTTON_OFFSET + 3, 0, port, INPUTEVENT_SPC_OSK, gp);
                }
        }
@@ -4642,7 +4642,7 @@ int input_get_default_joystick (struct uae_input_device *uid, int i, int port, i
        return 0;
 }
 
-int input_get_default_joystick_analog (struct uae_input_device *uid, int i, int port, int af, bool gp, bool joymouseswap)
+int input_get_default_joystick_analog (struct uae_input_device *uid, int i, int port, int af, bool gp, bool joymouseswap, bool default_osk)
 {
        int j;
        struct didata *did;
@@ -4665,7 +4665,7 @@ int input_get_default_joystick_analog (struct uae_input_device *uid, int i, int
                setid(uid, i, ID_BUTTON_OFFSET + 2, 0, port, port ? INPUTEVENT_JOY2_UP : INPUTEVENT_JOY1_UP, gp);
        if (isrealbutton(did, 3))
                setid(uid, i, ID_BUTTON_OFFSET + 3, 0, port, port ? INPUTEVENT_JOY2_DOWN : INPUTEVENT_JOY1_DOWN, gp);
-       if (isrealbutton(did, 4) && isemptyslot(uid, i, ID_BUTTON_OFFSET + 4, 0, port))
+       if (isrealbutton(did, 4) && isemptyslot(uid, i, ID_BUTTON_OFFSET + 4, 0, port) && default_osk)
                setid(uid, i, ID_BUTTON_OFFSET + 4, 0, port, INPUTEVENT_SPC_OSK, gp);
 
        for (j = 2; j < MAX_MAPPINGS - 1; j++) {
index 07a8c87f2ea0be5ed15ba9fb83e459a9f66250f1..ff3012aeda088ad3498f4c348ad7bc8b9116d7b5 100644 (file)
 #define IDS_SOUND_CLONED71              441
 #define IDS_SOUND_71                    442
 #define IDS_SOUND_FILTER_ON_FIXEDONLY   443
+#define IDS_MISCLISTITEMS5              444
+#define IDS_MISCLISTITEMS6              445
 #define IDS_QS_MODELS                   1000
 #define IDS_QS_MODEL_A500               1001
 #define IDS_QS_MODEL_A500P              1002
index a362af689fd882aeae1183b5f87ccb7ab296dea4..b78bbd5c08a934d8cb7d14ea9438d4b480658b85 100644 (file)
@@ -2174,7 +2174,7 @@ BEGIN
     IDS_WSTYLE_EXTENDED     "Extended"
     IDS_MISCLISTITEMS1      "Untrap = middle button\nShow GUI on startup\nUse CTRL-F11 to quit\nDon't show taskbar button\nDon't show notification icon\n"
     IDS_MISCLISTITEMS2      "Main window always on top\nGUI window always on top\nDisable screensaver\nSynchronize clock\nOne second reboot pause\nFaster RTG\nClipboard sharing\nAllow native code\n"
-    IDS_MISCLISTITEMS3      "Native on-screen display\nRTG on-screen display\nCreate winuaelog.txt log\nLog illegal memory accesses\nBlank unused displays\nStart mouse uncaptured\nStart minimized\nMinimize when focus is lost\nBlack frame insertion\nMaster floppy write protection\nMaster harddrive write protection\nHide all UAE autoconfig boards\nRight Control = Right Windows key\n"
+    IDS_MISCLISTITEMS3      "Native on-screen display\nRTG on-screen display\nCreate winuaelog.txt log\nLog illegal memory accesses\nBlank unused displays\nStart mouse uncaptured\n"
     IDS_JOYMODE_WHEELMOUSE  "Wheel Mouse"
     IDS_NUMSG_KS68030PLUS   "The selected system ROM requires a 68030 or higher CPU."
     IDS_SELECTTAPE          "Select a Tape directory or archive file..."
@@ -2190,7 +2190,7 @@ END
 
 STRINGTABLE
 BEGIN
-    IDS_MISCLISTITEMS4      "Windows shutdown/logoff notification\nWarn when attempting to close window\nPower led dims when audio filter is disabled\nAutomatically capture mouse when window is activated\nDebug memory space\nForce hard reset if CPU halted\nA600/A1200/A4000 IDE scsi.device disable\nWarp mode reset\nGUI gamepad control\n"
+    IDS_MISCLISTITEMS4      "Start minimized\nMinimize when focus is lost\nBlack frame insertion\nMaster floppy write protection\nMaster harddrive write protection\n"
     IDS_SHUTDOWN_NOTIFICATION "Emulation session active"
     IDS_QUIT_WARNING        "Are you sure you want to quit WinUAE?"
     IDS_UNMAPPED_ADDRESS    "Floating\nAll zeros\nAll ones\n"
@@ -2240,6 +2240,8 @@ BEGIN
     IDS_SOUND_CLONED71      "Cloned stereo (7.1)"
     IDS_SOUND_71            "7.1 channels"
     IDS_SOUND_FILTER_ON_FIXEDONLY "Always on (Fixed only)"
+    IDS_MISCLISTITEMS5      "Hide all UAE autoconfig boards\nRight Control = Right Windows key\nWindows shutdown/logoff notification\nWarn when attempting to close window\nPower led dims when audio filter is disabled\nAutomatically capture mouse when window is activated\nDebug memory space\n"
+    IDS_MISCLISTITEMS6      "Force hard reset if CPU halted\nA600/A1200/A4000 IDE scsi.device disable\nWarp mode reset\nGUI gamepad control\nDefault on screen keyboard (Pad button 4)\n"
 END
 
 #endif    // English (United Kingdom) resources
index 9fc4ab2f98f58ccca20569e8a8e1be461409b8b4..ef6058212a2a56d84bd6eeb7aef1b3a224758408 100644 (file)
@@ -4799,6 +4799,7 @@ static const struct miscentry misclist[] = {
        { 0, 0, _T("A600/A1200/A4000 IDE scsi.device disable"), &workprefs.scsidevicedisable },
        { 0, 1, _T("Warp mode reset"), &workprefs.turbo_boot },
        { 0, 1, _T("GUI game pad control"), &workprefs.win32_gui_control },
+       { 0, 1, _T("Default on screen keyboard (Pad button 4)"), &workprefs.input_default_onscreen_keyboard },
        { 0, 0, NULL }
 };
 
@@ -5341,7 +5342,7 @@ static void InitializeListView (HWND hDlg)
 
        } else if (lv_type == LV_MISC1) {
 
-               int itemids[] = { IDS_MISCLISTITEMS1, IDS_MISCLISTITEMS2, IDS_MISCLISTITEMS3, IDS_MISCLISTITEMS4 , -1 };
+               int itemids[] = { IDS_MISCLISTITEMS1, IDS_MISCLISTITEMS2, IDS_MISCLISTITEMS3, IDS_MISCLISTITEMS4, IDS_MISCLISTITEMS5, IDS_MISCLISTITEMS6, -1 };
                int itemoffset = 0;
                int itemcnt = 0;
                listview_column_width[0] = MulDiv(150, dpi, 72);