On Thu, Jun 30, 2022 at 05:19:26PM +0200, Markus Armbruster wrote:
> Dongwon Kim <dongwon....@intel.com> writes:
> 
> > New integer array parameter, 'monitor' is for specifying the target
> > monitors where individual GTK windows are placed upon launching.
> >
> > Monitor numbers in the array are associated with virtual consoles
> > in the order of [VC0, VC1, VC2 ... VCn].
> >
> > Every GTK window containing each VC will be placed in the region
> > of corresponding monitors.
> >
> > Usage: -display gtk,monitor.<id of VC>=<target monitor>,..
> >        ex)-display gtk,monitor.0=1,monitor.1=0
> >
> > v3: - Revised commit message
> >     - Rewrote desription of the new parameter (Markus Armbruster)
> >     - Replaced unnecessary 'for' loop with 'if' condition
> >       (Markus Armbruster)
> 
> Again, patch history ...
> > Cc: Daniel P. Berrangé <berra...@redhat.com>
> > Cc: Markus Armbruster <arm...@redhat.com>
> > Cc: Philippe Mathieu-Daudé <phi...@redhat.com>
> > Cc: Paolo Bonzini <pbonz...@redhat.com>
> > Cc: Gerd Hoffmann <kra...@redhat.com>
> > Cc: Vivek Kasireddy <vivek.kasire...@intel.com>
> > Signed-off-by: Dongwon Kim <dongwon....@intel.com>
> > ---
> 
> ... goes here.

No problem moving down the version history but may I ask you if that
is current rule? We don't want to include the history anymore in the
git history?

And FYI, the cover letter has the whole history already. I guess I can
simply remove the history from individual patches then?

Thanks!!

> 
> >  qapi/ui.json    |  9 ++++++++-
> >  qemu-options.hx |  3 ++-
> >  ui/gtk.c        | 31 +++++++++++++++++++++++++++++--
> >  3 files changed, 39 insertions(+), 4 deletions(-)
> >
> > diff --git a/qapi/ui.json b/qapi/ui.json
> > index 413371d5e8..7b4c098bb4 100644
> > --- a/qapi/ui.json
> > +++ b/qapi/ui.json
> > @@ -1195,12 +1195,19 @@
> >  #               assuming the guest will resize the display to match
> >  #               the window size then.  Otherwise it defaults to "off".
> >  #               Since 3.1
> > +# @monitor:     Array of numbers, each of which represents physical
> > +#               monitor where GTK window containing a given VC will be
> > +#               placed. Each monitor number in the array will be
> > +#               associated with a virtual-console starting from VC0.
> 
> Drop the hyphen in "virtual-console".
> 
> Is the term "virtual console" obvious?  Gerd?
> 

I will do so.

> > +#
> > +#               since 7.1
> >  #
> >  # Since: 2.12
> >  ##
> >  { 'struct'  : 'DisplayGTK',
> >    'data'    : { '*grab-on-hover' : 'bool',
> > -                '*zoom-to-fit'   : 'bool'  } }
> > +                '*zoom-to-fit'   : 'bool',
> > +                '*monitor'       : ['uint16']  } }
> >  
> >  ##
> >  # @DisplayEGLHeadless:
> > diff --git a/qemu-options.hx b/qemu-options.hx
> > index 377d22fbd8..aabdfb0636 100644
> > --- a/qemu-options.hx
> > +++ b/qemu-options.hx
> > @@ -1938,7 +1938,8 @@ DEF("display", HAS_ARG, QEMU_OPTION_display,
> >  #endif
> >  #if defined(CONFIG_GTK)
> >      "-display 
> > gtk[,full-screen=on|off][,gl=on|off][,grab-on-hover=on|off]\n"
> > -    "            [,show-cursor=on|off][,window-close=on|off]\n"
> > +    "            [,monitor.<id of VC>=<monitor 
> > number>][,show-cursor=on|off]"
> > +    "            [,window-close=on|off]\n"
> >  #endif
> >  #if defined(CONFIG_VNC)
> >      "-display vnc=<display>[,<optargs>]\n"
> > diff --git a/ui/gtk.c b/ui/gtk.c
> > index e6878c3209..935176e614 100644
> > --- a/ui/gtk.c
> > +++ b/ui/gtk.c
> > @@ -2316,6 +2316,10 @@ static void gtk_display_init(DisplayState *ds, 
> > DisplayOptions *opts)
> >      GtkDisplayState *s = g_malloc0(sizeof(*s));
> >      GdkDisplay *window_display;
> >      GtkIconTheme *theme;
> > +    GtkWidget *win;
> > +    GdkRectangle dest;
> > +    uint16List *mon;
> > +    int n_mon;
> >      int i;
> >      char *dir;
> >  
> > @@ -2393,10 +2397,33 @@ static void gtk_display_init(DisplayState *ds, 
> > DisplayOptions *opts)
> >              gtk_menu_item_activate(GTK_MENU_ITEM(s->untabify_item));
> >          }
> >      }
> > -    if (opts->has_full_screen &&
> > -        opts->full_screen) {
> > +
> > +    if (opts->u.gtk.has_monitor) {
> > +        i = 0;
> > +        n_mon = gdk_display_get_n_monitors(window_display);
> > +        for (mon = opts->u.gtk.monitor; mon; mon = mon->next) {
> > +            if (mon->value < n_mon && i < s->nb_vcs) {
> > +                win = s->vc[i].window ? s->vc[i].window : s->window;
> > +                if (opts->has_full_screen && opts->full_screen) {
> > +                    gtk_window_fullscreen_on_monitor(
> > +                        GTK_WINDOW(win),
> > +                        gdk_display_get_default_screen(window_display),
> > +                        mon->value);
> > +                } else {
> > +                    gdk_monitor_get_geometry(
> > +                        gdk_display_get_monitor(window_display, 
> > mon->value),
> > +                        &dest);
> > +                    gtk_window_move(GTK_WINDOW(win),
> > +                                    dest.x, dest.y);
> > +                }
> > +                i++;
> > +            }
> > +        }
> > +    } else if (opts->has_full_screen &&
> > +               opts->full_screen) {
> 
> I'd join these two lines, like
> 
>        } else if (opts->has_full_screen && opts->full_screen) {
> 
> or even exploit the fact that a opts->full_screen is false when absent
> 
>        } else if (opts->full_screen) {

This is simpler. I will go with this.

> 
> >          gtk_menu_item_activate(GTK_MENU_ITEM(s->full_screen_item));
> >      }
> > +
> >      if (opts->u.gtk.has_grab_on_hover &&
> >          opts->u.gtk.grab_on_hover) {
> >          gtk_menu_item_activate(GTK_MENU_ITEM(s->grab_on_hover_item));
> 

Reply via email to