2010-11-05 Daniel P. Berrange Update NEWS/README/configure.ac for 0.4.2 release * NEWS: List of new features/bugs fixed * README: Expand on GTK3 notes * configure.ac: Increase version number 2010-11-03 Daniel P. Berrange Fix data type of arg to cut-text signal in VncConnection The vnc-server-cut-text signal is marshalled by g_cclosure_marshal_VOID__STRING so its argument must be a 'const char *', not a 'GString *' datatype. * src/vncconnection.c: Fix data type for cut-text signal arg 2010-10-29 Carles Ferrando Added Catalan (Valencian) translation 2010-10-29 Kjartan Maraas Add nb Updated Norwegian bokmål translation. 2010-10-28 Daniel P. Berrange Enable building of a sub-RPM for gtk3 Allow a single RPM to build both gtk2 and gtk3 libraries * gtk-vnc.spec.in: Add gtk-vnc2 sub-RPM for gtk3 binaries Cope with building against newer gobject-introspection Newer gobject-introspection wants --symbol-prefix and --identifier-prefix instead of --strip-prefix. Test for such a version and use the new style options if appropriate * configure.ac: Check for new gobject introspection * src/Makefile.am: Adapt to g-ir-scanner flags Fix rendering artifacts when running in scaling mode The expose region was not large enough when running in scaling mode resulting in horizontal & vertical line artifacts when moving windows around on the virtual desktop. The previous fix used in Gtk2 was not sufficient for Gtk3, so change the fix to be entirely within the on_framebuffer_update handler * src/vncdisplay.c: Hack to fix rendering artifacts Add compat macro for GDK_DISPLAY The GDK_DISPLAY macro is removed in Gtk3, add a compatibility macro to allow build with Gtk2 and Gtk3 * src/vncdisplaykeymap.c: Add GDK_DISPLAY compat Add compatability code for GDK symbolic keys The GDK key macros were changed from GDK_ to GDK_KEY_ in GTK3. Add some compatibility #ifdefs to allow the same macros to be used on both Gtk2 and Gtk3. * examples/gvncviewer.c: Add GDK_KEY compat * src/vncdisplaykeymap.c: Add GDK_KEY compat 2010-10-27 Daniel P. Berrange Refactor drawing code to allow compatibility with Gtk3 In Gtk3, the expose_event is replaced with a 'draw' callback. This is provided with a 'cairo_t' context that is already configured with the clip region. Split the current expose_event into two parts, the first which creates a cairo_t based on the GdkEventExpose data, and the second method which draws to that cairo_t. The expose_event is conditionally disabled for Gtk3 builds, just leaving the draw method which works on Gtk2 and Gtk3 * src/vncdisplay.c: Pull drawing code out of expose_event method and disable expose_event on Gtk3 Remove the server side framebuffer cached in GdkPixmap For rendering efficiency a GdkPixmap was kept on the server duplicating what was in the old GdkImage object on the client side. The client was changed to use a cairo image surface. This can easily be rendered straight to the window and does not appear to have any performance degradation. Thus the GdkPixmap can be eliminated, avoiding the extra memory usage that entails * src/vncdisplay.c: Remove the GdkPixmap copy of the framebuffer Change cursor to use GDK_BLANK_CURSOR instead of a GdkPixmap The GdkPixmap class has been removed in GTK3. Since Gtk 2.16 there is a standard GDK_BLANK_CURSOR which can replace their usage and works across Gtk 2 and 3. * src/vncdisplay.c: Use GDK_BLANK_CURSOR 2010-10-25 Daniel P. Berrange Clear out more fields when closing a vnc connection Be more paranoid about reseting internal fields when closing a VNC connection, to prevent surprises when reconnecting * src/vncconnection.c: Clear out more fields when closing a connection Add strict bounds checking on framebuffer updates Some broken VNC servers send frame buffer updates which stray outside the boundary of the desktop. This will lead to memory corruption when rendering, so explicitly check for this and drop the VNC connection. * src/vncconnection.c: Add framebuffer update bounds checking 2010-10-21 Michal Novotny Introduce vnc_util_get_version() functions to get version this is the patch to allow user to get the GTK-VNC version using the vnc_util_get_version() and vnc_util_get_version_string() functions. Both the functions returns the version numbers based on the VERSION definition as created by autotools. Also, in version 2 (previous version) a new function called vnc_util_check_version() has been added to check whether the version of gtk-vnc is equal or higher to version requested. Function vnc_util_check_version() is defined as: gboolean vnc_util_check_version(gint major, gint minor, gint micro); The version of gtk-vnc is written in a "major.minor.micro" format and since the version number didn't change once the package was compiled version 3 is using VERSION_{MAJOR,MINOR,MICRO} constants being parsed and set by configure itself rather then parsing it at run-time. Then there are 2 version functions. The difference between those functions is that vnc_util_get_version() returns the gint value based on bit flags that have to be converted to get the version number in the string format. It's designed for further processing of the major, minor and release versions. If you want to get the version number only (e.g. to let the user know the GTK-VNC version he/she is using) you can use the second function called the vnc_util_get_version_string() which returns the string representation, e.g. 0.4.1. For the vnc_util_get_version() function the gint is being returned with setting up appropriate bits. You can get the versions using following formula: ver = vnc_util_get_version(); major = (ver >> 24) & 0xff; minor = (ver >> 16) & 0xff; micro = (ver >> 8 ) & 0xff; I think this patch could be useful for mainly for reason mentioned above. To check whether the user has at least 0.4.1 version of gtk-vnc using the vnc_util_check_version(0, 4, 1) is preferred. The vnc_util_get_version() function is a low-level function that could be useful to get the version number to be converted further. 2010-09-17 Guido Günther Don't close the socket before the coroutine shut down The connection shutdown needs the socket intact: 7 0xb6d38cdf in vnc_connection_tls_push (transport=0x8d84108, data=0x8df33c0, len=229) at vncconnection.c:942 8 0xb6b30437 in ?? () from /usr/lib/libgnutls.so.26 9 0xb6b2d12c in _gnutls_send_int () from /usr/lib/libgnutls.so.26 10 0xb6b4d682 in gnutls_alert_send () from /usr/lib/libgnutls.so.26 11 0xb6b2d662 in gnutls_bye () from /usr/lib/libgnutls.so.26 12 0xb6d3a620 in vnc_connection_close (conn=0x8d84108) at vncconnection.c:4323 so close the socket after the coroutine shutdown. Otherwise it fills the console with: (gvncviewer:11056): GLib-GIO-CRITICAL **: g_socket_send: assertion `G_IS_SOCKET (socket) && buffer != NULL' failed and gets stuck in an endless loop. 2010-09-17 Daniel P. Berrange Add missing keytable entry for KEY_KATAKANAHIRAGANA * src/keymaps.csv: Add XT code for KEY_KATAKANAHIRAGANA Fix auth subtype choosing logic in vncdisplay The method for choosing auth subtypes was rather flawed. Rewrite it to work correctly. Introduce an explicit list of vencrypt subtypes, since these are distinct from main subtypes. Improve debug logging in auth choice code. * src/vncdisplay.c: Fix auth type choice * src/vncconnection.c: Improve auth debugging & invoke correct signal for auth subtype choice 2010-09-08 Guido Günther Simplify logic in host open code The second else clause checks for conn_error != NULL twice and since we don't use it to determine the return value we can clear it unconditionally. * src/vncconnection.c: Simplify logic in vnc_connection_open_host_internal Clear error when trying next IP address If connecting to an IP address fails, the GError must be cleared before trying the next address, otherwise the error will be overwritten on next failure * src/vncconnection.c: Clear error when trying next IP addr 2010-09-02 Jonh Wendell Check if we have an error before reading or writing to the socket If, in the middle of an operation the widget is destroyed, we should check the has_error variable otherwise we can try to read/write from/to an invalid socket. Fix logic for removing unwanted encodings 2010-08-27 Daniel P. Berrange Fix files list in mingw32 specfile The files for gtk-vnc and gvnc were inverted in the mingw32 RPM specfile 2010-08-27 Marek Černocký Add Czech translation 2010-08-27 Jonh Wendell Check if we have a valid socket before trying to close it If we attempt to destroy the widget while VncConnection still is trying to connect to the host, then priv->sock is not valid yet. 2010-08-22 Shushi Kurose Updated Japanese translation. 2010-08-20 Håkon Enger Support Mac OS VNC authentication 2010-08-20 Daniel P. Berrange Add comment about where each keymap datasource came from To assist in people identifying/resolving mistakes, add a note about where each data source from keymaps.csv came from. Most are from Linux kernel source data tables, a few were manually matched up (Xwin/OS-X) * src/keymap-gen.pl: Record data sources for keymaps.csv Ensure automake maintainer mode is enabled Add a cairo based framebuffer implementation In GTK3, GdkImage has been removed completely. The vncimageframebuffer class cannot thus be used. Replace it with a vnccairoframebuffer class instead, but keep the old one around in GTK2 builds for ABI compatability. * src/vnccairoframebuffer.c, src/vnccairoframebuffer.h, src/libgtk-vnc_sym.version: Add new framebuffer impl based on Cairo. * src/Makefile.am: Disable GdkImage based framebuffer on GTK3 builds * src/vncdisplay.c: Always use Cairo based framebuffer Fix typo in keycode names & improve error message Fix typo in evdev keycode names left over from debugging. Improve the error message when finding unknown keycodes Mandate the use of Cairo for all drawing Cairo has been used for GTK drawing for a long time and is now mandatory in GTK3. Drop support for non-Cairo drawing ops since they're obsolete. * configure.ac: Check for Cairo * src/vncdisplay.c: Drop non-cairo drawing 2010-08-15 Daniel P. Berrange Reset xmit_buffer fields to fix reconnect If a vnc_connection object was closed and reopened old data in the xmit_buffer fields would cause a crash, since it was not re-initialized 2010-08-04 Lucian Adrian Grijincu Updated Romanian translation 2010-08-03 Nils-Christoph Fiedler Added LowGerman translation Added LowGerman translation 2010-07-20 Daniel P. Berrange Rewrite keymap code to work on more platforms The current keymap code assumes an Xorg server on Linux with either evdev or kbd drivers. This adds heuristics to detect XQuartz (Xorg on OS-X) and XWin (Xorg on Cygwin). Further it adds support for native GDK on OS-X and Win32. It is not possible to assume that keycodes < 87 have a 1-1 mapping to RFB (XT) keycodes. Thus the keymap arrays must have a complete dataset, all special casing is removed. All master keymaps are defined in a CSV file. THis covers Linux keycodes, OSX keycodes, AT set1, 2 & 3, XT keycodes, the XT encoding used by the Linux KBD driver, USB keycodes, Win32 keycodes, the XT encoding used by Xorg on Cygwin, the XT encoding used by Xorg on Linux with kbd driver. Further RFB and final Xorg driver mappings are derived from these master maps automatically. The keymap-gen.pl tool can generate lookup tables between all possible keycode sets as required. eg To generate a map from native Win32 keycodes to RFB keycodes keymap-gen.pl keymaps.csv win32 rfb * gtk-vnc.spec.in, mingw32-gtk-vnc.spec.in: Require Text::CSV for generating keymaps * src/Makefile.am: Generate keymaps dynamically * src/keymap-gen.pl: Tool to generate keymaps from CSV file * src/keymaps.csv: Master keymap definitions * src/vncconnection.c: Improve keypress log message * src/vncdisplay.c: Convert to guint16 for keymap table * src/vncdisplaykeymap.c, src/vncdisplaykeymap.h: Use a new dynamically generated, full keymap. 2010-07-20 Daniel P. Berrange Disable extended key events if keymap is unknown Currently if we cannot determine the GDK keymap, we default to the XT keymap. This is not a good choice because is causes definite breakage on several platforms. If the keymap cannot be determined, it is safer to disable the extended key event support completely & rely on traditional VNC keysyms. Also rename the x2pc methods to be gdk2rfb, since that's what the conversion is actually doing. Change way encodings are disabled at runtime The approach for disabling pseudo encodings is fragile because it relies on ordering in the array. Rewrite to allow removing arbitrary encodings Remove all gnulib code Since the port to use GIO for sockets, there is no requirement for gnulib. Delete it all Switch over to use GIO for socket connections / DNS resolution GIO provides GSocket and GResolver classes that can replace all current use of POSIX sockets / DNS resolution APIs. This gives cross platform portability for free, removing the need to use gnulib for socket portability * configure.ac: Check for GIO * src/Makefile.am: Link to GIO * src/vncconnection.c: Switch to using GSocket & friends * src/vncdisplay.c: Remove winsock initialization code