← Back to team overview

ubuntu-sdk-team team mailing list archive

[Merge] lp:~bzoltan/ubuntu-ui-toolkit/Landing-2016-12 into lp:ubuntu-ui-toolkit

 

Zoltan Balogh has proposed merging lp:~bzoltan/ubuntu-ui-toolkit/Landing-2016-12 into lp:ubuntu-ui-toolkit.

Commit message:
2016 XMass landing

Requested reviews:
  Zoltan Balogh (bzoltan)

For more details, see:
https://code.launchpad.net/~bzoltan/ubuntu-ui-toolkit/Landing-2016-12/+merge/313593

2016 XMass landing
-- 
Your team Ubuntu SDK team is subscribed to branch lp:ubuntu-ui-toolkit.
=== modified file '.bazaar/plugins/makecheck_ubuntu_ui_toolkit.py'
--- .bazaar/plugins/makecheck_ubuntu_ui_toolkit.py	2014-07-14 17:34:44 +0000
+++ .bazaar/plugins/makecheck_ubuntu_ui_toolkit.py	2016-12-20 08:52:37 +0000
@@ -35,6 +35,7 @@
     if (subprocess.call("make check", shell=True) != 0):
         raise errors.BzrError("Tests failed, fix them before commit!")
 
+
 branch.Branch.hooks.install_named_hook('pre_commit',
                                        execute_makecheck,
                                        'make check pre-commit')

=== modified file '.bazaar/plugins/packaging_sorting.py'
--- .bazaar/plugins/packaging_sorting.py	2016-05-16 06:37:48 +0000
+++ .bazaar/plugins/packaging_sorting.py	2016-12-20 08:52:37 +0000
@@ -52,6 +52,7 @@
 
     subprocess.call(["rm", "-rf", "debian-packaging-wraptest-temporary"])
 
+
 branch.Branch.hooks.install_named_hook("pre_commit",
                                        pre_commit_hook,
                                        "Check packaging sorting")

=== modified file 'debian/changelog'
--- debian/changelog	2016-10-13 17:16:31 +0000
+++ debian/changelog	2016-12-20 08:52:37 +0000
@@ -1,3 +1,25 @@
+ubuntu-ui-toolkit (1.3.2151+16.10) UNRELEASED; urgency=medium
+
+  [ Zsombor Egri ]
+  * Enable mouse, touchpad and keyboard detection in UITK. Fixes LP: #1536669
+  * Colors revisited.
+  * Qt5.7 related fix for theming - by Glen Whitney.
+
+  [ Timo Jyrinki ]
+  * parent = Q_NULLPTR instead of 0. Fixes LP: #1642617
+  * More blank lines. Fixes LP: #1642622
+  * Drop tst_pickerpanel.11.qml (deprecated).
+
+  [ Christian Dywan ]
+  * Include OSK input in TextArea.displayText. Fixes LP: #1595910
+
+  * Drop questionable color tests from tst_textarea.11.qml. Fixes LP: #1624342
+
+  [ Lukáš Tinkl ]
+  * Fix slider progress rect with RTL languages.
+
+ -- Zoltán Balogh <zoltan@xxxxxxxxx>  Tue, 20 Dec 2016 10:35:25 +0200
+
 ubuntu-ui-toolkit (1.3.2141+16.10.20161013.5) yakkety; urgency=medium
 
   [ Zsombor Egri ]

=== modified file 'debian/control'
--- debian/control	2016-08-29 19:49:33 +0000
+++ debian/control	2016-12-20 08:52:37 +0000
@@ -10,6 +10,7 @@
                gdb,
                language-pack-en-base,
                libdbus-1-dev,
+               libevdev-dev,
                libfontconfig1-dev,
                libfreetype6-dev,
                libgl1-mesa-dri,
@@ -21,6 +22,7 @@
                libnih-dbus-dev,
                libqt5sql5-sqlite,
                libqt5svg5-dev,
+               libqt5systeminfo5,
                libudev-dev,
                libx11-dev[!armhf],
                libxcb1-dev[!armhf],
@@ -53,6 +55,7 @@
                qtpim5-dev,
                qtscript5-doc-html,
                qtsvg5-doc-html,
+               qtsystems5-dev,
                qttools5-dev-tools,
                qtwebkit5-doc-html,
                suru-icon-theme (>= 14.04+16.10.20160720),

=== modified file 'debian/control.gles'
--- debian/control.gles	2016-08-18 05:40:55 +0000
+++ debian/control.gles	2016-12-20 08:52:37 +0000
@@ -10,6 +10,7 @@
                gdb,
                language-pack-en-base,
                libdbus-1-dev,
+               libevdev-dev,
                libfontconfig1-dev,
                libfreetype6-dev,
                libgles2-mesa-dev,
@@ -25,6 +26,7 @@
                libqt5quickwidgets5-gles,
                libqt5sql5-sqlite,
                libqt5svg5-dev,
+               libqt5systeminfo5,
                libudev-dev,
                libx11-dev[!armhf],
                libxcb1-dev[!armhf],
@@ -58,6 +60,7 @@
                qtpim5-dev,
                qtscript5-doc-html,
                qtsvg5-doc-html,
+               qtsystems5-dev,
                qtwebkit5-doc-html,
                suru-icon-theme,
                unity-action-doc,

