[PATCH] ui/gtk: full-screening all detached windows

Dongwon Kim posted 1 patch 7 months, 1 week ago
Patches applied successfully (tree, apply log)
git fetch https://github.com/patchew-project/qemu tags/patchew/20231012222438.13853-1-dongwon.kim@intel.com
Maintainers: Gerd Hoffmann <kraxel@redhat.com>, "Marc-André Lureau" <marcandre.lureau@redhat.com>
ui/gtk.c | 44 ++++++++++++++++++++++++++++++++++----------
1 file changed, 34 insertions(+), 10 deletions(-)
[PATCH] ui/gtk: full-screening all detached windows
Posted by Dongwon Kim 7 months, 1 week ago
When turning on or off full-screen menu, all detached windows should
be full-screened or un-full-screened altogether.

Cc: Marc-André Lureau <marcandre.lureau@redhat.com>
Signed-off-by: Dongwon Kim <dongwon.kim@intel.com>
---
 ui/gtk.c | 44 ++++++++++++++++++++++++++++++++++----------
 1 file changed, 34 insertions(+), 10 deletions(-)

diff --git a/ui/gtk.c b/ui/gtk.c
index 935de1209b..3a380f8d59 100644
--- a/ui/gtk.c
+++ b/ui/gtk.c
@@ -1452,29 +1452,53 @@ static void gd_accel_show_menubar(void *opaque)
 static void gd_menu_full_screen(GtkMenuItem *item, void *opaque)
 {
     GtkDisplayState *s = opaque;
-    VirtualConsole *vc = gd_vc_find_current(s);
+    VirtualConsole *vc;
+    int i;
 
     if (!s->full_screen) {
         gtk_notebook_set_show_tabs(GTK_NOTEBOOK(s->notebook), FALSE);
         gtk_widget_hide(s->menu_bar);
-        if (vc->type == GD_VC_GFX) {
-            gtk_widget_set_size_request(vc->gfx.drawing_area, -1, -1);
-        }
-        gtk_window_fullscreen(GTK_WINDOW(s->window));
         s->full_screen = TRUE;
+        gtk_window_fullscreen(GTK_WINDOW(s->window));
+
+        for (i = 0; i < s->nb_vcs; i++) {
+            vc = &s->vc[i];
+            if (!vc->window) {
+                continue;
+            }
+            if (vc->type == GD_VC_GFX) {
+                gtk_widget_set_size_request(vc->gfx.drawing_area, -1, -1);
+            }
+            gtk_window_fullscreen(GTK_WINDOW(vc->window));
+        }
     } else {
         gtk_window_unfullscreen(GTK_WINDOW(s->window));
+
+        for (i = 0; i < s->nb_vcs; i++) {
+            vc = &s->vc[i];
+            if (!vc->window) {
+                continue;
+            }
+            gtk_window_unfullscreen(GTK_WINDOW(vc->window));
+
+            if (vc->type == GD_VC_GFX) {
+                vc->gfx.scale_x = 1.0;
+                vc->gfx.scale_y = 1.0;
+                gd_update_windowsize(vc);
+            }
+        }
+
         gd_menu_show_tabs(GTK_MENU_ITEM(s->show_tabs_item), s);
         if (gtk_check_menu_item_get_active(
                     GTK_CHECK_MENU_ITEM(s->show_menubar_item))) {
             gtk_widget_show(s->menu_bar);
         }
         s->full_screen = FALSE;
-        if (vc->type == GD_VC_GFX) {
-            vc->gfx.scale_x = 1.0;
-            vc->gfx.scale_y = 1.0;
-            gd_update_windowsize(vc);
-        }
+    }
+
+    vc = gd_vc_find_current(s);
+    if (!vc) {
+        return;
     }
 
     gd_update_cursor(vc);
-- 
2.20.1


Re: [PATCH] ui/gtk: full-screening all detached windows
Posted by Marc-André Lureau 7 months ago
Hi

On Fri, Oct 13, 2023 at 2:51 AM Dongwon Kim <dongwon.kim@intel.com> wrote:
>
> When turning on or off full-screen menu, all detached windows should
> be full-screened or un-full-screened altogether.

I am not convinced this is desirable. Not only having multiple
fullscreen windows on the same screen is usually a bit harder to deal
with. You typically want one imho.

But the most annoying thing is probably that detached windows/consoles
do not have the same shortcuts as the main window, and you can't
unfullscreen them then...

Wouldn't you prefer to have a working fullscreen keyboard shortcut for
detached tabs instead? This way, each window can be toggled
full/unfull individually.

thanks

>
> Cc: Marc-André Lureau <marcandre.lureau@redhat.com>
> Signed-off-by: Dongwon Kim <dongwon.kim@intel.com>
> ---
>  ui/gtk.c | 44 ++++++++++++++++++++++++++++++++++----------
>  1 file changed, 34 insertions(+), 10 deletions(-)
>
> diff --git a/ui/gtk.c b/ui/gtk.c
> index 935de1209b..3a380f8d59 100644
> --- a/ui/gtk.c
> +++ b/ui/gtk.c
> @@ -1452,29 +1452,53 @@ static void gd_accel_show_menubar(void *opaque)
>  static void gd_menu_full_screen(GtkMenuItem *item, void *opaque)
>  {
>      GtkDisplayState *s = opaque;
> -    VirtualConsole *vc = gd_vc_find_current(s);
> +    VirtualConsole *vc;
> +    int i;
>
>      if (!s->full_screen) {
>          gtk_notebook_set_show_tabs(GTK_NOTEBOOK(s->notebook), FALSE);
>          gtk_widget_hide(s->menu_bar);
> -        if (vc->type == GD_VC_GFX) {
> -            gtk_widget_set_size_request(vc->gfx.drawing_area, -1, -1);
> -        }
> -        gtk_window_fullscreen(GTK_WINDOW(s->window));
>          s->full_screen = TRUE;
> +        gtk_window_fullscreen(GTK_WINDOW(s->window));
> +
> +        for (i = 0; i < s->nb_vcs; i++) {
> +            vc = &s->vc[i];
> +            if (!vc->window) {
> +                continue;
> +            }
> +            if (vc->type == GD_VC_GFX) {
> +                gtk_widget_set_size_request(vc->gfx.drawing_area, -1, -1);
> +            }
> +            gtk_window_fullscreen(GTK_WINDOW(vc->window));
> +        }
>      } else {
>          gtk_window_unfullscreen(GTK_WINDOW(s->window));
> +
> +        for (i = 0; i < s->nb_vcs; i++) {
> +            vc = &s->vc[i];
> +            if (!vc->window) {
> +                continue;
> +            }
> +            gtk_window_unfullscreen(GTK_WINDOW(vc->window));
> +
> +            if (vc->type == GD_VC_GFX) {
> +                vc->gfx.scale_x = 1.0;
> +                vc->gfx.scale_y = 1.0;
> +                gd_update_windowsize(vc);
> +            }
> +        }
> +
>          gd_menu_show_tabs(GTK_MENU_ITEM(s->show_tabs_item), s);
>          if (gtk_check_menu_item_get_active(
>                      GTK_CHECK_MENU_ITEM(s->show_menubar_item))) {
>              gtk_widget_show(s->menu_bar);
>          }
>          s->full_screen = FALSE;
> -        if (vc->type == GD_VC_GFX) {
> -            vc->gfx.scale_x = 1.0;
> -            vc->gfx.scale_y = 1.0;
> -            gd_update_windowsize(vc);
> -        }
> +    }
> +
> +    vc = gd_vc_find_current(s);
> +    if (!vc) {
> +        return;
>      }
>
>      gd_update_cursor(vc);
> --
> 2.20.1
>
RE: [PATCH] ui/gtk: full-screening all detached windows
Posted by Kim, Dongwon 7 months ago
Hi Marc-André,

> Hi
> 
> On Fri, Oct 13, 2023 at 2:51 AM Dongwon Kim <dongwon.kim@intel.com>
> wrote:
> >
> > When turning on or off full-screen menu, all detached windows should
> > be full-screened or un-full-screened altogether.
> 
> I am not convinced this is desirable. Not only having multiple fullscreen windows
> on the same screen is usually a bit harder to deal with. You typically want one
> imho.
> 
> But the most annoying thing is probably that detached windows/consoles do not
> have the same shortcuts as the main window, and you can't unfullscreen them
> then...
> 
> Wouldn't you prefer to have a working fullscreen keyboard shortcut for
> detached tabs instead? This way, each window can be toggled full/unfull
> individually.

[DW] That is right. Two detached windows on the same display would be overlapped, which will be ugly. I also thought about that as well as other undesirable situations but my initial thought was the full-screen
menu is global and all QEMU windows should be controlled by it. Anyhow, I like your idea about individual control.. so we would probably need to add more full-screen menus, like 'fullscreen1, fullscreen2, fullscreen3..."
to the menu then also assign a hotkey to each one of them? 

> 
> thanks
> 
> >
> > Cc: Marc-André Lureau <marcandre.lureau@redhat.com>
> > Signed-off-by: Dongwon Kim <dongwon.kim@intel.com>
> > ---
> >  ui/gtk.c | 44 ++++++++++++++++++++++++++++++++++----------
> >  1 file changed, 34 insertions(+), 10 deletions(-)
> >
> > diff --git a/ui/gtk.c b/ui/gtk.c
> > index 935de1209b..3a380f8d59 100644
> > --- a/ui/gtk.c
> > +++ b/ui/gtk.c
> > @@ -1452,29 +1452,53 @@ static void gd_accel_show_menubar(void
> > *opaque)  static void gd_menu_full_screen(GtkMenuItem *item, void
> > *opaque)  {
> >      GtkDisplayState *s = opaque;
> > -    VirtualConsole *vc = gd_vc_find_current(s);
> > +    VirtualConsole *vc;
> > +    int i;
> >
> >      if (!s->full_screen) {
> >          gtk_notebook_set_show_tabs(GTK_NOTEBOOK(s->notebook), FALSE);
> >          gtk_widget_hide(s->menu_bar);
> > -        if (vc->type == GD_VC_GFX) {
> > -            gtk_widget_set_size_request(vc->gfx.drawing_area, -1, -1);
> > -        }
> > -        gtk_window_fullscreen(GTK_WINDOW(s->window));
> >          s->full_screen = TRUE;
> > +        gtk_window_fullscreen(GTK_WINDOW(s->window));
> > +
> > +        for (i = 0; i < s->nb_vcs; i++) {
> > +            vc = &s->vc[i];
> > +            if (!vc->window) {
> > +                continue;
> > +            }
> > +            if (vc->type == GD_VC_GFX) {
> > +                gtk_widget_set_size_request(vc->gfx.drawing_area, -1, -1);
> > +            }
> > +            gtk_window_fullscreen(GTK_WINDOW(vc->window));
> > +        }
> >      } else {
> >          gtk_window_unfullscreen(GTK_WINDOW(s->window));
> > +
> > +        for (i = 0; i < s->nb_vcs; i++) {
> > +            vc = &s->vc[i];
> > +            if (!vc->window) {
> > +                continue;
> > +            }
> > +            gtk_window_unfullscreen(GTK_WINDOW(vc->window));
> > +
> > +            if (vc->type == GD_VC_GFX) {
> > +                vc->gfx.scale_x = 1.0;
> > +                vc->gfx.scale_y = 1.0;
> > +                gd_update_windowsize(vc);
> > +            }
> > +        }
> > +
> >          gd_menu_show_tabs(GTK_MENU_ITEM(s->show_tabs_item), s);
> >          if (gtk_check_menu_item_get_active(
> >                      GTK_CHECK_MENU_ITEM(s->show_menubar_item))) {
> >              gtk_widget_show(s->menu_bar);
> >          }
> >          s->full_screen = FALSE;
> > -        if (vc->type == GD_VC_GFX) {
> > -            vc->gfx.scale_x = 1.0;
> > -            vc->gfx.scale_y = 1.0;
> > -            gd_update_windowsize(vc);
> > -        }
> > +    }
> > +
> > +    vc = gd_vc_find_current(s);
> > +    if (!vc) {
> > +        return;
> >      }
> >
> >      gd_update_cursor(vc);
> > --
> > 2.20.1
> >

Re: [PATCH] ui/gtk: full-screening all detached windows
Posted by Marc-André Lureau 7 months ago
Hi

On Wed, Oct 18, 2023 at 3:45 AM Kim, Dongwon <dongwon.kim@intel.com> wrote:
>
> Hi Marc-André,
>
> > Hi
> >
> > On Fri, Oct 13, 2023 at 2:51 AM Dongwon Kim <dongwon.kim@intel.com>
> > wrote:
> > >
> > > When turning on or off full-screen menu, all detached windows should
> > > be full-screened or un-full-screened altogether.
> >
> > I am not convinced this is desirable. Not only having multiple fullscreen windows
> > on the same screen is usually a bit harder to deal with. You typically want one
> > imho.
> >
> > But the most annoying thing is probably that detached windows/consoles do not
> > have the same shortcuts as the main window, and you can't unfullscreen them
> > then...
> >
> > Wouldn't you prefer to have a working fullscreen keyboard shortcut for
> > detached tabs instead? This way, each window can be toggled full/unfull
> > individually.
>
> [DW] That is right. Two detached windows on the same display would be overlapped, which will be ugly. I also thought about that as well as other undesirable situations but my initial thought was the full-screen
> menu is global and all QEMU windows should be controlled by it. Anyhow, I like your idea about individual control.. so we would probably need to add more full-screen menus, like 'fullscreen1, fullscreen2, fullscreen3..."
> to the menu then also assign a hotkey to each one of them?

The same shortcut should be used, only it applies to the currently
focused window.

>
> >
> > thanks
> >
> > >
> > > Cc: Marc-André Lureau <marcandre.lureau@redhat.com>
> > > Signed-off-by: Dongwon Kim <dongwon.kim@intel.com>
> > > ---
> > >  ui/gtk.c | 44 ++++++++++++++++++++++++++++++++++----------
> > >  1 file changed, 34 insertions(+), 10 deletions(-)
> > >
> > > diff --git a/ui/gtk.c b/ui/gtk.c
> > > index 935de1209b..3a380f8d59 100644
> > > --- a/ui/gtk.c
> > > +++ b/ui/gtk.c
> > > @@ -1452,29 +1452,53 @@ static void gd_accel_show_menubar(void
> > > *opaque)  static void gd_menu_full_screen(GtkMenuItem *item, void
> > > *opaque)  {
> > >      GtkDisplayState *s = opaque;
> > > -    VirtualConsole *vc = gd_vc_find_current(s);
> > > +    VirtualConsole *vc;
> > > +    int i;
> > >
> > >      if (!s->full_screen) {
> > >          gtk_notebook_set_show_tabs(GTK_NOTEBOOK(s->notebook), FALSE);
> > >          gtk_widget_hide(s->menu_bar);
> > > -        if (vc->type == GD_VC_GFX) {
> > > -            gtk_widget_set_size_request(vc->gfx.drawing_area, -1, -1);
> > > -        }
> > > -        gtk_window_fullscreen(GTK_WINDOW(s->window));
> > >          s->full_screen = TRUE;
> > > +        gtk_window_fullscreen(GTK_WINDOW(s->window));
> > > +
> > > +        for (i = 0; i < s->nb_vcs; i++) {
> > > +            vc = &s->vc[i];
> > > +            if (!vc->window) {
> > > +                continue;
> > > +            }
> > > +            if (vc->type == GD_VC_GFX) {
> > > +                gtk_widget_set_size_request(vc->gfx.drawing_area, -1, -1);
> > > +            }
> > > +            gtk_window_fullscreen(GTK_WINDOW(vc->window));
> > > +        }
> > >      } else {
> > >          gtk_window_unfullscreen(GTK_WINDOW(s->window));
> > > +
> > > +        for (i = 0; i < s->nb_vcs; i++) {
> > > +            vc = &s->vc[i];
> > > +            if (!vc->window) {
> > > +                continue;
> > > +            }
> > > +            gtk_window_unfullscreen(GTK_WINDOW(vc->window));
> > > +
> > > +            if (vc->type == GD_VC_GFX) {
> > > +                vc->gfx.scale_x = 1.0;
> > > +                vc->gfx.scale_y = 1.0;
> > > +                gd_update_windowsize(vc);
> > > +            }
> > > +        }
> > > +
> > >          gd_menu_show_tabs(GTK_MENU_ITEM(s->show_tabs_item), s);
> > >          if (gtk_check_menu_item_get_active(
> > >                      GTK_CHECK_MENU_ITEM(s->show_menubar_item))) {
> > >              gtk_widget_show(s->menu_bar);
> > >          }
> > >          s->full_screen = FALSE;
> > > -        if (vc->type == GD_VC_GFX) {
> > > -            vc->gfx.scale_x = 1.0;
> > > -            vc->gfx.scale_y = 1.0;
> > > -            gd_update_windowsize(vc);
> > > -        }
> > > +    }
> > > +
> > > +    vc = gd_vc_find_current(s);
> > > +    if (!vc) {
> > > +        return;
> > >      }
> > >
> > >      gd_update_cursor(vc);
> > > --
> > > 2.20.1
> > >
>