[prev in list] [next in list] [prev in thread] [next in thread]
List: kde-commits
Subject: [oxygen-transparent] style: Use event filter to set Argb X property on window, as soon as its WinId
From: Hugo Pereira Da Costa <hugo () oxygen-icons ! org>
Date: 2012-08-30 17:03:54
Message-ID: 20120830170354.2F235A6094 () git ! kde ! org
[Download RAW message or body]
Git commit 0630f95bbf4e5fe7ee9e2feb23b4070877573dbd by Hugo Pereira Da Cost=
a.
Committed on 30/08/2012 at 19:03.
Pushed by hpereiradacosta into branch 'master'.
Use event filter to set Argb X property on window, as soon as its WinId bec=
omes available.
M +40 -2 style/oxygenargbhelper.cpp
M +3 -0 style/oxygenargbhelper.h
http://commits.kde.org/oxygen-transparent/0630f95bbf4e5fe7ee9e2feb23b407087=
7573dbd
diff --git a/style/oxygenargbhelper.cpp b/style/oxygenargbhelper.cpp
index 224cf0b..ac5c34d 100644
--- a/style/oxygenargbhelper.cpp
+++ b/style/oxygenargbhelper.cpp
@@ -154,6 +154,35 @@ namespace Oxygen
}
=
//______________________________________________________________
+ bool ArgbHelper::eventFilter( QObject* object, QEvent* event )
+ {
+
+ switch( event->type() )
+ {
+
+ case QEvent::WinIdChange:
+ {
+ // cast to widget (safe)
+ QWidget* widget( static_cast<QWidget*>( object ) );
+ if( widget->testAttribute(Qt::WA_WState_Created) && widget=
->internalWinId() )
+ {
+ // set Argb X property if possible, and remove from ev=
ent filter
+ _helper.setHasArgb( widget->winId(), true );
+ widget->removeEventFilter( this );
+ }
+ break;
+ }
+
+ default: break;
+
+ }
+
+ // fallback
+ return QObject::eventFilter( object, event );
+
+ }
+
+ //______________________________________________________________
void ArgbHelper::setupTransparency( QWidget* widget )
{
=
@@ -198,9 +227,18 @@ namespace Oxygen
_transparentWidgets.insert( widget );
connect( widget, SIGNAL( destroyed( QObject* ) ), SLOT( unregister=
TransparentWidget( QObject* ) ) );
=
- // set Argb xproperty
if( widget->testAttribute(Qt::WA_WState_Created) && widget->intern=
alWinId() )
- { _helper.setHasArgb( widget->winId(), true ); }
+ {
+
+ // set Argb xproperty, if already possible
+ _helper.setHasArgb( widget->winId(), true );
+
+ } else {
+
+ // install event filter to set window property on WinIdChange =
event
+ widget->installEventFilter( this );
+
+ }
=
return;
}
diff --git a/style/oxygenargbhelper.h b/style/oxygenargbhelper.h
index 20ae293..5360d03 100644
--- a/style/oxygenargbhelper.h
+++ b/style/oxygenargbhelper.h
@@ -112,6 +112,9 @@ namespace Oxygen
//! returns translucent color
inline QColor translucentColor( const QColor& color, bool hasAlpha=
) const;
=
+ //! event filter
+ virtual bool eventFilter( QObject*, QEvent* );
+
protected slots:
=
//! unregister transparent widget
[prev in list] [next in list] [prev in thread] [next in thread]
Configure |
About |
News |
Add a list |
Sponsored by KoreLogic