[PATCH] gtk: force realization of drawing area

marcandre.lureau@redhat.com posted 1 patch 7 months ago
Patches applied successfully (tree, apply log)
git fetch https://github.com/patchew-project/qemu tags/patchew/20231017111642.1155545-1-marcandre.lureau@redhat.com
Maintainers: Gerd Hoffmann <kraxel@redhat.com>, "Marc-André Lureau" <marcandre.lureau@redhat.com>
ui/gtk.c | 10 ++++++++++
1 file changed, 10 insertions(+)
[PATCH] gtk: force realization of drawing area
Posted by marcandre.lureau@redhat.com 7 months ago
From: Marc-André Lureau <marcandre.lureau@redhat.com>

Fixes the GL context creation from a widget that isn't yet realized (in
a hidden tab for example).

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

Signed-off-by: Marc-André Lureau <marcandre.lureau@redhat.com>
---
 ui/gtk.c | 10 ++++++++++
 1 file changed, 10 insertions(+)

diff --git a/ui/gtk.c b/ui/gtk.c
index 935de1209b..2a4c9b84ba 100644
--- a/ui/gtk.c
+++ b/ui/gtk.c
@@ -2371,6 +2371,7 @@ static void gtk_display_init(DisplayState *ds, DisplayOptions *opts)
     GdkDisplay *window_display;
     GtkIconTheme *theme;
     char *dir;
+    int idx;
 
     if (!gtkinit) {
         fprintf(stderr, "gtk initialization failed\n");
@@ -2434,6 +2435,15 @@ static void gtk_display_init(DisplayState *ds, DisplayOptions *opts)
     gtk_container_add(GTK_CONTAINER(s->window), s->vbox);
 
     gtk_widget_show_all(s->window);
+
+    for (idx = 0;; idx++) {
+        QemuConsole *con = qemu_console_lookup_by_index(idx);
+        if (!con) {
+            break;
+        }
+        gtk_widget_realize(s->vc[idx].gfx.drawing_area);
+    }
+
     if (opts->u.gtk.has_show_menubar &&
         !opts->u.gtk.show_menubar) {
         gtk_widget_hide(s->menu_bar);
-- 
2.41.0


Re: [PATCH] gtk: force realization of drawing area
Posted by Antonio Caggiano 7 months ago
Reviewed-by: Antonio Caggiano <quic_acaggian@quicinc.com>

On 17/10/2023 13:16, marcandre.lureau@redhat.com wrote:
> From: Marc-André Lureau <marcandre.lureau@redhat.com>
> 
> Fixes the GL context creation from a widget that isn't yet realized (in
> a hidden tab for example).
> 
> Resolves:
> https://gitlab.com/qemu-project/qemu/-/issues/1727
> 
> Signed-off-by: Marc-André Lureau <marcandre.lureau@redhat.com>
> ---
>   ui/gtk.c | 10 ++++++++++
>   1 file changed, 10 insertions(+)
> 
> diff --git a/ui/gtk.c b/ui/gtk.c
> index 935de1209b..2a4c9b84ba 100644
> --- a/ui/gtk.c
> +++ b/ui/gtk.c
> @@ -2371,6 +2371,7 @@ static void gtk_display_init(DisplayState *ds, DisplayOptions *opts)
>       GdkDisplay *window_display;
>       GtkIconTheme *theme;
>       char *dir;
> +    int idx;
>   
>       if (!gtkinit) {
>           fprintf(stderr, "gtk initialization failed\n");
> @@ -2434,6 +2435,15 @@ static void gtk_display_init(DisplayState *ds, DisplayOptions *opts)
>       gtk_container_add(GTK_CONTAINER(s->window), s->vbox);
>   
>       gtk_widget_show_all(s->window);
> +
> +    for (idx = 0;; idx++) {
> +        QemuConsole *con = qemu_console_lookup_by_index(idx);
> +        if (!con) {
> +            break;
> +        }
> +        gtk_widget_realize(s->vc[idx].gfx.drawing_area);
> +    }
> +
>       if (opts->u.gtk.has_show_menubar &&
>           !opts->u.gtk.show_menubar) {
>           gtk_widget_hide(s->menu_bar);