diff options
author | Timothy Pearson <kb9vqf@pearsoncomputing.net> | 2013-05-03 02:51:37 -0500 |
---|---|---|
committer | Timothy Pearson <kb9vqf@pearsoncomputing.net> | 2013-05-03 02:51:37 -0500 |
commit | 667839ee6560a10aca54885dbf8951b77bdc21b2 (patch) | |
tree | 899fea627f583d2d946a1ab4d3a49a0c3f94d57c | |
parent | 5908f01581521714faf27a93cfac9bfb207ec6b8 (diff) | |
download | tdebase-667839ee6560a10aca54885dbf8951b77bdc21b2.tar.gz tdebase-667839ee6560a10aca54885dbf8951b77bdc21b2.zip |
Hack around ARGB task tray icon background display glitch
-rw-r--r-- | kicker/applets/systemtray/systemtrayapplet.cpp | 23 | ||||
-rw-r--r-- | kicker/applets/systemtray/systemtrayapplet.h | 3 |
2 files changed, 24 insertions, 2 deletions
diff --git a/kicker/applets/systemtray/systemtrayapplet.cpp b/kicker/applets/systemtray/systemtrayapplet.cpp index f9d490162..542ac42d0 100644 --- a/kicker/applets/systemtray/systemtrayapplet.cpp +++ b/kicker/applets/systemtray/systemtrayapplet.cpp @@ -1130,13 +1130,20 @@ void SystemTrayApplet::setBackground() TrayEmbed::TrayEmbed( bool kdeTray, TQWidget* parent ) - : QXEmbed( parent ), kde_tray( kdeTray ) + : QXEmbed( parent ), kde_tray( kdeTray ), m_ensureBackgroundSetTimerCount(0) { + m_ensureBackgroundSetTimer = new TQTimer(); + connect(m_ensureBackgroundSetTimer, TQT_SIGNAL(timeout()), this, TQT_SLOT(ensureBackgroundSet())); hide(); m_scaledWidget = new TQWidget(parent); m_scaledWidget->hide(); } +TrayEmbed::~TrayEmbed() +{ + delete m_ensureBackgroundSetTimer; +} + void TrayEmbed::getIconSize(int defaultIconSize) { TQSize minSize = minimumSizeHint(); @@ -1170,6 +1177,7 @@ void TrayEmbed::setBackground() if (!isHidden()) { XClearArea(x11Display(), embeddedWinId(), 0, 0, 0, 0, True); + m_ensureBackgroundSetTimerCount = 0; ensureBackgroundSet(); } } @@ -1182,7 +1190,7 @@ void TrayEmbed::ensureBackgroundSet() // This is a nasty little hack to make sure that tray icons / applications which do not match our QXEmbed native depth are still displayed properly, // i.e without irritating white/grey borders where the tray icon's transparency is supposed to be... // Essentially it converts a 24 bit Xlib Pixmap to a 32 bit Xlib Pixmap - + TQPixmap bg(width(), height()); // Get the RGB background image @@ -1212,5 +1220,16 @@ void TrayEmbed::ensureBackgroundSet() XSetWindowBackgroundPixmap(x11Display(), embeddedWinId(), argbpixmap); XFreePixmap(x11Display(), argbpixmap); XFreeGC(x11Display(), gc); + + // Repaint + XClearArea(x11Display(), embeddedWinId(), 0, 0, 0, 0, True); + + // HACK + // Clear background artifacts in first available timeslot after initial icon display + if (m_ensureBackgroundSetTimerCount < 1) { + m_ensureBackgroundSetTimerCount++; + m_ensureBackgroundSetTimer->stop(); + m_ensureBackgroundSetTimer->start(0, TRUE); + } } } diff --git a/kicker/applets/systemtray/systemtrayapplet.h b/kicker/applets/systemtray/systemtrayapplet.h index 9816ac766..06b42c23d 100644 --- a/kicker/applets/systemtray/systemtrayapplet.h +++ b/kicker/applets/systemtray/systemtrayapplet.h @@ -128,12 +128,15 @@ class TrayEmbed : public QXEmbed Q_OBJECT public: TrayEmbed( bool kdeTray, TQWidget* parent = NULL ); + ~TrayEmbed(); bool kdeTray() const { return kde_tray; } void setBackground(); void getIconSize(int defaultIconSize); private: bool kde_tray; TQWidget *m_scaledWidget; + TQTimer* m_ensureBackgroundSetTimer; + int m_ensureBackgroundSetTimerCount; private slots: void ensureBackgroundSet(); }; |