Hello community,

here is the log from the commit of package kcmutils for openSUSE:Factory 
checked in at 2018-01-09 14:39:53
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/kcmutils (Old)
 and      /work/SRC/openSUSE:Factory/.kcmutils.new (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Package is "kcmutils"

Tue Jan  9 14:39:53 2018 rev:47 rq:559422 version:5.41.0

Changes:
--------
--- /work/SRC/openSUSE:Factory/kcmutils/kcmutils.changes        2017-11-16 
14:36:33.556362588 +0100
+++ /work/SRC/openSUSE:Factory/.kcmutils.new/kcmutils.changes   2018-01-09 
14:41:20.773132038 +0100
@@ -1,0 +2,10 @@
+Sun Dec 17 09:43:47 CET 2017 - [email protected]
+
+- Update to 5.41.0
+  * New feature release
+  * For more details please see:
+  * https://www.kde.org/announcements/kde-frameworks-5.41.0.php
+- Changes since 5.40.0:
+  * keyboard navigation in and out QML kcms
+
+-------------------------------------------------------------------

Old:
----
  kcmutils-5.40.0.tar.xz

New:
----
  kcmutils-5.41.0.tar.xz

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Other differences:
------------------
++++++ kcmutils.spec ++++++
--- /var/tmp/diff_new_pack.SXBJwG/_old  2018-01-09 14:41:21.301107276 +0100
+++ /var/tmp/diff_new_pack.SXBJwG/_new  2018-01-09 14:41:21.301107276 +0100
@@ -18,13 +18,13 @@
 
 %bcond_without lang
 %define lname   libKF5KCMUtils5
-%define _tar_path 5.40
+%define _tar_path 5.41
 # Full KF5 version (e.g. 5.33.0)
 %{!?_kf5_version: %global _kf5_version %{version}}
 # Last major and minor KF5 version (e.g. 5.33)
 %{!?_kf5_bugfix_version: %global _kf5_bugfix_version %(echo %{_kf5_version} | 
awk -F. '{print $1"."$2}')}
 Name:           kcmutils
-Version:        5.40.0
+Version:        5.41.0
 Release:        0
 %define kf5_version %{version}
 BuildRequires:  cmake >= 3.0

++++++ kcmutils-5.40.0.tar.xz -> kcmutils-5.41.0.tar.xz ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/kcmutils-5.40.0/CMakeLists.txt 
new/kcmutils-5.41.0/CMakeLists.txt
--- old/kcmutils-5.40.0/CMakeLists.txt  2017-11-05 09:25:01.000000000 +0100
+++ new/kcmutils-5.41.0/CMakeLists.txt  2017-12-02 21:02:20.000000000 +0100
@@ -1,11 +1,11 @@
 cmake_minimum_required(VERSION 3.0)
 
-set(KF5_VERSION "5.40.0") # handled by release scripts
-set(KF5_DEP_VERSION "5.40.0") # handled by release scripts
+set(KF5_VERSION "5.41.0") # handled by release scripts
+set(KF5_DEP_VERSION "5.41.0") # handled by release scripts
 project(KCMUtils VERSION ${KF5_VERSION})
 
 include(FeatureSummary)
-find_package(ECM 5.40.0  NO_MODULE)
+find_package(ECM 5.41.0  NO_MODULE)
 set_package_properties(ECM PROPERTIES TYPE REQUIRED DESCRIPTION "Extra CMake 
Modules." URL 
"https://projects.kde.org/projects/kdesupport/extra-cmake-modules";)
 feature_summary(WHAT REQUIRED_PACKAGES_NOT_FOUND 
FATAL_ON_MISSING_REQUIRED_PACKAGES)
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/kcmutils-5.40.0/po/zh_CN/kcmutils5.po 
new/kcmutils-5.41.0/po/zh_CN/kcmutils5.po
--- old/kcmutils-5.40.0/po/zh_CN/kcmutils5.po   2017-11-05 09:25:01.000000000 
+0100
+++ new/kcmutils-5.41.0/po/zh_CN/kcmutils5.po   2017-12-02 21:02:20.000000000 
+0100
@@ -15,7 +15,7 @@
 "Project-Id-Version: kdeorg\n"
 "Report-Msgid-Bugs-To: http://bugs.kde.org\n";
 "POT-Creation-Date: 2017-10-18 06:28+0200\n"
-"PO-Revision-Date: 2017-10-19 10:41-0400\n"
+"PO-Revision-Date: 2017-11-09 08:34-0500\n"
 "Last-Translator: guoyunhebrave <[email protected]>\n"
 "Language-Team: Chinese Simplified\n"
 "Language: zh_CN\n"
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/kcmutils-5.40.0/src/kcmoduleqml.cpp 
new/kcmutils-5.41.0/src/kcmoduleqml.cpp
--- old/kcmutils-5.40.0/src/kcmoduleqml.cpp     2017-11-05 09:25:01.000000000 
+0100
+++ new/kcmutils-5.41.0/src/kcmoduleqml.cpp     2017-12-02 21:02:20.000000000 
+0100
@@ -46,6 +46,8 @@
     }
 
     QQuickWindow *quickWindow;
+    QQuickWidget *quickWidget;
+    QQuickItem *rootPlaceHolder;
     KQuickAddons::ConfigModule *configModule;
 };
 
@@ -108,34 +110,94 @@
     QVBoxLayout* layout = new QVBoxLayout(this);
     layout->setContentsMargins(0, 0, 0, 0);
 
