mirror of
https://github.com/gnif/LookingGlass.git
synced 2024-12-22 13:33:40 +00:00
[client] main: don't use Linux keybinds if the guest is not Linux
This commit is contained in:
parent
afd5e2d057
commit
5a3fe151e4
@ -162,4 +162,11 @@ void app_releaseKeybind(KeybindHandle * handle);
|
||||
*/
|
||||
void app_releaseAllKeybinds(void);
|
||||
|
||||
bool app_guestIsLinux(void);
|
||||
bool app_guestIsWindows(void);
|
||||
bool app_guestIsOSX(void);
|
||||
bool app_guestIsBSD(void);
|
||||
bool app_guestIsOther(void);
|
||||
|
||||
|
||||
#endif
|
||||
|
@ -948,3 +948,28 @@ void app_invalidateOverlay(bool renderTwice)
|
||||
g_state.renderImGuiTwice = true;
|
||||
app_invalidateWindow(false);
|
||||
}
|
||||
|
||||
bool app_guestIsLinux(void)
|
||||
{
|
||||
return g_state.guestOS == KVMFR_OS_LINUX;
|
||||
}
|
||||
|
||||
bool app_guestIsWindows(void)
|
||||
{
|
||||
return g_state.guestOS == KVMFR_OS_WINDOWS;
|
||||
}
|
||||
|
||||
bool app_guestIsOSX(void)
|
||||
{
|
||||
return g_state.guestOS == KVMFR_OS_OSX;
|
||||
}
|
||||
|
||||
bool app_guestIsBSD(void)
|
||||
{
|
||||
return g_state.guestOS == KVMFR_OS_BSD;
|
||||
}
|
||||
|
||||
bool app_guestIsOther(void)
|
||||
{
|
||||
return g_state.guestOS == KVMFR_OS_OTHER;
|
||||
}
|
||||
|
@ -139,38 +139,83 @@ static void bind_toggleKey(int sc, void * opaque)
|
||||
purespice_keyUp((uintptr_t) opaque);
|
||||
}
|
||||
|
||||
void keybind_register(void)
|
||||
void keybind_commonRegister(void)
|
||||
{
|
||||
app_registerKeybind(KEY_F, bind_fullscreen , NULL, "Full screen toggle");
|
||||
app_registerKeybind(KEY_V, bind_video , NULL, "Video stream toggle");
|
||||
app_registerKeybind(KEY_R, bind_rotate , NULL, "Rotate the output clockwise by 90° increments");
|
||||
app_registerKeybind(KEY_Q, bind_quit , NULL, "Quit");
|
||||
app_registerKeybind(KEY_O, bind_toggleOverlay, NULL, "Toggle overlay");
|
||||
app_registerKeybind(KEY_F, bind_fullscreen , NULL,
|
||||
"Full screen toggle");
|
||||
app_registerKeybind(KEY_V, bind_video , NULL,
|
||||
"Video stream toggle");
|
||||
app_registerKeybind(KEY_R, bind_rotate , NULL,
|
||||
"Rotate the output clockwise by 90° increments");
|
||||
app_registerKeybind(KEY_Q, bind_quit , NULL,
|
||||
"Quit");
|
||||
app_registerKeybind(KEY_O, bind_toggleOverlay, NULL,
|
||||
"Toggle overlay");
|
||||
}
|
||||
|
||||
if (g_params.useSpiceInput)
|
||||
void keybind_spiceRegister(void)
|
||||
{
|
||||
/* register the common keybinds for spice */
|
||||
static bool firstTime = true;
|
||||
if (firstTime)
|
||||
{
|
||||
app_registerKeybind(KEY_I , bind_input , NULL , "Spice keyboard & mouse toggle");
|
||||
app_registerKeybind(KEY_INSERT, bind_mouseSens, (void*)true , "Increase mouse sensitivity in capture mode");
|
||||
app_registerKeybind(KEY_DELETE, bind_mouseSens, (void*)false, "Descrease mouse sensitivity in capture mode");
|
||||
app_registerKeybind(KEY_I, bind_input, NULL,
|
||||
"Spice keyboard & mouse toggle");
|
||||
|
||||
app_registerKeybind(KEY_F1 , bind_ctrlAltFn, NULL, "Send Ctrl+Alt+F1 to the guest");
|
||||
app_registerKeybind(KEY_F2 , bind_ctrlAltFn, NULL, "Send Ctrl+Alt+F2 to the guest");
|
||||
app_registerKeybind(KEY_F3 , bind_ctrlAltFn, NULL, "Send Ctrl+Alt+F3 to the guest");
|
||||
app_registerKeybind(KEY_F4 , bind_ctrlAltFn, NULL, "Send Ctrl+Alt+F4 to the guest");
|
||||
app_registerKeybind(KEY_F5 , bind_ctrlAltFn, NULL, "Send Ctrl+Alt+F5 to the guest");
|
||||
app_registerKeybind(KEY_F6 , bind_ctrlAltFn, NULL, "Send Ctrl+Alt+F6 to the guest");
|
||||
app_registerKeybind(KEY_F7 , bind_ctrlAltFn, NULL, "Send Ctrl+Alt+F7 to the guest");
|
||||
app_registerKeybind(KEY_F8 , bind_ctrlAltFn, NULL, "Send Ctrl+Alt+F8 to the guest");
|
||||
app_registerKeybind(KEY_F9 , bind_ctrlAltFn, NULL, "Send Ctrl+Alt+F9 to the guest");
|
||||
app_registerKeybind(KEY_F10, bind_ctrlAltFn, NULL, "Send Ctrl+Alt+F10 to the guest");
|
||||
app_registerKeybind(KEY_F11, bind_ctrlAltFn, NULL, "Send Ctrl+Alt+F11 to the guest");
|
||||
app_registerKeybind(KEY_F12, bind_ctrlAltFn, NULL, "Send Ctrl+Alt+F12 to the guest");
|
||||
app_registerKeybind(KEY_INSERT, bind_mouseSens, (void *) true ,
|
||||
"Increase mouse sensitivity in capture mode");
|
||||
app_registerKeybind(KEY_DELETE, bind_mouseSens, (void *) false,
|
||||
"Descrease mouse sensitivity in capture mode");
|
||||
|
||||
app_registerKeybind(KEY_LEFTMETA , bind_passthrough, NULL, "Send LWin to the guest");
|
||||
app_registerKeybind(KEY_RIGHTMETA, bind_passthrough, NULL, "Send RWin to the guest");
|
||||
app_registerKeybind(KEY_UP , bind_toggleKey, (void *) PS2_VOLUME_UP ,
|
||||
"Send volume up to the guest");
|
||||
app_registerKeybind(KEY_DOWN, bind_toggleKey, (void *) PS2_VOLUME_DOWN,
|
||||
"Send volume down to the guest");
|
||||
app_registerKeybind(KEY_M , bind_toggleKey, (void *) PS2_MUTE ,
|
||||
"Send mute to the guest");
|
||||
|
||||
app_registerKeybind(KEY_UP , bind_toggleKey, (void *) PS2_VOLUME_UP , "Send volume up to the guest");
|
||||
app_registerKeybind(KEY_DOWN, bind_toggleKey, (void *) PS2_VOLUME_DOWN, "Send volume down to the guest");
|
||||
app_registerKeybind(KEY_M , bind_toggleKey, (void *) PS2_MUTE , "Send mute to the guest");
|
||||
app_registerKeybind(KEY_LEFTMETA , bind_passthrough, NULL,
|
||||
"Send LWin to the guest");
|
||||
app_registerKeybind(KEY_RIGHTMETA, bind_passthrough, NULL,
|
||||
"Send RWin to the guest");
|
||||
|
||||
firstTime = false;
|
||||
}
|
||||
|
||||
/* release any OS based keybinds that have been bound */
|
||||
static KeybindHandle handles[32] = { 0 }; // increase size as needed
|
||||
static int handleCount = 0;
|
||||
for(int i = 0; i < handleCount; ++i)
|
||||
app_releaseKeybind(&handles[i]);
|
||||
handleCount = 0;
|
||||
|
||||
|
||||
/* register OS based keybinds */
|
||||
if (app_guestIsLinux())
|
||||
{
|
||||
handles[handleCount++] = app_registerKeybind(KEY_F1 , bind_ctrlAltFn, NULL,
|
||||
"Send Ctrl+Alt+F1 to the guest");
|
||||
handles[handleCount++] = app_registerKeybind(KEY_F2 , bind_ctrlAltFn, NULL,
|
||||
"Send Ctrl+Alt+F2 to the guest");
|
||||
handles[handleCount++] = app_registerKeybind(KEY_F3 , bind_ctrlAltFn, NULL,
|
||||
"Send Ctrl+Alt+F3 to the guest");
|
||||
handles[handleCount++] = app_registerKeybind(KEY_F4 , bind_ctrlAltFn, NULL,
|
||||
"Send Ctrl+Alt+F4 to the guest");
|
||||
handles[handleCount++] = app_registerKeybind(KEY_F5 , bind_ctrlAltFn, NULL,
|
||||
"Send Ctrl+Alt+F5 to the guest");
|
||||
handles[handleCount++] = app_registerKeybind(KEY_F6 , bind_ctrlAltFn, NULL,
|
||||
"Send Ctrl+Alt+F6 to the guest");
|
||||
handles[handleCount++] = app_registerKeybind(KEY_F7 , bind_ctrlAltFn, NULL,
|
||||
"Send Ctrl+Alt+F7 to the guest");
|
||||
handles[handleCount++] = app_registerKeybind(KEY_F8 , bind_ctrlAltFn, NULL,
|
||||
"Send Ctrl+Alt+F8 to the guest");
|
||||
handles[handleCount++] = app_registerKeybind(KEY_F9 , bind_ctrlAltFn, NULL,
|
||||
"Send Ctrl+Alt+F9 to the guest");
|
||||
handles[handleCount++] = app_registerKeybind(KEY_F10, bind_ctrlAltFn, NULL,
|
||||
"Send Ctrl+Alt+F10 to the guest");
|
||||
handles[handleCount++] = app_registerKeybind(KEY_F11, bind_ctrlAltFn, NULL,
|
||||
"Send Ctrl+Alt+F11 to the guest");
|
||||
handles[handleCount++] = app_registerKeybind(KEY_F12, bind_ctrlAltFn, NULL,
|
||||
"Send Ctrl+Alt+F12 to the guest");
|
||||
}
|
||||
}
|
||||
|
@ -21,6 +21,7 @@
|
||||
#ifndef _H_LG_KEYBIND_
|
||||
#define _H_LG_KEYBIND_
|
||||
|
||||
void keybind_register(void);
|
||||
void keybind_commonRegister(void);
|
||||
void keybind_spiceRegister(void);
|
||||
|
||||
#endif
|
||||
|
@ -798,7 +798,7 @@ int main_frameThread(void * unused)
|
||||
|
||||
static void checkUUID(void)
|
||||
{
|
||||
if (!g_state.spiceUUIDValid || !g_state.guestUUIDValid)
|
||||
if (!g_state.spiceReady || !g_state.guestUUIDValid)
|
||||
return;
|
||||
|
||||
if (memcmp(g_state.spiceUUID, g_state.guestUUID,
|
||||
@ -836,9 +836,12 @@ void spiceReady(void)
|
||||
return;
|
||||
|
||||
memcpy(g_state.spiceUUID, info.uuid, sizeof(g_state.spiceUUID));
|
||||
g_state.spiceUUIDValid = true;
|
||||
g_state.spiceReady = true;
|
||||
checkUUID();
|
||||
|
||||
if (g_params.useSpiceInput)
|
||||
keybind_spiceRegister();
|
||||
|
||||
purespice_freeServerInfo(&info);
|
||||
}
|
||||
|
||||
@ -1034,6 +1037,9 @@ static int lg_run(void)
|
||||
|
||||
initImGuiKeyMap(g_state.io->KeyMap);
|
||||
|
||||
// unknown guest OS at this time
|
||||
g_state.guestOS = KVMFR_OS_OTHER;
|
||||
|
||||
// search for the best displayserver ops to use
|
||||
for(int i = 0; i < LG_DISPLAYSERVER_COUNT; ++i)
|
||||
if (LG_DisplayServers[i]->probe())
|
||||
@ -1179,7 +1185,7 @@ static int lg_run(void)
|
||||
// interactivity.
|
||||
g_state.overlayFrameTime = min(g_state.frameTime, 1000000000ULL / 60ULL);
|
||||
|
||||
keybind_register();
|
||||
keybind_commonRegister();
|
||||
|
||||
// setup the startup condition
|
||||
if (!(e_startup = lgCreateEvent(false, 0)))
|
||||
@ -1449,6 +1455,11 @@ restart:
|
||||
DEBUG_INFO("OS : %s", type);
|
||||
if (osInfo->name[0])
|
||||
DEBUG_INFO("OS Name : %s", osInfo->name);
|
||||
|
||||
g_state.guestOS = osInfo->os;
|
||||
|
||||
if (g_state.spiceReady && g_params.useSpiceInput)
|
||||
keybind_spiceRegister();
|
||||
break;
|
||||
}
|
||||
|
||||
|
@ -70,9 +70,10 @@ struct AppState
|
||||
bool jitRender;
|
||||
|
||||
uint8_t spiceUUID[16];
|
||||
bool spiceUUIDValid;
|
||||
bool spiceReady;
|
||||
uint8_t guestUUID[16];
|
||||
bool guestUUIDValid;
|
||||
KVMFROS guestOS;
|
||||
|
||||
bool stopVideo;
|
||||
bool ignoreInput;
|
||||
|
Loading…
Reference in New Issue
Block a user