Message ID | 20220531202327.14636-3-dongwon.kim@intel.com (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
Series | handling guest multiple displays | expand |
On Tue, May 31, 2022 at 01:23:27PM -0700, Dongwon Kim wrote: > New integer array parameter, 'monitor' is for specifying the target > displays where individual QEMU windows are placed upon launching. > > The array contains a series of numbers representing the monitor where > QEMU windows are placed. > > Numbers in the array are mapped to QEMU windows like, > > [1st detached window, 2nd detached window,.... Main window] > > Usage example: -display gtk,monitor.0=0,monitor.1=1..... Both patches look good to me. > +# @monitor: Array of numbers, each of which represents physical > +# monitor where individual QEMU window is placed in case > +# there are multiple of them > +# since 7.1 > # > # Since: 2.12 > ## > { 'struct' : 'DisplayGTK', > 'data' : { '*grab-on-hover' : 'bool', > - '*zoom-to-fit' : 'bool' } } > + '*zoom-to-fit' : 'bool', > + '*monitor' : ['uint16'] } } This is what we've agreed to, so I guess this is fine with the QAPI maintainers too? Can I have an ack then? thanks, Gerd
On Tue, May 31, 2022 at 01:23:27PM -0700, Dongwon Kim wrote: > New integer array parameter, 'monitor' is for specifying the target > displays where individual QEMU windows are placed upon launching. > > The array contains a series of numbers representing the monitor where > QEMU windows are placed. > > Numbers in the array are mapped to QEMU windows like, > > [1st detached window, 2nd detached window,.... Main window] > > Usage example: -display gtk,monitor.0=0,monitor.1=1..... > > Cc: Daniel P. Berrangé <berrange@redhat.com> > Cc: Markus Armbruster <armbru@redhat.com> > Cc: Philippe Mathieu-Daudé <philmd@redhat.com> > Cc: Paolo Bonzini <pbonzini@redhat.com> > Cc: Gerd Hoffmann <kraxel@redhat.com> > Cc: Vivek Kasireddy <vivek.kasireddy@intel.com> > Signed-off-by: Dongwon Kim <dongwon.kim@intel.com> > --- > qapi/ui.json | 7 ++++++- > qemu-options.hx | 2 +- > ui/gtk.c | 32 +++++++++++++++++++++++++++++++- > 3 files changed, 38 insertions(+), 3 deletions(-) Reviewed-by: Daniel P. Berrangé <berrange@redhat.com> With regards, Daniel
On Thu, Jun 09, 2022 at 10:38:53AM +0100, Daniel P. Berrangé wrote: > On Tue, May 31, 2022 at 01:23:27PM -0700, Dongwon Kim wrote: > > New integer array parameter, 'monitor' is for specifying the target > > displays where individual QEMU windows are placed upon launching. > > > > The array contains a series of numbers representing the monitor where > > QEMU windows are placed. > > > > Numbers in the array are mapped to QEMU windows like, > > > > [1st detached window, 2nd detached window,.... Main window] > > > > Usage example: -display gtk,monitor.0=0,monitor.1=1..... > > > > Cc: Daniel P. Berrangé <berrange@redhat.com> > > Cc: Markus Armbruster <armbru@redhat.com> > > Cc: Philippe Mathieu-Daudé <philmd@redhat.com> > > Cc: Paolo Bonzini <pbonzini@redhat.com> > > Cc: Gerd Hoffmann <kraxel@redhat.com> > > Cc: Vivek Kasireddy <vivek.kasireddy@intel.com> > > Signed-off-by: Dongwon Kim <dongwon.kim@intel.com> > > --- > > qapi/ui.json | 7 ++++++- > > qemu-options.hx | 2 +- > > ui/gtk.c | 32 +++++++++++++++++++++++++++++++- > > 3 files changed, 38 insertions(+), 3 deletions(-) > > Reviewed-by: Daniel P. Berrangé <berrange@redhat.com> Thanks, queued up series. take care, Gerd
On Tue, May 31, 2022 at 01:23:27PM -0700, Dongwon Kim wrote: > New integer array parameter, 'monitor' is for specifying the target > displays where individual QEMU windows are placed upon launching. > > The array contains a series of numbers representing the monitor where > QEMU windows are placed. > > Numbers in the array are mapped to QEMU windows like, > > [1st detached window, 2nd detached window,.... Main window] > > Usage example: -display gtk,monitor.0=0,monitor.1=1..... Depends on patch #1, so dropped both. Please fix patch #1, rebase & resend. thanks, Gerd
diff --git a/qapi/ui.json b/qapi/ui.json index 11a827d10f..94546cfe84 100644 --- a/qapi/ui.json +++ b/qapi/ui.json @@ -1195,12 +1195,17 @@ # 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 individual QEMU window is placed in case +# there are multiple of them +# 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 a664baaa18..c2523ae0da 100644 --- a/qemu-options.hx +++ b/qemu-options.hx @@ -1943,7 +1943,7 @@ 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.<order>=<value>][,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 abfcf48547..fcd0e08c16 100644 --- a/ui/gtk.c +++ b/ui/gtk.c @@ -2304,6 +2304,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 n_gfx_vcs = 0; int i; char *dir; @@ -2384,7 +2388,33 @@ static void gtk_display_init(DisplayState *ds, DisplayOptions *opts) n_gfx_vcs++; } } - if (opts->has_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) { + for (; i < s->nb_vcs; i++) { + 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++; + break; + } + } + } + } + if (!opts->u.gtk.has_monitor && + opts->has_full_screen && opts->full_screen) { gtk_menu_item_activate(GTK_MENU_ITEM(s->full_screen_item)); }
New integer array parameter, 'monitor' is for specifying the target displays where individual QEMU windows are placed upon launching. The array contains a series of numbers representing the monitor where QEMU windows are placed. Numbers in the array are mapped to QEMU windows like, [1st detached window, 2nd detached window,.... Main window] Usage example: -display gtk,monitor.0=0,monitor.1=1..... Cc: Daniel P. Berrangé <berrange@redhat.com> Cc: Markus Armbruster <armbru@redhat.com> Cc: Philippe Mathieu-Daudé <philmd@redhat.com> Cc: Paolo Bonzini <pbonzini@redhat.com> Cc: Gerd Hoffmann <kraxel@redhat.com> Cc: Vivek Kasireddy <vivek.kasireddy@intel.com> Signed-off-by: Dongwon Kim <dongwon.kim@intel.com> --- qapi/ui.json | 7 ++++++- qemu-options.hx | 2 +- ui/gtk.c | 32 +++++++++++++++++++++++++++++++- 3 files changed, 38 insertions(+), 3 deletions(-)