Skip to content
Snippets Groups Projects
Commit 13cb360f authored by Dmitry Petrov's avatar Dmitry Petrov Committed by Gerd Hoffmann
Browse files

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


Signed-off-by: default avatarDmitry Petrov <dpetroff@gmail.com>
Message-Id: <20220108153947.171861-4-dpetroff@gmail.com>
Signed-off-by: default avatarGerd Hoffmann <kraxel@redhat.com>
parent d70a5de4
No related branches found
No related tags found
No related merge requests found
......@@ -968,33 +968,63 @@ static gboolean gd_scroll_event(GtkWidget *widget, GdkEventScroll *scroll,
void *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) {
btn = INPUT_BUTTON_WHEEL_UP;
btn_vertical = INPUT_BUTTON_WHEEL_UP;
has_vertical = true;
} 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) {
gdouble delta_x, delta_y;
if (!gdk_event_get_scroll_deltas((GdkEvent *)scroll,
&delta_x, &delta_y)) {
return TRUE;
}
if (delta_y == 0) {
return TRUE;
} else if (delta_y > 0) {
btn = INPUT_BUTTON_WHEEL_DOWN;
if (delta_y > 0) {
btn_vertical = 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 {
btn = INPUT_BUTTON_WHEEL_UP;
return TRUE;
}
} else {
return TRUE;
}
qemu_input_queue_btn(vc->gfx.dcl.con, btn, true);
qemu_input_event_sync();
qemu_input_queue_btn(vc->gfx.dcl.con, btn, false);
qemu_input_event_sync();
if (has_vertical) {
qemu_input_queue_btn(vc->gfx.dcl.con, btn_vertical, true);
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;
}
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment