2021-06-06 01:26:18 +00:00
|
|
|
/**
|
|
|
|
* Looking Glass
|
|
|
|
* Copyright (C) 2017-2021 The Looking Glass Authors
|
|
|
|
* https://looking-glass.io
|
|
|
|
*
|
|
|
|
* This program is free software; you can redistribute it and/or modify it
|
|
|
|
* under the terms of the GNU General Public License as published by the Free
|
|
|
|
* Software Foundation; either version 2 of the License, or (at your option)
|
|
|
|
* any later version.
|
|
|
|
*
|
|
|
|
* This program is distributed in the hope that it will be useful, but WITHOUT
|
|
|
|
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
|
|
|
|
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
|
|
|
|
* more details.
|
|
|
|
*
|
|
|
|
* You should have received a copy of the GNU General Public License along
|
|
|
|
* with this program; if not, write to the Free Software Foundation, Inc., 59
|
|
|
|
* Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
|
|
|
*/
|
2021-01-25 16:34:22 +00:00
|
|
|
|
|
|
|
#include "keybind.h"
|
|
|
|
|
|
|
|
#include "main.h"
|
|
|
|
#include "app.h"
|
|
|
|
#include "core.h"
|
|
|
|
#include "kb.h"
|
|
|
|
|
|
|
|
#include "spice/spice.h"
|
|
|
|
|
2021-01-26 10:46:30 +00:00
|
|
|
#include <stdio.h>
|
|
|
|
|
2021-01-25 16:34:22 +00:00
|
|
|
static void bind_fullscreen(int sc, void * opaque)
|
|
|
|
{
|
2021-01-27 00:11:53 +00:00
|
|
|
app_setFullscreen(!app_getFullscreen());
|
2021-01-25 16:34:22 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
static void bind_video(int sc, void * opaque)
|
|
|
|
{
|
|
|
|
g_state.stopVideo = !g_state.stopVideo;
|
|
|
|
app_alert(
|
|
|
|
LG_ALERT_INFO,
|
|
|
|
g_state.stopVideo ? "Video Stream Disabled" : "Video Stream Enabled"
|
|
|
|
);
|
|
|
|
|
|
|
|
if (g_state.stopVideo)
|
|
|
|
core_stopFrameThread();
|
|
|
|
else
|
|
|
|
core_startFrameThread();
|
|
|
|
}
|
|
|
|
|
2021-02-01 03:09:03 +00:00
|
|
|
static void bind_showFPS(int sc, void * opaque)
|
|
|
|
{
|
|
|
|
g_state.showFPS = !g_state.showFPS;
|
|
|
|
}
|
|
|
|
|
2021-07-17 23:59:37 +00:00
|
|
|
static void bind_showTiming(int sc, void * opaque)
|
|
|
|
{
|
|
|
|
g_state.showTiming = !g_state.showTiming;
|
|
|
|
}
|
|
|
|
|
2021-01-25 16:34:22 +00:00
|
|
|
static void bind_rotate(int sc, void * opaque)
|
|
|
|
{
|
|
|
|
if (g_params.winRotate == LG_ROTATE_MAX-1)
|
|
|
|
g_params.winRotate = 0;
|
|
|
|
else
|
|
|
|
++g_params.winRotate;
|
|
|
|
core_updatePositionInfo();
|
|
|
|
}
|
|
|
|
|
|
|
|
static void bind_input(int sc, void * opaque)
|
|
|
|
{
|
|
|
|
g_state.ignoreInput = !g_state.ignoreInput;
|
|
|
|
|
|
|
|
if (g_state.ignoreInput)
|
|
|
|
core_setCursorInView(false);
|
|
|
|
else
|
|
|
|
g_state.ds->realignPointer();
|
|
|
|
|
|
|
|
app_alert(
|
|
|
|
LG_ALERT_INFO,
|
|
|
|
g_state.ignoreInput ? "Input Disabled" : "Input Enabled"
|
|
|
|
);
|
|
|
|
}
|
|
|
|
|
|
|
|
static void bind_quit(int sc, void * opaque)
|
|
|
|
{
|
|
|
|
g_state.state = APP_STATE_SHUTDOWN;
|
|
|
|
}
|
|
|
|
|
|
|
|
static void bind_mouseSens(int sc, void * opaque)
|
|
|
|
{
|
|
|
|
bool inc = (bool)opaque;
|
|
|
|
|
|
|
|
if (inc)
|
|
|
|
{
|
|
|
|
if (g_cursor.sens < 9)
|
|
|
|
++g_cursor.sens;
|
|
|
|
}
|
|
|
|
else
|
|
|
|
{
|
|
|
|
if (g_cursor.sens > -9)
|
|
|
|
--g_cursor.sens;
|
|
|
|
}
|
|
|
|
|
|
|
|
char msg[20];
|
|
|
|
snprintf(msg, sizeof(msg), "Sensitivity: %s%d",
|
|
|
|
g_cursor.sens > 0 ? "+" : "", g_cursor.sens);
|
|
|
|
|
|
|
|
app_alert(
|
|
|
|
LG_ALERT_INFO,
|
|
|
|
msg
|
|
|
|
);
|
|
|
|
}
|
|
|
|
|
|
|
|
static void bind_ctrlAltFn(int sc, void * opaque)
|
|
|
|
{
|
|
|
|
const uint32_t ctrl = xfree86_to_ps2[KEY_LEFTCTRL];
|
|
|
|
const uint32_t alt = xfree86_to_ps2[KEY_LEFTALT ];
|
|
|
|
const uint32_t fn = xfree86_to_ps2[sc];
|
|
|
|
spice_key_down(ctrl);
|
|
|
|
spice_key_down(alt );
|
|
|
|
spice_key_down(fn );
|
|
|
|
|
|
|
|
spice_key_up(ctrl);
|
|
|
|
spice_key_up(alt );
|
|
|
|
spice_key_up(fn );
|
|
|
|
}
|
|
|
|
|
|
|
|
static void bind_passthrough(int sc, void * opaque)
|
|
|
|
{
|
|
|
|
sc = xfree86_to_ps2[sc];
|
|
|
|
spice_key_down(sc);
|
|
|
|
spice_key_up (sc);
|
|
|
|
}
|
|
|
|
|
2021-07-26 21:27:47 +00:00
|
|
|
static void bind_toggleOverlay(int sc, void * opaque)
|
|
|
|
{
|
|
|
|
g_state.overlayInput ^= true;
|
2021-07-29 21:36:28 +00:00
|
|
|
g_state.cursorLast = -2;
|
2021-07-26 21:27:47 +00:00
|
|
|
if (g_state.overlayInput)
|
2021-07-29 09:29:33 +00:00
|
|
|
{
|
2021-07-26 21:27:47 +00:00
|
|
|
g_state.io->ConfigFlags &= ~ImGuiConfigFlags_NoMouse;
|
2021-07-29 09:29:33 +00:00
|
|
|
core_setGrabQuiet(false);
|
|
|
|
core_setCursorInView(false);
|
|
|
|
}
|
2021-07-26 21:27:47 +00:00
|
|
|
else
|
|
|
|
g_state.io->ConfigFlags |= ImGuiConfigFlags_NoMouse;
|
|
|
|
}
|
|
|
|
|
2021-01-25 16:34:22 +00:00
|
|
|
void keybind_register(void)
|
|
|
|
{
|
2021-07-26 21:27:47 +00:00
|
|
|
app_registerKeybind(KEY_F, bind_fullscreen , NULL, "Full screen toggle");
|
|
|
|
app_registerKeybind(KEY_V, bind_video , NULL, "Video stream toggle");
|
|
|
|
app_registerKeybind(KEY_D, bind_showFPS , NULL, "FPS display toggle");
|
|
|
|
app_registerKeybind(KEY_T, bind_showTiming , NULL, "Show frame timing information");
|
|
|
|
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");
|
2021-01-25 16:34:22 +00:00
|
|
|
|
|
|
|
if (g_params.useSpiceInput)
|
|
|
|
{
|
2021-01-31 03:48:24 +00:00
|
|
|
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_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_LEFTMETA , bind_passthrough, NULL, "Send LWin to the guest");
|
|
|
|
app_registerKeybind(KEY_RIGHTMETA, bind_passthrough, NULL, "Send RWin to the guest");
|
2021-01-25 16:34:22 +00:00
|
|
|
}
|
|
|
|
}
|