=== modified file 'src/UbuntuToolkit/UbuntuToolkit.pro'
--- src/UbuntuToolkit/UbuntuToolkit.pro	2016-09-12 14:56:56 +0000
+++ src/UbuntuToolkit/UbuntuToolkit.pro	2016-12-20 08:52:37 +0000
@@ -2,6 +2,9 @@
 QT = core-private gui-private qml-private quick-private testlib dbus svg organizer \
      UbuntuGestures-private UbuntuMetrics
 
+#Qt SystemInfo
+QT *= systeminfo systeminfo-private
+
 unix {
     CONFIG += link_pkgconfig
     PKGCONFIG += gio-2.0 dbus-1 libnih libnih-dbus

=== modified file 'src/UbuntuToolkit/quickutils.cpp'
--- src/UbuntuToolkit/quickutils.cpp	2016-09-21 08:47:38 +0000
+++ src/UbuntuToolkit/quickutils.cpp	2016-12-20 08:52:37 +0000
@@ -27,6 +27,7 @@
 #include <QtQuick/QQuickItem>
 #include <QtQuick/private/qquicktextinput_p.h>
 #include <QtQuick/private/qquicktextedit_p.h>
+#include <QtSystemInfo/QInputInfoManager>
 
 UT_NAMESPACE_BEGIN
 
@@ -37,10 +38,100 @@
     m_rootWindow(0),
     m_rootView(0),
     m_mouseAttached(false),
-    m_keyboardAttached(false)
+    m_keyboardAttached(false),
+    m_explicitMouseAttached(false),
+    m_explicitKeyboardAttached(false)
 {
     QGuiApplication::instance()->installEventFilter(this);
     m_omitIM << QStringLiteral("ibus") << QStringLiteral("none") << QStringLiteral("compose");
+
+    m_inputInfo = new QInputInfoManager(this);
+    connect(m_inputInfo, &QInputInfoManager::ready,
+            this, &QuickUtils::onInputInfoReady);
+    // the default values of mouse and keyboard attachment depend on the input info
+    connect(m_inputInfo, &QInputInfoManager::deviceAdded,
+            this, &QuickUtils::onDeviceAdded);
+    connect(m_inputInfo, &QInputInfoManager::deviceRemoved,
+            this, &QuickUtils::onDeviceRemoved);
+}
+
+void QuickUtils::onInputInfoReady()
+{
+    QMapIterator<QString, QInputDevice*> i(m_inputInfo->deviceMap());
+    while (i.hasNext()) {
+        i.next();
+        registerDevice(i.value(), i.key());
+    }
+
+    m_inputInfo->setFilter(QInputDevice::Mouse | QInputDevice::TouchPad | QInputDevice::Keyboard);
+}
+
+void QuickUtils::onDeviceAdded(QInputDevice *device)
+{
+    QMapIterator<QString, QInputDevice*> i(m_inputInfo->deviceMap());
+    while (i.hasNext()) {
+        i.next();
+        if (i.value() == device) {
+            registerDevice(device, i.key());
+            break;
+        }
+    }
+}
+
+void QuickUtils::onDeviceRemoved(const QString deviceId)
+{
+    // the device info is removed by now, so we must look at the internal cache
+    if (m_keyboards.remove(deviceId)) {
+        if (!m_explicitKeyboardAttached && !m_keyboards.size()) {
+            m_keyboardAttached = false;
+            Q_EMIT keyboardAttachedChanged();
+        }
+    }
+    if (m_mice.remove(deviceId)) {
+        if (!m_explicitMouseAttached && !m_mice.size()) {
+            m_mouseAttached = false;
+            Q_EMIT mouseAttachedChanged();
+        }
+    }
+}
+
+void QuickUtils::registerDevice(QInputDevice *device, const QString &deviceId)
+{
+    if (device->types().testFlag(QInputDevice::Keyboard)) {
+        m_keyboards.insert(deviceId);
+        if (!m_explicitKeyboardAttached && !m_keyboardAttached) {
+            m_keyboardAttached = true;
+            Q_EMIT keyboardAttachedChanged();
+        }
+    }
+    if (device->types().testFlag(QInputDevice::Mouse)
+            || device->types().testFlag(QInputDevice::TouchPad)) {
+        m_mice.insert(deviceId);
+        if (!m_explicitMouseAttached && !m_mouseAttached) {
+            m_mouseAttached = true;
+            Q_EMIT mouseAttachedChanged();
+        }
+    }
+}
+
+void QuickUtils::setMouseAttached(bool set)
+{
+    m_explicitMouseAttached = true;
+    if (set == m_mouseAttached) {
+        return;
+    }
+    m_mouseAttached = set;
+    Q_EMIT mouseAttachedChanged();
+}
+
+void QuickUtils::setKeyboardAttached(bool set)
+{
+    m_explicitKeyboardAttached = true;
+    if (set == m_keyboardAttached) {
+        return;
+    }
+    m_keyboardAttached = true;
+    Q_EMIT keyboardAttachedChanged();
 }
 
 /*!

=== modified file 'src/UbuntuToolkit/quickutils_p.h'
--- src/UbuntuToolkit/quickutils_p.h	2016-09-19 20:40:13 +0000
+++ src/UbuntuToolkit/quickutils_p.h	2016-12-20 08:52:37 +0000
@@ -26,6 +26,8 @@
 class QQuickItem;
 class QQmlEngine;
 class QQmlComponent;
+class QInputInfoManager;
+class QInputDevice;
 
 UT_NAMESPACE_BEGIN
 
@@ -35,8 +37,8 @@
     Q_PROPERTY(QQuickItem *rootObject READ rootObject NOTIFY rootObjectChanged)
     Q_PROPERTY(QString inputMethodProvider READ inputMethodProvider)
     Q_PROPERTY(bool touchScreenAvailable READ touchScreenAvailable NOTIFY touchScreenAvailableChanged)
-    Q_PROPERTY(bool mouseAttached MEMBER m_mouseAttached NOTIFY mouseAttachedChanged)
-    Q_PROPERTY(bool keyboardAttached MEMBER m_keyboardAttached NOTIFY keyboardAttachedChanged)
+    Q_PROPERTY(bool mouseAttached MEMBER m_mouseAttached WRITE setMouseAttached NOTIFY mouseAttachedChanged)
+    Q_PROPERTY(bool keyboardAttached MEMBER m_keyboardAttached WRITE setKeyboardAttached NOTIFY keyboardAttachedChanged)
 public:
     static QuickUtils *instance(QObject *parent = Q_NULLPTR)
     {
@@ -87,13 +89,25 @@
     explicit QuickUtils(QObject *parent = 0);
     QPointer<QQuickWindow> m_rootWindow;
     QPointer<QQuickView> m_rootView;
+    QInputInfoManager *m_inputInfo;
     QStringList m_omitIM;
-    bool m_mouseAttached;
-    bool m_keyboardAttached;
+    QSet<QString> m_mice;
+    QSet<QString> m_keyboards;
+    bool m_mouseAttached:1;
+    bool m_keyboardAttached:1;
+    bool m_explicitMouseAttached:1;
+    bool m_explicitKeyboardAttached:1;
 
     static QuickUtils *m_instance;
 
     void lookupQuickView();
+    void registerDevice(QInputDevice *device, const QString &deviceId);
+    void setMouseAttached(bool set);
+    void setKeyboardAttached(bool set);
+private Q_SLOTS:
+    void onInputInfoReady();
+    void onDeviceAdded(QInputDevice *device);
+    void onDeviceRemoved(const QString deviceId);
 };
 
 #define UC_QML_DEPRECATION_WARNING(msg) \

=== modified file 'src/UbuntuToolkit/ubuntutoolkitmodule.h'
--- src/UbuntuToolkit/ubuntutoolkitmodule.h	2016-09-09 17:49:07 +0000
+++ src/UbuntuToolkit/ubuntutoolkitmodule.h	2016-12-20 08:52:37 +0000
@@ -61,7 +61,7 @@
     // use this API only in tests!
     static void initializeContextProperties(QQmlEngine*);
 private:
-    explicit UbuntuToolkitModule(QObject *parent = 0);
+    explicit UbuntuToolkitModule(QObject *parent = Q_NULLPTR);
     static UbuntuToolkitModule* create(QQmlEngine *engine, const QUrl &baseUrl);
     void registerWindowContextProperty();
     Q_SLOT void setWindowContextProperty(QWindow* focusWindow);

=== modified file 'src/UbuntuToolkit/ucthemingextension.cpp'
--- src/UbuntuToolkit/ucthemingextension.cpp	2016-09-12 14:07:38 +0000
+++ src/UbuntuToolkit/ucthemingextension.cpp	2016-12-20 08:52:37 +0000
@@ -95,7 +95,25 @@
 
 UCItemAttached::~UCItemAttached()
 {
-    QQuickItemPrivate::get(m_item)->removeItemChangeListener(this, QQuickItemPrivate::Parent);
+    /*
+     * Apparent problem: the UCItemAttached for a given item may be
+     * destructed along with the user data for that item, which
+     * occurs after the QQuickItemPrivate destructor has run, in the
+     * destructor for the base class QObjectPrivate of
+     * QQuickItemPrivate. At that point, the destructors of the
+     * members of QQuickItemPrivate have already been called, so
+     * accessing those members via a member function is invalid.
+     * In particular, the changeListeners list of the
+     * QQuickItemPrivate has already been destructed, so it does
+     * not have much of a chance of removing a listener. We
+     * must detect this and avoid the call to it.  Fortunately
+     * the base class QObjectPrivate has a flag wasDeleted that
+     * should still be valid at this point.
+     */
+    QQuickItemPrivate* itemPriv = QQuickItemPrivate::get(m_item);
+    if (!(itemPriv->wasDeleted)) {
+        itemPriv->removeItemChangeListener(this, QQuickItemPrivate::Parent);
+    }
 }
 
 bool UCThemingExtension::isThemed(QQuickItem *item)

