File indexing completed on 2024-04-28 05:26:20
0001 ////////////////////////////////////////////////////////////////////////////// 0002 // breezeblurhelper.cpp 0003 // handle regions passed to kwin for blurring 0004 // ------------------- 0005 // 0006 // SPDX-FileCopyrightText: 2018 Alex Nemeth <alex.nemeth329@gmail.com> 0007 // 0008 // Largely rewritten from Oxygen widget style 0009 // SPDX-FileCopyrightText: 2007 Thomas Luebking <thomas.luebking@web.de> 0010 // SPDX-FileCopyrightText: 2010 Hugo Pereira Da Costa <hugo.pereira@free.fr> 0011 // 0012 // SPDX-License-Identifier: MIT 0013 ////////////////////////////////////////////////////////////////////////////// 0014 0015 #include "breezeblurhelper.h" 0016 #include "breezestyleconfigdata.h" 0017 0018 #include <KWindowEffects> 0019 0020 #include <QEvent> 0021 #include <QVector> 0022 0023 namespace Breeze 0024 { 0025 //___________________________________________________________ 0026 BlurHelper::BlurHelper(QObject *parent) 0027 : QObject(parent) 0028 { 0029 } 0030 0031 //___________________________________________________________ 0032 void BlurHelper::registerWidget(QWidget *widget) 0033 { 0034 // install event filter 0035 addEventFilter(widget); 0036 0037 // schedule shadow area repaint 0038 update(widget); 0039 } 0040 0041 //___________________________________________________________ 0042 void BlurHelper::unregisterWidget(QWidget *widget) 0043 { 0044 // remove event filter 0045 widget->removeEventFilter(this); 0046 } 0047 0048 //___________________________________________________________ 0049 bool BlurHelper::eventFilter(QObject *object, QEvent *event) 0050 { 0051 switch (event->type()) { 0052 case QEvent::Hide: 0053 case QEvent::Show: 0054 case QEvent::Resize: { 0055 // cast to widget and check 0056 QWidget *widget(qobject_cast<QWidget *>(object)); 0057 0058 if (!widget) { 0059 break; 0060 } 0061 0062 update(widget); 0063 break; 0064 } 0065 0066 default: 0067 break; 0068 } 0069 0070 // never eat events 0071 return false; 0072 } 0073 0074 //___________________________________________________________ 0075 void BlurHelper::update(QWidget *widget) const 0076 { 0077 /* 0078 directly from bespin code. Supposedly prevent playing with some 'pseudo-widgets' 0079 that have winId matching some other -random- window 0080 */ 0081 if (!(widget->testAttribute(Qt::WA_WState_Created) || widget->internalWinId())) { 0082 return; 0083 } 0084 0085 widget->winId(); // force creation of the window handle 0086 KWindowEffects::enableBlurBehind(widget->windowHandle(), true); 0087 0088 // force update 0089 if (widget->isVisible()) { 0090 widget->update(); 0091 } 0092 } 0093 }