All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH 0/2] handling guest multiple displays
@ 2022-05-31 20:23 Dongwon Kim
  2022-05-31 20:23 ` [PATCH 1/2] ui/gtk: detach VCS for additional guest displays Dongwon Kim
  2022-05-31 20:23 ` [PATCH 2/2] ui/gtk: a new array param monitor to specify the target displays Dongwon Kim
  0 siblings, 2 replies; 9+ messages in thread
From: Dongwon Kim @ 2022-05-31 20:23 UTC (permalink / raw)
  To: qemu-devel; +Cc: Dongwon Kim

This patch seires is for adding some useful features for the guest os with
multi-displays. First patch is to make all of guest displays visible
when guest os is launched using "detach". Second patch is for providing
a method to assign each guest display to specific physical monitor,
which would be useful if someone wants to directly full-screen individual
guest scanouts to host's physical displays.

Dongwon Kim (2):
  ui/gtk: detach VCS for additional guest displays
  ui/gtk: a new array param monitor to specify the target displays

 qapi/ui.json    |  7 ++++++-
 qemu-options.hx |  2 +-
 ui/gtk.c        | 43 +++++++++++++++++++++++++++++++++++++++++--
 3 files changed, 48 insertions(+), 4 deletions(-)

-- 
2.30.2



^ permalink raw reply	[flat|nested] 9+ messages in thread

* [PATCH 1/2] ui/gtk: detach VCS for additional guest displays
  2022-05-31 20:23 [PATCH 0/2] handling guest multiple displays Dongwon Kim
@ 2022-05-31 20:23 ` Dongwon Kim
  2022-06-09  9:29   ` Daniel P. Berrangé
  2022-06-10  6:05   ` Gerd Hoffmann
  2022-05-31 20:23 ` [PATCH 2/2] ui/gtk: a new array param monitor to specify the target displays Dongwon Kim
  1 sibling, 2 replies; 9+ messages in thread
From: Dongwon Kim @ 2022-05-31 20:23 UTC (permalink / raw)
  To: qemu-devel
  Cc: Dongwon Kim, Daniel P . Berrangé,
	Markus Armbruster, Philippe Mathieu-Daudé,
	Paolo Bonzini, Gerd Hoffmann, Vivek Kasireddy

Detaching any addtional guest displays in case there are multiple
displays assigned to the guest OS (e.g. max_outputs=n) so that
all of them are visible upon lauching.

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>
---
 ui/gtk.c | 11 ++++++++++-
 1 file changed, 10 insertions(+), 1 deletion(-)

diff --git a/ui/gtk.c b/ui/gtk.c
index c57c36749e..abfcf48547 100644
--- a/ui/gtk.c
+++ b/ui/gtk.c
@@ -2304,6 +2304,8 @@ static void gtk_display_init(DisplayState *ds, DisplayOptions *opts)
     GtkDisplayState *s = g_malloc0(sizeof(*s));
     GdkDisplay *window_display;
     GtkIconTheme *theme;