=== modified file 'src/imports/Components/1.3/TextArea.qml'
--- src/imports/Components/1.3/TextArea.qml	2016-09-19 07:24:45 +0000
+++ src/imports/Components/1.3/TextArea.qml	2016-12-20 08:52:37 +0000
@@ -767,7 +767,12 @@
     QtObject {
         id: internal
         // public property locals enabling aliasing
-        property string displayText: editor.getText(0, editor.length)
+        property string displayText: {
+            var plainText = editor.getText(0, editor.length);
+            if (editor.hasOwnProperty('preeditText'))
+                plainText += editor.preeditText;
+            return plainText;
+        }
         property real frameSpacing: control.__styleInstance.frameSpacing
         property real minimumSize: units.gu(4)
         property real scrollbarSpacing: rightScrollbar.__interactive ? units.gu(2) : 0

=== modified file 'src/imports/Components/Themes/Ambiance/1.2/SliderStyle.qml'
--- src/imports/Components/Themes/Ambiance/1.2/SliderStyle.qml	2015-04-24 14:43:08 +0000
+++ src/imports/Components/Themes/Ambiance/1.2/SliderStyle.qml	2016-12-20 08:52:37 +0000
@@ -48,7 +48,7 @@
         overlayColor: sliderStyle.foregroundColor
         overlayRect: Qt.application.layoutDirection == Qt.LeftToRight ?
             Qt.rect(0.0, 0.0, thumb.x / thumb.barMinusThumbWidth, 1.0) :
-            Qt.rect(1.0 - (thumb.x / thumb.barMinusThumbWidth), 0.0, 1.0, 1.0)
+            Qt.rect(thumb.x / thumb.barMinusThumbWidth, 0.0, 1 - (thumb.x / thumb.barMinusThumbWidth), 1.0)
     }
 
     UbuntuShape {

=== modified file 'src/imports/Components/Themes/Ambiance/1.3/AmbianceNormal.qml'
--- src/imports/Components/Themes/Ambiance/1.3/AmbianceNormal.qml	2016-05-17 13:00:51 +0000
+++ src/imports/Components/Themes/Ambiance/1.3/AmbianceNormal.qml	2016-12-20 08:52:37 +0000
@@ -21,10 +21,10 @@
 PaletteValues {
     background: "#FFFFFF"
     backgroundText: UbuntuColors.jet
-    backgroundSecondaryText: UbuntuColors.slate
-    backgroundTertiaryText: UbuntuColors.ash
+    backgroundSecondaryText: UbuntuColors.inkstone
+    backgroundTertiaryText: UbuntuColors.graphite
     base: UbuntuColors.silk
-    baseText: UbuntuColors.graphite
+    baseText: UbuntuColors.inkstone
     foreground: UbuntuColors.porcelain
     foregroundText: UbuntuColors.jet
     raised: "#FFFFFF"
@@ -35,7 +35,7 @@
     overlaySecondaryText: UbuntuColors.silk
     field: "#FFFFFF"
     fieldText: UbuntuColors.jet
-    focus: UbuntuColors.orange
+    focus: UbuntuColors.blue
     focusText: "#FFFFFF"
     selection: Qt.rgba(UbuntuColors.blue.r, UbuntuColors.blue.g, UbuntuColors.blue.b, 0.2)
     selectionText: UbuntuColors.jet

=== modified file 'src/imports/Components/Themes/Ambiance/1.3/AmbianceSelected.qml'
--- src/imports/Components/Themes/Ambiance/1.3/AmbianceSelected.qml	2016-04-29 12:22:02 +0000
+++ src/imports/Components/Themes/Ambiance/1.3/AmbianceSelected.qml	2016-12-20 08:52:37 +0000
@@ -20,7 +20,7 @@
 AmbianceNormal {
     background: UbuntuColors.porcelain
     base: UbuntuColors.ash
-    baseText: UbuntuColors.inkstone
+    baseText: UbuntuColors.jet
     foreground: UbuntuColors.ash
     overlay: UbuntuColors.porcelain
 }

=== modified file 'src/imports/Components/Themes/Ambiance/1.3/Palette.qml'
--- src/imports/Components/Themes/Ambiance/1.3/Palette.qml	2016-05-17 13:00:51 +0000
+++ src/imports/Components/Themes/Ambiance/1.3/Palette.qml	2016-12-20 08:52:37 +0000
@@ -25,19 +25,19 @@
         Component.onCompleted: {
             // specific disabled colors
             var diff = {
-                field: UbuntuColors.porcelain,
                 selection: Qt.rgba(UbuntuColors.blue.r, UbuntuColors.blue.g, UbuntuColors.blue.b, 0.1),
                 positiveText: "#FFFFFF",
                 negativeText: "#FFFFFF",
                 activityText: "#FFFFFF",
-                focusText: "#FFFFFF"
+                focusText: "#FFFFFF",
+                position: "#00000000"
             };
             for (var p in normal) {
                 // skip objectName and all change signals
                 if (p === "objectName" || p.indexOf("Changed") > 0) continue;
                 disabled[p] = diff[p] || (
-                    // if not specific, colors are 30% opaque normal
-                    Qt.rgba(normal[p].r, normal[p].g, normal[p].b, normal[p].a * 0.5)
+                    // if not specific, colors are 40% opaque normal
+                    Qt.rgba(normal[p].r, normal[p].g, normal[p].b, normal[p].a * 0.4)
                 );
             }
         }
@@ -51,21 +51,22 @@
         Component.onCompleted: {
             // specific selected-disabled colors
             var diff = {
-                background: UbuntuColors.porcelain,
-                base: UbuntuColors.porcelain,
                 foreground: UbuntuColors.porcelain,
                 selection: Qt.rgba(UbuntuColors.blue.r, UbuntuColors.blue.g, UbuntuColors.blue.b, 0.1),
                 positiveText: "#FFFFFF",
                 negativeText: "#FFFFFF",
                 activityText: "#FFFFFF",
-                focusText: "#FFFFFF"
+                focus: UbuntuColors.blue,
+                focusText: "#FFFFFF",
+                field: "#FFFFFF",
+                position: "#00000000"
             };
             for (var p in selected) {
                 // skip objectName and all change signals
                 if (p === "objectName" || p.indexOf("Changed") > 0) continue;
                 selectedDisabled[p] = diff[p] || (
-                    // if not specific, colors are 30% opaque normal
-                    Qt.rgba(selected[p].r, selected[p].g, selected[p].b, normal[p].a * 0.5)
+                    // if not specific, colors are 40% opaque normal
+                    Qt.rgba(selected[p].r, selected[p].g, selected[p].b, normal[p].a * 0.4)
                 );
             }
         }
@@ -74,7 +75,7 @@
     highlighted: AmbianceNormal {
         background: UbuntuColors.silk
         base: UbuntuColors.ash
-        baseText: UbuntuColors.inkstone
+        baseText: UbuntuColors.jet
         foreground: UbuntuColors.silk
         raised: UbuntuColors.silk
         raisedText: UbuntuColors.inkstone

=== modified file 'src/imports/Components/Themes/Ambiance/1.3/SliderStyle.qml'
--- src/imports/Components/Themes/Ambiance/1.3/SliderStyle.qml	2016-02-10 17:46:21 +0000
+++ src/imports/Components/Themes/Ambiance/1.3/SliderStyle.qml	2016-12-20 08:52:37 +0000
@@ -49,7 +49,7 @@
         overlayColor: sliderStyle.foregroundColor
         overlayRect: Qt.application.layoutDirection == Qt.LeftToRight ?
             Qt.rect(0.0, 0.0, thumb.x / thumb.barMinusThumbWidth, 1.0) :
-            Qt.rect(1.0 - (thumb.x / thumb.barMinusThumbWidth), 0.0, 1.0, 1.0)
+            Qt.rect(thumb.x / thumb.barMinusThumbWidth, 0.0, 1 - (thumb.x / thumb.barMinusThumbWidth), 1.0)
     }
 
     UbuntuShape {

=== modified file 'src/imports/Components/Themes/SuruDark/1.3/Palette.qml'
--- src/imports/Components/Themes/SuruDark/1.3/Palette.qml	2016-05-17 13:00:51 +0000
+++ src/imports/Components/Themes/SuruDark/1.3/Palette.qml	2016-12-20 08:52:37 +0000
@@ -25,19 +25,19 @@
         Component.onCompleted: {
             // specific disabled colors
             var diff = {
-                foreground: UbuntuColors.inkstone,
-                field: UbuntuColors.inkstone,
+                raised: "#FFFFFF",
                 positiveText: UbuntuColors.porcelain,
                 negativeText: UbuntuColors.porcelain,
                 activityText: UbuntuColors.porcelain,
-                focusText: UbuntuColors.porcelain
+                focusText: "#FFFFFF",
+                selectionText: "#FFFFFF"
             };
             for (var p in normal) {
                 // skip objectName and all change signals
                 if (p == "objectName"|| p.indexOf("Changed") > 0) continue;
                 disabled[p] = diff[p] || (
-                    // if not specific, colors are 30% opaque normal
-                    Qt.rgba(normal[p].r, normal[p].g, normal[p].b, normal[p].a * 0.5)
+                    // if not specific, colors are 40% opaque normal
+                    Qt.rgba(normal[p].r, normal[p].g, normal[p].b, normal[p].a * 0.4)
                 );
             }
         }
@@ -51,12 +51,17 @@
         Component.onCompleted: {
             var diff = {
                 background: UbuntuColors.inkstone,
-                base: UbuntuColors.inkstone,
-                foreground: UbuntuColors.inkstone,
+                backgroundText: "#FFFFFF",
+                raised: "#FFFFFF",
+                foregroundText: "#FFFFFF",
+                overlayText: "#FFFFFF",
+                fieldText: "#FFFFFF",
+                selectionText: "#FFFFFF",
                 positiveText: UbuntuColors.porcelain,
                 negativeText: UbuntuColors.porcelain,
-                activityText: UbuntuColors.porcelain,
-                focusText: UbuntuColors.porcelain
+                activityText: UbuntuColors.porcelain,                
+                focusText: UbuntuColors.porcelain,
+                position: "#00000000"
             };
             for (var p in selected) {
                 // skip objectName and all change signals

=== modified file 'src/imports/Components/Themes/SuruDark/1.3/SuruDarkNormal.qml'
--- src/imports/Components/Themes/SuruDark/1.3/SuruDarkNormal.qml	2016-05-17 13:00:51 +0000
+++ src/imports/Components/Themes/SuruDark/1.3/SuruDarkNormal.qml	2016-12-20 08:52:37 +0000
@@ -24,7 +24,7 @@
     backgroundSecondaryText: UbuntuColors.silk
     backgroundTertiaryText: UbuntuColors.ash
     base: UbuntuColors.graphite
-    baseText: UbuntuColors.silk
+    baseText: UbuntuColors.porcelain
     foreground: UbuntuColors.inkstone
     foregroundText: "#FFFFFF"
     raised: "#FFFFFF"
@@ -35,7 +35,7 @@
     overlaySecondaryText: UbuntuColors.slate
     field: UbuntuColors.jet
     fieldText: "#FFFFFF"
-    focus: UbuntuColors.orange
+    focus: UbuntuColors.blue
     focusText: "#FFFFFF"
     selection: Qt.rgba(UbuntuColors.blue.r, UbuntuColors.blue.g, UbuntuColors.blue.b, 0.4)
     selectionText: "#FFFFFF"

=== modified file 'src/imports/Components/Themes/SuruDark/1.3/SuruDarkSelected.qml'
--- src/imports/Components/Themes/SuruDark/1.3/SuruDarkSelected.qml	2016-04-29 12:22:02 +0000
+++ src/imports/Components/Themes/SuruDark/1.3/SuruDarkSelected.qml	2016-12-20 08:52:37 +0000
@@ -20,8 +20,8 @@
 
 SuruDarkNormal {
     background: UbuntuColors.inkstone
-    base: UbuntuColors.inkstone
-    baseText: UbuntuColors.ash
+    base: UbuntuColors.slate
+    baseText: UbuntuColors.silk
     foreground: UbuntuColors.slate
     overlay: UbuntuColors.slate
 }

=== modified file 'tests/unit/test-include-x11.pri'
--- tests/unit/test-include-x11.pri	2016-07-07 15:33:34 +0000
+++ tests/unit/test-include-x11.pri	2016-12-20 08:52:37 +0000
@@ -3,5 +3,5 @@
 include( add_makecheck_x11.pri )
 
 TEMPLATE = app
-QT += testlib qml quick UbuntuToolkit UbuntuToolkit-private
+QT += testlib qml quick systeminfo UbuntuToolkit UbuntuToolkit-private
 CONFIG += no_keywords c++11

=== modified file 'tests/unit/test-include.pri'
--- tests/unit/test-include.pri	2016-09-09 17:49:07 +0000
+++ tests/unit/test-include.pri	2016-12-20 08:52:37 +0000
@@ -2,5 +2,5 @@
 include( add_makecheck.pri )
 
 TEMPLATE = app
-QT += testlib qml quick UbuntuToolkit-private
+QT += testlib qml quick systeminfo UbuntuToolkit-private
 CONFIG += no_keywords c++11

=== removed file 'tests/unit/visual/tst_pickerpanel.11.qml'
--- tests/unit/visual/tst_pickerpanel.11.qml	2016-06-15 13:46:51 +0000
+++ tests/unit/visual/tst_pickerpanel.11.qml	1970-01-01 00:00:00 +0000
@@ -1,249 +0,0 @@
-/*
- * Copyright 2013 Canonical Ltd.
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU Lesser General Public License as published by
- * the Free Software Foundation; version 3.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public License
- * along with this program.  If not, see <http://www.gnu.org/licenses/>.
- */
-
-import QtQuick 2.0
-import QtTest 1.0
-import Ubuntu.Test 1.0
-import Ubuntu.Components 1.1
-import Ubuntu.Components.Pickers 1.0
-
-Item {
-    id: testSuite
-    width: units.gu(40)
-    height: units.gu(71)
-
-    Flow {
-        anchors {
-            fill: parent
-            // give a margin so we can dismiss panels
-            topMargin: units.gu(4)
-        }
-
-        Button {
-            id: defaultMode
-            text: "defaultMode"
-            property date buttonDate: new Date()
-            property Item panel
-            onClicked: panel = PickerPanel.openDatePicker(defaultMode, "buttonDate")
-        }
-        Button {
-            id: modeSet
-            text: "modeSet"
-            property string mode
-            property date buttonDate: new Date()
-            property Item panel
-            onClicked: panel = PickerPanel.openDatePicker(modeSet, "buttonDate", mode)
-        }
-    }
-
-    SignalSpy {
-        id: closeSpy
-        signalName: "closed"
-    }
-
-    UbuntuTestCase {
-        name: "PickerPanelAPI"
-        when: windowShown
-
-        function initTestCase() {
-            waitForRendering(testSuite);
-        }
-
-        function test_0_clickOndefaultMode() {
-            mouseClick(defaultMode, units.gu(1), units.gu(1));
-            verify(defaultMode.panel !== null, "the picker is not opened");
-            verify(defaultMode.panel.picker !== null, "the DatePicker is not defined");
-            compare(defaultMode.panel.pickerMode, "Years|Months|Days", "the mode from the picker is not the default");
-            compare(defaultMode.panel.date, defaultMode.buttonDate, "the date from the picker differs from the button's");
-            compare(defaultMode.panel.caller, defaultMode, "wrong caller");
-            compare(defaultMode.panel.callerProperty, "buttonDate", "wrong callerProperty");
-            verify(defaultMode.panel.hasOwnProperty("closed"), "the object has no closed signal");
-
-            // dismiss
-            closeSpy.clear();
-            closeSpy.target = defaultMode.panel;
-            mouseClick(testSuite, units.gu(1), units.gu(1));
-            closeSpy.wait();
-        }
-
-        function test_1_modeSet_YM() {
-            modeSet.mode = "Years|Months" ;
-            mouseClick(modeSet, units.gu(1), units.gu(1));
-            verify(modeSet.panel !== null, "the picker is opened");
-            compare(modeSet.panel.date, modeSet.buttonDate, "the date from the picker differs from the button's");
-            compare(modeSet.panel.pickerMode, modeSet.mode, "the mode from the picker differs from the button's");
-            // check the number of pickers
-            var picker = findChild(modeSet.panel.picker, "PickerRow_Positioner");
-            compare(picker.children.length, 3, "there is not enough pickers in the panel");
-
-            // dismiss
-            closeSpy.clear();
-            closeSpy.target = modeSet.panel;
-            mouseClick(testSuite, units.gu(1), units.gu(1));
-            closeSpy.wait();
-        }
-
-        function test_1_modeSet_YD() {
-            ignoreWarning("Invalid DatePicker mode: Years|Days")
-            modeSet.mode = "Years|Days" ;
-            mouseClick(modeSet, units.gu(1), units.gu(1));
-            verify(modeSet.panel !== null, "the picker is opened");
-            compare(modeSet.panel.date, modeSet.buttonDate, "the date from the picker differs from the button's");
-            compare(modeSet.panel.pickerMode, modeSet.mode, "the mode from the picker differs from the button's");
-            // check the number of pickers
-            var picker = findChild(modeSet.panel.picker, "PickerRow_Positioner");
-            expectFailContinue("", "this mode is invalid");
-            compare(picker.children.length, 2, "there is not enough pickers in the panel");
-
-            // dismiss
-            closeSpy.clear();
-            closeSpy.target = modeSet.panel;
-            mouseClick(testSuite, units.gu(1), units.gu(1));
-            closeSpy.wait();
-        }
-
-        function test_1_modeSet_HMS() {
-            modeSet.mode = "Hours|Minutes|Seconds" ;
-            mouseClick(modeSet, units.gu(1), units.gu(1));
-            verify(modeSet.panel !== null, "the picker is opened");
-            compare(modeSet.panel.date, modeSet.buttonDate, "the date from the picker differs from the button's");
-            compare(modeSet.panel.pickerMode, modeSet.mode, "the mode from the picker differs from the button's");
-            // check the number of pickers
-            var picker = findChild(modeSet.panel.picker, "PickerRow_Positioner");
-            compare(picker.children.length, 4, "there is not enough pickers in the panel");
-
-            // dismiss
-            closeSpy.clear();
-            closeSpy.target = modeSet.panel;
-            mouseClick(testSuite, units.gu(1), units.gu(1));
-            closeSpy.wait();
-        }
-
-        function test_1_modeSet_HS() {
-            ignoreWarning("Invalid DatePicker mode: Hours|Seconds")
-            modeSet.mode = "Hours|Seconds" ;
-            mouseClick(modeSet, units.gu(1), units.gu(1));
-            verify(modeSet.panel !== null, "the picker is opened");
-            compare(modeSet.panel.date, modeSet.buttonDate, "the date from the picker differs from the button's");
-            compare(modeSet.panel.pickerMode, modeSet.mode, "the mode from the picker differs from the button's");
-            // check the number of pickers
-            var picker = findChild(modeSet.panel.picker, "PickerRow_Positioner");
-            expectFailContinue("", "this mode is invalid");
-            compare(picker.children.length, 2, "there is not enough pickers in the panel");
-
-            // dismiss
-            closeSpy.clear();
-            closeSpy.target = modeSet.panel;
-            mouseClick(testSuite, units.gu(1), units.gu(1));
-            closeSpy.wait();
-        }
-
-        // forced panel tests
-        // these should be executed as last ones
-        function test_2_clickOndefaultMode() {
-            // force panel - this is private specific!!!
-            var privates = findChild(PickerPanel, "PickerPanel_Internals");
-            privates.isPhone = true;
-
-            mouseClick(defaultMode, units.gu(1), units.gu(1));
-            verify(defaultMode.panel !== null, "the picker is not opened");
-            verify(defaultMode.panel.picker !== null, "the DatePicker is not defined");
-            compare(defaultMode.panel.pickerMode, "Years|Months|Days", "the mode from the picker is not the default");
-            compare(defaultMode.panel.date, defaultMode.buttonDate, "the date from the picker differs from the button's");
-            compare(defaultMode.panel.caller, defaultMode, "wrong caller");
-            compare(defaultMode.panel.callerProperty, "buttonDate", "wrong callerProperty");
-            verify(defaultMode.panel.hasOwnProperty("closed"), "the object has no closed signal");
-
-            // dismiss
-            closeSpy.clear();
-            closeSpy.target = defaultMode.panel;
-            mouseClick(testSuite, units.gu(1), units.gu(1));
-            closeSpy.wait();
-        }
-
-        function test_3_modeSet_YM() {
-            modeSet.mode = "Years|Months" ;
-            mouseClick(modeSet, units.gu(1), units.gu(1));
-            verify(modeSet.panel !== null, "the picker is opened");
-            compare(modeSet.panel.date, modeSet.buttonDate, "the date from the picker differs from the button's");
-            compare(modeSet.panel.pickerMode, modeSet.mode, "the mode from the picker differs from the button's");
-            // check the number of pickers
-            var picker = findChild(modeSet.panel.picker, "PickerRow_Positioner");
-            compare(picker.children.length, 3, "there is not enough pickers in the panel");
-
-            // dismiss
-            closeSpy.clear();
-            closeSpy.target = modeSet.panel;
-            mouseClick(testSuite, units.gu(1), units.gu(1));
-            closeSpy.wait();
-        }
-
-        function test_3_modeSet_YD() {
-            ignoreWarning("Invalid DatePicker mode: Years|Days")
-            modeSet.mode = "Years|Days" ;
-            mouseClick(modeSet, units.gu(1), units.gu(1));
-            verify(modeSet.panel !== null, "the picker is opened");
-            compare(modeSet.panel.date, modeSet.buttonDate, "the date from the picker differs from the button's");
-            compare(modeSet.panel.pickerMode, modeSet.mode, "the mode from the picker differs from the button's");
-            // check the number of pickers
-            var picker = findChild(modeSet.panel.picker, "PickerRow_Positioner");
-            expectFailContinue("", "this mode is invalid");
-            compare(picker.children.length, 2, "there is not enough pickers in the panel");
-
-            // dismiss
-            closeSpy.clear();
-            closeSpy.target = modeSet.panel;
-            mouseClick(testSuite, units.gu(1), units.gu(1));
-            closeSpy.wait();
-        }
-
-        function test_3_modeSet_HMS() {
-            modeSet.mode = "Hours|Minutes|Seconds" ;
-            mouseClick(modeSet, units.gu(1), units.gu(1));
-            verify(modeSet.panel !== null, "the picker is opened");
-            compare(modeSet.panel.date, modeSet.buttonDate, "the date from the picker differs from the button's");
-            compare(modeSet.panel.pickerMode, modeSet.mode, "the mode from the picker differs from the button's");
-            // check the number of pickers
-            var picker = findChild(modeSet.panel.picker, "PickerRow_Positioner");
-            compare(picker.children.length, 4, "there is not enough pickers in the panel");
-
-            // dismiss
-            closeSpy.clear();
-            closeSpy.target = modeSet.panel;
-            mouseClick(testSuite, units.gu(1), units.gu(1));
-            closeSpy.wait();
-        }
-
-        function test_3_modeSet_HS() {
-            ignoreWarning("Invalid DatePicker mode: Hours|Seconds")
-            modeSet.mode = "Hours|Seconds" ;
-            mouseClick(modeSet, units.gu(1), units.gu(1));
-            verify(modeSet.panel !== null, "the picker is opened");
-            compare(modeSet.panel.date, modeSet.buttonDate, "the date from the picker differs from the button's");
-            compare(modeSet.panel.pickerMode, modeSet.mode, "the mode from the picker differs from the button's");
-            // check the number of pickers
-            var picker = findChild(modeSet.panel.picker, "PickerRow_Positioner");
-            expectFailContinue("", "this mode is invalid");
-            compare(picker.children.length, 2, "there is not enough pickers in the panel");
-
-            // dismiss
-            closeSpy.clear();
-            closeSpy.target = modeSet.panel;
-            mouseClick(testSuite, units.gu(1), units.gu(1));
-            closeSpy.wait();
-        }
-    }
-}

=== modified file 'tests/unit/visual/tst_slider.13.qml'
--- tests/unit/visual/tst_slider.13.qml	2016-06-15 13:46:51 +0000
+++ tests/unit/visual/tst_slider.13.qml	2016-12-20 08:52:37 +0000
@@ -89,6 +89,14 @@
                 }
             }
         }
+        Slider {
+           property bool enableRTL: false
+           LayoutMirroring.enabled: enableRTL
+           LayoutMirroring.childrenInherit: enableRTL
+
+           id: slider
+           readonly property rect bar: slider.__styleInstance && slider.__styleInstance.bar ? slider.__styleInstance.bar.overlayRect : null
+        }
     }
 
     UbuntuTestCase {
@@ -107,6 +115,7 @@
         function cleanup() {
             flickSpy.target = null;
             flickSpy.clear();
+            slider.enableRTL = false;
         }
 
         function test_slider_blocks_flickable_data() {
@@ -160,5 +169,21 @@
                 valueSpy.wait();
             compare(slider.value, to, "Slider has the wrong value!");
         }
+
+        function test_bar_rtl() {
+            verify(slider.bar);
+            slider.minimumValue = 0.0;
+            slider.maximumValue = 1.0;
+            slider.value = 0.3;
+
+            // check for LTR
+            print("Slider width:", slider.bar.width)
+            verify(slider.value >= slider.bar.width)
+
+            // check for RTL
+            slider.enableRTL = true;
+            print("Slider RTL width:", slider.bar.width)
+            verify(slider.value >= slider.bar.width)
+        }
     }
 }

