Cope with multiple GDK backends in GTK3
This commit is contained in:
parent
b413e37fdc
commit
43876ffbff
255
gtk-vnc-0.4.2-gdk3-backends.patch
Normal file
255
gtk-vnc-0.4.2-gdk3-backends.patch
Normal file
@ -0,0 +1,255 @@
|
||||
commit d18c74e37dc280432124ab49e85a26af8bb2a2e0
|
||||
Author: Daniel P. Berrange <berrange@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-list@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-list@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-list@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,
|
@ -18,7 +18,7 @@
|
||||
Summary: A GTK2 widget for VNC clients
|
||||
Name: gtk-vnc
|
||||
Version: 0.4.2
|
||||
Release: 6%{?dist}%{?extra_release}
|
||||
Release: 7%{?dist}%{?extra_release}
|
||||
License: LGPLv2+
|
||||
Group: Development/Libraries
|
||||
Source: http://ftp.gnome.org/pub/GNOME/sources/%{name}/0.4/%{name}-%{version}.tar.bz2
|
||||
@ -28,6 +28,7 @@ Patch3: %{name}-%{version}-framebuffer-update-bounds-check.patch
|
||||
Patch4: %{name}-%{version}-pixmap-cache.patch
|
||||
Patch5: %{name}-%{version}-source-unref.patch
|
||||
Patch6: %{name}-%{version}-gtk3-drawable.patch
|
||||
Patch7: %{name}-%{version}-gdk3-backends.patch
|
||||
BuildRoot: %{_tmppath}/%{name}-%{version}-%{release}-root-%(%{__id_u} -n)
|
||||
URL: http://live.gnome.org/gtk-vnc
|
||||
BuildRequires: gtk2-devel >= 2.14
|
||||
@ -158,6 +159,7 @@ cd %{name}-%{version}
|
||||
%patch4 -p1
|
||||
%patch5 -p1
|
||||
%patch6 -p1
|
||||
%patch7 -p1
|
||||
cd ..
|
||||
%if %{with_gtk3}
|
||||
cp -a gtk-vnc-%{version} gtk-vnc2-%{version}
|
||||
@ -303,6 +305,9 @@ rm -fr %{buildroot}
|
||||
|
||||
|
||||
%changelog
|
||||
* Thu Jan 13 2011 Daniel P. Berrange <berrange@redhat.com> - 0.4.2-7
|
||||
- Cope with multiple GDK backends in GTK3
|
||||
|
||||
* Tue Jan 11 2011 Daniel P. Berrange <berrange@redhat.com> - 0.4.2-6
|
||||
- Rebuild for change in GTK3 soname
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user