2016-04-29 13:05:03 +00:00
|
|
|
/********************************************************************
|
|
|
|
KWin - the KDE window manager
|
|
|
|
This file is part of the KDE project.
|
|
|
|
|
|
|
|
Copyright (C) 2016 Martin Gräßlin <mgraesslin@kde.org>
|
|
|
|
|
|
|
|
This program is free software; you can redistribute it and/or modify
|
|
|
|
it under the terms of the GNU General Public License as published by
|
|
|
|
the Free Software Foundation; either version 2 of the License, or
|
|
|
|
(at your option) any later version.
|
|
|
|
|
|
|
|
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 General Public License for more details.
|
|
|
|
|
|
|
|
You should have received a copy of the GNU General Public License
|
|
|
|
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|
|
|
*********************************************************************/
|
2018-08-29 18:02:16 +00:00
|
|
|
#ifndef KWIN_VIRTUAL_KEYBOARD_H
|
|
|
|
#define KWIN_VIRTUAL_KEYBOARD_H
|
2016-04-29 13:05:03 +00:00
|
|
|
|
|
|
|
#include <QObject>
|
|
|
|
|
|
|
|
#include <kwinglobals.h>
|
|
|
|
#include <kwin_export.h>
|
|
|
|
|
virtualkeyboard: resize the focused window to make room for the keyboard
Summary:
alternative approach: try to resize the winidow to make room for the keyboard.
the new input wayland protocol doesn't have anymore the overlap rectangle (and it would not be going to work with qwidget apps anyways)
in the future will probably be needed anextension to the input protocol v3 which partially gets back this, tough window resizing is needed regardless
what's missing: the resize should be "temporary" and the window should be restored to its previous geometry when the keyboard closes
Test Plan: tested with test QML code
Reviewers: #plasma, #kwin, bshah, graesslin, romangg, davidedmundson
Reviewed By: #plasma, #kwin, romangg, davidedmundson
Subscribers: nicolasfella, mart, kwin, davidedmundson, graesslin
Tags: #kwin
Maniphest Tasks: T9815
Differential Revision: https://phabricator.kde.org/D18818
2019-03-20 10:04:51 +00:00
|
|
|
#include <abstract_client.h>
|
|
|
|
|
2016-04-29 13:05:03 +00:00
|
|
|
class QQuickView;
|
virtualkeyboard: resize the focused window to make room for the keyboard
Summary:
alternative approach: try to resize the winidow to make room for the keyboard.
the new input wayland protocol doesn't have anymore the overlap rectangle (and it would not be going to work with qwidget apps anyways)
in the future will probably be needed anextension to the input protocol v3 which partially gets back this, tough window resizing is needed regardless
what's missing: the resize should be "temporary" and the window should be restored to its previous geometry when the keyboard closes
Test Plan: tested with test QML code
Reviewers: #plasma, #kwin, bshah, graesslin, romangg, davidedmundson
Reviewed By: #plasma, #kwin, romangg, davidedmundson
Subscribers: nicolasfella, mart, kwin, davidedmundson, graesslin
Tags: #kwin
Maniphest Tasks: T9815
Differential Revision: https://phabricator.kde.org/D18818
2019-03-20 10:04:51 +00:00
|
|
|
class QTimer;
|
2016-04-29 13:05:03 +00:00
|
|
|
class QWindow;
|
|
|
|
class KStatusNotifierItem;
|
|
|
|
|
|
|
|
namespace KWin
|
|
|
|
{
|
|
|
|
|
|
|
|
class KWIN_EXPORT VirtualKeyboard : public QObject
|
|
|
|
{
|
|
|
|
Q_OBJECT
|
|
|
|
public:
|
|
|
|
virtual ~VirtualKeyboard();
|
|
|
|
|
|
|
|
void init();
|
|
|
|
|
|
|
|
bool event(QEvent *e) override;
|
|
|
|
bool eventFilter(QObject *o, QEvent *event) override;
|
|
|
|
|
|
|
|
QWindow *inputPanel() const;
|
|
|
|
|
2017-10-06 19:22:50 +00:00
|
|
|
Q_SIGNALS:
|
|
|
|
void enabledChanged(bool enabled);
|
|
|
|
|
2016-04-29 13:05:03 +00:00
|
|
|
private:
|
|
|
|
void show();
|
|
|
|
void hide();
|
|
|
|
void setEnabled(bool enable);
|
|
|
|
void updateSni();
|
virtualkeyboard: resize the focused window to make room for the keyboard
Summary:
alternative approach: try to resize the winidow to make room for the keyboard.
the new input wayland protocol doesn't have anymore the overlap rectangle (and it would not be going to work with qwidget apps anyways)
in the future will probably be needed anextension to the input protocol v3 which partially gets back this, tough window resizing is needed regardless
what's missing: the resize should be "temporary" and the window should be restored to its previous geometry when the keyboard closes
Test Plan: tested with test QML code
Reviewers: #plasma, #kwin, bshah, graesslin, romangg, davidedmundson
Reviewed By: #plasma, #kwin, romangg, davidedmundson
Subscribers: nicolasfella, mart, kwin, davidedmundson, graesslin
Tags: #kwin
Maniphest Tasks: T9815
Differential Revision: https://phabricator.kde.org/D18818
2019-03-20 10:04:51 +00:00
|
|
|
void updateInputPanelState();
|
2016-04-29 13:05:03 +00:00
|
|
|
|
|
|
|
bool m_enabled = false;
|
|
|
|
KStatusNotifierItem *m_sni = nullptr;
|
|
|
|
QScopedPointer<QQuickView> m_inputWindow;
|
virtualkeyboard: resize the focused window to make room for the keyboard
Summary:
alternative approach: try to resize the winidow to make room for the keyboard.
the new input wayland protocol doesn't have anymore the overlap rectangle (and it would not be going to work with qwidget apps anyways)
in the future will probably be needed anextension to the input protocol v3 which partially gets back this, tough window resizing is needed regardless
what's missing: the resize should be "temporary" and the window should be restored to its previous geometry when the keyboard closes
Test Plan: tested with test QML code
Reviewers: #plasma, #kwin, bshah, graesslin, romangg, davidedmundson
Reviewed By: #plasma, #kwin, romangg, davidedmundson
Subscribers: nicolasfella, mart, kwin, davidedmundson, graesslin
Tags: #kwin
Maniphest Tasks: T9815
Differential Revision: https://phabricator.kde.org/D18818
2019-03-20 10:04:51 +00:00
|
|
|
QPointer<AbstractClient> m_trackedClient;
|
|
|
|
// If a surface loses focus immediately after being resized by the keyboard, don't react to it to avoid resize loops
|
|
|
|
QTimer *m_floodTimer;
|
|
|
|
|
2016-04-29 13:05:03 +00:00
|
|
|
QMetaObject::Connection m_waylandShowConnection;
|
|
|
|
QMetaObject::Connection m_waylandHideConnection;
|
|
|
|
QMetaObject::Connection m_waylandHintsConnection;
|
|
|
|
QMetaObject::Connection m_waylandSurroundingTextConnection;
|
|
|
|
QMetaObject::Connection m_waylandResetConnection;
|
|
|
|
QMetaObject::Connection m_waylandEnabledConnection;
|
|
|
|
KWIN_SINGLETON(VirtualKeyboard)
|
|
|
|
};
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
#endif
|