mirror of
https://github.com/fltk/fltk.git
synced 2026-06-02 15:46:52 +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
|
#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
@@ -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);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -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();
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user