All of lore.kernel.org
 help / color / mirror / Atom feed
* [Qemu-devel] [PATCH 0/3] ui: remove deprecated UI frontends
@ 2018-08-08 10:49 Daniel P. Berrangé
  2018-08-08 10:49 ` [Qemu-devel] [PATCH 1/3] ui: remove support for GTK2 in favour of GTK3 Daniel P. Berrangé
                   ` (4 more replies)
  0 siblings, 5 replies; 10+ messages in thread
From: Daniel P. Berrangé @ 2018-08-08 10:49 UTC (permalink / raw)
  To: qemu-devel; +Cc: libvir-list, Gerd Hoffmann, Daniel P. Berrangé

We deprecated GTK2 and SDL1.2 in the 2.12.0 release, so they are able to
be removed entirely in the 3.1.0 release. The min GTK3 version can also
be bumped up based the distros we aim to support.

Daniel P. Berrangé (3):
  ui: remove support for GTK2 in favour of GTK3
  ui: increase min required GTK3 version to 3.14.0
  ui: remove support for SDL1.2 in favour of SDL2

 configure              |  111 +----
 include/ui/gtk.h       |    9 -
 qemu-deprecated.texi   |   16 -
 ui/Makefile.objs       |    5 -
 ui/gtk-egl.c           |   10 +-
 ui/gtk.c               |  202 +-------
 ui/sdl.c               | 1027 ----------------------------------------
 ui/sdl_zoom.c          |   93 ----
 ui/sdl_zoom.h          |   25 -
 ui/sdl_zoom_template.h |  219 ---------
 10 files changed, 33 insertions(+), 1684 deletions(-)
 delete mode 100644 ui/sdl.c
 delete mode 100644 ui/sdl_zoom.c
 delete mode 100644 ui/sdl_zoom.h
 delete mode 100644 ui/sdl_zoom_template.h

-- 
2.17.1

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

* [Qemu-devel] [PATCH 1/3] ui: remove support for GTK2 in favour of GTK3
  2018-08-08 10:49 [Qemu-devel] [PATCH 0/3] ui: remove deprecated UI frontends Daniel P. Berrangé
