[prev in list] [next in list] [prev in thread] [next in thread]
List: kde-commits
Subject: kdebase/kicker/applets/clock
From: Oliver Bausinger <bausi () everest ! mathematik ! uni-tuebingen ! de>
Date: 2003-12-16 14:12:33
[Download RAW message or body]
CVS commit by bausi:
Fix #69984 (FuzzyClock causing a crash).
* Guard FuzzyClock::drawContents against multiple calls
* Delete FuzzyClock only after drawing finished
CCMAIL: 69984-done@bugs.kde.org
M +24 -1 clock.cpp 1.167
M +5 -0 clock.h 1.42
--- kdebase/kicker/applets/clock/clock.cpp #1.166:1.167
@@ -671,7 +671,17 @@ FuzzyClock::FuzzyClock(ClockApplet *appl
_time = _applet->clockGetTime();
+ alreadyDrawing=false;
repaint();
}
+void FuzzyClock::deleteMyself()
+{
+ if(alreadyDrawing) // try again later
+ QTimer::singleShot(1000, this, SLOT(deleteMyself()));
+ else
+ delete this;
+}
+
+
int FuzzyClock::preferedWidthForHeight(int ) const
{
@@ -717,4 +727,8 @@ void FuzzyClock::drawContents(QPainter *
return;
+ if(!_applet)
+ return;
+
+ alreadyDrawing = true;
QString newTimeStr;
@@ -784,4 +798,5 @@ void FuzzyClock::drawContents(QPainter *
p->drawText(4, 2, width() - 8, height() - 4, AlignCenter, _timeStr);
}
+ alreadyDrawing = false;
}
@@ -933,4 +948,12 @@ void ClockApplet::preferences(bool timez
void ClockApplet::slotApplySettings()
{
+ // ugly workaround for FuzzyClock: sometimes FuzzyClock
+ // hasn't finished drawing when getting deleted, so we
+ // ask FuzzyClock to delete itself appropriately
+ if( _clock && _clock->widget()->inherits("FuzzyClock") ) {
+ FuzzyClock* f = static_cast<FuzzyClock*>(_clock);
+ f->deleteMyself();
+ }
+ else
delete _clock;
--- kdebase/kicker/applets/clock/clock.h #1.41:1.42
@@ -237,4 +237,7 @@ public:
bool showDate();
+public slots:
+ void deleteMyself();
+
protected:
virtual void drawContents(QPainter *p);
@@ -252,4 +255,6 @@ protected:
QColor foreColor;
QFont fontFuz;
+private:
+ bool alreadyDrawing;
};
[prev in list] [next in list] [prev in thread] [next in thread]
Configure |
About |
News |
Add a list |
Sponsored by KoreLogic