All of lore.kernel.org
 help / color / mirror / Atom feed
* [Qemu-devel] [PATCH v3 00/12] rework display initialization, part one
@ 2018-02-02 11:10 Gerd Hoffmann
  2018-02-02 11:10 ` [Qemu-devel] [PATCH v3 01/12] vl: deprecate -no-frame Gerd Hoffmann
                   ` (11 more replies)
  0 siblings, 12 replies; 26+ messages in thread
From: Gerd Hoffmann @ 2018-02-02 11:10 UTC (permalink / raw)
  To: qemu-devel; +Cc: Markus Armbruster, Gerd Hoffmann

  Hi,

This series is the first part of my the qemu display initialization
update.  Changes:

  * Create a QAPI DisplayOptions type for display configuration.
  * Switch all display initialization calls to accept DisplayOptions
    instead of a bunch of bools.

v2: add 'default' in the patch shich actually uses it (markus).

cheers,
  Gerd

Gerd Hoffmann (12):
  vl: deprecate -no-frame
  vl: deprecate -alt-grab and -ctrl-grab
  vl: rename DisplayType to LegacyDisplayType
  gtk: add and use DisplayOptions + DisplayGTK
  sdl: use DisplayOptions
  vl: drop no_quit variable
  egl-headless: use DisplayOptions
  curses: use DisplayOptions
  cocoa: use DisplayOptions
  vl: drop full_screen variable
  vl: drop request_opengl variable
  vl: drop display_type variable

 include/ui/console.h |  27 ++++++-----
 ui/curses.c          |   2 +-
 ui/egl-headless.c    |   2 +-
 ui/gtk.c             |  32 +++++++------
 ui/sdl.c             |  19 +++++---
 ui/sdl2.c            |  33 +++++++------
 vl.c                 | 127 ++++++++++++++++++++++++++-------------------------
 qapi/ui.json         |  64 ++++++++++++++++++++++++++
 qemu-doc.texi        |  13 ++++++
 ui/cocoa.m           |   4 +-
 10 files changed, 208 insertions(+), 115 deletions(-)

-- 
2.9.3

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

* [Qemu-devel] [PATCH v3 01/12] vl: deprecate -no-frame
  2018-02-02 11:10 [Qemu-devel] [PATCH v3 00/12] rework display initialization, part one Gerd Hoffmann
@ 2018-02-02 11:10 ` Gerd Hoffmann
  2018-02-02 11:10 ` [Qemu-devel] [PATCH v3 02/12] vl: deprecate -alt-grab and -ctrl-grab Gerd Hoffmann
                   ` (10 subsequent siblings)
  11 siblings, 0 replies; 26+ messages in thread
From: Gerd Hoffmann @ 2018-02-02 11:10 UTC (permalink / raw)
  To: qemu-devel; +Cc: Markus Armbruster, Gerd Hoffmann, Paolo Bonzini

Signed-off-by: Gerd Hoffmann <kraxel@redhat.com>
---
 vl.c          | 4 ++++
 qemu-doc.texi | 7 +++++++
 2 files changed, 11 insertions(+)

diff --git a/vl.c b/vl.c
index e517a8d995..ac0efca708 100644
--- a/vl.c
+++ b/vl.c
@@ -2104,6 +2104,8 @@ static DisplayType select_display(const char *p)
             const char *nextopt;
 
             if (strstart(opts, ",frame=", &nextopt)) {
+                g_printerr("The frame= sdl option is deprecated, and will be\n"
+                           "removed in a future release.\n");
                 opts = nextopt;
                 if (strstart(opts, "on", &nextopt)) {
                     no_frame = 0;
@@ -3642,6 +3644,8 @@ int main(int argc, char **argv, char **envp)
                 full_screen = 1;
                 break;
             case QEMU_OPTION_no_frame:
+                g_printerr("The -no-frame switch is deprecated, and will be\n"
+                           "removed in a future release.\n");
                 no_frame = 1;
                 break;
             case QEMU_OPTION_alt_grab:
diff --git a/qemu-doc.texi b/qemu-doc.texi
index 19a82bfea3..aa7180a3d9 100644
--- a/qemu-doc.texi
+++ b/qemu-doc.texi
@@ -2749,6 +2749,13 @@ filesystem test suite. Also it requires the CAP_DAC_READ_SEARCH capability,
 which is not the recommended way to run QEMU. This backend should not be
 used and it will be removed with no replacement.
 
+@subsection -no-frame (since 2.12.0)
+
+The ``-no-frame'' argument works with SDL 1.2 only.  SDL 2.0 lacks
+support for frameless windows, and the other user interfaces never
+implemented this in the first place.  So this will be removed together
+with SDL 1.2 support.
+
 @section qemu-img command line arguments
 
 @subsection convert -s (since 2.0.0)
-- 
2.9.3

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

* [Qemu-devel] [PATCH v3 02/12] vl: deprecate -alt-grab and -ctrl-grab
  2018-02-02 11:10 [Qemu-devel] [PATCH v3 00/12] rework display initialization, part one Gerd Hoffmann
  2018-02-02 11:10 ` [Qemu-devel] [PATCH v3 01/12] vl: deprecate -no-frame Gerd Hoffmann
@ 2018-02-02 11:10 ` Gerd Hoffmann
  2018-02-02 15:12   ` Eric Blake
  2018-02-02 11:10 ` [Qemu-devel] [PATCH v3 03/12] vl: rename DisplayType to LegacyDisplayType Gerd Hoffmann
                   ` (9 subsequent siblings)
  11 siblings, 1 reply; 26+ messages in thread
From: Gerd Hoffmann @ 2018-02-02 11:10 UTC (permalink / raw)
  To: qemu-devel; +Cc: Markus Armbruster, Gerd Hoffmann, Paolo Bonzini

Signed-off-by: Gerd Hoffmann <kraxel@redhat.com>
---
 vl.c          | 8 ++++++++
 qemu-doc.texi | 6 ++++++
 2 files changed, 14 insertions(+)

diff --git a/vl.c b/vl.c
index ac0efca708..fa19a61500 100644
--- a/vl.c
+++ b/vl.c
@@ -2115,6 +2115,8 @@ static DisplayType select_display(const char *p)
                     goto invalid_sdl_args;
                 }
             } else if (strstart(opts, ",alt_grab=", &nextopt)) {
+                g_printerr("The alt_grab= sdl option is deprecated, and will be\n"
+                           "removed in a future release.\n");
                 opts = nextopt;
                 if (strstart(opts, "on", &nextopt)) {
                     alt_grab = 1;
@@ -2124,6 +2126,8 @@ static DisplayType select_display(const char *p)
                     goto invalid_sdl_args;
                 }
             } else if (strstart(opts, ",ctrl_grab=", &nextopt)) {
+                g_printerr("The ctrl_grab= sdl option is deprecated, and will be\n"
+                           "removed in a future release.\n");
                 opts = nextopt;
                 if (strstart(opts, "on", &nextopt)) {
                     ctrl_grab = 1;
@@ -3649,9 +3653,13 @@ int main(int argc, char **argv, char **envp)
                 no_frame = 1;
                 break;
             case QEMU_OPTION_alt_grab:
+                g_printerr("The -alt-grab switch is deprecated, and will be\n"
+                           "removed in a future release.\n");
                 alt_grab = 1;
                 break;
             case QEMU_OPTION_ctrl_grab:
+                g_printerr("The -ctrl-grab switch is deprecated, and will be\n"
+                           "removed in a future release.\n");
                 ctrl_grab = 1;
                 break;
             case QEMU_OPTION_no_quit:
diff --git a/qemu-doc.texi b/qemu-doc.texi
index aa7180a3d9..5961c7a211 100644
--- a/qemu-doc.texi
+++ b/qemu-doc.texi
@@ -2756,6 +2756,12 @@ support for frameless windows, and the other user interfaces never
 implemented this in the first place.  So this will be removed together
 with SDL 1.2 support.
 
+@subsection -alt-grab and -ctrl-grab (since 2.12.0)
+
+The ``-alt-grab'' and ``-ctrl-grab'' arguments are deprecated.  They
+work with SDL only.  They will eventually replaced with a new way to
+configure hotkeys which works consistently across all user interfaces.
+
 @section qemu-img command line arguments
 
 @subsection convert -s (since 2.0.0)
-- 
2.9.3

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

* [Qemu-devel] [PATCH v3 03/12] vl: rename DisplayType to LegacyDisplayType
  2018-02-02 11:10 [Qemu-devel] [PATCH v3 00/12] rework display initialization, part one Gerd Hoffmann
  2018-02-02 11:10 ` [Qemu-devel] [PATCH v3 01/12] vl: deprecate -no-frame Gerd Hoffmann
  2018-02-02 11:10 ` [Qemu-devel] [PATCH v3 02/12] vl: deprecate -alt-grab and -ctrl-grab Gerd Hoffmann
@ 2018-02-02 11:10 ` Gerd Hoffmann
  2018-02-02 15:22   ` Eric Blake
  2018-02-02 11:10 ` [Qemu-devel] [PATCH v3 04/12] gtk: add and use DisplayOptions + DisplayGTK Gerd Hoffmann
                   ` (8 subsequent siblings)
  11 siblings, 1 reply; 26+ messages in thread
From: Gerd Hoffmann @ 2018-02-02 11:10 UTC (permalink / raw)
  To: qemu-devel; +Cc: Markus Armbruster, Gerd Hoffmann, Paolo Bonzini

qapi DisplayType will replace the current enum.  For the transition both
will coexist though, so rename it so we don't have a name clash.

Signed-off-by: Gerd Hoffmann <kraxel@redhat.com>
---
 vl.c | 10 +++++-----
 1 file changed, 5 insertions(+), 5 deletions(-)

diff --git a/vl.c b/vl.c
index fa19a61500..a2478412c7 100644
--- a/vl.c
+++ b/vl.c
@@ -2082,7 +2082,7 @@ static void select_vgahw(const char *p)
     }
 }
 
