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(-)
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));
}
--
2.30.2
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
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 -- |: https://berrange.com -o- https://www.flickr.com/photos/dberrange :| |: https://libvirt.org -o- https://fstop138.berrange.com :| |: https://entangle-photo.org -o- https://www.instagram.com/dberrange :|
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
© 2016 - 2025 Red Hat, Inc.