Go to:
Gentoo Home
Documentation
Forums
Lists
Bugs
Planet
Store
Wiki
Get Gentoo!
Gentoo's Bugzilla – Attachment 216023 Details for
Bug 295511
kde-base/plasma-workspace: kwin hogs CPU (upstream patch available)
Home
|
New
–
[Ex]
|
Browse
|
Search
|
Privacy Policy
|
[?]
|
Reports
|
Requests
|
Help
|
New Account
|
Log In
[x]
|
Forgot Password
Login:
[x]
[patch]
One file patch made from comment 1 links.
magiclamp-minimize.patch (text/plain), 5.84 KB, created by
shade
on 2010-01-10 18:44:41 UTC
(
hide
)
Description:
One file patch made from comment 1 links.
Filename:
MIME Type:
Creator:
shade
Created:
2010-01-10 18:44:41 UTC
Size:
5.84 KB
patch
obsolete
>diff --git a/kwin/effects/magiclamp/magiclamp.cpp b/kwin/effects/magiclamp/magiclamp.cpp >index e1572cb..44406a2 100644 >--- a/kwin/effects/magiclamp/magiclamp.cpp >+++ b/kwin/effects/magiclamp/magiclamp.cpp >@@ -301,6 +301,11 @@ void MagicLampEffect::postPaintScreen() > effects->postPaintScreen(); > } > >+void MagicLampEffect::windowDeleted( EffectWindow* w ) >+{ >+ mTimeLineWindows.remove( w ); >+} >+ > void MagicLampEffect::windowMinimized( EffectWindow* w ) > { > mTimeLineWindows[w].setCurveShape(TimeLine::LinearCurve); >diff --git a/kwin/effects/magiclamp/magiclamp.h b/kwin/effects/magiclamp/magiclamp.h >index a7f134d..84bfa7e 100644 >--- a/kwin/effects/magiclamp/magiclamp.h >+++ b/kwin/effects/magiclamp/magiclamp.h >@@ -38,6 +38,7 @@ class MagicLampEffect > virtual void paintWindow( EffectWindow* w, int mask, QRegion region, WindowPaintData& data ); > virtual void postPaintScreen(); > >+ virtual void windowDeleted( EffectWindow* c ); > virtual void windowMinimized( EffectWindow* c ); > virtual void windowUnminimized( EffectWindow* c ); > >diff --git a/kwin/effects/minimizeanimation/minimizeanimation.cpp b/kwin/effects/minimizeanimation/minimizeanimation.cpp >index 9432504..905a64b 100644 >--- a/kwin/effects/minimizeanimation/minimizeanimation.cpp >+++ b/kwin/effects/minimizeanimation/minimizeanimation.cpp >@@ -39,34 +39,39 @@ void MinimizeAnimationEffect::prePaintScreen( ScreenPrePaintData& data, int time > // whole screen won't be repainted, resulting in artefacts > data.mask |= PAINT_SCREEN_WITH_TRANSFORMED_WINDOWS; > >- effects->prePaintScreen(data, time); >- } >- >-void MinimizeAnimationEffect::prePaintWindow( EffectWindow* w, WindowPrePaintData& data, int time ) >- { >- if( mTimeLineWindows.contains( w )) >+ QHash< EffectWindow*, TimeLine >::iterator entry = mTimeLineWindows.begin(); >+ bool erase = false; >+ while( entry != mTimeLineWindows.end() ) > { >- if( w->isMinimized() ) >+ TimeLine &timeline = entry.value(); >+ if( entry.key()->isMinimized() ) > { >- mTimeLineWindows[w].addTime(time); >- if( mTimeLineWindows[w].progress() >= 1.0f ) >- mTimeLineWindows.remove( w ); >+ timeline.addTime(time); >+ erase = (timeline.progress() >= 1.0f); > } > else > { >- mTimeLineWindows[w].removeTime(time); >- if( mTimeLineWindows[w].progress() <= 0.0f ) >- mTimeLineWindows.remove( w ); >+ timeline.removeTime(time); >+ erase = (timeline.progress() <= 0.0f); > } >+ if( erase ) >+ entry = mTimeLineWindows.erase( entry ); >+ else >+ ++entry; >+ } > >- // Schedule window for transformation if the animation is still in >- // progress >- if( mTimeLineWindows.contains( w )) >- { >- // We'll transform this window >- data.setTransformed(); >- w->enablePainting( EffectWindow::PAINT_DISABLED_BY_MINIMIZE ); >- } >+ effects->prePaintScreen(data, time); >+ } >+ >+void MinimizeAnimationEffect::prePaintWindow( EffectWindow* w, WindowPrePaintData& data, int time ) >+ { >+ // Schedule window for transformation if the animation is still in >+ // progress >+ if( mTimeLineWindows.contains( w ) ) >+ { >+ // We'll transform this window >+ data.setTransformed(); >+ w->enablePainting( EffectWindow::PAINT_DISABLED_BY_MINIMIZE ); > } > > effects->prePaintWindow( w, data, time ); >@@ -74,10 +79,11 @@ void MinimizeAnimationEffect::prePaintWindow( EffectWindow* w, WindowPrePaintDat > > void MinimizeAnimationEffect::paintWindow( EffectWindow* w, int mask, QRegion region, WindowPaintData& data ) > { >- if( mTimeLineWindows.contains( w )) >+ QHash< EffectWindow*, TimeLine >::const_iterator entry = mTimeLineWindows.find(w); >+ if( entry != mTimeLineWindows.constEnd() ) > { > // 0 = not minimized, 1 = fully minimized >- double progress = mTimeLineWindows[w].value(); >+ double progress = entry->value(); > > QRect geo = w->geometry(); > QRect icon = w->iconGeometry(); >@@ -107,18 +113,25 @@ void MinimizeAnimationEffect::postPaintScreen() > effects->postPaintScreen(); > } > >+void MinimizeAnimationEffect::windowDeleted( EffectWindow* w ) >+ { >+ mTimeLineWindows.remove( w ); >+ } >+ > void MinimizeAnimationEffect::windowMinimized( EffectWindow* w ) > { >- mTimeLineWindows[w].setCurveShape(TimeLine::EaseInCurve); >- mTimeLineWindows[w].setDuration( animationTime( 250 )); >- mTimeLineWindows[w].setProgress(0.0f); >+ TimeLine &timeline = mTimeLineWindows[w]; >+ timeline.setCurveShape(TimeLine::EaseInCurve); >+ timeline.setDuration( animationTime( 250 )); >+ timeline.setProgress(0.0f); > } > > void MinimizeAnimationEffect::windowUnminimized( EffectWindow* w ) > { >- mTimeLineWindows[w].setCurveShape(TimeLine::EaseOutCurve); >- mTimeLineWindows[w].setDuration( animationTime( 250 )); >- mTimeLineWindows[w].setProgress(1.0f); >+ TimeLine &timeline = mTimeLineWindows[w]; >+ timeline.setCurveShape(TimeLine::EaseOutCurve); >+ timeline.setDuration( animationTime( 250 )); >+ timeline.setProgress(1.0f); > } > > } // namespace >diff --git a/kwin/effects/minimizeanimation/minimizeanimation.h b/kwin/effects/minimizeanimation/minimizeanimation.h >index d8abd8c..96e4578 100644 >--- a/kwin/effects/minimizeanimation/minimizeanimation.h >+++ b/kwin/effects/minimizeanimation/minimizeanimation.h >@@ -42,6 +42,7 @@ class MinimizeAnimationEffect > virtual void paintWindow( EffectWindow* w, int mask, QRegion region, WindowPaintData& data ); > virtual void postPaintScreen(); > >+ virtual void windowDeleted( EffectWindow* c ); > virtual void windowMinimized( EffectWindow* c ); > virtual void windowUnminimized( EffectWindow* c ); >
You cannot view the attachment while viewing its details because your browser does not support IFRAMEs.
View the attachment on a separate page
.
View Attachment As Diff
View Attachment As Raw
Actions:
View
|
Diff
Attachments on
bug 295511
: 216023