summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'kde-plasma/kscreenlocker/files/kscreenlocker-5.8.6-focus.patch')
-rw-r--r--kde-plasma/kscreenlocker/files/kscreenlocker-5.8.6-focus.patch145
1 files changed, 0 insertions, 145 deletions
diff --git a/kde-plasma/kscreenlocker/files/kscreenlocker-5.8.6-focus.patch b/kde-plasma/kscreenlocker/files/kscreenlocker-5.8.6-focus.patch
deleted file mode 100644
index a44c36862c59..000000000000
--- a/kde-plasma/kscreenlocker/files/kscreenlocker-5.8.6-focus.patch
+++ /dev/null
@@ -1,145 +0,0 @@
-From f8043de10b5dd94b9b931a92f3aa7167188786c9 Mon Sep 17 00:00:00 2001
-From: Fabian Vogt <fabian@ritter-vogt.de>
-Date: Mon, 27 Feb 2017 16:29:29 +0100
-Subject: Implement manual focus on click
-
-Summary:
-Currently only the first created screenlock window gets focus.
-On clicks, no focus events are sent, which makes it impossible to input
-passwords. This patch now makes it possible to focus to a different
-screenlock window (on a different monitor, for example) using a mouse
-button press.
-This should also fix newly created screenlock windows stealing the focus
-of already displayed ones as only the first window gains automatic focus.
-
-BUG: 348789
-BUG: 374289
-
-Test Plan:
-Locked the screen, now I can use the password input on the secondary screen
-as well.
-
-Reviewers: #plasma, graesslin, broulik
-
-Reviewed By: #plasma, graesslin
-
-Subscribers: hein, plasma-devel
-
-Tags: #plasma
-
-Differential Revision: https://phabricator.kde.org/D4821
----
- greeter/greeterapp.cpp | 1 -
- x11locker.cpp | 26 ++++++++++++++++++++++++--
- x11locker.h | 2 ++
- 3 files changed, 26 insertions(+), 3 deletions(-)
-
-diff --git a/greeter/greeterapp.cpp b/greeter/greeterapp.cpp
-index 47fcb03..bcfcbdf 100644
---- a/greeter/greeterapp.cpp
-+++ b/greeter/greeterapp.cpp
-@@ -372,7 +372,6 @@ void UnlockApp::getFocus()
- // this loop is required to make the qml/graphicsscene properly handle the shared keyboard input
- // ie. "type something into the box of every greeter"
- foreach (KQuickAddons::QuickViewSharedEngine *view, m_views) {
-- view->requestActivate();
- if (!m_testing) {
- view->setKeyboardGrabEnabled(true); // TODO - check whether this still works in master!
- }
-diff --git a/x11locker.cpp b/x11locker.cpp
-index b2d2ea4..6967a67 100644
---- a/x11locker.cpp
-+++ b/x11locker.cpp
-@@ -51,6 +51,7 @@ namespace ScreenLocker
- X11Locker::X11Locker(QObject *parent)
- : AbstractLocker(parent)
- , QAbstractNativeEventFilter()
-+ , m_focusedLockWindow(XCB_WINDOW_NONE)
- {
- initialize();
- }
-@@ -229,8 +230,12 @@ void X11Locker::removeVRoot(Window win)
- XDeleteProperty (QX11Info::display(), win, gXA_VROOT);
- }
-
--static void fakeFocusIn( WId window )
-+void X11Locker::fakeFocusIn( WId window )
- {
-+ if (window == m_focusedLockWindow) {
-+ return;
-+ }
-+
- // We have keyboard grab, so this application will
- // get keyboard events even without having focus.
- // Fake FocusIn to make Qt realize it has the active
-@@ -244,6 +249,8 @@ static void fakeFocusIn( WId window )
- ev.xfocus.detail = NotifyAncestor;
- XSendEvent( QX11Info::display(), window, False, NoEventMask, &ev );
- XFlush(QX11Info::display());
-+
-+ m_focusedLockWindow = window;
- }
-
- template< typename T>
-@@ -308,6 +315,11 @@ bool X11Locker::nativeEventFilter(const QByteArray &eventType, void *message, lo
- (x>=x_return && x<=x_return+(int)width_return)
- &&
- (y>=y_return && y<=y_return+(int)height_return) ) {
-+ // We need to do our own focus handling (see comment in fakeFocusIn).
-+ // For now: Focus on clicks inside the window
-+ if (responseType == XCB_BUTTON_PRESS) {
-+ fakeFocusIn(window);
-+ }
- const int targetX = x - x_return;
- const int targetY = y - y_return;
- if (responseType == XCB_KEY_PRESS || responseType == XCB_KEY_RELEASE) {
-@@ -386,6 +398,10 @@ bool X11Locker::nativeEventFilter(const QByteArray &eventType, void *message, lo
- else
- qDebug() << "Unknown toplevel for MapNotify";
- m_lockWindows.removeAll(xu->event);
-+ if (m_focusedLockWindow == xu->event && !m_lockWindows.empty()) {
-+ // The currently focused window vanished, just focus the first one in the list
-+ fakeFocusIn(m_lockWindows[0]);
-+ }
- ret = true;
- }
- break;
-@@ -508,8 +524,14 @@ void X11Locker::addAllowedWindow(quint32 window)
- // not yet shown and we have a lock window, so we show our own window
- m_background->show();
- }
-+
-+ if (m_lockWindows.empty()) {
-+ // Make sure to focus the first window
-+ m_focusedLockWindow = XCB_WINDOW_NONE;
-+ fakeFocusIn(window);
-+ }
-+
- m_lockWindows.prepend(window);
-- fakeFocusIn(window);
- stayOnTop();
- }
- }
-diff --git a/x11locker.h b/x11locker.h
-index 9a14699..d8e83d6 100644
---- a/x11locker.h
-+++ b/x11locker.h
-@@ -60,6 +60,7 @@ private:
- void setVRoot(Window win, Window vr);
- void removeVRoot(Window win);
- int findWindowInfo(Window w);
-+ void fakeFocusIn(WId window);
- void stayOnTop() override;
- struct WindowInfo
- {
-@@ -69,6 +70,7 @@ private:
- QList<WindowInfo> m_windowInfo;
- QList<WId> m_lockWindows;
- QList<quint32> m_allowedWindows;
-+ WId m_focusedLockWindow;
- };
- }
-
---
-cgit v0.11.2
-