@ 2018-08-08 10:49 ` Daniel P. Berrangé
  2018-08-08 10:49 ` [Qemu-devel] [PATCH 2/3] ui: increase min required GTK3 version to 3.14.0 Daniel P. Berrangé
                   ` (3 subsequent siblings)
  4 siblings, 0 replies; 10+ messages in thread
From: Daniel P. Berrangé @ 2018-08-08 10:49 UTC (permalink / raw)
  To: qemu-devel; +Cc: libvir-list, Gerd Hoffmann, Daniel P. Berrangé

GTK2 was deprecated in the 2.12.0 release with:

  commit b7715af2b31f47060cc5b4be930d16c13be93fa9
  Author: Daniel P. Berrange <berrange@redhat.com>
  Date:   Tue Dec 12 11:34:40 2017 +0000

    ui: deprecate use of GTK 2.x in favour of 3.x series

    The GTK 3.0 release was made in Feb, 2011:

      https://blog.gtk.org/2011/02/10/gtk-3-0-released/

    That will soon be 7 years ago, which is enough time to consider
    the 3.x series widely supported.

    Thus we deprecate the GTK 2.x support, which will allow us to
    delete it in the last release of 2018. By this time, GTK 3.x
    will be almost 8 years old.

    Signed-off-by: Daniel P. Berrange <berrange@redhat.com>
    Message-id: 20171212113440.16483-1-berrange@redhat.com
    Signed-off-by: Gerd Hoffmann <kraxel@redhat.com>

It is thus able to be removed in the 3.1.0 release.

Signed-off-by: Daniel P. Berrangé <berrange@redhat.com>
---
 configure            |  51 ++----------
 include/ui/gtk.h     |   9 --
 qemu-deprecated.texi |   7 --
 ui/gtk-egl.c         |  10 +--
 ui/gtk.c             | 192 ++++---------------------------------------
 5 files changed, 26 insertions(+), 243 deletions(-)

diff --git a/configure b/configure
index 2a7796ea80..45bf2852f6 100755
--- a/configure
+++ b/configure
@@ -452,7 +452,6 @@ glusterfs_discard="no"
 glusterfs_fallocate="no"
 glusterfs_zerofill="no"
 gtk=""
-gtkabi=""
 gtk_gl="no"
 tls_priority="NORMAL"
 gnutls=""
@@ -1363,8 +1362,6 @@ for opt do
   ;;
   --disable-rdma) rdma="no"
   ;;
-  --with-gtkabi=*) gtkabi="$optarg"
-  ;;
   --disable-vte) vte="no"
   ;;
   --enable-vte) vte="yes"
@@ -1648,7 +1645,6 @@ disabled with --disable-FEATURE, default is enabled if available:
   sdl             SDL UI
   --with-sdlabi     select preferred SDL ABI 1.2 or 2.0
   gtk             gtk UI
-  --with-gtkabi     select preferred GTK ABI 2.0 or 3.0
   vte             vte support for the gtk UI
   curses          curses UI
   vnc             VNC UI support
@@ -2636,24 +2632,9 @@ fi
 # GTK probe
 
 if test "$gtk" != "no"; then
-    if test "$gtkabi" = ""; then
-        # The GTK ABI was not specified explicitly, so try whether 3.0 is available.
-        # Use 2.0 as a fallback if that is available.
-        if $pkg_config --exists "gtk+-3.0 >= 3.0.0"; then
-            gtkabi=3.0
-        elif $pkg_config --exists "gtk+-2.0 >= 2.18.0"; then
-            gtkabi=2.0
-        else
-            gtkabi=3.0
-        fi
-    fi
-    gtkpackage="gtk+-$gtkabi"
-    gtkx11package="gtk+-x11-$gtkabi"
-    if test "$gtkabi" = "3.0" ; then
-      gtkversion="3.0.0"
-    else
-      gtkversion="2.18.0"
-    fi
+    gtkpackage="gtk+-3.0"
+    gtkx11package="gtk+-x11-3.0"
+    gtkversion="3.0.0"
     if $pkg_config --exists "$gtkpackage >= $gtkversion"; then
         gtk_cflags=$($pkg_config --cflags $gtkpackage)
         gtk_libs=$($pkg_config --libs $gtkpackage)
@@ -2897,16 +2878,11 @@ fi
 # VTE probe
 
 if test "$vte" != "no"; then
-    if test "$gtkabi" = "3.0"; then
-      vteminversion="0.32.0"
-      if $pkg_config --exists "vte-2.91"; then
-        vtepackage="vte-2.91"
-      else
-        vtepackage="vte-2.90"
-      fi
+    vteminversion="0.32.0"
+    if $pkg_config --exists "vte-2.91"; then
+      vtepackage="vte-2.91"
     else
-      vtepackage="vte"
-      vteminversion="0.24.0"
+      vtepackage="vte-2.90"
     fi
     if $pkg_config --exists "$vtepackage >= $vteminversion"; then
         vte_cflags=$($pkg_config --cflags $vtepackage)
@@ -2914,11 +2890,7 @@ if test "$vte" != "no"; then
         vteversion=$($pkg_config --modversion $vtepackage)
         vte="yes"
     elif test "$vte" = "yes"; then
-        if test "$gtkabi" = "3.0"; then
-            feature_not_found "vte" "Install libvte-2.90/2.91 devel"
-        else
-            feature_not_found "vte" "Install libvte devel"
-        fi
+        feature_not_found "vte" "Install libvte-2.90/2.91 devel"
     else
         vte="no"
     fi
@@ -6015,12 +5987,6 @@ if test "$sdl_too_old" = "yes"; then
 echo "-> Your SDL version is too old - please upgrade to have SDL support"
 fi
 
-if test "$gtkabi" = "2.0"; then
-    echo
-    echo "WARNING: Use of GTK 2.0 is deprecated and will be removed in"
-    echo "WARNING: future releases. Please switch to using GTK 3.0"
-fi
-
 if test "$sdlabi" = "1.2"; then
     echo
     echo "WARNING: Use of SDL 1.2 is deprecated and will be removed in"
@@ -6340,7 +6306,6 @@ if test "$glib_subprocess" = "yes" ; then
 fi
 if test "$gtk" = "yes" ; then
   echo "CONFIG_GTK=m" >> $config_host_mak
-  echo "CONFIG_GTKABI=$gtkabi" >> $config_host_mak
   echo "GTK_CFLAGS=$gtk_cflags" >> $config_host_mak
   echo "GTK_LIBS=$gtk_libs" >> $config_host_mak
   if test "$gtk_gl" = "yes" ; then
diff --git a/include/ui/gtk.h b/include/ui/gtk.h
index a79780afc7..99edd3c085 100644
--- a/include/ui/gtk.h
+++ b/include/ui/gtk.h
@@ -27,15 +27,6 @@
 #include "ui/egl-context.h"
 #endif
 
-/* Compatibility define to let us build on both Gtk2 and Gtk3 */
-#if GTK_CHECK_VERSION(3, 0, 0)
-static inline void gdk_drawable_get_size(GdkWindow *w, gint *ww, gint *wh)
-{
-    *ww = gdk_window_get_width(w);
-    *wh = gdk_window_get_height(w);
-}
-#endif
-
 typedef struct GtkDisplayState GtkDisplayState;
 
 typedef struct VirtualGfxConsole {
diff --git a/qemu-deprecated.texi b/qemu-deprecated.texi
index 9920a85adc..eb85733fcd 100644
--- a/qemu-deprecated.texi
+++ b/qemu-deprecated.texi
@@ -19,13 +19,6 @@ deprecated.
 
 @section Build options
 
-@subsection GTK 2.x
-
-Previously QEMU has supported building against both GTK 2.x
-and 3.x series APIs. Support for the GTK 2.x builds will be
-discontinued, so maintainers should switch to using GTK 3.x,
-which is the default.
-
 @subsection SDL 1.2
 
 Previously QEMU has supported building against both SDL 1.2
diff --git a/ui/gtk-egl.c b/ui/gtk-egl.c
index fb00ad12ec..a77c25b490 100644
--- a/ui/gtk-egl.c
+++ b/ui/gtk-egl.c
@@ -48,11 +48,7 @@ void gd_egl_init(VirtualConsole *vc)
         return;
     }
 
-#if GTK_CHECK_VERSION(3, 0, 0)
     Window x11_window = gdk_x11_window_get_xid(gdk_window);
-#else
-    Window x11_window = gdk_x11_drawable_get_xid(gdk_window);
-#endif
     if (!x11_window) {
         return;
     }
@@ -82,7 +78,8 @@ void gd_egl_draw(VirtualConsole *vc)
                        vc->gfx.esurface, vc->gfx.ectx);
 
         window = gtk_widget_get_window(vc->gfx.drawing_area);
-        gdk_drawable_get_size(window, &ww, &wh);
+        ww = gdk_window_get_width(window);
+        wh = gdk_window_get_height(window);
         surface_gl_setup_viewport(vc->gfx.gls, vc->gfx.ds, ww, wh);
         surface_gl_render_texture(vc->gfx.gls, vc->gfx.ds);
 
@@ -265,7 +262,8 @@ void gd_egl_scanout_flush(DisplayChangeListener *dcl,
                    vc->gfx.esurface, vc->gfx.ectx);
 
     window = gtk_widget_get_window(vc->gfx.drawing_area);
-    gdk_drawable_get_size(window, &ww, &wh);
+    ww = gdk_window_get_width(window);
+    wh = gdk_window_get_height(window);
     egl_fb_setup_default(&vc->gfx.win_fb, ww, wh);
     if (vc->gfx.cursor_fb.texture) {
         egl_texture_blit(vc->gfx.gls, &vc->gfx.win_fb, &vc->gfx.guest_fb,
diff --git a/ui/gtk.c b/ui/gtk.c
index 5cce6ed42d..9d09bc9e57 100644
--- a/ui/gtk.c
+++ b/ui/gtk.c
@@ -111,49 +111,6 @@
 # define VTE_CHECK_VERSION(a, b, c) 0
 #endif
 
-#if defined(CONFIG_VTE) && !GTK_CHECK_VERSION(3, 0, 0)
-/*
- * The gtk2 vte terminal widget seriously messes up the window resize
- * for some reason.  You basically can't make the qemu window smaller
- * any more because the toplevel window geoemtry hints are overridden.
- *
- * Workaround that by hiding all vte widgets, except the one in the
- * current tab.
- *
- * Luckily everything works smooth in gtk3.
- */
-# define VTE_RESIZE_HACK 1
-#endif
-
-#if !GTK_CHECK_VERSION(2, 20, 0)
-#define gtk_widget_get_realized(widget) GTK_WIDGET_REALIZED(widget)
-#endif
-
-#ifndef GDK_IS_X11_DISPLAY
-#define GDK_IS_X11_DISPLAY(dpy) (dpy == dpy)
-#endif
-#ifndef GDK_IS_WAYLAND_DISPLAY
-#define GDK_IS_WAYLAND_DISPLAY(dpy) (dpy == dpy)
-#endif
-#ifndef GDK_IS_WIN32_DISPLAY
-#define GDK_IS_WIN32_DISPLAY(dpy) (dpy == dpy)
-#endif
-
-#if !GTK_CHECK_VERSION(2, 22, 0)
-#define GDK_KEY_0 GDK_0
-#define GDK_KEY_1 GDK_1
-#define GDK_KEY_2 GDK_2
-#define GDK_KEY_f GDK_f
-#define GDK_KEY_g GDK_g
-#define GDK_KEY_m GDK_m
-#define GDK_KEY_q GDK_q
-#define GDK_KEY_plus GDK_plus
-#define GDK_KEY_equal GDK_equal
-#define GDK_KEY_minus GDK_minus
-#define GDK_KEY_Pause GDK_Pause
-#define GDK_KEY_Delete GDK_Delete
-#endif
-
 /* Some older mingw versions lack this constant or have
  * it conditionally defined */
 #ifdef _WIN32
@@ -455,7 +412,8 @@ static void gd_update_full_redraw(VirtualConsole *vc)
 {
     GtkWidget *area = vc->gfx.drawing_area;
     int ww, wh;
-    gdk_drawable_get_size(gtk_widget_get_window(area), &ww, &wh);
+    ww = gdk_window_get_width(gtk_widget_get_window(area));
+    wh = gdk_window_get_height(gtk_widget_get_window(area));
 #if defined(CONFIG_GTK_GL)
     if (vc->gfx.gls && gtk_use_gl_area) {
         gtk_gl_area_queue_render(GTK_GL_AREA(vc->gfx.drawing_area));
@@ -530,7 +488,8 @@ static void gd_update(DisplayChangeListener *dcl,
     if (!win) {
         return;
     }
-    gdk_drawable_get_size(win, &ww, &wh);
+    ww = gdk_window_get_width(win);
+    wh = gdk_window_get_height(win);
 
     mx = my = 0;
     if (ww > fbw) {
@@ -549,7 +508,6 @@ static void gd_refresh(DisplayChangeListener *dcl)
     graphic_hw_update(dcl->con);
 }
 
-#if GTK_CHECK_VERSION(3, 0, 0)
 static GdkDevice *gd_get_pointer(GdkDisplay *dpy)
 {
 #if GTK_CHECK_VERSION(3, 20, 0)
@@ -580,24 +538,6 @@ static void gd_mouse_set(DisplayChangeListener *dcl,
     vc->s->last_x = x;
     vc->s->last_y = y;
 }
-#else
-static void gd_mouse_set(DisplayChangeListener *dcl,
-                         int x, int y, int visible)
-{
-    VirtualConsole *vc = container_of(dcl, VirtualConsole, gfx.dcl);
-    gint x_root, y_root;
-
-    if (qemu_input_is_absolute()) {
-        return;
-    }
-
-    gdk_window_get_root_coords(gtk_widget_get_window(vc->gfx.drawing_area),
-                               x, y, &x_root, &y_root);
-    gdk_display_warp_pointer(gtk_widget_get_display(vc->gfx.drawing_area),
-                             gtk_widget_get_screen(vc->gfx.drawing_area),
-                             x_root, y_root);
-}
-#endif
 
 static void gd_cursor_define(DisplayChangeListener *dcl,
                              QEMUCursor *c)
@@ -619,11 +559,7 @@ static void gd_cursor_define(DisplayChangeListener *dcl,
          pixbuf, c->hot_x, c->hot_y);
     gdk_window_set_cursor(gtk_widget_get_window(vc->gfx.drawing_area), cursor);
     g_object_unref(pixbuf);
-#if !GTK_CHECK_VERSION(3, 0, 0)
-    gdk_cursor_unref(cursor);
-#else
     g_object_unref(cursor);
-#endif
 }
 
 static void gd_switch(DisplayChangeListener *dcl,
@@ -863,7 +799,8 @@ static gboolean gd_draw_event(GtkWidget *widget, cairo_t *cr, void *opaque)
     fbw = surface_width(vc->gfx.ds);
     fbh = surface_height(vc->gfx.ds);
 
-    gdk_drawable_get_size(gtk_widget_get_window(widget), &ww, &wh);
+    ww = gdk_window_get_width(gtk_widget_get_window(widget));
+    wh = gdk_window_get_height(gtk_widget_get_window(widget));
 
     if (s->full_screen) {
         vc->gfx.scale_x = (double)ww / fbw;
@@ -907,29 +844,6 @@ static gboolean gd_draw_event(GtkWidget *widget, cairo_t *cr, void *opaque)
     return TRUE;
 }
 
-#if !GTK_CHECK_VERSION(3, 0, 0)
-static gboolean gd_expose_event(GtkWidget *widget, GdkEventExpose *expose,
-                                void *opaque)
-{
-    cairo_t *cr;
-    gboolean ret;
-
-    cr = gdk_cairo_create(gtk_widget_get_window(widget));
-    cairo_rectangle(cr,
-                    expose->area.x,
-                    expose->area.y,
-                    expose->area.width,
-                    expose->area.height);
-    cairo_clip(cr);
-
-    ret = gd_draw_event(widget, cr, opaque);
-
-    cairo_destroy(cr);
-
-    return ret;
-}
-#endif
-
 static gboolean gd_motion_event(GtkWidget *widget, GdkEventMotion *motion,
                                 void *opaque)
 {
@@ -947,8 +861,8 @@ static gboolean gd_motion_event(GtkWidget *widget, GdkEventMotion *motion,
     fbw = surface_width(vc->gfx.ds) * vc->gfx.scale_x;
     fbh = surface_height(vc->gfx.ds) * vc->gfx.scale_y;
 
-    gdk_drawable_get_size(gtk_widget_get_window(vc->gfx.drawing_area),
-                          &ww, &wh);
+    ww = gdk_window_get_width(gtk_widget_get_window(vc->gfx.drawing_area));
+    wh = gdk_window_get_height(gtk_widget_get_window(vc->gfx.drawing_area));
 
     mx = my = 0;
     if (ww > fbw) {
@@ -1026,13 +940,8 @@ static gboolean gd_motion_event(GtkWidget *widget, GdkEventMotion *motion,
         }
 
         if (x != (int)motion->x_root || y != (int)motion->y_root) {
-#if GTK_CHECK_VERSION(3, 0, 0)
             GdkDevice *dev = gdk_event_get_device((GdkEvent *)motion);
             gdk_device_warp(dev, screen, x, y);
-#else
-            GdkDisplay *display = gtk_widget_get_display(widget);
-            gdk_display_warp_pointer(display, screen, x, y);
-#endif
             s->last_set = FALSE;
             return FALSE;
         }
@@ -1309,10 +1218,6 @@ static void gd_accel_switch_vc(void *opaque)
     VirtualConsole *vc = opaque;
 
     gtk_check_menu_item_set_active(GTK_CHECK_MENU_ITEM(vc->menu_item), TRUE);
-#if !GTK_CHECK_VERSION(3, 0, 0)
-    /* GTK2 sends the accel key to the target console - ignore this until */
-    vc->s->ignore_keys = true;
-#endif
 }
 
 static void gd_menu_show_tabs(GtkMenuItem *item, void *opaque)
@@ -1539,7 +1444,7 @@ static void gd_grab_update(VirtualConsole *vc, bool kbd, bool ptr)
         gdk_seat_ungrab(seat);
     }
 }
-#elif GTK_CHECK_VERSION(3, 0, 0)
+#else
 static void gd_grab_devices(VirtualConsole *vc, bool grab,
                             GdkInputSource source, GdkEventMask mask,
                             GdkCursor *cursor)
@@ -1578,14 +1483,10 @@ static void gd_grab_keyboard(VirtualConsole *vc, const char *reason)
 
 #if GTK_CHECK_VERSION(3, 20, 0)
     gd_grab_update(vc, true, vc->s->ptr_owner == vc);
-#elif GTK_CHECK_VERSION(3, 0, 0)
+#else
     gd_grab_devices(vc, true, GDK_SOURCE_KEYBOARD,
                    GDK_KEY_PRESS_MASK | GDK_KEY_RELEASE_MASK,
                    NULL);
-#else
-    gdk_keyboard_grab(gtk_widget_get_window(vc->gfx.drawing_area),
-                      FALSE,
-                      GDK_CURRENT_TIME);
 #endif
     vc->s->kbd_owner = vc;
     gd_update_caption(vc->s);
@@ -1603,10 +1504,8 @@ static void gd_ungrab_keyboard(GtkDisplayState *s)
 
 #if GTK_CHECK_VERSION(3, 20, 0)
     gd_grab_update(vc, false, vc->s->ptr_owner == vc);
-#elif GTK_CHECK_VERSION(3, 0, 0)
-    gd_grab_devices(vc, false, GDK_SOURCE_KEYBOARD, 0, NULL);
 #else
-    gdk_keyboard_ungrab(GDK_CURRENT_TIME);
+    gd_grab_devices(vc, false, GDK_SOURCE_KEYBOARD, 0, NULL);
 #endif
     gd_update_caption(s);
     trace_gd_ungrab(vc->label, "kbd");
@@ -1628,7 +1527,7 @@ static void gd_grab_pointer(VirtualConsole *vc, const char *reason)
     gd_grab_update(vc, vc->s->kbd_owner == vc, true);
     gdk_device_get_position(gd_get_pointer(display),
                             NULL, &vc->s->grab_x_root, &vc->s->grab_y_root);
-#elif GTK_CHECK_VERSION(3, 0, 0)
+#else
     gd_grab_devices(vc, true, GDK_SOURCE_MOUSE,
                     GDK_POINTER_MOTION_MASK |
                     GDK_BUTTON_PRESS_MASK |
@@ -1638,19 +1537,6 @@ static void gd_grab_pointer(VirtualConsole *vc, const char *reason)
                     vc->s->null_cursor);
     gdk_device_get_position(gd_get_pointer(display),
                             NULL, &vc->s->grab_x_root, &vc->s->grab_y_root);
-#else
-    gdk_pointer_grab(gtk_widget_get_window(vc->gfx.drawing_area),
-                     FALSE, /* All events to come to our window directly */
-                     GDK_POINTER_MOTION_MASK |
-                     GDK_BUTTON_PRESS_MASK |
-                     GDK_BUTTON_RELEASE_MASK |
-                     GDK_BUTTON_MOTION_MASK |
-                     GDK_SCROLL_MASK,
-                     NULL, /* Allow cursor to move over entire desktop */
-                     vc->s->null_cursor,
-                     GDK_CURRENT_TIME);
-    gdk_display_get_pointer(display, NULL,
-                            &vc->s->grab_x_root, &vc->s->grab_y_root, NULL);
 #endif
     vc->s->ptr_owner = vc;
     gd_update_caption(vc->s);
@@ -1673,16 +1559,11 @@ static void gd_ungrab_pointer(GtkDisplayState *s)
     gdk_device_warp(gd_get_pointer(display),
                     gtk_widget_get_screen(vc->gfx.drawing_area),
                     vc->s->grab_x_root, vc->s->grab_y_root);
-#elif GTK_CHECK_VERSION(3, 0, 0)
+#else
     gd_grab_devices(vc, false, GDK_SOURCE_MOUSE, 0, NULL);
     gdk_device_warp(gd_get_pointer(display),
                     gtk_widget_get_screen(vc->gfx.drawing_area),
                     vc->s->grab_x_root, vc->s->grab_y_root);
-#else
-    gdk_pointer_ungrab(GDK_CURRENT_TIME);
-    gdk_display_warp_pointer(display,
-                             gtk_widget_get_screen(vc->gfx.drawing_area),
-                             vc->s->grab_x_root, vc->s->grab_y_root);
 #endif
     gd_update_caption(s);
     trace_gd_ungrab(vc->label, "ptr");
@@ -1715,21 +1596,10 @@ static void gd_change_page(GtkNotebook *nb, gpointer arg1, guint arg2,
         return;
     }
 
-#ifdef VTE_RESIZE_HACK
-    vc = gd_vc_find_current(s);
-    if (vc && vc->type == GD_VC_VTE) {
-        gtk_widget_hide(vc->vte.terminal);
-    }
-#endif
     vc = gd_vc_find_by_page(s, arg2);
     if (!vc) {
         return;
     }
-#ifdef VTE_RESIZE_HACK
-    if (vc->type == GD_VC_VTE) {
-        gtk_widget_show(vc->vte.terminal);
-    }
-#endif
     gtk_check_menu_item_set_active(GTK_CHECK_MENU_ITEM(vc->menu_item),
                                    TRUE);
     on_vga = (vc->type == GD_VC_GFX &&
@@ -1963,20 +1833,15 @@ static GSList *gd_vc_vte_init(GtkDisplayState *s, VirtualConsole *vc,
     vte_terminal_set_size(VTE_TERMINAL(vc->vte.terminal),
                           VC_TERM_X_MIN, VC_TERM_Y_MIN);
 
-#if VTE_CHECK_VERSION(0, 28, 0) && GTK_CHECK_VERSION(3, 0, 0)
+#if VTE_CHECK_VERSION(0, 28, 0)
     vadjustment = gtk_scrollable_get_vadjustment
         (GTK_SCROLLABLE(vc->vte.terminal));
 #else
     vadjustment = vte_terminal_get_adjustment(VTE_TERMINAL(vc->vte.terminal));
 #endif
 
-#if GTK_CHECK_VERSION(3, 0, 0)
     box = gtk_box_new(GTK_ORIENTATION_HORIZONTAL, 2);
     scrollbar = gtk_scrollbar_new(GTK_ORIENTATION_VERTICAL, vadjustment);
-#else
-    box = gtk_hbox_new(false, 2);
-    scrollbar = gtk_vscrollbar_new(vadjustment);
-#endif
 
     gtk_box_pack_end(GTK_BOX(box), scrollbar, FALSE, FALSE, 0);
     gtk_box_pack_end(GTK_BOX(box), vc->vte.terminal, TRUE, TRUE, 0);
@@ -2015,7 +1880,6 @@ static void gd_vcs_init(GtkDisplayState *s, GSList *group,
 
 static void gd_connect_vc_gfx_signals(VirtualConsole *vc)
 {
-#if GTK_CHECK_VERSION(3, 0, 0)
     g_signal_connect(vc->gfx.drawing_area, "draw",
                      G_CALLBACK(gd_draw_event), vc);
 #if defined(CONFIG_GTK_GL)
@@ -2026,10 +1890,6 @@ static void gd_connect_vc_gfx_signals(VirtualConsole *vc)
         g_signal_connect(vc->gfx.drawing_area, "resize",
                          G_CALLBACK(gd_resize_event), vc);
     }
-#endif
-#else
-    g_signal_connect(vc->gfx.drawing_area, "expose-event",
-                     G_CALLBACK(gd_expose_event), vc);
 #endif
     if (qemu_console_is_graphic(vc->gfx.dcl.con)) {
         g_signal_connect(vc->gfx.drawing_area, "event",
@@ -2226,11 +2086,9 @@ static GtkWidget *gd_create_menu_view(GtkDisplayState *s)
 
     gtk_accel_group_connect(s->accel_group, GDK_KEY_f, HOTKEY_MODIFIERS, 0,
             g_cclosure_new_swap(G_CALLBACK(gd_accel_full_screen), s, NULL));
-#if GTK_CHECK_VERSION(3, 8, 0)
     gtk_accel_label_set_accel(
             GTK_ACCEL_LABEL(gtk_bin_get_child(GTK_BIN(s->full_screen_item))),
             GDK_KEY_f, HOTKEY_MODIFIERS);
-#endif
     gtk_menu_shell_append(GTK_MENU_SHELL(view_menu), s->full_screen_item);
 
     separator = gtk_separator_menu_item_new();
@@ -2362,11 +2220,6 @@ static void gtk_display_init(DisplayState *ds, DisplayOptions *opts)
     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"
-               "in a future release. Please switch to GTK 3.x instead\n");
-#endif
-
     s->window = gtk_window_new(GTK_WINDOW_TOPLEVEL);
 #if GTK_CHECK_VERSION(3, 2, 0)
     s->vbox = gtk_box_new(GTK_ORIENTATION_VERTICAL, 0);
@@ -2423,23 +2276,6 @@ static void gtk_display_init(DisplayState *ds, DisplayOptions *opts)
 
     gtk_widget_show_all(s->window);
 
-#ifdef VTE_RESIZE_HACK
-    {
-        VirtualConsole *cur = gd_vc_find_current(s);
-        if (cur) {
-            int i;
-
-            for (i = 0; i < s->nb_vcs; i++) {
-                VirtualConsole *vc = &s->vc[i];
-                if (vc && vc->type == GD_VC_VTE && vc != cur) {
-                    gtk_widget_hide(vc->vte.terminal);
-                }
-            }
-            gd_update_windowsize(cur);
-        }
-    }
-#endif
-
     vc = gd_vc_find_current(s);
     gtk_widget_set_sensitive(s->view_menu, vc != NULL);
 #ifdef CONFIG_VTE
-- 
2.17.1

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

* [Qemu-devel] [PATCH 2/3] ui: increase min required GTK3 version to 3.14.0
  2018-08-08 10:49 [Qemu-devel] [PATCH 0/3] ui: remove deprecated UI frontends Daniel P. Berrangé
  2018-08-08 10:49 ` [Qemu-devel] [PATCH 1/3] ui: remove support for GTK2 in favour of GTK3 Daniel P. Berrangé
