diff --git a/client.cpp b/client.cpp index b429a69b51..aad9315282 100644 --- a/client.cpp +++ b/client.cpp @@ -201,7 +201,7 @@ Client::Client(Workspace* ws) ready_for_painting = false; // wait for first damage or sync reply #endif - connect(this, SIGNAL(clientGeometryShapeChanged(KWin::Client*,QRect)), SIGNAL(geometryChanged())); + connect(this, SIGNAL(geometryShapeChanged(KWin::Toplevel*,QRect)), SIGNAL(geometryChanged())); connect(this, SIGNAL(clientMaximizedStateChanged(KWin::Client*,KDecorationDefines::MaximizeMode)), SIGNAL(geometryChanged())); connect(this, SIGNAL(clientStepUserMovedResized(KWin::Client*,QRect)), SIGNAL(geometryChanged())); @@ -376,9 +376,7 @@ void Client::updateDecoration(bool check_workspace_pos, bool force) resizeDecorationPixmaps(); if (compositing()) discardWindowPixmap(); - if (scene != NULL) - scene->windowGeometryShapeChanged(this); - emit clientGeometryShapeChanged(this, oldgeom); + emit geometryShapeChanged(this, oldgeom); } else destroyDecoration(); if (check_workspace_pos) @@ -412,10 +410,8 @@ void Client::destroyDecoration() decorationPixmapLeft = decorationPixmapRight = decorationPixmapTop = decorationPixmapBottom = QPixmap(); if (compositing()) discardWindowPixmap(); - if (scene != NULL && !deleting) - scene->windowGeometryShapeChanged(this); if (!deleting) { - emit clientGeometryShapeChanged(this, oldgeom); + emit geometryShapeChanged(this, oldgeom); } } } @@ -789,9 +785,7 @@ void Client::updateShape() addRepaintFull(); addWorkspaceRepaint(visibleRect()); // In case shape change removes part of this window } - if (scene != NULL) - scene->windowGeometryShapeChanged(this); - emit clientGeometryShapeChanged(this, geometry()); + emit geometryShapeChanged(this, geometry()); } static Window shape_helper_window = None; @@ -867,9 +861,7 @@ void Client::setMask(const QRegion& reg, int mode) XShapeCombineShape(display(), frameId(), ShapeBounding, 0, 0, shape_helper_window, ShapeBounding, ShapeSet); } - if (scene != NULL) - scene->windowGeometryShapeChanged(this); - emit clientGeometryShapeChanged(this, geometry()); + emit geometryShapeChanged(this, geometry()); updateShape(); } diff --git a/client.h b/client.h index 7838fcbd83..a50b1b2b32 100644 --- a/client.h +++ b/client.h @@ -490,7 +490,6 @@ signals: void clientMaximizedStateChanged(KWin::Client*, KDecorationDefines::MaximizeMode); void clientMinimized(KWin::Client* client, bool animate); void clientUnminimized(KWin::Client* client, bool animate); - void clientGeometryShapeChanged(KWin::Client* client, const QRect& old); void clientStartUserMovedResized(KWin::Client*); void clientStepUserMovedResized(KWin::Client *, const QRect&); void clientFinishUserMovedResized(KWin::Client*); diff --git a/effects.cpp b/effects.cpp index f736a3408a..c54d5a6146 100644 --- a/effects.cpp +++ b/effects.cpp @@ -146,7 +146,7 @@ void EffectsHandlerImpl::setupClientConnections(Client* c) connect(c, SIGNAL(opacityChanged(KWin::Toplevel*,qreal)), this, SLOT(slotOpacityChanged(KWin::Toplevel*,qreal))); connect(c, SIGNAL(clientMinimized(KWin::Client*,bool)), this, SLOT(slotClientMinimized(KWin::Client*,bool))); connect(c, SIGNAL(clientUnminimized(KWin::Client*,bool)), this, SLOT(slotClientUnminimized(KWin::Client*,bool))); - connect(c, SIGNAL(clientGeometryShapeChanged(KWin::Client*,QRect)), this, SLOT(slotClientGeometryShapeChanged(KWin::Client*,QRect))); + connect(c, SIGNAL(geometryShapeChanged(KWin::Toplevel*,QRect)), this, SLOT(slotGeometryShapeChanged(KWin::Toplevel*,QRect))); connect(c, SIGNAL(damaged(KWin::Toplevel*,QRect)), this, SLOT(slotWindowDamaged(KWin::Toplevel*,QRect))); connect(c, SIGNAL(propertyNotify(KWin::Toplevel*,long)), this, SLOT(slotPropertyNotify(KWin::Toplevel*,long))); } @@ -155,7 +155,7 @@ void EffectsHandlerImpl::setupUnmanagedConnections(Unmanaged* u) { connect(u, SIGNAL(unmanagedClosed(KWin::Unmanaged*)), this, SLOT(slotUnmanagedClosed(KWin::Unmanaged*))); connect(u, SIGNAL(opacityChanged(KWin::Toplevel*,qreal)), this, SLOT(slotOpacityChanged(KWin::Toplevel*,qreal))); - connect(u, SIGNAL(unmanagedGeometryShapeChanged(KWin::Unmanaged*,QRect)), this, SLOT(slotUnmanagedGeometryShapeChanged(KWin::Unmanaged*,QRect))); + connect(u, SIGNAL(geometryShapeChanged(KWin::Toplevel*,QRect)), this, SLOT(slotGeometryShapeChanged(KWin::Toplevel*,QRect))); connect(u, SIGNAL(damaged(KWin::Toplevel*,QRect)), this, SLOT(slotWindowDamaged(KWin::Toplevel*,QRect))); connect(u, SIGNAL(propertyNotify(KWin::Toplevel*,long)), this, SLOT(slotPropertyNotify(KWin::Toplevel*,long))); } @@ -443,22 +443,13 @@ void EffectsHandlerImpl::slotWindowDamaged(Toplevel* t, const QRect& r) emit windowDamaged(t->effectWindow(), r); } -void EffectsHandlerImpl::slotClientGeometryShapeChanged(Client* c, const QRect& old) +void EffectsHandlerImpl::slotGeometryShapeChanged(Toplevel* t, const QRect& old) { // during late cleanup effectWindow() may be already NULL // in some functions that may still call this - if (c == NULL || c->effectWindow() == NULL) + if (t == NULL || t->effectWindow() == NULL) return; - emit windowGeometryShapeChanged(c->effectWindow(), old); -} - -void EffectsHandlerImpl::slotUnmanagedGeometryShapeChanged(Unmanaged* u, const QRect& old) -{ - // during late cleanup effectWindow() may be already NULL - // in some functions that may still call this - if (u == NULL || u->effectWindow() == NULL) - return; - emit windowGeometryShapeChanged(u->effectWindow(), old); + emit windowGeometryShapeChanged(t->effectWindow(), old); } void EffectsHandlerImpl::setActiveFullScreenEffect(Effect* e) diff --git a/effects.h b/effects.h index 90d00ce107..f735f6b418 100644 --- a/effects.h +++ b/effects.h @@ -189,8 +189,7 @@ protected Q_SLOTS: void slotOpacityChanged(KWin::Toplevel *t, qreal oldOpacity); void slotClientMinimized(KWin::Client *c, bool animate); void slotClientUnminimized(KWin::Client *c, bool animate); - void slotClientGeometryShapeChanged(KWin::Client *c, const QRect &old); - void slotUnmanagedGeometryShapeChanged(KWin::Unmanaged *u, const QRect &old); + void slotGeometryShapeChanged(KWin::Toplevel *t, const QRect &old); void slotWindowDamaged(KWin::Toplevel *t, const QRect& r); void slotPropertyNotify(KWin::Toplevel *t, long atom); void slotPropertyNotify(long atom); diff --git a/events.cpp b/events.cpp index e2dc2628c0..5d8d0ba48f 100644 --- a/events.cpp +++ b/events.cpp @@ -1599,9 +1599,7 @@ bool Unmanaged::windowEvent(XEvent* e) detectShape(window()); addRepaintFull(); addWorkspaceRepaint(geometry()); // in case shape change removes part of this window - if (scene != NULL) - scene->windowGeometryShapeChanged(this); - emit unmanagedGeometryShapeChanged(this, geometry()); + emit geometryShapeChanged(this, geometry()); } #ifdef HAVE_XDAMAGE if (e->type == Extensions::damageNotifyEvent()) @@ -1634,9 +1632,7 @@ void Unmanaged::configureNotifyEvent(XConfigureEvent* e) addRepaintFull(); if (old.size() != geom.size()) discardWindowPixmap(); - if (scene != NULL) - scene->windowGeometryShapeChanged(this); - emit unmanagedGeometryShapeChanged(this, old); + emit geometryShapeChanged(this, old); } } diff --git a/geometry.cpp b/geometry.cpp index 7d93f10b20..afcbf0481d 100644 --- a/geometry.cpp +++ b/geometry.cpp @@ -1897,9 +1897,7 @@ void Client::setGeometry(int x, int y, int w, int h, ForceGeometry_t force, bool // which can happen when untabbing maximized windows if (resized) { discardWindowPixmap(); - if (scene != NULL) - scene->windowGeometryShapeChanged(this); - emit clientGeometryShapeChanged(this, geom_before_block); + emit geometryShapeChanged(this, geom_before_block); } const QRect deco_rect = decorationRect().translated(geom.x(), geom.y()); addWorkspaceRepaint(deco_rect_before_block); @@ -1973,9 +1971,7 @@ void Client::plainResize(int w, int h, ForceGeometry_t force, bool emitJs) workspace()->updateStackingOrder(); workspace()->checkUnredirect(); discardWindowPixmap(); - if (scene != NULL) - scene->windowGeometryShapeChanged(this); - emit clientGeometryShapeChanged(this, geom_before_block); + emit geometryShapeChanged(this, geom_before_block); const QRect deco_rect = decorationRect().translated(geom.x(), geom.y()); addWorkspaceRepaint(deco_rect_before_block); addWorkspaceRepaint(deco_rect); diff --git a/scene.h b/scene.h index 5dc613f8ff..77c81f010f 100644 --- a/scene.h +++ b/scene.h @@ -57,8 +57,6 @@ public: // Notification function - KWin core informs about changes. // Used to mainly discard cached data. - // shape/size of a window changed - virtual void windowGeometryShapeChanged(Toplevel*) = 0; // a new window has been created virtual void windowAdded(Toplevel*) = 0; // a window has been closed @@ -102,6 +100,8 @@ public: protected Q_SLOTS: // opacity of a window changed virtual void windowOpacityChanged(KWin::Toplevel* c) = 0; + // shape/size of a window changed + virtual void windowGeometryShapeChanged(KWin::Toplevel* c) = 0; protected: // shared implementation, starts painting the screen void paintScreen(int* mask, QRegion* region); diff --git a/scene_opengl.cpp b/scene_opengl.cpp index e6dc25452d..a3761d9849 100644 --- a/scene_opengl.cpp +++ b/scene_opengl.cpp @@ -214,6 +214,7 @@ void SceneOpenGL::windowAdded(Toplevel* c) assert(!windows.contains(c)); windows[ c ] = new Window(c); connect(c, SIGNAL(opacityChanged(KWin::Toplevel*,qreal)), SLOT(windowOpacityChanged(KWin::Toplevel*))); + connect(c, SIGNAL(geometryShapeChanged(KWin::Toplevel*,QRect)), SLOT(windowGeometryShapeChanged(KWin::Toplevel*))); c->effectWindow()->setSceneWindow(windows[ c ]); c->getShadow(); windows[ c ]->updateShadow(c->shadow()); @@ -243,7 +244,7 @@ void SceneOpenGL::windowDeleted(Deleted* c) c->effectWindow()->setSceneWindow(NULL); } -void SceneOpenGL::windowGeometryShapeChanged(Toplevel* c) +void SceneOpenGL::windowGeometryShapeChanged(KWin::Toplevel* c) { if (!windows.contains(c)) // this is ok, shape is not valid return; // by default diff --git a/scene_opengl.h b/scene_opengl.h index 6cef069e1b..9d89879ab6 100644 --- a/scene_opengl.h +++ b/scene_opengl.h @@ -51,7 +51,6 @@ public: return OpenGLCompositing; } virtual void paint(QRegion damage, ToplevelList windows); - virtual void windowGeometryShapeChanged(Toplevel*); virtual void windowAdded(Toplevel*); virtual void windowClosed(Toplevel*, Deleted*); virtual void windowDeleted(Deleted*); @@ -62,6 +61,7 @@ protected: QMatrix4x4 transformation(int mask, const ScreenPaintData &data) const; protected Q_SLOTS: virtual void windowOpacityChanged(KWin::Toplevel* c); + virtual void windowGeometryShapeChanged(KWin::Toplevel* c); private: bool selectMode(); bool initTfp(); diff --git a/scene_xrender.cpp b/scene_xrender.cpp index 6e30a88d20..5e404ca14e 100644 --- a/scene_xrender.cpp +++ b/scene_xrender.cpp @@ -289,7 +289,7 @@ void SceneXrender::paintBackground(QRegion region) } } -void SceneXrender::windowGeometryShapeChanged(Toplevel* c) +void SceneXrender::windowGeometryShapeChanged(KWin::Toplevel* c) { if (!windows.contains(c)) // this is ok, shape is not valid by default return; @@ -336,6 +336,7 @@ void SceneXrender::windowAdded(Toplevel* c) assert(!windows.contains(c)); windows[ c ] = new Window(c); connect(c, SIGNAL(opacityChanged(KWin::Toplevel*,qreal)), SLOT(windowOpacityChanged(KWin::Toplevel*))); + connect(c, SIGNAL(geometryShapeChanged(KWin::Toplevel*,QRect)), SLOT(windowGeometryShapeChanged(KWin::Toplevel*))); c->effectWindow()->setSceneWindow(windows[ c ]); c->getShadow(); windows[ c ]->updateShadow(c->shadow()); diff --git a/scene_xrender.h b/scene_xrender.h index ef12b4be08..691c7dfa79 100644 --- a/scene_xrender.h +++ b/scene_xrender.h @@ -47,7 +47,6 @@ public: return XRenderCompositing; } virtual void paint(QRegion damage, ToplevelList windows); - virtual void windowGeometryShapeChanged(Toplevel*); virtual void windowAdded(Toplevel*); virtual void windowClosed(Toplevel*, Deleted*); virtual void windowDeleted(Deleted*); @@ -57,6 +56,7 @@ protected: virtual void paintGenericScreen(int mask, ScreenPaintData data); protected Q_SLOTS: virtual void windowOpacityChanged(KWin::Toplevel* c); + virtual void windowGeometryShapeChanged(KWin::Toplevel* c); private: void paintTransformedScreen(int mask); void createBuffer(); diff --git a/toplevel.h b/toplevel.h index f48788fc41..0ec13b452f 100644 --- a/toplevel.h +++ b/toplevel.h @@ -162,6 +162,7 @@ signals: void damaged(KWin::Toplevel* toplevel, const QRect& damage); void propertyNotify(KWin::Toplevel* toplevel, long a); void geometryChanged(); + void geometryShapeChanged(KWin::Toplevel* toplevel, const QRect& old); protected: virtual ~Toplevel(); diff --git a/unmanaged.cpp b/unmanaged.cpp index 32908aabd2..9a0aa35373 100644 --- a/unmanaged.cpp +++ b/unmanaged.cpp @@ -32,7 +32,7 @@ namespace KWin Unmanaged::Unmanaged(Workspace* ws) : Toplevel(ws) { - connect(this, SIGNAL(unmanagedGeometryShapeChanged(KWin::Unmanaged*,QRect)), SIGNAL(geometryChanged())); + connect(this, SIGNAL(geometryShapeChanged(KWin::Toplevel* ,QRect)), SIGNAL(geometryChanged())); } Unmanaged::~Unmanaged() diff --git a/unmanaged.h b/unmanaged.h index 777deaae7b..c801c4b3de 100644 --- a/unmanaged.h +++ b/unmanaged.h @@ -48,7 +48,6 @@ protected: virtual bool shouldUnredirect() const; Q_SIGNALS: void unmanagedClosed(KWin::Unmanaged*); - void unmanagedGeometryShapeChanged(KWin::Unmanaged*, const QRect&); private: virtual ~Unmanaged(); // use release() // handlers for X11 events