-    QQuickWidget *widget = new QQuickWidget(d->configModule->engine(), this);
-    widget->setResizeMode(QQuickWidget::SizeRootObjectToView);
-    d->quickWindow = widget->quickWindow();
+    d->quickWidget = new QQuickWidget(d->configModule->engine(), this);
+    d->quickWidget->setResizeMode(QQuickWidget::SizeRootObjectToView);
+    d->quickWidget->setFocusPolicy(Qt::StrongFocus);
+    d->quickWidget->installEventFilter(this);
+    d->quickWindow = d->quickWidget->quickWindow();
     d->quickWindow->setColor(QGuiApplication::palette().window().color());
     connect(qApp, &QGuiApplication::paletteChanged, d->quickWindow, [=]() {
         d->quickWindow->setColor(QGuiApplication::palette().window().color());
     });
 
     QQmlComponent *component = new QQmlComponent(d->configModule->engine(), 
this);
-    component->setData(QByteArrayLiteral("import QtQuick 2.3\nItem{}"), 
QUrl());
-    QObject *root = component->create();
-    widget->setContent(QUrl(), component, root);
+    //this has activeFocusOnTab to notice when the navigation wraps
+    //around, so when we need to go outside and inside
+    component->setData(QByteArrayLiteral("import QtQuick 
2.3\nItem{activeFocusOnTab:true}"), QUrl());
+    d->rootPlaceHolder = qobject_cast<QQuickItem *>(component->create());
+    d->quickWidget->setContent(QUrl(), component, d->rootPlaceHolder);
 
-    d->configModule->mainUi()->setParentItem(widget->rootObject());
+    d->configModule->mainUi()->setParentItem(d->quickWidget->rootObject());
 
     //set anchors
     QQmlExpression expr(d->configModule->engine()->rootContext(), 
d->configModule->mainUi(), QStringLiteral("parent"));
     QQmlProperty prop(d->configModule->mainUi(), 
QStringLiteral("anchors.fill"));
     prop.write(expr.evaluate());
 
-    layout->addWidget(widget);
+    layout->addWidget(d->quickWidget);
     KCModule::showEvent(event);
 }
 
+bool KCModuleQml::eventFilter(QObject* watched, QEvent* event)
+{
+    //FIXME: those are all workarounds around the QQuickWidget brokeness
+    //BUG https://bugreports.qt.io/browse/QTBUG-64561
+    if (watched == d->quickWidget && event->type() == QEvent::KeyPress) {
+        //allow tab navigation inside the qquickwidget
+        QKeyEvent *ke = static_cast<QKeyEvent *>(event);
+
+        QQuickItem *currentItem = d->quickWindow->activeFocusItem();
+        if (!currentItem) {
+            return KCModule::eventFilter(watched, event);
+        }
+        if (currentItem->scopedFocusItem()) {
+            currentItem = currentItem->scopedFocusItem();
+        }
+
+        if (ke->key() == Qt::Key_Tab) {
+            //nextItemInFocusChain will always return something, in the worst 
case will still be currentItem
+            QQuickItem *nextItem = currentItem->nextItemInFocusChain(true);
+            //when it arrives at the place holder item, go out of the qqw and
+            //go to the other widgets around systemsettigns
+            if (nextItem == d->rootPlaceHolder) {
+                QWidget *w = d->quickWidget->nextInFocusChain();
+                while (!(w->focusPolicy() & Qt::TabFocus)) {
+                    w = w->nextInFocusChain();
+                }
+                w->setFocus(Qt::TabFocusReason);
+            } else {
+                nextItem->forceActiveFocus(Qt::TabFocusReason);
+            }
+            return true;
+        } else if (ke->key() == Qt::Key_Backtab
+                   || (ke->key() == Qt::Key_Tab && (ke->modifiers() & 
Qt::ShiftModifier))) {
+            QQuickItem *nextItem = currentItem->nextItemInFocusChain(false);
+
+            if (nextItem == d->rootPlaceHolder) {
+                QWidget *w = d->quickWidget->previousInFocusChain();
+                while (!(w->focusPolicy() & Qt::TabFocus)) {
+                    w = w->previousInFocusChain();
+                }
+                w->setFocus(Qt::BacktabFocusReason);
+            } else {
+                nextItem->forceActiveFocus(Qt::BacktabFocusReason);
+            }
+            return true;
+        }
+    }
+    return KCModule::eventFilter(watched, event);
+}
+
 void KCModuleQml::focusInEvent(QFocusEvent *event)
 {
     Q_UNUSED(event)
-    d->quickWindow->requestActivate();
+
+    if (event->reason() == Qt::TabFocusReason) {
+        
d->rootPlaceHolder->nextItemInFocusChain(true)->forceActiveFocus(Qt::TabFocusReason);
+    } else if (event->reason() == Qt::BacktabFocusReason) {
+        
d->rootPlaceHolder->nextItemInFocusChain(false)->forceActiveFocus(Qt::BacktabFocusReason);
+    }
+    
 }
 
 QSize KCModuleQml::sizeHint() const
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/kcmutils-5.40.0/src/kcmoduleqml_p.h 
new/kcmutils-5.41.0/src/kcmoduleqml_p.h
--- old/kcmutils-5.40.0/src/kcmoduleqml_p.h     2017-11-05 09:25:01.000000000 
+0100
+++ new/kcmutils-5.41.0/src/kcmoduleqml_p.h     2017-12-02 21:02:20.000000000 
+0100
@@ -48,6 +48,7 @@
     virtual void showEvent(QShowEvent *event) Q_DECL_OVERRIDE;
     virtual void focusInEvent(QFocusEvent *event) Q_DECL_OVERRIDE;
     QSize sizeHint() const Q_DECL_OVERRIDE;
+    bool eventFilter(QObject* watched, QEvent* event) Q_DECL_OVERRIDE;
 
 private:
     KCModuleQmlPrivate *const d;


Reply via email to