Git-Url: 
http://git.frugalware.org/gitweb/gitweb.cgi?p=xfcetesting.git;a=commitdiff;h=dd4b625bd538cd1ebb9376c3b2207d315470745b

commit dd4b625bd538cd1ebb9376c3b2207d315470745b
Author: bouleetbil <bouleet...@frogdev.info>
Date:   Mon Feb 28 22:40:41 2011 +0100

gtk-vnc-0.4.3-1-x86_64

*Version bump

diff --git a/source/xlib-extra/gtk-vnc/FrugalBuild 
b/source/xlib-extra/gtk-vnc/FrugalBuild
index 936ecb0..e5bc077 100644
--- a/source/xlib-extra/gtk-vnc/FrugalBuild
+++ b/source/xlib-extra/gtk-vnc/FrugalBuild
@@ -2,8 +2,8 @@
# Maintainer: bouleetbil <bouleet...@frogdev.info>

pkgname=gtk-vnc
-pkgver=0.4.2
-pkgrel=9
+pkgver=0.4.3
+pkgrel=1
pkgdesc="VNC viewer wigdet for GTK"
depends=('gtk+2>=2.20.0-2' 'libxau' 'libxdmcp' 'freetype2' 'gnutls' 'libgcrypt' 
'libxdamage' \
'libxext' 'libxml2>=2.7.8' 'pygtk' 'cyrus-sasl')
@@ -11,19 +11,10 @@ rodepends=('gvnc-devel')
makedepends=('intltool' 'perl-text-csv' 'libtool')
_F_gnome_devel="y"
Finclude gnome
-source=($source frambuffer.diff gdk3.diff motion.diff tlsShutdown.diff \
-       gtk3.diff pixmap.diff unref.diff)
groups=('xlib-extra')
archs=('i686' 'ppc' 'x86_64')
Fconfopts="${Fconfopts[@]} --with-coroutine=gthread --enable-introspection=yes 
--enable-plugin=no"
-sha1sums=('8aa76bbb6a47951d4692ebb1ac241fa7b3bda2ef' \
-          'd9946a3b70b1d422b5f20adb15cafccd864211e3' \
-          '628120a888a75ddbefeb4a62389baead71b97c8c' \
-          'd9fe581576afbe199a5f86e657699381f37ef390' \
-          '5f20b95c0d88d596dac638d5050ad5b2331174e1' \
-          '4acc3447e42b48e02570b7a73ce645241b52015a' \
-          'b88a1360c916f5cd5ad0b670ede68b5afd9fd50a' \
-          '50f29841f6c00b451897d4aece69ace253189154')
+sha1sums=('4e43d8fd68e5809b0769e26f7a7ac94d45315864')
unset MAKEFLAGS

