diff mbox series

ui/gtk: Fix event handling on macOS hosts

Message ID 20241121162146.53643-1-charmitro@posteo.net (mailing list archive)
State New
Headers show
Series ui/gtk: Fix event handling on macOS hosts | expand

Commit Message

Charalampos Mitrodimas Nov. 21, 2024, 4:21 p.m. UTC
The GTK+ UI was not properly handling events on macOS due to missing
event loop polling in the Cocoa backend. Add polling of the GLib main
context during display refresh to ensure UI events are processed.

This fixes UI responsiveness issues when running QEMU with the GTK
display (--display gtk) on macOS hosts.

Resolves: https://gitlab.com/qemu-project/qemu/-/issues/2676

Co-developed-by: Phil Dennis-Jordan <phil@philjordan.eu>
Signed-off-by: Charalampos Mitrodimas <charmitro@posteo.net>
---
 ui/gtk.c | 9 +++++++++
 1 file changed, 9 insertions(+)

Comments

Phil Dennis-Jordan Nov. 21, 2024, 7:13 p.m. UTC | #1
Charalampos contacted me off-list with his original patch and I made a few
suggestions after testing it. So I'm not sure the 'Co-developed-by' tag is
warranted given I didn't write any code. In any case, this patch worked in
the testing I did on macOS, and it looks to be near-zero risk on other
platforms. I can't think of a simpler fix to the problem.

Signed-off-by: Phil Dennis-Jordan <phil@philjordan.eu>
or
Reviewed-by: Phil Dennis-Jordan <phil@philjordan.eu>
Tested-by: Phil Dennis-Jordan <phil@philjordan.eu>

whichever is deemed appropriate in these circumstances.


On Thu, 21 Nov 2024 at 17:23, Charalampos Mitrodimas <charmitro@posteo.net>
wrote:

> The GTK+ UI was not properly handling events on macOS due to missing
> event loop polling in the Cocoa backend. Add polling of the GLib main
> context during display refresh to ensure UI events are processed.
>
> This fixes UI responsiveness issues when running QEMU with the GTK
> display (--display gtk) on macOS hosts.
>
> Resolves: https://gitlab.com/qemu-project/qemu/-/issues/2676
>
> Co-developed-by: Phil Dennis-Jordan <phil@philjordan.eu>
> Signed-off-by: Charalampos Mitrodimas <charmitro@posteo.net>
> ---
>  ui/gtk.c | 9 +++++++++
>  1 file changed, 9 insertions(+)
>
> diff --git a/ui/gtk.c b/ui/gtk.c
> index bf9d3dd679..979210255f 100644
> --- a/ui/gtk.c
> +++ b/ui/gtk.c
> @@ -437,6 +437,15 @@ static void gd_update(DisplayChangeListener *dcl,
>
>  static void gd_refresh(DisplayChangeListener *dcl)
>  {
> +#ifdef GDK_WINDOWING_QUARTZ
> +    GMainContext *context;
> +    if (GDK_IS_QUARTZ_DISPLAY(gdk_display_get_default())) {
> +        context = g_main_context_default();
> +        while (g_main_context_pending(context)) {
> +            g_main_context_iteration(context, FALSE);
> +        }
> +    }
> +#endif
>      graphic_hw_update(dcl->con);
>  }
>
> --
> 2.39.5 (Apple Git-154)
>
>
>
diff mbox series

Patch

diff --git a/ui/gtk.c b/ui/gtk.c
index bf9d3dd679..979210255f 100644
--- a/ui/gtk.c
+++ b/ui/gtk.c
@@ -437,6 +437,15 @@  static void gd_update(DisplayChangeListener *dcl,
 
 static void gd_refresh(DisplayChangeListener *dcl)
 {
+#ifdef GDK_WINDOWING_QUARTZ
+    GMainContext *context;
+    if (GDK_IS_QUARTZ_DISPLAY(gdk_display_get_default())) {
+        context = g_main_context_default();
+        while (g_main_context_pending(context)) {
+            g_main_context_iteration(context, FALSE);
+        }
+    }
+#endif
     graphic_hw_update(dcl->con);
 }