commit 58ec44d54c1b9bbce1a64ca7ed185054f429710d Author: Jonathan Riddell Date: Tue May 23 12:22:15 2017 +0100 Update version number for 5.8.7 GIT_SILENT diff --git a/CMakeLists.txt b/CMakeLists.txt index 0c09ca7..cee4c46 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -1,4 +1,4 @@ -set(PROJECT_VERSION "5.8.6") +set(PROJECT_VERSION "5.8.7") set(PROJECT_VERSION_MAJOR 5) cmake_minimum_required(VERSION 2.8.12 FATAL_ERROR) commit 09aec964d2ab5062075071d3bf18a569ea9230eb Author: l10n daemon script Date: Thu Mar 2 08:06:36 2017 +0100 SVN_SILENT made messages (.desktop file) - always resolve ours In case of conflict in i18n, keep the version of the branch "ours" To resolve a particular conflict, "git checkout --ours path/to/file.desktop" diff --git a/greeter/themes/org.kde.passworddialog/metadata.desktop b/greeter/themes/org.kde.passworddialog/metadata.desktop index b7b1374..0223606 100644 --- a/greeter/themes/org.kde.passworddialog/metadata.desktop +++ b/greeter/themes/org.kde.passworddialog/metadata.desktop @@ -10,6 +10,7 @@ Name[el]=Διάλογος κωδικού πρόσβασης Name[en_GB]=Password dialog Name[es]=Diálogo de contraseña Name[et]=Paroolidialoog +Name[eu]=Pasahitzaren elkarrizketa-koadroa Name[fi]=Salasanaikkuna Name[fr]=Boîtes de dialogue de mot de passe Name[gl]=Diálogo de contrasinal @@ -47,6 +48,7 @@ Comment[el]=Εφαρμογή κλειδώματος οθόνης με διάλο Comment[en_GB]=Screen locker that provides a password dialog and an interface to switch the current user Comment[es]=Bloqueador de pantalla que proporciona un diálogo de contraseña y una interfaz para cambiar el usuario actual Comment[et]=Ekraani lukustaja, mis pakub paroolidialoogi ja liidest aktiivse kasutaja vahetamiseks +Comment[eu]=Pantaila giltzatzailea, pasahitzaren elkarrizketa-koadro bat eta uneko erabiltzailea aldatzeko interfaze bat eskaintzen dituena Comment[fi]=Salasanakyselyn ja käyttäjävaihdon tarjoava näyttölukko Comment[fr]=Outil de verrouillage d'écran fournissant une boîte de dialogue de mot de passe et une interface pour changer d'utilisateur Comment[gl]=Bloqueador da pantalla que fornece un diálogo de contrasinal e unha interface para trocar de usuario. diff --git a/kcm/screenlocker.desktop b/kcm/screenlocker.desktop index ac65b5b..336768c 100644 --- a/kcm/screenlocker.desktop +++ b/kcm/screenlocker.desktop @@ -21,6 +21,7 @@ Name[el]=Κλείδωμα οθόνης Name[en_GB]=Screen Locking Name[es]=Bloqueo de pantalla Name[et]=Ekraani lukustamine +Name[eu]=Pantaila giltzatzea Name[fi]=Näytön lukitseminen Name[fr]=Verrouillage de l'écran Name[gl]=Trancar a pantalla @@ -57,6 +58,7 @@ Comment[el]=Χρονικά όρια κλειδώματος οθόνης Comment[en_GB]=Screen Locking Timeouts Comment[es]=Tiempos de espera del bloqueo de pantalla Comment[et]=Ekraani lukustamise aegumine +Comment[eu]=Pantaila giltzatzeko denbora-muga Comment[fi]=Näytön lukitsemisen viiveet Comment[fr]=Délai de verrouillage de l'écran Comment[gl]=Tempos máximos de trancar a pantalla @@ -91,6 +93,7 @@ X-KDE-Keywords[el]=κλείδωμα,συνέχιση,προφύλαξη οθόν X-KDE-Keywords[en_GB]=lock,resume, screensaver, screenlock X-KDE-Keywords[es]=bloquear, reanudar, salvapantallas, bloqueo de pantalla X-KDE-Keywords[et]=lukustamine,taastamine,ekraanisäästja,ekraani lukustamine +X-KDE-Keywords[eu]=giltzatu,berrekin,pantaila-babesle,pantaila-giltzatu X-KDE-Keywords[fi]=lock,resume, screensaver, screenlock, lukko, lukitseminen, herääminen, näytönsäästäjä, näyttölukko, lukitusnäyttö X-KDE-Keywords[fr]=verrouiller, reprendre,écran de veille, verrouillage de l'écran X-KDE-Keywords[gl]=bloquear,desbloquear,salvapantallas,bloqueo de pantalla diff --git a/kscreenlocker.notifyrc b/kscreenlocker.notifyrc index 1e6b19f..4f88dbe 100644 --- a/kscreenlocker.notifyrc +++ b/kscreenlocker.notifyrc @@ -12,6 +12,7 @@ Comment[el]=Προφύλαξη οθόνης Comment[en_GB]=Screen Saver Comment[es]=Salvapantallas Comment[et]=Ekraanisäästja +Comment[eu]=Pantaila-babesle Comment[fi]=Näytönsäästäjä Comment[fr]=Écran de veille Comment[gl]=Protector de pantalla @@ -51,6 +52,7 @@ Name[el]=Οθόνη κλειδωμένη Name[en_GB]=Screen locked Name[es]=Pantalla bloqueada Name[et]=Ekraan on lukustatud +Name[eu]=Pantaila giltzatuta Name[fi]=Näyttö lukittu Name[fr]=Écran verrouillé Name[gl]=A pantalla está trancada @@ -88,6 +90,7 @@ Comment[el]=Η οθόνη έχει κλειδωθεί Comment[en_GB]=The screen has been locked Comment[es]=Se ha bloqueado la pantalla Comment[et]=Ekraan on lukustatud +Comment[eu]=Pantaila giltzatu egin da Comment[fi]=Näyttö on lukittunut Comment[fr]=L'écran a été verrouillé Comment[gl]=A pantalla trancouse @@ -128,6 +131,7 @@ Name[el]=Οθόνη ξεκλείδωτη Name[en_GB]=Screen unlocked Name[es]=Pantalla desbloqueada Name[et]=Ekraan on lahtilukustatud +Name[eu]=Pantaila giltzapetik askatuta Name[fi]=Näytön lukitus aukeni Name[fr]=Écran déverrouillé Name[gl]=A pantalla desatrancouse @@ -165,6 +169,7 @@ Comment[el]=Η οθόνη έχει ξεκλειδωθεί Comment[en_GB]=The screen has been unlocked Comment[es]=Se ha desbloqueado la pantalla Comment[et]=Ekraan on lahtilukustatud +Comment[eu]=Pantaila giltzapetik askatu da Comment[fi]=Näytön lukitus on avautunut Comment[fr]=L'écran a été déverrouillé Comment[gl]=A pantalla desatrancouse commit f8043de10b5dd94b9b931a92f3aa7167188786c9 Author: Fabian Vogt Date: Mon Feb 27 16:29:29 2017 +0100 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 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 m_windowInfo; QList m_lockWindows; QList m_allowedWindows; + WId m_focusedLockWindow; }; }