Android: on-screen keyboard no longer pops up on text output widgets

git-svn-id: file:///fltk/svn/fltk/branches/branch-1.4@12959 ea41ed52-d2ee-0310-a9c1-e6b18d33e121
This commit is contained in:
Matthias Melcher
2018-06-21 17:24:21 +00:00
parent 333e718ae7
commit 448cf77855
3 changed files with 58 additions and 94 deletions
@@ -17,115 +17,78 @@
#if 1 #if 1
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <FL/Fl.H> #include <FL/Fl.H>
#include <FL/Fl_Value_Input.H> // necessary for bug in mingw32?
#include <FL/Fl_Double_Window.H> #include <FL/Fl_Double_Window.H>
#include <FL/Fl_Input.H>
#include <FL/Fl_Button.H>
#include <FL/Fl_Return_Button.H>
#include <FL/Fl_Box.H> #include <FL/Fl_Box.H>
#include <FL/Fl_Hor_Value_Slider.H>
#include <FL/Fl_Toggle_Button.H>
#include <FL/Fl_Input.H>
#include <FL/fl_draw.H>
#include <FL/Fl_Output.H>
#include <FL/Fl_Multiline_Output.H>
#include <FL/fl_ask.H> Fl_Output *text;
Fl_Multiline_Output *text2;
Fl_Input *input;
Fl_Value_Slider *fonts;
Fl_Value_Slider *sizes;
Fl_Double_Window *window;
void update_input_text(Fl_Widget* o, const char *input) { void font_cb(Fl_Widget *,void *) {
if (input) { text->textfont(int(fonts->value()));
o->copy_label(input); text->redraw();
o->redraw(); text2->textfont(int(fonts->value()));
} text2->redraw();
} }
void rename_me(Fl_Widget*o) { void size_cb(Fl_Widget *,void *) {
const char *input = fl_input("Input:", o->label()); text->textsize(int(sizes->value()));
update_input_text(o, input); text->redraw();
text2->textsize(int(sizes->value()));
text2->redraw();
} }
void rename_me_pwd(Fl_Widget*o) { void input_cb(Fl_Widget *,void *) {
const char *input = fl_password("Input PWD:", o->label()); text->value(input->value());
update_input_text(o, input); text2->value(input->value());
} }
void window_callback(Fl_Widget*, void*) {
int hotspot = fl_message_hotspot();
fl_message_hotspot(0);
fl_message_title("note: no hotspot set for this dialog");
int rep = fl_choice("Are you sure you want to quit?",
"Cancel", "Quit", "Dunno");
fl_message_hotspot(hotspot);
if (rep==1)
exit(0);
else if (rep==2)
fl_message("Well, maybe you should know before we quit.");
}
/*
This timer callback shows a message dialog (fl_choice) window
every 5 seconds to test "recursive" common dialogs.
The timer can be stopped by clicking the button "Stop these funny popups"
or pressing the Enter key. As it is currently implemented, clicking the
"Close" button will reactivate the popups (only possible if "recursive"
dialogs are enabled, see below).
Note 1: This dialog box is blocked in FLTK 1.3.x if another common dialog
is already open because the window used is a static (i.e. permanently
allocated) Fl_Window instance. This should be fixed in FLTK 1.4.0.
See STR #334 (sic !) and also STR #2751 ("Limit input field characters").
*/
void timer_cb(void *) {
static int stop = 0;
static const double delta = 5.0;
Fl_Box *message_icon = (Fl_Box *)fl_message_icon();
Fl::repeat_timeout(delta, timer_cb);
if (stop == 1) {
message_icon->color(FL_WHITE);
return;
}
// Change the icon box color:
Fl_Color c = message_icon->color();
c = (c+1) % 32;
if (c == message_icon->labelcolor()) c++;
message_icon->color((Fl_Color)c);
// pop up a message:
stop = fl_choice("Timeout. Click the 'Close' button.\n"
"Note: this message was blocked in FLTK 1.3\n"
"if another message window is open.\n"
"This *should* be fixed in FLTK 1.4.0!\n"
"This message should pop up every 5 seconds.",
"Close", "Stop these funny popups", NULL);
}
int main(int argc, char **argv) { int main(int argc, char **argv) {
char buffer[128] = "Test text"; window = new Fl_Double_Window(400,400);
char buffer2[128] = "MyPassword";
// This is a test to make sure automatic destructors work. Pop up input = new Fl_Input(50,375,350,25);
// the question dialog several times and make sure it doesn't crash. input->static_value("The quick brown fox\njumped over\nthe lazy dog.");
input->when(FL_WHEN_CHANGED);
input->callback(input_cb);
Fl_Double_Window window(200, 105); sizes = new Fl_Hor_Value_Slider(50,350,350,25,"Size");
Fl_Return_Button b(20, 10, 160, 35, buffer); sizes->align(FL_ALIGN_LEFT);
b.callback(rename_me); sizes->bounds(1,64);
Fl_Button b2(20, 50, 160, 35, buffer2); sizes->step(1);
b2.callback(rename_me_pwd); sizes->value(14);
window.end(); sizes->callback(size_cb);
window.resizable(&b);
window.show(argc, argv);
// Also we test to see if the exit callback works: fonts = new Fl_Hor_Value_Slider(50,325,350,25,"Font");
window.callback(window_callback); fonts->align(FL_ALIGN_LEFT);
fonts->bounds(0,15);
fonts->step(1);
fonts->value(0);
fonts->callback(font_cb);
// Test: set default message window title: text2 = new Fl_Multiline_Output(100,150,200,100,"Fl_Multiline_Output");
// fl_message_title_default("Default Window Title"); text2->value(input->value());
text2->align(FL_ALIGN_BOTTOM);
text2->tooltip("This is an Fl_Multiline_Output widget.");
window->resizable(text2);
// Test: multiple (nested, aka "recursive") popups text = new Fl_Output(100,90,200,30,"Fl_Output");
Fl::add_timeout(5.0, timer_cb); text->value(input->value());
text->align(FL_ALIGN_BOTTOM);
text->tooltip("This is an Fl_Output widget.");
window->end();
window->show(argc,argv);
return Fl::run(); return Fl::run();
} }
@@ -279,7 +242,6 @@ test/blocks.cxx
test/navigation.cxx test/navigation.cxx
test/offscreen.cxx test/offscreen.cxx
test/browser.cxx test/browser.cxx
test/output.cxx
test/overlay.cxx test/overlay.cxx
test/cairo_test.cxx test/cairo_test.cxx
test/pixmap.cxx test/pixmap.cxx
@@ -337,6 +299,7 @@ test/utf8.cxx
test/keyboard.cxx test/keyboard.cxx
test/windowfocus.cxx test/windowfocus.cxx
* test/output.cxx : + 'output' works
* test/ask.cxx : + 'ask' works * test/ask.cxx : + 'ask' works
* test/button.cxx : + 'button' works, including beep * test/button.cxx : + 'button' works, including beep
* test/pack.cxx : + 'pack' works * test/pack.cxx : + 'pack' works
+2 -2
View File
@@ -464,10 +464,8 @@ int Fl_Input::handle(int event) {
this->mark( this->position() ); this->mark( this->position() );
Fl::reset_marked_text(); Fl::reset_marked_text();
} }
Fl::screen_driver()->release_keyboard();
break; break;
case FL_FOCUS: case FL_FOCUS:
Fl::screen_driver()->request_keyboard();
switch (Fl::event_key()) { switch (Fl::event_key()) {
case FL_Right: case FL_Right:
position(0); position(0);
@@ -686,12 +684,14 @@ Fl_Multiline_Input::Fl_Multiline_Input(int X,int Y,int W,int H,const char *l)
Fl_Output::Fl_Output(int X,int Y,int W,int H, const char *l) Fl_Output::Fl_Output(int X,int Y,int W,int H, const char *l)
: Fl_Input(X, Y, W, H, l) { : Fl_Input(X, Y, W, H, l) {
type(FL_NORMAL_OUTPUT); type(FL_NORMAL_OUTPUT);
clear_flag(NEEDS_KEYBOARD);
} }
Fl_Multiline_Output::Fl_Multiline_Output(int X,int Y,int W,int H,const char *l) Fl_Multiline_Output::Fl_Multiline_Output(int X,int Y,int W,int H,const char *l)
: Fl_Output(X,Y,W,H,l) { : Fl_Output(X,Y,W,H,l) {
type(FL_MULTILINE_OUTPUT); type(FL_MULTILINE_OUTPUT);
clear_flag(NEEDS_KEYBOARD);
} }
+1
View File
@@ -179,6 +179,7 @@ Fl_Text_Display::Fl_Text_Display(int X, int Y, int W, int H, const char* l)
color(FL_BACKGROUND2_COLOR, FL_SELECTION_COLOR); color(FL_BACKGROUND2_COLOR, FL_SELECTION_COLOR);
box(FL_DOWN_FRAME); box(FL_DOWN_FRAME);
set_flag(SHORTCUT_LABEL); set_flag(SHORTCUT_LABEL);
clear_flag(NEEDS_KEYBOARD);
end(); end();
} }