@ 2018-08-08 10:49 ` Daniel P. Berrangé
  2018-08-08 10:49 ` [Qemu-devel] [PATCH 3/3] ui: remove support for SDL1.2 in favour of SDL2 Daniel P. Berrangé
                   ` (2 subsequent siblings)
  4 siblings, 0 replies; 10+ messages in thread
From: Daniel P. Berrangé @ 2018-08-08 10:49 UTC (permalink / raw)
  To: qemu-devel; +Cc: libvir-list, Gerd Hoffmann, Daniel P. Berrangé

Per supported platforms doc[1], the various min GTK3 on relevant distros is:

  RHEL-7.0: 3.8.8
  RHEL-7.2: 3.14.13
  RHEL-7.4: 3.22.10
  RHEL-7.5: 3.22.26
  Debian (Stretch): 3.22.11
  Debian (Jessie): 3.14.5
  OpenBSD (Ports): 3.22.30
  FreeBSD (Ports): 3.22.29
  OpenSUSE Leap 15: 3.22.30
  SLE12-SP2: Unknown
  Ubuntu (Xenial): 3.18.9
  macOS (Homebrew): 3.22.30

This suggests that a minimum GTK3 of 3.14.0 is a reasonable target,
as users are unlikely to be stuck on RHEL-7.0/7.1 still

[1] https://qemu.weilnetz.de/doc/qemu-doc.html#Supported-build-platforms

Signed-off-by: Daniel P. Berrangé <berrange@redhat.com>
---
 configure |  2 +-
 ui/gtk.c  | 10 ----------
 2 files changed, 1 insertion(+), 11 deletions(-)

diff --git a/configure b/configure
index 45bf2852f6..3510036e06 100755
--- a/configure
+++ b/configure
@@ -2634,7 +2634,7 @@ fi
 if test "$gtk" != "no"; then
     gtkpackage="gtk+-3.0"
     gtkx11package="gtk+-x11-3.0"
-    gtkversion="3.0.0"
+    gtkversion="3.14.0"
     if $pkg_config --exists "$gtkpackage >= $gtkversion"; then
         gtk_cflags=$($pkg_config --cflags $gtkpackage)
         gtk_libs=$($pkg_config --libs $gtkpackage)
diff --git a/ui/gtk.c b/ui/gtk.c
index 9d09bc9e57..6d57558084 100644
--- a/ui/gtk.c
+++ b/ui/gtk.c
@@ -998,7 +998,6 @@ static gboolean gd_scroll_event(GtkWidget *widget, GdkEventScroll *scroll,
         btn = INPUT_BUTTON_WHEEL_UP;
     } else if (scroll->direction == GDK_SCROLL_DOWN) {
         btn = INPUT_BUTTON_WHEEL_DOWN;
-#if GTK_CHECK_VERSION(3, 4, 0)
     } else if (scroll->direction == GDK_SCROLL_SMOOTH) {
         gdouble delta_x, delta_y;
         if (!gdk_event_get_scroll_deltas((GdkEvent *)scroll,
@@ -1010,7 +1009,6 @@ static gboolean gd_scroll_event(GtkWidget *widget, GdkEventScroll *scroll,
         } else {
             btn = INPUT_BUTTON_WHEEL_UP;
         }
-#endif
     } else {
         return TRUE;
     }
@@ -1672,11 +1670,9 @@ static GSList *gd_vc_menu_init(GtkDisplayState *s, VirtualConsole *vc,
     gtk_accel_group_connect(s->accel_group, GDK_KEY_1 + idx,
             HOTKEY_MODIFIERS, 0,
             g_cclosure_new_swap(G_CALLBACK(gd_accel_switch_vc), vc, NULL));
-#if GTK_CHECK_VERSION(3, 8, 0)
     gtk_accel_label_set_accel(
             GTK_ACCEL_LABEL(gtk_bin_get_child(GTK_BIN(vc->menu_item))),
             GDK_KEY_1 + idx, HOTKEY_MODIFIERS);
-#endif
 
     g_signal_connect(vc->menu_item, "activate",
                      G_CALLBACK(gd_menu_switch_vc), s);
@@ -2167,11 +2163,9 @@ static GtkWidget *gd_create_menu_view(GtkDisplayState *s)
                                    TRUE);
     gtk_accel_group_connect(s->accel_group, GDK_KEY_m, HOTKEY_MODIFIERS, 0,
             g_cclosure_new_swap(G_CALLBACK(gd_accel_show_menubar), s, NULL));
-#if GTK_CHECK_VERSION(3, 8, 0)
     gtk_accel_label_set_accel(
             GTK_ACCEL_LABEL(gtk_bin_get_child(GTK_BIN(s->show_menubar_item))),
             GDK_KEY_m, HOTKEY_MODIFIERS);
-#endif
     gtk_menu_shell_append(GTK_MENU_SHELL(view_menu), s->show_menubar_item);
 
     return view_menu;
@@ -2221,11 +2215,7 @@ static void gtk_display_init(DisplayState *ds, DisplayOptions *opts)
     s->opts = opts;
 
     s->window = gtk_window_new(GTK_WINDOW_TOPLEVEL);
-#if GTK_CHECK_VERSION(3, 2, 0)
     s->vbox = gtk_box_new(GTK_ORIENTATION_VERTICAL, 0);
-#else
-    s->vbox = gtk_vbox_new(FALSE, 0);
-#endif
     s->notebook = gtk_notebook_new();
     s->menu_bar = gtk_menu_bar_new();
 
-- 
2.17.1

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

* [Qemu-devel] [PATCH 3/3] ui: remove support for SDL1.2 in favour of SDL2
  2018-08-08 10:49 [Qemu-devel] [PATCH 0/3] ui: remove deprecated UI frontends Daniel P. Berrangé
  2018-08-08 10:49 ` [Qemu-devel] [PATCH 1/3] ui: remove support for GTK2 in favour of GTK3 Daniel P. Berrangé
  2018-08-08 10:49 ` [Qemu-devel] [PATCH 2/3] ui: increase min required GTK3 version to 3.14.0 Daniel P. Berrangé
@ 2018-08-08 10:49 ` Daniel P. Berrangé
  2018-08-08 13:51   ` Peter Maydell
  2018-08-08 11:24 ` [Qemu-devel] [PATCH 0/3] ui: remove deprecated UI frontends Gerd Hoffmann
  2018-08-21  7:46 ` Gerd Hoffmann
  4 siblings, 1 reply; 10+ messages in thread
From: Daniel P. Berrangé @ 2018-08-08 10:49 UTC (permalink / raw)
  To: qemu-devel; +Cc: libvir-list, Gerd Hoffmann, Daniel P. Berrangé

SDL1.2 was deprecated in the 2.12.0 release with:

  commit e52c6ba34149b4f39c3fd60e59ee32b809db2bfa
  Author: Daniel P. Berrange <berrange@redhat.com>
  Date:   Mon Jan 15 14:25:33 2018 +0000

    ui: deprecate use of SDL 1.2 in favour of 2.0 series

    The SDL 2.0 release was made in Aug, 2013:

      https://www.libsdl.org/release/

    That will soon be 4 + 1/2 years ago, which is enough time to consider
    the 2.0 series widely supported.

    Thus we deprecate the SDL 1.2 support, which will allow us to delete it
    in the last release of 2018. By this time, SDL 2.0 will be more than 5
    years old.

    Signed-off-by: Daniel P. Berrange <berrange@redhat.com>
    Reviewed-by: Marc-André Lureau <marcandre.lureau@redhat.com>
    Message-id: 20180115142533.24585-1-berrange@redhat.com
    Signed-off-by: Gerd Hoffmann <kraxel@redhat.com>

It is thus able to be removed in the 3.1.0 release.

Signed-off-by: Daniel P. Berrangé <berrange@redhat.com>
---
 configure              |   60 +--
 qemu-deprecated.texi   |    9 -
 ui/Makefile.objs       |    5 -
 ui/sdl.c               | 1027 ----------------------------------------
 ui/sdl_zoom.c          |   93 ----
 ui/sdl_zoom.h          |   25 -
 ui/sdl_zoom_template.h |  219 ---------
 7 files changed, 7 insertions(+), 1431 deletions(-)
 delete mode 100644 ui/sdl.c
 delete mode 100644 ui/sdl_zoom.c
 delete mode 100644 ui/sdl_zoom.h
 delete mode 100644 ui/sdl_zoom_template.h

diff --git a/configure b/configure
index 3510036e06..d4760c5478 100755
--- a/configure
+++ b/configure
@@ -344,7 +344,6 @@ docs=""
 fdt=""
 netmap="no"
 sdl=""
-sdlabi=""
 virtfs=""
 mpath=""
 vnc="yes"
@@ -563,7 +562,6 @@ query_pkg_config() {
     "${pkg_config_exe}" ${QEMU_PKG_CONFIG_FLAGS} "$@"
 }
 pkg_config=query_pkg_config
-sdl_config="${SDL_CONFIG-${cross_prefix}sdl-config}"
 sdl2_config="${SDL2_CONFIG-${cross_prefix}sdl2-config}"
 
 # If the user hasn't specified ARFLAGS, default to 'rv', just as make does.
@@ -1026,8 +1024,6 @@ for opt do
   ;;
   --enable-sdl) sdl="yes"
   ;;
-  --with-sdlabi=*) sdlabi="$optarg"
-  ;;
   --disable-qom-cast-debug) qom_cast_debug="no"
   ;;
   --enable-qom-cast-debug) qom_cast_debug="yes"
@@ -1643,7 +1639,6 @@ disabled with --disable-FEATURE, default is enabled if available:
   nettle          nettle cryptography support
   gcrypt          libgcrypt cryptography support
   sdl             SDL UI
-  --with-sdlabi     select preferred SDL ABI 1.2 or 2.0
   gtk             gtk UI
   vte             vte support for the gtk UI
   curses          curses UI
@@ -2904,37 +2899,11 @@ fi
 
 sdl_probe ()
 {
-  sdl_too_old=no
-  if test "$sdlabi" = ""; then
-      if $pkg_config --exists "sdl2"; then
-          sdlabi=2.0
-      elif $pkg_config --exists "sdl"; then
-          sdlabi=1.2
-      else
-          sdlabi=2.0
-      fi
-  fi
-
-  if test $sdlabi = "2.0"; then
-      sdl_config=$sdl2_config
-      sdlname=sdl2
-      sdlconfigname=sdl2_config
-  elif test $sdlabi = "1.2"; then
-      sdlname=sdl
-      sdlconfigname=sdl_config
-  else
-      error_exit "Unknown sdlabi $sdlabi, must be 1.2 or 2.0"
-  fi
-
-  if test "$(basename $sdl_config)" != $sdlconfigname && ! has ${sdl_config}; then
-    sdl_config=$sdlconfigname
-  fi
-
-  if $pkg_config $sdlname --exists; then
-    sdlconfig="$pkg_config $sdlname"
+  if $pkg_config sdl2 --exists; then
+    sdlconfig="$pkg_config sdl2"
     sdlversion=$($sdlconfig --modversion 2>/dev/null)
   elif has ${sdl_config}; then
-    sdlconfig="$sdl_config"
+    sdlconfig="$sdl2_config"
     sdlversion=$($sdlconfig --version)
   else
     if test "$sdl" = "yes" ; then
@@ -2956,8 +2925,8 @@ EOF
   sdl_cflags=$($sdlconfig --cflags 2>/dev/null)
   sdl_cflags="$sdl_cflags -Wno-undef"  # workaround 2.0.8 bug
   if test "$static" = "yes" ; then
-    if $pkg_config $sdlname --exists; then
-      sdl_libs=$($pkg_config $sdlname --static --libs 2>/dev/null)
+    if $pkg_config sdl2 --exists; then
+      sdl_libs=$($pkg_config sdl2 --static --libs 2>/dev/null)
     else
       sdl_libs=$($sdlconfig --static-libs 2>/dev/null)
     fi
@@ -2965,11 +2934,7 @@ EOF
     sdl_libs=$($sdlconfig --libs 2>/dev/null)
   fi
   if compile_prog "$sdl_cflags" "$sdl_libs" ; then
-    if test $(echo $sdlversion | sed 's/[^0-9]//g') -lt 121 ; then
-      sdl_too_old=yes
-    else
-      sdl=yes
-    fi
+    sdl=yes
 
     # static link with sdl ? (note: sdl.pc's --static --libs is broken)
     if test "$sdl" = "yes" -a "$static" = "yes" ; then
@@ -2985,7 +2950,7 @@ EOF
     fi # static link
   else # sdl not found
     if test "$sdl" = "yes" ; then
-      feature_not_found "sdl" "Install SDL devel"
+      feature_not_found "sdl" "Install SDL2 devel"
     fi
     sdl=no
   fi # sdl compile test
@@ -5983,16 +5948,6 @@ echo "VxHS block device $vxhs"
 echo "capstone          $capstone"
 echo "docker            $docker"
 
-if test "$sdl_too_old" = "yes"; then
-echo "-> Your SDL version is too old - please upgrade to have SDL support"
-fi
-
-if test "$sdlabi" = "1.2"; then
-    echo
-    echo "WARNING: Use of SDL 1.2 is deprecated and will be removed in"
-    echo "WARNING: future releases. Please switch to using SDL 2.0"
-fi
-
 if test "$supported_cpu" = "no"; then
     echo
     echo "WARNING: SUPPORT FOR THIS HOST CPU WILL GO AWAY IN FUTURE RELEASES!"
@@ -6195,7 +6150,6 @@ if test "$have_x11" = "yes" -a "$need_x11" = "yes"; then
 fi
 if test "$sdl" = "yes" ; then
   echo "CONFIG_SDL=m" >> $config_host_mak
-  echo "CONFIG_SDLABI=$sdlabi" >> $config_host_mak
   echo "SDL_CFLAGS=$sdl_cflags" >> $config_host_mak
   echo "SDL_LIBS=$sdl_libs" >> $config_host_mak
 fi
diff --git a/qemu-deprecated.texi b/qemu-deprecated.texi
index eb85733fcd..b101be0d02 100644
--- a/qemu-deprecated.texi
+++ b/qemu-deprecated.texi
@@ -17,15 +17,6 @@ they were first deprecated in the 2.10.0 release.
 What follows is a list of all features currently marked as
 deprecated.
 
-@section Build options
-
-@subsection SDL 1.2
-
-Previously QEMU has supported building against both SDL 1.2
-and 2.0 series APIs. Support for the SDL 1.2 builds will be
-discontinued, so maintainers should switch to using SDL 2.0,
-which is the default.
-
 @section System emulator command line arguments
 
 @subsection -no-kvm (since 1.3.0)
diff --git a/ui/Makefile.objs b/ui/Makefile.objs
index 00f6976c30..9b6f0c6b67 100644
--- a/ui/Makefile.objs
+++ b/ui/Makefile.objs
@@ -17,15 +17,10 @@ common-obj-$(call lnot,$(CONFIG_VNC)) += vnc-stubs.o
 
 # ui-sdl module
 common-obj-$(CONFIG_SDL) += sdl.mo
-ifeq ($(CONFIG_SDLABI),1.2)
-sdl.mo-objs := sdl.o sdl_zoom.o
-endif
-ifeq ($(CONFIG_SDLABI),2.0)
 sdl.mo-objs := sdl2.o sdl2-input.o sdl2-2d.o
 ifeq ($(CONFIG_OPENGL),y)
 sdl.mo-objs += sdl2-gl.o
 endif
-endif
 sdl.mo-cflags := $(SDL_CFLAGS)
 sdl.mo-libs := $(SDL_LIBS)
 
diff --git a/ui/sdl.c b/ui/sdl.c
deleted file mode 100644
index a5fd503c25..0000000000
--- a/ui/sdl.c
+++ /dev/null
@@ -1,1027 +0,0 @@
-/*
- * QEMU SDL display driver
- *
- * Copyright (c) 2003 Fabrice Bellard
- *
- * Permission is hereby granted, free of charge, to any person obtaining a copy
- * of this software and associated documentation files (the "Software"), to deal
- * in the Software without restriction, including without limitation the rights
- * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
- * copies of the Software, and to permit persons to whom the Software is
- * furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included in
- * all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
- * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
- * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
- * THE SOFTWARE.
- */
-
-/* Avoid compiler warning because macro is redefined in SDL_syswm.h. */
-#undef WIN32_LEAN_AND_MEAN
-
-#include "qemu/osdep.h"
-#include <SDL.h>
-#include <SDL_syswm.h>
-
-#include "qemu-common.h"
-#include "qemu/cutils.h"
-#include "ui/console.h"
-#include "ui/input.h"
-#include "sysemu/sysemu.h"
-#ifndef WIN32
-#include "x_keymap.h"
-#endif
-#include "sdl_zoom.h"
-
-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 */
-static int last_vm_running;
-static bool gui_saved_scaling;
-static int gui_saved_width;
-static int gui_saved_height;
-static int gui_saved_grab;
-static int gui_fullscreen;
-static int gui_key_modifier_pressed;
-static int gui_keysym;
-static int gui_grab_code = KMOD_LALT | KMOD_LCTRL;
-static uint8_t modifiers_state[256];
-static SDL_Cursor *sdl_cursor_normal;
-static SDL_Cursor *sdl_cursor_hidden;
-static int absolute_enabled = 0;
-static int guest_cursor = 0;
-static int guest_x, guest_y;
-static SDL_Cursor *guest_sprite = NULL;
-static SDL_PixelFormat host_format;
-static int scaling_active = 0;
-static Notifier mouse_mode_notifier;
-static int idle_counter;
-static const guint16 *keycode_map;
-static size_t keycode_maplen;
-
-#define SDL_REFRESH_INTERVAL_BUSY 10
-#define SDL_MAX_IDLE_COUNT (2 * GUI_REFRESH_INTERVAL_DEFAULT \
-                            / SDL_REFRESH_INTERVAL_BUSY + 1)
-
-#if 0
-#define DEBUG_SDL
-#endif
-
-static void sdl_update(DisplayChangeListener *dcl,
-                       int x, int y, int w, int h)
-{
-    SDL_Rect rec;
-    rec.x = x;
-    rec.y = y;
-    rec.w = w;
-    rec.h = h;
-
-#ifdef DEBUG_SDL
-    printf("SDL: Updating x=%d y=%d w=%d h=%d (scaling: %d)\n",
-           x, y, w, h, scaling_active);
-#endif
-
-    if (guest_screen) {
-        if (!scaling_active) {
-            SDL_BlitSurface(guest_screen, &rec, real_screen, &rec);
-        } else {
-            if (sdl_zoom_blit(guest_screen, real_screen, SMOOTHING_ON, &rec) < 0) {
-                fprintf(stderr, "Zoom blit failed\n");
-                exit(1);
-            }
-        }
-    } 
-    SDL_UpdateRect(real_screen, rec.x, rec.y, rec.w, rec.h);
-}
-
-static void do_sdl_resize(int width, int height, int bpp)
-{
-    int flags;
-    SDL_Surface *tmp_screen;
-
-#ifdef DEBUG_SDL
-    printf("SDL: Resizing to %dx%d bpp %d\n", width, height, bpp);
-#endif
-
-    flags = SDL_HWSURFACE | SDL_ASYNCBLIT | SDL_HWACCEL;
-    if (gui_fullscreen) {
-        flags |= SDL_FULLSCREEN;
-    } else {
-        flags |= SDL_RESIZABLE;
-    }
-    if (no_frame) {
-        flags |= SDL_NOFRAME;
-    }
-
-    tmp_screen = SDL_SetVideoMode(width, height, bpp, flags);
-    if (!real_screen) {
-        if (!tmp_screen) {
-            fprintf(stderr, "Could not open SDL display (%dx%dx%d): %s\n",
-                    width, height, bpp, SDL_GetError());
-            exit(1);
-        }
-    } else {
-        /*
-         * Revert to the previous video mode if the change of resizing or
-         * resolution failed.
-         */
-        if (!tmp_screen) {
-            fprintf(stderr, "Failed to set SDL display (%dx%dx%d): %s\n",
-                    width, height, bpp, SDL_GetError());
-            return;
-        }
-    }
-
-    real_screen = tmp_screen;
-}
-
-static void sdl_switch(DisplayChangeListener *dcl,
-                       DisplaySurface *new_surface)
-{
-    PixelFormat pf;
-
-    /* temporary hack: allows to call sdl_switch to handle scaling changes */
-    if (new_surface) {
-        surface = new_surface;
-    }
-    pf = qemu_pixelformat_from_pixman(surface->format);
-
-    if (!scaling_active) {
-        do_sdl_resize(surface_width(surface), surface_height(surface), 0);
-    } else if (real_screen->format->BitsPerPixel !=
-               surface_bits_per_pixel(surface)) {
-        do_sdl_resize(real_screen->w, real_screen->h,
-                      surface_bits_per_pixel(surface));
-    }
-
-    if (guest_screen != NULL) {
-        SDL_FreeSurface(guest_screen);
-    }
-
-#ifdef DEBUG_SDL
-    printf("SDL: Creating surface with masks: %08x %08x %08x %08x\n",
-           pf.rmask, pf.gmask, pf.bmask, pf.amask);
-#endif
-
-    guest_screen = SDL_CreateRGBSurfaceFrom
-        (surface_data(surface),
-         surface_width(surface), surface_height(surface),
-         surface_bits_per_pixel(surface), surface_stride(surface),
-         pf.rmask, pf.gmask,
-         pf.bmask, pf.amask);
-}
-
-static bool sdl_check_format(DisplayChangeListener *dcl,
-                             pixman_format_code_t format)
-{
-    /*
-     * We let SDL convert for us a few more formats than,
-     * the native ones. Thes are the ones I have tested.
-     */
-    return (format == PIXMAN_x8r8g8b8 ||
-            format == PIXMAN_b8g8r8x8 ||
-            format == PIXMAN_x1r5g5b5 ||
-            format == PIXMAN_r5g6b5);
-}
-
-/* generic keyboard conversion */
-
-#include "sdl_keysym.h"
-
-static kbd_layout_t *kbd_layout = NULL;
-
-static uint8_t sdl_keyevent_to_keycode_generic(const SDL_KeyboardEvent *ev)
-{
-    bool shift = modifiers_state[0x2a] || modifiers_state[0x36];
-    bool altgr = modifiers_state[0xb8];
-    bool ctrl  = modifiers_state[0x1d] || modifiers_state[0x9d];
-    int keysym;
-    /* workaround for X11+SDL bug with AltGR */
-    keysym = ev->keysym.sym;
-    if (keysym == 0 && ev->keysym.scancode == 113)
-        keysym = SDLK_MODE;
-    /* For Japanese key '\' and '|' */
-    if (keysym == 92 && ev->keysym.scancode == 133) {
-        keysym = 0xa5;
-    }
-    return keysym2scancode(kbd_layout, keysym,
-                           shift, altgr, ctrl) & SCANCODE_KEYMASK;
-}
-
-
-static const guint16 *sdl_get_keymap(size_t *maplen)
-{
-#if defined(WIN32)
-    *maplen = qemu_input_map_atset1_to_qcode_len;
-    return qemu_input_map_atset1_to_qcode;
-#else
-#if defined(SDL_VIDEO_DRIVER_X11)
-    SDL_SysWMinfo info;
-
-    SDL_VERSION(&info.version);
-    if (SDL_GetWMInfo(&info) > 0) {
-        return qemu_xkeymap_mapping_table(
-            info.info.x11.display, maplen);
-    }
-#endif
-    g_warning("Unsupported SDL video driver / platform.\n"
-              "Assuming Linux KBD scancodes, but probably wrong.\n"
-              "Please report to qemu-devel@nongnu.org\n"
-              "including the following information:\n"
-              "\n"
-              "  - Operating system\n"
-              "  - SDL video driver\n");
-    *maplen = qemu_input_map_xorgkbd_to_qcode_len;
-    return qemu_input_map_xorgkbd_to_qcode;
-#endif
-}
-
-static uint8_t sdl_keyevent_to_keycode(const SDL_KeyboardEvent *ev)
-{
-    int qcode;
-    if (!keycode_map) {
-        return 0;
-    }
-    if (ev->keysym.scancode > keycode_maplen) {
-        return 0;
-    }
-
-    qcode = keycode_map[ev->keysym.scancode];
-
-    if (qcode > qemu_input_map_qcode_to_qnum_len) {
-        return 0;
-    }
-
-    return qemu_input_map_qcode_to_qnum[qcode];
-}
-
-static void reset_keys(void)
-{
-    int i;
-    for(i = 0; i < 256; i++) {
-        if (modifiers_state[i]) {
-            qemu_input_event_send_key_number(dcl->con, i, false);
-            modifiers_state[i] = 0;
-        }
-    }
-}
-
-static void sdl_process_key(SDL_KeyboardEvent *ev)
-{
-    int keycode;
-
-    if (ev->keysym.sym == SDLK_PAUSE) {
-        /* specific case */
-        qemu_input_event_send_key_qcode(dcl->con, Q_KEY_CODE_PAUSE,
-                                        ev->type == SDL_KEYDOWN);
-        return;
-    }
-
-    if (kbd_layout) {
-        keycode = sdl_keyevent_to_keycode_generic(ev);
-    } else {
-        keycode = sdl_keyevent_to_keycode(ev);
-    }
-
-    switch(keycode) {
-    case 0x00:
-        /* sent when leaving window: reset the modifiers state */
-        reset_keys();
-        return;
-    case 0x2a:                          /* Left Shift */
-    case 0x36:                          /* Right Shift */
-    case 0x1d:                          /* Left CTRL */
-    case 0x9d:                          /* Right CTRL */
-    case 0x38:                          /* Left ALT */
-    case 0xb8:                         /* Right ALT */
-        if (ev->type == SDL_KEYUP)
-            modifiers_state[keycode] = 0;
-        else
-            modifiers_state[keycode] = 1;
-        break;
-#define QEMU_SDL_VERSION ((SDL_MAJOR_VERSION << 8) + SDL_MINOR_VERSION)
-#if QEMU_SDL_VERSION < 0x102 || QEMU_SDL_VERSION == 0x102 && SDL_PATCHLEVEL < 14
-        /* SDL versions before 1.2.14 don't support key up for caps/num lock. */
-    case 0x45: /* num lock */
-    case 0x3a: /* caps lock */
-        /* SDL does not send the key up event, so we generate it */
-        qemu_input_event_send_key_number(dcl->con, keycode, true);
-        qemu_input_event_send_key_number(dcl->con, keycode, false);
-        return;
-#endif
-    }
-
-    /* now send the key code */
-    qemu_input_event_send_key_number(dcl->con, keycode,
-                                     ev->type == SDL_KEYDOWN);
-}
-
-static void sdl_update_caption(void)
-{
-    char win_title[1024];
-    char icon_title[1024];
-    const char *status = "";
-
-    if (!runstate_is_running())
-        status = " [Stopped]";
-    else if (gui_grab) {
-        if (alt_grab)
-            status = " - Press Ctrl-Alt-Shift-G to exit mouse grab";
-        else if (ctrl_grab)
-            status = " - Press Right-Ctrl-G to exit mouse grab";
-        else
-            status = " - Press Ctrl-Alt-G to exit mouse grab";
-    }
-
-    if (qemu_name) {
-        snprintf(win_title, sizeof(win_title), "QEMU (%s)%s", qemu_name, status);
-        snprintf(icon_title, sizeof(icon_title), "QEMU (%s)", qemu_name);
-    } else {
-        snprintf(win_title, sizeof(win_title), "QEMU%s", status);
-        snprintf(icon_title, sizeof(icon_title), "QEMU");
-    }
-
-    SDL_WM_SetCaption(win_title, icon_title);
-}
-
-static void sdl_hide_cursor(void)
-{
-    if (!cursor_hide)
-        return;
-
-    if (qemu_input_is_absolute()) {
-        SDL_ShowCursor(1);
-        SDL_SetCursor(sdl_cursor_hidden);
-    } else {
-        SDL_ShowCursor(0);
-    }
-}
-
-static void sdl_show_cursor(void)
-{
-    if (!cursor_hide)
-        return;
-
-    if (!qemu_input_is_absolute() || !qemu_console_is_graphic(NULL)) {
-        SDL_ShowCursor(1);
-        if (guest_cursor &&
-                (gui_grab || qemu_input_is_absolute() || absolute_enabled))
-            SDL_SetCursor(guest_sprite);
-        else
-            SDL_SetCursor(sdl_cursor_normal);
-    }
-}
-
-static void sdl_grab_start(void)
-{
-    /*
-     * If the application is not active, do not try to enter grab state. This
-     * prevents 'SDL_WM_GrabInput(SDL_GRAB_ON)' from blocking all the
-     * application (SDL bug).
-     */
-    if (!(SDL_GetAppState() & SDL_APPINPUTFOCUS)) {
-        return;
-    }
-    if (guest_cursor) {
-        SDL_SetCursor(guest_sprite);
-        if (!qemu_input_is_absolute() && !absolute_enabled) {
-            SDL_WarpMouse(guest_x, guest_y);
-        }
-    } else
-        sdl_hide_cursor();
-    SDL_WM_GrabInput(SDL_GRAB_ON);
-    gui_grab = 1;
-    sdl_update_caption();
-}
-
-static void sdl_grab_end(void)
-{
-    SDL_WM_GrabInput(SDL_GRAB_OFF);
-    gui_grab = 0;
-    sdl_show_cursor();
-    sdl_update_caption();
-}
-
-static void absolute_mouse_grab(void)
-{
-    int mouse_x, mouse_y;
-
-    SDL_GetMouseState(&mouse_x, &mouse_y);
-    if (mouse_x > 0 && mouse_x < real_screen->w - 1 &&
-        mouse_y > 0 && mouse_y < real_screen->h - 1) {
-        sdl_grab_start();
-    }
-}
-
-static void sdl_mouse_mode_change(Notifier *notify, void *data)
-{
-    if (qemu_input_is_absolute()) {
-        if (!absolute_enabled) {
-            absolute_enabled = 1;
-            if (qemu_console_is_graphic(NULL)) {
-                absolute_mouse_grab();
-            }
-        }
-    } else if (absolute_enabled) {
-        if (!gui_fullscreen) {
-            sdl_grab_end();
-        }
-        absolute_enabled = 0;
-    }
-}
-
-static void sdl_send_mouse_event(int dx, int dy, int x, int y, int state)
-{
-    static uint32_t bmap[INPUT_BUTTON__MAX] = {
-        [INPUT_BUTTON_LEFT]       = SDL_BUTTON(SDL_BUTTON_LEFT),
-        [INPUT_BUTTON_MIDDLE]     = SDL_BUTTON(SDL_BUTTON_MIDDLE),
-        [INPUT_BUTTON_RIGHT]      = SDL_BUTTON(SDL_BUTTON_RIGHT),
-        [INPUT_BUTTON_WHEEL_UP]   = SDL_BUTTON(SDL_BUTTON_WHEELUP),
-        [INPUT_BUTTON_WHEEL_DOWN] = SDL_BUTTON(SDL_BUTTON_WHEELDOWN),
-    };
-    static uint32_t prev_state;
-
-    if (prev_state != state) {
-        qemu_input_update_buttons(dcl->con, bmap, prev_state, state);
-        prev_state = state;
-    }
-
-    if (qemu_input_is_absolute()) {
-        qemu_input_queue_abs(dcl->con, INPUT_AXIS_X, x,
-                             0, real_screen->w);
-        qemu_input_queue_abs(dcl->con, INPUT_AXIS_Y, y,
-                             0, real_screen->h);
-    } else {
-        if (guest_cursor) {
-            x -= guest_x;
-            y -= guest_y;
-            guest_x += x;
-            guest_y += y;
-            dx = x;
-            dy = y;
-        }
-        qemu_input_queue_rel(dcl->con, INPUT_AXIS_X, dx);
-        qemu_input_queue_rel(dcl->con, INPUT_AXIS_Y, dy);
-    }
-    qemu_input_event_sync();
-}
-
-static void sdl_scale(int width, int height)
-{
-    int bpp = real_screen->format->BitsPerPixel;
-
-#ifdef DEBUG_SDL
-    printf("SDL: Scaling to %dx%d bpp %d\n", width, height, bpp);
-#endif
-
-    if (bpp != 16 && bpp != 32) {
-        bpp = 32;
-    }
-    do_sdl_resize(width, height, bpp);
-    scaling_active = 1;
-}
-
-static void toggle_full_screen(void)
-{
-    int width = surface_width(surface);
-    int height = surface_height(surface);
-    int bpp = surface_bits_per_pixel(surface);
-
-    gui_fullscreen = !gui_fullscreen;
-    if (gui_fullscreen) {
-        gui_saved_width = real_screen->w;
-        gui_saved_height = real_screen->h;
-        gui_saved_scaling = scaling_active;
-
-        do_sdl_resize(width, height, bpp);
-        scaling_active = 0;
-
-        gui_saved_grab = gui_grab;
-        sdl_grab_start();
-    } else {
-        if (gui_saved_scaling) {
-            sdl_scale(gui_saved_width, gui_saved_height);
-        } else {
-            do_sdl_resize(width, height, 0);
-        }
-        if (!gui_saved_grab || !qemu_console_is_graphic(NULL)) {
-            sdl_grab_end();
-        }
-    }
-    graphic_hw_invalidate(NULL);
-    graphic_hw_update(NULL);
-}
-
-static void handle_keydown(SDL_Event *ev)
-{
-    int mod_state;
-    int keycode;
-
-    if (alt_grab) {
-        mod_state = (SDL_GetModState() & (gui_grab_code | KMOD_LSHIFT)) ==
-                    (gui_grab_code | KMOD_LSHIFT);
-    } else if (ctrl_grab) {
-        mod_state = (SDL_GetModState() & KMOD_RCTRL) == KMOD_RCTRL;
-    } else {
-        mod_state = (SDL_GetModState() & gui_grab_code) == gui_grab_code;
-    }
-    gui_key_modifier_pressed = mod_state;
-
-    if (gui_key_modifier_pressed) {
-        keycode = sdl_keyevent_to_keycode(&ev->key);
-        switch (keycode) {
-        case 0x21: /* 'f' key on US keyboard */
-            toggle_full_screen();
-            gui_keysym = 1;
-            break;
-        case 0x22: /* 'g' key */
-            if (!gui_grab) {
-                if (qemu_console_is_graphic(NULL)) {
-                    sdl_grab_start();
-                }
-            } else if (!gui_fullscreen) {
-                sdl_grab_end();
-            }
-            gui_keysym = 1;
-            break;
-        case 0x16: /* 'u' key on US keyboard */
-            if (scaling_active) {
-                scaling_active = 0;
-                sdl_switch(dcl, NULL);
-                graphic_hw_invalidate(NULL);
-                graphic_hw_update(NULL);
-            }
-            gui_keysym = 1;
-            break;
-        case 0x02 ... 0x0a: /* '1' to '9' keys */
-            /* Reset the modifiers sent to the current console */
-            reset_keys();
-            console_select(keycode - 0x02);
-            gui_keysym = 1;
-            if (gui_fullscreen) {
-                break;
-            }
-            if (!qemu_console_is_graphic(NULL)) {
-                /* release grab if going to a text console */
-                if (gui_grab) {
-                    sdl_grab_end();
-                } else if (absolute_enabled) {
-                    sdl_show_cursor();
-                }
-            } else if (absolute_enabled) {
-                sdl_hide_cursor();
-                absolute_mouse_grab();
-            }
-            break;
-        case 0x1b: /* '+' */
-        case 0x35: /* '-' */
-            if (!gui_fullscreen) {
-                int width = MAX(real_screen->w + (keycode == 0x1b ? 50 : -50),
-                                160);
-                int height = (surface_height(surface) * width) /
-                    surface_width(surface);
-
-                sdl_scale(width, height);
-                graphic_hw_invalidate(NULL);
-                graphic_hw_update(NULL);
-                gui_keysym = 1;
-            }
-        default:
-            break;
-        }
-    } else if (!qemu_console_is_graphic(NULL)) {
-        int keysym = 0;
-
-        if (ev->key.keysym.mod & (KMOD_LCTRL | KMOD_RCTRL)) {
-            switch (ev->key.keysym.sym) {
-            case SDLK_UP:
-                keysym = QEMU_KEY_CTRL_UP;
-                break;
-            case SDLK_DOWN:
-                keysym = QEMU_KEY_CTRL_DOWN;
-                break;
-            case SDLK_LEFT:
-                keysym = QEMU_KEY_CTRL_LEFT;
-                break;
-            case SDLK_RIGHT:
-                keysym = QEMU_KEY_CTRL_RIGHT;
-                break;
-            case SDLK_HOME:
-                keysym = QEMU_KEY_CTRL_HOME;
-                break;
-            case SDLK_END:
-                keysym = QEMU_KEY_CTRL_END;
-                break;
-            case SDLK_PAGEUP:
-                keysym = QEMU_KEY_CTRL_PAGEUP;
-                break;
-            case SDLK_PAGEDOWN:
-                keysym = QEMU_KEY_CTRL_PAGEDOWN;
-                break;
-            default:
-                break;
-            }
-        } else {
-            switch (ev->key.keysym.sym) {
-            case SDLK_UP:
-                keysym = QEMU_KEY_UP;
-                break;
-            case SDLK_DOWN:
-                keysym = QEMU_KEY_DOWN;
-                break;
-            case SDLK_LEFT:
-                keysym = QEMU_KEY_LEFT;
-                break;
-            case SDLK_RIGHT:
-                keysym = QEMU_KEY_RIGHT;
-                break;
-            case SDLK_HOME:
-                keysym = QEMU_KEY_HOME;
-                break;
-            case SDLK_END:
-                keysym = QEMU_KEY_END;
-                break;
-            case SDLK_PAGEUP:
-                keysym = QEMU_KEY_PAGEUP;
-                break;
-            case SDLK_PAGEDOWN:
-                keysym = QEMU_KEY_PAGEDOWN;
-                break;
-            case SDLK_BACKSPACE:
-                keysym = QEMU_KEY_BACKSPACE;
-                break;
-            case SDLK_DELETE:
-                keysym = QEMU_KEY_DELETE;
-                break;
-            default:
-                break;
-            }
-        }
-        if (keysym) {
-            kbd_put_keysym(keysym);
-        } else if (ev->key.keysym.unicode != 0) {
-            kbd_put_keysym(ev->key.keysym.unicode);
-        }
-    }
-    if (qemu_console_is_graphic(NULL) && !gui_keysym) {
-        sdl_process_key(&ev->key);
-    }
-}
-
-static void handle_keyup(SDL_Event *ev)
-{
-    int mod_state;
-
-    if (!alt_grab) {
-        mod_state = (ev->key.keysym.mod & gui_grab_code);
-    } else {
-        mod_state = (ev->key.keysym.mod & (gui_grab_code | KMOD_LSHIFT));
-    }
-    if (!mod_state && gui_key_modifier_pressed) {
-        gui_key_modifier_pressed = 0;
-        gui_keysym = 0;
-    }
-    if (qemu_console_is_graphic(NULL) && !gui_keysym) {
-        sdl_process_key(&ev->key);
-    }
-}
-
-static void handle_mousemotion(SDL_Event *ev)
-{
-    int max_x, max_y;
-
-    if (qemu_console_is_graphic(NULL) &&
-        (qemu_input_is_absolute() || absolute_enabled)) {
-        max_x = real_screen->w - 1;
-        max_y = real_screen->h - 1;
-        if (gui_grab && (ev->motion.x == 0 || ev->motion.y == 0 ||
-            ev->motion.x == max_x || ev->motion.y == max_y)) {
-            sdl_grab_end();
-        }
-        if (!gui_grab &&
-            (ev->motion.x > 0 && ev->motion.x < max_x &&
-            ev->motion.y > 0 && ev->motion.y < max_y)) {
-            sdl_grab_start();
-        }
-    }
-    if (gui_grab || qemu_input_is_absolute() || absolute_enabled) {
-        sdl_send_mouse_event(ev->motion.xrel, ev->motion.yrel,
-                             ev->motion.x, ev->motion.y, ev->motion.state);
-    }
-}
-
-static void handle_mousebutton(SDL_Event *ev)
-{
-    int buttonstate = SDL_GetMouseState(NULL, NULL);
-    SDL_MouseButtonEvent *bev;
-
-    if (!qemu_console_is_graphic(NULL)) {
-        return;
-    }
-
-    bev = &ev->button;
-    if (!gui_grab && !qemu_input_is_absolute()) {
-        if (ev->type == SDL_MOUSEBUTTONUP && bev->button == SDL_BUTTON_LEFT) {
-            /* start grabbing all events */
-            sdl_grab_start();
-        }
-    } else {
-        if (ev->type == SDL_MOUSEBUTTONDOWN) {
-            buttonstate |= SDL_BUTTON(bev->button);
-        } else {
-            buttonstate &= ~SDL_BUTTON(bev->button);
-        }
-        sdl_send_mouse_event(0, 0, bev->x, bev->y, buttonstate);
-    }
-}
-
-static void handle_activation(SDL_Event *ev)
-{
-#ifdef _WIN32
-    /* Disable grab if the window no longer has the focus
-     * (Windows-only workaround) */
-    if (gui_grab && ev->active.state == SDL_APPINPUTFOCUS &&
-        !ev->active.gain && !gui_fullscreen) {
-        sdl_grab_end();
-    }
-#endif
-    if (!gui_grab && ev->active.gain && qemu_console_is_graphic(NULL) &&
-        (qemu_input_is_absolute() || absolute_enabled)) {
-        absolute_mouse_grab();
-    }
-    if (ev->active.state & SDL_APPACTIVE) {
-        if (ev->active.gain) {
-            /* Back to default interval */
-            update_displaychangelistener(dcl, GUI_REFRESH_INTERVAL_DEFAULT);
-        } else {
-            /* Sleeping interval.  Not using the long default here as
-             * sdl_refresh does not only update the guest screen, but
-             * also checks for gui events. */
-            update_displaychangelistener(dcl, 500);
-        }
-    }
-}
-
-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()) {
-        last_vm_running = runstate_is_running();
-        sdl_update_caption();
-    }
-
-    graphic_hw_update(NULL);
-    SDL_EnableUNICODE(!qemu_console_is_graphic(NULL));
-
-    while (SDL_PollEvent(ev)) {
-        switch (ev->type) {
-        case SDL_VIDEOEXPOSE:
-            sdl_update(dcl, 0, 0, real_screen->w, real_screen->h);
-            break;
-        case SDL_KEYDOWN:
-            idle = 0;
-            handle_keydown(ev);
-            break;
-        case SDL_KEYUP:
-            idle = 0;
-            handle_keyup(ev);
-            break;
-        case SDL_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);
-            }
-            break;
-        case SDL_MOUSEMOTION:
-            idle = 0;
-            handle_mousemotion(ev);
-            break;
-        case SDL_MOUSEBUTTONDOWN:
-        case SDL_MOUSEBUTTONUP:
-            idle = 0;
-            handle_mousebutton(ev);
-            break;
-        case SDL_ACTIVEEVENT:
-            handle_activation(ev);
-            break;
-        case SDL_VIDEORESIZE:
-            sdl_scale(ev->resize.w, ev->resize.h);
-            graphic_hw_invalidate(NULL);
-            graphic_hw_update(NULL);
-            break;
-        default:
-            break;
-        }
-    }
-
-    if (idle) {
-        if (idle_counter < SDL_MAX_IDLE_COUNT) {
-            idle_counter++;
-            if (idle_counter >= SDL_MAX_IDLE_COUNT) {
-                dcl->update_interval = GUI_REFRESH_INTERVAL_DEFAULT;
-            }
-        }
-    } else {
-        idle_counter = 0;
-        dcl->update_interval = SDL_REFRESH_INTERVAL_BUSY;
-    }
-}
-
-static void sdl_mouse_warp(DisplayChangeListener *dcl,
-                           int x, int y, int on)
-{
-    if (on) {
-        if (!guest_cursor)
-            sdl_show_cursor();
-        if (gui_grab || qemu_input_is_absolute() || absolute_enabled) {
-            SDL_SetCursor(guest_sprite);
-            if (!qemu_input_is_absolute() && !absolute_enabled) {
-                SDL_WarpMouse(x, y);
-            }
-        }
-    } else if (gui_grab)
-        sdl_hide_cursor();
-    guest_cursor = on;
-    guest_x = x, guest_y = y;
-}
-
-static void sdl_mouse_define(DisplayChangeListener *dcl,
-                             QEMUCursor *c)
-{
-    uint8_t *image, *mask;
-    int bpl;
-
-    if (guest_sprite)
-        SDL_FreeCursor(guest_sprite);
-
-    bpl = cursor_get_mono_bpl(c);
-    image = g_malloc0(bpl * c->height);
-    mask  = g_malloc0(bpl * c->height);
-    cursor_get_mono_image(c, 0x000000, image);
-    cursor_get_mono_mask(c, 0, mask);
-    guest_sprite = SDL_CreateCursor(image, mask, c->width, c->height,
-                                    c->hot_x, c->hot_y);
-    g_free(image);
-    g_free(mask);
-
-    if (guest_cursor &&
-            (gui_grab || qemu_input_is_absolute() || absolute_enabled))
-        SDL_SetCursor(guest_sprite);
-}
-
-static void sdl_cleanup(void)
-{
-    if (guest_sprite)
-        SDL_FreeCursor(guest_sprite);
-    SDL_QuitSubSystem(SDL_INIT_VIDEO);
-}
-
-static const DisplayChangeListenerOps dcl_ops = {
-    .dpy_name             = "sdl",
-    .dpy_gfx_update       = sdl_update,
-    .dpy_gfx_switch       = sdl_switch,
-    .dpy_gfx_check_format = sdl_check_format,
-    .dpy_refresh          = sdl_refresh,
-    .dpy_mouse_set        = sdl_mouse_warp,
-    .dpy_cursor_define    = sdl_mouse_define,
-};
-
-static void sdl1_display_init(DisplayState *ds, DisplayOptions *o)
-{
-    int flags;
-    uint8_t data = 0;
-    const SDL_VideoInfo *vi;
-    SDL_SysWMinfo info;
-    char *filename;
-
-    assert(o->type == DISPLAY_TYPE_SDL);
-    opts = o;
-#if defined(__APPLE__)
-    /* always use generic keymaps */
-    if (!keyboard_layout)
-        keyboard_layout = "en-us";
-#endif
-    if(keyboard_layout) {
-        kbd_layout = init_keyboard_layout(name2keysym, keyboard_layout);
-        if (!kbd_layout)
-            exit(1);
-    }
-
-    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 (opts->has_full_screen && opts->full_screen) {
-        setenv("SDL_VIDEO_ALLOW_SCREENSAVER", "1", 0);
-    }
-#ifdef __linux__
-    /* on Linux, SDL may use fbcon|directfb|svgalib when run without
-     * accessible $DISPLAY to open X11 window.  This is often the case
-     * when qemu is run using sudo.  But in this case, and when actually
-     * run in X11 environment, SDL fights with X11 for the video card,
-     * making current display unavailable, often until reboot.
-     * So make x11 the default SDL video driver if this variable is unset.
-     * This is a bit hackish but saves us from bigger problem.
-     * Maybe it's a good idea to fix this in SDL instead.
-     */
-    setenv("SDL_VIDEODRIVER", "x11", 0);
-#endif
-
-    /* Enable normal up/down events for Caps-Lock and Num-Lock keys.
-     * This requires SDL >= 1.2.14. */
-    setenv("SDL_DISABLE_LOCK_KEYS", "1", 1);
-
-    flags = SDL_INIT_VIDEO | SDL_INIT_NOPARACHUTE;
-    if (SDL_Init (flags)) {
-        fprintf(stderr, "Could not initialize SDL(%s) - exiting\n",
-                SDL_GetError());
-        exit(1);
-    }
-    vi = SDL_GetVideoInfo();
-    host_format = *(vi->vfmt);
-
-    keycode_map = sdl_get_keymap(&keycode_maplen);
-
-    /* Load a 32x32x4 image. White pixels are transparent. */
-    filename = qemu_find_file(QEMU_FILE_TYPE_BIOS, "qemu-icon.bmp");
-    if (filename) {
-        SDL_Surface *image = SDL_LoadBMP(filename);
-        if (image) {
-            uint32_t colorkey = SDL_MapRGB(image->format, 255, 255, 255);
-            SDL_SetColorKey(image, SDL_SRCCOLORKEY, colorkey);
-            SDL_WM_SetIcon(image, NULL);
-        }
-        g_free(filename);
-    }
-
-    if (opts->has_full_screen && opts->full_screen) {
-        gui_fullscreen = 1;
-        sdl_grab_start();
-    }
-
-    dcl = g_new0(DisplayChangeListener, 1);
-    dcl->ops = &dcl_ops;
-    register_displaychangelistener(dcl);
-
-    mouse_mode_notifier.notify = sdl_mouse_mode_change;
-    qemu_add_mouse_mode_change_notifier(&mouse_mode_notifier);
-
-    sdl_update_caption();
-    SDL_EnableKeyRepeat(250, 50);
-    gui_grab = 0;
-
-    sdl_cursor_hidden = SDL_CreateCursor(&data, &data, 8, 1, 0, 0);
-    sdl_cursor_normal = SDL_GetCursor();
-
-    memset(&info, 0, sizeof(info));
-    SDL_VERSION(&info.version);
-    if (SDL_GetWMInfo(&info)) {
-        int i;
-        for (i = 0; ; i++) {
-            /* All consoles share the same window */
-            QemuConsole *con = qemu_console_lookup_by_index(i);
-            if (con) {
-#if defined(SDL_VIDEO_DRIVER_X11)
-                qemu_console_set_window_id(con, info.info.x11.wmwindow);
-#elif defined(SDL_VIDEO_DRIVER_NANOX) || \
-      defined(SDL_VIDEO_DRIVER_WINDIB) || defined(SDL_VIDEO_DRIVER_DDRAW) || \
-      defined(SDL_VIDEO_DRIVER_GAPI) || \
-      defined(SDL_VIDEO_DRIVER_RISCOS)
-                qemu_console_set_window_id(con, (int) (uintptr_t) info.window);
-#else
-                qemu_console_set_window_id(con, info.data);
-#endif
-            } else {
-                break;
-            }
-        }
-    }
-
-    atexit(sdl_cleanup);
-}
-
-static QemuDisplay qemu_display_sdl1 = {
-    .type       = DISPLAY_TYPE_SDL,
-    .init       = sdl1_display_init,
-};
-
-static void register_sdl1(void)
-{
-    qemu_display_register(&qemu_display_sdl1);
-}
-
-type_init(register_sdl1);
diff --git a/ui/sdl_zoom.c b/ui/sdl_zoom.c
deleted file mode 100644
index b96196bac5..0000000000
--- a/ui/sdl_zoom.c
+++ /dev/null
@@ -1,93 +0,0 @@
-/*
- * SDL_zoom - surface scaling
- * 
- * Copyright (c) 2009 Citrix Systems, Inc.
- *
- * Derived from: SDL_rotozoom,  LGPL (c) A. Schiffler from the SDL_gfx library.
- * Modifications by Stefano Stabellini.
- *
- * This work is licensed under the terms of the GNU GPL version 2.
- * See the COPYING file in the top-level directory.
- *
- */
-
-#include "qemu/osdep.h"
-#include "sdl_zoom.h"
-
-static void sdl_zoom_rgb16(SDL_Surface *src, SDL_Surface *dst, int smooth,
-                           SDL_Rect *dst_rect);
-static void sdl_zoom_rgb32(SDL_Surface *src, SDL_Surface *dst, int smooth,
-                           SDL_Rect *dst_rect);
-
-#define BPP 32
-#include  "sdl_zoom_template.h"
-#undef BPP
-#define BPP 16
-#include  "sdl_zoom_template.h"
-#undef BPP
-
-int sdl_zoom_blit(SDL_Surface *src_sfc, SDL_Surface *dst_sfc, int smooth,
-                  SDL_Rect *in_rect)
-{
-    SDL_Rect zoom, src_rect;
-    int extra;
-
-    /* Grow the size of the modified rectangle to avoid edge artefacts */
-    src_rect.x = (in_rect->x > 0) ? (in_rect->x - 1) : 0;
-    src_rect.y = (in_rect->y > 0) ? (in_rect->y - 1) : 0;
-
-    src_rect.w = in_rect->w + 1;
-    if (src_rect.x + src_rect.w > src_sfc->w)
-        src_rect.w = src_sfc->w - src_rect.x;
-
-    src_rect.h = in_rect->h + 1;
-    if (src_rect.y + src_rect.h > src_sfc->h)
-        src_rect.h = src_sfc->h - src_rect.y;
-
-    /* (x,y) : round down */
-    zoom.x = (int)(((float)(src_rect.x * dst_sfc->w)) / (float)(src_sfc->w));
-    zoom.y = (int)(((float)(src_rect.y * dst_sfc->h)) / (float)(src_sfc->h));
-
-    /* (w,h) : round up */
-    zoom.w = (int)( ((double)((src_rect.w * dst_sfc->w) + (src_sfc->w - 1))) /
-                     (double)(src_sfc->w));
-
-    zoom.h = (int)( ((double)((src_rect.h * dst_sfc->h) + (src_sfc->h - 1))) /
-                     (double)(src_sfc->h));
-
-    /* Account for any (x,y) rounding by adding one-source-pixel's worth
-     * of destination pixels and then edge checking.
-     */
-
-    extra = ((dst_sfc->w-1) / src_sfc->w) + 1;
-
-    if ((zoom.x + zoom.w) < (dst_sfc->w - extra))
-        zoom.w += extra;
-    else
-        zoom.w = dst_sfc->w - zoom.x;
-
-    extra = ((dst_sfc->h-1) / src_sfc->h) + 1;
-
-    if ((zoom.y + zoom.h) < (dst_sfc->h - extra))
-        zoom.h += extra;
-    else
-        zoom.h = dst_sfc->h - zoom.y;
-
-    /* The rectangle (zoom.x, zoom.y, zoom.w, zoom.h) is the area on the
-     * destination surface that needs to be updated.
-     */
-    if (src_sfc->format->BitsPerPixel == 32)
-        sdl_zoom_rgb32(src_sfc, dst_sfc, smooth, &zoom);
-    else if (src_sfc->format->BitsPerPixel == 16)
-        sdl_zoom_rgb16(src_sfc, dst_sfc, smooth, &zoom);
-    else {
-        fprintf(stderr, "pixel format not supported\n");
-        return -1;
-    }
-
-    /* Return the rectangle of the update to the caller */
-    *in_rect = zoom;
-
-    return 0;
-}
-
diff --git a/ui/sdl_zoom.h b/ui/sdl_zoom.h
deleted file mode 100644
index 39696ddb08..0000000000
--- a/ui/sdl_zoom.h
+++ /dev/null
@@ -1,25 +0,0 @@
-/*
- * SDL_zoom - surface scaling
- * 
- * Copyright (c) 2009 Citrix Systems, Inc.
- *
- * Derived from: SDL_rotozoom,  LGPL (c) A. Schiffler from the SDL_gfx library.
- * Modifications by Stefano Stabellini.
- *
- * This work is licensed under the terms of the GNU GPL version 2.
- * See the COPYING file in the top-level directory.
- *
- */
-
-#ifndef SDL_ZOOM_H
-#define SDL_ZOOM_H
-
-#include <SDL.h>
-
-#define SMOOTHING_OFF		0
-#define SMOOTHING_ON		1
-
-int sdl_zoom_blit(SDL_Surface *src_sfc, SDL_Surface *dst_sfc,
-                  int smooth, SDL_Rect *src_rect);
-
-#endif /* SDL_ZOOM_H */
diff --git a/ui/sdl_zoom_template.h b/ui/sdl_zoom_template.h
deleted file mode 100644
index 6a424adfb4..0000000000
--- a/ui/sdl_zoom_template.h
+++ /dev/null
@@ -1,219 +0,0 @@
-/*
- * SDL_zoom_template - surface scaling
- * 
- * Copyright (c) 2009 Citrix Systems, Inc.
- *
- * Derived from: SDL_rotozoom,  LGPL (c) A. Schiffler from the SDL_gfx library.
- * Modifications by Stefano Stabellini.
- *
- * This work is licensed under the terms of the GNU GPL version 2.
- * See the COPYING file in the top-level directory.
- *
- */
-
-#if BPP == 16
-#define SDL_TYPE Uint16
-#elif BPP == 32
-#define SDL_TYPE Uint32
-#else
-#error unsupport depth
-#endif
-
-/*  
- *  Simple helper functions to make the code looks nicer
- *
- *  Assume spf = source SDL_PixelFormat
- *         dpf = dest SDL_PixelFormat
- *
- */
-#define getRed(color)   (((color) & spf->Rmask) >> spf->Rshift)
-#define getGreen(color) (((color) & spf->Gmask) >> spf->Gshift)
-#define getBlue(color)  (((color) & spf->Bmask) >> spf->Bshift)
-#define getAlpha(color) (((color) & spf->Amask) >> spf->Ashift)
-
-#define setRed(r, pcolor) do { \
-    *pcolor = ((*pcolor) & (~(dpf->Rmask))) + \
-              (((r) & (dpf->Rmask >> dpf->Rshift)) << dpf->Rshift); \
-} while (0)
-
-#define setGreen(g, pcolor) do { \
-    *pcolor = ((*pcolor) & (~(dpf->Gmask))) + \
-              (((g) & (dpf->Gmask >> dpf->Gshift)) << dpf->Gshift); \
-} while (0)
-
-#define setBlue(b, pcolor) do { \
-    *pcolor = ((*pcolor) & (~(dpf->Bmask))) + \
-              (((b) & (dpf->Bmask >> dpf->Bshift)) << dpf->Bshift); \
-} while (0)
-
-#define setAlpha(a, pcolor) do { \
-    *pcolor = ((*pcolor) & (~(dpf->Amask))) + \
-              (((a) & (dpf->Amask >> dpf->Ashift)) << dpf->Ashift); \
-} while (0)
-
-static void glue(sdl_zoom_rgb, BPP)(SDL_Surface *src, SDL_Surface *dst, int smooth,
-                                   SDL_Rect *dst_rect)
-{
-    int x, y, sx, sy, *sax, *say, *csax, *csay, csx, csy, ex, ey, t1, t2, sstep, sstep_jump;
-    SDL_TYPE *c00, *c01, *c10, *c11, *sp, *csp, *dp;
-    int d_gap;
-    SDL_PixelFormat *spf = src->format;
-    SDL_PixelFormat *dpf = dst->format;
-
-    if (smooth) { 
-        /* For interpolation: assume source dimension is one pixel.
-         * Smaller here to avoid overflow on right and bottom edge.
-         */
-        sx = (int) (65536.0 * (float) (src->w - 1) / (float) dst->w);
-        sy = (int) (65536.0 * (float) (src->h - 1) / (float) dst->h);
-    } else {
-        sx = (int) (65536.0 * (float) src->w / (float) dst->w);
-        sy = (int) (65536.0 * (float) src->h / (float) dst->h);
-    }
-
-    sax = g_new(int, dst->w + 1);
-    say = g_new(int, dst->h + 1);
-
-    sp = csp = (SDL_TYPE *) src->pixels;
-    dp = (SDL_TYPE *) (dst->pixels + dst_rect->y * dst->pitch +
-                       dst_rect->x * dst->format->BytesPerPixel);
-
-    csx = 0;
-    csax = sax;
-    for (x = 0; x <= dst->w; x++) {
-        *csax = csx;
-        csax++;
-        csx &= 0xffff;
-        csx += sx;
-    }
-    csy = 0;
-    csay = say;
-    for (y = 0; y <= dst->h; y++) {
-        *csay = csy;
-        csay++;
-        csy &= 0xffff;
-        csy += sy;
-    }
-
-    d_gap = dst->pitch - dst_rect->w * dst->format->BytesPerPixel;
-
-    if (smooth) {
-        csay = say;
-        for (y = 0; y < dst_rect->y; y++) {
-            csay++;
-            sstep = (*csay >> 16) * src->pitch;
-            csp = (SDL_TYPE *) ((Uint8 *) csp + sstep);
-        }
-
-        /* Calculate sstep_jump */
-        csax = sax; 
-        sstep_jump = 0;
-        for (x = 0; x < dst_rect->x; x++) {
-            csax++; 
-            sstep = (*csax >> 16);
-            sstep_jump += sstep;
-        }
-
-        for (y = 0; y < dst_rect->h ; y++) {
-            /* Setup colour source pointers */
-            c00 = csp + sstep_jump;
-            c01 = c00 + 1;
-            c10 = (SDL_TYPE *) ((Uint8 *) csp + src->pitch) + sstep_jump;
-            c11 = c10 + 1;
-            csax = sax + dst_rect->x; 
-
-            for (x = 0; x < dst_rect->w; x++) {
-
-                /* Interpolate colours */
-                ex = (*csax & 0xffff);
-                ey = (*csay & 0xffff);
-                t1 = ((((getRed(*c01) - getRed(*c00)) * ex) >> 16) +
-                     getRed(*c00)) & (dpf->Rmask >> dpf->Rshift);
-                t2 = ((((getRed(*c11) - getRed(*c10)) * ex) >> 16) +
-                     getRed(*c10)) & (dpf->Rmask >> dpf->Rshift);
-                setRed((((t2 - t1) * ey) >> 16) + t1, dp);
-                t1 = ((((getGreen(*c01) - getGreen(*c00)) * ex) >> 16) +
-                     getGreen(*c00)) & (dpf->Gmask >> dpf->Gshift);
-                t2 = ((((getGreen(*c11) - getGreen(*c10)) * ex) >> 16) +
-                     getGreen(*c10)) & (dpf->Gmask >> dpf->Gshift);
-                setGreen((((t2 - t1) * ey) >> 16) + t1, dp);
-                t1 = ((((getBlue(*c01) - getBlue(*c00)) * ex) >> 16) +
-                     getBlue(*c00)) & (dpf->Bmask >> dpf->Bshift);
-                t2 = ((((getBlue(*c11) - getBlue(*c10)) * ex) >> 16) +
-                     getBlue(*c10)) & (dpf->Bmask >> dpf->Bshift);
-                setBlue((((t2 - t1) * ey) >> 16) + t1, dp);
-                t1 = ((((getAlpha(*c01) - getAlpha(*c00)) * ex) >> 16) +
-                     getAlpha(*c00)) & (dpf->Amask >> dpf->Ashift);
-                t2 = ((((getAlpha(*c11) - getAlpha(*c10)) * ex) >> 16) +
-                     getAlpha(*c10)) & (dpf->Amask >> dpf->Ashift);
-                setAlpha((((t2 - t1) * ey) >> 16) + t1, dp); 
-
-                /* Advance source pointers */
-                csax++; 
-                sstep = (*csax >> 16);
-                c00 += sstep;
-                c01 += sstep;
-                c10 += sstep;
-                c11 += sstep;
-                /* Advance destination pointer */
-                dp++;
-            }
-            /* Advance source pointer */
-            csay++;
-            csp = (SDL_TYPE *) ((Uint8 *) csp + (*csay >> 16) * src->pitch);
-            /* Advance destination pointers */
-            dp = (SDL_TYPE *) ((Uint8 *) dp + d_gap);
-        }
-
-
-    } else {
-        csay = say;
-
-        for (y = 0; y < dst_rect->y; y++) {
-            csay++;
-            sstep = (*csay >> 16) * src->pitch;
-            csp = (SDL_TYPE *) ((Uint8 *) csp + sstep);
-        }
-
-        /* Calculate sstep_jump */
-        csax = sax; 
-        sstep_jump = 0;
-        for (x = 0; x < dst_rect->x; x++) {
-            csax++; 
-            sstep = (*csax >> 16);
-            sstep_jump += sstep;
-        }
-
-        for (y = 0 ; y < dst_rect->h ; y++) {
-            sp = csp + sstep_jump;
-            csax = sax + dst_rect->x;
-
-            for (x = 0; x < dst_rect->w; x++) {
-
-                /* Draw */
-                *dp = *sp;
-
-                /* Advance source pointers */
-                csax++;
-                sstep = (*csax >> 16);
-                sp += sstep;
-
-                /* Advance destination pointer */
-                dp++;
-            }
-            /* Advance source pointers */
-            csay++;
-            sstep = (*csay >> 16) * src->pitch;
-            csp = (SDL_TYPE *) ((Uint8 *) csp + sstep);
-
-            /* Advance destination pointer */
-            dp = (SDL_TYPE *) ((Uint8 *) dp + d_gap);
-        }
-    }
-
-    g_free(sax);
-    g_free(say);
-}
-
-#undef SDL_TYPE
-
-- 
2.17.1

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

* Re: [Qemu-devel] [PATCH 0/3] ui: remove deprecated UI frontends
  2018-08-08 10:49 [Qemu-devel] [PATCH 0/3] ui: remove deprecated UI frontends Daniel P. Berrangé
                   ` (2 preceding siblings ...)
  2018-08-08 10:49 ` [Qemu-devel] [PATCH 3/3] ui: remove support for SDL1.2 in favour of SDL2 Daniel P. Berrangé
@ 2018-08-08 11:24 ` Gerd Hoffmann
  2018-08-08 12:58   ` Daniel P. Berrangé
  2018-08-21  7:46 ` Gerd Hoffmann
  4 siblings, 1 reply; 10+ messages in thread
