summaryrefslogtreecommitdiffstats
path: root/src/core/PopupWindow.cpp
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);
}