Add support for multimedia keys.


git-svn-id: svn://svn.code.sf.net/p/tigervnc/code/trunk@4437 3789f03b-4d11-0410-bbf8-ca57d06f2519
diff --git a/CMakeLists.txt b/CMakeLists.txt
index f38a017..5ef2ee2 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -191,6 +191,9 @@
   # FLTK STR #2636
   check_cxx_source_compiles("#include <FL/Fl.H>\nint main(int c, char** v) { Fl::add_clipboard_notify(NULL, NULL); return 0; }" HAVE_FLTK_CLIPBOARD)
 
+  # FLTK STR #2638
+  check_cxx_source_compiles("#include <FL/Enumerations.H>\nint main(int c, char** v) { return FL_Volume_Down; }" HAVE_FLTK_MEDIAKEYS)
+
   set(CMAKE_REQUIRED_INCLUDES)
   set(CMAKE_REQUIRED_LIBRARIES)
 endif()
diff --git a/config.h.cmake.in b/config.h.cmake.in
index 991121f..a165424 100644
--- a/config.h.cmake.in
+++ b/config.h.cmake.in
@@ -13,6 +13,7 @@
 #cmakedefine HAVE_GNUTLS_SIGN_ALGORITHM_T
 #cmakedefine HAVE_FLTK_DEAD_KEYS
 #cmakedefine HAVE_FLTK_CLIPBOARD
+#cmakedefine HAVE_FLTK_MEDIAKEYS
 #cmakedefine ENABLE_NLS 1
 
 /* MS Visual Studio 2008 and newer doesn't know ssize_t */
diff --git a/vncviewer/Viewport.cxx b/vncviewer/Viewport.cxx
index ee8e539..15722ca 100644
--- a/vncviewer/Viewport.cxx
+++ b/vncviewer/Viewport.cxx
@@ -34,6 +34,10 @@
 #include <rfb/keysymdef.h>
 #endif
 
+#ifndef XF86XK_ModeLock
+#include <rfb/XF86keysym.h>
+#endif
+
 #include "Viewport.h"
 #include "CConn.h"
 #include "OptionsDialog.h"
@@ -442,6 +446,40 @@
     return XK_KP_Decimal;
   case FL_KP + '/':
     return XK_KP_Divide;
+#ifdef HAVE_FLTK_MEDIAKEYS
+  case FL_Volume_Down:
+    return XF86XK_AudioLowerVolume;
+  case FL_Volume_Mute:
+    return XF86XK_AudioMute;
+  case FL_Volume_Up:
+    return XF86XK_AudioRaiseVolume;
+  case FL_Media_Play:
+    return XF86XK_AudioPlay;
+  case FL_Media_Stop:
+    return XF86XK_AudioStop;
+  case FL_Media_Prev:
+    return XF86XK_AudioPrev;
+  case FL_Media_Next:
+    return XF86XK_AudioNext;
+  case FL_Home_Page:
+    return XF86XK_HomePage;
+  case FL_Mail:
+    return XF86XK_Mail;
+  case FL_Search:
+    return XF86XK_Search;
+  case FL_Back:
+    return XF86XK_Back;
+  case FL_Forward:
+    return XF86XK_Forward;
+  case FL_Stop:
+    return XF86XK_Stop;
+  case FL_Refresh:
+    return XF86XK_Refresh;
+  case FL_Sleep:
+    return XF86XK_Sleep;
+  case FL_Favorites:
+    return XF86XK_Favorites;
+#endif
   case XK_ISO_Level3_Shift:
     // FLTK tends to let this one leak through on X11...
     return XK_ISO_Level3_Shift;