[Spice-devel] [PATCH 5/9] Drop GTK+ 2.0

Marc-André Lureau marcandre.lureau at gmail.com
Tue Feb 16 20:58:21 UTC 2016


Hi

On Tue, Feb 16, 2016 at 5:39 PM, Fabiano Fidêncio <fidencio at redhat.com> wrote:
> On Tue, Feb 16, 2016 at 3:49 PM, Marc-André Lureau
> <marcandre.lureau at gmail.com> wrote:
>> Not so many systems require gtk+ 2.0 these days, let's move on.
>>
>> This drops the old python bindings (non-gir based), and the
>> unsteady/experimental gtk2-only XShm support.
>>
>> Signed-off-by: Marc-André Lureau <marcandre.lureau at gmail.com>
>> ---
>>  Makefile.am                |   2 +-
>>  configure.ac               | 123 +-------------------
>>  doc/reference/Makefile.am  |   2 +-
>>  spice-client-gtk-2.0.pc.in |  12 --
>>  src/Makefile.am            |  73 +-----------
>>  src/channel-display.c      |  11 --
>>  src/gtk-compat.h           |  24 ----
>>  src/spice-widget-cairo.c   |  20 ----
>>  src/spice-widget-priv.h    |  20 ----
>>  src/spice-widget-x11.c     | 280 ---------------------------------------------
>>  src/spice-widget.c         |  30 -----
>>  vapi/Makefile.am           |  11 +-
>>  12 files changed, 16 insertions(+), 592 deletions(-)
>>  delete mode 100644 spice-client-gtk-2.0.pc.in
>>  delete mode 100644 src/spice-widget-x11.c
>>
>> diff --git a/Makefile.am b/Makefile.am
>> index 3d7a174..47cf840 100644
>> --- a/Makefile.am
>> +++ b/Makefile.am
>> @@ -19,7 +19,7 @@ pkgconfig_DATA =                                      \
>>         $(NULL)
>>
>>  if WITH_GTK
>> -pkgconfig_DATA += spice-client-gtk-$(SPICE_GTK_API_VERSION).pc
>> +pkgconfig_DATA += spice-client-gtk-3.0.pc
>>  endif
>>
>>  if WITH_CONTROLLER
>> diff --git a/configure.ac b/configure.ac
>> index 4168290..7fb984f 100644
>> --- a/configure.ac
>> +++ b/configure.ac
>> @@ -115,44 +115,30 @@ SPICE_CHECK_SASL
>>
>>  AC_MSG_CHECKING([which gtk+ version to compile against])
>>  AC_ARG_WITH([gtk],
>> -  [AS_HELP_STRING([--with-gtk=@<:@2.0/3.0/no@:>@],[which gtk+ version to compile against @<:@default=3.0@:>@])],
>> +  [AS_HELP_STRING([--with-gtk=@<:@3.0/no@:>@],[which gtk+ version to compile against @<:@default=3.0@:>@])],
>>    [case "$with_gtk" in
>> -     2.0|3.0) AC_MSG_RESULT([$with_gtk]) ;;
>> +     3.0) AC_MSG_RESULT([$with_gtk]) ;;
>>       no) AC_MSG_RESULT([none]) ;;
>>       *) AC_MSG_ERROR([invalid gtk version specified]) ;;
>>     esac],
>>    [with_gtk=3.0])
>>
>>  case "$with_gtk" in
>> -  2.0) GTK_API_VERSION=2.0
>> -       GTK_REQUIRED=2.18.0
>> -       SPICE_GTK_API_VERSION=2.0
>> -       ;;
>> -  3.0) GTK_API_VERSION=3.0
>> -       GTK_REQUIRED=2.91.3
>> -       SPICE_GTK_API_VERSION=3.0
>> +  3.0) GTK_REQUIRED=2.91.3
>>         ;;
>>    no)
>>         AS_IF([test x$enable_gtk_doc = xyes],
>>               [AC_MSG_ERROR([Without GTK+, gtk-doc must be disabled])])
>>  esac
>>
>> -AC_SUBST([GTK_API_VERSION])
>>  AC_SUBST([GTK_REQUIRED])
>> -AC_SUBST([SPICE_GTK_API_VERSION])
>>  AM_CONDITIONAL([WITH_GTK],[test "$with_gtk" != "no"])
>> -AM_CONDITIONAL([HAVE_GTK_2],[test "$with_gtk" = "2.0"])
>> -AM_CONDITIONAL([HAVE_GTK_3],[test "$with_gtk" = "3.0"])
>>
>>  AS_IF([test "x$with_gtk" != "xno"],
>> -      [PKG_CHECK_MODULES(GTK, gtk+-$GTK_API_VERSION >= $GTK_REQUIRED)])
>> +      [PKG_CHECK_MODULES(GTK, gtk+-3.0 >= $GTK_REQUIRED)])
>>  AC_SUBST(GTK_CFLAGS)
>>  AC_SUBST(GTK_LIBS)
>> -SPICE_GTK_REQUIRES="${SPICE_GTK_REQUIRES} gtk+-$GTK_API_VERSION >= $GTK_REQUIRED"
>> -
>> -PKG_CHECK_EXISTS([gtk+-x11-$with_gtk], [have_x11=yes], [have_x11=no])
>> -AS_IF([test "x$have_x11" = "xyes"], [AC_DEFINE([HAVE_X11], 1, [Have x11?])])
>> -AM_CONDITIONAL([WITH_DISPLAY_X11], [test "x$have_x11" = "xyes"])
>> +SPICE_GTK_REQUIRES="${SPICE_GTK_REQUIRES} gtk+-3.0 >= $GTK_REQUIRED"
>>
>>  PKG_CHECK_EXISTS([gtk+-quartz-$with_gtk], [have_quartz=yes], [have_quartz=no])
>>  AS_IF([test "x$have_quartz" = "xyes"], [AC_DEFINE([HAVE_QUARTZ], 1, [Have Quartz?])])
>> @@ -162,27 +148,7 @@ PKG_CHECK_EXISTS([gtk+-win32-$with_gtk], [have_win32=yes], [have_win32=no])
>>  AS_IF([test "x$have_win32" = "xyes"], [AC_DEFINE([HAVE_WINDOWS], 1, [Have Win32?])])
>>  AM_CONDITIONAL([WITH_DISPLAY_WINDOWS], [test "x$have_win32" = "xyes"])
>>
>> -if [test "x$have_x11" = "xyes" ]
>> -then
>> -  AC_CHECK_HEADERS([X11/XKBlib.h])
>> -fi
>> -
>> -AC_ARG_WITH([x11],
>> -  AS_HELP_STRING([--with-x11], [Use x11/shm display backend instead of cairo @<:@default=no@:>@]))
>> -
>> -AC_MSG_CHECKING([What rendering backend to use..])
>> -if [test "x$with_x11" = "xyes" ]
>> -then
>> -  if [test "$GTK_API_VERSION" = "3.0" ]
>> -  then
>> -    AC_MSG_ERROR([X11 SHM backend is not compatible with GTK3])
>> -  fi
>> -  AC_MSG_RESULT([x11])
>> -  AC_DEFINE([WITH_X11], 1, [Use X11 backend?])
>> -else
>> -  AC_MSG_RESULT([cairo])
>> -fi
>> -AM_CONDITIONAL([WITH_X11], [test "x$with_x11" = "xyes"])
>> +AC_CHECK_HEADERS([X11/XKBlib.h])
>>
>>  AC_ARG_WITH([pnp-ids-path],
>>    AC_HELP_STRING([--with-pnp-ids-path],
>> @@ -567,82 +533,6 @@ AM_CONDITIONAL(WITH_VALA, [test "x$enable_vala" = "xyes"])
>>  VAPIDIR="${datadir}/vala/vapi"
>>  AC_SUBST(VAPIDIR)
>>
>> -
>> -AC_ARG_WITH([python],
>> -  AS_HELP_STRING([--with-python], [build python bindings @<:@default=auto@:>@]),
>> -  [case "$withval" in
>> -   yes|no|auto) with_python="$withval";;
>> -   *) AC_MSG_ERROR([bad value $withval for python option]) ;;
>> -   esac],
>> -  [AS_IF([test "$with_gtk" != "2.0" || test "x$os_win32" = "xyes"],
>> -         [with_python=no],[with_python=auto])]
>> -)
>> -
>> -if test "x$with_python" != "xno"; then
>> -  PKG_CHECK_MODULES(PYGTK, [pygtk-2.0 >= 2.0.0], [have_pygtk=yes], [have_pygtk=no])
>> -  AC_SUBST(PYGTK_CFLAGS)
>> -  AC_SUBST(PYGTK_LIBS)
>> -  if test "x$have_pygtk" != "xyes"
>> -  then
>> -    if test "x$with_python" = "xyes"
>> -    then
>> -      AC_MSG_ERROR("No pygtk found")
>> -    else
>> -      with_python=no
>> -    fi
>> -  fi
>> -fi
>> -
>> -if test "x$with_python" != "xno"; then
>> -  AM_PATH_PYTHON([], [have_python=yes], [have_python=no])
>> -  if test "x$have_python" != "xyes"
>> -  then
>> -    if test "x$with_python" = "xyes"
>> -    then
>> -      AC_MSG_ERROR("No python found")
>> -    else
>> -      with_python=no
>> -    fi
>> -  fi
>> -fi
>> -
>> -if test "x$with_python" != "xno"; then
>> -  AC_MSG_CHECKING([whether $PYTHON version >= 2.0])
>> -  HAVE_PYTHON_REQUIRED=no
>> -  AM_PYTHON_CHECK_VERSION([$PYTHON], [2.0],
>> -      [HAVE_PYTHON_REQUIRED="yes"],
>> -      [HAVE_PYTHON_REQUIRED="no"])
>> -
>> -  AC_MSG_RESULT($HAVE_PYTHON_REQUIRED)
>> -
>> -  if test "x$HAVE_PYTHON_REQUIRED" != "xyes"
>> -  then
>> -    if test "x$with_python" = "xyes"
>> -    then
>> -      AC_MSG_ERROR("No suitable python found")
>> -    else
>> -      with_python=no
>> -    fi
>> -  fi
>> -fi
>> -
>> -if test "x$with_python" != "xno"; then
>> -  AM_CHECK_PYTHON_HEADERS(have_python_headers=yes,have_python_headers=no)
>> -
>> -  if test "x$have_python_headers" != "xyes"
>> -  then
>> -    if test "x$with_python" = "xyes"
>> -    then
>> -      AC_MSG_ERROR("No python development headers found")
>> -    else
>> -      with_python=no
>> -    fi
>> -  fi
>> -fi
>> -
>> -AM_CONDITIONAL(WITH_PYTHON, [test "x$with_python" != "xno"])
>> -
>> -
>>  AC_ARG_ENABLE([dbus],
>>    AS_HELP_STRING([--enable-dbus=@<:@auto/yes/no@:>@],
>>                   [Enable dbus support for desktop integration (disabling automount) @<:@default=auto@:>@]),
>> @@ -695,7 +585,6 @@ AM_CONDITIONAL([BUILD_TESTS], [test x"$enable_static" = xyes])
>>  AC_OUTPUT([
>>  Makefile
>>  spice-client-glib-2.0.pc
>> -spice-client-gtk-2.0.pc
>>  spice-client-gtk-3.0.pc
>>  spice-controller.pc
>>  data/Makefile
>> diff --git a/doc/reference/Makefile.am b/doc/reference/Makefile.am
>> index 2d13863..b76a9cf 100644
>> --- a/doc/reference/Makefile.am
>> +++ b/doc/reference/Makefile.am
>> @@ -55,7 +55,7 @@ IGNORE_HFILES=                                        \
>>
>>  # CFLAGS and LDFLAGS for compiling gtkdoc-scangobj with your library.
>>  GTKDOC_CFLAGS = -I$(top_srcdir) -I$(top_builddir) -I$(top_srcdir)/src -I$(top_builddir)/src $(SPICE_GLIB_CFLAGS) $(SPICE_GTK_CFLAGS) $(COMMON_CFLAGS) -DSPICE_COMPILATION
>> -GTKDOC_LIBS = $(top_builddir)/src/libspice-client-glib-2.0.la $(top_builddir)/src/libspice-client-gtk-$(SPICE_GTK_API_VERSION).la $(GTK_LIBS)
>> +GTKDOC_LIBS = $(top_builddir)/src/libspice-client-glib-2.0.la $(top_builddir)/src/libspice-client-gtk-3.0.la $(GTK_LIBS)
>>
>>  include $(top_srcdir)/gtk-doc.make
>>
>> diff --git a/spice-client-gtk-2.0.pc.in b/spice-client-gtk-2.0.pc.in
>> deleted file mode 100644
>> index a5b96e2..0000000
>> --- a/spice-client-gtk-2.0.pc.in
>> +++ /dev/null
>> @@ -1,12 +0,0 @@
>> -prefix=@prefix@
>> -exec_prefix=@exec_prefix@
>> -libdir=@libdir@
>> -includedir=@includedir@
>> -
>> -Name: spice-client-gtk-2.0
>> -Description: SPICE Client Gtk 2.0 library
>> -Version: @VERSION@
>> -
>> -Requires: @SPICE_GTK_REQUIRES@ spice-client-glib-2.0
>> -Libs: -L${libdir} -lspice-client-gtk-2.0
>> -Cflags: -I${includedir}/spice-client-gtk-2.0
>> diff --git a/src/Makefile.am b/src/Makefile.am
>> index d6935cf..ffc98b9 100644
>> --- a/src/Makefile.am
>> +++ b/src/Makefile.am
>> @@ -57,12 +57,8 @@ endif
>>  lib_LTLIBRARIES = libspice-client-glib-2.0.la
>>
>>  if WITH_GTK
>> -if HAVE_GTK_2
>> -lib_LTLIBRARIES += libspice-client-gtk-2.0.la
>> -else
>>  lib_LTLIBRARIES += libspice-client-gtk-3.0.la
>>  endif
>> -endif
>>
>>  if HAVE_LD_VERSION_SCRIPT
>>  GLIB_SYMBOLS_LDFLAGS = -Wl,--version-script=${srcdir}/map-file
>> @@ -151,15 +147,9 @@ nodist_SPICE_GTK_SOURCES_COMMON =  \
>>         spice-marshal.c                 \
>>         $(NULL)
>>
>> -if WITH_X11
>> -SPICE_GTK_SOURCES_COMMON +=            \
>> -       spice-widget-x11.c              \
>> -       $(NULL)
>> -else
>>  SPICE_GTK_SOURCES_COMMON +=            \
>>         spice-widget-cairo.c            \
>>         $(NULL)
>> -endif
>>
>>  if WITH_GTK
>>  if WITH_EPOXY
>> @@ -168,23 +158,14 @@ SPICE_GTK_SOURCES_COMMON +=               \
>>         $(NULL)
>>  endif
>>
>> -if HAVE_GTK_2
>> -libspice_client_gtk_2_0_la_DEPEDENCIES = $(GTK_SYMBOLS_FILE)
>> -libspice_client_gtk_2_0_la_LDFLAGS = $(SPICE_GTK_LDFLAGS_COMMON)
>> -libspice_client_gtk_2_0_la_LIBADD = $(SPICE_GTK_LIBADD_COMMON)
>> -libspice_client_gtk_2_0_la_SOURCES = $(SPICE_GTK_SOURCES_COMMON)
>> -libspice_client_gtk_2_0_la_CFLAGS = $(EPOXY_CFLAGS)
>> -nodist_libspice_client_gtk_2_0_la_SOURCES = $(nodist_SPICE_GTK_SOURCES_COMMON)
>> -else
>>  libspice_client_gtk_3_0_la_DEPEDENCIES = $(GTK_SYMBOLS_FILE)
>>  libspice_client_gtk_3_0_la_LDFLAGS = $(SPICE_GTK_LDFLAGS_COMMON)
>>  libspice_client_gtk_3_0_la_LIBADD = $(SPICE_GTK_LIBADD_COMMON)
>>  libspice_client_gtk_3_0_la_SOURCES = $(SPICE_GTK_SOURCES_COMMON)
>>  libspice_client_gtk_3_0_la_CFLAGS = $(EPOXY_CFLAGS)
>>  nodist_libspice_client_gtk_3_0_la_SOURCES = $(nodist_SPICE_GTK_SOURCES_COMMON)
>> -endif
>>
>> -libspice_client_gtkincludedir = $(includedir)/spice-client-gtk-$(SPICE_GTK_API_VERSION)
>> +libspice_client_gtkincludedir = $(includedir)/spice-client-gtk-3.0
>>  libspice_client_gtkinclude_HEADERS =   \
>>         spice-client-gtk.h              \
>>         spice-gtk-session.h             \
>> @@ -399,7 +380,7 @@ spicy_SOURCES =                                     \
>>         $(NULL)
>>
>>  spicy_LDADD =                                          \
>> -       libspice-client-gtk-$(SPICE_GTK_API_VERSION).la \
>> +       libspice-client-gtk-3.0.la                      \
>>         libspice-client-glib-2.0.la                     \
>>         $(GTHREAD_LIBS)                                 \
>>         $(GTK_LIBS)                                     \
>> @@ -470,12 +451,8 @@ spicy_stats_LDADD =                                \
>>  $(libspice_client_glib_2_0_la_SOURCES): spice-glib-enums.h spice-marshal.h
>>
>>  if WITH_GTK
>> -if HAVE_GTK_2
>> -$(libspice_client_gtk_2_0_la_SOURCES): spice-glib-enums.h spice-widget-enums.h
>> -else
>>  $(libspice_client_gtk_3_0_la_SOURCES): spice-glib-enums.h spice-widget-enums.h
>>  endif
>> -endif
>>
>>  spice-marshal.c: spice-marshal.h
>>  spice-glib-enums.c: spice-glib-enums.h
>> @@ -576,40 +553,6 @@ vncdisplaykeymap_win322xtkbd.c:
>>  vncdisplaykeymap_x112xtkbd.c:
>>         $(AM_V_GEN)$(KEYMAP_GEN) $(srcdir)/keymaps.csv x11 xtkbd > $@ || rm $@
>>
>> -if WITH_PYTHON
>> -pyexec_LTLIBRARIES = SpiceClientGtk.la
>> -
>> -# workaround for broken parallel install support in automake with LTLIBRARIES
>> -# http://debbugs.gnu.org/cgi/bugreport.cgi?bug=7328
>> -install_pyexecLTLIBRARIES = install-pyexecLTLIBRARIES
>> -$(install_pyexecLTLIBRARIES): install-libLTLIBRARIES
>> -
>> -SpiceClientGtk_la_LIBADD = libspice-client-gtk-2.0.la libspice-client-glib-2.0.la $(PYGTK_LIBS)
>> -SpiceClientGtk_la_CFLAGS = $(GTK_CFLAGS) $(PYTHON_INCLUDES) $(PYGTK_CFLAGS) $(WARN_PYFLAGS)
>> -SpiceClientGtk_la_LDFLAGS = -module -avoid-version -fPIC
>> -SpiceClientGtk_la_SOURCES = spice-client-gtk-module.c
>> -nodist_SpiceClientGtk_la_SOURCES = spice-client-gtk-module.defs.c
>> -
>> -CODEGENDIR = `pkg-config --variable=codegendir pygtk-2.0`
>> -DEFSDIR = `pkg-config --variable=defsdir pygtk-2.0`
>> -
>> -spice-client-gtk.defs: $(libspice_client_gtkinclude_HEADERS) $(nodist_libspice_client_gtkinclude_HEADERS) $(libspice_client_glibinclude_HEADERS) $(nodist_libspice_client_glibinclude_HEADERS)
>> -       $(AM_V_GEN)$(PYTHON) $(CODEGENDIR)/h2def.py \
>> -               -f $(srcdir)/spice-client-gtk-manual.defs \
>> -               $^ > $@
>> -
>> -spice-client-gtk-module.defs.c: spice-client-gtk.override spice-client-gtk.defs spice-client-gtk-manual.defs
>> -       @cat spice-client-gtk.defs $(srcdir)/spice-client-gtk-manual.defs > tmp.defs
>> -       $(AM_V_GEN)pygobject-codegen-2.0 --prefix spice \
>> -                         --register $(DEFSDIR)/gdk-types.defs \
>> -                         --register $(DEFSDIR)/gtk-types.defs \
>> -                         --override $(srcdir)/spice-client-gtk.override \
>> -                         tmp.defs > $@
>> -       @rm tmp.defs
>> -
>> -CLEANFILES += spice-client-gtk-module.defs.c spice-client-gtk.defs
>> -endif
>> -
>>  -include $(INTROSPECTION_MAKEFILE)
>>
>>  if G_IR_SCANNER_SYMBOL_PREFIX
>> @@ -666,15 +609,6 @@ SpiceClientGLib_2_0_gir_SCANNERFLAGS = --c-include="spice-client.h"
>>  INTROSPECTION_GIRS += SpiceClientGLib-2.0.gir
>>
>>  if WITH_GTK
>> -if HAVE_GTK_2
>> -SpiceClientGtk-2.0.gir: libspice-client-gtk-2.0.la SpiceClientGLib-2.0.gir
>> -SpiceClientGtk_2_0_gir_INCLUDES = GObject-2.0 Gtk-2.0 SpiceClientGLib-2.0
>> -SpiceClientGtk_2_0_gir_CFLAGS = $(SPICE_COMMON_CPPFLAGS)
>> -SpiceClientGtk_2_0_gir_LIBS = libspice-client-gtk-2.0.la libspice-client-glib-2.0.la
>> -SpiceClientGtk_2_0_gir_FILES = $(gtk_introspection_files)
>> -SpiceClientGtk_2_0_gir_EXPORT_PACKAGES = spice-client-gtk-2.0
>> -SpiceClientGtk_2_0_gir_SCANNERFLAGS = --c-include="spice-widget.h"
>> -else
>>  SpiceClientGtk-3.0.gir: libspice-client-gtk-3.0.la SpiceClientGLib-2.0.gir
>>  SpiceClientGtk_3_0_gir_INCLUDES = GObject-2.0 Gtk-3.0 SpiceClientGLib-2.0
>>  SpiceClientGtk_3_0_gir_CFLAGS = $(SPICE_COMMON_CPPFLAGS)
>> @@ -682,8 +616,7 @@ SpiceClientGtk_3_0_gir_LIBS = libspice-client-gtk-3.0.la libspice-client-glib-2.
>>  SpiceClientGtk_3_0_gir_FILES = $(gtk_introspection_files)
>>  SpiceClientGtk_3_0_gir_EXPORT_PACKAGES = spice-client-gtk-3.0
>>  SpiceClientGtk_3_0_gir_SCANNERFLAGS = --c-include="spice-widget.h"
>> -endif
>> -INTROSPECTION_GIRS += SpiceClientGtk-$(SPICE_GTK_API_VERSION).gir
>> +INTROSPECTION_GIRS += SpiceClientGtk-3.0.gir
>>  endif
>>
>>  girdir = $(datadir)/gir-1.0
>> diff --git a/src/channel-display.c b/src/channel-display.c
>> index 5111d3d..f10495e 100644
>> --- a/src/channel-display.c
>> +++ b/src/channel-display.c
>> @@ -778,18 +778,7 @@ static int create_canvas(SpiceChannel *channel, display_surface *surface)
>>          }
>>
>>          CHANNEL_DEBUG(channel, "Create primary canvas");
>> -#if defined(WITH_X11) && defined(HAVE_SYS_SHM_H)
>> -        surface->shmid = shmget(IPC_PRIVATE, surface->size, IPC_CREAT | 0777);
>> -        if (surface->shmid >= 0) {
>> -            surface->data = shmat(surface->shmid, 0, 0);
>> -            if (surface->data == NULL) {
>> -                shmctl(surface->shmid, IPC_RMID, 0);
>> -                surface->shmid = -1;
>> -            }
>> -        }
>> -#else
>>          surface->shmid = -1;
>> -#endif
>>      } else {
>>          surface->shmid = -1;
>>      }
>
> This path is quite weird IMO. You basically have here:
> if (something) {
>    // do whatever you're doing ...
>    surface->shmid = -1;
> } else {
>    surface->shmid = -1;
> }
>
> if (surface->shmid == -1)
>    // do whatever you're doing 2
>
> Is it doing what's supposed to do? If yes, what do you think about
> simplyfing it to code below?
> if (something) {
>    // do whatever you're doing
> }
>
> surface->shmid = -1
>
> // do whatever you're doing 2
>
> Also, you ended up removing shmid from the SpiceDisplayPrivate ... do
> you really need to keep it in the display_surface structure?
>

Good point, let's remove and simplify more of the shm code.

>> diff --git a/src/gtk-compat.h b/src/gtk-compat.h
>> index aac3b55..b2cf6d6 100644
>> --- a/src/gtk-compat.h
>> +++ b/src/gtk-compat.h
>> @@ -22,12 +22,6 @@
>>
>>  #include <gtk/gtk.h>
>>
>> -#if !GTK_CHECK_VERSION (2, 91, 0)
>> -#define GDK_IS_X11_DISPLAY(D) TRUE
>> -#define gdk_window_get_display(W) gdk_drawable_get_display(GDK_DRAWABLE(W))
>> -#define GDK_IS_X11_WINDOW(D) TRUE
>> -#endif
>> -
>>  #if GTK_CHECK_VERSION (2, 91, 0)
>>  static inline void gdk_drawable_get_size(GdkWindow *w, gint *ww, gint *wh)
>>  {
>> @@ -36,22 +30,4 @@ static inline void gdk_drawable_get_size(GdkWindow *w, gint *ww, gint *wh)
>>  }
>>  #endif
>>
>> -#if !GTK_CHECK_VERSION(2, 20, 0)
>> -static inline gboolean gtk_widget_get_realized(GtkWidget *widget)
>> -{
>> -    g_return_val_if_fail (GTK_IS_WIDGET (widget), FALSE);
>> -    return GTK_WIDGET_REALIZED(widget);
>> -}
>> -#endif
>> -
>> -#if !GTK_CHECK_VERSION (3, 0, 0)
>> -#define cairo_rectangle_int_t GdkRectangle
>> -#define cairo_region_t GdkRegion
>> -#define cairo_region_create_rectangle gdk_region_rectangle
>> -#define cairo_region_subtract_rectangle(_dest,_rect) { GdkRegion *_region = gdk_region_rectangle (_rect); gdk_region_subtract (_dest, _region); gdk_region_destroy (_region); }
>> -#define cairo_region_destroy gdk_region_destroy
>> -
>> -#define gdk_window_get_display(W) gdk_drawable_get_display(GDK_DRAWABLE(W))
>> -#endif
>> -
>>  #endif /* GTK_COMPAT_H */
>> diff --git a/src/spice-widget-cairo.c b/src/spice-widget-cairo.c
>> index 96af076..c92d4ec 100644
>> --- a/src/spice-widget-cairo.c
>> +++ b/src/spice-widget-cairo.c
>> @@ -132,26 +132,6 @@ void spicex_draw_event(SpiceDisplay *display, cairo_t *cr)
>>      }
>>  }
>>
>> -#if ! GTK_CHECK_VERSION (2, 91, 0)
>> -G_GNUC_INTERNAL
>> -void spicex_expose_event(SpiceDisplay *display, GdkEventExpose *expose)
>> -{
>> -    cairo_t *cr;
>> -
>> -    cr = gdk_cairo_create(gtk_widget_get_window(GTK_WIDGET(display)));
>> -    cairo_rectangle(cr,
>> -                    expose->area.x,
>> -                    expose->area.y,
>> -                    expose->area.width,
>> -                    expose->area.height);
>> -    cairo_clip(cr);
>> -
>> -    spicex_draw_event(display, cr);
>> -
>> -    cairo_destroy(cr);
>> -}
>> -#endif
>> -
>>  G_GNUC_INTERNAL
>>  gboolean spicex_is_scaled(SpiceDisplay *display)
>>  {
>> diff --git a/src/spice-widget-priv.h b/src/spice-widget-priv.h
>> index 8ac0782..d28328d 100644
>> --- a/src/spice-widget-priv.h
>> +++ b/src/spice-widget-priv.h
>> @@ -20,12 +20,6 @@
>>
>>  #include "config.h"
>>
>> -#ifdef WITH_X11
>> -#include <X11/Xlib.h>
>> -#include <X11/extensions/XShm.h>
>> -#include <gdk/gdkx.h>
>> -#endif
>> -
>>  #ifdef WIN32
>>  #include <windows.h>
>>  #endif
>> @@ -73,7 +67,6 @@ struct _SpiceDisplayPrivate {
>>      gboolean                monitor_ready;
>>      enum SpiceSurfaceFmt    format;
>>      gint                    width, height, stride;
>> -    gint                    shmid;
>>      gpointer                data_origin; /* the original display image data */
>>      gpointer                data; /* converted if necessary to 32 bits */
>>
>> @@ -82,21 +75,12 @@ struct _SpiceDisplayPrivate {
>>      gint                    ww, wh, mx, my;
>>
>>      bool                    convert;
>> -    bool                    have_mitshm;
>
> Not sure why you're removing it here. Seems it's related to the
> WITH_X11 case, but I'm really not sure.

Yes, it was x11 +shm specific.

>
>>      gboolean                allow_scaling;
>>      gboolean                only_downscale;
>>      gboolean                disable_inputs;
>>
>>      /* TODO: make a display object instead? */
>> -#ifdef WITH_X11
>> -    Display                 *dpy;
>> -    XVisualInfo             *vi;
>> -    XImage                  *ximage;
>> -    XShmSegmentInfo         *shminfo;
>> -    GC                      gc;
>> -#else
>>      cairo_surface_t         *ximage;
>> -#endif
>>
>>      SpiceSession            *session;
>>      SpiceGtkSession         *gtk_session;
>> @@ -163,11 +147,7 @@ struct _SpiceDisplayPrivate {
>>
>>  int      spicex_image_create                 (SpiceDisplay *display);
>>  void     spicex_image_destroy                (SpiceDisplay *display);
>> -#if GTK_CHECK_VERSION (2, 91, 0)
>>  void     spicex_draw_event                   (SpiceDisplay *display, cairo_t *cr);
>> -#else
>> -void     spicex_expose_event                 (SpiceDisplay *display, GdkEventExpose *ev);
>> -#endif
>>  gboolean spicex_is_scaled                    (SpiceDisplay *display);
>>  void     spice_display_get_scaling           (SpiceDisplay *display, double *s, int *x, int *y, int *w, int *h);
>>  gboolean spice_egl_init                      (SpiceDisplay *display, GError **err);
>> diff --git a/src/spice-widget-x11.c b/src/spice-widget-x11.c
>> deleted file mode 100644
>> index 3f2ce94..0000000
>> --- a/src/spice-widget-x11.c
>> +++ /dev/null
>> @@ -1,280 +0,0 @@
>> -/* -*- Mode: C; c-basic-offset: 4; indent-tabs-mode: nil -*- */
>> -/*
>> -  Copyright (C) 2010 Red Hat, Inc.
>> -
>> -  This library is free software; you can redistribute it and/or
>> -  modify it under the terms of the GNU Lesser General Public
>> -  License as published by the Free Software Foundation; either
>> -  version 2.1 of the License, or (at your option) any later version.
>> -
>> -  This library is distributed in the hope that it will be useful,
>> -  but WITHOUT ANY WARRANTY; without even the implied warranty of
>> -  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
>> -  Lesser General Public License for more details.
>> -
>> -  You should have received a copy of the GNU Lesser General Public
>> -  License along with this library; if not, see <http://www.gnu.org/licenses/>.
>> -*/
>> -#include "config.h"
>> -
>> -#include "spice-widget.h"
>> -#include "spice-widget-priv.h"
>> -
>> -#ifdef HAVE_SYS_SHM_H
>> -#include <sys/shm.h>
>> -#endif
>> -
>> -#ifdef HAVE_SYS_IPC_H
>> -#include <sys/ipc.h>
>> -#endif
>> -
>> -static bool no_mitshm;
>> -
>> -static struct format_table {
>> -    enum SpiceSurfaceFmt  spice;
>> -    XVisualInfo           xvisual;
>> -} format_table[] = {
>> -    {
>> -        .spice = SPICE_SURFACE_FMT_32_ARGB, /* FIXME: is that correct xvisual? */
>> -        .xvisual = {
>> -            .depth      = 24,
>> -            .red_mask   = 0xff0000,
>> -            .green_mask = 0x00ff00,
>> -            .blue_mask  = 0x0000ff,
>> -        },
>> -    },{
>> -        .spice = SPICE_SURFACE_FMT_32_xRGB,
>> -        .xvisual = {
>> -            .depth      = 24,
>> -            .red_mask   = 0xff0000,
>> -            .green_mask = 0x00ff00,
>> -            .blue_mask  = 0x0000ff,
>> -        },
>> -    },{
>> -        .spice = SPICE_SURFACE_FMT_16_555,
>> -        .xvisual = {
>> -            .depth      = 16,
>> -            .red_mask   = 0x7c00,
>> -            .green_mask = 0x03e0,
>> -            .blue_mask  = 0x001f,
>> -        },
>> -    },{
>> -        .spice = SPICE_SURFACE_FMT_16_565,
>> -        .xvisual = {
>> -            .depth      = 16,
>> -            .red_mask   = 0xf800,
>> -            .green_mask = 0x07e0,
>> -            .blue_mask  = 0x001f,
>> -        },
>> -    }
>> -};
>> -
>> -static XVisualInfo *get_visual_for_format(GtkWidget *widget, enum SpiceSurfaceFmt format)
>> -{
>> -    GdkDrawable  *drawable = gtk_widget_get_window(widget);
>> -    GdkDisplay   *display = gdk_drawable_get_display(drawable);
>> -    GdkScreen    *screen = gdk_drawable_get_screen(drawable);
>> -    XVisualInfo  template;
>> -    int          found, i;
>> -    XVisualInfo *vi;
>> -
>> -    for (i = 0; i < SPICE_N_ELEMENTS(format_table); i++) {
>> -        if (format == format_table[i].spice)
>> -            break;
>> -    }
>> -    if (i == SPICE_N_ELEMENTS(format_table)) {
>> -        g_warn_if_reached();
>> -        return NULL;
>> -    }
>> -
>> -    template = format_table[i].xvisual;
>> -    template.screen = gdk_x11_screen_get_screen_number(screen);
>> -    vi = XGetVisualInfo(gdk_x11_display_get_xdisplay(display),
>> -                        VisualScreenMask | VisualDepthMask |
>> -                        VisualRedMaskMask | VisualGreenMaskMask | VisualBlueMaskMask,
>> -                        &template, &found);
>> -    return vi;
>> -}
>> -
>> -static XVisualInfo *get_visual_default(GtkWidget *widget)
>> -{
>> -    GdkDrawable  *drawable = gtk_widget_get_window(widget);
>> -    GdkDisplay   *display = gdk_drawable_get_display(drawable);
>> -    GdkScreen    *screen = gdk_drawable_get_screen(drawable);
>> -    XVisualInfo  template;
>> -    int          found;
>> -
>> -    template.screen = gdk_x11_screen_get_screen_number(screen);
>> -    return XGetVisualInfo(gdk_x11_display_get_xdisplay(display),
>> -                          VisualScreenMask,
>> -                          &template, &found);
>> -}
>> -
>> -static int catch_no_mitshm(Display * dpy, XErrorEvent * event)
>> -{
>> -    no_mitshm = true;
>> -    return 0;
>> -}
>> -
>> -G_GNUC_INTERNAL
>> -int spicex_image_create(SpiceDisplay *display)
>> -{
>> -    SpiceDisplayPrivate   *d = display->priv;
>> -
>> -    if (d->ximage != NULL)
>> -        return 0;
>> -
>> -    GdkDrawable     *window = gtk_widget_get_window(GTK_WIDGET(display));
>> -    GdkDisplay      *gtkdpy = gdk_drawable_get_display(window);
>> -    void            *old_handler = NULL;
>> -    XGCValues       gcval = {
>> -        .foreground = 0,
>> -        .background = 0,
>> -    };
>> -
>> -    d->dpy = gdk_x11_display_get_xdisplay(gtkdpy);
>> -    d->convert = false;
>> -    d->vi = get_visual_for_format(GTK_WIDGET(display), d->format);
>> -    if (d->vi == NULL) {
>> -        d->convert = true;
>> -        d->vi = get_visual_default(GTK_WIDGET(display));
>> -        d->vi = get_visual_for_format(GTK_WIDGET(display), SPICE_SURFACE_FMT_32_xRGB);
>> -        g_return_val_if_fail(d->vi != NULL, 1);
>> -    }
>> -    if (d->convert) {
>> -        d->data = g_malloc0(d->height * d->stride); /* pixels are 32 bits */
>> -    }
>> -
>> -    d->gc = XCreateGC(d->dpy, gdk_x11_drawable_get_xid(window),
>> -                      GCForeground | GCBackground, &gcval);
>> -
>> -    if (d->convert) /* do not use shm when doing color format conversion */
>> -        goto xcreate;
>> -
>> -    if (d->have_mitshm && d->shmid != -1) {
>> -        if (!XShmQueryExtension(d->dpy)) {
>> -            goto shm_fail;
>> -        }
>> -        no_mitshm = false;
>> -        old_handler = XSetErrorHandler(catch_no_mitshm);
>> -        d->shminfo = g_new0(XShmSegmentInfo, 1);
>> -        d->ximage = XShmCreateImage(d->dpy, d->vi->visual, d->vi->depth,
>> -                                    ZPixmap, d->data, d->shminfo, d->width, d->height);
>> -        if (d->ximage == NULL)
>> -            goto shm_fail;
>> -        d->shminfo->shmaddr = d->data;
>> -        d->shminfo->shmid = d->shmid;
>> -        d->shminfo->readOnly = false;
>> -        XShmAttach(d->dpy, d->shminfo);
>> -        XSync(d->dpy, False);
>> -        shmctl(d->shmid, IPC_RMID, 0);
>> -        if (no_mitshm)
>> -            goto shm_fail;
>> -        XSetErrorHandler(old_handler);
>> -        return 0;
>> -    }
>> -
>> - shm_fail:
>> -    d->have_mitshm = false;
>> -    g_free(d->shminfo);
>> -    d->shminfo = NULL;
>> -    if (old_handler)
>> -        XSetErrorHandler(old_handler);
>> - xcreate:
>> -    d->ximage = XCreateImage(d->dpy, d->vi->visual, d->vi->depth, ZPixmap, 0,
>> -                             d->data, d->width, d->height, 32, d->stride);
>> -    return 0;
>> -}
>> -
>> -G_GNUC_INTERNAL
>> -void spicex_image_destroy(SpiceDisplay *display)
>> -{
>> -    SpiceDisplayPrivate *d = display->priv;
>> -
>> -    if (d->ximage) {
>> -        /* avoid XDestroy to free shared memory, owned and freed by
>> -           channel-display itself */
>> -        if (d->ximage->data == d->data_origin)
>> -            d->ximage->data = NULL;
>> -        XDestroyImage(d->ximage);
>> -        d->ximage = NULL;
>> -        if (d->convert)
>> -            d->data = 0;
>> -    }
>> -    if (d->shminfo) {
>> -        XShmDetach(d->dpy, d->shminfo);
>> -        free(d->shminfo);
>> -        d->shminfo = NULL;
>> -    }
>> -    if (d->gc) {
>> -        XFreeGC(d->dpy, d->gc);
>> -        d->gc = NULL;
>> -    }
>> -    if (d->convert && d->data) {
>> -        g_free(d->data);
>> -        d->data = NULL;
>> -    }
>> -}
>> -
>> -G_GNUC_INTERNAL
>> -void spicex_expose_event(SpiceDisplay *display, GdkEventExpose *expose)
>> -{
>> -    GdkDrawable *window = gtk_widget_get_window(GTK_WIDGET(display));
>> -    SpiceDisplayPrivate *d = display->priv;
>> -    int x, y, w, h;
>> -
>> -    spice_display_get_scaling(display, NULL, &x, &y, &w, &h);
>> -
>> -    if (expose->area.x >= x &&
>> -        expose->area.y >= y &&
>> -        expose->area.x + expose->area.width  <= x + w &&
>> -        expose->area.y + expose->area.height <= y + h) {
>> -        /* area is completely inside the guest screen -- blit it */
>> -        if (d->have_mitshm && d->shminfo) {
>> -            XShmPutImage(d->dpy, gdk_x11_drawable_get_xid(window),
>> -                         d->gc, d->ximage,
>> -                         d->area.x + expose->area.x - x, d->area.y + expose->area.y - y,
>> -                         expose->area.x, expose->area.y,
>> -                         expose->area.width, expose->area.height,
>> -                         true);
>> -        } else {
>> -            XPutImage(d->dpy, gdk_x11_drawable_get_xid(window),
>> -                      d->gc, d->ximage,
>> -                      d->area.x + expose->area.x - x, d->area.y + expose->area.y - y,
>> -                      expose->area.x, expose->area.y,
>> -                      expose->area.width, expose->area.height);
>> -        }
>> -    } else {
>> -        /* complete window update */
>> -        if (d->ww > d->area.width || d->wh > d->area.height) {
>> -            int x1 = x;
>> -            int x2 = x + w;
>> -            int y1 = y;
>> -            int y2 = y + h;
>> -            XFillRectangle(d->dpy, gdk_x11_drawable_get_xid(window),
>> -                           d->gc, 0, 0, x1, d->wh);
>> -            XFillRectangle(d->dpy, gdk_x11_drawable_get_xid(window),
>> -                           d->gc, x2, 0, d->ww - x2, d->wh);
>> -            XFillRectangle(d->dpy, gdk_x11_drawable_get_xid(window),
>> -                           d->gc, 0, 0, d->ww, y1);
>> -            XFillRectangle(d->dpy, gdk_x11_drawable_get_xid(window),
>> -                           d->gc, 0, y2, d->ww, d->wh - y2);
>> -        }
>> -        if (d->have_mitshm && d->shminfo) {
>> -            XShmPutImage(d->dpy, gdk_x11_drawable_get_xid(window),
>> -                         d->gc, d->ximage,
>> -                         d->area.x, d->area.y, x, y, w, h,
>> -                         true);
>> -        } else {
>> -            XPutImage(d->dpy, gdk_x11_drawable_get_xid(window),
>> -                      d->gc, d->ximage,
>> -                      d->area.x, d->area.y, x, y, w, h);
>> -        }
>> -    }
>> -}
>> -
>> -G_GNUC_INTERNAL
>> -gboolean spicex_is_scaled(SpiceDisplay *display)
>> -{
>> -    return FALSE; /* backend doesn't support scaling yet */
>> -}
>> diff --git a/src/spice-widget.c b/src/spice-widget.c
>> index ef166cb..3e7a731 100644
>> --- a/src/spice-widget.c
>> +++ b/src/spice-widget.c
>> @@ -574,17 +574,12 @@ static void spice_display_init(SpiceDisplay *display)
>>                            GDK_LEAVE_NOTIFY_MASK |
>>                            GDK_KEY_PRESS_MASK |
>>                            GDK_SCROLL_MASK);
>> -#ifdef WITH_X11
>> -    gtk_widget_set_double_buffered(widget, false);
>> -#else
>>      gtk_widget_set_double_buffered(widget, true);
>> -#endif
>>      gtk_widget_set_can_focus(widget, true);
>>      d->grabseq = spice_grab_sequence_new_from_string("Control_L+Alt_L");
>>      d->activeseq = g_new0(gboolean, d->grabseq->nkeysyms);
>>
>>      d->mouse_cursor = get_blank_cursor();
>> -    d->have_mitshm = true;
>>
>>  #ifdef USE_EPOXY
>>      if (!spice_egl_init(display, &err)) {
>> @@ -1156,7 +1151,6 @@ static void set_egl_enabled(SpiceDisplay *display, bool enabled)
>>  #endif
>>  }
>>
>> -#if GTK_CHECK_VERSION (2, 91, 0)
>>  static gboolean draw_event(GtkWidget *widget, cairo_t *cr)
>>  {
>>      SpiceDisplay *display = SPICE_DISPLAY(widget);
>> @@ -1180,24 +1174,6 @@ static gboolean draw_event(GtkWidget *widget, cairo_t *cr)
>>
>>      return true;
>>  }
>> -#else
>> -static gboolean expose_event(GtkWidget *widget, GdkEventExpose *expose)
>> -{
>> -    SpiceDisplay *display = SPICE_DISPLAY(widget);
>> -    SpiceDisplayPrivate *d = display->priv;
>> -    g_return_val_if_fail(d != NULL, false);
>> -
>> -    if (d->mark == 0 || d->data == NULL ||
>> -        d->area.width == 0 || d->area.height == 0)
>> -        return false;
>> -    g_return_val_if_fail(d->ximage != NULL, false);
>> -
>> -    spicex_expose_event(display, expose);
>> -    update_mouse_pointer(display);
>> -
>> -    return true;
>> -}
>> -#endif
>>
>>  /* ---------------------------------------------------------------- */
>>  typedef enum {
>> @@ -1855,11 +1831,7 @@ static void spice_display_class_init(SpiceDisplayClass *klass)
>>      GObjectClass *gobject_class = G_OBJECT_CLASS(klass);
>>      GtkWidgetClass *gtkwidget_class = GTK_WIDGET_CLASS(klass);
>>
>> -#if GTK_CHECK_VERSION (2, 91, 0)
>>      gtkwidget_class->draw = draw_event;
>> -#else
>> -    gtkwidget_class->expose_event = expose_event;
>> -#endif
>>      gtkwidget_class->key_press_event = key_event;
>>      gtkwidget_class->key_release_event = key_event;
>>      gtkwidget_class->enter_notify_event = enter_event;
>> @@ -2213,7 +2185,6 @@ static void primary_create(SpiceChannel *channel, gint format,
>>
>>      d->format = format;
>>      d->stride = stride;
>> -    d->shmid = shmid;
>>      d->width = width;
>>      d->height = height;
>>      d->data_origin = d->data = imgdata;
>> @@ -2230,7 +2201,6 @@ static void primary_destroy(SpiceChannel *channel, gpointer data)
>>      d->width  = 0;
>>      d->height = 0;
>>      d->stride = 0;
>> -    d->shmid  = 0;
>>      d->data = NULL;
>>      d->data_origin = NULL;
>>      set_monitor_ready(display, false);
>> diff --git a/vapi/Makefile.am b/vapi/Makefile.am
>> index c66b1db..aaab848 100644
>> --- a/vapi/Makefile.am
>> +++ b/vapi/Makefile.am
>> @@ -10,12 +10,11 @@ dist_vapi_DATA =                                    \
>>         $(NULL)
>>
>>  if WITH_GTK
>> -vapi_DATA += spice-client-gtk-$(SPICE_GTK_API_VERSION).vapi
>> -dist_vapi_DATA += spice-client-gtk-$(SPICE_GTK_API_VERSION).deps
>> +vapi_DATA += spice-client-gtk-3.0.vapi
>> +dist_vapi_DATA += spice-client-gtk-3.0.deps
>>  endif
>>
>>  EXTRA_DIST =                                           \
>> -       spice-client-gtk-2.0.deps                       \
>>         spice-client-gtk-3.0.deps                       \
>>         SpiceClientGLib-2.0.metadata                    \
>>         $(NULL)
>> @@ -29,13 +28,13 @@ spice-client-glib-2.0.vapi: $(top_builddir)/src/SpiceClientGLib-2.0.gir SpiceCli
>>                 --pkg gio-2.0                   \
>>                 $<
>>
>> -spice-client-gtk-$(SPICE_GTK_API_VERSION).vapi: $(top_builddir)/src/SpiceClientGtk-$(SPICE_GTK_API_VERSION).gir spice-client-glib-2.0.vapi
>> +spice-client-gtk-3.0.vapi: $(top_builddir)/src/SpiceClientGtk-3.0.gir spice-client-glib-2.0.vapi
>>         $(AM_V_GEN)$(VAPIGEN) -q                                        \
>>                 --vapidir=$(builddir)                                   \
>>                 --girdir=$(top_builddir)/src                            \
>>                 --pkg spice-client-glib-2.0                             \
>> -               --pkg gtk+-$(GTK_API_VERSION)                           \
>> -               --library spice-client-gtk-$(SPICE_GTK_API_VERSION)     \
>> +               --pkg gtk+-3.0                                          \
>> +               --library spice-client-gtk-3.0                          \
>>                 $<
>>
>>  -include $(top_srcdir)/git.mk
>> --
>> 2.5.0
>>
>> _______________________________________________
>> Spice-devel mailing list
>> Spice-devel at lists.freedesktop.org
>> https://lists.freedesktop.org/mailman/listinfo/spice-devel



-- 
Marc-André Lureau


More information about the Spice-devel mailing list