+    int n_gfx_vcs = 0;
+    int i;
     char *dir;
 
     if (!gtkinit) {
@@ -2374,7 +2376,14 @@ static void gtk_display_init(DisplayState *ds, DisplayOptions *opts)
     gtk_widget_set_sensitive(s->copy_item,
                              vc && vc->type == GD_VC_VTE);
 #endif
-
+    for (i = 0; i < s->nb_vcs; i++) {
+        if (qemu_console_is_graphic(s->vc[i].gfx.dcl.con)) {
+            if (n_gfx_vcs > 0) {
+                gtk_menu_item_activate(GTK_MENU_ITEM(s->untabify_item));
+            }
+            n_gfx_vcs++;
+        }
+    }
     if (opts->has_full_screen &&
         opts->full_screen) {
         gtk_menu_item_activate(GTK_MENU_ITEM(s->full_screen_item));
-- 
2.30.2



^ permalink raw reply related	[flat|nested] 9+ messages in thread

* [PATCH 2/2] ui/gtk: a new array param monitor to specify the target displays
  2022-05-31 20:23 [PATCH 0/2] handling guest multiple displays Dongwon Kim
  2022-05-31 20:23 ` [PATCH 1/2] ui/gtk: detach VCS for additional guest displays Dongwon Kim
@ 2022-05-31 20:23 ` Dongwon Kim
  2022-06-09  9:23   ` Gerd Hoffmann
                     ` (2 more replies)
  1 sibling, 3 replies; 9+ messages in thread
From: Dongwon Kim @ 2022-05-31 20:23 UTC (permalink / raw)
  To: qemu-devel
  Cc: Dongwon Kim, Daniel P . Berrangé,
	Markus Armbruster, Philippe Mathieu-Daudé,
	Paolo Bonzini, Gerd Hoffmann, Vivek Kasireddy

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



^ permalink raw reply related	[flat|nested] 9+ messages in thread

* Re: [PATCH 2/2] ui/gtk: a new array param monitor to specify the target displays
  2022-05-31 20:23 ` [PATCH 2/2] ui/gtk: a new array param monitor to specify the target displays Dongwon Kim
@ 2022-06-09  9:23   ` Gerd Hoffmann
  2022-06-09  9:38   ` Daniel P. Berrangé
  2022-06-10  6:11   ` Gerd Hoffmann
  2 siblings, 0 replies; 9+ messages in thread
From: Gerd Hoffmann @ 2022-06-09  9:23 UTC (permalink / raw)
  To: Dongwon Kim
  Cc: qemu-devel, Daniel P . Berrangé,
	Markus Armbruster, Philippe Mathieu-Daudé,
	Paolo Bonzini, Vivek Kasireddy

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



^ permalink raw reply	[flat|nested] 9+ messages in thread

* Re: [PATCH 1/2] ui/gtk: detach VCS for additional guest displays
  2022-05-31 20:23 ` [PATCH 1/2] ui/gtk: detach VCS for additional guest displays Dongwon Kim
@ 2022-06-09  9:29   ` Daniel P. Berrangé
  2022-06-10  6:05   ` Gerd Hoffmann
  1 sibling, 0 replies; 9+ messages in thread
From: Daniel P. Berrangé @ 2022-06-09  9:29 UTC (permalink / raw)
  To: Dongwon Kim
  Cc: qemu-devel, Markus Armbruster, Philippe Mathieu-Daudé,
	Paolo Bonzini, Gerd Hoffmann, Vivek Kasireddy

On Tue, May 31, 2022 at 01:23:26PM -0700, Dongwon Kim wrote:
> Detaching any addtional guest displays in case there are multiple
> displays assigned to the guest OS (e.g. max_outputs=n) so that
> all of them are visible upon lauching.
> 
> 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>
> ---
>  ui/gtk.c | 11 ++++++++++-
>  1 file changed, 10 insertions(+), 1 deletion(-)

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 :|



^ permalink raw reply	[flat|nested] 9+ messages in thread

* Re: [PATCH 2/2] ui/gtk: a new array param monitor to specify the target displays
  2022-05-31 20:23 ` [PATCH 2/2] ui/gtk: a new array param monitor to specify the target displays Dongwon Kim
  2022-06-09  9:23   ` Gerd Hoffmann
@ 2022-06-09  9:38   ` Daniel P. Berrangé
  2022-06-09 10:34     ` Gerd Hoffmann
  2022-06-10  6:11   ` Gerd Hoffmann
  2 siblings, 1 reply; 9+ messages in thread
From: Daniel P. Berrangé @ 2022-06-09  9:38 UTC (permalink / raw)
  To: Dongwon Kim
  Cc: qemu-devel, Markus Armbruster, Philippe Mathieu-Daudé,
	Paolo Bonzini, Gerd Hoffmann, Vivek Kasireddy

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 :|



^ permalink raw reply	[flat|nested] 9+ messages in thread

* Re: [PATCH 2/2] ui/gtk: a new array param monitor to specify the target displays
  2022-06-09  9:38   ` Daniel P. Berrangé
@ 2022-06-09 10:34     ` Gerd Hoffmann
  0 siblings, 0 replies; 9+ messages in thread
From: Gerd Hoffmann @ 2022-06-09 10:34 UTC (permalink / raw)
  To: Daniel P. Berrangé
  Cc: Dongwon Kim, qemu-devel, Markus Armbruster,
	Philippe Mathieu-Daudé,
	Paolo Bonzini, Vivek Kasireddy

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



^ permalink raw reply	[flat|nested] 9+ messages in thread

* Re: [PATCH 1/2] ui/gtk: detach VCS for additional guest displays
  2022-05-31 20:23 ` [PATCH 1/2] ui/gtk: detach VCS for additional guest displays Dongwon Kim
  2022-06-09  9:29   ` Daniel P. Berrangé
@ 2022-06-10  6:05   ` Gerd Hoffmann
  1 sibling, 0 replies; 9+ messages in thread
From: Gerd Hoffmann @ 2022-06-10  6:05 UTC (permalink / raw)
  To: Dongwon Kim
  Cc: qemu-devel, Daniel P . Berrangé,
	Markus Armbruster, Philippe Mathieu-Daudé,
	Paolo Bonzini, Vivek Kasireddy

On Tue, May 31, 2022 at 01:23:26PM -0700, Dongwon Kim wrote:
> Detaching any addtional guest displays in case there are multiple
> displays assigned to the guest OS (e.g. max_outputs=n) so that
> all of them are visible upon lauching.
> 
> 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>
> ---
>  ui/gtk.c | 11 ++++++++++-
>  1 file changed, 10 insertions(+), 1 deletion(-)
> 
> diff --git a/ui/gtk.c b/ui/gtk.c
> index c57c36749e..abfcf48547 100644
> --- a/ui/gtk.c
> +++ b/ui/gtk.c
> @@ -2304,6 +2304,8 @@ static void gtk_display_init(DisplayState *ds, DisplayOptions *opts)
>      GtkDisplayState *s = g_malloc0(sizeof(*s));
>      GdkDisplay *window_display;
>      GtkIconTheme *theme;
> +    int n_gfx_vcs = 0;
> +    int i;
>      char *dir;
>  
>      if (!gtkinit) {
> @@ -2374,7 +2376,14 @@ static void gtk_display_init(DisplayState *ds, DisplayOptions *opts)
>      gtk_widget_set_sensitive(s->copy_item,
>                               vc && vc->type == GD_VC_VTE);
>  #endif
> -
> +    for (i = 0; i < s->nb_vcs; i++) {
> +        if (qemu_console_is_graphic(s->vc[i].gfx.dcl.con)) {

Accessing vc[i].gfx without checking vc[i].type beforehand is wrong.

Also note that graphical consoles are sorted to the head of the list.
n_gfx_vcs should not be needed because the primary gfx display has
index 0 no matter what.

take care,
  Gerd



^ permalink raw reply	[flat|nested] 9+ messages in thread

* Re: [PATCH 2/2] ui/gtk: a new array param monitor to specify the target displays
  2022-05-31 20:23 ` [PATCH 2/2] ui/gtk: a new array param monitor to specify the target displays Dongwon Kim
  2022-06-09  9:23   ` Gerd Hoffmann
  2022-06-09  9:38   ` Daniel P. Berrangé
@ 2022-06-10  6:11   ` Gerd Hoffmann
  2 siblings, 0 replies; 9+ messages in thread
From: Gerd Hoffmann @ 2022-06-10  6:11 UTC (permalink / raw)
  To: Dongwon Kim
  Cc: qemu-devel, Daniel P . Berrangé,
	Markus Armbruster, Philippe Mathieu-Daudé,
	Paolo Bonzini, Vivek Kasireddy

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



^ permalink raw reply	[flat|nested] 9+ messages in thread

end of thread, other threads:[~2022-06-10  6:21 UTC | newest]

Thread overview: 9+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2022-05-31 20:23 [PATCH 0/2] handling guest multiple displays Dongwon Kim
2022-05-31 20:23 ` [PATCH 1/2] ui/gtk: detach VCS for additional guest displays Dongwon Kim
2022-06-09  9:29   ` Daniel P. Berrangé
2022-06-10  6:05   ` Gerd Hoffmann
2022-05-31 20:23 ` [PATCH 2/2] ui/gtk: a new array param monitor to specify the target displays Dongwon Kim
2022-06-09  9:23   ` Gerd Hoffmann
2022-06-09  9:38   ` Daniel P. Berrangé
2022-06-09 10:34     ` Gerd Hoffmann
2022-06-10  6:11   ` Gerd Hoffmann

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.