=== renamed file 'tests/unit/visual/FIXME-QT56_textarea.11.qml' => 'tests/unit/visual/tst_textarea.11.qml'
--- tests/unit/visual/FIXME-QT56_textarea.11.qml	2016-09-16 11:20:57 +0000
+++ tests/unit/visual/tst_textarea.11.qml	2016-12-20 08:52:37 +0000
@@ -137,11 +137,6 @@
             compare(textArea.canUndo,textEdit.canUndo,"TextArea.canUndo is same as TextEdit.canUndo")
         }
 
-        // FIXME: Fails with Qt 5.6. See bug #1624342.
-        function test_0_color() {
-            compare(textArea.color,textEdit.color,"TextArea.color is same as TextEdit.canUndo")
-        }
-
         function test_0_cursorDelegate() {
             verify(textArea.cursorDelegate === null, "TextArea.cursorDelegate is not null")
         }
@@ -220,14 +215,6 @@
             compare(textArea.selectedText,textEdit.selectedText,"TextArea.selectedText is same as TextEdit.selectedText")
         }
 
-        function test_0_selectedTextColor() {
-            compare(textArea.selectedTextColor,textEdit.selectedTextColor,"TextArea.selectedTextColor is same as TextEdit.selectedTextColor")
-        }
-
-        function test_0_selectionColor() {
-            compare(textArea.selectionColor,textEdit.selectionColor,"TextArea.selectionColor is same as TextEdit.selectionColor")
-        }
-
         function test_0_selectionEnd() {
             compare(textArea.selectionEnd,textEdit.selectionEnd,"TextArea.selectionEnd is same as TextEdit.selectionEnd")
         }


References