aboutsummaryrefslogtreecommitdiff
path: root/ui
diff options
context:
space:
mode:
authorGerd Hoffmann <kraxel@redhat.com>2018-02-02 12:10:15 +0100
committerGerd Hoffmann <kraxel@redhat.com>2018-02-20 12:12:04 +0100
commitfe91f36aa5bd846cea816cf0a9b7a13dd76559c1 (patch)
tree73447036af280ec228a6ba06367332a59d28c762 /ui
parent0c8d7065325d84cb2521c0b52f383561d2541415 (diff)
sdl: use DisplayOptions
Switch sdl ui to use qapi DisplayOptions for configuration. Signed-off-by: Gerd Hoffmann <kraxel@redhat.com> Reviewed-by: Eric Blake <eblake@redhat.com> Message-id: 20180202111022.19269-6-kraxel@redhat.com Signed-off-by: Gerd Hoffmann <kraxel@redhat.com>
Diffstat (limited to 'ui')
-rw-r--r--ui/sdl.c19
-rw-r--r--ui/sdl2.c33
2 files changed, 32 insertions, 20 deletions
diff --git a/ui/sdl.c b/ui/sdl.c
index a6bff301eb..963cdf77a7 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 */
@@ -769,6 +770,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()) {
@@ -793,7 +795,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);
}
@@ -892,9 +897,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"
@@ -902,7 +907,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;
@@ -910,6 +915,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)
@@ -924,7 +931,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__
@@ -967,7 +974,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 858e04d7c0..6e96a4a24c 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 */
@@ -526,6 +527,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;
@@ -572,7 +574,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);
}
@@ -593,6 +598,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()) {
@@ -615,7 +621,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);
}
@@ -750,24 +759,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;
@@ -775,6 +777,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
@@ -849,7 +854,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);
}