]> source.dussan.org Git - tigervnc.git/commitdiff
Update FLTK patches based on feeback from upstream 30/head
authorPierre Ossman <ossman@cendio.se>
Thu, 11 Sep 2014 08:48:29 +0000 (10:48 +0200)
committerPierre Ossman <ossman@cendio.se>
Thu, 11 Sep 2014 08:48:29 +0000 (10:48 +0200)
CMakeLists.txt
contrib/fltk/12-fltk-1.3.2-xhandlers.patch
contrib/fltk/13-fltk-1.3.2-im.patch
vncviewer/Viewport.cxx
vncviewer/Viewport.h

index a3e0931a797747087e8f8f3fdfae47668bca64b0..5f4ccd488a3941457eed9c2933d2792faa8607fc 100644 (file)
@@ -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)
index cf6cefbfe6e573b2aca3f16eebe7853b5f64e67a..0ac3fe4b5a34771c7a574b9d91334b186523913a 100644 (file)
@@ -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);
    }
index fbdcd78530ceda1da2113839f3812a2190dc8f2a..efacc42be6ddc4e46c15334ba0d65839738ca519 100644 (file)
@@ -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;
index 595a4aa8548ca50dc0d789736ba0e8db8beed6fb..32ed543cf9b47a14bf9d8cbf2fc4fee78304a50e 100644 (file)
@@ -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;
 }
 
 
index 30dacad4532d4b8cfb6ef0891c48a54f4c608e55..8e60da656187533b33188a73f1bdb0c868a9a7af 100644 (file)
@@ -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);