From 6a0f90d6209c9cc2e3fdefca1f6081783eb442e2 Mon Sep 17 00:00:00 2001 From: rswindell <> Date: Sun, 9 Feb 2003 00:22:48 +0000 Subject: [PATCH] Added support for keypad cursor-control keys (home/end/pgup/etc.). Needs to determine if numlock is enabled or not. --- src/uifc/uifcfltk.cpp | 35 +++++++++++++++++++++++++++-------- 1 file changed, 27 insertions(+), 8 deletions(-) diff --git a/src/uifc/uifcfltk.cpp b/src/uifc/uifcfltk.cpp index 12a2b3613d..6234e6c246 100644 --- a/src/uifc/uifcfltk.cpp +++ b/src/uifc/uifcfltk.cpp @@ -58,6 +58,18 @@ #include <FL/Fl_Box.H> #include <FL/fl_ask.H> // fl_beep(), fl_message() +/* How can we tell if the user has num lock down or not? */ +#define FL_KP_Home (FL_KP+'7') +#define FL_KP_End (FL_KP+'1') +#define FL_KP_Up (FL_KP+'8') +#define FL_KP_Down (FL_KP+'2') +#define FL_KP_Left (FL_KP+'4') +#define FL_KP_Right (FL_KP+'6') +#define FL_KP_PgUp (FL_KP+'9') +#define FL_KP_PgDn (FL_KP+'3') +#define FL_KP_Ins (FL_KP+'0') +#define FL_KP_Del (FL_KP+'.') + /******************/ /* Layout Defines */ /******************/ @@ -363,7 +375,7 @@ int UIFC_Button::handle(int event) { do_callback(); return 1; } - if(key==FL_Page_Up) { + if(key==FL_Page_Up || key==FL_KP_PgUp) { for(i=0;i<parent()->children() && this!=parent()->child(i);i++) {} i=i-((parent()->h() - Fl::box_dh(parent()->box()))/UIFC_LINE_HEIGHT)+1; if(i<0) @@ -372,7 +384,7 @@ int UIFC_Button::handle(int event) { parent()->child(i)->handle(FL_FOCUS); return(1); } - if(key==FL_Page_Down) { + if(key==FL_Page_Down || key==FL_KP_PgDn) { for(i=0;i<parent()->children() && this!=parent()->child(i);i++) {} i=i+((parent()->h() - Fl::box_dh(parent()->box()))/UIFC_LINE_HEIGHT)-1; if(i>parent()->children()-3) @@ -381,7 +393,7 @@ int UIFC_Button::handle(int event) { parent()->child(i)->handle(FL_FOCUS); return(1); } - if(key==FL_Up) { + if(key==FL_Up || key==FL_KP_Up) { for(i=0;i<parent()->children() && this!=parent()->child(i);i++) {} i=i-1; if(i<0) @@ -390,7 +402,7 @@ int UIFC_Button::handle(int event) { parent()->child(i)->handle(FL_FOCUS); return(1); } - if(key==FL_Down) { + if(key==FL_Down || key==FL_KP_Down) { for(i=0;i<parent()->children() && this!=parent()->child(i);i++) {} i=i+1; if(i>parent()->children()-3) @@ -399,18 +411,19 @@ int UIFC_Button::handle(int event) { parent()->child(i)->handle(FL_FOCUS); return(1); } - if(key==FL_Home) { + if(key==FL_Home || key==FL_KP_Home) { i=0; Fl::focus(parent()->child(i)); parent()->child(i)->handle(FL_FOCUS); return(1); } - if(key==FL_End) { + if(key==FL_End || key==FL_KP_End) { i=parent()->children()-3; Fl::focus(parent()->child(i)); parent()->child(i)->handle(FL_FOCUS); return(1); } + printf("key=%X\n",key); } return Fl_Button::handle(event); } @@ -488,6 +501,7 @@ int UIFC_Input_Box::handle_key() { switch (Fl::event_key()) { case FL_Insert: + case FL_KP_Ins: if (Fl::event_state() & FL_CTRL) ascii = ctrl('C'); else @@ -495,18 +509,22 @@ int UIFC_Input_Box::handle_key() { ascii = ctrl('V'); break; case FL_Delete: + case FL_KP_Del: if (Fl::event_state() & FL_SHIFT) ascii = ctrl('X'); else ascii = ctrl('D'); break; case FL_Left: + case FL_KP_Left: return shift_position(position()-1) + 1; break; case FL_Right: + case FL_KP_Right: ascii = ctrl('F'); break; case FL_Home: + case FL_KP_Home: if (Fl::event_state() & FL_CTRL) { shift_position(0); return 1; @@ -514,6 +532,7 @@ int UIFC_Input_Box::handle_key() { return shift_position(line_start(position())) + 1; break; case FL_End: + case FL_KP_End: if (Fl::event_state() & FL_CTRL) { shift_position(size()); return 1; @@ -717,11 +736,11 @@ static int handle_escape(int event) { if(event == FL_SHORTCUT && Fl::focus()->type()==FL_NORMAL_BUTTON) { int mode=((UIFC_Button *)Fl::focus())->mode; key=Fl::event_key(); - if(key==FL_Insert && (mode&WIN_INS)) { + if((key==FL_Insert || key==FL_KP_Ins) && (mode&WIN_INS)) { GUI_RetVal=w->retval|MSK_INS; return(1); } - if(key==FL_Delete && (mode&WIN_DEL)) { + if((key==FL_Delete || key==FL_KP_Del) && (mode&WIN_DEL)) { GUI_RetVal=w->retval|MSK_DEL; return(1); } -- GitLab