[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