From: Gerd Hoffmann @ 2018-08-08 11:24 UTC (permalink / raw)
  To: Daniel P. Berrangé; +Cc: qemu-devel, libvir-list

On Wed, Aug 08, 2018 at 11:49:27AM +0100, Daniel P. Berrangé wrote:
> We deprecated GTK2 and SDL1.2 in the 2.12.0 release, so they are able to
> be removed entirely in the 3.1.0 release. The min GTK3 version can also
> be bumped up based the distros we aim to support.

Yes for gtk2, finally the #ifdef mess is gone, yay!

Not so sure for sdl1, that one was more controversial and sdl2
regression fixes are still tickling in (although it seems we killed most
of them meanwhile).  Also due to sdl1 being a separate source file
anyway the maintanance costs are not that high.

Comments?

When actually removing sdl1 the -no-frame cmd line switch can go too as
sdl1 is the only user.

cheers,
  Gerd

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

* Re: [Qemu-devel] [PATCH 0/3] ui: remove deprecated UI frontends
  2018-08-08 11:24 ` [Qemu-devel] [PATCH 0/3] ui: remove deprecated UI frontends Gerd Hoffmann
@ 2018-08-08 12:58   ` Daniel P. Berrangé
  0 siblings, 0 replies; 10+ messages in thread
