diff options
| author | Richard Henderson <richard.henderson@linaro.org> | 2021-11-22 14:17:14 +0100 |
|---|---|---|
| committer | Richard Henderson <richard.henderson@linaro.org> | 2021-11-22 14:17:14 +0100 |
| commit | 5d1f437fb42dbd520b81a834fb2b7939ec1a7860 (patch) | |
| tree | 01048f86eb9e5cb4bf297ce8c6cf62f0f8ff9e06 /ui/gtk.c | |
| parent | 49aaac3548bc5a4632a14de939d5312b28dc1ba2 (diff) | |
| parent | b9e5628ca5d42994cc6f82752d9bf0bc98f51f64 (diff) | |
| download | focaccia-qemu-5d1f437fb42dbd520b81a834fb2b7939ec1a7860.tar.gz focaccia-qemu-5d1f437fb42dbd520b81a834fb2b7939ec1a7860.zip | |
Merge tag 'fixes-20211122-pull-request' of git://git.kraxel.org/qemu into staging
fixes for 6.2: microvm, ui, modules. # gpg: Signature made Mon 22 Nov 2021 01:39:53 PM CET # gpg: using RSA key A0328CFFB93A17A79901FE7D4CB6D8EED3E87138 # gpg: Good signature from "Gerd Hoffmann (work) <kraxel@redhat.com>" [full] # gpg: aka "Gerd Hoffmann <gerd@kraxel.org>" [full] # gpg: aka "Gerd Hoffmann (private) <kraxel@gmail.com>" [full] * tag 'fixes-20211122-pull-request' of git://git.kraxel.org/qemu: microvm: check g_file_set_contents() return value microvm: add missing g_free() call hw/i386/microvm: Reduce annoying debug message in dt_setup_microvm() migration: fix dump-vmstate with modules ui/vnc-clipboard: fix adding notifier twice ui/gtk: graphic_hw_gl_flushed after closing dmabuf->fence_fd ui: fix incorrect pointer position on highdpi with gtk ui: fix incorrect scaling on highdpi with gtk/opengl Signed-off-by: Richard Henderson <richard.henderson@linaro.org>
Diffstat (limited to 'ui/gtk.c')
| -rw-r--r-- | ui/gtk.c | 17 |
1 files changed, 10 insertions, 7 deletions
diff --git a/ui/gtk.c b/ui/gtk.c index d2892ea6b4..428f02f2df 100644 --- a/ui/gtk.c +++ b/ui/gtk.c @@ -589,11 +589,11 @@ void gd_hw_gl_flushed(void *vcon) VirtualConsole *vc = vcon; QemuDmaBuf *dmabuf = vc->gfx.guest_fb.dmabuf; - graphic_hw_gl_block(vc->gfx.dcl.con, false); - graphic_hw_gl_flushed(vc->gfx.dcl.con); qemu_set_fd_handler(dmabuf->fence_fd, NULL, NULL, NULL); close(dmabuf->fence_fd); dmabuf->fence_fd = -1; + graphic_hw_gl_block(vc->gfx.dcl.con, false); + graphic_hw_gl_flushed(vc->gfx.dcl.con); } /** DisplayState Callbacks (opengl version) **/ @@ -838,10 +838,11 @@ static gboolean gd_motion_event(GtkWidget *widget, GdkEventMotion *motion, { VirtualConsole *vc = opaque; GtkDisplayState *s = vc->s; + GdkWindow *window; int x, y; int mx, my; int fbh, fbw; - int ww, wh; + int ww, wh, ws; if (!vc->gfx.ds) { return TRUE; @@ -850,8 +851,10 @@ static gboolean gd_motion_event(GtkWidget *widget, GdkEventMotion *motion, fbw = surface_width(vc->gfx.ds) * vc->gfx.scale_x; fbh = surface_height(vc->gfx.ds) * vc->gfx.scale_y; - ww = gdk_window_get_width(gtk_widget_get_window(vc->gfx.drawing_area)); - wh = gdk_window_get_height(gtk_widget_get_window(vc->gfx.drawing_area)); + window = gtk_widget_get_window(vc->gfx.drawing_area); + ww = gdk_window_get_width(window); + wh = gdk_window_get_height(window); + ws = gdk_window_get_scale_factor(window); mx = my = 0; if (ww > fbw) { @@ -861,8 +864,8 @@ static gboolean gd_motion_event(GtkWidget *widget, GdkEventMotion *motion, my = (wh - fbh) / 2; } - x = (motion->x - mx) / vc->gfx.scale_x; - y = (motion->y - my) / vc->gfx.scale_y; + x = (motion->x - mx) / vc->gfx.scale_x * ws; + y = (motion->y - my) / vc->gfx.scale_y * ws; if (qemu_input_is_absolute()) { if (x < 0 || y < 0 || |