Skip to content

Commit a710794

Browse files
committed
More configuration for screen buttons and overlay keyboard
1 parent 006833a commit a710794

File tree

1 file changed

+15
-6
lines changed

1 file changed

+15
-6
lines changed

hw/kdrive/sdl/sdl.c

+15-6
Original file line numberDiff line numberDiff line change
@@ -70,6 +70,8 @@ static void send_unicode(int unicode);
7070
static void set_clipboard_text(const char *text);
7171
static Bool sdlScreenButtons = FALSE;
7272
static void setScreenButtons(int mouseX);
73+
static enum sdlKeyboardType_t { KB_NATIVE = 0, KB_BUILTIN = 1, KB_BOTH = 2 };
74+
enum sdlKeyboardType_t sdlKeyboardType = KB_NATIVE;
7375

7476
KdKeyboardInfo *sdlKeyboard = NULL;
7577
KdPointerInfo *sdlPointer = NULL;
@@ -216,6 +218,12 @@ static Bool sdlScreenInit(KdScreenInfo *screen)
216218
sdlScreenButtons = SDL_ANDROID_GetScreenKeyboardButtonShown(SDL_ANDROID_SCREENKEYBOARD_BUTTON_0);
217219
setScreenButtons(10000);
218220

221+
if (getenv("XSDL_BUILTIN_KEYBOARD") != NULL)
222+
sdlKeyboardType = (enum sdlKeyboardType_t) atoi(getenv("XSDL_BUILTIN_KEYBOARD"));
223+
unsetenv("XSDL_BUILTIN_KEYBOARD");
224+
225+
printf("sdlScreenButtons %d sdlKeyboardType %d\n", sdlScreenButtons, sdlKeyboardType);
226+
219227
return sdlMapFramebuffer (screen);
220228
}
221229

@@ -705,18 +713,21 @@ static void sdlPollInput(void)
705713
// SDL_ANDROID_ToggleScreenKeyboardWithoutTextInput();
706714
static int keyboard = 0;
707715
keyboard++;
708-
if (keyboard > 1)
716+
if (keyboard > 1 || (sdlKeyboardType != KB_BOTH && keyboard > 0))
709717
keyboard = 0;
710718
SDL_HideScreenKeyboard(NULL);
711719
//SDL_Delay(150);
712720
SDL_Flip(SDL_GetVideoSurface());
713721
if (keyboard == 0)
714722
{
715723
SDL_Delay(100);
716-
SDL_ANDROID_ToggleScreenKeyboardWithoutTextInput();
724+
if (sdlKeyboardType == KB_NATIVE || sdlKeyboardType == KB_BOTH)
725+
SDL_ANDROID_ToggleScreenKeyboardWithoutTextInput();
726+
if (sdlKeyboardType == KB_BUILTIN)
727+
SDL_ANDROID_ToggleInternalScreenKeyboard(SDL_KEYBOARD_QWERTY);
717728
SDL_Flip(SDL_GetVideoSurface());
718729
}
719-
if (keyboard == 1)
730+
if (keyboard == 1 && sdlKeyboardType == KB_BOTH)
720731
{
721732
SDL_Delay(100);
722733
SDL_ANDROID_ToggleInternalScreenKeyboard(SDL_KEYBOARD_QWERTY);
@@ -1090,13 +1101,11 @@ void setScreenButtons(int mouseX)
10901101
#ifdef __ANDROID__
10911102
//printf ("setScreenButtons: kbShown %d sdlScreenButtons %d alignLeft %d", SDL_IsScreenKeyboardShown(NULL), sdlScreenButtons, mouseX > (((unsigned)SDL_GetVideoSurface()->w) >> 3));
10921103

1093-
return; // Disable screen buttons, we now have built-in SDL keyboard with sticky Ctrl/Alt/Shift keys
1094-
10951104
if ( SDL_ANDROID_GetScreenKeyboardRedefinedByUser() )
10961105
return;
10971106

10981107
int kbShown = SDL_IsScreenKeyboardShown(NULL);
1099-
if (!sdlScreenButtons && !kbShown)
1108+
if (!sdlScreenButtons)
11001109
{
11011110
if (SDL_ANDROID_GetScreenKeyboardButtonShown(SDL_ANDROID_SCREENKEYBOARD_BUTTON_0))
11021111
{

0 commit comments

Comments
 (0)