From: Daniel P. Berrangé @ 2018-08-08 12:58 UTC (permalink / raw)
  To: Gerd Hoffmann; +Cc: qemu-devel, libvir-list

On Wed, Aug 08, 2018 at 01:24:09PM +0200, Gerd Hoffmann wrote:
> On Wed, Aug 08, 2018 at 11:49:27AM +0100, Daniel P. Berrangé wrote:
> > We deprecated GTK2 and SDL1.2 in the 2.12.0 release, so they are able to
> > be removed entirely in the 3.1.0 release. The min GTK3 version can also
> > be bumped up based the distros we aim to support.
> 
> Yes for gtk2, finally the #ifdef mess is gone, yay!
> 
> Not so sure for sdl1, that one was more controversial and sdl2
> regression fixes are still tickling in (although it seems we killed most
> of them meanwhile).  Also due to sdl1 being a separate source file
> anyway the maintanance costs are not that high.
> 
> Comments?

There were some regressions wrt SDL2, but I don't think there's any
major problems still missing. If there are new problems reported, we
still have the entire of the 3.1.0 dev cycle to address them before
the release which removes it.

Even if code is separate, it still has a maint cost in testing and impacts
any refactoring we do, such as that around keymap handling which is a
non-trivial cost for something that is increasingly unused, since we
default to SDL2 ABI for many releases now. At least GTK2 still had bug-fix
releases for any security problems or serious bugs, but SDL1 has received
no releases at all upstream since 2013

