Changeset View
Changeset View
Standalone View
Standalone View
input.cpp
Show First 20 Lines • Show All 548 Lines • ▼ Show 20 Line(s) | 548 | bool isActive() const { | |||
---|---|---|---|---|---|
549 | return m_active; | 549 | return m_active; | ||
550 | } | 550 | } | ||
551 | void start(std::function<void(KWin::Toplevel*)> callback) { | 551 | void start(std::function<void(KWin::Toplevel*)> callback) { | ||
552 | Q_ASSERT(!m_active); | 552 | Q_ASSERT(!m_active); | ||
553 | m_active = true; | 553 | m_active = true; | ||
554 | m_callback = callback; | 554 | m_callback = callback; | ||
555 | input()->keyboard()->update(); | 555 | input()->keyboard()->update(); | ||
556 | } | 556 | } | ||
557 | void start(std::function<void(const QPoint &)> callback) { | ||||
558 | Q_ASSERT(!m_active); | ||||
559 | m_active = true; | ||||
560 | m_pointSelectionFallback = callback; | ||||
561 | input()->keyboard()->update(); | ||||
562 | } | ||||
557 | private: | 563 | private: | ||
558 | void deactivate() { | 564 | void deactivate() { | ||
559 | m_active = false; | 565 | m_active = false; | ||
560 | m_callback = std::function<void(KWin::Toplevel*)>(); | 566 | m_callback = std::function<void(KWin::Toplevel*)>(); | ||
567 | m_pointSelectionFallback = std::function<void(const QPoint &)>(); | ||||
561 | input()->pointer()->removeWindowSelectionCursor(); | 568 | input()->pointer()->removeWindowSelectionCursor(); | ||
562 | input()->keyboard()->update(); | 569 | input()->keyboard()->update(); | ||
563 | } | 570 | } | ||
564 | void cancel() { | 571 | void cancel() { | ||
572 | if (m_callback) { | ||||
565 | m_callback(nullptr); | 573 | m_callback(nullptr); | ||
574 | } | ||||
575 | if (m_pointSelectionFallback) { | ||||
576 | m_pointSelectionFallback(QPoint(-1, -1)); | ||||
577 | } | ||||
566 | deactivate(); | 578 | deactivate(); | ||
567 | } | 579 | } | ||
568 | void accept() { | 580 | void accept() { | ||
581 | if (m_callback) { | ||||
569 | // TODO: this ignores shaped windows | 582 | // TODO: this ignores shaped windows | ||
570 | m_callback(input()->findToplevel(input()->globalPointer().toPoint())); | 583 | m_callback(input()->findToplevel(input()->globalPointer().toPoint())); | ||
584 | } | ||||
585 | if (m_pointSelectionFallback) { | ||||
586 | m_pointSelectionFallback(input()->globalPointer().toPoint()); | ||||
587 | } | ||||
571 | deactivate(); | 588 | deactivate(); | ||
572 | } | 589 | } | ||
573 | bool m_active = false; | 590 | bool m_active = false; | ||
574 | std::function<void(KWin::Toplevel*)> m_callback; | 591 | std::function<void(KWin::Toplevel*)> m_callback; | ||
592 | std::function<void(const QPoint &)> m_pointSelectionFallback; | ||||
575 | }; | 593 | }; | ||
576 | 594 | | |||
577 | class GlobalShortcutFilter : public InputEventFilter { | 595 | class GlobalShortcutFilter : public InputEventFilter { | ||
578 | public: | 596 | public: | ||
579 | bool pointerEvent(QMouseEvent *event, quint32 nativeButton) override { | 597 | bool pointerEvent(QMouseEvent *event, quint32 nativeButton) override { | ||
580 | Q_UNUSED(nativeButton); | 598 | Q_UNUSED(nativeButton); | ||
581 | if (event->type() == QEvent::MouseButtonPress) { | 599 | if (event->type() == QEvent::MouseButtonPress) { | ||
582 | if (input()->shortcuts()->processPointerPressed(event->modifiers(), event->buttons())) { | 600 | if (input()->shortcuts()->processPointerPressed(event->modifiers(), event->buttons())) { | ||
▲ Show 20 Lines • Show All 1169 Lines • ▼ Show 20 Line(s) | 1769 | { | |||
1752 | if (!m_windowSelector || m_windowSelector->isActive()) { | 1770 | if (!m_windowSelector || m_windowSelector->isActive()) { | ||
1753 | callback(nullptr); | 1771 | callback(nullptr); | ||
1754 | return; | 1772 | return; | ||
1755 | } | 1773 | } | ||
1756 | m_windowSelector->start(callback); | 1774 | m_windowSelector->start(callback); | ||
1757 | m_pointer->setWindowSelectionCursor(cursorName); | 1775 | m_pointer->setWindowSelectionCursor(cursorName); | ||
1758 | } | 1776 | } | ||
1759 | 1777 | | |||
1778 | void InputRedirection::startInteractivePositionSelection(std::function<void(const QPoint &)> callback) | ||||
1779 | { | ||||
1780 | if (!m_windowSelector || m_windowSelector->isActive()) { | ||||
1781 | callback(QPoint(-1, -1)); | ||||
1782 | return; | ||||
1783 | } | ||||
1784 | m_windowSelector->start(callback); | ||||
1785 | m_pointer->setWindowSelectionCursor(QByteArray()); | ||||
1786 | } | ||||
1787 | | ||||
1760 | bool InputRedirection::isSelectingWindow() const | 1788 | bool InputRedirection::isSelectingWindow() const | ||
1761 | { | 1789 | { | ||
1762 | return m_windowSelector ? m_windowSelector->isActive() : false; | 1790 | return m_windowSelector ? m_windowSelector->isActive() : false; | ||
1763 | } | 1791 | } | ||
1764 | 1792 | | |||
1765 | InputDeviceHandler::InputDeviceHandler(InputRedirection *input) | 1793 | InputDeviceHandler::InputDeviceHandler(InputRedirection *input) | ||
1766 | : QObject(input) | 1794 | : QObject(input) | ||
1767 | , m_input(input) | 1795 | , m_input(input) | ||
▲ Show 20 Lines • Show All 108 Lines • Show Last 20 Lines |