[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