subpkgs=('gtk3-vnc')
diff --git a/source/xlib-extra/gtk-vnc/frambuffer.diff 
b/source/xlib-extra/gtk-vnc/frambuffer.diff
deleted file mode 100644
index 815bd9f..0000000
--- a/source/xlib-extra/gtk-vnc/frambuffer.diff
+++ /dev/null
@@ -1,78 +0,0 @@
-commit f3fc5e57a78d4be9872f1394f697b9929873a737
-Author: Daniel P. Berrange <d...@berrange.com>
-Date:   Tue Nov 23 22:59:37 2010 +0000
-
-    Fix framebuffer update boundary check
-
-    Framebuffer boundary checks need to take into account offset,
-    in addition to width/height
-
-    * src/vncconnection.c: Fix boundary check
-
-diff --git a/src/vncconnection.c b/src/vncconnection.c
-index 433256a..165a5f1 100644
---- a/src/vncconnection.c
-+++ b/src/vncconnection.c
-@@ -2653,13 +2653,14 @@ static void vnc_connection_ext_key_event(VncConnection 
*conn)
-
-
- static gboolean vnc_connection_validate_boundary(VncConnection *conn,
-+                                               guint16 x, guint16 y,
-                                                guint16 width, guint16 height)
- {
-       VncConnectionPrivate *priv = conn->priv;
-
--      if (width > priv->width || height > priv->height) {
--              VNC_DEBUG("Framebuffer update %dx%d outside boundary %dx%d",
--                        width, height, priv->width, priv->height);
-+      if ((x + width) > priv->width || (y + height) > priv->height) {
-+              VNC_DEBUG("Framebuffer update %dx%d at %d,%d outside boundary 
%dx%d",
-+                        width, height, x, y, priv->width, priv->height);
-               priv->has_error = TRUE;
-       }
-
-@@ -2681,37 +2682,37 @@ static gboolean 
vnc_connection_framebuffer_update(VncConnection *conn, gint32 et
-
-       switch (etype) {
-       case VNC_CONNECTION_ENCODING_RAW:
--              if (!vnc_connection_validate_boundary(conn, width, height))
-+              if (!vnc_connection_validate_boundary(conn, x, y, width, 
height))
-                       break;
-               vnc_connection_raw_update(conn, x, y, width, height);
-               vnc_connection_update(conn, x, y, width, height);
-               break;
-       case VNC_CONNECTION_ENCODING_COPY_RECT:
--              if (!vnc_connection_validate_boundary(conn, width, height))
-+              if (!vnc_connection_validate_boundary(conn, x, y, width, 
height))
-                       break;
-               vnc_connection_copyrect_update(conn, x, y, width, height);
-               vnc_connection_update(conn, x, y, width, height);
-               break;
-       case VNC_CONNECTION_ENCODING_RRE:
--              if (!vnc_connection_validate_boundary(conn, width, height))
-+              if (!vnc_connection_validate_boundary(conn, x, y, width, 
height))
-                       break;
-               vnc_connection_rre_update(conn, x, y, width, height);
-               vnc_connection_update(conn, x, y, width, height);
-               break;
-       case VNC_CONNECTION_ENCODING_HEXTILE:
--              if (!vnc_connection_validate_boundary(conn, width, height))
-+              if (!vnc_connection_validate_boundary(conn, x, y, width, 
height))
-                       break;
-               vnc_connection_hextile_update(conn, x, y, width, height);
-               vnc_connection_update(conn, x, y, width, height);
-               break;
-       case VNC_CONNECTION_ENCODING_ZRLE:
--              if (!vnc_connection_validate_boundary(conn, width, height))
-+              if (!vnc_connection_validate_boundary(conn, x, y, width, 
height))
-                       break;
-               vnc_connection_zrle_update(conn, x, y, width, height);
-               vnc_connection_update(conn, x, y, width, height);
-               break;
-       case VNC_CONNECTION_ENCODING_TIGHT:
--              if (!vnc_connection_validate_boundary(conn, width, height))
-+              if (!vnc_connection_validate_boundary(conn, x, y, width, 
height))
-                       break;
-               vnc_connection_tight_update(conn, x, y, width, height);
-               vnc_connection_update(conn, x, y, width, height);
-
diff --git a/source/xlib-extra/gtk-vnc/gdk3.diff 
b/source/xlib-extra/gtk-vnc/gdk3.diff
deleted file mode 100644
index 65d31dd..0000000
--- a/source/xlib-extra/gtk-vnc/gdk3.diff
+++ /dev/null
@@ -1,256 +0,0 @@
-commit d18c74e37dc280432124ab49e85a26af8bb2a2e0
-Author: Daniel P. Berrange <berra...@redhat.com>
-Date:   Thu Jan 13 16:16:32 2011 +0000
-
-    Refactor keymap handling to cope with multiple GDK backends
-
-    In GTK3 it is possible to have multiple GDK backends present.
-    The vncdisplaykeymap code needs a minor refactoring to cope
-    with this enhancement. The refactoring also trivially maintains
-    GTK2 compat
-
-diff --git a/src/vncdisplaykeymap.c b/src/vncdisplaykeymap.c
-index 4ad4732..0ab9bc1 100644
---- a/src/vncdisplaykeymap.c
-+++ b/src/vncdisplaykeymap.c
-@@ -54,7 +54,7 @@ static struct {
-
- static unsigned int ref_count_for_untranslated_keys = 0;
-
--#if defined(GDK_WINDOWING_X11)
-+#ifdef GDK_WINDOWING_X11
- #include <gdk/gdkx.h>
- #include <X11/XKBlib.h>
- #include <stdbool.h>
-@@ -69,15 +69,39 @@ static unsigned int ref_count_for_untranslated_keys = 0;
- /* Xorg Cygwin aka XWin (offset + mangled XT keycodes) */
- #include "vncdisplaykeymap_xorgxwin2rfb.c"
-
--#ifndef GDK_DISPLAY
--#define GDK_DISPLAY() GDK_DISPLAY_XDISPLAY(gdk_display_get_default())
-+/* Gtk2 compat */
-+#ifndef GDK_IS_X11_DISPLAY
-+#define GDK_IS_X11_DISPLAY(dpy) 1
- #endif
-+#endif
-+
-+#ifdef GDK_WINDOWING_WIN32
-+/* Win32 native virtual keycodes */
-+#include "vncdisplaykeymap_win322rfb.c"
-+
-+/* Gtk2 compat */
-+#ifndef GDK_IS_WIN32_DISPLAY
-+#define GDK_IS_WIN32_DISPLAY(dpy) 1
-+#endif
-+#endif
-+
-+#ifdef GDK_WINDOWING_QUARTZ
-+/* OS-X native keycodes */
-+#include "vncdisplaykeymap_osx2rfb.c"
-+
-+/* Gtk2 compat */
-+#ifndef GDK_IS_QUARTZ_DISPLAY
-+#define GDK_IS_QUARTZ_DISPLAY(dpy) 1
-+#endif
-+#endif
-+
-+#ifdef GDK_WINDOWING_X11
-
- #define STRPREFIX(a,b) (strncmp((a),(b),strlen((b))) == 0)
-
--static gboolean check_for_xwin(void)
-+static gboolean check_for_xwin(GdkDisplay *dpy)
- {
--      char *vendor = ServerVendor(GDK_DISPLAY());
-+      char *vendor = ServerVendor(gdk_x11_display_get_xdisplay(dpy));
-
-       if (strstr(vendor, "Cygwin/X"))
-               return TRUE;
-@@ -85,12 +109,13 @@ static gboolean check_for_xwin(void)
-       return FALSE;
- }
-
--static gboolean check_for_xquartz(void)
-+static gboolean check_for_xquartz(GdkDisplay *dpy)
- {
-       int nextensions;
-       int i;
-       gboolean match = FALSE;
--      char **extensions = XListExtensions(GDK_DISPLAY(), &nextensions);
-+      char **extensions = XListExtensions(gdk_x11_display_get_xdisplay(dpy),
-+                                          &nextensions);
-       for (i = 0 ; extensions != NULL && i < nextensions ; i++) {
-               if (strcmp(extensions[i], "Apple-WM") == 0 ||
-                   strcmp(extensions[i], "Apple-DRI") == 0)
-@@ -101,98 +126,94 @@ static gboolean check_for_xquartz(void)
-
-       return match;
- }
-+#endif
-
- const guint16 const *vnc_display_keymap_gdk2rfb_table(size_t *maplen)
- {
--      XkbDescPtr desc;
--      const gchar *keycodes = NULL;
--
--      /* There is no easy way to determine what X11 server
--       * and platform & keyboard driver is in use. Thus we
--       * do best guess heuristics.
--       *
--       * This will need more work for people with other
--       * X servers..... patches welcomed.
--       */
--
--      desc = XkbGetKeyboard(GDK_DISPLAY(), XkbGBN_AllComponentsMask,
--                            XkbUseCoreKbd);
--      if (desc) {
--              if (desc->names) {
--                      keycodes = 
gdk_x11_get_xatom_name(desc->names->keycodes);
--                      if (!keycodes)
--                              g_warning("could not lookup keycode name");
-+      GdkDisplay *dpy = gdk_display_get_default();
-+
-+#ifdef GDK_WINDOWING_X11
-+      if (GDK_IS_X11_DISPLAY(dpy)) {
-+              XkbDescPtr desc;
-+              const gchar *keycodes = NULL;
-+
-+              /* There is no easy way to determine what X11 server
-+               * and platform & keyboard driver is in use. Thus we
-+               * do best guess heuristics.
-+               *
-+               * This will need more work for people with other
-+               * X servers..... patches welcomed.
-+               */
-+
-+              desc = XkbGetKeyboard(gdk_x11_display_get_xdisplay(dpy),
-+                                    XkbGBN_AllComponentsMask,
-+                                    XkbUseCoreKbd);
-+              if (desc) {
-+                      if (desc->names) {
-+                              keycodes = 
gdk_x11_get_xatom_name(desc->names->keycodes);
-+                              if (!keycodes)
-+                                      g_warning("could not lookup keycode 
name");
-+                      }
-+                      XkbFreeClientMap(desc, XkbGBN_AllComponentsMask, True);
-               }
--              XkbFreeClientMap(desc, XkbGBN_AllComponentsMask, True);
--      }
-
--      if (check_for_xwin()) {
--              VNC_DEBUG("Using xwin keycode mapping");
--              *maplen = G_N_ELEMENTS(keymap_xorgxwin2rfb);
--              return keymap_xorgxwin2rfb;
--      } else if (check_for_xquartz()) {
--              VNC_DEBUG("Using xquartz keycode mapping");
--              *maplen = G_N_ELEMENTS(keymap_xorgxquartz2rfb);
--              return keymap_xorgxquartz2rfb;
--      } else if (keycodes && STRPREFIX(keycodes, "evdev_")) {
--              VNC_DEBUG("Using evdev keycode mapping");
--              *maplen = G_N_ELEMENTS(keymap_xorgevdev2rfb);
--              return keymap_xorgevdev2rfb;
--      } else if (keycodes && STRPREFIX(keycodes, "xfree86_")) {
--              VNC_DEBUG("Using xfree86 keycode mapping");
--              *maplen = G_N_ELEMENTS(keymap_xorgkbd2rfb);
--              return keymap_xorgkbd2rfb;
--      } else {
--               g_warning("Unknown keycode mapping '%s'.\n"
--                       "Please report to gtk-vnc-l...@gnome.org\n"
--                         "including the following information:\n"
--                         "\n"
--                         "  - Operating system\n"
--                         "  - GTK build\n"
--                         "  - X11 Server\n"
--                         "  - xprop -root\n"
--                         "  - xdpyinfo\n",
--                       keycodes);
--               return NULL;
-+              if (check_for_xwin(dpy)) {
-+                      VNC_DEBUG("Using xwin keycode mapping");
-+                      *maplen = G_N_ELEMENTS(keymap_xorgxwin2rfb);
-+                      return keymap_xorgxwin2rfb;
-+              } else if (check_for_xquartz(dpy)) {
-+                      VNC_DEBUG("Using xquartz keycode mapping");
-+                      *maplen = G_N_ELEMENTS(keymap_xorgxquartz2rfb);
-+                      return keymap_xorgxquartz2rfb;
-+              } else if (keycodes && STRPREFIX(keycodes, "evdev_")) {
-+                      VNC_DEBUG("Using evdev keycode mapping");
-+                      *maplen = G_N_ELEMENTS(keymap_xorgevdev2rfb);
-+                      return keymap_xorgevdev2rfb;
-+              } else if (keycodes && STRPREFIX(keycodes, "xfree86_")) {
-+                      VNC_DEBUG("Using xfree86 keycode mapping");
-+                      *maplen = G_N_ELEMENTS(keymap_xorgkbd2rfb);
-+                      return keymap_xorgkbd2rfb;
-+              } else {
-+                      g_warning("Unknown keycode mapping '%s'.\n"
-+                                "Please report to gtk-vnc-l...@gnome.org\n"
-+                                "including the following information:\n"
-+                                "\n"
-+                                "  - Operating system\n"
-+                                "  - GDK build\n"
-+                                "  - X11 Server\n"
-+                                "  - xprop -root\n"
-+                                "  - xdpyinfo\n",
-+                                keycodes);
-+                      return NULL;
-+              }
-       }
--}
--
--#elif defined(GDK_WINDOWING_WIN32)
--/* Win32 native virtual keycodes */
--#include "vncdisplaykeymap_win322rfb.c"
--
--const guint16 const *vnc_display_keymap_gdk2rfb_table(size_t *maplen)
--{
--      VNC_DEBUG("Using Win32 virtual keycode mapping");
--      *maplen = sizeof(keymap_win322rfb);
--      return keymap_win322rfb;
--}
--
--#elif defined(GDK_WINDOWING_QUARTZ)
--/* OS-X native keycodes */
--#include "vncdisplaykeymap_osx2rfb.c"
--
--const guint16 const *vnc_display_keymap_gdk2rfb_table(size_t *maplen)
--{
--      VNC_DEBUG("Using OS-X virtual keycode mapping");
--      *maplen = sizeof(keymap_osx2rfb);
--      return keymap_osx2rfb;
--}
-+#endif
-
-+#ifdef GDK_WINDOWING_WIN32
-+      if (GDK_IS_WIN32_DISPLAY(dpy)) {
-+              VNC_DEBUG("Using Win32 virtual keycode mapping");
-+              *maplen = sizeof(keymap_win322rfb);
-+              return keymap_win322rfb;
-+      }
-+#endif
-
--#else
-+#ifdef GDK_WINDOWING_QUARTZ
-+      if (GDK_IS_QUARTZ_DISPLAY(dpy)) {
-+              VNC_DEBUG("Using OS-X virtual keycode mapping");
-+              *maplen = sizeof(keymap_osx2rfb);
-+              return keymap_osx2rfb;
-+      }
-+#endif
-
--const guint16 const *vnc_display_keymap_gdk2rfb_table(size_t *maplen)
--{
-       g_warning("Unsupported GDK Windowing platform.\n"
-+                "Disabling extended keycode tables.\n"
-                 "Please report to gtk-vnc-l...@gnome.org\n"
-                 "including the following information:\n"
-                 "\n"
-                 "  - Operating system\n"
--                "  - GTK Windowing system build\n");
-+                "  - GDK Windowing system build\n");
-       return NULL;
- }
--#endif
-
- guint16 vnc_display_keymap_gdk2rfb(const guint16 const *keycode_map,
-                                  size_t keycode_maplen,
-
diff --git a/source/xlib-extra/gtk-vnc/gtk3.diff 
b/source/xlib-extra/gtk-vnc/gtk3.diff
deleted file mode 100644
index 2e21cef..0000000
--- a/source/xlib-extra/gtk-vnc/gtk3.diff
+++ /dev/null
@@ -1,55 +0,0 @@
-commit d2ad64e8fc13817f8fd7bfada5daf44230235446
-Author: Daniel P. Berrange <berra...@redhat.com>
-Date:   Thu Dec 9 17:48:28 2010 +0000
-
-    Adapt to avoid further Gtk3 changes
-
-    More gdk_drawable calls have gone away in Gtk3. Adapt code to avoid
-    needing to use them, by calling gtk_widget APIs instead.
-
-diff --git a/src/vncdisplay.c b/src/vncdisplay.c
-index 33d2623..deab4d8 100644
---- a/src/vncdisplay.c
-+++ b/src/vncdisplay.c
-@@ -139,10 +139,6 @@ static inline void gdk_drawable_get_size(GdkWindow *w, 
gint *ww, gint *wh)
-       *wh = gdk_window_get_height(w);
- }
-
--#define gdk_drawable_get_display(w) gdk_window_get_display(w)
--#define gdk_drawable_get_screen(w) gdk_window_get_screen(w)
--#define gdk_drawable_get_visual(w) gdk_window_get_visual(w)
--
- #define GtkObject GtkWidget
- #define GtkObjectClass GtkWidgetClass
- #define GTK_OBJECT_CLASS(c) GTK_WIDGET_CLASS(c)
-@@ -629,9 +625,8 @@ static gboolean motion_event(GtkWidget *widget, 
GdkEventMotion *motion)
-
-       /* Next adjust the real client pointer */
-       if (!priv->absolute) {
--              GdkDrawable *drawable = 
GDK_DRAWABLE(gtk_widget_get_window(widget));
--              GdkDisplay *display = gdk_drawable_get_display(drawable);
--              GdkScreen *screen = gdk_drawable_get_screen(drawable);
-+              GdkDisplay *display = gtk_widget_get_display(widget);
-+              GdkScreen *screen = gtk_widget_get_screen(widget);
-               int x = (int)motion->x_root;
-               int y = (int)motion->y_root;
-
-@@ -1009,7 +1004,7 @@ static void on_pixel_format_changed(VncConnection *conn 
G_GNUC_UNUSED,
- static gboolean vnc_display_set_preferred_pixel_format(VncDisplay *display)
- {
-       VncDisplayPrivate *priv = display->priv;
--      GdkVisual *v =  
gdk_drawable_get_visual(gtk_widget_get_window(GTK_WIDGET(display)));
-+      GdkVisual *v =  gtk_widget_get_visual(GTK_WIDGET(display));
-       VncPixelFormat fmt;
-       const VncPixelFormat *currentFormat;
-
-@@ -1260,7 +1255,7 @@ static void on_cursor_changed(VncConnection *conn 
G_GNUC_UNUSED,
-       }
-
-       if (cursor) {
--              GdkDisplay *display = 
gdk_drawable_get_display(GDK_DRAWABLE(gtk_widget_get_window(GTK_WIDGET(obj))));
-+              GdkDisplay *display = gtk_widget_get_display(GTK_WIDGET(obj));
-               GdkPixbuf *pixbuf = 
gdk_pixbuf_new_from_data(vnc_cursor_get_data(cursor),
-                                                            GDK_COLORSPACE_RGB,
-                                                            TRUE, 8,
-
diff --git a/source/xlib-extra/gtk-vnc/motion.diff 
b/source/xlib-extra/gtk-vnc/motion.diff
deleted file mode 100644
index f861486..0000000
--- a/source/xlib-extra/gtk-vnc/motion.diff
+++ /dev/null
@@ -1,36 +0,0 @@
-commit f23f0ebf1b659208d5036e10ab1f32249a2e1a4c
-Author: Daniel P. Berrange <d...@berrange.com>
-Date:   Mon Nov 22 21:18:29 2010 +0000
-
-    Avoid crash in motion event & vnc_display_get_pixbuf
-
-    If a mouse event occurs before a connection completes setup
-    priv->fb will be NULL and a crash can occur. Likewise if
-    vnc_display_get_pixbuf() is called before priv->fb is set,
-    then a crash occurs. Add checks for NULL in both cases
-
-diff --git a/src/vncdisplay.c b/src/vncdisplay.c
-index 55fbcf4..0b7e800 100644
---- a/src/vncdisplay.c
-+++ b/src/vncdisplay.c
-@@ -557,6 +557,9 @@ static gboolean motion_event(GtkWidget *widget, 
GdkEventMotion *motion)
-       if (priv->conn == NULL || !vnc_connection_is_initialized(priv->conn))
-               return FALSE;
-
-+      if (!priv->fb)
-+              return FALSE;
-+
-       fbw = vnc_framebuffer_get_width(VNC_FRAMEBUFFER(priv->fb));
-       fbh = vnc_framebuffer_get_height(VNC_FRAMEBUFFER(priv->fb));
-
-@@ -2050,6 +2053,9 @@ GdkPixbuf *vnc_display_get_pixbuf(VncDisplay *obj)
-           !vnc_connection_is_initialized(priv->conn))
-               return NULL;
-
-+      if (!priv->fb)
-+              return NULL;
-+
-       fb = VNC_FRAMEBUFFER(priv->fb);
-       surface = vnc_cairo_framebuffer_get_surface(priv->fb);
-       content = cairo_surface_get_content(surface) | CAIRO_CONTENT_COLOR;
-
diff --git a/source/xlib-extra/gtk-vnc/pixmap.diff 
b/source/xlib-extra/gtk-vnc/pixmap.diff
deleted file mode 100644
index 5c9c54c..0000000
--- a/source/xlib-extra/gtk-vnc/pixmap.diff
+++ /dev/null
@@ -1,128 +0,0 @@
-commit 20a8875df00d7e6d918fa7b94aca2baebe034cb5
-Author: Daniel P. Berrange <berra...@redhat.com>
-Date:   Mon Nov 29 16:12:53 2010 +0000
-
-    Re-introduce a server side Pixmap to cache framebuffer
-
-    Despite use of clipping during drawing, rendering directly
-    from the client side cairo image, to the window incurred
-    a serious performance penalty for some users' X servers.
-    Re-introduce a server side copy of the VNC desktop using
-    a cairo surface, backed by an X Pixmap. This uses cairo
-    APIs directly, avoiding any need for GdkPixmap.
-
-diff --git a/src/vncdisplay.c b/src/vncdisplay.c
-index 0b7e800..33d2623 100644
---- a/src/vncdisplay.c
-+++ b/src/vncdisplay.c
-@@ -50,6 +50,7 @@ struct _VncDisplayPrivate
-
-       VncConnection *conn;
-       VncCairoFramebuffer *fb;
-+      cairo_surface_t *fbCache; /* Cache on server display */
-
-       VncDisplayDepthColor depth;
-
-@@ -282,6 +283,32 @@ static GdkCursor *create_null_cursor(void)
-       return cursor;
- }
-
-+
-+static void setup_surface_cache(VncDisplay *dpy, cairo_t *crWin, int w, int h)
-+{
-+      VncDisplayPrivate *priv = dpy->priv;
-+      cairo_surface_t *win = cairo_get_target(crWin);
-+      cairo_t *crCache;
-+
-+      if (priv->fbCache)
-+              return;
-+
-+      /* Creates a Pixmap on the X11 server matching the Window */
-+      priv->fbCache = cairo_surface_create_similar(win,
-+                                                   CAIRO_CONTENT_COLOR,
-+                                                   w, h);
-+      crCache = cairo_create(priv->fbCache);
-+
-+      /* Copy our local framebuffer contents to the Pixmap */
-+      cairo_set_source_surface(crCache,
-+                               vnc_cairo_framebuffer_get_surface(priv->fb),
-+                               0,
-+                               0);
-+      cairo_paint(crCache);
-+
-+      cairo_destroy(crCache);
-+}
-+
- static gboolean draw_event(GtkWidget *widget, cairo_t *cr)
- {
-       VncDisplay *obj = VNC_DISPLAY(widget);
-@@ -293,6 +320,8 @@ static gboolean draw_event(GtkWidget *widget, cairo_t *cr)
-       if (priv->fb) {
-               fbw = vnc_framebuffer_get_width(VNC_FRAMEBUFFER(priv->fb));
-               fbh = vnc_framebuffer_get_height(VNC_FRAMEBUFFER(priv->fb));
-+
-+              setup_surface_cache(obj, cr, fbw, fbh);
-       }
-
-       gdk_drawable_get_size(gtk_widget_get_window(widget), &ww, &wh);
-@@ -327,12 +356,12 @@ static gboolean draw_event(GtkWidget *widget, cairo_t 
*cr)
-                       sy = (double)wh / (double)fbh;
-                       cairo_scale(cr, sx, sy);
-                       cairo_set_source_surface(cr,
--                                               
vnc_cairo_framebuffer_get_surface(priv->fb),
-+                                               priv->fbCache,
-                                                0,
-                                                0);
-               } else {
-                       cairo_set_source_surface(cr,
--                                               
vnc_cairo_framebuffer_get_surface(priv->fb),
-+                                               priv->fbCache,
-                                                mx,
-                                                my);
-               }
-@@ -848,6 +877,22 @@ static void on_framebuffer_update(VncConnection *conn 
G_GNUC_UNUSED,
-
-       gdk_drawable_get_size(gtk_widget_get_window(widget), &ww, &wh);
-
-+      /* If we have a pixmap, update the region which changed.
-+       * If we don't have a pixmap, the entire thing will be
-+       * created & rendered during the drawing handler
-+       */
-+      if (priv->fbCache) {
-+              cairo_t *cr = cairo_create(priv->fbCache);
-+              cairo_surface_t *surface = 
vnc_cairo_framebuffer_get_surface(priv->fb);
-+
-+              cairo_rectangle(cr, x, y, w, h);
-+              cairo_clip(cr);
-+              cairo_set_source_surface(cr, surface, 0, 0);
-+              cairo_paint(cr);
-+
-+              cairo_destroy(cr);
-+      }
-+
-       if (priv->allow_scaling) {
-               double sx, sy;
-
-@@ -905,6 +950,10 @@ static void do_framebuffer_init(VncDisplay *obj,
-               g_object_unref(priv->fb);
-               priv->fb = NULL;
-       }
-+      if (priv->fbCache) {
-+              cairo_surface_destroy(priv->fbCache);
-+              priv->fbCache = NULL;
-+      }
-
-       if (priv->null_cursor == NULL) {
-               priv->null_cursor = create_null_cursor();
-@@ -1496,6 +1545,10 @@ static void vnc_display_finalize (GObject *obj)
-               g_object_unref(priv->fb);
-               priv->fb = NULL;
-       }
-+      if (priv->fbCache) {
-+              cairo_surface_destroy(priv->fbCache);
-+              priv->fbCache = NULL;
-+      }
-
-       if (priv->null_cursor) {
-               gdk_cursor_unref (priv->null_cursor);
-
diff --git a/source/xlib-extra/gtk-vnc/tlsShutdown.diff 
b/source/xlib-extra/gtk-vnc/tlsShutdown.diff
deleted file mode 100644
index 8050a4a..0000000
--- a/source/xlib-extra/gtk-vnc/tlsShutdown.diff
+++ /dev/null
@@ -1,62 +0,0 @@
-commit 5760a2a28d85cb79e39063cfd8ee8aee975caf24
-Author: Daniel P. Berrange <d...@berrange.com>
-Date:   Mon Nov 22 21:44:56 2010 +0000
-
-    Avoid crash in TLS cleanup code on shutdown
-
-    The gnutls_bye() method may try to send data on the socket todo
-    graceful TLS shutdown. The priv->sock variable is possibly
-    already NULL at this point if the close was triggered via the
-    vnc_connection_shutdown() method. Change the latter so that
-    it only calls g_socket_close, not actually free'ing the
-    priv->sock object immediately. Also put sanity check code in
-    the TLS push/pull functions to catch future bugs in this area
-
-diff --git a/src/vncconnection.c b/src/vncconnection.c
-index 4a0c53c..433256a 100644
---- a/src/vncconnection.c
-+++ b/src/vncconnection.c
-@@ -939,6 +939,12 @@ static ssize_t 
vnc_connection_tls_push(gnutls_transport_ptr_t transport,
-       int ret;
-       GError *error = NULL;
-
-+      if (!priv->sock) {
-+              VNC_DEBUG("Unexpected TLS push on closed socket");
-+              errno = EBADF;
-+              return -1;
-+      }
-+
-       ret = g_socket_send(priv->sock, data, len, NULL, &error);
-       if (ret < 0) {
-               if (error) {
-@@ -962,6 +968,12 @@ static ssize_t 
vnc_connection_tls_pull(gnutls_transport_ptr_t transport,
-       int ret;
-       GError *error = NULL;
-
-+      if (!priv->sock) {
-+              VNC_DEBUG("Unexpected TLS pull on closed socket");
-+              errno = EBADF;
-+              return -1;
-+      }
-+
-       ret = g_socket_receive(priv->sock, data, len, NULL, &error);
-       if (ret < 0) {
-               if (error) {
-@@ -4461,11 +4473,12 @@ void vnc_connection_shutdown(VncConnection *conn)
-       VNC_DEBUG("Waking up couroutine to shutdown gracefully");
-       g_io_wakeup(&priv->wait);
-
--      if (priv->sock) {
-+      /* Closing the socket triggers an I/O error in the
-+       * event loop resulting...eventually.. in a call
-+       * to vnc_connection_close for full cleanup
-+       */
-+      if (priv->sock)
-               g_socket_close(priv->sock, NULL);
--              g_object_unref(priv->sock);
--              priv->sock = NULL;
--      }
- }
-
- gboolean vnc_connection_is_open(VncConnection *conn)
-
diff --git a/source/xlib-extra/gtk-vnc/unref.diff 
b/source/xlib-extra/gtk-vnc/unref.diff
deleted file mode 100644
index 3b2b148..0000000
--- a/source/xlib-extra/gtk-vnc/unref.diff
+++ /dev/null
@@ -1,43 +0,0 @@
-commit 968968c9cf705f5bc96764399ea17a27a454c1c5
-Author: Daniel P. Berrange <berra...@redhat.com>
-Date:   Tue Dec 14 12:41:01 2010 +0000
-
-    Fix leak of GSource objects which causes performance problems
-
-    The GLib event loop scales poorly as the number of GSource objects
-    increases. A missing unref on the GSource objects used in the VNC
-    connection meant that many unused instances accumulated, slowing
-    down the event loop processing.
-
-    * src/vncconnection.c: Unref all GSource objects
-
-diff --git a/src/vncconnection.c b/src/vncconnection.c
-index 165a5f1..51b8b8d 100644
---- a/src/vncconnection.c
-+++ b/src/vncconnection.c
-@@ -234,6 +234,7 @@ static GIOCondition g_io_wait(GSocket *sock, GIOCondition 
cond)
-       g_source_set_callback(src, (GSourceFunc)g_io_wait_helper, 
coroutine_self(), NULL);
-       g_source_attach(src, NULL);
-       ret = coroutine_yield(NULL);
-+      g_source_unref(src);
-       return *ret;
- }
-
-@@ -254,6 +255,7 @@ static GIOCondition g_io_wait_interruptable(struct 
wait_queue *wait,
-       id = g_source_attach(src, NULL);
-       wait->waiting = TRUE;
-       ret = coroutine_yield(NULL);
-+      g_source_unref(src);
-       wait->waiting = FALSE;
-
-       if (ret == NULL) {
-@@ -334,6 +336,8 @@ static gboolean g_condition_wait(g_condition_wait_func 
func, gpointer data)
-       g_source_attach(src, NULL);
-       g_source_set_callback(src, g_condition_wait_helper, coroutine_self(), 
NULL);
-       coroutine_yield(NULL);
-+      g_source_unref(src);
-+
-       return TRUE;
- }
-
-
_______________________________________________
Frugalware-git mailing list
Frugalware-git@frugalware.org
http://frugalware.org/mailman/listinfo/frugalware-git

Reply via email to