diff --git a/clients/oxygen/oxygenclient.cpp b/clients/oxygen/oxygenclient.cpp index e956eeeb17..f05c3e8ebf 100644 --- a/clients/oxygen/oxygenclient.cpp +++ b/clients/oxygen/oxygenclient.cpp @@ -1414,7 +1414,7 @@ namespace Oxygen QList buttons( widget()->findChildren() ); foreach( Button* button, buttons ) { - if( event->rect().intersects( button->geometry() ) ) + if( button->isVisible() && event->rect().intersects( button->geometry() ) ) { painter.save(); painter.setViewport( button->geometry() ); diff --git a/effects.cpp b/effects.cpp index daf4a754be..4f8116af3c 100644 --- a/effects.cpp +++ b/effects.cpp @@ -1612,6 +1612,11 @@ bool EffectWindowImpl::isDNDIcon() const return toplevel->isDNDIcon(); } +NET::WindowType EffectWindowImpl::windowType() const +{ + return toplevel->windowType(); +} + bool EffectWindowImpl::isManaged() const { return dynamic_cast< const Client* >(toplevel) != NULL; diff --git a/effects.h b/effects.h index 59faa89f58..fc0c34dadc 100644 --- a/effects.h +++ b/effects.h @@ -285,6 +285,7 @@ public: virtual bool isNotification() const; virtual bool isComboBox() const; virtual bool isDNDIcon() const; + virtual NET::WindowType windowType() const; virtual bool isManaged() const; // managed or override-redirect virtual bool acceptsFocus() const; virtual bool keepAbove() const; diff --git a/effects/cube/cube.cpp b/effects/cube/cube.cpp index f48f0f731a..9b957c29c4 100644 --- a/effects/cube/cube.cpp +++ b/effects/cube/cube.cpp @@ -1292,9 +1292,10 @@ void CubeEffect::prePaintWindow(EffectWindow* w, WindowPrePaintData& data, int t void CubeEffect::paintWindow(EffectWindow* w, int mask, QRegion region, WindowPaintData& data) { ShaderManager *shaderManager = ShaderManager::instance(); - GLShader *shader = shaderManager->pushShader(ShaderManager::GenericShader); + GLShader *shader = NULL; QMatrix4x4 origMatrix; if (activated && cube_painting) { + shader = shaderManager->pushShader(ShaderManager::GenericShader); //kDebug(1212) << w->caption(); float opacity = cubeOpacity; if (start) { diff --git a/kcmkwin/kwinrules/ruleswidget.cpp b/kcmkwin/kwinrules/ruleswidget.cpp index 8032840b45..3c5ad4db54 100644 --- a/kcmkwin/kwinrules/ruleswidget.cpp +++ b/kcmkwin/kwinrules/ruleswidget.cpp @@ -388,9 +388,9 @@ static NET::WindowType comboToType(int val) void RulesWidget::setRules(Rules* rules) { - Rules tmp; - - Q_ASSERT( rules ); + const bool readFromNewEmptyRules = !rules; + if (readFromNewEmptyRules) + rules = new Rules; description->setText(rules->description); wmclass->setText(rules->wmclass); @@ -451,6 +451,11 @@ void RulesWidget::setRules(Rules* rules) CHECKBOX_FORCE_RULE(strictgeometry,); CHECKBOX_FORCE_RULE(disableglobalshortcuts,); CHECKBOX_FORCE_RULE(blockcompositing,); + + if (readFromNewEmptyRules) { + delete rules; + rules = NULL; // it's the function parameter... + } } #undef GENERIC_RULE diff --git a/libkwineffects/kwineffects.h b/libkwineffects/kwineffects.h index fa1b476dc1..6ae0a6d145 100644 --- a/libkwineffects/kwineffects.h +++ b/libkwineffects/kwineffects.h @@ -41,6 +41,7 @@ along with this program. If not, see . #include #include +#include class KLibrary; class KConfigGroup; @@ -1212,6 +1213,11 @@ public: * See _NET_WM_WINDOW_TYPE_DND at http://standards.freedesktop.org/wm-spec/wm-spec-latest.html . */ virtual bool isDNDIcon() const = 0; + /** + * Returns the NETWM window type + * See http://standards.freedesktop.org/wm-spec/wm-spec-latest.html . + */ + virtual NET::WindowType windowType() const = 0; /** * Returns whether the window is managed by KWin (it has control over its placement and other * aspects, as opposed to override-redirect windows that are entirely handled by the application). diff --git a/workspace.cpp b/workspace.cpp index cf91480051..466dece787 100644 --- a/workspace.cpp +++ b/workspace.cpp @@ -809,10 +809,9 @@ void Workspace::updateToolWindows(bool also_hide) { // TODO: What if Client's transiency/group changes? should this be called too? (I'm paranoid, am I not?) if (!options->hideUtilityWindowsForInactive) { - for (ClientList::ConstIterator it = clients.constBegin(); - it != clients.constEnd(); - ++it) - (*it)->hideClient(false); + for (ClientList::ConstIterator it = clients.constBegin(); it != clients.constEnd(); ++it) + if (!(*it)->clientGroup() || (*it)->clientGroup()->visible() == *it) + (*it)->hideClient(false); return; } const Group* group = NULL;