blob: 2ec6992fb52919dfb73bc278ecc4dbfb83e0d59c (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
|
/****************************************************************************
* Copyright (C) 2012 Instituto Nokia de Tecnologia (INdT) *
* *
* This file may be used under the terms of the GNU Lesser *
* General Public License version 2.1 as published by the Free Software *
* Foundation and appearing in the file LICENSE.LGPL included in the *
* packaging of this file. Please review the following information to *
* ensure the GNU Lesser General Public License version 2.1 requirements *
* will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. *
* *
* This program is distributed in the hope that it will be useful, *
* but WITHOUT ANY WARRANTY; without even the implied warranty of *
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
* GNU Lesser General Public License for more details. *
****************************************************************************/
#include "PopupWindow.h"
#include <QtCore/QTimer>
PopupWindow::PopupWindow(QWindow* parent)
: QQuickWindow(parent)
{
setFlags(Qt::Popup);
QSurfaceFormat surfaceFormat;
surfaceFormat.setAlphaBufferSize(8);
setFormat(surfaceFormat);
setClearBeforeRendering(true);
setColor(QColor(Qt::transparent));
}
void PopupWindow::showEvent(QShowEvent* ev)
{
QQuickWindow::showEvent(ev);
// In XCB, we are only guaranteed to grab the mouse if there's a platformWindow
// created. This happens right after this event is sent.
QTimer::singleShot(0, this, SLOT(setMouseGrab()));
}
void PopupWindow::hideEvent(QHideEvent* ev)
{
QQuickWindow::hideEvent(ev);
setMouseGrabEnabled(false);
}
void PopupWindow::mousePressEvent(QMouseEvent* ev)
{
QQuickWindow::mousePressEvent(ev);
const bool outsideWindow = ev->x() < 0 || ev->x() > width() || ev->y() < 0 || ev->y() > height();
if (outsideWindow)
hide();
}
void PopupWindow::setMouseGrab()
{
setMouseGrabEnabled(true);
}
|