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;
