From bcff4ec8e0e8d75880312d31e3e678b8f270de6b Mon Sep 17 00:00:00 2001 From: Matthias Melcher Date: Thu, 17 Sep 2009 22:12:24 +0000 Subject: [PATCH] International menu shortcuts working on Mac OS (and probably the other OS's) git-svn-id: file:///fltk/svn/fltk/branches/branch-1.3@6878 ea41ed52-d2ee-0310-a9c1-e6b18d33e121 --- FL/Enumerations.H | 8 + FL/Fl.H | 2 +- FL/Fl_Button.H | 2 +- FL/Fl_Menu_Item.H | 2 +- FL/Fl_Widget.H | 2 +- FL/fl_draw.H | 4 +- FL/fl_types.h | 2 +- ide/Xcode3.1/FLTK.xcodeproj/project.pbxproj | 262 ++++++++++++++++++++ src/Fl_Menu_add.cxx | 2 +- src/fl_shortcut.cxx | 71 +++--- test/menubar.cxx | 12 +- 11 files changed, 317 insertions(+), 52 deletions(-) diff --git a/FL/Enumerations.H b/FL/Enumerations.H index 265c4b8e9..6e6cd0ef3 100644 --- a/FL/Enumerations.H +++ b/FL/Enumerations.H @@ -330,6 +330,8 @@ enum Fl_When { // Fl_Widget::when(): /*@{*/ +// FIXME: These codes collide with valid Unicode keys + #define FL_Button 0xfee8 ///< A mouse button; use Fl_Button + n for mouse button n. #define FL_BackSpace 0xff08 ///< The backspace key. #define FL_Tab 0xff09 ///< The tab key. @@ -391,6 +393,9 @@ enum Fl_When { // Fl_Widget::when(): /*@{*/ // group: Event States +// FIXME: it would be nice to have the modifiers in the upper 8 bit so that +// a unicode ke (24bit) can be sent as an unsigned with the modifiers. + #define FL_SHIFT 0x00010000 ///< One of the shift keys is down #define FL_CAPS_LOCK 0x00020000 ///< The caps lock is on #define FL_CTRL 0x00040000 ///< One of the ctrl keys is down @@ -407,6 +412,9 @@ enum Fl_When { // Fl_Widget::when(): #define FL_BUTTONS 0x7f000000 ///< Any mouse button is pushed #define FL_BUTTON(n) (0x00800000<<(n)) ///< Mouse button n (n > 0) is pushed +#define FL_KEY_MASK 0x0000ffff ///< All keys are 16 bit for now + // FIXME: Unicode needs 24 bits! + #ifdef __APPLE__ # define FL_COMMAND FL_META ///< An alias for FL_CTRL on WIN32 and X11, or FL_META on MacOS X # define FL_CONTROL FL_CTRL ///< An alias for FL_META on WIN32 and X11, or FL_META on MacOS X diff --git a/FL/Fl.H b/FL/Fl.H index a52149f6a..25cbd16c8 100644 --- a/FL/Fl.H +++ b/FL/Fl.H @@ -568,7 +568,7 @@ public: static void compose_reset() {compose_state = 0;} static int event_inside(int,int,int,int); static int event_inside(const Fl_Widget*); - static int test_shortcut(int); + static int test_shortcut(Fl_Shortcut); // event destinations: static int handle(int, Fl_Window*); diff --git a/FL/Fl_Button.H b/FL/Fl_Button.H index be2d05f99..4444df3be 100644 --- a/FL/Fl_Button.H +++ b/FL/Fl_Button.H @@ -45,7 +45,7 @@ #define FL_HIDDEN_BUTTON 3 ///< for Forms compatibility #ifndef FL_DOXYGEN -extern FL_EXPORT int fl_old_shortcut(const char*); +extern FL_EXPORT Fl_Shortcut fl_old_shortcut(const char*); #endif /** diff --git a/FL/Fl_Menu_Item.H b/FL/Fl_Menu_Item.H index 99f8a71be..6a10e5781 100644 --- a/FL/Fl_Menu_Item.H +++ b/FL/Fl_Menu_Item.H @@ -47,7 +47,7 @@ enum { // values for flags: FL_MENU_HORIZONTAL = 0x100 ///< ??? -- reserved }; -extern FL_EXPORT int fl_old_shortcut(const char*); +extern FL_EXPORT Fl_Shortcut fl_old_shortcut(const char*); class Fl_Menu_; diff --git a/FL/Fl_Widget.H b/FL/Fl_Widget.H index 7c136dc4c..00feef450 100644 --- a/FL/Fl_Widget.H +++ b/FL/Fl_Widget.H @@ -828,7 +828,7 @@ public: /** Internal use only. */ int test_shortcut(); /** Internal use only. */ - static char label_shortcut(const char *t); + static Fl_Shortcut label_shortcut(const char *t); /** Internal use only. */ static int test_shortcut(const char*); diff --git a/FL/fl_draw.H b/FL/fl_draw.H index ea2d315fb..89e09198a 100644 --- a/FL/fl_draw.H +++ b/FL/fl_draw.H @@ -441,8 +441,8 @@ FL_EXPORT int fl_measure_pixmap(const char* const* cdata, int &w, int &h); // other: FL_EXPORT void fl_scroll(int X, int Y, int W, int H, int dx, int dy, void (*draw_area)(void*, int,int,int,int), void* data); -FL_EXPORT const char* fl_shortcut_label(int shortcut); -FL_EXPORT const char* fl_shortcut_label(int shortcuti, const char **eom); +FL_EXPORT const char* fl_shortcut_label(Fl_Shortcut shortcut); +FL_EXPORT const char* fl_shortcut_label(Fl_Shortcut shortcut, const char **eom); FL_EXPORT void fl_overlay_rect(int x,int y,int w,int h); FL_EXPORT void fl_overlay_clear(); FL_EXPORT void fl_cursor(Fl_Cursor, Fl_Color fg=FL_BLACK, Fl_Color bg=FL_WHITE); diff --git a/FL/fl_types.h b/FL/fl_types.h index d87cd7387..b470a9167 100644 --- a/FL/fl_types.h +++ b/FL/fl_types.h @@ -7,7 +7,7 @@ * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Library General Public - * License as published by the Free Software Foundation; either + * License as published by the Free Software Foundation; either∑ * version 2 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, diff --git a/ide/Xcode3.1/FLTK.xcodeproj/project.pbxproj b/ide/Xcode3.1/FLTK.xcodeproj/project.pbxproj index 9440718d0..307650f4e 100644 --- a/ide/Xcode3.1/FLTK.xcodeproj/project.pbxproj +++ b/ide/Xcode3.1/FLTK.xcodeproj/project.pbxproj @@ -3025,6 +3025,133 @@ C9A3EE180DD646F100486E4F /* colbrowser.cxx */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = colbrowser.cxx; path = ../../test/colbrowser.cxx; sourceTree = SOURCE_ROOT; }; C9A3EE780DD64AE700486E4F /* config.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = config.h; sourceTree = ""; }; C9A3EE790DD64B0200486E4F /* TODO */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = TODO; sourceTree = ""; }; + C9B9CA091062DFB30032F684 /* filename.H */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = filename.H; path = ../../FL/filename.H; sourceTree = SOURCE_ROOT; }; + C9B9CA0A1062DFB30032F684 /* Fl_Adjuster.H */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = Fl_Adjuster.H; path = ../../FL/Fl_Adjuster.H; sourceTree = SOURCE_ROOT; }; + C9B9CA0B1062DFB30032F684 /* fl_ask.H */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = fl_ask.H; path = ../../FL/fl_ask.H; sourceTree = SOURCE_ROOT; }; + C9B9CA0C1062DFB30032F684 /* Fl_Bitmap.H */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = Fl_Bitmap.H; path = ../../FL/Fl_Bitmap.H; sourceTree = SOURCE_ROOT; }; + C9B9CA0D1062DFB30032F684 /* Fl_BMP_Image.H */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = Fl_BMP_Image.H; path = ../../FL/Fl_BMP_Image.H; sourceTree = SOURCE_ROOT; }; + C9B9CA0E1062DFB30032F684 /* Fl_Box.H */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = Fl_Box.H; path = ../../FL/Fl_Box.H; sourceTree = SOURCE_ROOT; }; + C9B9CA0F1062DFB30032F684 /* Fl_Browser_.H */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = Fl_Browser_.H; path = ../../FL/Fl_Browser_.H; sourceTree = SOURCE_ROOT; }; + C9B9CA101062DFB30032F684 /* Fl_Browser.H */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = Fl_Browser.H; path = ../../FL/Fl_Browser.H; sourceTree = SOURCE_ROOT; }; + C9B9CA111062DFB30032F684 /* Fl_Button.H */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = Fl_Button.H; path = ../../FL/Fl_Button.H; sourceTree = SOURCE_ROOT; }; + C9B9CA121062DFB30032F684 /* Fl_Cairo_Window.H */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = Fl_Cairo_Window.H; path = ../../FL/Fl_Cairo_Window.H; sourceTree = SOURCE_ROOT; }; + C9B9CA131062DFB30032F684 /* Fl_Cairo.H */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = Fl_Cairo.H; path = ../../FL/Fl_Cairo.H; sourceTree = SOURCE_ROOT; }; + C9B9CA141062DFB30032F684 /* Fl_Chart.H */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = Fl_Chart.H; path = ../../FL/Fl_Chart.H; sourceTree = SOURCE_ROOT; }; + C9B9CA151062DFB30032F684 /* Fl_Check_Browser.H */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = Fl_Check_Browser.H; path = ../../FL/Fl_Check_Browser.H; sourceTree = SOURCE_ROOT; }; + C9B9CA161062DFB30032F684 /* Fl_Check_Button.H */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = Fl_Check_Button.H; path = ../../FL/Fl_Check_Button.H; sourceTree = SOURCE_ROOT; }; + C9B9CA171062DFB30032F684 /* Fl_Choice.H */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = Fl_Choice.H; path = ../../FL/Fl_Choice.H; sourceTree = SOURCE_ROOT; }; + C9B9CA181062DFB30032F684 /* Fl_Clock.H */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = Fl_Clock.H; path = ../../FL/Fl_Clock.H; sourceTree = SOURCE_ROOT; }; + C9B9CA191062DFB30032F684 /* Fl_Color_Chooser.H */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = Fl_Color_Chooser.H; path = ../../FL/Fl_Color_Chooser.H; sourceTree = SOURCE_ROOT; }; + C9B9CA1A1062DFB30032F684 /* Fl_Counter.H */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = Fl_Counter.H; path = ../../FL/Fl_Counter.H; sourceTree = SOURCE_ROOT; }; + C9B9CA1B1062DFB30032F684 /* Fl_Dial.H */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = Fl_Dial.H; path = ../../FL/Fl_Dial.H; sourceTree = SOURCE_ROOT; }; + C9B9CA1C1062DFB30032F684 /* Fl_Double_Window.H */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = Fl_Double_Window.H; path = ../../FL/Fl_Double_Window.H; sourceTree = SOURCE_ROOT; }; + C9B9CA1D1062DFB30032F684 /* fl_draw.H */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = fl_draw.H; path = ../../FL/fl_draw.H; sourceTree = SOURCE_ROOT; }; + C9B9CA1E1062DFB30032F684 /* Fl_Export.H */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = Fl_Export.H; path = ../../FL/Fl_Export.H; sourceTree = SOURCE_ROOT; }; + C9B9CA1F1062DFB30032F684 /* Fl_File_Browser.H */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = Fl_File_Browser.H; path = ../../FL/Fl_File_Browser.H; sourceTree = SOURCE_ROOT; }; + C9B9CA201062DFB30032F684 /* Fl_File_Chooser.H */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = Fl_File_Chooser.H; path = ../../FL/Fl_File_Chooser.H; sourceTree = SOURCE_ROOT; }; + C9B9CA211062DFB30032F684 /* Fl_File_Icon.H */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = Fl_File_Icon.H; path = ../../FL/Fl_File_Icon.H; sourceTree = SOURCE_ROOT; }; + C9B9CA221062DFB30032F684 /* Fl_File_Input.H */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = Fl_File_Input.H; path = ../../FL/Fl_File_Input.H; sourceTree = SOURCE_ROOT; }; + C9B9CA231062DFB30032F684 /* Fl_Fill_Dial.H */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = Fl_Fill_Dial.H; path = ../../FL/Fl_Fill_Dial.H; sourceTree = SOURCE_ROOT; }; + C9B9CA241062DFB30032F684 /* Fl_Fill_Slider.H */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = Fl_Fill_Slider.H; path = ../../FL/Fl_Fill_Slider.H; sourceTree = SOURCE_ROOT; }; + C9B9CA251062DFB30032F684 /* Fl_Float_Input.H */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = Fl_Float_Input.H; path = ../../FL/Fl_Float_Input.H; sourceTree = SOURCE_ROOT; }; + C9B9CA261062DFB30032F684 /* Fl_FormsBitmap.H */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = Fl_FormsBitmap.H; path = ../../FL/Fl_FormsBitmap.H; sourceTree = SOURCE_ROOT; }; + C9B9CA271062DFB30032F684 /* Fl_FormsPixmap.H */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = Fl_FormsPixmap.H; path = ../../FL/Fl_FormsPixmap.H; sourceTree = SOURCE_ROOT; }; + C9B9CA281062DFB30032F684 /* Fl_Free.H */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = Fl_Free.H; path = ../../FL/Fl_Free.H; sourceTree = SOURCE_ROOT; }; + C9B9CA291062DFB30032F684 /* Fl_GIF_Image.H */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = Fl_GIF_Image.H; path = ../../FL/Fl_GIF_Image.H; sourceTree = SOURCE_ROOT; }; + C9B9CA2A1062DFB30032F684 /* Fl_Gl_Window.H */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = Fl_Gl_Window.H; path = ../../FL/Fl_Gl_Window.H; sourceTree = SOURCE_ROOT; }; + C9B9CA2B1062DFB30032F684 /* Fl_Group.H */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = Fl_Group.H; path = ../../FL/Fl_Group.H; sourceTree = SOURCE_ROOT; }; + C9B9CA2C1062DFB30032F684 /* Fl_Help_Dialog.H */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = Fl_Help_Dialog.H; path = ../../FL/Fl_Help_Dialog.H; sourceTree = SOURCE_ROOT; }; + C9B9CA2D1062DFB30032F684 /* Fl_Help_View.H */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = Fl_Help_View.H; path = ../../FL/Fl_Help_View.H; sourceTree = SOURCE_ROOT; }; + C9B9CA2E1062DFB30032F684 /* Fl_Hold_Browser.H */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = Fl_Hold_Browser.H; path = ../../FL/Fl_Hold_Browser.H; sourceTree = SOURCE_ROOT; }; + C9B9CA2F1062DFB30032F684 /* Fl_Hor_Fill_Slider.H */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = Fl_Hor_Fill_Slider.H; path = ../../FL/Fl_Hor_Fill_Slider.H; sourceTree = SOURCE_ROOT; }; + C9B9CA301062DFB30032F684 /* Fl_Hor_Nice_Slider.H */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = Fl_Hor_Nice_Slider.H; path = ../../FL/Fl_Hor_Nice_Slider.H; sourceTree = SOURCE_ROOT; }; + C9B9CA311062DFB30032F684 /* Fl_Hor_Slider.H */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = Fl_Hor_Slider.H; path = ../../FL/Fl_Hor_Slider.H; sourceTree = SOURCE_ROOT; }; + C9B9CA321062DFB30032F684 /* Fl_Hor_Value_Slider.H */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = Fl_Hor_Value_Slider.H; path = ../../FL/Fl_Hor_Value_Slider.H; sourceTree = SOURCE_ROOT; }; + C9B9CA331062DFB30032F684 /* Fl_Image.H */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = Fl_Image.H; path = ../../FL/Fl_Image.H; sourceTree = SOURCE_ROOT; }; + C9B9CA341062DFB30032F684 /* Fl_Input_.H */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = Fl_Input_.H; path = ../../FL/Fl_Input_.H; sourceTree = SOURCE_ROOT; }; + C9B9CA351062DFB30032F684 /* Fl_Input_Choice.H */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = Fl_Input_Choice.H; path = ../../FL/Fl_Input_Choice.H; sourceTree = SOURCE_ROOT; }; + C9B9CA361062DFB30032F684 /* Fl_Input.H */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = Fl_Input.H; path = ../../FL/Fl_Input.H; sourceTree = SOURCE_ROOT; }; + C9B9CA371062DFB30032F684 /* Fl_Int_Input.H */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = Fl_Int_Input.H; path = ../../FL/Fl_Int_Input.H; sourceTree = SOURCE_ROOT; }; + C9B9CA381062DFB30032F684 /* Fl_JPEG_Image.H */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = Fl_JPEG_Image.H; path = ../../FL/Fl_JPEG_Image.H; sourceTree = SOURCE_ROOT; }; + C9B9CA391062DFB30032F684 /* Fl_Light_Button.H */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = Fl_Light_Button.H; path = ../../FL/Fl_Light_Button.H; sourceTree = SOURCE_ROOT; }; + C9B9CA3A1062DFB30032F684 /* Fl_Line_Dial.H */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = Fl_Line_Dial.H; path = ../../FL/Fl_Line_Dial.H; sourceTree = SOURCE_ROOT; }; + C9B9CA3B1062DFB30032F684 /* Fl_Menu_.H */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = Fl_Menu_.H; path = ../../FL/Fl_Menu_.H; sourceTree = SOURCE_ROOT; }; + C9B9CA3C1062DFB30032F684 /* Fl_Menu_Bar.H */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = Fl_Menu_Bar.H; path = ../../FL/Fl_Menu_Bar.H; sourceTree = SOURCE_ROOT; }; + C9B9CA3D1062DFB30032F684 /* Fl_Menu_Button.H */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = Fl_Menu_Button.H; path = ../../FL/Fl_Menu_Button.H; sourceTree = SOURCE_ROOT; }; + C9B9CA3E1062DFB30032F684 /* Fl_Menu_Item.H */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = Fl_Menu_Item.H; path = ../../FL/Fl_Menu_Item.H; sourceTree = SOURCE_ROOT; }; + C9B9CA3F1062DFB30032F684 /* Fl_Menu_Window.H */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = Fl_Menu_Window.H; path = ../../FL/Fl_Menu_Window.H; sourceTree = SOURCE_ROOT; }; + C9B9CA401062DFB30032F684 /* Fl_Menu.H */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = Fl_Menu.H; path = ../../FL/Fl_Menu.H; sourceTree = SOURCE_ROOT; }; + C9B9CA411062DFB30032F684 /* fl_message.H */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = fl_message.H; path = ../../FL/fl_message.H; sourceTree = SOURCE_ROOT; }; + C9B9CA421062DFB30032F684 /* Fl_Multi_Browser.H */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = Fl_Multi_Browser.H; path = ../../FL/Fl_Multi_Browser.H; sourceTree = SOURCE_ROOT; }; + C9B9CA431062DFB30032F684 /* Fl_Multi_Label.H */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = Fl_Multi_Label.H; path = ../../FL/Fl_Multi_Label.H; sourceTree = SOURCE_ROOT; }; + C9B9CA441062DFB30032F684 /* Fl_Multiline_Input.H */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = Fl_Multiline_Input.H; path = ../../FL/Fl_Multiline_Input.H; sourceTree = SOURCE_ROOT; }; + C9B9CA451062DFB30032F684 /* Fl_Multiline_Output.H */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = Fl_Multiline_Output.H; path = ../../FL/Fl_Multiline_Output.H; sourceTree = SOURCE_ROOT; }; + C9B9CA461062DFB30032F684 /* Fl_Nice_Slider.H */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = Fl_Nice_Slider.H; path = ../../FL/Fl_Nice_Slider.H; sourceTree = SOURCE_ROOT; }; + C9B9CA471062DFB30032F684 /* Fl_Object.H */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = Fl_Object.H; path = ../../FL/Fl_Object.H; sourceTree = SOURCE_ROOT; }; + C9B9CA481062DFB30032F684 /* Fl_Output.H */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = Fl_Output.H; path = ../../FL/Fl_Output.H; sourceTree = SOURCE_ROOT; }; + C9B9CA491062DFB30032F684 /* Fl_Overlay_Window.H */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = Fl_Overlay_Window.H; path = ../../FL/Fl_Overlay_Window.H; sourceTree = SOURCE_ROOT; }; + C9B9CA4A1062DFB30032F684 /* Fl_Pack.H */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = Fl_Pack.H; path = ../../FL/Fl_Pack.H; sourceTree = SOURCE_ROOT; }; + C9B9CA4B1062DFB30032F684 /* Fl_Pixmap.H */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = Fl_Pixmap.H; path = ../../FL/Fl_Pixmap.H; sourceTree = SOURCE_ROOT; }; + C9B9CA4C1062DFB30032F684 /* Fl_PNG_Image.H */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = Fl_PNG_Image.H; path = ../../FL/Fl_PNG_Image.H; sourceTree = SOURCE_ROOT; }; + C9B9CA4D1062DFB30032F684 /* Fl_PNM_Image.H */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = Fl_PNM_Image.H; path = ../../FL/Fl_PNM_Image.H; sourceTree = SOURCE_ROOT; }; + C9B9CA4E1062DFB30032F684 /* Fl_Positioner.H */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = Fl_Positioner.H; path = ../../FL/Fl_Positioner.H; sourceTree = SOURCE_ROOT; }; + C9B9CA4F1062DFB30032F684 /* Fl_Preferences.H */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = Fl_Preferences.H; path = ../../FL/Fl_Preferences.H; sourceTree = SOURCE_ROOT; }; + C9B9CA501062DFB30032F684 /* Fl_Progress.H */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = Fl_Progress.H; path = ../../FL/Fl_Progress.H; sourceTree = SOURCE_ROOT; }; + C9B9CA511062DFB30032F684 /* Fl_Radio_Button.H */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = Fl_Radio_Button.H; path = ../../FL/Fl_Radio_Button.H; sourceTree = SOURCE_ROOT; }; + C9B9CA521062DFB30032F684 /* Fl_Radio_Light_Button.H */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = Fl_Radio_Light_Button.H; path = ../../FL/Fl_Radio_Light_Button.H; sourceTree = SOURCE_ROOT; }; + C9B9CA531062DFB30032F684 /* Fl_Radio_Round_Button.H */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = Fl_Radio_Round_Button.H; path = ../../FL/Fl_Radio_Round_Button.H; sourceTree = SOURCE_ROOT; }; + C9B9CA541062DFB30032F684 /* Fl_Repeat_Button.H */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = Fl_Repeat_Button.H; path = ../../FL/Fl_Repeat_Button.H; sourceTree = SOURCE_ROOT; }; + C9B9CA551062DFB30032F684 /* Fl_Return_Button.H */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = Fl_Return_Button.H; path = ../../FL/Fl_Return_Button.H; sourceTree = SOURCE_ROOT; }; + C9B9CA561062DFB30032F684 /* Fl_RGB_Image.H */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = Fl_RGB_Image.H; path = ../../FL/Fl_RGB_Image.H; sourceTree = SOURCE_ROOT; }; + C9B9CA571062DFB30032F684 /* Fl_Roller.H */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = Fl_Roller.H; path = ../../FL/Fl_Roller.H; sourceTree = SOURCE_ROOT; }; + C9B9CA581062DFB30032F684 /* Fl_Round_Button.H */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = Fl_Round_Button.H; path = ../../FL/Fl_Round_Button.H; sourceTree = SOURCE_ROOT; }; + C9B9CA591062DFB30032F684 /* Fl_Round_Clock.H */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = Fl_Round_Clock.H; path = ../../FL/Fl_Round_Clock.H; sourceTree = SOURCE_ROOT; }; + C9B9CA5A1062DFB30032F684 /* Fl_Scroll.H */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = Fl_Scroll.H; path = ../../FL/Fl_Scroll.H; sourceTree = SOURCE_ROOT; }; + C9B9CA5B1062DFB30032F684 /* Fl_Scrollbar.H */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = Fl_Scrollbar.H; path = ../../FL/Fl_Scrollbar.H; sourceTree = SOURCE_ROOT; }; + C9B9CA5C1062DFB30032F684 /* Fl_Secret_Input.H */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = Fl_Secret_Input.H; path = ../../FL/Fl_Secret_Input.H; sourceTree = SOURCE_ROOT; }; + C9B9CA5D1062DFB30032F684 /* Fl_Select_Browser.H */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = Fl_Select_Browser.H; path = ../../FL/Fl_Select_Browser.H; sourceTree = SOURCE_ROOT; }; + C9B9CA5E1062DFB30032F684 /* Fl_Shared_Image.H */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = Fl_Shared_Image.H; path = ../../FL/Fl_Shared_Image.H; sourceTree = SOURCE_ROOT; }; + C9B9CA5F1062DFB30032F684 /* fl_show_colormap.H */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = fl_show_colormap.H; path = ../../FL/fl_show_colormap.H; sourceTree = SOURCE_ROOT; }; + C9B9CA601062DFB30032F684 /* fl_show_input.H */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = fl_show_input.H; path = ../../FL/fl_show_input.H; sourceTree = SOURCE_ROOT; }; + C9B9CA611062DFB30032F684 /* Fl_Simple_Counter.H */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = Fl_Simple_Counter.H; path = ../../FL/Fl_Simple_Counter.H; sourceTree = SOURCE_ROOT; }; + C9B9CA621062DFB30032F684 /* Fl_Single_Window.H */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = Fl_Single_Window.H; path = ../../FL/Fl_Single_Window.H; sourceTree = SOURCE_ROOT; }; + C9B9CA631062DFB30032F684 /* Fl_Slider.H */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = Fl_Slider.H; path = ../../FL/Fl_Slider.H; sourceTree = SOURCE_ROOT; }; + C9B9CA641062DFB30032F684 /* Fl_Spinner.H */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = Fl_Spinner.H; path = ../../FL/Fl_Spinner.H; sourceTree = SOURCE_ROOT; }; + C9B9CA651062DFB30032F684 /* Fl_Sys_Menu_Bar.H */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = Fl_Sys_Menu_Bar.H; path = ../../FL/Fl_Sys_Menu_Bar.H; sourceTree = SOURCE_ROOT; }; + C9B9CA661062DFB30032F684 /* Fl_Tabs.H */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = Fl_Tabs.H; path = ../../FL/Fl_Tabs.H; sourceTree = SOURCE_ROOT; }; + C9B9CA671062DFB30032F684 /* Fl_Text_Buffer.H */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = Fl_Text_Buffer.H; path = ../../FL/Fl_Text_Buffer.H; sourceTree = SOURCE_ROOT; }; + C9B9CA681062DFB30032F684 /* Fl_Text_Display.H */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = Fl_Text_Display.H; path = ../../FL/Fl_Text_Display.H; sourceTree = SOURCE_ROOT; }; + C9B9CA691062DFB30032F684 /* Fl_Text_Editor.H */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = Fl_Text_Editor.H; path = ../../FL/Fl_Text_Editor.H; sourceTree = SOURCE_ROOT; }; + C9B9CA6A1062DFB30032F684 /* Fl_Tile.H */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = Fl_Tile.H; path = ../../FL/Fl_Tile.H; sourceTree = SOURCE_ROOT; }; + C9B9CA6B1062DFB30032F684 /* Fl_Tiled_Image.H */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = Fl_Tiled_Image.H; path = ../../FL/Fl_Tiled_Image.H; sourceTree = SOURCE_ROOT; }; + C9B9CA6C1062DFB30032F684 /* Fl_Timer.H */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = Fl_Timer.H; path = ../../FL/Fl_Timer.H; sourceTree = SOURCE_ROOT; }; + C9B9CA6D1062DFB30032F684 /* Fl_Toggle_Button.H */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = Fl_Toggle_Button.H; path = ../../FL/Fl_Toggle_Button.H; sourceTree = SOURCE_ROOT; }; + C9B9CA6E1062DFB30032F684 /* Fl_Toggle_Light_Button.H */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = Fl_Toggle_Light_Button.H; path = ../../FL/Fl_Toggle_Light_Button.H; sourceTree = SOURCE_ROOT; }; + C9B9CA6F1062DFB30032F684 /* Fl_Toggle_Round_Button.H */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = Fl_Toggle_Round_Button.H; path = ../../FL/Fl_Toggle_Round_Button.H; sourceTree = SOURCE_ROOT; }; + C9B9CA701062DFB30032F684 /* Fl_Tooltip.H */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = Fl_Tooltip.H; path = ../../FL/Fl_Tooltip.H; sourceTree = SOURCE_ROOT; }; + C9B9CA711062DFB30032F684 /* fl_utf8.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = fl_utf8.h; path = ../../FL/fl_utf8.h; sourceTree = SOURCE_ROOT; }; + C9B9CA721062DFB30032F684 /* Fl_Valuator.H */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = Fl_Valuator.H; path = ../../FL/Fl_Valuator.H; sourceTree = SOURCE_ROOT; }; + C9B9CA731062DFB30032F684 /* Fl_Value_Input.H */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = Fl_Value_Input.H; path = ../../FL/Fl_Value_Input.H; sourceTree = SOURCE_ROOT; }; + C9B9CA741062DFB30032F684 /* Fl_Value_Output.H */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = Fl_Value_Output.H; path = ../../FL/Fl_Value_Output.H; sourceTree = SOURCE_ROOT; }; + C9B9CA751062DFB30032F684 /* Fl_Value_Slider.H */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = Fl_Value_Slider.H; path = ../../FL/Fl_Value_Slider.H; sourceTree = SOURCE_ROOT; }; + C9B9CA761062DFB30032F684 /* Fl_Widget.H */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = Fl_Widget.H; path = ../../FL/Fl_Widget.H; sourceTree = SOURCE_ROOT; }; + C9B9CA771062DFB30032F684 /* Fl_Window.H */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = Fl_Window.H; path = ../../FL/Fl_Window.H; sourceTree = SOURCE_ROOT; }; + C9B9CA781062DFB30032F684 /* Fl_Wizard.H */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = Fl_Wizard.H; path = ../../FL/Fl_Wizard.H; sourceTree = SOURCE_ROOT; }; + C9B9CA791062DFB30032F684 /* Fl_XBM_Image.H */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = Fl_XBM_Image.H; path = ../../FL/Fl_XBM_Image.H; sourceTree = SOURCE_ROOT; }; + C9B9CA7A1062DFB30032F684 /* Fl_XPM_Image.H */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = Fl_XPM_Image.H; path = ../../FL/Fl_XPM_Image.H; sourceTree = SOURCE_ROOT; }; + C9B9CA7B1062DFB30032F684 /* Fl.H */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = Fl.H; path = ../../FL/Fl.H; sourceTree = SOURCE_ROOT; }; + C9B9CA7C1062DFB30032F684 /* forms.H */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = forms.H; path = ../../FL/forms.H; sourceTree = SOURCE_ROOT; }; + C9B9CA7D1062DFB30032F684 /* gl_draw.H */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = gl_draw.H; path = ../../FL/gl_draw.H; sourceTree = SOURCE_ROOT; }; + C9B9CA7E1062DFB30032F684 /* gl.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = gl.h; path = ../../FL/gl.h; sourceTree = SOURCE_ROOT; }; + C9B9CA7F1062DFB30032F684 /* gl2opengl.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = gl2opengl.h; path = ../../FL/gl2opengl.h; sourceTree = SOURCE_ROOT; }; + C9B9CA801062DFB30032F684 /* glu.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = glu.h; path = ../../FL/glu.h; sourceTree = SOURCE_ROOT; }; + C9B9CA811062DFB30032F684 /* glut.H */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = glut.H; path = ../../FL/glut.H; sourceTree = SOURCE_ROOT; }; + C9B9CA821062DFB30032F684 /* mac.H */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = mac.H; path = ../../FL/mac.H; sourceTree = SOURCE_ROOT; }; + C9B9CA831062DFB30032F684 /* math.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = math.h; path = ../../FL/math.h; sourceTree = SOURCE_ROOT; }; + C9B9CA841062DFB30032F684 /* names.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = names.h; path = ../../FL/names.h; sourceTree = SOURCE_ROOT; }; + C9B9CA851062DFB30032F684 /* win32.H */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = win32.H; path = ../../FL/win32.H; sourceTree = SOURCE_ROOT; }; + C9B9CA861062DFB30032F684 /* x.H */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = x.H; path = ../../FL/x.H; sourceTree = SOURCE_ROOT; }; + C9B9CA871062DFB30032F684 /* Xutf8.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = Xutf8.h; path = ../../FL/Xutf8.h; sourceTree = SOURCE_ROOT; }; C9C870BE0DD7721700A9793F /* color_chooser.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = color_chooser.app; sourceTree = BUILT_PRODUCTS_DIR; }; C9C870C00DD7721700A9793F /* color_chooser-Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; name = "color_chooser-Info.plist"; path = "plists/color_chooser-Info.plist"; sourceTree = ""; }; C9C870C80DD7724200A9793F /* color_chooser.cxx */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = color_chooser.cxx; path = ../../test/color_chooser.cxx; sourceTree = SOURCE_ROOT; }; @@ -3758,6 +3885,7 @@ C9A3E95A0DD6339500486E4F /* Test Sources */, C9C8737D0DD7773200A9793F /* Fluid Sources */, C9A3E9590DD6338B00486E4F /* Library Sources */, + C9B9C9F51062DEE60032F684 /* Library Headers */, C9DD57660DD7820400A896B4 /* jpeg Sources */, C9DD576D0DD7821800A896B4 /* png Sources */, C9A3E9580DD6338300486E4F /* plists */, @@ -4216,6 +4344,140 @@ name = Frameworks; sourceTree = ""; }; + C9B9C9F51062DEE60032F684 /* Library Headers */ = { + isa = PBXGroup; + children = ( + C9B9CA091062DFB30032F684 /* filename.H */, + C9B9CA0A1062DFB30032F684 /* Fl_Adjuster.H */, + C9B9CA0B1062DFB30032F684 /* fl_ask.H */, + C9B9CA0C1062DFB30032F684 /* Fl_Bitmap.H */, + C9B9CA0D1062DFB30032F684 /* Fl_BMP_Image.H */, + C9B9CA0E1062DFB30032F684 /* Fl_Box.H */, + C9B9CA0F1062DFB30032F684 /* Fl_Browser_.H */, + C9B9CA101062DFB30032F684 /* Fl_Browser.H */, + C9B9CA111062DFB30032F684 /* Fl_Button.H */, + C9B9CA121062DFB30032F684 /* Fl_Cairo_Window.H */, + C9B9CA131062DFB30032F684 /* Fl_Cairo.H */, + C9B9CA141062DFB30032F684 /* Fl_Chart.H */, + C9B9CA151062DFB30032F684 /* Fl_Check_Browser.H */, + C9B9CA161062DFB30032F684 /* Fl_Check_Button.H */, + C9B9CA171062DFB30032F684 /* Fl_Choice.H */, + C9B9CA181062DFB30032F684 /* Fl_Clock.H */, + C9B9CA191062DFB30032F684 /* Fl_Color_Chooser.H */, + C9B9CA1A1062DFB30032F684 /* Fl_Counter.H */, + C9B9CA1B1062DFB30032F684 /* Fl_Dial.H */, + C9B9CA1C1062DFB30032F684 /* Fl_Double_Window.H */, + C9B9CA1D1062DFB30032F684 /* fl_draw.H */, + C9B9CA1E1062DFB30032F684 /* Fl_Export.H */, + C9B9CA1F1062DFB30032F684 /* Fl_File_Browser.H */, + C9B9CA201062DFB30032F684 /* Fl_File_Chooser.H */, + C9B9CA211062DFB30032F684 /* Fl_File_Icon.H */, + C9B9CA221062DFB30032F684 /* Fl_File_Input.H */, + C9B9CA231062DFB30032F684 /* Fl_Fill_Dial.H */, + C9B9CA241062DFB30032F684 /* Fl_Fill_Slider.H */, + C9B9CA251062DFB30032F684 /* Fl_Float_Input.H */, + C9B9CA261062DFB30032F684 /* Fl_FormsBitmap.H */, + C9B9CA271062DFB30032F684 /* Fl_FormsPixmap.H */, + C9B9CA281062DFB30032F684 /* Fl_Free.H */, + C9B9CA291062DFB30032F684 /* Fl_GIF_Image.H */, + C9B9CA2A1062DFB30032F684 /* Fl_Gl_Window.H */, + C9B9CA2B1062DFB30032F684 /* Fl_Group.H */, + C9B9CA2C1062DFB30032F684 /* Fl_Help_Dialog.H */, + C9B9CA2D1062DFB30032F684 /* Fl_Help_View.H */, + C9B9CA2E1062DFB30032F684 /* Fl_Hold_Browser.H */, + C9B9CA2F1062DFB30032F684 /* Fl_Hor_Fill_Slider.H */, + C9B9CA301062DFB30032F684 /* Fl_Hor_Nice_Slider.H */, + C9B9CA311062DFB30032F684 /* Fl_Hor_Slider.H */, + C9B9CA321062DFB30032F684 /* Fl_Hor_Value_Slider.H */, + C9B9CA331062DFB30032F684 /* Fl_Image.H */, + C9B9CA341062DFB30032F684 /* Fl_Input_.H */, + C9B9CA351062DFB30032F684 /* Fl_Input_Choice.H */, + C9B9CA361062DFB30032F684 /* Fl_Input.H */, + C9B9CA371062DFB30032F684 /* Fl_Int_Input.H */, + C9B9CA381062DFB30032F684 /* Fl_JPEG_Image.H */, + C9B9CA391062DFB30032F684 /* Fl_Light_Button.H */, + C9B9CA3A1062DFB30032F684 /* Fl_Line_Dial.H */, + C9B9CA3B1062DFB30032F684 /* Fl_Menu_.H */, + C9B9CA3C1062DFB30032F684 /* Fl_Menu_Bar.H */, + C9B9CA3D1062DFB30032F684 /* Fl_Menu_Button.H */, + C9B9CA3E1062DFB30032F684 /* Fl_Menu_Item.H */, + C9B9CA3F1062DFB30032F684 /* Fl_Menu_Window.H */, + C9B9CA401062DFB30032F684 /* Fl_Menu.H */, + C9B9CA411062DFB30032F684 /* fl_message.H */, + C9B9CA421062DFB30032F684 /* Fl_Multi_Browser.H */, + C9B9CA431062DFB30032F684 /* Fl_Multi_Label.H */, + C9B9CA441062DFB30032F684 /* Fl_Multiline_Input.H */, + C9B9CA451062DFB30032F684 /* Fl_Multiline_Output.H */, + C9B9CA461062DFB30032F684 /* Fl_Nice_Slider.H */, + C9B9CA471062DFB30032F684 /* Fl_Object.H */, + C9B9CA481062DFB30032F684 /* Fl_Output.H */, + C9B9CA491062DFB30032F684 /* Fl_Overlay_Window.H */, + C9B9CA4A1062DFB30032F684 /* Fl_Pack.H */, + C9B9CA4B1062DFB30032F684 /* Fl_Pixmap.H */, + C9B9CA4C1062DFB30032F684 /* Fl_PNG_Image.H */, + C9B9CA4D1062DFB30032F684 /* Fl_PNM_Image.H */, + C9B9CA4E1062DFB30032F684 /* Fl_Positioner.H */, + C9B9CA4F1062DFB30032F684 /* Fl_Preferences.H */, + C9B9CA501062DFB30032F684 /* Fl_Progress.H */, + C9B9CA511062DFB30032F684 /* Fl_Radio_Button.H */, + C9B9CA521062DFB30032F684 /* Fl_Radio_Light_Button.H */, + C9B9CA531062DFB30032F684 /* Fl_Radio_Round_Button.H */, + C9B9CA541062DFB30032F684 /* Fl_Repeat_Button.H */, + C9B9CA551062DFB30032F684 /* Fl_Return_Button.H */, + C9B9CA561062DFB30032F684 /* Fl_RGB_Image.H */, + C9B9CA571062DFB30032F684 /* Fl_Roller.H */, + C9B9CA581062DFB30032F684 /* Fl_Round_Button.H */, + C9B9CA591062DFB30032F684 /* Fl_Round_Clock.H */, + C9B9CA5A1062DFB30032F684 /* Fl_Scroll.H */, + C9B9CA5B1062DFB30032F684 /* Fl_Scrollbar.H */, + C9B9CA5C1062DFB30032F684 /* Fl_Secret_Input.H */, + C9B9CA5D1062DFB30032F684 /* Fl_Select_Browser.H */, + C9B9CA5E1062DFB30032F684 /* Fl_Shared_Image.H */, + C9B9CA5F1062DFB30032F684 /* fl_show_colormap.H */, + C9B9CA601062DFB30032F684 /* fl_show_input.H */, + C9B9CA611062DFB30032F684 /* Fl_Simple_Counter.H */, + C9B9CA621062DFB30032F684 /* Fl_Single_Window.H */, + C9B9CA631062DFB30032F684 /* Fl_Slider.H */, + C9B9CA641062DFB30032F684 /* Fl_Spinner.H */, + C9B9CA651062DFB30032F684 /* Fl_Sys_Menu_Bar.H */, + C9B9CA661062DFB30032F684 /* Fl_Tabs.H */, + C9B9CA671062DFB30032F684 /* Fl_Text_Buffer.H */, + C9B9CA681062DFB30032F684 /* Fl_Text_Display.H */, + C9B9CA691062DFB30032F684 /* Fl_Text_Editor.H */, + C9B9CA6A1062DFB30032F684 /* Fl_Tile.H */, + C9B9CA6B1062DFB30032F684 /* Fl_Tiled_Image.H */, + C9B9CA6C1062DFB30032F684 /* Fl_Timer.H */, + C9B9CA6D1062DFB30032F684 /* Fl_Toggle_Button.H */, + C9B9CA6E1062DFB30032F684 /* Fl_Toggle_Light_Button.H */, + C9B9CA6F1062DFB30032F684 /* Fl_Toggle_Round_Button.H */, + C9B9CA701062DFB30032F684 /* Fl_Tooltip.H */, + C9B9CA711062DFB30032F684 /* fl_utf8.h */, + C9B9CA721062DFB30032F684 /* Fl_Valuator.H */, + C9B9CA731062DFB30032F684 /* Fl_Value_Input.H */, + C9B9CA741062DFB30032F684 /* Fl_Value_Output.H */, + C9B9CA751062DFB30032F684 /* Fl_Value_Slider.H */, + C9B9CA761062DFB30032F684 /* Fl_Widget.H */, + C9B9CA771062DFB30032F684 /* Fl_Window.H */, + C9B9CA781062DFB30032F684 /* Fl_Wizard.H */, + C9B9CA791062DFB30032F684 /* Fl_XBM_Image.H */, + C9B9CA7A1062DFB30032F684 /* Fl_XPM_Image.H */, + C9B9CA7B1062DFB30032F684 /* Fl.H */, + C9B9CA7C1062DFB30032F684 /* forms.H */, + C9B9CA7D1062DFB30032F684 /* gl_draw.H */, + C9B9CA7E1062DFB30032F684 /* gl.h */, + C9B9CA7F1062DFB30032F684 /* gl2opengl.h */, + C9B9CA801062DFB30032F684 /* glu.h */, + C9B9CA811062DFB30032F684 /* glut.H */, + C9B9CA821062DFB30032F684 /* mac.H */, + C9B9CA831062DFB30032F684 /* math.h */, + C9B9CA841062DFB30032F684 /* names.h */, + C9B9CA851062DFB30032F684 /* win32.H */, + C9B9CA861062DFB30032F684 /* x.H */, + C9B9CA871062DFB30032F684 /* Xutf8.h */, + ); + name = "Library Headers"; + sourceTree = ""; + }; C9C8737D0DD7773200A9793F /* Fluid Sources */ = { isa = PBXGroup; children = ( diff --git a/src/Fl_Menu_add.cxx b/src/Fl_Menu_add.cxx index d6af454fa..abea24dec 100644 --- a/src/Fl_Menu_add.cxx +++ b/src/Fl_Menu_add.cxx @@ -235,7 +235,7 @@ int Fl_Menu_Item::add( ^ - Control \endverbatim Text shortcuts are converted to integer shortcut by calling - int fl_old_shortcut(const char*). + Fl_Shortcut fl_old_shortcut(const char*). \par callback The callback to invoke when this menu item is selected. diff --git a/src/fl_shortcut.cxx b/src/fl_shortcut.cxx index cd6f1cf9e..a189cfdba 100644 --- a/src/fl_shortcut.cxx +++ b/src/fl_shortcut.cxx @@ -39,7 +39,7 @@ // It also checks against the first character of Fl::event_text(), // and zero for FL_SHIFT means "don't care". // This allows punctuation shortcuts like "#" to work (rather than -// calling it "shift+3") +// calling it "shift+3" on a US keyboard) #include #include @@ -58,19 +58,12 @@ be confused with Fl_Widget::test_shortcut(). */ -int Fl::test_shortcut(int shortcut) { +int Fl::test_shortcut(Fl_Shortcut shortcut) { if (!shortcut) return 0; - int v = shortcut & 0xffff; -#ifdef __APPLE__ - if (v > 32 && v < 0x7f || v >= 0x80 && v <= 0xff) { -#else - // most X11 use MSWindows Latin-1 if set to Western encoding, so 0x80 to 0xa0 are defined - if (v > 32 && v < 0x7f || v >= 0x80 && v <= 0xff) { -#endif - if (isupper(v)) { - shortcut |= FL_SHIFT; - } + Fl_Char v = shortcut & FL_KEY_MASK; + if (fl_tolower(v)!=v) { + shortcut |= FL_SHIFT; } int shift = Fl::event_state(); @@ -81,17 +74,18 @@ int Fl::test_shortcut(int shortcut) { // these three must always be correct: if (mismatch&(FL_META|FL_ALT|FL_CTRL)) return 0; - int key = shortcut & 0xffff; + Fl_Char key = shortcut & FL_KEY_MASK; // if shift is also correct, check for exactly equal keysyms: if (!(mismatch&(FL_SHIFT)) && key == Fl::event_key()) return 1; - // try matching ascii, ignore shift: - if (key == event_text()[0]) return 1; + // try matching utf8, ignore shift: + Fl_Char firstChar = fl_utf8decode(Fl::event_text(), Fl::event_text()+Fl::event_length(), 0); + if (key==firstChar) return 1; // kludge so that Ctrl+'_' works (as opposed to Ctrl+'^_'): if ((shift&FL_CTRL) && key >= 0x3f && key <= 0x5F - && event_text()[0]==(key^0x40)) return 1; + && firstChar==(key^0x40)) return 1; // firstChar should be within a-z return 0; } @@ -180,7 +174,7 @@ static Keyname table[] = { \param [in] shortcut the integer value containing the ascii charcter or extended keystroke plus modifiers \return a pointer to a static buffer containing human readable text for the shortcut */ -const char* fl_shortcut_label(int shortcut) { +const char* fl_shortcut_label(Fl_Shortcut shortcut) { return fl_shortcut_label(shortcut, 0L); } @@ -190,23 +184,17 @@ const char* fl_shortcut_label(int shortcut) { \param [in] shortcut the integer value containing the ascii charcter or extended keystroke plus modifiers \param [in] eom if this pointer is set, it will receive a pointer to the end of the modifier text \return a pointer to a static buffer containing human readable text for the shortcut - \see fl_shortcut_label(int shortcut) + \see fl_shortcut_label(Fl_Shortcut shortcut) */ -const char* fl_shortcut_label(int shortcut, const char **eom) { +const char* fl_shortcut_label(Fl_Shortcut shortcut, const char **eom) { static char buf[20]; char *p = buf; if (eom) *eom = p; if (!shortcut) {*p = 0; return buf;} // fix upper case shortcuts - int v = shortcut & 0xffff; -#ifdef __APPLE__ - if (v > 32 && v < 0x7f || v >= 0x80 && v <= 0xff) { -#else - if (v > 32 && v < 0x7f || v >= 0xa0 && v <= 0xff) { -#endif - if (isupper(v)) { - shortcut |= FL_SHIFT; - } + Fl_Char v = shortcut & FL_KEY_MASK; + if (fl_tolower(v)!=v) { + shortcut |= FL_SHIFT; } #ifdef __APPLE__ // this column contains utf8 characters - v @@ -221,7 +209,7 @@ const char* fl_shortcut_label(int shortcut, const char **eom) { if (shortcut & FL_CTRL) {strcpy(p,"Ctrl+"); p += 5;} #endif // __APPLE__ if (eom) *eom = p; - int key = shortcut & 0xFFFF; + Fl_Char key = shortcut & FL_KEY_MASK; #if defined(WIN32) || defined(__APPLE__) // if not X if (key >= FL_F && key <= FL_F_Last) { *p++ = 'F'; @@ -234,7 +222,7 @@ const char* fl_shortcut_label(int shortcut, const char **eom) { while (a < b) { int c = (a+b)/2; if (table[c].key == key) { - if (p > buf) { + if (p > buf) { strcpy(p,table[c].name); return buf; } else { @@ -252,7 +240,7 @@ const char* fl_shortcut_label(int shortcut, const char **eom) { *p++ = uchar(key & 127); } else { // if none found, use the keystroke as a match: - *p++ = uchar(toupper(key & 255)); + p += fl_utf8encode(fl_toupper(key), p); } } *p = 0; @@ -262,7 +250,11 @@ const char* fl_shortcut_label(int shortcut, const char **eom) { if (key == FL_Enter || key == '\r') q="Enter"; // don't use Xlib's "Return": else if (key > 32 && key < 0x100) q = 0; else q = XKeysymToString(key); - if (!q) {*p++ = uchar(toupper(key & 255)); *p = 0; return buf;} + if (!q) { + p += fl_utf8encode(fl_toupper(key), p); + *p = 0; + return buf; + } if (p > buf) { strcpy(p,q); return buf; @@ -278,9 +270,9 @@ const char* fl_shortcut_label(int shortcut, const char **eom) { /** Emulation of XForms named shortcuts. */ -int fl_old_shortcut(const char* s) { +Fl_Shortcut fl_old_shortcut(const char* s) { if (!s || !*s) return 0; - int n = 0; + Fl_Shortcut n = 0; if (*s == '#') {n |= FL_ALT; s++;} if (*s == '+') {n |= FL_SHIFT; s++;} if (*s == '^') {n |= FL_CTRL; s++;} @@ -290,14 +282,14 @@ int fl_old_shortcut(const char* s) { // Tests for &x shortcuts in button labels: -char Fl_Widget::label_shortcut(const char *t) { +Fl_Shortcut Fl_Widget::label_shortcut(const char *t) { if (!t) return 0; for (;;) { if (*t==0) return 0; if (*t=='&') { - char s = t[1]; + Fl_Shortcut s = fl_utf8decode(t+1, 0, 0); if (s==0) return 0; - else if (s=='&') t++; + else if (s==(Fl_Char)'&') t++; else return s; } t++; @@ -309,8 +301,9 @@ int Fl_Widget::test_shortcut(const char *t) { // on MSWindows, users expect shortcuts to work only when the Alt modifier is pressed if (Fl::event_state(FL_ALT)==0) return 0; #endif - char c = Fl::event_text()[0]; - if (!c || !t) return 0; + if (!t) return 0; + Fl_Shortcut c = fl_utf8decode(Fl::event_text(), Fl::event_text()+Fl::event_length(), 0); + if (!c) return 0; if (c == label_shortcut(t)) return 1; return 0; diff --git a/test/menubar.cxx b/test/menubar.cxx index 6149a7ada..cae04d3f3 100644 --- a/test/menubar.cxx +++ b/test/menubar.cxx @@ -145,11 +145,13 @@ Fl_Menu_Item menutable[] = { {"Sharp Ess",0x0000df}, {"A Umlaut",0x0000c4}, {"a Umlaut",0x0000e4}, - {"Euro currency",0x0020ac}, - {"the &ü Umlaut"}, - {"the capital &Ü"}, - {"convert ¥ to &£"}, - {"convert £ to &¥"}, + {"Euro currency",FL_COMMAND+0x0020ac}, + {"the &\xc3\xbc Umlaut"}, // ü + {"the capital &\xc3\x9c"}, // Ü + {"convert \xc2\xa5 to &\xc2\xa3"}, // Yen to GBP + {"convert \xc2\xa5 to &\xe2\x82\xac"}, // Yen to Euro + {"Hangul character Sios &\xe3\x85\x85"}, + {"Hangul character Cieuc", 0x003148}, {0}, {"E&mpty",0,0,0,FL_SUBMENU}, {0},