Salome HOME
Join modifications from BR_Dev_For_4_0 tag V4_1_1.
[modules/gui.git] / src / LightApp / LightApp_EventFilter.cxx
1 // Copyright (C) 2005  OPEN CASCADE, CEA/DEN, EDF R&D, PRINCIPIA R&D
2 // 
3 // This library is free software; you can redistribute it and/or
4 // modify it under the terms of the GNU Lesser General Public
5 // License as published by the Free Software Foundation; either 
6 // version 2.1 of the License.
7 // 
8 // This library is distributed in the hope that it will be useful 
9 // but WITHOUT ANY WARRANTY; without even the implied warranty of 
10 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU 
11 // Lesser General Public License for more details.
12 //
13 // You should have received a copy of the GNU Lesser General Public  
14 // License along with this library; if not, write to the Free Software 
15 // Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA
16 //
17 // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
18 //
19
20 #include "LightApp_EventFilter.h"
21
22 #include <SUIT_Desktop.h>
23
24 #include <qapplication.h>
25
26 LightApp_EventFilter* LightApp_EventFilter::myFilter = NULL;
27
28 /*!Constructor.*/
29 LightApp_EventFilter::LightApp_EventFilter()
30 : QObject()
31 {
32   qApp->installEventFilter( this );
33 }
34
35 /*!Destructor.*/
36 LightApp_EventFilter::~LightApp_EventFilter()
37 {
38   qApp->removeEventFilter( this );
39 }
40
41 /*!
42   Custom event filter
43 */
44 bool LightApp_EventFilter::eventFilter( QObject* o, QEvent* e )
45 {
46   if ( e->type() == QEvent::WindowActivate && o->inherits("QDialog") )
47     {
48       QWidget* parent = ((QWidget*)o)->parentWidget();
49       
50       SUIT_Desktop* aDesktop = 0;
51       
52       while( parent )
53         {
54           if ( aDesktop = dynamic_cast<SUIT_Desktop*>(parent) )
55             break;
56           parent = parent->parentWidget();
57         }
58       
59       if ( aDesktop )
60         aDesktop->emitActivated();
61     }
62   
63   return QObject::eventFilter( o, e );
64 }
65
66 /*!Create new instance of LightApp_EventFilter*/
67 void LightApp_EventFilter::Init()
68 {
69   if( myFilter==NULL )
70     myFilter = new LightApp_EventFilter();
71 }
72
73 /*!Destroy filter.*/
74 void LightApp_EventFilter::Destroy()
75 {
76   if( myFilter )
77   {
78     delete myFilter;
79     myFilter = NULL;
80   }
81 }