Hack around ARGB task tray icon background display glitch

pull/2/head
Timothy Pearson 11 years ago
parent 5908f01581
commit 667839ee65

@ -1130,13 +1130,20 @@ void SystemTrayApplet::setBackground()
TrayEmbed::TrayEmbed( bool kdeTray, TQWidget* parent ) 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(); hide();
m_scaledWidget = new TQWidget(parent); m_scaledWidget = new TQWidget(parent);
m_scaledWidget->hide(); m_scaledWidget->hide();
} }
TrayEmbed::~TrayEmbed()
{
delete m_ensureBackgroundSetTimer;
}
void TrayEmbed::getIconSize(int defaultIconSize) void TrayEmbed::getIconSize(int defaultIconSize)
{ {
TQSize minSize = minimumSizeHint(); TQSize minSize = minimumSizeHint();
@ -1170,6 +1177,7 @@ void TrayEmbed::setBackground()
if (!isHidden()) if (!isHidden())
{ {
XClearArea(x11Display(), embeddedWinId(), 0, 0, 0, 0, True); XClearArea(x11Display(), embeddedWinId(), 0, 0, 0, 0, True);
m_ensureBackgroundSetTimerCount = 0;
ensureBackgroundSet(); 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, // 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... // 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 // Essentially it converts a 24 bit Xlib Pixmap to a 32 bit Xlib Pixmap
TQPixmap bg(width(), height()); TQPixmap bg(width(), height());
// Get the RGB background image // Get the RGB background image
@ -1212,5 +1220,16 @@ void TrayEmbed::ensureBackgroundSet()
XSetWindowBackgroundPixmap(x11Display(), embeddedWinId(), argbpixmap); XSetWindowBackgroundPixmap(x11Display(), embeddedWinId(), argbpixmap);
XFreePixmap(x11Display(), argbpixmap); XFreePixmap(x11Display(), argbpixmap);
XFreeGC(x11Display(), gc); 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);
}
} }
} }

@ -128,12 +128,15 @@ class TrayEmbed : public QXEmbed
Q_OBJECT Q_OBJECT
public: public:
TrayEmbed( bool kdeTray, TQWidget* parent = NULL ); TrayEmbed( bool kdeTray, TQWidget* parent = NULL );
~TrayEmbed();
bool kdeTray() const { return kde_tray; } bool kdeTray() const { return kde_tray; }
void setBackground(); void setBackground();
void getIconSize(int defaultIconSize); void getIconSize(int defaultIconSize);
private: private:
bool kde_tray; bool kde_tray;
TQWidget *m_scaledWidget; TQWidget *m_scaledWidget;
TQTimer* m_ensureBackgroundSetTimer;
int m_ensureBackgroundSetTimerCount;
private slots: private slots:
void ensureBackgroundSet(); void ensureBackgroundSet();
}; };

Loading…
Cancel
Save