-typedef enum DisplayType {
+typedef enum LegacyDisplayType {
     DT_DEFAULT,
     DT_CURSES,
     DT_SDL,
@@ -2090,12 +2090,12 @@ typedef enum DisplayType {
     DT_GTK,
     DT_EGL,
     DT_NONE,
-} DisplayType;
+} LegacyDisplayType;
 
-static DisplayType select_display(const char *p)
+static LegacyDisplayType select_display(const char *p)
 {
     const char *opts;
-    DisplayType display = DT_DEFAULT;
+    LegacyDisplayType display = DT_DEFAULT;
 
     if (strstart(p, "sdl", &opts)) {
 #ifdef CONFIG_SDL
@@ -3058,7 +3058,7 @@ int main(int argc, char **argv, char **envp)
     const char *incoming = NULL;
     bool userconfig = true;
     bool nographic = false;
-    DisplayType display_type = DT_DEFAULT;
+    LegacyDisplayType display_type = DT_DEFAULT;
     int display_remote = 0;
     const char *log_mask = NULL;
     const char *log_file = NULL;
-- 
2.9.3

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

* [Qemu-devel] [PATCH v3 04/12] gtk: add and use DisplayOptions + DisplayGTK
  2018-02-02 11:10 [Qemu-devel] [PATCH v3 00/12] rework display initialization, part one Gerd Hoffmann
                   ` (2 preceding siblings ...)
  2018-02-02 11:10 ` [Qemu-devel] [PATCH v3 03/12] vl: rename DisplayType to LegacyDisplayType Gerd Hoffmann
@ 2018-02-02 11:10 ` Gerd Hoffmann
  2018-02-02 15:29   ` Eric Blake
  2018-02-02 11:10 ` [Qemu-devel] [PATCH v3 05/12] sdl: use DisplayOptions Gerd Hoffmann
                   ` (7 subsequent siblings)
  11 siblings, 1 reply; 26+ messages in thread
From: Gerd Hoffmann @ 2018-02-02 11:10 UTC (permalink / raw)
  To: qemu-devel; +Cc: Markus Armbruster, Gerd Hoffmann, Eric Blake, Paolo Bonzini

Add QAPI DisplayType enum, DisplayOptions union and DisplayGTK struct.
Switch gtk configuration to use the qapi type.

Some bookkeeping (fullscreen for example) is done twice now, this is
temporary until more/all UIs are switched over to qapi configuration.

Signed-off-by: Gerd Hoffmann <kraxel@redhat.com>
---
 include/ui/console.h |  9 ++++----
 ui/gtk.c             | 32 ++++++++++++++++-------------
 vl.c                 | 23 ++++++++++++++++-----
 qapi/ui.json         | 58 ++++++++++++++++++++++++++++++++++++++++++++++++++++
 4 files changed, 98 insertions(+), 24 deletions(-)

diff --git a/include/ui/console.h b/include/ui/console.h
index 7b35778444..58d1a3d27c 100644
--- a/include/ui/console.h
+++ b/include/ui/console.h
@@ -511,18 +511,17 @@ int index_from_key(const char *key, size_t key_length);
 
 /* gtk.c */
 #ifdef CONFIG_GTK
-void early_gtk_display_init(int opengl);
-void gtk_display_init(DisplayState *ds, bool full_screen, bool grab_on_hover);
+void early_gtk_display_init(DisplayOptions *opts);
+void gtk_display_init(DisplayState *ds, DisplayOptions *opts);
 #else
-static inline void gtk_display_init(DisplayState *ds, bool full_screen,
-                                    bool grab_on_hover)
+static inline void gtk_display_init(DisplayState *ds, DisplayOptions *opts)
 {
     /* This must never be called if CONFIG_GTK is disabled */
     error_report("GTK support is disabled");
     abort();
 }
 
-static inline void early_gtk_display_init(int opengl)
+static inline void early_gtk_display_init(DisplayOptions *opts)
 {
     /* This must never be called if CONFIG_GTK is disabled */
     error_report("GTK support is disabled");
diff --git a/ui/gtk.c b/ui/gtk.c
index f0ad63e431..c12d5e020c 100644
--- a/ui/gtk.c
+++ b/ui/gtk.c
@@ -229,6 +229,8 @@ struct GtkDisplayState {
 
     bool modifier_pressed[ARRAY_SIZE(modifier_keycode)];
     bool ignore_keys;
+
+    DisplayOptions *opts;
 };
 
 typedef struct VCChardev {
@@ -777,9 +779,14 @@ static gboolean gd_window_close(GtkWidget *widget, GdkEvent *event,
                                 void *opaque)
 {
     GtkDisplayState *s = opaque;
+    bool allow_close = true;
     int i;
 
-    if (!no_quit) {
+    if (s->opts->has_window_close && !s->opts->window_close) {
+        allow_close = false;
+    }
+
+    if (allow_close) {
         for (i = 0; i < s->nb_vcs; i++) {
             if (s->vc[i].type != GD_VC_GFX) {
                 continue;
@@ -2289,7 +2296,7 @@ static void gd_create_menus(GtkDisplayState *s)
 
 static gboolean gtkinit;
 
-void gtk_display_init(DisplayState *ds, bool full_screen, bool grab_on_hover)
+void gtk_display_init(DisplayState *ds, DisplayOptions *opts)
 {
     VirtualConsole *vc;
 
@@ -2301,6 +2308,8 @@ void gtk_display_init(DisplayState *ds, bool full_screen, bool grab_on_hover)
         fprintf(stderr, "gtk initialization failed\n");
         exit(1);
     }
+    assert(opts->type == DISPLAY_TYPE_GTK);
+    s->opts = opts;
 
 #if !GTK_CHECK_VERSION(3, 0, 0)
     g_printerr("Running QEMU with GTK 2.x is deprecated, and will be removed\n"
@@ -2387,15 +2396,17 @@ void gtk_display_init(DisplayState *ds, bool full_screen, bool grab_on_hover)
                              vc && vc->type == GD_VC_VTE);
 #endif
 
-    if (full_screen) {
+    if (opts->has_full_screen &&
+        opts->full_screen) {
         gtk_menu_item_activate(GTK_MENU_ITEM(s->full_screen_item));
     }
-    if (grab_on_hover) {
+    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));
     }
 }
 
-void early_gtk_display_init(int opengl)
+void early_gtk_display_init(DisplayOptions *opts)
 {
     /* The QEMU code relies on the assumption that it's always run in
      * the C locale. Therefore it is not prepared to deal with
@@ -2421,11 +2432,8 @@ void early_gtk_display_init(int opengl)
         return;
     }
 
-    switch (opengl) {
-    case -1: /* default */
-    case 0:  /* off */
-        break;
-    case 1: /* on */
+    assert(opts->type == DISPLAY_TYPE_GTK);
+    if (opts->has_gl && opts->gl) {
 #if defined(CONFIG_OPENGL)
 #if defined(CONFIG_GTK_GL)
         gtk_gl_area_init();
@@ -2433,10 +2441,6 @@ void early_gtk_display_init(int opengl)
         gtk_egl_init();
 #endif
 #endif
-        break;
-    default:
-        g_assert_not_reached();
-        break;
     }
 
     keycode_map = gd_get_keymap(&keycode_maplen);
diff --git a/vl.c b/vl.c
index a2478412c7..4a555de0cf 100644
--- a/vl.c
+++ b/vl.c
@@ -150,9 +150,9 @@ static int rtc_date_offset = -1; /* -1 means no change */
 QEMUClockType rtc_clock;
 int vga_interface_type = VGA_NONE;
 static int full_screen = 0;
+static DisplayOptions dpy;
 int no_frame;
 int no_quit = 0;
-static bool grab_on_hover;
 Chardev *serial_hds[MAX_SERIAL_PORTS];
 Chardev *parallel_hds[MAX_PARALLEL_PORTS];
 Chardev *virtcon_hds[MAX_VIRTIO_CONSOLES];
@@ -2191,24 +2191,29 @@ static LegacyDisplayType select_display(const char *p)
     } else if (strstart(p, "gtk", &opts)) {
 #ifdef CONFIG_GTK
         display = DT_GTK;
+        dpy.type = DISPLAY_TYPE_GTK;
         while (*opts) {
             const char *nextopt;
 
             if (strstart(opts, ",grab_on_hover=", &nextopt)) {
                 opts = nextopt;
+                dpy.u.gtk.has_grab_on_hover = true;
                 if (strstart(opts, "on", &nextopt)) {
-                    grab_on_hover = true;
+                    dpy.u.gtk.grab_on_hover = true;
                 } else if (strstart(opts, "off", &nextopt)) {
-                    grab_on_hover = false;
+                    dpy.u.gtk.grab_on_hover = false;
                 } else {
                     goto invalid_gtk_args;
                 }
             } else if (strstart(opts, ",gl=", &nextopt)) {
                 opts = nextopt;
+                dpy.has_gl = true;
                 if (strstart(opts, "on", &nextopt)) {
                     request_opengl = 1;
+                    dpy.gl = true;
                 } else if (strstart(opts, "off", &nextopt)) {
                     request_opengl = 0;
+                    dpy.gl = false;
                 } else {
                     goto invalid_gtk_args;
                 }
@@ -2225,6 +2230,7 @@ static LegacyDisplayType select_display(const char *p)
 #endif
     } else if (strstart(p, "none", &opts)) {
         display = DT_NONE;
+        dpy.type = DISPLAY_TYPE_NONE;
     } else {
         error_report("unknown display type");
         exit(1);
@@ -3259,6 +3265,7 @@ int main(int argc, char **argv, char **envp)
                 qemu_opts_parse_noisily(olist, "graphics=off", false);
                 nographic = true;
                 display_type = DT_NONE;
+                dpy.type = DISPLAY_TYPE_NONE;
                 break;
             case QEMU_OPTION_curses:
 #ifdef CONFIG_CURSES
@@ -3646,6 +3653,8 @@ int main(int argc, char **argv, char **envp)
                 break;
             case QEMU_OPTION_full_screen:
                 full_screen = 1;
+                dpy.has_full_screen = true;
+                dpy.full_screen = true;
                 break;
             case QEMU_OPTION_no_frame:
                 g_printerr("The -no-frame switch is deprecated, and will be\n"
@@ -3664,6 +3673,8 @@ int main(int argc, char **argv, char **envp)
                 break;
             case QEMU_OPTION_no_quit:
                 no_quit = 1;
+                dpy.has_window_close = true;
+                dpy.window_close = false;
                 break;
             case QEMU_OPTION_sdl:
 #ifdef CONFIG_SDL
@@ -4331,6 +4342,7 @@ int main(int argc, char **argv, char **envp)
     if (display_type == DT_DEFAULT && !display_remote) {
 #if defined(CONFIG_GTK)
         display_type = DT_GTK;
+        dpy.type = DISPLAY_TYPE_GTK;
 #elif defined(CONFIG_SDL)
         display_type = DT_SDL;
 #elif defined(CONFIG_COCOA)
@@ -4339,6 +4351,7 @@ int main(int argc, char **argv, char **envp)
         vnc_parse("localhost:0,to=99,id=default", &error_abort);
 #else
         display_type = DT_NONE;
+        dpy.type = DISPLAY_TYPE_NONE;
 #endif
     }
 
@@ -4352,7 +4365,7 @@ int main(int argc, char **argv, char **envp)
     }
 
     if (display_type == DT_GTK) {
-        early_gtk_display_init(request_opengl);
+        early_gtk_display_init(&dpy);
     }
 
     if (display_type == DT_SDL) {
@@ -4697,7 +4710,7 @@ int main(int argc, char **argv, char **envp)
         cocoa_display_init(ds, full_screen);
         break;
     case DT_GTK:
-        gtk_display_init(ds, full_screen, grab_on_hover);
+        gtk_display_init(ds, &dpy);
         break;
     default:
         break;
diff --git a/qapi/ui.json b/qapi/ui.json
index 07b468f625..bdb166a608 100644
--- a/qapi/ui.json
+++ b/qapi/ui.json
@@ -982,3 +982,61 @@
   'data': { '*device': 'str',
             '*head'  : 'int',
             'events' : [ 'InputEvent' ] } }
+
+
+##
+# @DisplayNoOpts:
+#
+# Empty struct for displays without config options.
+#
+# Since: 2.12
+#
+##
+{ 'struct'  : 'DisplayNoOpts',
+  'data'    : { } }
+
+##
+# @DisplayGTK:
+#
+# GTK display options.
+#
+# @grab-on-hover: Grab keyboard input on mouse hover.
+#
+# Since: 2.12
+#
+##
+{ 'struct'  : 'DisplayGTK',
+  'data'    : { '*grab-on-hover' : 'bool' } }
+
+##
+# @DisplayType:
+#
+# Display (user interface) type.
+#
+# Since: 2.12
+#
+##
+{ 'enum'    : 'DisplayType',
+  'data'    : [ 'none', 'gtk' ] }
+
+##
+# @DisplayOptions:
+#
+# Display (user interface) options.
+#
+# @type:          Which DisplayType qemu should use.
+# @full-screen:   Start user interface in fullscreen mode (default: off).
+# @window-close:  Allow to quit qemu with window close button (default: on).
+# @gl:            Enable OpenGL support (default: off).
+#
+# Since: 2.12
+#
+##
+{ 'union'   : 'DisplayOptions',
+  'base'    : { 'type'           : 'DisplayType',
+                '*full-screen'   : 'bool',
+                '*window-close'  : 'bool',
+                '*gl'            : 'bool' },
+  'discriminator' : 'type',
+  'data'    : { 'none'           : 'DisplayNoOpts',
+                'gtk'            : 'DisplayGTK' } }
-- 
2.9.3

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

* [Qemu-devel] [PATCH v3 05/12] sdl: use DisplayOptions
  2018-02-02 11:10 [Qemu-devel] [PATCH v3 00/12] rework display initialization, part one Gerd Hoffmann
                   ` (3 preceding siblings ...)
  2018-02-02 11:10 ` [Qemu-devel] [PATCH v3 04/12] gtk: add and use DisplayOptions + DisplayGTK Gerd Hoffmann
@ 2018-02-02 11:10 ` Gerd Hoffmann
  2018-02-02 15:31   ` Eric Blake
  2018-02-02 11:10 ` [Qemu-devel] [PATCH v3 06/12] vl: drop no_quit variable Gerd Hoffmann
                   ` (6 subsequent siblings)
  11 siblings, 1 reply; 26+ messages in thread
From: Gerd Hoffmann @ 2018-02-02 11:10 UTC (permalink / raw)
  To: qemu-devel; +Cc: Markus Armbruster, Gerd Hoffmann, Eric Blake, Paolo Bonzini

Switch sdl ui to use qapi DisplayOptions for configuration.

Signed-off-by: Gerd Hoffmann <kraxel@redhat.com>
---
 include/ui/console.h |  8 ++++----
 ui/sdl.c             | 19 +++++++++++++------
 ui/sdl2.c            | 33 +++++++++++++++++++--------------
 vl.c                 | 13 +++++++++++--
 qapi/ui.json         |  5 +++--
 5 files changed, 50 insertions(+), 28 deletions(-)

diff --git a/include/ui/console.h b/include/ui/console.h
index 58d1a3d27c..deee5bb606 100644
--- a/include/ui/console.h
+++ b/include/ui/console.h
@@ -435,16 +435,16 @@ void surface_gl_setup_viewport(QemuGLShader *gls,
 
 /* sdl.c */
 #ifdef CONFIG_SDL
-void sdl_display_early_init(int opengl);
-void sdl_display_init(DisplayState *ds, int full_screen);
+void sdl_display_early_init(DisplayOptions *opts);
+void sdl_display_init(DisplayState *ds, DisplayOptions *opts);
 #else
-static inline void sdl_display_early_init(int opengl)
+static inline void sdl_display_early_init(DisplayOptions *opts)
 {
     /* This must never be called if CONFIG_SDL is disabled */
     error_report("SDL support is disabled");
     abort();
 }
-static inline void sdl_display_init(DisplayState *ds, int full_screen)
+static inline void sdl_display_init(DisplayState *ds, DisplayOptions *opts)
 {
     /* This must never be called if CONFIG_SDL is disabled */
     error_report("SDL support is disabled");
diff --git a/ui/sdl.c b/ui/sdl.c
index c8f102bb9f..ca27e40299 100644
--- a/ui/sdl.c
+++ b/ui/sdl.c
@@ -41,6 +41,7 @@
 
 static DisplayChangeListener *dcl;
 static DisplaySurface *surface;
+static DisplayOptions *opts;
 static SDL_Surface *real_screen;
 static SDL_Surface *guest_screen = NULL;
 static int gui_grab; /* if true, all keyboard/mouse events are grabbed */
@@ -762,6 +763,7 @@ static void handle_activation(SDL_Event *ev)
 static void sdl_refresh(DisplayChangeListener *dcl)
 {
     SDL_Event ev1, *ev = &ev1;
+    bool allow_close = true;
     int idle = 1;
 
     if (last_vm_running != runstate_is_running()) {
@@ -786,7 +788,10 @@ static void sdl_refresh(DisplayChangeListener *dcl)
             handle_keyup(ev);
             break;
         case SDL_QUIT:
-            if (!no_quit) {
+            if (opts->has_window_close && !opts->window_close) {
+                allow_close = false;
+            }
+            if (allow_close) {
                 no_shutdown = 0;
                 qemu_system_shutdown_request(SHUTDOWN_CAUSE_HOST_UI);
             }
@@ -885,9 +890,9 @@ static const DisplayChangeListenerOps dcl_ops = {
     .dpy_cursor_define    = sdl_mouse_define,
 };
 
-void sdl_display_early_init(int opengl)
+void sdl_display_early_init(DisplayOptions *opts)
 {
-    if (opengl == 1 /* on */) {
+    if (opts->has_gl && opts->gl) {
         fprintf(stderr,
                 "SDL1 display code has no opengl support.\n"
                 "Please recompile qemu with SDL2, using\n"
@@ -895,7 +900,7 @@ void sdl_display_early_init(int opengl)
     }
 }
 
-void sdl_display_init(DisplayState *ds, int full_screen)
+void sdl_display_init(DisplayState *ds, DisplayOptions *o)
 {
     int flags;
     uint8_t data = 0;
@@ -903,6 +908,8 @@ void sdl_display_init(DisplayState *ds, int full_screen)
     SDL_SysWMinfo info;
     char *filename;
 
+    assert(o->type == DISPLAY_TYPE_SDL);
+    opts = o;
 #if defined(__APPLE__)
     /* always use generic keymaps */
     if (!keyboard_layout)
@@ -917,7 +924,7 @@ void sdl_display_init(DisplayState *ds, int full_screen)
     g_printerr("Running QEMU with SDL 1.2 is deprecated, and will be removed\n"
                "in a future release. Please switch to SDL 2.0 instead\n");
 
-    if (!full_screen) {
+    if (opts->has_full_screen && opts->full_screen) {
         setenv("SDL_VIDEO_ALLOW_SCREENSAVER", "1", 0);
     }
 #ifdef __linux__
@@ -960,7 +967,7 @@ void sdl_display_init(DisplayState *ds, int full_screen)
         g_free(filename);
     }
 
-    if (full_screen) {
+    if (opts->has_full_screen && opts->full_screen) {
         gui_fullscreen = 1;
         sdl_grab_start();
     }
diff --git a/ui/sdl2.c b/ui/sdl2.c
index 812c315891..094782e36c 100644
--- a/ui/sdl2.c
+++ b/ui/sdl2.c
@@ -32,6 +32,7 @@
 
 static int sdl2_num_outputs;
 static struct sdl2_console *sdl2_console;
+static DisplayOptions *opts;
 
 static SDL_Surface *guest_sprite_surface;
 static int gui_grab; /* if true, all keyboard/mouse events are grabbed */
@@ -525,6 +526,7 @@ static void handle_mousewheel(SDL_Event *ev)
 static void handle_windowevent(SDL_Event *ev)
 {
     struct sdl2_console *scon = get_scon_from_window(ev->window.windowID);
+    bool allow_close = true;
 
     if (!scon) {
         return;
@@ -571,7 +573,10 @@ static void handle_windowevent(SDL_Event *ev)
         break;
     case SDL_WINDOWEVENT_CLOSE:
         if (qemu_console_is_graphic(scon->dcl.con)) {
-            if (!no_quit) {
+            if (opts->has_window_close && !opts->window_close) {
+                allow_close = false;
+            }
+            if (allow_close) {
                 no_shutdown = 0;
                 qemu_system_shutdown_request(SHUTDOWN_CAUSE_HOST_UI);
             }
@@ -592,6 +597,7 @@ static void handle_windowevent(SDL_Event *ev)
 void sdl2_poll_events(struct sdl2_console *scon)
 {
     SDL_Event ev1, *ev = &ev1;
+    bool allow_close = true;
     int idle = 1;
 
     if (scon->last_vm_running != runstate_is_running()) {
@@ -614,7 +620,10 @@ void sdl2_poll_events(struct sdl2_console *scon)
             handle_textinput(ev);
             break;
         case SDL_QUIT:
-            if (!no_quit) {
+            if (opts->has_window_close && !opts->window_close) {
+                allow_close = false;
+            }
+            if (allow_close) {
                 no_shutdown = 0;
                 qemu_system_shutdown_request(SHUTDOWN_CAUSE_HOST_UI);
             }
@@ -749,24 +758,17 @@ static const DisplayChangeListenerOps dcl_gl_ops = {
 };
 #endif
 
-void sdl_display_early_init(int opengl)
+void sdl_display_early_init(DisplayOptions *o)
 {
-    switch (opengl) {
-    case -1: /* default */
-    case 0:  /* off */
-        break;
-    case 1: /* on */
+    assert(o->type == DISPLAY_TYPE_SDL);
+    if (o->has_gl && o->gl) {
 #ifdef CONFIG_OPENGL
         display_opengl = 1;
 #endif
-        break;
-    default:
-        g_assert_not_reached();
-        break;
     }
 }
 
-void sdl_display_init(DisplayState *ds, int full_screen)
+void sdl_display_init(DisplayState *ds, DisplayOptions *o)
 {
     int flags;
     uint8_t data = 0;
@@ -774,6 +776,9 @@ void sdl_display_init(DisplayState *ds, int full_screen)
     int i;
     SDL_SysWMinfo info;
 
+    assert(o->type == DISPLAY_TYPE_SDL);
+    opts = o;
+
 #ifdef __linux__
     /* on Linux, SDL may use fbcon|directfb|svgalib when run without
      * accessible $DISPLAY to open X11 window.  This is often the case
@@ -848,7 +853,7 @@ void sdl_display_init(DisplayState *ds, int full_screen)
         g_free(filename);
     }
 
-    if (full_screen) {
+    if (opts->has_full_screen && opts->full_screen) {
         gui_fullscreen = 1;
         sdl_grab_start(0);
     }
diff --git a/vl.c b/vl.c
index 4a555de0cf..25e784be63 100644
--- a/vl.c
+++ b/vl.c
@@ -2100,6 +2100,7 @@ static LegacyDisplayType select_display(const char *p)
     if (strstart(p, "sdl", &opts)) {
 #ifdef CONFIG_SDL
         display = DT_SDL;
+        dpy.type = DISPLAY_TYPE_SDL;
         while (*opts) {
             const char *nextopt;
 
@@ -2138,19 +2139,25 @@ static LegacyDisplayType select_display(const char *p)
                 }
             } else if (strstart(opts, ",window_close=", &nextopt)) {
                 opts = nextopt;
+                dpy.has_window_close = true;
                 if (strstart(opts, "on", &nextopt)) {
                     no_quit = 0;
+                    dpy.window_close = true;
                 } else if (strstart(opts, "off", &nextopt)) {
                     no_quit = 1;
+                    dpy.window_close = false;
                 } else {
                     goto invalid_sdl_args;
                 }
             } else if (strstart(opts, ",gl=", &nextopt)) {
                 opts = nextopt;
+                dpy.has_gl = true;
                 if (strstart(opts, "on", &nextopt)) {
                     request_opengl = 1;
+                    dpy.gl = true;
                 } else if (strstart(opts, "off", &nextopt)) {
                     request_opengl = 0;
+                    dpy.gl = false;
                 } else {
                     goto invalid_sdl_args;
                 }
@@ -3679,6 +3686,7 @@ int main(int argc, char **argv, char **envp)
             case QEMU_OPTION_sdl:
 #ifdef CONFIG_SDL
                 display_type = DT_SDL;
+                dpy.type = DISPLAY_TYPE_SDL;
                 break;
 #else
                 error_report("SDL support is disabled");
@@ -4345,6 +4353,7 @@ int main(int argc, char **argv, char **envp)
         dpy.type = DISPLAY_TYPE_GTK;
 #elif defined(CONFIG_SDL)
         display_type = DT_SDL;
+        dpy.type = DISPLAY_TYPE_SDL;
 #elif defined(CONFIG_COCOA)
         display_type = DT_COCOA;
 #elif defined(CONFIG_VNC)
@@ -4369,7 +4378,7 @@ int main(int argc, char **argv, char **envp)
     }
 
     if (display_type == DT_SDL) {
-        sdl_display_early_init(request_opengl);
+        sdl_display_early_init(&dpy);
     }
 
     qemu_console_early_init();
@@ -4704,7 +4713,7 @@ int main(int argc, char **argv, char **envp)
         curses_display_init(ds, full_screen);
         break;
     case DT_SDL:
-        sdl_display_init(ds, full_screen);
+        sdl_display_init(ds, &dpy);
         break;
     case DT_COCOA:
         cocoa_display_init(ds, full_screen);
diff --git a/qapi/ui.json b/qapi/ui.json
index bdb166a608..52220ed373 100644
--- a/qapi/ui.json
+++ b/qapi/ui.json
@@ -1017,7 +1017,7 @@
 #
 ##
 { 'enum'    : 'DisplayType',
-  'data'    : [ 'none', 'gtk' ] }
+  'data'    : [ 'none', 'gtk', 'sdl' ] }
 
 ##
 # @DisplayOptions:
@@ -1039,4 +1039,5 @@
                 '*gl'            : 'bool' },
   'discriminator' : 'type',
   'data'    : { 'none'           : 'DisplayNoOpts',
-                'gtk'            : 'DisplayGTK' } }
+                'gtk'            : 'DisplayGTK',
+                'sdl'            : 'DisplayNoOpts' } }
-- 
2.9.3

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

* [Qemu-devel] [PATCH v3 06/12] vl: drop no_quit variable
  2018-02-02 11:10 [Qemu-devel] [PATCH v3 00/12] rework display initialization, part one Gerd Hoffmann
                   ` (4 preceding siblings ...)
  2018-02-02 11:10 ` [Qemu-devel] [PATCH v3 05/12] sdl: use DisplayOptions Gerd Hoffmann
@ 2018-02-02 11:10 ` Gerd Hoffmann
  2018-02-02 15:35   ` Eric Blake
  2018-02-02 11:10 ` [Qemu-devel] [PATCH v3 07/12] egl-headless: use DisplayOptions Gerd Hoffmann
                   ` (5 subsequent siblings)
  11 siblings, 1 reply; 26+ messages in thread
From: Gerd Hoffmann @ 2018-02-02 11:10 UTC (permalink / raw)
  To: qemu-devel; +Cc: Markus Armbruster, Gerd Hoffmann, Paolo Bonzini

Not used any more, delete it.

Signed-off-by: Gerd Hoffmann <kraxel@redhat.com>
---
 vl.c | 7 ++-----
 1 file changed, 2 insertions(+), 5 deletions(-)

diff --git a/vl.c b/vl.c
index 25e784be63..c17dedfa4e 100644
--- a/vl.c
+++ b/vl.c
@@ -152,7 +152,6 @@ int vga_interface_type = VGA_NONE;
 static int full_screen = 0;
 static DisplayOptions dpy;
 int no_frame;
-int no_quit = 0;
 Chardev *serial_hds[MAX_SERIAL_PORTS];
 Chardev *parallel_hds[MAX_PARALLEL_PORTS];
 Chardev *virtcon_hds[MAX_VIRTIO_CONSOLES];
@@ -2141,10 +2140,8 @@ static LegacyDisplayType select_display(const char *p)
                 opts = nextopt;
                 dpy.has_window_close = true;
                 if (strstart(opts, "on", &nextopt)) {
-                    no_quit = 0;
                     dpy.window_close = true;
                 } else if (strstart(opts, "off", &nextopt)) {
-                    no_quit = 1;
                     dpy.window_close = false;
                 } else {
                     goto invalid_sdl_args;
@@ -3679,7 +3676,6 @@ int main(int argc, char **argv, char **envp)
                 ctrl_grab = 1;
                 break;
             case QEMU_OPTION_no_quit:
-                no_quit = 1;
                 dpy.has_window_close = true;
                 dpy.window_close = false;
                 break;
@@ -4368,7 +4364,8 @@ int main(int argc, char **argv, char **envp)
         error_report("-no-frame, -alt-grab and -ctrl-grab are only valid "
                      "for SDL, ignoring option");
     }
-    if (no_quit && (display_type != DT_GTK && display_type != DT_SDL)) {
+    if (dpy.has_window_close &&
+        (display_type != DT_GTK && display_type != DT_SDL)) {
         error_report("-no-quit is only valid for GTK and SDL, "
                      "ignoring option");
     }
-- 
2.9.3

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

* [Qemu-devel] [PATCH v3 07/12] egl-headless: use DisplayOptions
  2018-02-02 11:10 [Qemu-devel] [PATCH v3 00/12] rework display initialization, part one Gerd Hoffmann
                   ` (5 preceding siblings ...)
  2018-02-02 11:10 ` [Qemu-devel] [PATCH v3 06/12] vl: drop no_quit variable Gerd Hoffmann
@ 2018-02-02 11:10 ` Gerd Hoffmann
  2018-02-02 15:36   ` Eric Blake
  2018-02-02 11:10 ` [Qemu-devel] [PATCH v3 08/12] curses: " Gerd Hoffmann
                   ` (4 subsequent siblings)
  11 siblings, 1 reply; 26+ messages in thread
From: Gerd Hoffmann @ 2018-02-02 11:10 UTC (permalink / raw)
  To: qemu-devel; +Cc: Markus Armbruster, Gerd Hoffmann, Eric Blake, Paolo Bonzini

Switch egl-headless ui to use qapi DisplayOptions for configuration.

Signed-off-by: Gerd Hoffmann <kraxel@redhat.com>
---
 include/ui/console.h | 2 +-
 ui/egl-headless.c    | 2 +-
 vl.c                 | 3 ++-
 qapi/ui.json         | 5 +++--
 4 files changed, 7 insertions(+), 5 deletions(-)

diff --git a/include/ui/console.h b/include/ui/console.h
index deee5bb606..4cb623112e 100644
--- a/include/ui/console.h
+++ b/include/ui/console.h
@@ -530,6 +530,6 @@ static inline void early_gtk_display_init(DisplayOptions *opts)
 #endif
 
 /* egl-headless.c */
-void egl_headless_init(void);
+void egl_headless_init(DisplayOptions *opts);
 
 #endif
diff --git a/ui/egl-headless.c b/ui/egl-headless.c
index 5d50226869..38b3766548 100644
--- a/ui/egl-headless.c
+++ b/ui/egl-headless.c
@@ -154,7 +154,7 @@ static const DisplayChangeListenerOps egl_ops = {
     .dpy_gl_update           = egl_scanout_flush,
 };
 
-void egl_headless_init(void)
+void egl_headless_init(DisplayOptions *opts)
 {
     QemuConsole *con;
     egl_dpy *edpy;
diff --git a/vl.c b/vl.c
index c17dedfa4e..1d801dd96d 100644
--- a/vl.c
+++ b/vl.c
@@ -2181,6 +2181,7 @@ static LegacyDisplayType select_display(const char *p)
         request_opengl = 1;
         display_opengl = 1;
         display = DT_EGL;
+        dpy.type = DISPLAY_TYPE_EGL_HEADLESS;
 #else
         fprintf(stderr, "egl support is disabled\n");
         exit(1);
@@ -4737,7 +4738,7 @@ int main(int argc, char **argv, char **envp)
 
 #ifdef CONFIG_OPENGL_DMABUF
     if (display_type == DT_EGL) {
-        egl_headless_init();
+        egl_headless_init(&dpy);
     }
 #endif
 
diff --git a/qapi/ui.json b/qapi/ui.json
index 52220ed373..cc489b7856 100644
--- a/qapi/ui.json
+++ b/qapi/ui.json
@@ -1017,7 +1017,7 @@
 #
 ##
 { 'enum'    : 'DisplayType',
-  'data'    : [ 'none', 'gtk', 'sdl' ] }
+  'data'    : [ 'none', 'gtk', 'sdl', 'egl-headless' ] }
 
 ##
 # @DisplayOptions:
@@ -1040,4 +1040,5 @@
   'discriminator' : 'type',
   'data'    : { 'none'           : 'DisplayNoOpts',
                 'gtk'            : 'DisplayGTK',
-                'sdl'            : 'DisplayNoOpts' } }
+                'sdl'            : 'DisplayNoOpts',
+                'egl-headless'   : 'DisplayNoOpts' } }
-- 
2.9.3

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

* [Qemu-devel] [PATCH v3 08/12] curses: use DisplayOptions
  2018-02-02 11:10 [Qemu-devel] [PATCH v3 00/12] rework display initialization, part one Gerd Hoffmann
                   ` (6 preceding siblings ...)
  2018-02-02 11:10 ` [Qemu-devel] [PATCH v3 07/12] egl-headless: use DisplayOptions Gerd Hoffmann
@ 2018-02-02 11:10 ` Gerd Hoffmann
  2018-02-02 15:38   ` Eric Blake
  2018-02-02 11:10 ` [Qemu-devel] [PATCH v3 09/12] cocoa: " Gerd Hoffmann
                   ` (3 subsequent siblings)
  11 siblings, 1 reply; 26+ messages in thread
From: Gerd Hoffmann @ 2018-02-02 11:10 UTC (permalink / raw)
  To: qemu-devel; +Cc: Markus Armbruster, Gerd Hoffmann, Eric Blake, Paolo Bonzini

Switch curses ui to use qapi DisplayOptions for configuration.

Signed-off-by: Gerd Hoffmann <kraxel@redhat.com>
---
 include/ui/console.h | 4 ++--
 ui/curses.c          | 2 +-
 vl.c                 | 4 +++-
 qapi/ui.json         | 5 +++--
 4 files changed, 9 insertions(+), 6 deletions(-)

diff --git a/include/ui/console.h b/include/ui/console.h
index 4cb623112e..9749503aa7 100644
--- a/include/ui/console.h
+++ b/include/ui/console.h
@@ -496,9 +496,9 @@ static inline int vnc_init_func(void *opaque, QemuOpts *opts, Error **errp)
 
 /* curses.c */
 #ifdef CONFIG_CURSES
-void curses_display_init(DisplayState *ds, int full_screen);
+void curses_display_init(DisplayState *ds, DisplayOptions *opts);
 #else
-static inline void curses_display_init(DisplayState *ds, int full_screen)
+static inline void curses_display_init(DisplayState *ds, DisplayOptions *opts)
 {
     /* This must never be called if CONFIG_CURSES is disabled */
     error_report("curses support is disabled");
diff --git a/ui/curses.c b/ui/curses.c
index 85503876c0..479b77bd03 100644
--- a/ui/curses.c
+++ b/ui/curses.c
@@ -434,7 +434,7 @@ static const DisplayChangeListenerOps dcl_ops = {
     .dpy_text_cursor = curses_cursor_position,
 };
 
-void curses_display_init(DisplayState *ds, int full_screen)
+void curses_display_init(DisplayState *ds, DisplayOptions *opts)
 {
 #ifndef _WIN32
     if (!isatty(1)) {
diff --git a/vl.c b/vl.c
index 1d801dd96d..6fa65c0dbd 100644
--- a/vl.c
+++ b/vl.c
@@ -2189,6 +2189,7 @@ static LegacyDisplayType select_display(const char *p)
     } else if (strstart(p, "curses", &opts)) {
 #ifdef CONFIG_CURSES
         display = DT_CURSES;
+        dpy.type = DISPLAY_TYPE_CURSES;
 #else
         error_report("curses support is disabled");
         exit(1);
@@ -3275,6 +3276,7 @@ int main(int argc, char **argv, char **envp)
             case QEMU_OPTION_curses:
 #ifdef CONFIG_CURSES
                 display_type = DT_CURSES;
+                dpy.type = DISPLAY_TYPE_CURSES;
 #else
                 error_report("curses support is disabled");
                 exit(1);
@@ -4708,7 +4710,7 @@ int main(int argc, char **argv, char **envp)
     /* init local displays */
     switch (display_type) {
     case DT_CURSES:
-        curses_display_init(ds, full_screen);
+        curses_display_init(ds, &dpy);
         break;
     case DT_SDL:
         sdl_display_init(ds, &dpy);
diff --git a/qapi/ui.json b/qapi/ui.json
index cc489b7856..59597cfb3b 100644
--- a/qapi/ui.json
+++ b/qapi/ui.json
@@ -1017,7 +1017,7 @@
 #
 ##
 { 'enum'    : 'DisplayType',
-  'data'    : [ 'none', 'gtk', 'sdl', 'egl-headless' ] }
+  'data'    : [ 'none', 'gtk', 'sdl', 'egl-headless', 'curses' ] }
 
 ##
 # @DisplayOptions:
@@ -1041,4 +1041,5 @@
   'data'    : { 'none'           : 'DisplayNoOpts',
                 'gtk'            : 'DisplayGTK',
                 'sdl'            : 'DisplayNoOpts',
-                'egl-headless'   : 'DisplayNoOpts' } }
+                'egl-headless'   : 'DisplayNoOpts',
+                'curses'         : 'DisplayNoOpts' } }
-- 
2.9.3

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

* [Qemu-devel] [PATCH v3 09/12] cocoa: use DisplayOptions
  2018-02-02 11:10 [Qemu-devel] [PATCH v3 00/12] rework display initialization, part one Gerd Hoffmann
                   ` (7 preceding siblings ...)
  2018-02-02 11:10 ` [Qemu-devel] [PATCH v3 08/12] curses: " Gerd Hoffmann
@ 2018-02-02 11:10 ` Gerd Hoffmann
  2018-02-02 16:04   ` Eric Blake
  2018-02-02 11:10 ` [Qemu-devel] [PATCH v3 10/12] vl: drop full_screen variable Gerd Hoffmann
                   ` (2 subsequent siblings)
  11 siblings, 1 reply; 26+ messages in thread
From: Gerd Hoffmann @ 2018-02-02 11:10 UTC (permalink / raw)
  To: qemu-devel
  Cc: Markus Armbruster, Gerd Hoffmann, Eric Blake, Peter Maydell,
	Paolo Bonzini

Switch cocoa ui to use qapi DisplayOptions for configuration.

Signed-off-by: Gerd Hoffmann <kraxel@redhat.com>
---
 include/ui/console.h | 4 ++--
 vl.c                 | 3 ++-
 qapi/ui.json         | 6 ++++--
 ui/cocoa.m           | 4 ++--
 4 files changed, 10 insertions(+), 7 deletions(-)

diff --git a/include/ui/console.h b/include/ui/console.h
index 9749503aa7..f96fd907d0 100644
--- a/include/ui/console.h
+++ b/include/ui/console.h
@@ -454,9 +454,9 @@ static inline void sdl_display_init(DisplayState *ds, DisplayOptions *opts)
 
 /* cocoa.m */
 #ifdef CONFIG_COCOA
-void cocoa_display_init(DisplayState *ds, int full_screen);
+void cocoa_display_init(DisplayState *ds, DisplayOptions *opts);
 #else
-static inline void cocoa_display_init(DisplayState *ds, int full_screen)
+static inline void cocoa_display_init(DisplayState *ds, DisplayOptions *opts)
 {
     /* This must never be called if CONFIG_COCOA is disabled */
     error_report("Cocoa support is disabled");
diff --git a/vl.c b/vl.c
index 6fa65c0dbd..eb8aca9479 100644
--- a/vl.c
+++ b/vl.c
@@ -4355,6 +4355,7 @@ int main(int argc, char **argv, char **envp)
         dpy.type = DISPLAY_TYPE_SDL;
 #elif defined(CONFIG_COCOA)
         display_type = DT_COCOA;
+        dpy.type = DISPLAY_TYPE_COCOA;
 #elif defined(CONFIG_VNC)
         vnc_parse("localhost:0,to=99,id=default", &error_abort);
 #else
@@ -4716,7 +4717,7 @@ int main(int argc, char **argv, char **envp)
         sdl_display_init(ds, &dpy);
         break;
     case DT_COCOA:
-        cocoa_display_init(ds, full_screen);
+        cocoa_display_init(ds, &dpy);
         break;
     case DT_GTK:
         gtk_display_init(ds, &dpy);
diff --git a/qapi/ui.json b/qapi/ui.json
index 59597cfb3b..aca5402746 100644
--- a/qapi/ui.json
+++ b/qapi/ui.json
@@ -1017,7 +1017,8 @@
 #
 ##
 { 'enum'    : 'DisplayType',
-  'data'    : [ 'none', 'gtk', 'sdl', 'egl-headless', 'curses' ] }
+  'data'    : [ 'none', 'gtk', 'sdl',
+                'egl-headless', 'curses', 'cocoa' ] }
 
 ##
 # @DisplayOptions:
@@ -1042,4 +1043,5 @@
                 'gtk'            : 'DisplayGTK',
                 'sdl'            : 'DisplayNoOpts',
                 'egl-headless'   : 'DisplayNoOpts',
-                'curses'         : 'DisplayNoOpts' } }
+                'curses'         : 'DisplayNoOpts',
+                'cocoa'          : 'DisplayNoOpts' } }
diff --git a/ui/cocoa.m b/ui/cocoa.m
index 6be9848391..3e34d15716 100644
--- a/ui/cocoa.m
+++ b/ui/cocoa.m
@@ -1682,12 +1682,12 @@ static void addRemovableDevicesMenuItems(void)
     qapi_free_BlockInfoList(pointerToFree);
 }
 
-void cocoa_display_init(DisplayState *ds, int full_screen)
+void cocoa_display_init(DisplayState *ds, DisplayOptions *opts)
 {
     COCOA_DEBUG("qemu_cocoa: cocoa_display_init\n");
 
     /* if fullscreen mode is to be used */
-    if (full_screen == true) {
+    if (opts->has_full_screen && opts->full_screen) {
         [NSApp activateIgnoringOtherApps: YES];
         [(QemuCocoaAppController *)[[NSApplication sharedApplication] delegate] toggleFullScreen: nil];
     }
-- 
2.9.3

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

* [Qemu-devel] [PATCH v3 10/12] vl: drop full_screen variable
  2018-02-02 11:10 [Qemu-devel] [PATCH v3 00/12] rework display initialization, part one Gerd Hoffmann
                   ` (8 preceding siblings ...)
  2018-02-02 11:10 ` [Qemu-devel] [PATCH v3 09/12] cocoa: " Gerd Hoffmann
@ 2018-02-02 11:10 ` Gerd Hoffmann
  2018-02-02 16:05   ` Eric Blake
  2018-02-02 11:10 ` [Qemu-devel] [PATCH v3 11/12] vl: drop request_opengl variable Gerd Hoffmann
  2018-02-02 11:10 ` [Qemu-devel] [PATCH v3 12/12] vl: drop display_type variable Gerd Hoffmann
  11 siblings, 1 reply; 26+ messages in thread
From: Gerd Hoffmann @ 2018-02-02 11:10 UTC (permalink / raw)
  To: qemu-devel; +Cc: Markus Armbruster, Gerd Hoffmann, Paolo Bonzini

Not used any more, delete it.

Signed-off-by: Gerd Hoffmann <kraxel@redhat.com>
---
 vl.c | 2 --
 1 file changed, 2 deletions(-)

diff --git a/vl.c b/vl.c
index eb8aca9479..899fcad75e 100644
--- a/vl.c
+++ b/vl.c
@@ -149,7 +149,6 @@ static int rtc_utc = 1;
 static int rtc_date_offset = -1; /* -1 means no change */
 QEMUClockType rtc_clock;
 int vga_interface_type = VGA_NONE;
-static int full_screen = 0;
 static DisplayOptions dpy;
 int no_frame;
 Chardev *serial_hds[MAX_SERIAL_PORTS];
@@ -3659,7 +3658,6 @@ int main(int argc, char **argv, char **envp)
                 loadvm = optarg;
                 break;
             case QEMU_OPTION_full_screen:
-                full_screen = 1;
                 dpy.has_full_screen = true;
                 dpy.full_screen = true;
                 break;
-- 
2.9.3

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

* [Qemu-devel] [PATCH v3 11/12] vl: drop request_opengl variable
  2018-02-02 11:10 [Qemu-devel] [PATCH v3 00/12] rework display initialization, part one Gerd Hoffmann
                   ` (9 preceding siblings ...)
  2018-02-02 11:10 ` [Qemu-devel] [PATCH v3 10/12] vl: drop full_screen variable Gerd Hoffmann
@ 2018-02-02 11:10 ` Gerd Hoffmann
  2018-02-02 16:06   ` Eric Blake
  2018-02-02 11:10 ` [Qemu-devel] [PATCH v3 12/12] vl: drop display_type variable Gerd Hoffmann
  11 siblings, 1 reply; 26+ messages in thread
From: Gerd Hoffmann @ 2018-02-02 11:10 UTC (permalink / raw)
  To: qemu-devel; +Cc: Markus Armbruster, Gerd Hoffmann, Paolo Bonzini

Switch over the one leftover user to qapi DisplayType.
The delete the unused request_opengl variable.

Signed-off-by: Gerd Hoffmann <kraxel@redhat.com>
---
 vl.c | 8 +-------
 1 file changed, 1 insertion(+), 7 deletions(-)

diff --git a/vl.c b/vl.c
index 899fcad75e..4ef774e783 100644
--- a/vl.c
+++ b/vl.c
@@ -135,7 +135,6 @@ static const char *data_dir[16];
 static int data_dir_idx;
 const char *bios_name = NULL;
 enum vga_retrace_method vga_retrace_method = VGA_RETRACE_DUMB;
-int request_opengl = -1;
 int display_opengl;
 const char* keyboard_layout = NULL;
 ram_addr_t ram_size;
@@ -2149,10 +2148,8 @@ static LegacyDisplayType select_display(const char *p)
                 opts = nextopt;
                 dpy.has_gl = true;
                 if (strstart(opts, "on", &nextopt)) {
-                    request_opengl = 1;
                     dpy.gl = true;
                 } else if (strstart(opts, "off", &nextopt)) {
-                    request_opengl = 0;
                     dpy.gl = false;
                 } else {
                     goto invalid_sdl_args;
@@ -2177,7 +2174,6 @@ static LegacyDisplayType select_display(const char *p)
         }
     } else if (strstart(p, "egl-headless", &opts)) {
 #ifdef CONFIG_OPENGL_DMABUF
-        request_opengl = 1;
         display_opengl = 1;
         display = DT_EGL;
         dpy.type = DISPLAY_TYPE_EGL_HEADLESS;
@@ -2214,10 +2210,8 @@ static LegacyDisplayType select_display(const char *p)
                 opts = nextopt;
                 dpy.has_gl = true;
                 if (strstart(opts, "on", &nextopt)) {
-                    request_opengl = 1;
                     dpy.gl = true;
                 } else if (strstart(opts, "off", &nextopt)) {
-                    request_opengl = 0;
                     dpy.gl = false;
                 } else {
                     goto invalid_gtk_args;
@@ -4382,7 +4376,7 @@ int main(int argc, char **argv, char **envp)
 
     qemu_console_early_init();
 
-    if (request_opengl == 1 && display_opengl == 0) {
+    if (dpy.has_gl && dpy.gl && display_opengl == 0) {
 #if defined(CONFIG_OPENGL)
         error_report("OpenGL is not supported by the display");
 #else
-- 
2.9.3

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

* [Qemu-devel] [PATCH v3 12/12] vl: drop display_type variable
  2018-02-02 11:10 [Qemu-devel] [PATCH v3 00/12] rework display initialization, part one Gerd Hoffmann
                   ` (10 preceding siblings ...)
  2018-02-02 11:10 ` [Qemu-devel] [PATCH v3 11/12] vl: drop request_opengl variable Gerd Hoffmann
@ 2018-02-02 11:10 ` Gerd Hoffmann
  2018-02-02 16:09   ` Eric Blake
  11 siblings, 1 reply; 26+ messages in thread
From: Gerd Hoffmann @ 2018-02-02 11:10 UTC (permalink / raw)
  To: qemu-devel; +Cc: Markus Armbruster, Gerd Hoffmann, Eric Blake, Paolo Bonzini

Switch over all leftover users to qapi DisplayType.
Then delete the unused display_type variable.

Add 'default' DisplayType, which isn't an actual display type but
a placeholder for "user didn't specify a display".  It will be replaced
by the DisplayType actually used, which in turn depends on the
DisplayTypes availabel in the particular build.

Signed-off-by: Gerd Hoffmann <kraxel@redhat.com>
---
 vl.c         | 54 ++++++++++++++----------------------------------------
 qapi/ui.json |  5 +++--
 2 files changed, 17 insertions(+), 42 deletions(-)

diff --git a/vl.c b/vl.c
index 4ef774e783..42867d60f8 100644
--- a/vl.c
+++ b/vl.c
@@ -2079,24 +2079,12 @@ static void select_vgahw(const char *p)
     }
 }
 
-typedef enum LegacyDisplayType {
-    DT_DEFAULT,
-    DT_CURSES,
-    DT_SDL,
-    DT_COCOA,
-    DT_GTK,
-    DT_EGL,
-    DT_NONE,
-} LegacyDisplayType;
-
-static LegacyDisplayType select_display(const char *p)
+static void parse_display(const char *p)
 {
     const char *opts;
-    LegacyDisplayType display = DT_DEFAULT;
 
     if (strstart(p, "sdl", &opts)) {
 #ifdef CONFIG_SDL
-        display = DT_SDL;
         dpy.type = DISPLAY_TYPE_SDL;
         while (*opts) {
             const char *nextopt;
@@ -2175,7 +2163,6 @@ static LegacyDisplayType select_display(const char *p)
     } else if (strstart(p, "egl-headless", &opts)) {
 #ifdef CONFIG_OPENGL_DMABUF
         display_opengl = 1;
-        display = DT_EGL;
         dpy.type = DISPLAY_TYPE_EGL_HEADLESS;
 #else
         fprintf(stderr, "egl support is disabled\n");
@@ -2183,7 +2170,6 @@ static LegacyDisplayType select_display(const char *p)
 #endif
     } else if (strstart(p, "curses", &opts)) {
 #ifdef CONFIG_CURSES
-        display = DT_CURSES;
         dpy.type = DISPLAY_TYPE_CURSES;
 #else
         error_report("curses support is disabled");
@@ -2191,7 +2177,6 @@ static LegacyDisplayType select_display(const char *p)
 #endif
     } else if (strstart(p, "gtk", &opts)) {
 #ifdef CONFIG_GTK
-        display = DT_GTK;
         dpy.type = DISPLAY_TYPE_GTK;
         while (*opts) {
             const char *nextopt;
@@ -2228,14 +2213,11 @@ static LegacyDisplayType select_display(const char *p)
         exit(1);
 #endif
     } else if (strstart(p, "none", &opts)) {
-        display = DT_NONE;
         dpy.type = DISPLAY_TYPE_NONE;
     } else {
         error_report("unknown display type");
         exit(1);
     }
-
-    return display;
 }
 
 static int balloon_parse(const char *arg)
@@ -3063,7 +3045,6 @@ int main(int argc, char **argv, char **envp)
     const char *incoming = NULL;
     bool userconfig = true;
     bool nographic = false;
-    LegacyDisplayType display_type = DT_DEFAULT;
     int display_remote = 0;
     const char *log_mask = NULL;
     const char *log_file = NULL;
@@ -3257,18 +3238,16 @@ int main(int argc, char **argv, char **envp)
                 }
                 break;
             case QEMU_OPTION_display:
-                display_type = select_display(optarg);
+                parse_display(optarg);
                 break;
             case QEMU_OPTION_nographic:
                 olist = qemu_find_opts("machine");
                 qemu_opts_parse_noisily(olist, "graphics=off", false);
                 nographic = true;
-                display_type = DT_NONE;
                 dpy.type = DISPLAY_TYPE_NONE;
                 break;
             case QEMU_OPTION_curses:
 #ifdef CONFIG_CURSES
-                display_type = DT_CURSES;
                 dpy.type = DISPLAY_TYPE_CURSES;
 #else
                 error_report("curses support is disabled");
@@ -3676,7 +3655,6 @@ int main(int argc, char **argv, char **envp)
                 break;
             case QEMU_OPTION_sdl:
 #ifdef CONFIG_SDL
-                display_type = DT_SDL;
                 dpy.type = DISPLAY_TYPE_SDL;
                 break;
 #else
@@ -4292,7 +4270,7 @@ int main(int argc, char **argv, char **envp)
             exit(1);
         }
 #ifdef CONFIG_CURSES
-        if (display_type == DT_CURSES) {
+        if (dpy.type == DISPLAY_TYPE_CURSES) {
             error_report("curses display cannot be used with -daemonize");
             exit(1);
         }
@@ -4338,39 +4316,35 @@ int main(int argc, char **argv, char **envp)
         display_remote++;
     }
 #endif
-    if (display_type == DT_DEFAULT && !display_remote) {
+    if (dpy.type == DISPLAY_TYPE_DEFAULT && !display_remote) {
 #if defined(CONFIG_GTK)
-        display_type = DT_GTK;
         dpy.type = DISPLAY_TYPE_GTK;
 #elif defined(CONFIG_SDL)
-        display_type = DT_SDL;
         dpy.type = DISPLAY_TYPE_SDL;
 #elif defined(CONFIG_COCOA)
-        display_type = DT_COCOA;
         dpy.type = DISPLAY_TYPE_COCOA;
 #elif defined(CONFIG_VNC)
         vnc_parse("localhost:0,to=99,id=default", &error_abort);
 #else
-        display_type = DT_NONE;
         dpy.type = DISPLAY_TYPE_NONE;
 #endif
     }
 
-    if ((no_frame || alt_grab || ctrl_grab) && display_type != DT_SDL) {
+    if ((no_frame || alt_grab || ctrl_grab) && dpy.type != DISPLAY_TYPE_SDL) {
         error_report("-no-frame, -alt-grab and -ctrl-grab are only valid "
                      "for SDL, ignoring option");
     }
     if (dpy.has_window_close &&
-        (display_type != DT_GTK && display_type != DT_SDL)) {
+        (dpy.type != DISPLAY_TYPE_GTK && dpy.type != DISPLAY_TYPE_SDL)) {
         error_report("-no-quit is only valid for GTK and SDL, "
                      "ignoring option");
     }
 
-    if (display_type == DT_GTK) {
+    if (dpy.type == DISPLAY_TYPE_GTK) {
         early_gtk_display_init(&dpy);
     }
 
-    if (display_type == DT_SDL) {
+    if (dpy.type == DISPLAY_TYPE_SDL) {
         sdl_display_early_init(&dpy);
     }
 
@@ -4701,17 +4675,17 @@ int main(int argc, char **argv, char **envp)
     ds = init_displaystate();
 
     /* init local displays */
-    switch (display_type) {
-    case DT_CURSES:
+    switch (dpy.type) {
+    case DISPLAY_TYPE_CURSES:
         curses_display_init(ds, &dpy);
         break;
-    case DT_SDL:
+    case DISPLAY_TYPE_SDL:
         sdl_display_init(ds, &dpy);
         break;
-    case DT_COCOA:
+    case DISPLAY_TYPE_COCOA:
         cocoa_display_init(ds, &dpy);
         break;
-    case DT_GTK:
+    case DISPLAY_TYPE_GTK:
         gtk_display_init(ds, &dpy);
         break;
     default:
@@ -4732,7 +4706,7 @@ int main(int argc, char **argv, char **envp)
     }
 
 #ifdef CONFIG_OPENGL_DMABUF
-    if (display_type == DT_EGL) {
+    if (dpy.type == DISPLAY_TYPE_EGL_HEADLESS) {
         egl_headless_init(&dpy);
     }
 #endif
diff --git a/qapi/ui.json b/qapi/ui.json
index aca5402746..08b89a01be 100644
--- a/qapi/ui.json
+++ b/qapi/ui.json
@@ -1017,7 +1017,7 @@
 #
 ##
 { 'enum'    : 'DisplayType',
-  'data'    : [ 'none', 'gtk', 'sdl',
+  'data'    : [ 'default', 'none', 'gtk', 'sdl',
                 'egl-headless', 'curses', 'cocoa' ] }
 
 ##
@@ -1039,7 +1039,8 @@
                 '*window-close'  : 'bool',
                 '*gl'            : 'bool' },
   'discriminator' : 'type',
-  'data'    : { 'none'           : 'DisplayNoOpts',
+  'data'    : { 'default'        : 'DisplayNoOpts',
+                'none'           : 'DisplayNoOpts',
                 'gtk'            : 'DisplayGTK',
                 'sdl'            : 'DisplayNoOpts',
                 'egl-headless'   : 'DisplayNoOpts',
-- 
2.9.3

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

* Re: [Qemu-devel] [PATCH v3 02/12] vl: deprecate -alt-grab and -ctrl-grab
  2018-02-02 11:10 ` [Qemu-devel] [PATCH v3 02/12] vl: deprecate -alt-grab and -ctrl-grab Gerd Hoffmann
@ 2018-02-02 15:12   ` Eric Blake
  2018-02-05  8:46     ` Gerd Hoffmann
  0 siblings, 1 reply; 26+ messages in thread
From: Eric Blake @ 2018-02-02 15:12 UTC (permalink / raw)
  To: Gerd Hoffmann, qemu-devel; +Cc: Paolo Bonzini, Markus Armbruster

[-- Attachment #1: Type: text/plain, Size: 1468 bytes --]

On 02/02/2018 05:10 AM, Gerd Hoffmann wrote:
> Signed-off-by: Gerd Hoffmann <kraxel@redhat.com>
> ---
>  vl.c          | 8 ++++++++
>  qemu-doc.texi | 6 ++++++
>  2 files changed, 14 insertions(+)
> 

>              case QEMU_OPTION_ctrl_grab:
> +                g_printerr("The -ctrl-grab switch is deprecated, and will be\n"
> +                           "removed in a future release.\n");
>                  ctrl_grab = 1;
>                  break;
>              case QEMU_OPTION_no_quit:
> diff --git a/qemu-doc.texi b/qemu-doc.texi
> index aa7180a3d9..5961c7a211 100644
> --- a/qemu-doc.texi
> +++ b/qemu-doc.texi
> @@ -2756,6 +2756,12 @@ support for frameless windows, and the other user interfaces never
>  implemented this in the first place.  So this will be removed together
>  with SDL 1.2 support.
>  
> +@subsection -alt-grab and -ctrl-grab (since 2.12.0)
> +
> +The ``-alt-grab'' and ``-ctrl-grab'' arguments are deprecated.  They
> +work with SDL only.  They will eventually replaced with a new way to
> +configure hotkeys which works consistently across all user interfaces.

Should the error message printed to the user document the new interface
to be used instead? But that implies that we shouldn't deprecate this
until the new interface for configuring hotkeys has been finalized...

-- 
Eric Blake, Principal Software Engineer
Red Hat, Inc.           +1-919-301-3266
Virtualization:  qemu.org | libvirt.org


[-- Attachment #2: OpenPGP digital signature --]
[-- Type: application/pgp-signature, Size: 619 bytes --]

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

* Re: [Qemu-devel] [PATCH v3 03/12] vl: rename DisplayType to LegacyDisplayType
  2018-02-02 11:10 ` [Qemu-devel] [PATCH v3 03/12] vl: rename DisplayType to LegacyDisplayType Gerd Hoffmann
@ 2018-02-02 15:22   ` Eric Blake
  0 siblings, 0 replies; 26+ messages in thread
From: Eric Blake @ 2018-02-02 15:22 UTC (permalink / raw)
  To: Gerd Hoffmann, qemu-devel; +Cc: Paolo Bonzini, Markus Armbruster

[-- Attachment #1: Type: text/plain, Size: 509 bytes --]

On 02/02/2018 05:10 AM, Gerd Hoffmann wrote:
> qapi DisplayType will replace the current enum.  For the transition both
> will coexist though, so rename it so we don't have a name clash.
> 
> Signed-off-by: Gerd Hoffmann <kraxel@redhat.com>
> ---
>  vl.c | 10 +++++-----
>  1 file changed, 5 insertions(+), 5 deletions(-)

Reviewed-by: Eric Blake <eblake@redhat.com>

-- 
Eric Blake, Principal Software Engineer
Red Hat, Inc.           +1-919-301-3266
Virtualization:  qemu.org | libvirt.org


[-- Attachment #2: OpenPGP digital signature --]
[-- Type: application/pgp-signature, Size: 619 bytes --]

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

* Re: [Qemu-devel] [PATCH v3 04/12] gtk: add and use DisplayOptions + DisplayGTK
  2018-02-02 11:10 ` [Qemu-devel] [PATCH v3 04/12] gtk: add and use DisplayOptions + DisplayGTK Gerd Hoffmann
@ 2018-02-02 15:29   ` Eric Blake
  0 siblings, 0 replies; 26+ messages in thread
From: Eric Blake @ 2018-02-02 15:29 UTC (permalink / raw)
  To: Gerd Hoffmann, qemu-devel; +Cc: Markus Armbruster, Paolo Bonzini

[-- Attachment #1: Type: text/plain, Size: 3018 bytes --]

On 02/02/2018 05:10 AM, Gerd Hoffmann wrote:
> Add QAPI DisplayType enum, DisplayOptions union and DisplayGTK struct.
> Switch gtk configuration to use the qapi type.
> 
> Some bookkeeping (fullscreen for example) is done twice now, this is
> temporary until more/all UIs are switched over to qapi configuration.
> 
> Signed-off-by: Gerd Hoffmann <kraxel@redhat.com>
> ---
>  include/ui/console.h |  9 ++++----
>  ui/gtk.c             | 32 ++++++++++++++++-------------
>  vl.c                 | 23 ++++++++++++++++-----
>  qapi/ui.json         | 58 ++++++++++++++++++++++++++++++++++++++++++++++++++++
>  4 files changed, 98 insertions(+), 24 deletions(-)
> 

> +++ b/vl.c

>              if (strstart(opts, ",grab_on_hover=", &nextopt)) {
>                  opts = nextopt;
> +                dpy.u.gtk.has_grab_on_hover = true;
>                  if (strstart(opts, "on", &nextopt)) {

Pre-existing: this doesn't flag stuff like "grab_on_hover=only" as
bogus.  But doing further cleanups can be later patches; for example,
Markus' work to unify command-line parsing through QAPI visits.

> +++ b/qapi/ui.json
> @@ -982,3 +982,61 @@
>    'data': { '*device': 'str',
>              '*head'  : 'int',
>              'events' : [ 'InputEvent' ] } }
> +
> +
> +##

Is two blank lines typical here, or just one?

> +# @DisplayNoOpts:
> +#
> +# Empty struct for displays without config options.
> +#
> +# Since: 2.12
> +#
> +##
> +{ 'struct'  : 'DisplayNoOpts',
> +  'data'    : { } }
> +
> +##
> +# @DisplayGTK:
> +#
> +# GTK display options.
> +#
> +# @grab-on-hover: Grab keyboard input on mouse hover.
> +#
> +# Since: 2.12
> +#
> +##
> +{ 'struct'  : 'DisplayGTK',
> +  'data'    : { '*grab-on-hover' : 'bool' } }
> +
> +##
> +# @DisplayType:
> +#
> +# Display (user interface) type.
> +#
> +# Since: 2.12
> +#
> +##
> +{ 'enum'    : 'DisplayType',
> +  'data'    : [ 'none', 'gtk' ] }
> +
> +##
> +# @DisplayOptions:
> +#
> +# Display (user interface) options.
> +#
> +# @type:          Which DisplayType qemu should use.
> +# @full-screen:   Start user interface in fullscreen mode (default: off).
> +# @window-close:  Allow to quit qemu with window close button (default: on).

s/Allow to quit/Allow quitting/

> +# @gl:            Enable OpenGL support (default: off).
> +#
> +# Since: 2.12
> +#
> +##
> +{ 'union'   : 'DisplayOptions',
> +  'base'    : { 'type'           : 'DisplayType',
> +                '*full-screen'   : 'bool',
> +                '*window-close'  : 'bool',
> +                '*gl'            : 'bool' },
> +  'discriminator' : 'type',
> +  'data'    : { 'none'           : 'DisplayNoOpts',
> +                'gtk'            : 'DisplayGTK' } }
> 

Struct looks okay, and grammar tweak is minor, so you can add
Reviewed-by: Eric Blake <eblake@redhat.com>

-- 
Eric Blake, Principal Software Engineer
Red Hat, Inc.           +1-919-301-3266
Virtualization:  qemu.org | libvirt.org


[-- Attachment #2: OpenPGP digital signature --]
[-- Type: application/pgp-signature, Size: 619 bytes --]

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

* Re: [Qemu-devel] [PATCH v3 05/12] sdl: use DisplayOptions
  2018-02-02 11:10 ` [Qemu-devel] [PATCH v3 05/12] sdl: use DisplayOptions Gerd Hoffmann
@ 2018-02-02 15:31   ` Eric Blake
  0 siblings, 0 replies; 26+ messages in thread
From: Eric Blake @ 2018-02-02 15:31 UTC (permalink / raw)
  To: Gerd Hoffmann, qemu-devel; +Cc: Markus Armbruster, Paolo Bonzini

[-- Attachment #1: Type: text/plain, Size: 641 bytes --]

On 02/02/2018 05:10 AM, Gerd Hoffmann wrote:
> Switch sdl ui to use qapi DisplayOptions for configuration.
> 
> Signed-off-by: Gerd Hoffmann <kraxel@redhat.com>
> ---
>  include/ui/console.h |  8 ++++----
>  ui/sdl.c             | 19 +++++++++++++------
>  ui/sdl2.c            | 33 +++++++++++++++++++--------------
>  vl.c                 | 13 +++++++++++--
>  qapi/ui.json         |  5 +++--
>  5 files changed, 50 insertions(+), 28 deletions(-)
> 
Reviewed-by: Eric Blake <eblake@redhat.com>

-- 
Eric Blake, Principal Software Engineer
Red Hat, Inc.           +1-919-301-3266
Virtualization:  qemu.org | libvirt.org


[-- Attachment #2: OpenPGP digital signature --]
[-- Type: application/pgp-signature, Size: 619 bytes --]

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

* Re: [Qemu-devel] [PATCH v3 06/12] vl: drop no_quit variable
  2018-02-02 11:10 ` [Qemu-devel] [PATCH v3 06/12] vl: drop no_quit variable Gerd Hoffmann
@ 2018-02-02 15:35   ` Eric Blake
  2018-02-05  9:56     ` Gerd Hoffmann
  0 siblings, 1 reply; 26+ messages in thread
From: Eric Blake @ 2018-02-02 15:35 UTC (permalink / raw)
  To: Gerd Hoffmann, qemu-devel; +Cc: Paolo Bonzini, Markus Armbruster

[-- Attachment #1: Type: text/plain, Size: 1585 bytes --]

On 02/02/2018 05:10 AM, Gerd Hoffmann wrote:
> Not used any more, delete it.
> 
> Signed-off-by: Gerd Hoffmann <kraxel@redhat.com>
> ---
>  vl.c | 7 ++-----
>  1 file changed, 2 insertions(+), 5 deletions(-)
> 
> diff --git a/vl.c b/vl.c

> @@ -4368,7 +4364,8 @@ int main(int argc, char **argv, char **envp)
>          error_report("-no-frame, -alt-grab and -ctrl-grab are only valid "
>                       "for SDL, ignoring option");
>      }
> -    if (no_quit && (display_type != DT_GTK && display_type != DT_SDL)) {
> +    if (dpy.has_window_close &&
> +        (display_type != DT_GTK && display_type != DT_SDL)) {
>          error_report("-no-quit is only valid for GTK and SDL, "
>                       "ignoring option");

Does this mean we should move the 'window-close' field out of the common
base type and into DisplayGTK/DisplaySDL instead (where sdl would need
its own type instead of DisplayNoOpts)?  I guess the difference is how
long we have been flagging this error message - if we rearrange the QAPI
type, this code is dead and you've broken the command line that tries to
do window type none combined with -no-quit; but if that command line has
already been documented as broken, it is no real loss.  But if we
haven't had enough of a deprecation period yet, then keeping
window-close global to all variants of the union and doing the runtime
rejection check lets us finish the deprecation period.

-- 
Eric Blake, Principal Software Engineer
Red Hat, Inc.           +1-919-301-3266
Virtualization:  qemu.org | libvirt.org


[-- Attachment #2: OpenPGP digital signature --]
[-- Type: application/pgp-signature, Size: 619 bytes --]

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

* Re: [Qemu-devel] [PATCH v3 07/12] egl-headless: use DisplayOptions
  2018-02-02 11:10 ` [Qemu-devel] [PATCH v3 07/12] egl-headless: use DisplayOptions Gerd Hoffmann
@ 2018-02-02 15:36   ` Eric Blake
  0 siblings, 0 replies; 26+ messages in thread
From: Eric Blake @ 2018-02-02 15:36 UTC (permalink / raw)
  To: Gerd Hoffmann, qemu-devel; +Cc: Markus Armbruster, Paolo Bonzini

[-- Attachment #1: Type: text/plain, Size: 549 bytes --]

On 02/02/2018 05:10 AM, Gerd Hoffmann wrote:
> Switch egl-headless ui to use qapi DisplayOptions for configuration.
> 
> Signed-off-by: Gerd Hoffmann <kraxel@redhat.com>
> ---
>  include/ui/console.h | 2 +-
>  ui/egl-headless.c    | 2 +-
>  vl.c                 | 3 ++-
>  qapi/ui.json         | 5 +++--
>  4 files changed, 7 insertions(+), 5 deletions(-)
> 

Reviewed-by: Eric Blake <eblake@redhat.com>

-- 
Eric Blake, Principal Software Engineer
Red Hat, Inc.           +1-919-301-3266
Virtualization:  qemu.org | libvirt.org


[-- Attachment #2: OpenPGP digital signature --]
[-- Type: application/pgp-signature, Size: 619 bytes --]

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

* Re: [Qemu-devel] [PATCH v3 08/12] curses: use DisplayOptions
  2018-02-02 11:10 ` [Qemu-devel] [PATCH v3 08/12] curses: " Gerd Hoffmann
@ 2018-02-02 15:38   ` Eric Blake
  0 siblings, 0 replies; 26+ messages in thread
From: Eric Blake @ 2018-02-02 15:38 UTC (permalink / raw)
  To: Gerd Hoffmann, qemu-devel; +Cc: Markus Armbruster, Paolo Bonzini

[-- Attachment #1: Type: text/plain, Size: 546 bytes --]

On 02/02/2018 05:10 AM, Gerd Hoffmann wrote:
> Switch curses ui to use qapi DisplayOptions for configuration.
> 
> Signed-off-by: Gerd Hoffmann <kraxel@redhat.com>
> ---
>  include/ui/console.h | 4 ++--
>  ui/curses.c          | 2 +-
>  vl.c                 | 4 +++-
>  qapi/ui.json         | 5 +++--
>  4 files changed, 9 insertions(+), 6 deletions(-)
> 

Reviewed-by: Eric Blake <eblake@redhat.com>

-- 
Eric Blake, Principal Software Engineer
Red Hat, Inc.           +1-919-301-3266
Virtualization:  qemu.org | libvirt.org


[-- Attachment #2: OpenPGP digital signature --]
[-- Type: application/pgp-signature, Size: 619 bytes --]

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

* Re: [Qemu-devel] [PATCH v3 09/12] cocoa: use DisplayOptions
  2018-02-02 11:10 ` [Qemu-devel] [PATCH v3 09/12] cocoa: " Gerd Hoffmann
@ 2018-02-02 16:04   ` Eric Blake
  0 siblings, 0 replies; 26+ messages in thread
From: Eric Blake @ 2018-02-02 16:04 UTC (permalink / raw)
  To: Gerd Hoffmann, qemu-devel; +Cc: Markus Armbruster, Peter Maydell, Paolo Bonzini

[-- Attachment #1: Type: text/plain, Size: 546 bytes --]

On 02/02/2018 05:10 AM, Gerd Hoffmann wrote:
> Switch cocoa ui to use qapi DisplayOptions for configuration.
> 
> Signed-off-by: Gerd Hoffmann <kraxel@redhat.com>
> ---
>  include/ui/console.h | 4 ++--
>  vl.c                 | 3 ++-
>  qapi/ui.json         | 6 ++++--
>  ui/cocoa.m           | 4 ++--
>  4 files changed, 10 insertions(+), 7 deletions(-)
> 
Reviewed-by: Eric Blake <eblake@redhat.com>

-- 
Eric Blake, Principal Software Engineer
Red Hat, Inc.           +1-919-301-3266
Virtualization:  qemu.org | libvirt.org


[-- Attachment #2: OpenPGP digital signature --]
[-- Type: application/pgp-signature, Size: 619 bytes --]

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

* Re: [Qemu-devel] [PATCH v3 10/12] vl: drop full_screen variable
  2018-02-02 11:10 ` [Qemu-devel] [PATCH v3 10/12] vl: drop full_screen variable Gerd Hoffmann
@ 2018-02-02 16:05   ` Eric Blake
  0 siblings, 0 replies; 26+ messages in thread
From: Eric Blake @ 2018-02-02 16:05 UTC (permalink / raw)
  To: Gerd Hoffmann, qemu-devel; +Cc: Paolo Bonzini, Markus Armbruster

[-- Attachment #1: Type: text/plain, Size: 372 bytes --]

On 02/02/2018 05:10 AM, Gerd Hoffmann wrote:
> Not used any more, delete it.
> 
> Signed-off-by: Gerd Hoffmann <kraxel@redhat.com>
> ---
>  vl.c | 2 --
>  1 file changed, 2 deletions(-)

Reviewed-by: Eric Blake <eblake@redhat.com>

-- 
Eric Blake, Principal Software Engineer
Red Hat, Inc.           +1-919-301-3266
Virtualization:  qemu.org | libvirt.org


[-- Attachment #2: OpenPGP digital signature --]
[-- Type: application/pgp-signature, Size: 619 bytes --]

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

* Re: [Qemu-devel] [PATCH v3 11/12] vl: drop request_opengl variable
  2018-02-02 11:10 ` [Qemu-devel] [PATCH v3 11/12] vl: drop request_opengl variable Gerd Hoffmann
@ 2018-02-02 16:06   ` Eric Blake
  0 siblings, 0 replies; 26+ messages in thread
From: Eric Blake @ 2018-02-02 16:06 UTC (permalink / raw)
  To: Gerd Hoffmann, qemu-devel; +Cc: Paolo Bonzini, Markus Armbruster

[-- Attachment #1: Type: text/plain, Size: 985 bytes --]

On 02/02/2018 05:10 AM, Gerd Hoffmann wrote:
> Switch over the one leftover user to qapi DisplayType.
> The delete the unused request_opengl variable.
> 
> Signed-off-by: Gerd Hoffmann <kraxel@redhat.com>
> ---
>  vl.c | 8 +-------
>  1 file changed, 1 insertion(+), 7 deletions(-)
> 

>  
> -    if (request_opengl == 1 && display_opengl == 0) {
> +    if (dpy.has_gl && dpy.gl && display_opengl == 0) {
>  #if defined(CONFIG_OPENGL)
>          error_report("OpenGL is not supported by the display");
>  #else

Maybe someday when QAPI supports conditionals we can make the exposure
of the 'gl' field guarded by those conditionals, for better
introspection, rather than the current series' approach of always
exposing it then failing at runtime.  But that doesn't hold up this series.

Reviewed-by: Eric Blake <eblake@redhat.com>

-- 
Eric Blake, Principal Software Engineer
Red Hat, Inc.           +1-919-301-3266
Virtualization:  qemu.org | libvirt.org


[-- Attachment #2: OpenPGP digital signature --]
[-- Type: application/pgp-signature, Size: 619 bytes --]

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

* Re: [Qemu-devel] [PATCH v3 12/12] vl: drop display_type variable
  2018-02-02 11:10 ` [Qemu-devel] [PATCH v3 12/12] vl: drop display_type variable Gerd Hoffmann
@ 2018-02-02 16:09   ` Eric Blake
  0 siblings, 0 replies; 26+ messages in thread
From: Eric Blake @ 2018-02-02 16:09 UTC (permalink / raw)
  To: Gerd Hoffmann, qemu-devel; +Cc: Markus Armbruster, Paolo Bonzini

[-- Attachment #1: Type: text/plain, Size: 1744 bytes --]

On 02/02/2018 05:10 AM, Gerd Hoffmann wrote:
> Switch over all leftover users to qapi DisplayType.
> Then delete the unused display_type variable.
> 
> Add 'default' DisplayType, which isn't an actual display type but
> a placeholder for "user didn't specify a display".  It will be replaced
> by the DisplayType actually used, which in turn depends on the
> DisplayTypes availabel in the particular build.

s/availabel/available/

> 
> Signed-off-by: Gerd Hoffmann <kraxel@redhat.com>
> ---
>  vl.c         | 54 ++++++++++++++----------------------------------------
>  qapi/ui.json |  5 +++--
>  2 files changed, 17 insertions(+), 42 deletions(-)
> 

> +++ b/qapi/ui.json
> @@ -1017,7 +1017,7 @@
>  #
>  ##
>  { 'enum'    : 'DisplayType',
> -  'data'    : [ 'none', 'gtk', 'sdl',
> +  'data'    : [ 'default', 'none', 'gtk', 'sdl',
>                  'egl-headless', 'curses', 'cocoa' ] }

Worth documenting that the 'default' value is special and will be
converted to one of the other types, based on compile-time availability?

>  
>  ##
> @@ -1039,7 +1039,8 @@
>                  '*window-close'  : 'bool',
>                  '*gl'            : 'bool' },
>    'discriminator' : 'type',
> -  'data'    : { 'none'           : 'DisplayNoOpts',
> +  'data'    : { 'default'        : 'DisplayNoOpts',
> +                'none'           : 'DisplayNoOpts',
>                  'gtk'            : 'DisplayGTK',
>                  'sdl'            : 'DisplayNoOpts',
>                  'egl-headless'   : 'DisplayNoOpts',
> 

Reviewed-by: Eric Blake <eblake@redhat.com>

-- 
Eric Blake, Principal Software Engineer
Red Hat, Inc.           +1-919-301-3266
Virtualization:  qemu.org | libvirt.org


[-- Attachment #2: OpenPGP digital signature --]
[-- Type: application/pgp-signature, Size: 619 bytes --]

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

* Re: [Qemu-devel] [PATCH v3 02/12] vl: deprecate -alt-grab and -ctrl-grab
  2018-02-02 15:12   ` Eric Blake
@ 2018-02-05  8:46     ` Gerd Hoffmann
  0 siblings, 0 replies; 26+ messages in thread
From: Gerd Hoffmann @ 2018-02-05  8:46 UTC (permalink / raw)
  To: Eric Blake; +Cc: qemu-devel, Paolo Bonzini, Markus Armbruster

  Hi,

> > +@subsection -alt-grab and -ctrl-grab (since 2.12.0)
> > +
> > +The ``-alt-grab'' and ``-ctrl-grab'' arguments are deprecated.  They
> > +work with SDL only.  They will eventually replaced with a new way to
> > +configure hotkeys which works consistently across all user interfaces.
> 
> Should the error message printed to the user document the new interface
> to be used instead? But that implies that we shouldn't deprecate this
> until the new interface for configuring hotkeys has been finalized...

Supporting two ways of specifying hotkeys at the same time isn't going
to fly.  So my plan is to deprecate the old way now, and then some day
in the future drop the old args and support the new ones.

cheers,
  Gerd

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

* Re: [Qemu-devel] [PATCH v3 06/12] vl: drop no_quit variable
  2018-02-02 15:35   ` Eric Blake
@ 2018-02-05  9:56     ` Gerd Hoffmann
  0 siblings, 0 replies; 26+ messages in thread
From: Gerd Hoffmann @ 2018-02-05  9:56 UTC (permalink / raw)
  To: Eric Blake; +Cc: qemu-devel, Paolo Bonzini, Markus Armbruster

On Fri, Feb 02, 2018 at 09:35:52AM -0600, Eric Blake wrote:
> On 02/02/2018 05:10 AM, Gerd Hoffmann wrote:
> > Not used any more, delete it.
> > 
> > Signed-off-by: Gerd Hoffmann <kraxel@redhat.com>
> > ---
> >  vl.c | 7 ++-----
> >  1 file changed, 2 insertions(+), 5 deletions(-)
> > 
> > diff --git a/vl.c b/vl.c
> 
> > @@ -4368,7 +4364,8 @@ int main(int argc, char **argv, char **envp)
> >          error_report("-no-frame, -alt-grab and -ctrl-grab are only valid "
> >                       "for SDL, ignoring option");
> >      }
> > -    if (no_quit && (display_type != DT_GTK && display_type != DT_SDL)) {
> > +    if (dpy.has_window_close &&
> > +        (display_type != DT_GTK && display_type != DT_SDL)) {
> >          error_report("-no-quit is only valid for GTK and SDL, "
> >                       "ignoring option");
> 
> Does this mean we should move the 'window-close' field out of the common
> base type and into DisplayGTK/DisplaySDL instead (where sdl would need
> its own type instead of DisplayNoOpts)?

Well, strictly speaking that would be more accurate, but backward
compatibility with -no-quit would become more messy then.  Also cocoa
could probably add support for the window-close option without too much
effort.

> I guess the difference is how
> long we have been flagging this error message -

The message is there as long as I remember.  It's a warning only though,
it will not prevent qemu from starting.

> if we rearrange the QAPI
> type, this code is dead and you've broken the command line that tries to
> do window type none combined with -no-quit;

Depends on how you code things up...

With window-close being in the common section you can just set it when
you see '-no-quit'.

With window-close being in the display specific options you have
remember you have seen '-no-quit', then later when we know what the
display type is run

  switch (displaytype) {
  case sdl: sdl.window_close = true; break;

At that point you can do whatever you want in the default branch ...

> but if that command line has
> already been documented as broken, it is no real loss.  But if we
> haven't had enough of a deprecation period yet, then keeping
> window-close global to all variants of the union and doing the runtime
> rejection check lets us finish the deprecation period.

Which deprecation period?  -no-quit isn't deprecated.

cheers,
  Gerd

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

end of thread, other threads:[~2018-02-05  9:56 UTC | newest]

Thread overview: 26+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2018-02-02 11:10 [Qemu-devel] [PATCH v3 00/12] rework display initialization, part one Gerd Hoffmann
2018-02-02 11:10 ` [Qemu-devel] [PATCH v3 01/12] vl: deprecate -no-frame Gerd Hoffmann
2018-02-02 11:10 ` [Qemu-devel] [PATCH v3 02/12] vl: deprecate -alt-grab and -ctrl-grab Gerd Hoffmann
2018-02-02 15:12   ` Eric Blake
2018-02-05  8:46     ` Gerd Hoffmann
2018-02-02 11:10 ` [Qemu-devel] [PATCH v3 03/12] vl: rename DisplayType to LegacyDisplayType Gerd Hoffmann
2018-02-02 15:22   ` Eric Blake
2018-02-02 11:10 ` [Qemu-devel] [PATCH v3 04/12] gtk: add and use DisplayOptions + DisplayGTK Gerd Hoffmann
2018-02-02 15:29   ` Eric Blake
2018-02-02 11:10 ` [Qemu-devel] [PATCH v3 05/12] sdl: use DisplayOptions Gerd Hoffmann
2018-02-02 15:31   ` Eric Blake
2018-02-02 11:10 ` [Qemu-devel] [PATCH v3 06/12] vl: drop no_quit variable Gerd Hoffmann
2018-02-02 15:35   ` Eric Blake
2018-02-05  9:56     ` Gerd Hoffmann
2018-02-02 11:10 ` [Qemu-devel] [PATCH v3 07/12] egl-headless: use DisplayOptions Gerd Hoffmann
2018-02-02 15:36   ` Eric Blake
2018-02-02 11:10 ` [Qemu-devel] [PATCH v3 08/12] curses: " Gerd Hoffmann
2018-02-02 15:38   ` Eric Blake
2018-02-02 11:10 ` [Qemu-devel] [PATCH v3 09/12] cocoa: " Gerd Hoffmann
2018-02-02 16:04   ` Eric Blake
2018-02-02 11:10 ` [Qemu-devel] [PATCH v3 10/12] vl: drop full_screen variable Gerd Hoffmann
2018-02-02 16:05   ` Eric Blake
2018-02-02 11:10 ` [Qemu-devel] [PATCH v3 11/12] vl: drop request_opengl variable Gerd Hoffmann
2018-02-02 16:06   ` Eric Blake
2018-02-02 11:10 ` [Qemu-devel] [PATCH v3 12/12] vl: drop display_type variable Gerd Hoffmann
2018-02-02 16:09   ` Eric Blake

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.