summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/Fl_File_Input.cxx6
-rw-r--r--src/Fl_Input.cxx72
-rw-r--r--src/Fl_mac.cxx13
3 files changed, 64 insertions, 27 deletions
diff --git a/src/Fl_File_Input.cxx b/src/Fl_File_Input.cxx
index 5f329904d..efd2d062e 100644
--- a/src/Fl_File_Input.cxx
+++ b/src/Fl_File_Input.cxx
@@ -197,8 +197,10 @@ Fl_File_Input::handle(int event) // I - Event
case FL_MOVE :
case FL_ENTER :
if (active_r()) {
- if (Fl::event_y() < (y() + DIR_HEIGHT)) window()->cursor(FL_CURSOR_DEFAULT);
- else window()->cursor(FL_CURSOR_INSERT);
+ if (Fl::event_y() < (y() + DIR_HEIGHT))
+ window()->cursor(FL_CURSOR_DEFAULT);
+ else
+ window()->cursor(FL_CURSOR_INSERT);
}
return 1;
diff --git a/src/Fl_Input.cxx b/src/Fl_Input.cxx
index 21f1473d4..71434a25e 100644
--- a/src/Fl_Input.cxx
+++ b/src/Fl_Input.cxx
@@ -150,21 +150,57 @@ int Fl_Input::handle_key() {
else ascii = ctrl('D');
break;
case FL_Left:
- ascii = ctrl('B'); break;
+ ascii = ctrl('B');
+#ifdef __APPLE__
+ if (Fl::event_state() & (FL_META|FL_CTRL) ) ascii = ctrl('A');
+ // FIXME backward one word is missing (Alt-Left)
+#endif // __APPLE__
+ break;
case FL_Right:
- ascii = ctrl('F'); break;
+ ascii = ctrl('F');
+#ifdef __APPLE__
+ if (Fl::event_state() & (FL_META|FL_CTRL) ) ascii = ctrl('E');
+ // FIXME advance one word is missing (Alt-Right)
+#endif // __APPLE__
+ break;
case FL_Page_Up:
fl_font(textfont(),textsize()); //ensure current font is set to ours
repeat_num=h()/fl_height(); // number of lines to scroll
if (!repeat_num) repeat_num=1;
case FL_Up:
- ascii = ctrl('P'); break;
+ ascii = ctrl('P');
+#ifdef __APPLE__
+ if (Fl::event_state() & (FL_META) ) {
+ shift_position(0);
+ return 1;
+ }
+ if (Fl::event_state() & (FL_ALT) ) {
+ if (line_start(position())==position() && position()>0)
+ return shift_position(line_start(position()-1)) + NORMAL_INPUT_MOVE;
+ else
+ return shift_position(line_start(position())) + NORMAL_INPUT_MOVE;
+ }
+#endif // __APPLE__
+ break;
case FL_Page_Down:
fl_font(textfont(),textsize());
repeat_num=h()/fl_height();
if (!repeat_num) repeat_num=1;
case FL_Down:
- ascii = ctrl('N'); break;
+ ascii = ctrl('N');
+#ifdef __APPLE__
+ if (Fl::event_state() & (FL_META) ) {
+ shift_position(size());
+ return 1;
+ }
+ if (Fl::event_state() & (FL_ALT) ) {
+ if (line_end(position())==position() && position()<size())
+ return shift_position(line_end(position()+1)) + NORMAL_INPUT_MOVE;
+ else
+ return shift_position(line_end(position())) + NORMAL_INPUT_MOVE;
+ }
+#endif // __APPLE__
+ break;
case FL_Home:
if (Fl::event_state() & FL_CTRL) {
shift_position(0);
@@ -212,13 +248,13 @@ int Fl_Input::handle_key() {
int i;
switch (ascii) {
- case ctrl('A'):
+ case ctrl('A'): // go to the beginning of the current line
return shift_position(line_start(position())) + NORMAL_INPUT_MOVE;
- case ctrl('B'):
+ case ctrl('B'): // go one character backward
return shift_position(position()-1) + NORMAL_INPUT_MOVE;
case ctrl('C'): // copy
return copy(1);
- case ctrl('D'):
+ case ctrl('D'): // cut the next character
case ctrl('?'):
if (readonly()) {
fl_beep();
@@ -226,11 +262,11 @@ int Fl_Input::handle_key() {
}
if (mark() != position()) return cut();
else return cut(1);
- case ctrl('E'):
+ case ctrl('E'): // go to the end of the line
return shift_position(line_end(position())) + NORMAL_INPUT_MOVE;
- case ctrl('F'):
+ case ctrl('F'): // go to the next character
return shift_position(position()+1) + NORMAL_INPUT_MOVE;
- case ctrl('H'):
+ case ctrl('H'): // cut the previous character
if (readonly()) {
fl_beep();
return 1;
@@ -238,7 +274,7 @@ int Fl_Input::handle_key() {
if (mark() != position()) cut();
else cut(-1);
return 1;
- case ctrl('K'):
+ case ctrl('K'): // cut to the end of the line
if (readonly()) {
fl_beep();
return 1;
@@ -248,7 +284,7 @@ int Fl_Input::handle_key() {
if (i == position() && i < size()) i++;
cut(position(), i);
return copy_cuts();
- case ctrl('N'):
+ case ctrl('N'): // go down one line
i = position();
if (line_end(i) >= size()) return NORMAL_INPUT_MOVE;
while (repeat_num--) {
@@ -258,7 +294,7 @@ int Fl_Input::handle_key() {
}
shift_up_down_position(i);
return 1;
- case ctrl('P'):
+ case ctrl('P'): // go up one line
i = position();
if (!line_start(i)) return NORMAL_INPUT_MOVE;
while(repeat_num--) {
@@ -268,13 +304,13 @@ int Fl_Input::handle_key() {
}
shift_up_down_position(line_start(i));
return 1;
- case ctrl('U'):
+ case ctrl('U'): // clear the whole document?
if (readonly()) {
fl_beep();
return 1;
}
return cut(0, size());
- case ctrl('V'):
+ case ctrl('V'): // paste text
case ctrl('Y'):
if (readonly()) {
fl_beep();
@@ -282,7 +318,7 @@ int Fl_Input::handle_key() {
}
Fl::paste(*this, 1);
return 1;
- case ctrl('X'):
+ case ctrl('X'): // cut the selected text
case ctrl('W'):
if (readonly()) {
fl_beep();
@@ -290,14 +326,14 @@ int Fl_Input::handle_key() {
}
copy(1);
return cut();
- case ctrl('Z'):
+ case ctrl('Z'): // undo
case ctrl('_'):
if (readonly()) {
fl_beep();
return 1;
}
return undo();
- case ctrl('I'):
+ case ctrl('I'): // insert literal
case ctrl('J'):
case ctrl('L'):
case ctrl('M'):
diff --git a/src/Fl_mac.cxx b/src/Fl_mac.cxx
index 69217df1e..a92573ac1 100644
--- a/src/Fl_mac.cxx
+++ b/src/Fl_mac.cxx
@@ -1304,7 +1304,7 @@ pascal OSStatus carbonKeyboardHandler(
// In this mode, there seem to be no key-down codes
// printf("%08x %08x %08x\n", keyCode, mods, key);
maskedKeyCode = keyCode & 0x7f;
- /* output a human readable event identifier for debugging */
+ /* output a human readable event identifier for debugging
const char *ev = "";
switch (kind) {
case kEventRawKeyDown: ev = "kEventRawKeyDown"; break;
@@ -1313,8 +1313,8 @@ pascal OSStatus carbonKeyboardHandler(
case kEventRawKeyModifiersChanged: ev = "kEventRawKeyModifiersChanged"; break;
default: ev = "unknown";
}
-// printf("%08x %08x %08x '%c' %s \n", mods, keyCode, key, key, ev);
-// */
+ printf("%08x %08x %08x '%c' %s \n", mods, keyCode, key, key, ev);
+ */
switch (kind)
{
case kEventRawKeyDown:
@@ -1345,14 +1345,13 @@ pascal OSStatus carbonKeyboardHandler(
}
// if the user pressed alt/option, event_key should have the keycap,
// but event_text should generate the international symbol
+ sym = macKeyLookUp[maskedKeyCode];
if ( isalpha(key) )
sym = tolower(key);
- else if ( Fl::e_state&FL_CTRL && key<32 )
+ else if ( Fl::e_state&FL_CTRL && key<32 && sym<0xff00)
sym = key+96;
- else if ( Fl::e_state&FL_ALT ) // find the keycap of this key
+ else if ( Fl::e_state&FL_ALT && sym<0xff00) // find the keycap of this key
sym = keycode_to_sym( maskedKeyCode, 0, macKeyLookUp[ maskedKeyCode ] );
- else
- sym = macKeyLookUp[ maskedKeyCode ];
Fl::e_keysym = Fl::e_original_keysym = sym;
// Handle FL_KP_Enter on regular keyboards and on Powerbooks
if ( maskedKeyCode==0x4c || maskedKeyCode==0x34) key=0x0d;