* [PATCH v3 1/7] ui: add show-cursor option
2020-02-07 10:17 [PATCH v3 0/7] ui: rework -show-cursor option Gerd Hoffmann
@ 2020-02-07 10:17 ` Gerd Hoffmann
2020-02-07 13:56 ` Markus Armbruster
2020-02-07 10:17 ` [PATCH v3 2/7] ui: wire up legacy -show-cursor option Gerd Hoffmann
` (6 subsequent siblings)
7 siblings, 1 reply; 12+ messages in thread
From: Gerd Hoffmann @ 2020-02-07 10:17 UTC (permalink / raw)
To: qemu-devel
Cc: Peter Maydell, jtomko, libvir-list, Markus Armbruster,
jpewhacker, Gerd Hoffmann, Paolo Bonzini
When enabled, this forces showing the mouse cursor,
i.e. do not hide the pointer on mouse grabs.
Defaults to off.
Signed-off-by: Gerd Hoffmann <kraxel@redhat.com>
---
qapi/ui.json | 3 +++
1 file changed, 3 insertions(+)
diff --git a/qapi/ui.json b/qapi/ui.json
index e04525d8b44b..b9df7fe7b5cb 100644
--- a/qapi/ui.json
+++ b/qapi/ui.json
@@ -1144,6 +1144,8 @@
# @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).
+# @show-cursor: Force showing the mouse cursor (default: off).
+# Since: 5.0
# @gl: Enable OpenGL support (default: off).
#
# Since: 2.12
@@ -1153,6 +1155,7 @@
'base' : { 'type' : 'DisplayType',
'*full-screen' : 'bool',
'*window-close' : 'bool',
+ '*show-cursor' : 'bool',
'*gl' : 'DisplayGLMode' },
'discriminator' : 'type',
'data' : { 'gtk' : 'DisplayGTK',
--
2.18.1
^ permalink raw reply related [flat|nested] 12+ messages in thread
* Re: [PATCH v3 1/7] ui: add show-cursor option
2020-02-07 10:17 ` [PATCH v3 1/7] ui: add show-cursor option Gerd Hoffmann
@ 2020-02-07 13:56 ` Markus Armbruster
0 siblings, 0 replies; 12+ messages in thread
From: Markus Armbruster @ 2020-02-07 13:56 UTC (permalink / raw)
To: Gerd Hoffmann
Cc: Peter Maydell, jtomko, libvir-list, qemu-devel, jpewhacker,
Paolo Bonzini
Gerd Hoffmann <kraxel@redhat.com> writes:
> When enabled, this forces showing the mouse cursor,
> i.e. do not hide the pointer on mouse grabs.
> Defaults to off.
>
> Signed-off-by: Gerd Hoffmann <kraxel@redhat.com>
> ---
> qapi/ui.json | 3 +++
> 1 file changed, 3 insertions(+)
>
> diff --git a/qapi/ui.json b/qapi/ui.json
> index e04525d8b44b..b9df7fe7b5cb 100644
> --- a/qapi/ui.json
> +++ b/qapi/ui.json
> @@ -1144,6 +1144,8 @@
> # @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).
> +# @show-cursor: Force showing the mouse cursor (default: off).
> +# Since: 5.0
By convention, we use
# Since: 5.0
for top-level definitions, and
# (since 5.0)
for members and such. See docs/devel/qapi-code-gen.txt section
"Definition documentation".
> # @gl: Enable OpenGL support (default: off).
> #
> # Since: 2.12
> @@ -1153,6 +1155,7 @@
> 'base' : { 'type' : 'DisplayType',
> '*full-screen' : 'bool',
> '*window-close' : 'bool',
> + '*show-cursor' : 'bool',
> '*gl' : 'DisplayGLMode' },
> 'discriminator' : 'type',
> 'data' : { 'gtk' : 'DisplayGTK',
With the doc comment tidied up:
Reviewed-by: Markus Armbruster <armbru@redhat.com>
^ permalink raw reply [flat|nested] 12+ messages in thread
* [PATCH v3 2/7] ui: wire up legacy -show-cursor option
2020-02-07 10:17 [PATCH v3 0/7] ui: rework -show-cursor option Gerd Hoffmann
2020-02-07 10:17 ` [PATCH v3 1/7] ui: add show-cursor option Gerd Hoffmann
@ 2020-02-07 10:17 ` Gerd Hoffmann
2020-02-07 10:17 ` [PATCH v3 3/7] ui/sdl: switch to new show-cursor option Gerd Hoffmann
` (5 subsequent siblings)
7 siblings, 0 replies; 12+ messages in thread
From: Gerd Hoffmann @ 2020-02-07 10:17 UTC (permalink / raw)
To: qemu-devel
Cc: Peter Maydell, jtomko, libvir-list, Markus Armbruster,
jpewhacker, Gerd Hoffmann, Paolo Bonzini
Set new show-cursor display option when legacy -show-cursor
is specified on the command line.
Signed-off-by: Gerd Hoffmann <kraxel@redhat.com>
---
vl.c | 2 ++
1 file changed, 2 insertions(+)
diff --git a/vl.c b/vl.c
index 7dcb0879c497..5419b3d68200 100644
--- a/vl.c
+++ b/vl.c
@@ -3554,6 +3554,8 @@ int main(int argc, char **argv, char **envp)
break;
case QEMU_OPTION_show_cursor:
cursor_hide = 0;
+ dpy.has_show_cursor = true;
+ dpy.show_cursor = true;
break;
case QEMU_OPTION_uuid:
if (qemu_uuid_parse(optarg, &qemu_uuid) < 0) {
--
2.18.1
^ permalink raw reply related [flat|nested] 12+ messages in thread
* [PATCH v3 3/7] ui/sdl: switch to new show-cursor option
2020-02-07 10:17 [PATCH v3 0/7] ui: rework -show-cursor option Gerd Hoffmann
2020-02-07 10:17 ` [PATCH v3 1/7] ui: add show-cursor option Gerd Hoffmann
2020-02-07 10:17 ` [PATCH v3 2/7] ui: wire up legacy -show-cursor option Gerd Hoffmann
@ 2020-02-07 10:17 ` Gerd Hoffmann
2020-02-07 10:17 ` [PATCH v3 4/7] ui/cocoa: " Gerd Hoffmann
` (4 subsequent siblings)
7 siblings, 0 replies; 12+ messages in thread
From: Gerd Hoffmann @ 2020-02-07 10:17 UTC (permalink / raw)
To: qemu-devel
Cc: Peter Maydell, jtomko, libvir-list, Markus Armbruster,
jpewhacker, Gerd Hoffmann, Paolo Bonzini
Use DisplayOpts settings instead of cursor_hide global variable.
Also make "-display sdl,show-cursor=on" work.
Signed-off-by: Gerd Hoffmann <kraxel@redhat.com>
---
ui/sdl2.c | 16 ++++++++--------
vl.c | 10 ++++++++++
2 files changed, 18 insertions(+), 8 deletions(-)
diff --git a/ui/sdl2.c b/ui/sdl2.c
index 9030f1c42efb..3c9424eb42c3 100644
--- a/ui/sdl2.c
+++ b/ui/sdl2.c
@@ -161,9 +161,9 @@ static void sdl_update_caption(struct sdl2_console *scon)
}
}
-static void sdl_hide_cursor(void)
+static void sdl_hide_cursor(struct sdl2_console *scon)
{
- if (!cursor_hide) {
+ if (scon->opts->has_show_cursor && scon->opts->show_cursor) {
return;
}
@@ -175,9 +175,9 @@ static void sdl_hide_cursor(void)
}
}
-static void sdl_show_cursor(void)
+static void sdl_show_cursor(struct sdl2_console *scon)
{
- if (!cursor_hide) {
+ if (scon->opts->has_show_cursor && scon->opts->show_cursor) {
return;
}
@@ -216,7 +216,7 @@ static void sdl_grab_start(struct sdl2_console *scon)
SDL_WarpMouseInWindow(scon->real_window, guest_x, guest_y);
}
} else {
- sdl_hide_cursor();
+ sdl_hide_cursor(scon);
}
SDL_SetWindowGrab(scon->real_window, SDL_TRUE);
gui_grab = 1;
@@ -227,7 +227,7 @@ static void sdl_grab_end(struct sdl2_console *scon)
{
SDL_SetWindowGrab(scon->real_window, SDL_FALSE);
gui_grab = 0;
- sdl_show_cursor();
+ sdl_show_cursor(scon);
sdl_update_caption(scon);
}
@@ -658,7 +658,7 @@ static void sdl_mouse_warp(DisplayChangeListener *dcl,
if (on) {
if (!guest_cursor) {
- sdl_show_cursor();
+ sdl_show_cursor(scon);
}
if (gui_grab || qemu_input_is_absolute() || absolute_enabled) {
SDL_SetCursor(guest_sprite);
@@ -667,7 +667,7 @@ static void sdl_mouse_warp(DisplayChangeListener *dcl,
}
}
} else if (gui_grab) {
- sdl_hide_cursor();
+ sdl_hide_cursor(scon);
}
guest_cursor = on;
guest_x = x, guest_y = y;
diff --git a/vl.c b/vl.c
index 5419b3d68200..0a13cf2b1724 100644
--- a/vl.c
+++ b/vl.c
@@ -1931,6 +1931,16 @@ static void parse_display(const char *p)
} else {
goto invalid_sdl_args;
}
+ } else if (strstart(opts, ",show-cursor=", &nextopt)) {
+ opts = nextopt;
+ dpy.has_show_cursor = true;
+ if (strstart(opts, "on", &nextopt)) {
+ dpy.show_cursor = true;
+ } else if (strstart(opts, "off", &nextopt)) {
+ dpy.show_cursor = false;
+ } else {
+ goto invalid_sdl_args;
+ }
} else if (strstart(opts, ",gl=", &nextopt)) {
opts = nextopt;
dpy.has_gl = true;
--
2.18.1
^ permalink raw reply related [flat|nested] 12+ messages in thread
* [PATCH v3 4/7] ui/cocoa: switch to new show-cursor option
2020-02-07 10:17 [PATCH v3 0/7] ui: rework -show-cursor option Gerd Hoffmann
` (2 preceding siblings ...)
2020-02-07 10:17 ` [PATCH v3 3/7] ui/sdl: switch to new show-cursor option Gerd Hoffmann
@ 2020-02-07 10:17 ` Gerd Hoffmann
2020-02-07 10:17 ` [PATCH v3 5/7] ui/gtk: implement " Gerd Hoffmann
` (3 subsequent siblings)
7 siblings, 0 replies; 12+ messages in thread
From: Gerd Hoffmann @ 2020-02-07 10:17 UTC (permalink / raw)
To: qemu-devel
Cc: Peter Maydell, jtomko, libvir-list, Markus Armbruster,
jpewhacker, Gerd Hoffmann, Paolo Bonzini
Use DisplayOpts settings to set the new file-global cursor_hide
variable, stop using the qemu-global cursor_hide variable.
Signed-off-by: Gerd Hoffmann <kraxel@redhat.com>
---
ui/cocoa.m | 4 ++++
1 file changed, 4 insertions(+)
diff --git a/ui/cocoa.m b/ui/cocoa.m
index fbb5b1b45f81..f7b323044582 100644
--- a/ui/cocoa.m
+++ b/ui/cocoa.m
@@ -125,6 +125,7 @@ typedef struct {
NSWindow *normalWindow, *about_window;
static DisplayChangeListener *dcl;
static int last_buttons;
+static int cursor_hide = 1;
int gArgc;
char **gArgv;
@@ -1918,6 +1919,9 @@ static void cocoa_display_init(DisplayState *ds, DisplayOptions *opts)
[(QemuCocoaAppController *)[[NSApplication sharedApplication] delegate] toggleFullScreen: nil];
});
}
+ if (opts->has_show_cursor && opts->show_cursor) {
+ cursor_hide = 0;
+ }
dcl = g_malloc0(sizeof(DisplayChangeListener));
--
2.18.1
^ permalink raw reply related [flat|nested] 12+ messages in thread
* [PATCH v3 5/7] ui/gtk: implement show-cursor option
2020-02-07 10:17 [PATCH v3 0/7] ui: rework -show-cursor option Gerd Hoffmann
` (3 preceding siblings ...)
2020-02-07 10:17 ` [PATCH v3 4/7] ui/cocoa: " Gerd Hoffmann
@ 2020-02-07 10:17 ` Gerd Hoffmann
2020-02-07 14:37 ` Joshua Watt
2020-02-07 10:17 ` [PATCH v3 6/7] ui: drop curor_hide global variable Gerd Hoffmann
` (2 subsequent siblings)
7 siblings, 1 reply; 12+ messages in thread
From: Gerd Hoffmann @ 2020-02-07 10:17 UTC (permalink / raw)
To: qemu-devel
Cc: Peter Maydell, jtomko, libvir-list, Markus Armbruster,
jpewhacker, Gerd Hoffmann, Paolo Bonzini
When specified just set null_cursor to NULL so we get the default
pointer instead of a blank pointer.
Signed-off-by: Gerd Hoffmann <kraxel@redhat.com>
---
ui/gtk.c | 8 ++++++--
1 file changed, 6 insertions(+), 2 deletions(-)
diff --git a/ui/gtk.c b/ui/gtk.c
index d18892d1de61..a685d1ae0848 100644
--- a/ui/gtk.c
+++ b/ui/gtk.c
@@ -2243,8 +2243,12 @@ static void gtk_display_init(DisplayState *ds, DisplayOptions *opts)
textdomain("qemu");
window_display = gtk_widget_get_display(s->window);
- s->null_cursor = gdk_cursor_new_for_display(window_display,
- GDK_BLANK_CURSOR);
+ if (s->opts->has_show_cursor && s->opts->show_cursor) {
+ s->null_cursor = NULL; /* default pointer */
+ } else {
+ s->null_cursor = gdk_cursor_new_for_display(window_display,
+ GDK_BLANK_CURSOR);
+ }
s->mouse_mode_notifier.notify = gd_mouse_mode_change;
qemu_add_mouse_mode_change_notifier(&s->mouse_mode_notifier);
--
2.18.1
^ permalink raw reply related [flat|nested] 12+ messages in thread
* Re: [PATCH v3 5/7] ui/gtk: implement show-cursor option
2020-02-07 10:17 ` [PATCH v3 5/7] ui/gtk: implement " Gerd Hoffmann
@ 2020-02-07 14:37 ` Joshua Watt
2020-02-12 11:57 ` Gerd Hoffmann
0 siblings, 1 reply; 12+ messages in thread
From: Joshua Watt @ 2020-02-07 14:37 UTC (permalink / raw)
To: Gerd Hoffmann, qemu-devel
Cc: Peter Maydell, jtomko, libvir-list, Markus Armbruster, Paolo Bonzini
On 2/7/20 4:17 AM, Gerd Hoffmann wrote:
> When specified just set null_cursor to NULL so we get the default
> pointer instead of a blank pointer.
>
> Signed-off-by: Gerd Hoffmann <kraxel@redhat.com>
> ---
> ui/gtk.c | 8 ++++++--
> 1 file changed, 6 insertions(+), 2 deletions(-)
>
> diff --git a/ui/gtk.c b/ui/gtk.c
> index d18892d1de61..a685d1ae0848 100644
> --- a/ui/gtk.c
> +++ b/ui/gtk.c
> @@ -2243,8 +2243,12 @@ static void gtk_display_init(DisplayState *ds, DisplayOptions *opts)
> textdomain("qemu");
>
> window_display = gtk_widget_get_display(s->window);
> - s->null_cursor = gdk_cursor_new_for_display(window_display,
> - GDK_BLANK_CURSOR);
> + if (s->opts->has_show_cursor && s->opts->show_cursor) {
> + s->null_cursor = NULL; /* default pointer */
> + } else {
> + s->null_cursor = gdk_cursor_new_for_display(window_display,
> + GDK_BLANK_CURSOR);
> + }
I think it would make more sense to have all the logic related to what
cursor is used in the same location, instead of split up between here
and gd_update_cursor(). This would also match the behavior of the SDL
and cocoa backends a little better.
>
> s->mouse_mode_notifier.notify = gd_mouse_mode_change;
> qemu_add_mouse_mode_change_notifier(&s->mouse_mode_notifier);
^ permalink raw reply [flat|nested] 12+ messages in thread
* Re: [PATCH v3 5/7] ui/gtk: implement show-cursor option
2020-02-07 14:37 ` Joshua Watt
@ 2020-02-12 11:57 ` Gerd Hoffmann
0 siblings, 0 replies; 12+ messages in thread
From: Gerd Hoffmann @ 2020-02-12 11:57 UTC (permalink / raw)
To: Joshua Watt
Cc: Peter Maydell, jtomko, libvir-list, qemu-devel,
Markus Armbruster, Paolo Bonzini
> > + if (s->opts->has_show_cursor && s->opts->show_cursor) {
> > + s->null_cursor = NULL; /* default pointer */
> > + } else {
> > + s->null_cursor = gdk_cursor_new_for_display(window_display,
> > + GDK_BLANK_CURSOR);
> > + }
>
> I think it would make more sense to have all the logic related to what
> cursor is used in the same location, instead of split up between here and
> gd_update_cursor().
Note that it isn't that simple. There are a few more places in
gd_grab_*() which use s->null_cursor and would need adaption.
cheers,
Gerd
^ permalink raw reply [flat|nested] 12+ messages in thread
* [PATCH v3 6/7] ui: drop curor_hide global variable.
2020-02-07 10:17 [PATCH v3 0/7] ui: rework -show-cursor option Gerd Hoffmann
` (4 preceding siblings ...)
2020-02-07 10:17 ` [PATCH v3 5/7] ui/gtk: implement " Gerd Hoffmann
@ 2020-02-07 10:17 ` Gerd Hoffmann
2020-02-07 10:17 ` [PATCH v3 7/7] ui: deprecate legacy -show-cursor option Gerd Hoffmann
2020-02-08 22:52 ` [PATCH v3 0/7] ui: rework " Ján Tomko
7 siblings, 0 replies; 12+ messages in thread
From: Gerd Hoffmann @ 2020-02-07 10:17 UTC (permalink / raw)
To: qemu-devel
Cc: Peter Maydell, jtomko, libvir-list, Markus Armbruster,
jpewhacker, Gerd Hoffmann, Paolo Bonzini
No users left.
Signed-off-by: Gerd Hoffmann <kraxel@redhat.com>
---
include/sysemu/sysemu.h | 1 -
vl.c | 2 --
2 files changed, 3 deletions(-)
diff --git a/include/sysemu/sysemu.h b/include/sysemu/sysemu.h
index 6358a324a711..7956e9054ade 100644
--- a/include/sysemu/sysemu.h
+++ b/include/sysemu/sysemu.h
@@ -41,7 +41,6 @@ extern const char *keyboard_layout;
extern int win2k_install_hack;
extern int alt_grab;
extern int ctrl_grab;
-extern int cursor_hide;
extern int graphic_rotate;
extern int no_shutdown;
extern int old_param;
diff --git a/vl.c b/vl.c
index 0a13cf2b1724..62efcd15c0bf 100644
--- a/vl.c
+++ b/vl.c
@@ -168,7 +168,6 @@ int no_hpet = 0;
int fd_bootchk = 1;
static int no_reboot;
int no_shutdown = 0;
-int cursor_hide = 1;
int graphic_rotate = 0;
const char *watchdog;
QEMUOptionRom option_rom[MAX_OPTION_ROMS];
@@ -3563,7 +3562,6 @@ int main(int argc, char **argv, char **envp)
no_shutdown = 1;
break;
case QEMU_OPTION_show_cursor:
- cursor_hide = 0;
dpy.has_show_cursor = true;
dpy.show_cursor = true;
break;
--
2.18.1
^ permalink raw reply related [flat|nested] 12+ messages in thread
* [PATCH v3 7/7] ui: deprecate legacy -show-cursor option
2020-02-07 10:17 [PATCH v3 0/7] ui: rework -show-cursor option Gerd Hoffmann
` (5 preceding siblings ...)
2020-02-07 10:17 ` [PATCH v3 6/7] ui: drop curor_hide global variable Gerd Hoffmann
@ 2020-02-07 10:17 ` Gerd Hoffmann
2020-02-08 22:52 ` [PATCH v3 0/7] ui: rework " Ján Tomko
7 siblings, 0 replies; 12+ messages in thread
From: Gerd Hoffmann @ 2020-02-07 10:17 UTC (permalink / raw)
To: qemu-devel
Cc: Peter Maydell, jtomko, libvir-list, Markus Armbruster,
jpewhacker, Gerd Hoffmann, Paolo Bonzini
Signed-off-by: Gerd Hoffmann <kraxel@redhat.com>
Reviewed-by: Ján Tomko <jtomko@redhat.com>
---
vl.c | 2 ++
qemu-deprecated.texi | 5 +++++
2 files changed, 7 insertions(+)
diff --git a/vl.c b/vl.c
index 62efcd15c0bf..001be469c2e9 100644
--- a/vl.c
+++ b/vl.c
@@ -3562,6 +3562,8 @@ int main(int argc, char **argv, char **envp)
no_shutdown = 1;
break;
case QEMU_OPTION_show_cursor:
+ warn_report("The -show-cursor option is deprecated, "
+ "use -display {sdl,gtk},show-cursor=on instead");
dpy.has_show_cursor = true;
dpy.show_cursor = true;
break;
diff --git a/qemu-deprecated.texi b/qemu-deprecated.texi
index ea3e10bde398..c1444d1839bd 100644
--- a/qemu-deprecated.texi
+++ b/qemu-deprecated.texi
@@ -148,6 +148,11 @@ QEMU 5.0 introduced an alternative syntax to specify the size of the translation
block cache, @option{-accel tcg,tb-size=}. The new syntax deprecates the
previously available @option{-tb-size} option.
+@subsection -show-cursor option (since 5.0)
+
+Use @option{-display sdl,show-cursor=on} or
+ @option{-display gtk,show-cursor=on} instead.
+
@section QEMU Machine Protocol (QMP) commands
@subsection change (since 2.5.0)
--
2.18.1
^ permalink raw reply related [flat|nested] 12+ messages in thread
* Re: [PATCH v3 0/7] ui: rework -show-cursor option
2020-02-07 10:17 [PATCH v3 0/7] ui: rework -show-cursor option Gerd Hoffmann
` (6 preceding siblings ...)
2020-02-07 10:17 ` [PATCH v3 7/7] ui: deprecate legacy -show-cursor option Gerd Hoffmann
@ 2020-02-08 22:52 ` Ján Tomko
7 siblings, 0 replies; 12+ messages in thread
From: Ján Tomko @ 2020-02-08 22:52 UTC (permalink / raw)
To: Gerd Hoffmann
Cc: Peter Maydell, libvir-list, Markus Armbruster, qemu-devel,
jpewhacker, Paolo Bonzini
[-- Attachment #1: Type: text/plain, Size: 949 bytes --]
On Fri, Feb 07, 2020 at 11:17:46AM +0100, Gerd Hoffmann wrote:
>Add -display {sdl,gtk,cocoa},show-cursor=on as replacement for
>-show-cursor. sdl + cocoa are switched over (no change in behavior),
>gtk support is added.
>
>Gerd Hoffmann (7):
> ui: add show-cursor option
> ui: wire up legacy -show-cursor option
> ui/sdl: switch to new show-cursor option
> ui/cocoa: switch to new show-cursor option
> ui/gtk: implement show-cursor option
> ui: drop curor_hide global variable.
> ui: deprecate legacy -show-cursor option
>
> include/sysemu/sysemu.h | 1 -
> ui/gtk.c | 8 ++++++--
> ui/sdl2.c | 16 ++++++++--------
> vl.c | 16 ++++++++++++++--
> qapi/ui.json | 3 +++
> qemu-deprecated.texi | 5 +++++
> ui/cocoa.m | 4 ++++
> 7 files changed, 40 insertions(+), 13 deletions(-)
>
Series:
Reviewed-by: Ján Tomko <jtomko@redhat.com>
Jano
[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 488 bytes --]
^ permalink raw reply [flat|nested] 12+ messages in thread