blob: 6978b569192f73fe631be08c66610932f3b87052 (
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)
: QQuickCanvas(parent)
{
setWindowFlags(Qt::Popup);
QSurfaceFormat surfaceFormat;
surfaceFormat.setAlphaBufferSize(8);
setFormat(surfaceFormat);
setClearBeforeRendering(true);
setClearColor(QColor(Qt::transparent));
}
void PopupWindow::showEvent(QShowEvent* ev)
{
QQuickCanvas::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)
{
QQuickCanvas::hideEvent(ev);
setMouseGrabEnabled(false);
}
void PopupWindow::mousePressEvent(QMouseEvent* ev)
{
QQuickCanvas::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);
}
|