From d2205a452c37af39fd8f76be33863ff057658d03 Mon Sep 17 00:00:00 2001 From: Tametomo Date: Mon, 1 Jun 2009 11:10:05 -0600 Subject: Overloaded the tabNext() and tabPrevious() functions in the FocusHandler to move a window to the top when one of its contained widgets is focused. Signed-off-by: Tametomo --- src/gui/focushandler.cpp | 37 +++++++++++++++++++++++++++++++++++++ src/gui/focushandler.h | 13 +++++++++++++ 2 files changed, 50 insertions(+) (limited to 'src') diff --git a/src/gui/focushandler.cpp b/src/gui/focushandler.cpp index de10fece..9a0ba6b4 100644 --- a/src/gui/focushandler.cpp +++ b/src/gui/focushandler.cpp @@ -21,6 +21,8 @@ #include "focushandler.h" +#include "gui/widgets/window.h" + void FocusHandler::requestModalFocus(gcn::Widget *widget) { /* If there is another widget with modal focus, remove its modal focus @@ -60,3 +62,38 @@ void FocusHandler::remove(gcn::Widget *widget) gcn::FocusHandler::remove(widget); } + +void FocusHandler::tabNext() +{ + gcn::FocusHandler::tabNext(); + + checkForWindow(); +} + +void FocusHandler::tabPrevious() +{ + gcn::FocusHandler::tabPrevious(); + + checkForWindow(); +} + +void FocusHandler::checkForWindow() +{ + if (mFocusedWidget) + { + gcn::Widget *widget = mFocusedWidget->getParent(); + + while (widget) + { + Window *window = dynamic_cast(widget); + + if (window) + { + window->requestMoveToTop(); + break; + } + + widget = widget->getParent(); + } + } +} diff --git a/src/gui/focushandler.h b/src/gui/focushandler.h index aaac6ca6..d4c4e14f 100644 --- a/src/gui/focushandler.h +++ b/src/gui/focushandler.h @@ -54,7 +54,20 @@ class FocusHandler : public gcn::FocusHandler */ void remove(gcn::Widget *widget); + /** + * Overloaded to allow windows to move to the top when one of their + * widgets is tabbed to when tabbing through focusable elements. + */ + void tabNext(); + void tabPrevious(); + private: + /** + * Checks to see if the widget tabbed to is in a window, and if it is, + * it requests the window be moved to the top. + */ + void checkForWindow(); + /** * Stack of widgets that have requested modal forcus. */ -- cgit v1.2.3-70-g09d2