summaryrefslogtreecommitdiff
path: root/src/Fl.cxx
diff options
context:
space:
mode:
authorMatthias Melcher <fltk@matthiasm.com>2006-05-30 09:38:19 +0000
committerMatthias Melcher <fltk@matthiasm.com>2006-05-30 09:38:19 +0000
commit987d9e05f2c502138ecf648d76c02886f0534740 (patch)
tree59797bc5c3224a1802492e8ceaaa60971c8f8659 /src/Fl.cxx
parent6986a1d0083c106c11095e250d46dbd2dacfa857 (diff)
Fixed shortcut and default focus for message dialogs (STR #1298).
Default focus is now on the button that also reacts to the 'Enter' key. This should avoid confusion about Enter triggering the button1 or button 0. Also, I changed the shortcut call to the new convention which works on MSWindows. I don't have a Linux system right now for testing... . Fixed focus issues (STR #1286, STR #1289, STR #1296) fl_xfocus was not always updated, making widgets or even whole windows loose focus when any focus changes were not accompanied by a click into the same window. Also, Fl_Tabs would not redraw correctly if focus returned to the active tab. git-svn-id: file:///fltk/svn/fltk/branches/branch-1.1@5165 ea41ed52-d2ee-0310-a9c1-e6b18d33e121
Diffstat (limited to 'src/Fl.cxx')
-rw-r--r--src/Fl.cxx18
1 files changed, 13 insertions, 5 deletions
diff --git a/src/Fl.cxx b/src/Fl.cxx
index 60be2bd98..2064ce3ac 100644
--- a/src/Fl.cxx
+++ b/src/Fl.cxx
@@ -78,6 +78,11 @@ int Fl::visible_focus_ = 1,
Fl::dnd_text_ops_ = 1;
+Fl_Window *fl_xfocus; // which window X thinks has focus
+Fl_Window *fl_xmousewin;// which window X thinks has FL_ENTER
+Fl_Window *Fl::grab_; // most recent Fl::grab()
+Fl_Window *Fl::modal_; // topmost modal() window
+
//
// 'Fl::version()' - Return the API version number...
//
@@ -526,6 +531,14 @@ void Fl::focus(Fl_Widget *o) {
if (o != p) {
Fl::compose_reset();
focus_ = o;
+ // make sure that fl_xfocus is set to the top level window
+ // of this widget, or fl_fix_focus will clear our focus again
+ if (o) {
+ Fl_Window *win = 0, *w1 = o->window();
+ while (w1) { win=w1; w1=win->window(); }
+ if (win) fl_xfocus = win;
+ }
+ // take focus from the old focused window
fl_oldfocus = 0;
int old_event = e_number;
e_number = FL_UNFOCUS;
@@ -557,11 +570,6 @@ void Fl::pushed(Fl_Widget *o) {
pushed_ = o;
}
-Fl_Window *fl_xfocus; // which window X thinks has focus
-Fl_Window *fl_xmousewin;// which window X thinks has FL_ENTER
-Fl_Window *Fl::grab_; // most recent Fl::grab()
-Fl_Window *Fl::modal_; // topmost modal() window
-
static void nothing(Fl_Widget *) {}
void (*Fl_Tooltip::enter)(Fl_Widget *) = nothing;
void (*Fl_Tooltip::exit)(Fl_Widget *) = nothing;