So I don't see any compelling reason to keep it alive given, and enough
downside given that it has been dead in its upstream community for years. 

Regards,
Daniel
-- 
|: https://berrange.com      -o-    https://www.flickr.com/photos/dberrange :|
|: https://libvirt.org         -o-            https://fstop138.berrange.com :|
|: https://entangle-photo.org    -o-    https://www.instagram.com/dberrange :|

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

* Re: [Qemu-devel] [PATCH 3/3] ui: remove support for SDL1.2 in favour of SDL2
  2018-08-08 10:49 ` [Qemu-devel] [PATCH 3/3] ui: remove support for SDL1.2 in favour of SDL2 Daniel P. Berrangé
@ 2018-08-08 13:51   ` Peter Maydell
  2018-08-08 13:55     ` Daniel P. Berrangé
  2018-08-22  9:53     ` Daniel P. Berrangé
  0 siblings, 2 replies; 10+ messages in thread
From: Peter Maydell @ 2018-08-08 13:51 UTC (permalink / raw)
  To: Daniel P. Berrangé
  Cc: QEMU Developers, Libvirt, Gerd Hoffmann, Fam Zheng

On 8 August 2018 at 11:49, Daniel P. Berrangé <berrange@redhat.com> wrote:
> SDL1.2 was deprecated in the 2.12.0 release with:
>
>   commit e52c6ba34149b4f39c3fd60e59ee32b809db2bfa
>   Author: Daniel P. Berrange <berrange@redhat.com>
>   Date:   Mon Jan 15 14:25:33 2018 +0000
>
>     ui: deprecate use of SDL 1.2 in favour of 2.0 series
>
>     The SDL 2.0 release was made in Aug, 2013:
>
>       https://www.libsdl.org/release/
>
>     That will soon be 4 + 1/2 years ago, which is enough time to consider
>     the 2.0 series widely supported.
>
>     Thus we deprecate the SDL 1.2 support, which will allow us to delete it
>     in the last release of 2018. By this time, SDL 2.0 will be more than 5
>     years old.
>
>     Signed-off-by: Daniel P. Berrange <berrange@redhat.com>
>     Reviewed-by: Marc-André Lureau <marcandre.lureau@redhat.com>
>     Message-id: 20180115142533.24585-1-berrange@redhat.com
>     Signed-off-by: Gerd Hoffmann <kraxel@redhat.com>
>
> It is thus able to be removed in the 3.1.0 release.

