Reverted the previous approach and switched to the new, non-hacky approach of getting rid of the accelerator and instead handling enter full screen the same way exit full screen is handled.

This commit is contained in:
OBattler
2023-04-13 22:47:42 +02:00
parent a0c292d27e
commit df24b4be0f
10 changed files with 79 additions and 287 deletions

View File

@@ -156,6 +156,8 @@ extern "C" void qt_blit(int x, int y, int w, int h, int monitor_index);
extern MainWindow *main_window;
static int fs_on_signal = 0, fs_off_signal = 0;
MainWindow::MainWindow(QWidget *parent)
: QMainWindow(parent)
, ui(new Ui::MainWindow)
@@ -580,7 +582,6 @@ MainWindow::MainWindow(QWidget *parent)
}
#ifdef Q_OS_MACOS
ui->actionFullscreen->setShortcutVisibleInContextMenu(true);
ui->actionCtrl_Alt_Del->setShortcutVisibleInContextMenu(true);
ui->actionTake_screenshot->setShortcutVisibleInContextMenu(true);
#endif
@@ -1241,13 +1242,14 @@ MainWindow::keyPressEvent(QKeyEvent *event)
#endif
}
if ((video_fullscreen > 0) && keyboard_isfsexit()) {
ui->actionFullscreen->trigger();
}
if (!fs_off_signal && (video_fullscreen > 0) && keyboard_isfsexit())
fs_off_signal = 1;
if (keyboard_ismsexit()) {
if (!fs_on_signal && (video_fullscreen == 0) && keyboard_isfsenter())
fs_on_signal = 1;
if (keyboard_ismsexit())
plat_mouse_capture(0);
}
if ((video_fullscreen > 0) && (keyboard_recv(0x1D) || keyboard_recv(0x11D))) {
if (keyboard_recv(0x57))
@@ -1279,6 +1281,17 @@ MainWindow::keyReleaseEvent(QKeyEvent *event)
plat_pause(dopause ^ 1);
}
}
if (fs_off_signal && (video_fullscreen > 0) && keyboard_isfsexit_down()) {
ui->actionFullscreen->trigger();
fs_off_signal = 0;
}
if (fs_on_signal && (video_fullscreen == 0) && keyboard_isfsenter_down()) {
ui->actionFullscreen->trigger();
fs_on_signal = 0;
}
if (!send_keyboard_input)
return;

View File

@@ -362,12 +362,6 @@
<property name="text">
<string>&amp;Fullscreen</string>
</property>
<property name="shortcut">
<string>Ctrl+Alt+PgUp</string>
</property>
<property name="shortcutVisibleInContextMenu">
<bool>false</bool>
</property>
</action>
<action name="actionSoftware_Renderer">
<property name="checkable">

View File

