efa0500313
This change is motivated by the fact that we need to suspend libinput before switching the virtual terminal. Also we don't want to take over libinput if we do not have a VirtualTerminal created - in windowed mode we don't want libinput to be started. So binding it to the backends which create the VirtualTerminal makes sense. The KWin::Application gains a new signal virtualTerminalCreated which is emitted from VirtualTerminal once it's properly setup. This is used by Input to create Libinput integration instead of binding it to logind. Furthermore Libinput gets suspended when the VirtualTerminal reports that it is no longer active. For re-activation we still just use logind's session active property.
99 lines
2.7 KiB
C++
99 lines
2.7 KiB
C++
/********************************************************************
|
|
KWin - the KDE window manager
|
|
This file is part of the KDE project.
|
|
|
|
Copyright (C) 2014 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/>.
|
|
*********************************************************************/
|
|
#ifndef KWIN_LIBINPUT_CONNECTION_H
|
|
#define KWIN_LIBINPUT_CONNECTION_H
|
|
|
|
#include "../input.h"
|
|
#include <kwinglobals.h>
|
|
|
|
#include <QObject>
|
|
#include <QSize>
|
|
|
|
class QSocketNotifier;
|
|
|
|
namespace KWin
|
|
{
|
|
namespace LibInput
|
|
{
|
|
|
|
class Context;
|
|
|
|
class Connection : public QObject
|
|
{
|
|
Q_OBJECT
|
|
public:
|
|
~Connection();
|
|
|
|
void setup();
|
|
/**
|
|
* Sets the screen @p size. This is needed for mapping absolute pointer events to
|
|
* the screen data.
|
|
**/
|
|
void setScreenSize(const QSize &size);
|
|
|
|
bool hasKeyboard() const {
|
|
return m_keyboard > 0;
|
|
}
|
|
bool hasTouch() const {
|
|
return m_touch > 0;
|
|
}
|
|
bool hasPointer() const {
|
|
return m_pointer > 0;
|
|
}
|
|
|
|
bool isSuspended() const;
|
|
|
|
void deactivate();
|
|
|
|
Q_SIGNALS:
|
|
void keyChanged(uint32_t key, InputRedirection::KeyboardKeyState, uint32_t time);
|
|
void pointerButtonChanged(uint32_t button, InputRedirection::PointerButtonState state, uint32_t time);
|
|
void pointerMotionAbsolute(QPointF orig, QPointF screen, uint32_t time);
|
|
void pointerMotion(QPointF delta, uint32_t time);
|
|
void pointerAxisChanged(InputRedirection::PointerAxis axis, qreal delta, uint32_t time);
|
|
void touchFrame();
|
|
void touchCanceled();
|
|
void touchDown(qint32 id, const QPointF &absolutePos, quint32 time);
|
|
void touchUp(qint32 id, quint32 time);
|
|
void touchMotion(qint32 id, const QPointF &absolutePos, quint32 time);
|
|
void hasKeyboardChanged(bool);
|
|
void hasPointerChanged(bool);
|
|
void hasTouchChanged(bool);
|
|
|
|
private:
|
|
Connection(Context *input, QObject *parent = nullptr);
|
|
void handleEvent();
|
|
Context *m_input;
|
|
QSocketNotifier *m_notifier;
|
|
QSize m_size;
|
|
int m_keyboard = 0;
|
|
int m_pointer = 0;
|
|
int m_touch = 0;
|
|
bool m_keyboardBeforeSuspend = false;
|
|
bool m_pointerBeforeSuspend = false;
|
|
bool m_touchBeforeSuspend = false;
|
|
|
|
KWIN_SINGLETON(Connection)
|
|
};
|
|
|
|
}
|
|
}
|
|
|
|
#endif
|