(DINPUT+WINRAW) Option for disabling Windows hotkeys

This commit is contained in:
Tony Jansson 2020-12-09 00:03:40 +02:00
parent 625f0d4fc6
commit 75baed785e
10 changed files with 71 additions and 2 deletions

View File

@ -1724,6 +1724,9 @@ static struct config_bool_setting *populate_settings_bool(
SETTING_BOOL("config_save_on_exit", &settings->bools.config_save_on_exit, true, DEFAULT_CONFIG_SAVE_ON_EXIT, false);
SETTING_BOOL("show_hidden_files", &settings->bools.show_hidden_files, true, DEFAULT_SHOW_HIDDEN_FILES, false);
SETTING_BOOL("input_autodetect_enable", &settings->bools.input_autodetect_enable, true, input_autodetect_enable, false);
#if defined(HAVE_DINPUT) || defined(HAVE_WINRAWINPUT)
SETTING_BOOL("input_nowinkey_enable", &settings->bools.input_nowinkey_enable, true, false, false);
#endif
SETTING_BOOL("input_sensors_enable", &settings->bools.input_sensors_enable, true, DEFAULT_INPUT_SENSORS_ENABLE, false);
SETTING_BOOL("audio_rate_control", &settings->bools.audio_rate_control, true, DEFAULT_RATE_CONTROL, false);
#ifdef HAVE_WASAPI

View File

@ -524,6 +524,9 @@ typedef struct settings
bool input_backtouch_toggle;
bool input_small_keyboard_enable;
bool input_keyboard_gamepad_enable;
#if defined(HAVE_DINPUT) || defined(HAVE_WINRAWINPUT)
bool input_nowinkey_enable;
#endif
/* Frame time counter */
bool frame_time_counter_reset_after_fastforwarding;

View File

@ -159,9 +159,17 @@ static void *dinput_init(const char *joypad_driver)
if (di->keyboard)
{
DWORD flags;
settings_t *settings;
settings = config_get_ptr();
flags = DISCL_NONEXCLUSIVE | DISCL_FOREGROUND;
if (settings->bools.input_nowinkey_enable)
flags |= DISCL_NOWINKEY;
IDirectInputDevice8_SetDataFormat(di->keyboard, &c_dfDIKeyboard);
IDirectInputDevice8_SetCooperativeLevel(di->keyboard,
(HWND)video_driver_window_get(), DISCL_NONEXCLUSIVE | DISCL_FOREGROUND | DISCL_NOWINKEY);
(HWND)video_driver_window_get(), flags);
IDirectInputDevice8_Acquire(di->keyboard);
}

View File

@ -100,12 +100,16 @@ static void winraw_destroy_window(HWND wnd)
static BOOL winraw_set_keyboard_input(HWND window)
{
RAWINPUTDEVICE rid;
settings_t *settings;
settings = config_get_ptr();
rid.dwFlags = window ? 0 : RIDEV_REMOVE;
rid.hwndTarget = window;
rid.usUsagePage = 0x01; /* generic desktop */
rid.usUsage = 0x06; /* keyboard */
rid.dwFlags |= RIDEV_NOHOTKEYS; /* disable win keys while focused */
if (settings->bools.input_nowinkey_enable)
rid.dwFlags |= RIDEV_NOHOTKEYS; /* disable win keys while focused */
return RegisterRawInputDevices(&rid, 1, sizeof(RAWINPUTDEVICE));
}

View File

@ -1302,6 +1302,12 @@ MSG_HASH(
MENU_ENUM_LABEL_INPUT_AUTODETECT_ENABLE,
"input_autodetect_enable"
)
#if defined(HAVE_DINPUT) || defined(HAVE_WINRAWINPUT)
MSG_HASH(
MENU_ENUM_LABEL_INPUT_NOWINKEY_ENABLE,
"input_nowinkey_enable"
)
#endif
MSG_HASH(
MENU_ENUM_LABEL_INPUT_SENSORS_ENABLE,
"input_sensors_enable"

View File

@ -2058,6 +2058,16 @@ MSG_HASH(
MENU_ENUM_SUBLABEL_INPUT_AUTODETECT_ENABLE,
"Automatically configures controllers that have a profile, Plug-and-Play style."
)
#if defined(HAVE_DINPUT) || defined(HAVE_WINRAWINPUT)
MSG_HASH(
MENU_ENUM_LABEL_VALUE_INPUT_NOWINKEY_ENABLE,
"Disable Windows Hotkeys"
)
MSG_HASH(
MENU_ENUM_SUBLABEL_INPUT_NOWINKEY_ENABLE,
"Keeps Win-key combinations inside the application. (Restart Required)"
)
#endif
MSG_HASH(
MENU_ENUM_LABEL_VALUE_INPUT_SENSORS_ENABLE,
"Auxiliary Sensor Input"

View File

@ -495,6 +495,9 @@ DEFAULT_SUBLABEL_MACRO(action_bind_sublabel_savestate_max_keep, MENU_
DEFAULT_SUBLABEL_MACRO(action_bind_sublabel_autosave_interval, MENU_ENUM_SUBLABEL_AUTOSAVE_INTERVAL)
DEFAULT_SUBLABEL_MACRO(action_bind_sublabel_input_remap_binds_enable, MENU_ENUM_SUBLABEL_INPUT_REMAP_BINDS_ENABLE)
DEFAULT_SUBLABEL_MACRO(action_bind_sublabel_input_autodetect_enable, MENU_ENUM_SUBLABEL_INPUT_AUTODETECT_ENABLE)
#if defined(HAVE_DINPUT) || defined(HAVE_WINRAWINPUT)
DEFAULT_SUBLABEL_MACRO(action_bind_sublabel_input_nowinkey_enable, MENU_ENUM_SUBLABEL_INPUT_NOWINKEY_ENABLE)
#endif
DEFAULT_SUBLABEL_MACRO(action_bind_sublabel_input_sensors_enable, MENU_ENUM_SUBLABEL_INPUT_SENSORS_ENABLE)
DEFAULT_SUBLABEL_MACRO(action_bind_sublabel_input_swap_ok_cancel, MENU_ENUM_SUBLABEL_MENU_INPUT_SWAP_OK_CANCEL)
DEFAULT_SUBLABEL_MACRO(action_bind_sublabel_pause_libretro, MENU_ENUM_SUBLABEL_PAUSE_LIBRETRO)
@ -2869,6 +2872,11 @@ int menu_cbs_init_bind_sublabel(menu_file_list_cbs_t *cbs,
case MENU_ENUM_LABEL_INPUT_AUTODETECT_ENABLE:
BIND_ACTION_SUBLABEL(cbs, action_bind_sublabel_input_autodetect_enable);
break;
#if defined(HAVE_DINPUT) || defined(HAVE_WINRAWINPUT)
case MENU_ENUM_LABEL_INPUT_NOWINKEY_ENABLE:
BIND_ACTION_SUBLABEL(cbs, action_bind_sublabel_input_nowinkey_enable);
break;
#endif
case MENU_ENUM_LABEL_INPUT_SENSORS_ENABLE:
BIND_ACTION_SUBLABEL(cbs, action_bind_sublabel_input_sensors_enable);
break;

View File

@ -6037,6 +6037,12 @@ unsigned menu_displaylist_build_list(
MENU_ENUM_LABEL_INPUT_BIND_MODE,
PARSE_ONLY_UINT, false) == 0)
count++;
#if defined(HAVE_DINPUT) || defined(HAVE_WINRAWINPUT)
if (MENU_DISPLAYLIST_PARSE_SETTINGS_ENUM(list,
MENU_ENUM_LABEL_INPUT_NOWINKEY_ENABLE,
PARSE_ONLY_BOOL, false) == 0)
count++;
#endif
if (MENU_DISPLAYLIST_PARSE_SETTINGS_ENUM(list,
MENU_ENUM_LABEL_INPUT_SENSORS_ENABLE,
PARSE_ONLY_BOOL, false) == 0)

View File

@ -12063,6 +12063,24 @@ static bool setting_append_list(
SD_FLAG_ADVANCED
);
#if defined(HAVE_DINPUT) || defined(HAVE_WINRAWINPUT)
CONFIG_BOOL(
list, list_info,
&settings->bools.input_nowinkey_enable,
MENU_ENUM_LABEL_INPUT_NOWINKEY_ENABLE,
MENU_ENUM_LABEL_VALUE_INPUT_NOWINKEY_ENABLE,
false,
MENU_ENUM_LABEL_VALUE_OFF,
MENU_ENUM_LABEL_VALUE_ON,
&group_info,
&subgroup_info,
parent_group,
general_write_handler,
general_read_handler,
SD_FLAG_NONE
);
#endif
CONFIG_BOOL(
list, list_info,
&settings->bools.input_sensors_enable,

View File

@ -918,6 +918,9 @@ enum msg_hash_enums
MENU_LABEL(INPUT_USER_BINDS),
MENU_LABEL(INPUT_DUTY_CYCLE),
MENU_LABEL(INPUT_AUTODETECT_ENABLE),
#if defined(HAVE_DINPUT) || defined(HAVE_WINRAWINPUT)
MENU_LABEL(INPUT_NOWINKEY_ENABLE),
#endif
MENU_LABEL(INPUT_SENSORS_ENABLE),
MENU_LABEL(INPUT_DESCRIPTOR_LABEL_SHOW),
MENU_LABEL(INPUT_DESCRIPTOR_HIDE_UNBOUND),