@@ -172,8 +172,7 @@ void
WindowsRawInputFilter::keyboard_handle(PRAWINPUT raw)
{
USHORT scancode;
static int recv_lalt = 0, recv_ralt = 0, recv_tab = 0, recv_lctrl = 0, recv_rctrl = 0;
static int recv_npgup = 0, recv_pgup = 0;
static int recv_lalt = 0, recv_ralt = 0, recv_tab = 0;
RAWKEYBOARD rawKB = raw->data.keyboard;
scancode = rawKB.MakeCode;
@@ -223,148 +222,17 @@ WindowsRawInputFilter::keyboard_handle(PRAWINPUT raw)
is not captured, suppress the ALT and send a TAB key up. */
keyboard_input(0, 0x00f);
recv_tab = 0;
} else if (((scancode == 0x049) || (scancode == 0x149)) && !(rawKB.Flags & RI_KEY_BREAK) && (recv_lalt || recv_ralt) && (recv_lctrl || recv_rctrl) && (!kbd_req_capture || mouse_capture)) {
/* We received a NumPad Page Up or Page Up while CTRL+ALT was pressed, while the keyboard
is captured, suppress the Page Up and send an CTRL+ALT key up. */
if (recv_lctrl) {
keyboard_input(0, 0x01d);
/* Extra key press and release so the guest is not stuck in the
menu bar. */
keyboard_input(1, 0x01d);
keyboard_input(0, 0x01d);
recv_lctrl = 0;
}
if (recv_rctrl) {
keyboard_input(0, 0x11d);
/* Extra key press and release so the guest is not stuck in the
menu bar. */
keyboard_input(1, 0x11d);
keyboard_input(0, 0x11d);
recv_rctrl = 0;
}
if (recv_lalt) {
keyboard_input(0, 0x038);
/* Extra key press and release so the guest is not stuck in the
menu bar. */
keyboard_input(1, 0x038);
keyboard_input(0, 0x038);
recv_lalt = 0;
}
if (recv_ralt) {
keyboard_input(0, 0x138);
/* Extra key press and release so the guest is not stuck in the
menu bar. */
keyboard_input(1, 0x138);
keyboard_input(0, 0x138);
recv_ralt = 0;
}
} else if (((scancode == 0x038) || (scancode == 0x138)) && !(rawKB.Flags & RI_KEY_BREAK) && recv_npgup && (recv_lctrl || recv_rctrl) && (!kbd_req_capture || mouse_capture)) {
/* We received an ALT while CTRL+NumPad Page Up was pressed, while the mouse
is not captured, suppress the ALT and send a TAB key up. */
if (recv_lctrl) {
keyboard_input(0, 0x01d);
/* Extra key press and release so the guest is not stuck in the
menu bar. */
keyboard_input(1, 0x01d);
keyboard_input(0, 0x01d);
recv_lctrl = 0;
}
if (recv_rctrl) {
keyboard_input(0, 0x11d);
/* Extra key press and release so the guest is not stuck in the
menu bar. */
keyboard_input(1, 0x11d);
keyboard_input(0, 0x11d);
recv_rctrl = 0;
}
keyboard_input(0, 0x049);
recv_npgup = 0;
} else if (((scancode == 0x01d) || (scancode == 0x11d)) && !(rawKB.Flags & RI_KEY_BREAK) && recv_npgup && (recv_lalt || recv_ralt) && (!kbd_req_capture || mouse_capture)) {
/* We received an CTRL while ALT+NumPad Page Up was pressed, while the mouse
is not captured, suppress the ALT and send a TAB key up. */
if (recv_lalt) {
keyboard_input(0, 0x038);
/* Extra key press and release so the guest is not stuck in the
menu bar. */
keyboard_input(1, 0x038);
keyboard_input(0, 0x038);
recv_lalt = 0;
}
if (recv_ralt) {
keyboard_input(0, 0x138);
/* Extra key press and release so the guest is not stuck in the
menu bar. */
keyboard_input(1, 0x138);
keyboard_input(0, 0x138);
recv_ralt = 0;
}
keyboard_input(0, 0x049);
recv_npgup = 0;
} else if (((scancode == 0x038) || (scancode == 0x138)) && !(rawKB.Flags & RI_KEY_BREAK) && recv_pgup && (recv_lctrl || recv_rctrl) && (!kbd_req_capture || mouse_capture)) {
/* We received an ALT while CTRL+Page Up was pressed, while the mouse
is not captured, suppress the ALT and send a TAB key up. */
if (recv_lalt) {
keyboard_input(0, 0x038);
/* Extra key press and release so the guest is not stuck in the
menu bar. */
keyboard_input(1, 0x038);
keyboard_input(0, 0x038);
recv_lalt = 0;
}
if (recv_ralt) {
keyboard_input(0, 0x138);
/* Extra key press and release so the guest is not stuck in the
menu bar. */
keyboard_input(1, 0x138);
keyboard_input(0, 0x138);
recv_ralt = 0;
}
keyboard_input(0, 0x149);
recv_pgup = 0;
} else if (((scancode == 0x01d) || (scancode == 0x11d)) && !(rawKB.Flags & RI_KEY_BREAK) && recv_pgup && (recv_lalt || recv_ralt) && (!kbd_req_capture || mouse_capture)) {
/* We received an CTRL while ALT+Page Up was pressed, while the mouse
is not captured, suppress the ALT and send a TAB key up. */
if (recv_lctrl) {
keyboard_input(0, 0x01d);
/* Extra key press and release so the guest is not stuck in the
menu bar. */
keyboard_input(1, 0x01d);
keyboard_input(0, 0x01d);
recv_lctrl = 0;
}
if (recv_rctrl) {
keyboard_input(0, 0x11d);
/* Extra key press and release so the guest is not stuck in the
menu bar. */
keyboard_input(1, 0x11d);
keyboard_input(0, 0x11d);
recv_rctrl = 0;
}
keyboard_input(0, 0x149);
recv_pgup = 0;
} else {
switch (scancode) {
case 0x00f:
recv_tab = !(rawKB.Flags & RI_KEY_BREAK);
break;
case 0x01d:
recv_lctrl = !(rawKB.Flags & RI_KEY_BREAK);
break;
case 0x049:
recv_npgup = !(rawKB.Flags & RI_KEY_BREAK);
break;
case 0x038:
recv_lalt = !(rawKB.Flags & RI_KEY_BREAK);
break;
case 0x11d:
recv_rctrl = !(rawKB.Flags & RI_KEY_BREAK);
break;
case 0x138:
recv_ralt = !(rawKB.Flags & RI_KEY_BREAK);
break;
case 0x149:
recv_pgup = !(rawKB.Flags & RI_KEY_BREAK);
break;
}
/* Translate right CTRL to left ALT if the user has so