mirror of
https://github.com/fltk/fltk.git
synced 2026-05-23 15:56:10 +08:00
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:
@@ -17,115 +17,78 @@
|
||||
|
||||
#if 1
|
||||
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include <string.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_Input.H>
|
||||
#include <FL/Fl_Button.H>
|
||||
#include <FL/Fl_Return_Button.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) {
|
||||
if (input) {
|
||||
o->copy_label(input);
|
||||
o->redraw();
|
||||
}
|
||||
void font_cb(Fl_Widget *,void *) {
|
||||
text->textfont(int(fonts->value()));
|
||||
text->redraw();
|
||||
text2->textfont(int(fonts->value()));
|
||||
text2->redraw();
|
||||
}
|
||||
|
||||
void rename_me(Fl_Widget*o) {
|
||||
const char *input = fl_input("Input:", o->label());
|
||||
update_input_text(o, input);
|
||||
void size_cb(Fl_Widget *,void *) {
|
||||
text->textsize(int(sizes->value()));
|
||||
text->redraw();
|
||||
text2->textsize(int(sizes->value()));
|
||||
text2->redraw();
|
||||
}
|
||||
|
||||
void rename_me_pwd(Fl_Widget*o) {
|
||||
const char *input = fl_password("Input PWD:", o->label());
|
||||
update_input_text(o, input);
|
||||
void input_cb(Fl_Widget *,void *) {
|
||||
text->value(input->value());
|
||||
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) {
|
||||
char buffer[128] = "Test text";
|
||||
char buffer2[128] = "MyPassword";
|
||||
window = new Fl_Double_Window(400,400);
|
||||
|
||||
// This is a test to make sure automatic destructors work. Pop up
|
||||
// the question dialog several times and make sure it doesn't crash.
|
||||
input = new Fl_Input(50,375,350,25);
|
||||
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);
|
||||
Fl_Return_Button b(20, 10, 160, 35, buffer);
|
||||
b.callback(rename_me);
|
||||
Fl_Button b2(20, 50, 160, 35, buffer2);
|
||||
b2.callback(rename_me_pwd);
|
||||
window.end();
|
||||
window.resizable(&b);
|
||||
window.show(argc, argv);
|
||||
sizes = new Fl_Hor_Value_Slider(50,350,350,25,"Size");
|
||||
sizes->align(FL_ALIGN_LEFT);
|
||||
sizes->bounds(1,64);
|
||||
sizes->step(1);
|
||||
sizes->value(14);
|
||||
sizes->callback(size_cb);
|
||||
|
||||
// Also we test to see if the exit callback works:
|
||||
window.callback(window_callback);
|
||||
fonts = new Fl_Hor_Value_Slider(50,325,350,25,"Font");
|
||||
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:
|
||||
// fl_message_title_default("Default Window Title");
|
||||
text2 = new Fl_Multiline_Output(100,150,200,100,"Fl_Multiline_Output");
|
||||
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
|
||||
Fl::add_timeout(5.0, timer_cb);
|
||||
text = new Fl_Output(100,90,200,30,"Fl_Output");
|
||||
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();
|
||||
}
|
||||
|
||||
@@ -279,7 +242,6 @@ test/blocks.cxx
|
||||
test/navigation.cxx
|
||||
test/offscreen.cxx
|
||||
test/browser.cxx
|
||||
test/output.cxx
|
||||
test/overlay.cxx
|
||||
test/cairo_test.cxx
|
||||
test/pixmap.cxx
|
||||
@@ -337,6 +299,7 @@ test/utf8.cxx
|
||||
test/keyboard.cxx
|
||||
test/windowfocus.cxx
|
||||
|
||||
* test/output.cxx : + 'output' works
|
||||
* test/ask.cxx : + 'ask' works
|
||||
* test/button.cxx : + 'button' works, including beep
|
||||
* test/pack.cxx : + 'pack' works
|
||||
|
||||
+2
-2
@@ -464,10 +464,8 @@ int Fl_Input::handle(int event) {
|
||||
this->mark( this->position() );
|
||||
Fl::reset_marked_text();
|
||||
}
|
||||
Fl::screen_driver()->release_keyboard();
|
||||
break;
|
||||
case FL_FOCUS:
|
||||
Fl::screen_driver()->request_keyboard();
|
||||
switch (Fl::event_key()) {
|
||||
case FL_Right:
|
||||
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_Input(X, Y, W, H, l) {
|
||||
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_Output(X,Y,W,H,l) {
|
||||
type(FL_MULTILINE_OUTPUT);
|
||||
clear_flag(NEEDS_KEYBOARD);
|
||||
}
|
||||
|
||||
|
||||
|
||||
@@ -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);
|
||||
box(FL_DOWN_FRAME);
|
||||
set_flag(SHORTCUT_LABEL);
|
||||
clear_flag(NEEDS_KEYBOARD);
|
||||
|
||||
end();
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user