mirror of
https://github.com/mii443/qemu.git
synced 2025-12-03 11:08:25 +00:00
input: Allow to choose console with qemu_input_is_absolute
Although an input is routed depending on the console, qemu_input_is_absolute() had no mechanism to specify the console. Accept QemuConsole as an argument for qemu_input_is_absolute, and let the display know the absolute/relative state for a particular console. Signed-off-by: Akihiko Odaki <akihiko.odaki@daynix.com> Reviewed-by: Philippe Mathieu-Daudé <philmd@linaro.org> Reviewed-by: Marc-André Lureau <marcandre.lureau@redhat.com> Message-Id: <20230921082936.28100-1-akihiko.odaki@daynix.com>
This commit is contained in:
committed by
Marc-André Lureau
parent
50d0bfd0ed
commit
0337e4123e
12
ui/gtk.c
12
ui/gtk.c
@@ -204,7 +204,7 @@ static void gd_update_cursor(VirtualConsole *vc)
|
||||
}
|
||||
|
||||
window = gtk_widget_get_window(GTK_WIDGET(vc->gfx.drawing_area));
|
||||
if (s->full_screen || qemu_input_is_absolute() || s->ptr_owner == vc) {
|
||||
if (s->full_screen || qemu_input_is_absolute(vc->gfx.dcl.con) || s->ptr_owner == vc) {
|
||||
gdk_window_set_cursor(window, s->null_cursor);
|
||||
} else {
|
||||
gdk_window_set_cursor(window, NULL);
|
||||
@@ -453,7 +453,7 @@ static void gd_mouse_set(DisplayChangeListener *dcl,
|
||||
gint x_root, y_root;
|
||||
|
||||
if (!gtk_widget_get_realized(vc->gfx.drawing_area) ||
|
||||
qemu_input_is_absolute()) {
|
||||
qemu_input_is_absolute(dcl->con)) {
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -689,7 +689,7 @@ static void gd_mouse_mode_change(Notifier *notify, void *data)
|
||||
|
||||
s = container_of(notify, GtkDisplayState, mouse_mode_notifier);
|
||||
/* release the grab at switching to absolute mode */
|
||||
if (qemu_input_is_absolute() && s->ptr_owner) {
|
||||
if (s->ptr_owner && qemu_input_is_absolute(s->ptr_owner->gfx.dcl.con)) {
|
||||
if (!s->ptr_owner->window) {
|
||||
gtk_check_menu_item_set_active(GTK_CHECK_MENU_ITEM(s->grab_item),
|
||||
FALSE);
|
||||
@@ -903,7 +903,7 @@ static gboolean gd_motion_event(GtkWidget *widget, GdkEventMotion *motion,
|
||||
x = (motion->x - mx) / vc->gfx.scale_x * ws;
|
||||
y = (motion->y - my) / vc->gfx.scale_y * ws;
|
||||
|
||||
if (qemu_input_is_absolute()) {
|
||||
if (qemu_input_is_absolute(vc->gfx.dcl.con)) {
|
||||
if (x < 0 || y < 0 ||
|
||||
x >= surface_width(vc->gfx.ds) ||
|
||||
y >= surface_height(vc->gfx.ds)) {
|
||||
@@ -923,7 +923,7 @@ static gboolean gd_motion_event(GtkWidget *widget, GdkEventMotion *motion,
|
||||
s->last_y = y;
|
||||
s->last_set = TRUE;
|
||||
|
||||
if (!qemu_input_is_absolute() && s->ptr_owner == vc) {
|
||||
if (!qemu_input_is_absolute(vc->gfx.dcl.con) && s->ptr_owner == vc) {
|
||||
GdkScreen *screen = gtk_widget_get_screen(vc->gfx.drawing_area);
|
||||
GdkDisplay *dpy = gtk_widget_get_display(widget);
|
||||
GdkWindow *win = gtk_widget_get_window(widget);
|
||||
@@ -965,7 +965,7 @@ static gboolean gd_button_event(GtkWidget *widget, GdkEventButton *button,
|
||||
|
||||
/* implicitly grab the input at the first click in the relative mode */
|
||||
if (button->button == 1 && button->type == GDK_BUTTON_PRESS &&
|
||||
!qemu_input_is_absolute() && s->ptr_owner != vc) {
|
||||
!qemu_input_is_absolute(vc->gfx.dcl.con) && s->ptr_owner != vc) {
|
||||
if (!vc->window) {
|
||||
gtk_check_menu_item_set_active(GTK_CHECK_MENU_ITEM(s->grab_item),
|
||||
TRUE);
|
||||
|
||||
Reference in New Issue
Block a user