diff --git a/ChangeLog b/ChangeLog index e54c9aa8..3f681632 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,6 @@ +2015-06-12 Markus Gans + * Improve focusFirstChild() and focusLastChild() + 2015-06-09 Markus Gans * Better contrast on 8 color terminals diff --git a/src/fdialog.cpp b/src/fdialog.cpp index 5d668063..f8c75224 100644 --- a/src/fdialog.cpp +++ b/src/fdialog.cpp @@ -110,9 +110,11 @@ void FDialog::init() this->flags |= ACTIVE; FWidget* old_focus = FWidget::getFocusWidget(); - setFocus(); if ( old_focus ) + { + setFocus(); old_focus->redraw(); + } accelerator_list = new Accelerators; } diff --git a/src/fwidget.cpp b/src/fwidget.cpp index 3b9328d5..74d3e767 100644 --- a/src/fwidget.cpp +++ b/src/fwidget.cpp @@ -1278,13 +1278,15 @@ bool FWidget::focusFirstChild (void) while ( iter != end ) { FWidget* widget = static_cast(*iter); - if ( widget->isEnabled() - && widget->acceptFocus() - && ! widget->isWindow() ) + if ( widget->isEnabled() && widget->acceptFocus() ) { - widget->setFocus(true); if ( widget->numOfChildren() >= 1 ) - widget->focusFirstChild(); + { + if ( ! widget->focusFirstChild() ) + continue; + } + else + widget->setFocus(); return true; } // prefix increment (++) is faster @@ -1311,13 +1313,15 @@ bool FWidget::focusLastChild (void) { --iter; FWidget* widget = static_cast(*iter); - if ( widget->isEnabled() - && widget->acceptFocus() - && ! widget->isWindow() ) + if ( widget->isEnabled() && widget->acceptFocus() ) { - widget->setFocus(true); if ( widget->numOfChildren() >= 1 ) - widget->focusLastChild(); + { + if ( ! widget->focusLastChild() ) + continue; + } + else + widget->setFocus(); return true; } } diff --git a/test/input-dialog.cpp b/test/input-dialog.cpp index 5f0e2d8c..bf1cc2ac 100644 --- a/test/input-dialog.cpp +++ b/test/input-dialog.cpp @@ -79,8 +79,6 @@ int main (int argc, char* argv[]) st_field->setShadow(); c_field->setShadow(); - name_field->setFocus(); - // Create the button group FButtonGroup* radioButtonGroup = new FButtonGroup("Sex", &dgl); radioButtonGroup->setGeometry(2, 13, 13, 4); diff --git a/test/watch.cpp b/test/watch.cpp index eab4cd32..71b2e2c5 100644 --- a/test/watch.cpp +++ b/test/watch.cpp @@ -61,7 +61,6 @@ watch::watch (FWidget* parent) : FDialog(parent) seconds_sw = new FSwitch(L"Seconds", this); clock_sw->setGeometry(4, 4, 9, 1); seconds_sw->setGeometry(2, 6, 11, 1); - clock_sw->setFocus(); sec = seconds_sw->setChecked(); // Create button