aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorPierre Ossman <ossman@cendio.se>2014-09-11 10:48:29 +0200
committerPierre Ossman <ossman@cendio.se>2014-09-11 10:48:29 +0200
commit64ff1ca14f595d0eb7f6b1b47facf5f4147eae51 (patch)
treed3c9fb78039160cd09ef080303854545e3367eec
parent6d66d6deb790545dd475f3e74cf817be97d23cea (diff)
downloadtigervnc-64ff1ca14f595d0eb7f6b1b47facf5f4147eae51.tar.gz
tigervnc-64ff1ca14f595d0eb7f6b1b47facf5f4147eae51.zip
Update FLTK patches based on feeback from upstream
-rw-r--r--CMakeLists.txt2
-rw-r--r--contrib/fltk/12-fltk-1.3.2-xhandlers.patch82
-rw-r--r--contrib/fltk/13-fltk-1.3.2-im.patch210
-rw-r--r--vncviewer/Viewport.cxx30
-rw-r--r--vncviewer/Viewport.h2
5 files changed, 229 insertions, 97 deletions
diff --git a/CMakeLists.txt b/CMakeLists.txt
index a3e0931a..5f4ccd48 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -301,7 +301,7 @@ if(FLTK_FOUND)
check_cxx_source_compiles("#include <FL/Fl_Window.H>\nint main(int c, char** v) { void (Fl_Window::*foo)(int,int,int,int) = &Fl_Window::fullscreen_screens; return 0; }" HAVE_FLTK_FULLSCREEN_SCREENS)
# FLTK STR #xxxx
- check_cxx_source_compiles("#include <FL/Fl.H>\nint main(int c, char** v) { Fl::add_xhandler(NULL, NULL); return 0; }" HAVE_FLTK_XHANDLERS)
+ check_cxx_source_compiles("#include <FL/Fl.H>\nint main(int c, char** v) { Fl::add_system_handler(NULL, NULL); return 0; }" HAVE_FLTK_XHANDLERS)
# FLTK STR #xxxx
check_cxx_source_compiles("#include <FL/Fl.H>\nint main(int c, char** v) { Fl::disable_im(); return 0; }" HAVE_FLTK_IM)
diff --git a/contrib/fltk/12-fltk-1.3.2-xhandlers.patch b/contrib/fltk/12-fltk-1.3.2-xhandlers.patch
index cf6cefbf..0ac3fe4b 100644
--- a/contrib/fltk/12-fltk-1.3.2-xhandlers.patch
+++ b/contrib/fltk/12-fltk-1.3.2-xhandlers.patch
@@ -5,8 +5,8 @@ diff -up fltk-1.3.2/FL/Fl.H.xhandlers fltk-1.3.2/FL/Fl.H
/** Signature of add_handler functions passed as parameters */
typedef int (*Fl_Event_Handler)(int event);
-+/** Signature of add_xhandler functions passed as parameters */
-+typedef bool (*Fl_XEvent_Handler)(void *event, void *data);
++/** Signature of add_system_handler functions passed as parameters */
++typedef int (*Fl_System_Handler)(void *event, void *data);
+
/** Signature of set_abort functions passed as parameters */
typedef void (*Fl_Abort_Handler)(const char *format,...);
@@ -15,8 +15,8 @@ diff -up fltk-1.3.2/FL/Fl.H.xhandlers fltk-1.3.2/FL/Fl.H
static void focus(Fl_Widget*);
static void add_handler(Fl_Event_Handler h);
static void remove_handler(Fl_Event_Handler h);
-+ static void add_xhandler(Fl_XEvent_Handler h, void *data);
-+ static void remove_xhandler(Fl_XEvent_Handler h);
++ static void add_system_handler(Fl_System_Handler h, void *data);
++ static void remove_system_handler(Fl_System_Handler h);
static void event_dispatch(Fl_Event_Dispatch d);
static Fl_Event_Dispatch event_dispatch();
/** @} */
@@ -27,7 +27,7 @@ diff -up fltk-1.3.2/src/Fl_cocoa.mm.xhandlers fltk-1.3.2/src/Fl_cocoa.mm
}
@end
-+extern bool fl_send_xhandlers(void *e);
++extern int fl_send_system_handlers(void *e);
+
static void clipboard_check(void);
@@ -37,7 +37,7 @@ diff -up fltk-1.3.2/src/Fl_cocoa.mm.xhandlers fltk-1.3.2/src/Fl_cocoa.mm
// update clipboard status
clipboard_check();
+
-+ if (fl_send_xhandlers(theEvent))
++ if (fl_send_system_handlers(theEvent))
+ return;
+
NSEventType type = [theEvent type];
@@ -46,7 +46,7 @@ diff -up fltk-1.3.2/src/Fl_cocoa.mm.xhandlers fltk-1.3.2/src/Fl_cocoa.mm
diff -up fltk-1.3.2/src/Fl.cxx.xhandlers fltk-1.3.2/src/Fl.cxx
--- fltk-1.3.2/src/Fl.cxx.xhandlers 2014-07-22 15:23:18.085334432 +0200
+++ fltk-1.3.2/src/Fl.cxx 2014-07-22 15:23:18.095334607 +0200
-@@ -891,6 +891,67 @@ static int send_handlers(int e) {
+@@ -891,6 +891,83 @@ static int send_handlers(int e) {
return 0;
}
@@ -55,59 +55,75 @@ diff -up fltk-1.3.2/src/Fl.cxx.xhandlers fltk-1.3.2/src/Fl.cxx
+// System event handlers:
+
+
-+struct xhandler_link {
-+ Fl_XEvent_Handler handle;
++struct system_handler_link {
++ Fl_System_Handler handle;
+ void *data;
-+ xhandler_link *next;
++ system_handler_link *next;
+};
+
+
-+static xhandler_link *xhandlers = 0;
++static system_handler_link *sys_handlers = 0;
+
+
+/**
-+ Install a function to intercept system events. FLTK calls each of
-+ these functions as soon as a new system event is received. The
-+ processing will stop at the first function to return true. If all
-+ functions return false then the event is passed on for normal
-+ handling by FLTK.
++ \brief Install a function to intercept system events.
+
-+ \see Fl::remove_xhandler(Fl_XEvent_Handler)
++ FLTK calls each of these functions as soon as a new system event is
++ received. The processing will stop at the first function to return
++ non-zero. If all functions return zero then the event is passed on
++ for normal handling by FLTK.
++
++ Each function will be called with a pointer to the system event as
++ the first argument and \p data as the second argument. The system
++ event pointer will always be void *, but will point to different
++ objects depending on the platform:
++ - X11: XEvent
++ - Windows: MSG
++ - OS X: NSEvent
++
++ \param ha The event handler function to register
++ \param data User data to include on each call
++
++ \see Fl::remove_system_handler(Fl_System_Handler)
+*/
-+void Fl::add_xhandler(Fl_XEvent_Handler ha, void *data) {
-+ xhandler_link *l = new xhandler_link;
++void Fl::add_system_handler(Fl_System_Handler ha, void *data) {
++ system_handler_link *l = new system_handler_link;
+ l->handle = ha;
+ l->data = data;
-+ l->next = xhandlers;
-+ xhandlers = l;
++ l->next = sys_handlers;
++ sys_handlers = l;
+}
+
+
+/**
+ Removes a previously added system event handler.
++
++ \param ha The event handler function to remove
++
++ \see Fl::add_system_handler(Fl_System_Handler)
+*/
-+void Fl::remove_xhandler(Fl_XEvent_Handler ha) {
-+ xhandler_link *l, *p;
++void Fl::remove_system_handler(Fl_System_Handler ha) {
++ system_handler_link *l, *p;
+
+ // Search for the handler in the list...
-+ for (l = xhandlers, p = 0; l && l->handle != ha; p = l, l = l->next);
++ for (l = sys_handlers, p = 0; l && l->handle != ha; p = l, l = l->next);
+
+ if (l) {
+ // Found it, so remove it from the list...
+ if (p) p->next = l->next;
-+ else xhandlers = l->next;
++ else sys_handlers = l->next;
+
+ // And free the record...
+ delete l;
+ }
+}
+
-+bool fl_send_xhandlers(void *e) {
-+ for (const xhandler_link *hl = xhandlers; hl; hl = hl->next) {
++int fl_send_system_handlers(void *e) {
++ for (const system_handler_link *hl = sys_handlers; hl; hl = hl->next) {
+ if (hl->handle(e, hl->data))
-+ return true;
++ return 1;
+ }
-+ return false;
++ return 0;
+}
+
+
@@ -121,7 +137,7 @@ diff -up fltk-1.3.2/src/Fl_win32.cxx.xhandlers fltk-1.3.2/src/Fl_win32.cxx
return r;
}
-+extern bool fl_send_xhandlers(void *e);
++extern int fl_send_system_handlers(void *e);
+
IActiveIMMApp *fl_aimm = NULL;
MSG fl_msg;
@@ -150,7 +166,7 @@ diff -up fltk-1.3.2/src/Fl_win32.cxx.xhandlers fltk-1.3.2/src/Fl_win32.cxx
- DispatchMessageW(&fl_msg);
- have_message = PeekMessageW(&fl_msg, NULL, 0, 0, PM_REMOVE);
+ while ((have_message = PeekMessageW(&fl_msg, NULL, 0, 0, PM_REMOVE)) > 0) {
-+ if (fl_send_xhandlers(&fl_msg))
++ if (fl_send_system_handlers(&fl_msg))
+ continue;
+
+ // Let applications treat WM_QUIT identical to SIGTERM on *nix
@@ -178,7 +194,7 @@ diff -up fltk-1.3.2/src/Fl_x.cxx.xhandlers fltk-1.3.2/src/Fl_x.cxx
remove_fd(n, -1);
}
-+extern bool fl_send_xhandlers(void *e);
++extern int fl_send_system_handlers(void *e);
+
#if CONSOLIDATE_MOTION
static Fl_Window* send_motion;
@@ -187,7 +203,7 @@ diff -up fltk-1.3.2/src/Fl_x.cxx.xhandlers fltk-1.3.2/src/Fl_x.cxx
while (XEventsQueued(fl_display,QueuedAfterReading)) {
XEvent xevent;
XNextEvent(fl_display, &xevent);
-+ if (fl_send_xhandlers(&xevent))
++ if (fl_send_system_handlers(&xevent))
+ continue;
fl_handle(xevent);
}
diff --git a/contrib/fltk/13-fltk-1.3.2-im.patch b/contrib/fltk/13-fltk-1.3.2-im.patch
index fbdcd785..efacc42b 100644
--- a/contrib/fltk/13-fltk-1.3.2-im.patch
+++ b/contrib/fltk/13-fltk-1.3.2-im.patch
@@ -1,6 +1,6 @@
diff -up fltk-1.3.2/FL/Fl.H.im fltk-1.3.2/FL/Fl.H
---- fltk-1.3.2/FL/Fl.H.im 2014-07-25 14:28:52.771417210 +0200
-+++ fltk-1.3.2/FL/Fl.H 2014-07-25 14:28:52.774417261 +0200
+--- fltk-1.3.2/FL/Fl.H.im 2014-09-10 14:40:05.193265424 +0200
++++ fltk-1.3.2/FL/Fl.H 2014-09-10 14:40:05.196265471 +0200
@@ -699,6 +699,17 @@ public:
static int event_inside(const Fl_Widget*);
static int test_shortcut(Fl_Shortcut);
@@ -20,8 +20,8 @@ diff -up fltk-1.3.2/FL/Fl.H.im fltk-1.3.2/FL/Fl.H
static int handle(int, Fl_Window*);
static int handle_(int, Fl_Window*);
diff -up fltk-1.3.2/FL/win32.H.im fltk-1.3.2/FL/win32.H
---- fltk-1.3.2/FL/win32.H.im 2014-07-25 14:28:52.765417109 +0200
-+++ fltk-1.3.2/FL/win32.H 2014-07-25 14:28:52.774417261 +0200
+--- fltk-1.3.2/FL/win32.H.im 2014-09-10 14:40:05.186265315 +0200
++++ fltk-1.3.2/FL/win32.H 2014-09-10 14:40:05.196265471 +0200
@@ -102,6 +102,8 @@ extern FL_EXPORT void fl_save_dc( HWND w
inline Window fl_xid(const Fl_Window* w) { Fl_X *temp = Fl_X::i(w); return temp ? temp->xid : 0; }
@@ -32,55 +32,171 @@ diff -up fltk-1.3.2/FL/win32.H.im fltk-1.3.2/FL/win32.H
FL_EXPORT Window fl_xid_(const Fl_Window* w);
#define fl_xid(w) fl_xid_(w)
diff -up fltk-1.3.2/src/Fl_cocoa.mm.im fltk-1.3.2/src/Fl_cocoa.mm
---- fltk-1.3.2/src/Fl_cocoa.mm.im 2014-07-25 14:37:30.656153283 +0200
-+++ fltk-1.3.2/src/Fl_cocoa.mm 2014-07-25 14:38:03.540708006 +0200
-@@ -53,6 +53,7 @@ extern "C" {
- #include <math.h>
-
- #import <Cocoa/Cocoa.h>
-+#import <Carbon/Carbon.h>
-
- #ifndef NSINTEGER_DEFINED // appears with 10.5 in NSObjCRuntime.h
- #if defined(__LP64__) && __LP64__
-@@ -1391,6 +1392,35 @@ void fl_close_display() {
+--- fltk-1.3.2/src/Fl_cocoa.mm.im 2014-09-10 14:40:05.193265424 +0200
++++ fltk-1.3.2/src/Fl_cocoa.mm 2014-09-10 14:43:41.103642243 +0200
+@@ -88,6 +88,7 @@ static void createAppleMenu(void);
+ static Fl_Region MacRegionMinusRect(Fl_Region r, int x,int y,int w,int h);
+ static void cocoaMouseHandler(NSEvent *theEvent);
+ static int calc_mac_os_version();
++static void im_update(void);
+
+ static Fl_Quartz_Graphics_Driver fl_quartz_driver;
+ static Fl_Display_Device fl_quartz_display(&fl_quartz_driver);
+@@ -108,6 +109,30 @@ int fl_mac_os_version = calc_mac_os_vers
+ static int got_events = 0;
+ static Fl_Window* resize_from_system;
+ static int main_screen_height; // height of menubar-containing screen used to convert between Cocoa and FLTK global screen coordinates
++static int im_enabled = -1;
++
++// Carbon functions and definitions
++
++typedef void *TSMDocumentID;
++
++extern "C" enum {
++ kTSMDocumentEnabledInputSourcesPropertyTag = 'enis' // from Carbon/TextServices.h
++};
++
++// Undocumented voodoo. Taken from Mozilla.
++static const int smEnableRomanKybdsOnly = -23;
++
++typedef TSMDocumentID (*TSMGetActiveDocument_type)(void);
++static TSMGetActiveDocument_type TSMGetActiveDocument;
++typedef OSStatus (*TSMSetDocumentProperty_type)(TSMDocumentID, OSType, UInt32, void*);
++static TSMSetDocumentProperty_type TSMSetDocumentProperty;
++typedef OSStatus (*TSMRemoveDocumentProperty_type)(TSMDocumentID, OSType);
++static TSMRemoveDocumentProperty_type TSMRemoveDocumentProperty;
++typedef CFArrayRef (*TISCreateASCIICapableInputSourceList_type)(void);
++static TISCreateASCIICapableInputSourceList_type TISCreateASCIICapableInputSourceList;
++
++typedef void (*KeyScript_type)(short);
++static KeyScript_type KeyScript;
+
+ #if CONSOLIDATE_MOTION
+ static Fl_Window* send_motion;
+@@ -978,6 +1003,7 @@ void fl_open_callback(void (*cb)(const c
+ #endif
+ {
+ BOOL seen_open_file;
++ TSMDocumentID currentDoc;
+ }
+ - (void)windowDidMove:(NSNotification *)notif;
+ - (void)windowDidResize:(NSNotification *)notif;
+@@ -991,6 +1017,7 @@ void fl_open_callback(void (*cb)(const c
+ - (NSApplicationTerminateReply)applicationShouldTerminate:(NSApplication*)sender;
+ - (void)applicationDidBecomeActive:(NSNotification *)notify;
+ - (void)applicationDidChangeScreenParameters:(NSNotification *)aNotification;
++- (void)applicationDidUpdate:(NSNotification *)aNotification;
+ - (void)applicationWillResignActive:(NSNotification *)notify;
+ - (void)applicationWillHide:(NSNotification *)notify;
+ - (void)applicationWillUnhide:(NSNotification *)notify;
+@@ -1175,6 +1202,23 @@ void fl_open_callback(void (*cb)(const c
+ }
+ Fl::handle(FL_SCREEN_CONFIGURATION_CHANGED, NULL);
+ }
++- (void)applicationDidUpdate:(NSNotification *)aNotification
++{
++ if ((fl_mac_os_version >= 100500) && (im_enabled != -1) &&
++ (TSMGetActiveDocument != NULL)) {
++ TSMDocumentID newDoc;
++ // It is extremely unclear when Cocoa decides to create/update
++ // the input context, but debugging reveals that it is done
++ // by NSApplication:updateWindows. So check if the input context
++ // has shifted after each such run so that we can update our
++ // input methods status.
++ newDoc = TSMGetActiveDocument();
++ if (newDoc != currentDoc) {
++ im_update();
++ currentDoc = newDoc;
++ }
++ }
++}
+ - (void)applicationWillResignActive:(NSNotification *)notify
+ {
+ fl_lock_function();
+@@ -1322,6 +1365,13 @@ void fl_open_display() {
+ static char beenHereDoneThat = 0;
+ if ( !beenHereDoneThat ) {
+ beenHereDoneThat = 1;
++
++ TSMGetActiveDocument = (TSMGetActiveDocument_type)Fl_X::get_carbon_function("TSMGetActiveDocument");
++ TSMSetDocumentProperty = (TSMSetDocumentProperty_type)Fl_X::get_carbon_function("TSMSetDocumentProperty");
++ TSMRemoveDocumentProperty = (TSMRemoveDocumentProperty_type)Fl_X::get_carbon_function("TSMRemoveDocumentProperty");
++ TISCreateASCIICapableInputSourceList = (TISCreateASCIICapableInputSourceList_type)Fl_X::get_carbon_function("TISCreateASCIICapableInputSourceList");
++
++ KeyScript = (KeyScript_type)Fl_X::get_carbon_function("KeyScript");
+
+ BOOL need_new_nsapp = (NSApp == nil);
+ if (need_new_nsapp) [NSApplication sharedApplication];
+@@ -1390,6 +1440,66 @@ void fl_open_display() {
+ void fl_close_display() {
}
-
-+// Undocumented voodoo. Taken from Mozilla.
-+#define ENABLE_ROMAN_KYBDS_ONLY -23
++// Force a "Roman" or "ASCII" keyboard, which both the Mozilla and
++// Safari people seem to think implies turning off advanced IME stuff
++// (see nsTSMManager::SyncKeyScript in Mozilla and enableSecureTextInput
++// in Safari/Webcore). Should be good enough for us then...
++
++static void im_update(void) {
++ if (fl_mac_os_version >= 100500) {
++ TSMDocumentID doc;
++
++ if ((TSMGetActiveDocument == NULL) ||
++ (TSMSetDocumentProperty == NULL) ||
++ (TSMRemoveDocumentProperty == NULL) ||
++ (TISCreateASCIICapableInputSourceList == NULL))
++ return;
++
++ doc = TSMGetActiveDocument();
++
++ if (im_enabled)
++ TSMRemoveDocumentProperty(doc, kTSMDocumentEnabledInputSourcesPropertyTag);
++ else {
++ CFArrayRef inputSources;
++
++ inputSources = TISCreateASCIICapableInputSourceList();
++ TSMSetDocumentProperty(doc, kTSMDocumentEnabledInputSourcesPropertyTag,
++ sizeof(CFArrayRef), &inputSources);
++ CFRelease(inputSources);
++ }
++ } else {
++ if (KeyScript == NULL)
++ return;
++
++ if (im_enabled)
++ KeyScript(smKeyEnableKybds);
++ else
++ KeyScript(smEnableRomanKybdsOnly);
++ }
++}
+
+void Fl::enable_im() {
-+#if (MAC_OS_X_VERSION_MIN_REQUIRED >= MAC_OS_X_VERSION_10_5)
-+ TSMRemoveDocumentProperty(TSMGetActiveDocument(),
-+ kTSMDocumentEnabledInputSourcesPropertyTag);
-+#else
-+ KeyScript(smKeyEnableKybds);
-+#endif
++ fl_open_display();
++
++ im_enabled = 1;
++
++ if (fl_mac_os_version >= 100500)
++ [NSApp updateWindows];
++ else
++ im_update();
+}
+
+void Fl::disable_im() {
-+ // Force a "Roman" or "ASCII" keyboard, which both the Mozilla and
-+ // Safari people seem to think implies turning off advanced IME stuff
-+ // (see nsTSMManager::SyncKeyScript in Mozilla and enableSecureTextInput
-+ // in Safari/Webcore). Should be good enough for us then...
-+#if (MAC_OS_X_VERSION_MIN_REQUIRED >= MAC_OS_X_VERSION_10_5)
-+ CFArrayRef inputSources = TISCreateASCIICapableInputSourceList();
-+ TSMSetDocumentProperty(TSMGetActiveDocument(),
-+ kTSMDocumentEnabledInputSourcesPropertyTag,
-+ sizeof(CFArrayRef), &inputSources);
-+ CFRelease(inputSources);
-+#else
-+ KeyScript(ENABLE_ROMAN_KYBDS_ONLY);
-+#endif
-+}
++ fl_open_display();
++
++ im_enabled = 0;
+
++ if (fl_mac_os_version >= 100500)
++ [NSApp updateWindows];
++ else
++ im_update();
++}
+
+
// Gets the border sizes and the titlebar size
static void get_window_frame_sizes(int &bx, int &by, int &bt) {
- static bool first = true;
diff -up fltk-1.3.2/src/Fl.cxx.im fltk-1.3.2/src/Fl.cxx
---- fltk-1.3.2/src/Fl.cxx.im 2014-07-25 14:28:52.772417227 +0200
-+++ fltk-1.3.2/src/Fl.cxx 2014-07-25 14:28:52.774417261 +0200
+--- fltk-1.3.2/src/Fl.cxx.im 2014-09-10 14:40:05.194265440 +0200
++++ fltk-1.3.2/src/Fl.cxx 2014-09-10 14:40:05.197265486 +0200
@@ -593,45 +593,6 @@ int Fl::run() {
return 0;
}
@@ -129,7 +245,7 @@ diff -up fltk-1.3.2/src/Fl.cxx.im fltk-1.3.2/src/Fl.cxx
repeatedly to "run" your program. You can also check what happened
diff -up fltk-1.3.2/src/Fl_Native_File_Chooser_WIN32.cxx.im fltk-1.3.2/src/Fl_Native_File_Chooser_WIN32.cxx
--- fltk-1.3.2/src/Fl_Native_File_Chooser_WIN32.cxx.im 2012-06-26 09:03:46.000000000 +0200
-+++ fltk-1.3.2/src/Fl_Native_File_Chooser_WIN32.cxx 2014-07-25 14:28:52.774417261 +0200
++++ fltk-1.3.2/src/Fl_Native_File_Chooser_WIN32.cxx 2014-09-10 14:40:05.197265486 +0200
@@ -34,6 +34,7 @@ LPCWSTR utf8towchar(const char *in); //M
char *wchartoutf8(LPCWSTR in); //MG
@@ -157,8 +273,8 @@ diff -up fltk-1.3.2/src/Fl_Native_File_Chooser_WIN32.cxx.im fltk-1.3.2/src/Fl_Na
clear_pathnames();
// PARENT WINDOW
diff -up fltk-1.3.2/src/Fl_win32.cxx.im fltk-1.3.2/src/Fl_win32.cxx
---- fltk-1.3.2/src/Fl_win32.cxx.im 2014-07-25 14:28:52.772417227 +0200
-+++ fltk-1.3.2/src/Fl_win32.cxx 2014-07-25 14:28:52.775417277 +0200
+--- fltk-1.3.2/src/Fl_win32.cxx.im 2014-09-10 14:40:05.194265440 +0200
++++ fltk-1.3.2/src/Fl_win32.cxx 2014-09-10 14:40:05.197265486 +0200
@@ -60,8 +60,6 @@
#include <ole2.h>
#include <shellapi.h>
@@ -220,7 +336,7 @@ diff -up fltk-1.3.2/src/Fl_win32.cxx.im fltk-1.3.2/src/Fl_win32.cxx
if (himc) {
@@ -338,7 +335,6 @@ void* Fl::thread_message() {
- extern bool fl_send_xhandlers(void *e);
+ extern int fl_send_system_handlers(void *e);
-IActiveIMMApp *fl_aimm = NULL;
MSG fl_msg;
@@ -337,8 +453,8 @@ diff -up fltk-1.3.2/src/Fl_win32.cxx.im fltk-1.3.2/src/Fl_win32.cxx
return x;
}
diff -up fltk-1.3.2/src/Fl_x.cxx.im fltk-1.3.2/src/Fl_x.cxx
---- fltk-1.3.2/src/Fl_x.cxx.im 2014-07-25 14:28:52.773417244 +0200
-+++ fltk-1.3.2/src/Fl_x.cxx 2014-07-25 14:28:52.775417277 +0200
+--- fltk-1.3.2/src/Fl_x.cxx.im 2014-09-10 14:40:05.194265440 +0200
++++ fltk-1.3.2/src/Fl_x.cxx 2014-09-10 14:40:05.198265502 +0200
@@ -313,6 +313,7 @@ XVisualInfo *fl_visual;
Colormap fl_colormap;
XIM fl_xim_im = 0;
diff --git a/vncviewer/Viewport.cxx b/vncviewer/Viewport.cxx
index 595a4aa8..32ed543c 100644
--- a/vncviewer/Viewport.cxx
+++ b/vncviewer/Viewport.cxx
@@ -112,7 +112,7 @@ Viewport::Viewport(int w, int h, const rfb::PixelFormat& serverPF, CConn* cc_)
#ifdef HAVE_FLTK_XHANDLERS
// We need to intercept keyboard events early
- Fl::add_xhandler(handleXEvent, this);
+ Fl::add_system_handler(handleSystemEvent, this);
#endif
frameBuffer = createFramebuffer(w, h);
@@ -148,7 +148,7 @@ Viewport::~Viewport()
Fl::remove_timeout(handlePointerTimeout, this);
#ifdef HAVE_FLTK_XHANDLERS
- Fl::remove_xhandler(handleXEvent);
+ Fl::remove_system_handler(handleSystemEvent);
#endif
#ifdef HAVE_FLTK_CLIPBOARD
@@ -647,7 +647,7 @@ void Viewport::handleKeyRelease(int keyCode)
}
-bool Viewport::handleXEvent(void *event, void *data)
+int Viewport::handleSystemEvent(void *event, void *data)
{
Viewport *self = (Viewport *)data;
Fl_Widget *focus;
@@ -658,10 +658,10 @@ bool Viewport::handleXEvent(void *event, void *data)
if (!focus)
focus = Fl::focus();
if (!focus)
- return false;
+ return 0;
if (focus != self)
- return false;
+ return 0;
assert(event);
@@ -686,7 +686,7 @@ bool Viewport::handleXEvent(void *event, void *data)
if (keyCode == 0x00) {
vlog.error(_("No scan code for %svirtual key 0x%02x"),
isExtended?"extended ":"", (int)vKey);
- return true;
+ return 1;
}
}
@@ -697,12 +697,12 @@ bool Viewport::handleXEvent(void *event, void *data)
if (keySym == NoSymbol) {
vlog.error(_("No symbol for %svirtual key 0x%02x"),
isExtended?"extended ":"", (int)vKey);
- return true;
+ return 1;
}
self->handleKeyPress(keyCode, keySym);
- return true;
+ return 1;
} else if ((msg->message == WM_KEYUP) || (msg->message == WM_SYSKEYUP)) {
UINT vKey;
bool isExtended;
@@ -719,7 +719,7 @@ bool Viewport::handleXEvent(void *event, void *data)
self->handleKeyRelease(keyCode);
- return true;
+ return 1;
}
#elif defined(__APPLE__)
if (cocoa_is_keyboard_event(event)) {
@@ -734,7 +734,7 @@ bool Viewport::handleXEvent(void *event, void *data)
if (keySym == NoSymbol) {
vlog.error(_("No symbol for key code 0x%02x (in the current state)"),
(int)keyCode);
- return true;
+ return 1;
}
self->handleKeyPress(keyCode, keySym);
@@ -747,7 +747,7 @@ bool Viewport::handleXEvent(void *event, void *data)
self->handleKeyRelease(keyCode);
}
- return true;
+ return 1;
}
#else
XEvent *xevent = (XEvent*)event;
@@ -760,7 +760,7 @@ bool Viewport::handleXEvent(void *event, void *data)
if (keysym == NoSymbol) {
vlog.error(_("No symbol for key code %d (in the current state)"),
(int)xevent->xkey.keycode);
- return true;
+ return 1;
}
switch (keysym) {
@@ -783,14 +783,14 @@ bool Viewport::handleXEvent(void *event, void *data)
}
self->handleKeyPress(xevent->xkey.keycode, keysym);
- return true;
+ return 1;
} else if (xevent->type == KeyRelease) {
self->handleKeyRelease(xevent->xkey.keycode);
- return true;
+ return 1;
}
#endif
- return false;
+ return 0;
}
diff --git a/vncviewer/Viewport.h b/vncviewer/Viewport.h
index 30dacad4..8e60da65 100644
--- a/vncviewer/Viewport.h
+++ b/vncviewer/Viewport.h
@@ -73,7 +73,7 @@ private:
void handleKeyPress(int keyCode, rdr::U32 keySym);
void handleKeyRelease(int keyCode);
- static bool handleXEvent(void *event, void *data);
+ static int handleSystemEvent(void *event, void *data);
rdr::U32 translateKeyEvent(void);
void handleFLTKKeyPress(void);