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:
parent
d70a5de441
commit
13cb360f6e
50
ui/gtk.c
50
ui/gtk.c
@ -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);
|
||||
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, false);
|
||||
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;
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user