mirror of
https://github.com/joncampbell123/dosbox-x.git
synced 2025-10-18 17:32:24 +08:00
Merge branch 'develop' into develop-win-sdl1-async-hack-201802
Conflicts: vs2015/sdl/src/video/windib/SDL_dibevents.c
This commit is contained in:
@@ -105,6 +105,8 @@ bool OpenGL_using(void);
|
|||||||
|
|
||||||
using namespace std;
|
using namespace std;
|
||||||
|
|
||||||
|
bool window_was_maximized = false;
|
||||||
|
|
||||||
Bitu userResizeWindowWidth = 0, userResizeWindowHeight = 0;
|
Bitu userResizeWindowWidth = 0, userResizeWindowHeight = 0;
|
||||||
Bitu currentWindowWidth = 640, currentWindowHeight = 480;
|
Bitu currentWindowWidth = 640, currentWindowHeight = 480;
|
||||||
|
|
||||||
@@ -1741,9 +1743,13 @@ static LRESULT CALLBACK WinExtHookKeyboardHookProc(int nCode,WPARAM wParam,LPARA
|
|||||||
wParam = WM_USER + 0x101;
|
wParam = WM_USER + 0x101;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
DWORD lParam =
|
||||||
|
(st_hook->scanCode << 8U) +
|
||||||
|
((st_hook->flags & LLKHF_EXTENDED) ? 0x01000000 : 0) +
|
||||||
|
((wParam == WM_KEYUP || wParam == WM_SYSKEYUP) ? 0xC0000000 : 0);
|
||||||
|
|
||||||
// catch the keystroke, post it to ourself, do not pass it on
|
// catch the keystroke, post it to ourself, do not pass it on
|
||||||
PostMessage(myHwnd, wParam, st_hook->vkCode,
|
PostMessage(myHwnd, wParam, st_hook->vkCode, lParam);
|
||||||
(st_hook->flags & 0x80/*transition state*/) ? 0x0000 : 0xA000/*bits 13&15 are set*/);
|
|
||||||
return TRUE;
|
return TRUE;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -3067,7 +3073,7 @@ static void HandleVideoResize(void * event) {
|
|||||||
|
|
||||||
/* assume the resize comes from user preference UNLESS the window
|
/* assume the resize comes from user preference UNLESS the window
|
||||||
* is fullscreen or maximized */
|
* is fullscreen or maximized */
|
||||||
if (!menu.maxwindow && !sdl.desktop.fullscreen && !sdl.init_ignore && NonUserResizeCounter == 0) {
|
if (!menu.maxwindow && !sdl.desktop.fullscreen && !sdl.init_ignore && NonUserResizeCounter == 0 && !window_was_maximized) {
|
||||||
UpdateWindowDimensions();
|
UpdateWindowDimensions();
|
||||||
UpdateWindowDimensions(ResizeEvent->w, ResizeEvent->h);
|
UpdateWindowDimensions(ResizeEvent->w, ResizeEvent->h);
|
||||||
|
|
||||||
@@ -3084,6 +3090,7 @@ static void HandleVideoResize(void * event) {
|
|||||||
UpdateWindowDimensions();
|
UpdateWindowDimensions();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
window_was_maximized = menu.maxwindow;
|
||||||
if (NonUserResizeCounter > 0)
|
if (NonUserResizeCounter > 0)
|
||||||
NonUserResizeCounter--;
|
NonUserResizeCounter--;
|
||||||
|
|
||||||
|
@@ -50,6 +50,8 @@
|
|||||||
#define NO_GETKEYBOARDSTATE
|
#define NO_GETKEYBOARDSTATE
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
static HKL hLayout = NULL;
|
||||||
|
|
||||||
/* The translation table from a Microsoft VK keysym to a SDL keysym */
|
/* The translation table from a Microsoft VK keysym to a SDL keysym */
|
||||||
static SDLKey VK_keymap[SDLK_LAST];
|
static SDLKey VK_keymap[SDLK_LAST];
|
||||||
static SDL_keysym *TranslateKey(WPARAM vkey, UINT scancode, SDL_keysym *keysym, int pressed);
|
static SDL_keysym *TranslateKey(WPARAM vkey, UINT scancode, SDL_keysym *keysym, int pressed);
|
||||||
@@ -192,6 +194,13 @@ LRESULT DIB_HandleMessage(_THIS, HWND hwnd, UINT msg, WPARAM wParam, LPARAM lPar
|
|||||||
ShowWindow(ParentWindowHWND, SW_RESTORE);
|
ShowWindow(ParentWindowHWND, SW_RESTORE);
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
/* FIXME: I like how Microsoft defines a perfectly reasonable message but does not send it to us
|
||||||
|
when the user selects a different language from the language bar. >:( */
|
||||||
|
case WM_INPUTLANGCHANGE:
|
||||||
|
hLayout = (HKL)wParam;
|
||||||
|
return(1);
|
||||||
|
case WM_INPUTLANGCHANGEREQUEST: /* We must use DefWindowProc() or else Windows will not notify us of input layout changes */
|
||||||
|
return DefWindowProc(hwnd, msg, wParam, lParam);
|
||||||
|
|
||||||
case WM_SYSKEYDOWN:
|
case WM_SYSKEYDOWN:
|
||||||
case WM_KEYDOWN: {
|
case WM_KEYDOWN: {
|
||||||
@@ -460,40 +469,12 @@ void DIB_CheckMouse(void) {
|
|||||||
last_dib_mouse_motion = SDL_GetTicks();
|
last_dib_mouse_motion = SDL_GetTicks();
|
||||||
}
|
}
|
||||||
|
|
||||||
static HKL hLayoutUS = NULL;
|
|
||||||
|
|
||||||
void DIB_InitOSKeymap(_THIS)
|
void DIB_InitOSKeymap(_THIS)
|
||||||
{
|
{
|
||||||
int i;
|
int i;
|
||||||
#ifndef _WIN32_WCE
|
|
||||||
char current_layout[KL_NAMELENGTH];
|
|
||||||
|
|
||||||
GetKeyboardLayoutName(current_layout);
|
hLayout = GetKeyboardLayout(0);
|
||||||
//printf("Initial Keyboard Layout Name: '%s'\n", current_layout);
|
|
||||||
|
|
||||||
hLayoutUS = LoadKeyboardLayout("00000409", KLF_NOTELLSHELL);
|
|
||||||
|
|
||||||
if (!hLayoutUS) {
|
|
||||||
//printf("Failed to load US keyboard layout. Using current.\n");
|
|
||||||
hLayoutUS = GetKeyboardLayout(0);
|
|
||||||
}
|
|
||||||
LoadKeyboardLayout(current_layout, KLF_ACTIVATE);
|
|
||||||
#else
|
|
||||||
#if _WIN32_WCE >=420
|
|
||||||
TCHAR current_layout[KL_NAMELENGTH];
|
|
||||||
|
|
||||||
GetKeyboardLayoutName(current_layout);
|
|
||||||
//printf("Initial Keyboard Layout Name: '%s'\n", current_layout);
|
|
||||||
|
|
||||||
hLayoutUS = LoadKeyboardLayout(L"00000409", 0);
|
|
||||||
|
|
||||||
if (!hLayoutUS) {
|
|
||||||
//printf("Failed to load US keyboard layout. Using current.\n");
|
|
||||||
hLayoutUS = GetKeyboardLayout(0);
|
|
||||||
}
|
|
||||||
LoadKeyboardLayout(current_layout, 0);
|
|
||||||
#endif // _WIN32_WCE >=420
|
|
||||||
#endif
|
|
||||||
/* Map the VK keysyms */
|
/* Map the VK keysyms */
|
||||||
for ( i=0; i<SDL_arraysize(VK_keymap); ++i )
|
for ( i=0; i<SDL_arraysize(VK_keymap); ++i )
|
||||||
VK_keymap[i] = SDLK_UNKNOWN;
|
VK_keymap[i] = SDLK_UNKNOWN;
|
||||||
@@ -629,7 +610,7 @@ void DIB_InitOSKeymap(_THIS)
|
|||||||
static int SDL_MapVirtualKey(int scancode, int vkey)
|
static int SDL_MapVirtualKey(int scancode, int vkey)
|
||||||
{
|
{
|
||||||
#ifndef _WIN32_WCE
|
#ifndef _WIN32_WCE
|
||||||
int mvke = MapVirtualKeyEx(scancode & 0xFF, 1, hLayoutUS);
|
int mvke = MapVirtualKeyEx(scancode & 0xFF, 1, hLayout);
|
||||||
#else
|
#else
|
||||||
int mvke = MapVirtualKey(scancode & 0xFF, 1);
|
int mvke = MapVirtualKey(scancode & 0xFF, 1);
|
||||||
#endif
|
#endif
|
||||||
@@ -709,21 +690,6 @@ static SDL_keysym *TranslateKey(WPARAM vkey, UINT scancode, SDL_keysym *keysym,
|
|||||||
#endif /* NO_GETKEYBOARDSTATE */
|
#endif /* NO_GETKEYBOARDSTATE */
|
||||||
}
|
}
|
||||||
|
|
||||||
#if 0
|
|
||||||
{
|
|
||||||
HKL hLayoutCurrent = GetKeyboardLayout(0);
|
|
||||||
int sc = scancode & 0xFF;
|
|
||||||
|
|
||||||
printf("SYM:%d, VK:0x%02X, SC:0x%04X, US:(1:0x%02X, 3:0x%02X), "
|
|
||||||
"Current:(1:0x%02X, 3:0x%02X)\n",
|
|
||||||
keysym->sym, vkey, scancode,
|
|
||||||
MapVirtualKeyEx(sc, 1, hLayoutUS),
|
|
||||||
MapVirtualKeyEx(sc, 3, hLayoutUS),
|
|
||||||
MapVirtualKeyEx(sc, 1, hLayoutCurrent),
|
|
||||||
MapVirtualKeyEx(sc, 3, hLayoutCurrent)
|
|
||||||
);
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
return(keysym);
|
return(keysym);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user