At least one of the BSD VMs in tests/vm/ is still using SDL1.2.
I think we should update that VM before we drop SDL1.2 support.

(This is probably just a matter of updating the VM image that
is currently stored on patchew somewhere. It would also be
nice if our test infra here had a mechanism for regenerating
that VM image from scratch rather than just being "here's a
disk image blob...")

thanks
-- PMM

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

* Re: [Qemu-devel] [PATCH 3/3] ui: remove support for SDL1.2 in favour of SDL2
  2018-08-08 13:51   ` Peter Maydell
@ 2018-08-08 13:55     ` Daniel P. Berrangé
  2018-08-22  9:53     ` Daniel P. Berrangé
  1 sibling, 0 replies; 10+ messages in thread
From: Daniel P. Berrangé @ 2018-08-08 13:55 UTC (permalink / raw)
  To: Peter Maydell; +Cc: QEMU Developers, Libvirt, Gerd Hoffmann, Fam Zheng

On Wed, Aug 08, 2018 at 02:51:01PM +0100, Peter Maydell wrote:
> On 8 August 2018 at 11:49, Daniel P. Berrangé <berrange@redhat.com> wrote:
> > SDL1.2 was deprecated in the 2.12.0 release with:
> >
> >   commit e52c6ba34149b4f39c3fd60e59ee32b809db2bfa
> >   Author: Daniel P. Berrange <berrange@redhat.com>
> >   Date:   Mon Jan 15 14:25:33 2018 +0000
> >
> >     ui: deprecate use of SDL 1.2 in favour of 2.0 series
> >
> >     The SDL 2.0 release was made in Aug, 2013:
> >
> >       https://www.libsdl.org/release/
> >
> >     That will soon be 4 + 1/2 years ago, which is enough time to consider
> >     the 2.0 series widely supported.
> >
> >     Thus we deprecate the SDL 1.2 support, which will allow us to delete it
> >     in the last release of 2018. By this time, SDL 2.0 will be more than 5
> >     years old.
> >
> >     Signed-off-by: Daniel P. Berrange <berrange@redhat.com>
> >     Reviewed-by: Marc-André Lureau <marcandre.lureau@redhat.com>
> >     Message-id: 20180115142533.24585-1-berrange@redhat.com
> >     Signed-off-by: Gerd Hoffmann <kraxel@redhat.com>
> >
> > It is thus able to be removed in the 3.1.0 release.
> 
> At least one of the BSD VMs in tests/vm/ is still using SDL1.2.
> I think we should update that VM before we drop SDL1.2 support.
> 
> (This is probably just a matter of updating the VM image that
> is currently stored on patchew somewhere. It would also be
> nice if our test infra here had a mechanism for regenerating
> that VM image from scratch rather than just being "here's a
> disk image blob...")

Oh, I can no idea the images used SDL1, because they're totally opaque
to our git repo :-( Just an external blob with no info about how they
were built. Preferrably we'd at least have a manifest for their contents
in git, even better if there's something to automate building them.

According to repology.org/metapackage/sdl2/versions all the *BSDs have
SDL2 available to use at least.

Regards,
Daniel
-- 
|: https://berrange.com      -o-    https://www.flickr.com/photos/dberrange :|
|: https://libvirt.org         -o-            https://fstop138.berrange.com :|
|: https://entangle-photo.org    -o-    https://www.instagram.com/dberrange :|

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

* Re: [Qemu-devel] [PATCH 0/3] ui: remove deprecated UI frontends
  2018-08-08 10:49 [Qemu-devel] [PATCH 0/3] ui: remove deprecated UI frontends Daniel P. Berrangé
                   ` (3 preceding siblings ...)
  2018-08-08 11:24 ` [Qemu-devel] [PATCH 0/3] ui: remove deprecated UI frontends Gerd Hoffmann
@ 2018-08-21  7:46 ` Gerd Hoffmann
  4 siblings, 0 replies; 10+ messages in thread
From: Gerd Hoffmann @ 2018-08-21  7:46 UTC (permalink / raw)
  To: Daniel P. Berrangé; +Cc: qemu-devel, libvir-list

On Wed, Aug 08, 2018 at 11:49:27AM +0100, Daniel P. Berrangé wrote:
> We deprecated GTK2 and SDL1.2 in the 2.12.0 release, so they are able to
> be removed entirely in the 3.1.0 release. The min GTK3 version can also
> be bumped up based the distros we aim to support.

Doesn't apply any more.
Can you rebase and resend?

thanks,
  Gerd

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

* Re: [Qemu-devel] [PATCH 3/3] ui: remove support for SDL1.2 in favour of SDL2
  2018-08-08 13:51   ` Peter Maydell
  2018-08-08 13:55     ` Daniel P. Berrangé
@ 2018-08-22  9:53     ` Daniel P. Berrangé
  1 sibling, 0 replies; 10+ messages in thread
From: Daniel P. Berrangé @ 2018-08-22  9:53 UTC (permalink / raw)
  To: Peter Maydell; +Cc: QEMU Developers, Libvirt, Gerd Hoffmann, Fam Zheng

On Wed, Aug 08, 2018 at 02:51:01PM +0100, Peter Maydell wrote:
> On 8 August 2018 at 11:49, Daniel P. Berrangé <berrange@redhat.com> wrote:
> > SDL1.2 was deprecated in the 2.12.0 release with:
> >
> >   commit e52c6ba34149b4f39c3fd60e59ee32b809db2bfa
> >   Author: Daniel P. Berrange <berrange@redhat.com>
> >   Date:   Mon Jan 15 14:25:33 2018 +0000
> >
> >     ui: deprecate use of SDL 1.2 in favour of 2.0 series
> >
> >     The SDL 2.0 release was made in Aug, 2013:
> >
> >       https://www.libsdl.org/release/
> >
> >     That will soon be 4 + 1/2 years ago, which is enough time to consider
> >     the 2.0 series widely supported.
> >
> >     Thus we deprecate the SDL 1.2 support, which will allow us to delete it
> >     in the last release of 2018. By this time, SDL 2.0 will be more than 5
> >     years old.
> >
> >     Signed-off-by: Daniel P. Berrange <berrange@redhat.com>
> >     Reviewed-by: Marc-André Lureau <marcandre.lureau@redhat.com>
> >     Message-id: 20180115142533.24585-1-berrange@redhat.com
> >     Signed-off-by: Gerd Hoffmann <kraxel@redhat.com>
> >
> > It is thus able to be removed in the 3.1.0 release.
> 
> At least one of the BSD VMs in tests/vm/ is still using SDL1.2.
> I think we should update that VM before we drop SDL1.2 support.

I confirmed that the freebsd & netbsd images still work as SDL just gets
automatically disabled by configure. The openbsd image breaks hard though
because SDL is the only available audio backend on openbsd, effectively
making SDL a mandatory requirement.

So we definitely need to update the openbsd image to have SDL2.


Regards,
Daniel
-- 
|: https://berrange.com      -o-    https://www.flickr.com/photos/dberrange :|
|: https://libvirt.org         -o-            https://fstop138.berrange.com :|
|: https://entangle-photo.org    -o-    https://www.instagram.com/dberrange :|

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

end of thread, other threads:[~2018-08-22  9:53 UTC | newest]

Thread overview: 10+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2018-08-08 10:49 [Qemu-devel] [PATCH 0/3] ui: remove deprecated UI frontends Daniel P. Berrangé
2018-08-08 10:49 ` [Qemu-devel] [PATCH 1/3] ui: remove support for GTK2 in favour of GTK3 Daniel P. Berrangé
2018-08-08 10:49 ` [Qemu-devel] [PATCH 2/3] ui: increase min required GTK3 version to 3.14.0 Daniel P. Berrangé
2018-08-08 10:49 ` [Qemu-devel] [PATCH 3/3] ui: remove support for SDL1.2 in favour of SDL2 Daniel P. Berrangé
2018-08-08 13:51   ` Peter Maydell
2018-08-08 13:55     ` Daniel P. Berrangé
2018-08-22  9:53     ` Daniel P. Berrangé
2018-08-08 11:24 ` [Qemu-devel] [PATCH 0/3] ui: remove deprecated UI frontends Gerd Hoffmann
2018-08-08 12:58   ` Daniel P. Berrangé
2018-08-21  7:46 ` Gerd Hoffmann

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