summaryrefslogtreecommitdiff
path: root/src/drivers/Cocoa
diff options
context:
space:
mode:
Diffstat (limited to 'src/drivers/Cocoa')
-rw-r--r--src/drivers/Cocoa/Fl_Cocoa_Screen_Driver.H2
-rw-r--r--src/drivers/Cocoa/Fl_Cocoa_Screen_Driver.cxx76
2 files changed, 78 insertions, 0 deletions
diff --git a/src/drivers/Cocoa/Fl_Cocoa_Screen_Driver.H b/src/drivers/Cocoa/Fl_Cocoa_Screen_Driver.H
index 3f475a637..afcaad924 100644
--- a/src/drivers/Cocoa/Fl_Cocoa_Screen_Driver.H
+++ b/src/drivers/Cocoa/Fl_Cocoa_Screen_Driver.H
@@ -39,6 +39,7 @@
class Fl_Window;
+class Fl_Input;
class FL_EXPORT Fl_Cocoa_Screen_Driver : public Fl_Screen_Driver
{
@@ -87,6 +88,7 @@ public:
virtual int dnd(int use_selection);
virtual int compose(int &del);
virtual uchar *read_image(uchar *p, int x, int y, int w, int h, int alpha);
+ virtual int input_widget_handle_key(int key, unsigned mods, unsigned shift, Fl_Input *input);
};
diff --git a/src/drivers/Cocoa/Fl_Cocoa_Screen_Driver.cxx b/src/drivers/Cocoa/Fl_Cocoa_Screen_Driver.cxx
index c23046e30..786bbde12 100644
--- a/src/drivers/Cocoa/Fl_Cocoa_Screen_Driver.cxx
+++ b/src/drivers/Cocoa/Fl_Cocoa_Screen_Driver.cxx
@@ -23,6 +23,7 @@
#include <FL/Fl.H>
#include <FL/x.H>
#include <FL/Fl_Graphics_Driver.H>
+#include <FL/Fl_Input.H>
#include <FL/fl_ask.H>
#include <stdio.h>
@@ -370,6 +371,81 @@ Fl_Cocoa_Screen_Driver::read_image(uchar *p, // I - Pixel buffer or NULL to all
return p;
}
+
+int Fl_Cocoa_Screen_Driver::input_widget_handle_key(int key, unsigned mods, unsigned shift, Fl_Input *input)
+{
+ switch (key) {
+ case FL_Delete: {
+ if (mods==0) return input->kf_delete_char_right(); // Delete (OSX-HIG,TE,SA,WOX)
+ if (mods==FL_CTRL) return input->kf_delete_char_right(); // Ctrl-Delete (??? TE,!SA,!WOX)
+ if (mods==FL_ALT) return input->kf_delete_word_right(); // Alt-Delete (OSX-HIG,TE,SA)
+ return 0; // ignore other combos, pass to parent
+ }
+
+ case FL_Left:
+ if (mods==0) return input->kf_move_char_left(); // Left (OSX-HIG)
+ if (mods==FL_ALT) return input->kf_move_word_left(); // Alt-Left (OSX-HIG)
+ if (mods==FL_META) return input->kf_move_sol(); // Meta-Left (OSX-HIG)
+ if (mods==FL_CTRL) return input->kf_move_sol(); // Ctrl-Left (TE/SA)
+ return 0; // ignore other combos, pass to parent
+
+ case FL_Right:
+ if (mods==0) return input->kf_move_char_right(); // Right (OSX-HIG)
+ if (mods==FL_ALT) return input->kf_move_word_right(); // Alt-Right (OSX-HIG)
+ if (mods==FL_META) return input->kf_move_eol(); // Meta-Right (OSX-HIG)
+ if (mods==FL_CTRL) return input->kf_move_eol(); // Ctrl-Right (TE/SA)
+ return 0; // ignore other combos, pass to parent
+
+ case FL_Up:
+ if (mods==0) return input->kf_lines_up(1); // Up (OSX-HIG)
+ if (mods==FL_CTRL) return input->kf_page_up(); // Ctrl-Up (TE !HIG)
+ if (mods==FL_ALT) return input->kf_move_up_and_sol(); // Alt-Up (OSX-HIG)
+ if (mods==FL_META) return input->kf_top(); // Meta-Up (OSX-HIG)
+ return 0; // ignore other combos, pass to parent
+
+ case FL_Down:
+ if (mods==0) return input->kf_lines_down(1); // Dn (OSX-HIG)
+ if (mods==FL_CTRL) return input->kf_page_down(); // Ctrl-Dn (TE !HIG)
+ if (mods==FL_ALT) return input->kf_move_down_and_eol(); // Alt-Dn (OSX-HIG)
+ if (mods==FL_META) return input->kf_bottom(); // Meta-Dn (OSX-HIG)
+ return 0; // ignore other combos, pass to parent
+
+ case FL_Page_Up:
+ // Fl_Input has no scroll control, so instead we move the cursor by one page
+ // OSX-HIG recommends Alt increase one semantic unit, Meta next higher..
+ if (mods==0) return input->kf_page_up(); // PgUp (OSX-HIG)
+ if (mods==FL_ALT) return input->kf_page_up(); // Alt-PageUp (OSX-HIG)
+ if (mods==FL_META) return input->kf_top(); // Meta-PageUp (OSX-HIG,!TE)
+ return 0; // ignore other combos, pass to parent
+
+ case FL_Page_Down:
+ // Fl_Input has no scroll control, so instead we move the cursor by one page
+ // OSX-HIG recommends Alt increase one semantic unit, Meta next higher..
+ if (mods==0) return input->kf_page_down(); // PgDn (OSX-HIG)
+ if (mods==FL_ALT) return input->kf_page_down(); // Alt-PageDn (OSX-HIG)
+ if (mods==FL_META) return input->kf_bottom(); // Meta-PageDn (OSX-HIG,!TE)
+ return 0; // ignore other combos, pass to parent
+
+ case FL_Home:
+ if (mods==0) return input->kf_top(); // Home (OSX-HIG)
+ if (mods==FL_ALT) return input->kf_top(); // Alt-Home (???)
+ return 0; // ignore other combos, pass to parent
+
+ case FL_End:
+ if (mods==0) return input->kf_bottom(); // End (OSX-HIG)
+ if (mods==FL_ALT) return input->kf_bottom(); // Alt-End (???)
+ return 0; // ignore other combos, pass to parent
+
+ case FL_BackSpace:
+ if (mods==0) return input->kf_delete_char_left(); // Backspace (OSX-HIG)
+ if (mods==FL_CTRL) return input->kf_delete_char_left(); // Ctrl-Backspace (TE/SA)
+ if (mods==FL_ALT) return input->kf_delete_word_left(); // Alt-Backspace (OSX-HIG)
+ if (mods==FL_META) return input->kf_delete_sol(); // Meta-Backspace (OSX-HIG,!TE)
+ return 0; // ignore other combos, pass to parent
+ }
+ return -1;
+}
+
//
// End of "$Id$".
//