summaryrefslogtreecommitdiff
path: root/vcl/qt5/QtInstanceWindow.cxx
blob: de4fa43285d6871e4188a37ad5a161d9691c35de (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
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
/*
 * This file is part of the LibreOffice project.
 *
 * This Source Code Form is subject to the terms of the Mozilla Public
 * License, v. 2.0. If a copy of the MPL was not distributed with this
 * file, You can obtain one at http://mozilla.org/MPL/2.0/.
 */

#include <QtInstanceWindow.hxx>
#include <QtInstanceWindow.moc>

#include <vcl/qt/QtUtils.hxx>

#include <QtGui/QWindow>

QtInstanceWindow::QtInstanceWindow(QWidget* pWidget)
    : QtInstanceContainer(pWidget)
{
    // install event filter to handle window activation/deactivation events
    pWidget->installEventFilter(this);
}

void QtInstanceWindow::set_title(const OUString& rTitle)
{
    SolarMutexGuard g;
    QtInstance& rQtInstance = GetQtInstance();
    if (!rQtInstance.IsMainThread())
    {
        rQtInstance.RunInMainThread([&] { set_title(rTitle); });
        return;
    }

    getQWidget()->setWindowTitle(toQString(rTitle));
}

OUString QtInstanceWindow::get_title() const
{
    SolarMutexGuard g;
    QtInstance& rQtInstance = GetQtInstance();
    if (!rQtInstance.IsMainThread())
    {
        OUString sTitle;
        rQtInstance.RunInMainThread([&] { sTitle = get_title(); });
        return sTitle;
    }

    return toOUString(getQWidget()->windowTitle());
}

void QtInstanceWindow::window_move(int, int) {}

bool QtInstanceWindow::get_resizable() const { return true; }

Size QtInstanceWindow::get_size() const { return Size(); }

Point QtInstanceWindow::get_position() const { return Point(); }

AbsoluteScreenPixelRectangle QtInstanceWindow::get_monitor_workarea() const
{
    return AbsoluteScreenPixelRectangle();
}

void QtInstanceWindow::set_centered_on_parent(bool) {}

bool QtInstanceWindow::has_toplevel_focus() const
{
    SolarMutexGuard g;
    bool bFocus;
    GetQtInstance().RunInMainThread([&] { bFocus = QApplication::activeWindow() == getQWidget(); });
    return bFocus;
}

void QtInstanceWindow::present()
{
    SolarMutexGuard g;
    GetQtInstance().RunInMainThread([&] {
        if (QWindow* pWindow = getQWidget()->windowHandle())
            pWindow->requestActivate();
    });
}

void QtInstanceWindow::change_default_widget(weld::Widget*, weld::Widget*) {}

bool QtInstanceWindow::is_default_widget(const weld::Widget*) const { return true; }

void QtInstanceWindow::set_window_state(const OUString&) {}

OUString QtInstanceWindow::get_window_state(vcl::WindowDataMask) const { return OUString(); }

css::uno::Reference<css::awt::XWindow> QtInstanceWindow::GetXWindow()
{
    return css::uno::Reference<css::awt::XWindow>();
}

SystemEnvData QtInstanceWindow::get_system_data() const
{
    const SystemEnvData* pEnvData = nullptr;

    return *pEnvData;
}

void QtInstanceWindow::resize_to_request() {}

weld::ScreenShotCollection QtInstanceWindow::collect_screenshot_data()
{
    return weld::ScreenShotCollection();
}

VclPtr<VirtualDevice> QtInstanceWindow::screenshot() { return nullptr; }

const vcl::ILibreOfficeKitNotifier* QtInstanceWindow::GetLOKNotifier() { return nullptr; }

bool QtInstanceWindow::eventFilter(QObject* pObject, QEvent* pEvent)
{
    if (pObject != getQWidget())
        return false;

    switch (pEvent->type())
    {
        case QEvent::WindowActivate:
        case QEvent::WindowDeactivate:
            signal_container_focus_changed();
            return false;
        default:
            return false;
    }
}

/* vim:set shiftwidth=4 softtabstop=4 expandtab: */