From f8705061941ae67659eaea29f4bbc9a033192236 Mon Sep 17 00:00:00 2001 From: Markus Gans Date: Sun, 21 Aug 2016 00:16:34 +0200 Subject: [PATCH] switchToPrevWindow() is looking for another window if no previous window was found --- ChangeLog | 2 ++ src/fdialog.cpp | 7 ++++++- src/fwindow.cpp | 30 ++++++++++++++++++++++++++---- 3 files changed, 34 insertions(+), 5 deletions(-) diff --git a/ChangeLog b/ChangeLog index 21ba8f54..8c2428cc 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,5 +1,7 @@ 2016-08-20 Markus Gans * Switch back to the own dialog when you closing a dialog menu + * switchToPrevWindow() is looking for another window + if no previous window was found 2016-08-14 Markus Gans * Screen characters now have a transparent diff --git a/src/fdialog.cpp b/src/fdialog.cpp index d98a0210..ad85bca0 100644 --- a/src/fdialog.cpp +++ b/src/fdialog.cpp @@ -730,11 +730,16 @@ void FDialog::onMouseDoubleClick (FMouseEvent* ev) if ( title_button.contains(gPos) ) { + FWidget* window_focus_widget; dialog_menu->unselectItem(); dialog_menu->hide(); activateWindow(); raiseWindow(); - getWindowFocusWidget()->setFocus(); + window_focus_widget = getWindowFocusWidget(); + + if ( window_focus_widget ) + window_focus_widget->setFocus(); + setClickedWidget(0); if ( isModal() ) diff --git a/src/fwindow.cpp b/src/fwindow.cpp index 1b5b530c..38948c1b 100644 --- a/src/fwindow.cpp +++ b/src/fwindow.cpp @@ -96,9 +96,6 @@ void FWindow::hide() if ( area ) area->visible = false; - if ( isDialog() ) - switchToPrevWindow(); - FWidget::hide(); } @@ -406,9 +403,34 @@ void FWindow::setWindowFocusWidget (FWidget* obj) void FWindow::switchToPrevWindow() { // switch to previous window - activatePrevWindow(); + bool is_activated = activatePrevWindow(); FWindow* active_window = getActiveWindow(); + if ( ! is_activated ) + { + // no previous window -> looking for another window + if ( window_list && window_list->size() > 1 ) + { + widgetList::const_iterator iter, begin; + iter = window_list->end(); + begin = window_list->begin(); + + do + { + --iter; + FWindow* w = static_cast(*iter); + + if ( w && w != active_window + && ! (w->isHiddenWindow() || w->isActiveWindow()) ) + { + setActiveWindow(w); + break; + } + } + while ( iter != begin ); + } + } + if ( active_window ) { FWidget* focus_widget = active_window->getWindowFocusWidget();