Don't grab QWhatsThis background on non-Windows platforms

The logic was introduced in 186589abd48b17fdb9b631211008753e2d1701b3
due to Windows supposedly not supporting NoSystemBackground. It's
not clear whether this is still the case, but as this workaround
causes problems on other platforms, such as bringing up the screen
capturing permission dialog on macOS, it should be limited to Windows.

Fixes: QTBUG-113556
Pick-to: 6.5
Change-Id: I197adb5fc177faebc0f2fcd28612e3daa0c22ed5
Reviewed-by: Volker Hilsheimer <volker.hilsheimer@qt.io>
This commit is contained in:
Tor Arne Vestbø 2023-05-15 15:14:53 +02:00
parent c4ce22ef24
commit 6a28b391f7

View File

@ -110,7 +110,9 @@ public:
static QWhatsThat *instance;
protected:
#if defined(Q_OS_WIN)
void showEvent(QShowEvent *e) override;
#endif
void mousePressEvent(QMouseEvent*) override;
void mouseReleaseEvent(QMouseEvent*) override;
void mouseMoveEvent(QMouseEvent*) override;
@ -123,7 +125,9 @@ private:
QString text;
QTextDocument* doc;
QString anchor;
#if defined(Q_OS_WIN)
QPixmap background;
#endif
};
QWhatsThat *QWhatsThat::instance = nullptr;
@ -197,10 +201,12 @@ QWhatsThat::~QWhatsThat()
delete doc;
}
#if defined(Q_OS_WIN)
void QWhatsThat::showEvent(QShowEvent *)
{
background = QGuiApplication::primaryScreen()->grabWindow(0, x(), y(), width(), height());
}
#endif
void QWhatsThat::mousePressEvent(QMouseEvent* e)
{
@ -261,7 +267,10 @@ void QWhatsThat::paintEvent(QPaintEvent*)
if (drawShadow)
r.adjust(0, 0, -shadowWidth, -shadowWidth);
QPainter p(this);
#if defined(Q_OS_WIN)
// Needed due to supposed lack of support for NoSystemBackground on Windows
p.drawPixmap(0, 0, background);
#endif
p.setPen(QPen(palette().toolTipText(), 0));
p.setBrush(palette().toolTipBase());
p.drawRect(r);