00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022 #include "focushandler.h"
00023
00024 void FocusHandler::requestModalFocus(gcn::Widget *widget)
00025 {
00026
00027
00028
00029 if (mModalFocusedWidget && mModalFocusedWidget != widget)
00030 {
00031 mModalStack.push_front(mModalFocusedWidget);
00032 mModalFocusedWidget = NULL;
00033 }
00034
00035 gcn::FocusHandler::requestModalFocus(widget);
00036 }
00037
00038 void FocusHandler::releaseModalFocus(gcn::Widget *widget)
00039 {
00040 mModalStack.remove(widget);
00041
00042 if (mModalFocusedWidget == widget)
00043 {
00044 gcn::FocusHandler::releaseModalFocus(widget);
00045
00046
00047
00048
00049 if (mModalStack.size() > 0)
00050 {
00051 gcn::FocusHandler::requestModalFocus(mModalStack.front());
00052 mModalStack.pop_front();
00053 }
00054 }
00055 }
00056
00057 void FocusHandler::remove(gcn::Widget *widget)
00058 {
00059 releaseModalFocus(widget);
00060
00061 gcn::FocusHandler::remove(widget);
00062 }