Android: Widgets can now request the on-screen keyboard when they get focus. This may fail if visible_focus is disabled.

git-svn-id: file:///fltk/svn/fltk/branches/branch-1.4@12804 ea41ed52-d2ee-0310-a9c1-e6b18d33e121
This commit is contained in:
Matthias Melcher 2018-03-26 15:33:22 +00:00
parent 20ed92fca4
commit e8818e968c
4 changed files with 18 additions and 2 deletions

View File

@ -23,6 +23,7 @@
#define Fl_Widget_H #define Fl_Widget_H
#include "Enumerations.H" #include "Enumerations.H"
#include "Fl.H"
class Fl_Widget; class Fl_Widget;
class Fl_Window; class Fl_Window;
@ -70,6 +71,7 @@ struct FL_EXPORT Fl_Label {
}; };
/** Fl_Widget is the base class for all widgets in FLTK. /** Fl_Widget is the base class for all widgets in FLTK.
You can't create one of these because the constructor is not public. You can't create one of these because the constructor is not public.
@ -84,6 +86,7 @@ struct FL_EXPORT Fl_Label {
*/ */
class FL_EXPORT Fl_Widget { class FL_EXPORT Fl_Widget {
friend class Fl_Group; friend class Fl_Group;
friend void Fl::focus(Fl_Widget*);
Fl_Group* parent_; Fl_Group* parent_;
Fl_Callback* callback_; Fl_Callback* callback_;
@ -158,6 +161,8 @@ protected:
FULLSCREEN = 1<<18, ///< a fullscreen window (Fl_Window) FULLSCREEN = 1<<18, ///< a fullscreen window (Fl_Window)
MAC_USE_ACCENTS_MENU = 1<<19, ///< On the Mac OS platform, pressing and holding a key on the keyboard opens an accented-character menu window (Fl_Input_, Fl_Text_Editor) MAC_USE_ACCENTS_MENU = 1<<19, ///< On the Mac OS platform, pressing and holding a key on the keyboard opens an accented-character menu window (Fl_Input_, Fl_Text_Editor)
// (space for more flags) // (space for more flags)
NEEDS_KEYBOARD = 1<<20, ///< set this on touch screen devices if a widget needs a keyboard when it gets Focus. @see Fl_Screen_Driver::request_keyboard()
// a tiny bit more space for new flags...
USERFLAG3 = 1<<29, ///< reserved for 3rd party extensions USERFLAG3 = 1<<29, ///< reserved for 3rd party extensions
USERFLAG2 = 1<<30, ///< reserved for 3rd party extensions USERFLAG2 = 1<<30, ///< reserved for 3rd party extensions
USERFLAG1 = 1<<31 ///< reserved for 3rd party extensions USERFLAG1 = 1<<31 ///< reserved for 3rd party extensions

View File

@ -863,9 +863,18 @@ Fl_Widget* fl_oldfocus; // kludge for Fl_Group...
\see Fl_Widget::take_focus() \see Fl_Widget::take_focus()
*/ */
void Fl::focus(Fl_Widget *o) { void Fl::focus(Fl_Widget *o)
if (o && !o->visible_focus()) return; {
if (grab()) return; // don't do anything while grab is on if (grab()) return; // don't do anything while grab is on
// request an on-screen keyboard on touch screen devices if needed
Fl_Widget *prevFocus = Fl::focus();
if ( prevFocus && (prevFocus->flags()&Fl_Widget::NEEDS_KEYBOARD) )
Fl::screen_driver()->release_keyboard();
if (o && (o->flags()&Fl_Widget::NEEDS_KEYBOARD))
Fl::screen_driver()->request_keyboard( /*o->type()*/ );
if (o && !o->visible_focus()) return;
Fl_Widget *p = focus_; Fl_Widget *p = focus_;
if (o != p) { if (o != p) {
Fl::compose_reset(); Fl::compose_reset();

View File

@ -1128,6 +1128,7 @@ Fl_Input_::Fl_Input_(int X, int Y, int W, int H, const char* l)
shortcut_ = 0; shortcut_ = 0;
set_flag(SHORTCUT_LABEL); set_flag(SHORTCUT_LABEL);
set_flag(MAC_USE_ACCENTS_MENU); set_flag(MAC_USE_ACCENTS_MENU);
set_flag(NEEDS_KEYBOARD);
tab_nav(1); tab_nav(1);
} }

View File

@ -75,6 +75,7 @@ Fl_Text_Editor::Fl_Text_Editor(int X, int Y, int W, int H, const char* l)
insert_mode_ = 1; insert_mode_ = 1;
key_bindings = 0; key_bindings = 0;
set_flag(MAC_USE_ACCENTS_MENU); set_flag(MAC_USE_ACCENTS_MENU);
set_flag(NEEDS_KEYBOARD);
// handle the default key bindings // handle the default key bindings
add_default_key_bindings(&key_bindings); add_default_key_bindings(&key_bindings);