ui/gtk: pass horizontal scroll information to the device code

Signed-off-by: Dmitry Petrov <dpetroff@gmail.com>
Message-Id: <20220108153947.171861-4-dpetroff@gmail.com>
Signed-off-by: Gerd Hoffmann <kraxel@redhat.com>
This commit is contained in:
Dmitry Petrov 2022-01-08 16:39:45 +01:00 committed by Gerd Hoffmann
parent d70a5de441
commit 13cb360f6e
1 changed files with 42 additions and 12 deletions

View File

@ -968,33 +968,63 @@ static gboolean gd_scroll_event(GtkWidget *widget, GdkEventScroll *scroll,
void *opaque) void *opaque)
{ {
VirtualConsole *vc = opaque; VirtualConsole *vc = opaque;
InputButton btn; InputButton btn_vertical;
InputButton btn_horizontal;
bool has_vertical = false;
bool has_horizontal = false;
if (scroll->direction == GDK_SCROLL_UP) { if (scroll->direction == GDK_SCROLL_UP) {
btn = INPUT_BUTTON_WHEEL_UP; btn_vertical = INPUT_BUTTON_WHEEL_UP;
has_vertical = true;
} else if (scroll->direction == GDK_SCROLL_DOWN) { } else if (scroll->direction == GDK_SCROLL_DOWN) {
btn = INPUT_BUTTON_WHEEL_DOWN; btn_vertical = INPUT_BUTTON_WHEEL_DOWN;
has_vertical = true;
} else if (scroll->direction == GDK_SCROLL_LEFT) {
btn_horizontal = INPUT_BUTTON_WHEEL_LEFT;
has_horizontal = true;
} else if (scroll->direction == GDK_SCROLL_RIGHT) {
btn_horizontal = INPUT_BUTTON_WHEEL_RIGHT;
has_horizontal = true;
} else if (scroll->direction == GDK_SCROLL_SMOOTH) { } else if (scroll->direction == GDK_SCROLL_SMOOTH) {
gdouble delta_x, delta_y; gdouble delta_x, delta_y;
if (!gdk_event_get_scroll_deltas((GdkEvent *)scroll, if (!gdk_event_get_scroll_deltas((GdkEvent *)scroll,
&delta_x, &delta_y)) { &delta_x, &delta_y)) {
return TRUE; return TRUE;
} }
if (delta_y == 0) {
return TRUE; if (delta_y > 0) {
} else if (delta_y > 0) { btn_vertical = INPUT_BUTTON_WHEEL_DOWN;
btn = INPUT_BUTTON_WHEEL_DOWN; has_vertical = true;
} else if (delta_y < 0) {
btn_vertical = INPUT_BUTTON_WHEEL_UP;
has_vertical = true;
} else if (delta_x > 0) {
btn_horizontal = INPUT_BUTTON_WHEEL_RIGHT;
has_horizontal = true;
} else if (delta_x < 0) {
btn_horizontal = INPUT_BUTTON_WHEEL_LEFT;
has_horizontal = true;
} else { } else {
btn = INPUT_BUTTON_WHEEL_UP; return TRUE;
} }
} else { } else {
return TRUE; return TRUE;
} }
qemu_input_queue_btn(vc->gfx.dcl.con, btn, true); if (has_vertical) {
qemu_input_event_sync(); qemu_input_queue_btn(vc->gfx.dcl.con, btn_vertical, true);
qemu_input_queue_btn(vc->gfx.dcl.con, btn, false); qemu_input_event_sync();
qemu_input_event_sync(); qemu_input_queue_btn(vc->gfx.dcl.con, btn_vertical, false);
qemu_input_event_sync();
}
if (has_horizontal) {
qemu_input_queue_btn(vc->gfx.dcl.con, btn_horizontal, true);
qemu_input_event_sync();
qemu_input_queue_btn(vc->gfx.dcl.con, btn_horizontal, false);
qemu_input_event_sync();
}
return TRUE; return TRUE;
} }