Merge lp:~thomas-moenicke/phablet-extras/maliit-plugins-content-orientation into lp:phablet-extras/maliit-plugins

Proposed by Thomas Moenicke
Status: Merged
Approved by: Thomas Moenicke
Approved revision: 2138
Merged at revision: 2136
Proposed branch: lp:~thomas-moenicke/phablet-extras/maliit-plugins-content-orientation
Merge into: lp:phablet-extras/maliit-plugins
Diff against target: 458 lines (+154/-71)
8 files modified
maliit-keyboard/lib/logic/dynamiclayout.cpp (+57/-35)
maliit-keyboard/lib/logic/dynamiclayout.h (+1/-0)
maliit-keyboard/lib/logic/dynamiclayout_p.h (+37/-1)
maliit-keyboard/lib/logic/keyareaconverter.cpp (+1/-1)
maliit-keyboard/plugin/inputmethod.cpp (+46/-27)
maliit-keyboard/plugin/inputmethod.h (+3/-0)
maliit-keyboard/qml/Keyboard.qml (+2/-0)
maliit-keyboard/qml/RotationHelper.qml (+7/-7)
To merge this branch: bzr merge lp:~thomas-moenicke/phablet-extras/maliit-plugins-content-orientation
Reviewer Review Type Date Requested Status
Thomas Moenicke (community) Approve
Günter Schwann (community) Approve
PS Jenkins bot continuous-integration Approve
Bill Filler (community) Needs Fixing
Review via email: mp+176737@code.launchpad.net

Commit message

switched to content-orientation changes for orientation handling. For testing

Description of the change

switched to content-orientation changes for orientation handling.

For testing

To post a comment you must log in.
2135. By Thomas Moenicke on 2013-07-24

translating maliit angle to Qt::ScreenOrientation

2136. By Thomas Moenicke on 2013-07-25

forwaring contentOrientation to the rotationHelper QML Item

Thomas Moenicke (thomas-moenicke) wrote :

it requires the patch from Florian. I have tested with a test app and phone-app, where it rotates. In the shell, apps -> search lens it does not rotate, because it does not support rotation.

Bill Filler (bfiller) wrote :

Doesn't work for me. The keyboard never rotates. I'm using the latest maliit-framework that is now in archive:
maliit-framework 0.99.0+git20130615+97e8335-0ubuntu2
libmaliit-plugins0 0.99.0+git20130615+97e8335-0ubuntu2

Using this deb. And using Florian's patch + the changes you proposed to it Thomas. I made an MR for that and installed the deb from here:
https://code.launchpad.net/~bfiller/ubuntu-ui-toolkit/ubuntu-sdk-report-content-orientation/+merge/177048

The behavior I see is keyboard never rotate.

review: Needs Fixing
Bill Filler (bfiller) wrote :

tested with browser and notes and keyboard doesn't rotate when the apps rotate

Thomas Moenicke (thomas-moenicke) wrote :

The app guys probably need to use or adapt to the API. If they use the component from Florian, a MainWindow() without doing any magic, it should work.
I have tested it with the phone-app and a test app where it works. I have noticed it does not work for the browser, so we need to ping Olivier about this.

Thomas Moenicke (thomas-moenicke) wrote :

I fixed it for the Webbrowser. Unfort. I get an error from LP when doing a MR:
https://code.launchpad.net/~thomas-moenicke/phablet-extras/webbrowser-app-content-orientation

What happens here is the following: the property contentOrientation is a property of QWindow and can be set as shown in this QML example:

Window {
  contentOrientation: like Screen.orientation
}

The browser app has such a component instantiated. Not all apps do, that's where Florian's patch comes in: it exposes the window to QML space so people can set the property even if they don't have a Window {}. The OrientationHelper does that automatically.
If a Window {} is present, it should be set there to make it work.

Bill Filler (bfiller) wrote :

Couple of remaining issues:
1) remove all the temp ifdefs from the code
2) A bigger issue is that with all the MR's from above installed I'm seeing the keyboard not repainted/layout properly after rotating back and forth. The buttons are the wrong size and don't fit correctly on the screen. Please ensure to do a complete relayout/resize after getting the rotation event.

review: Needs Fixing
2137. By Thomas Moenicke on 2013-07-30

merge against master branch

2138. By Thomas Moenicke on 2013-07-30

- fixed issue when rotating: sometimes the layout seemed to be calculated in a wrong way. This happened because osk
got the signal contentOrientationChanged(), but parts of the calculating code used the API of the primary screen do determine the current orientation.
This was not in sync with contentOrientation and lead to calculating keysizes/margins for portrait mode instead of landscape mode.
- caching values of calculations
- removed TEMP_DISABLED code

Günter Schwann (schwann) wrote :

Seems to work fine

Günter Schwann (schwann) wrote :

code looks good as well

review: Approve
Thomas Moenicke (thomas-moenicke) wrote :

succ. tested on 20130731 with this package and webbrowser package from the MR mentioned above
Notes-App does rotate as expected, Webbrowser does rotate as expected, shell does not rotate as expected

review: Approve

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
1=== modified file 'maliit-keyboard/lib/logic/dynamiclayout.cpp'
2--- maliit-keyboard/lib/logic/dynamiclayout.cpp 2013-06-17 10:53:15 +0000
3+++ maliit-keyboard/lib/logic/dynamiclayout.cpp 2013-07-30 16:18:26 +0000
4@@ -36,30 +36,37 @@
5 QVector<int> DynamicLayout::calculateMargins(LayoutHelper::Orientation orientation,
6 Keyboard& kb)
7 {
8- const qreal keyboardWidth = uiConst->windowGeometryRect(qGuiApp->primaryScreen()->orientation()).size().width();
9-
10- QVector<int> margins;
11-
12- int spaceTakenByKeys = 0;
13- int numberOfKeysInRow = 0;
14- for (int index = 0; index < kb.keys.count(); ++index) {
15- const KeyDescription &desc(kb.key_descriptions.at(index));
16- int width = uiConst->keyWidth(orientation, desc.width);
17- spaceTakenByKeys += width;
18- numberOfKeysInRow++;
19-
20- bool at_row_end((index + 1 == kb.keys.count())
21- || (index + 1 < kb.keys.count()
22- && kb.key_descriptions.at(index + 1).row > desc.row));
23-
24- if (at_row_end) {
25- int marginThisRow = ( (keyboardWidth - spaceTakenByKeys) / (numberOfKeysInRow-1) ) / 2;
26- margins.append(marginThisRow);
27- spaceTakenByKeys = 0;
28+ if (d->marginsCachedOrientation != orientation)
29+ d->invalidateMarginsCache();
30+
31+ if (!d->marginsCacheValid) {
32+ const qreal keyboardWidth = windowWidth(orientation);
33+
34+ QVector<int> margins;
35+ int spaceTakenByKeys = 0;
36+ int numberOfKeysInRow = 0;
37+ for (int index = 0; index < kb.keys.count(); ++index) {
38+ const KeyDescription &desc(kb.key_descriptions.at(index));
39+ int width = uiConst->keyWidth(orientation, desc.width);
40+ spaceTakenByKeys += width;
41+ numberOfKeysInRow++;
42+
43+ bool at_row_end((index + 1 == kb.keys.count())
44+ || (index + 1 < kb.keys.count()
45+ && kb.key_descriptions.at(index + 1).row > desc.row));
46+
47+ if (at_row_end) {
48+ int marginThisRow = ( (keyboardWidth - spaceTakenByKeys) / (numberOfKeysInRow-1) ) / 2;
49+ d->marginsCached.append(marginThisRow);
50+ spaceTakenByKeys = 0;
51+ }
52 }
53+
54+ d->marginsCachedOrientation = orientation;
55+ d->marginsCacheValid = true;
56 }
57
58- return margins;
59+ return d->marginsCached;
60 }
61
62 void DynamicLayout::calculateNumberOfRows(Keyboard& kb)
63@@ -90,27 +97,39 @@
64 d->initDynamicLayout();
65 }
66
67+int DynamicLayout::windowWidth(LayoutHelper::Orientation orientation)
68+{
69+ return d->storage(orientation)->windowGeometryRect.width();
70+}
71+
72 QRect DynamicLayout::windowGeometryRect(Qt::ScreenOrientation orientation)
73 {
74- LayoutHelper::Orientation maliitOrientation = LayoutHelper::Landscape;
75-
76- if (orientation == Qt::PortraitOrientation || orientation == Qt::InvertedPortraitOrientation)
77+ if (orientation != d->cachedOrientation)
78+ d->invalidateWindowGeometryCache();
79+
80+ if ( !d->windowGeometryCacheValid ) {
81+ LayoutHelper::Orientation maliitOrientation = LayoutHelper::Landscape;
82+
83+ if (orientation == Qt::PortraitOrientation || orientation == Qt::InvertedPortraitOrientation)
84 maliitOrientation = LayoutHelper::Portrait;
85
86- if (orientation == Qt::InvertedLandscapeOrientation || orientation == Qt::InvertedPortraitOrientation) {
87- if (!d->wordRibbonEnabled) {
88- return d->storage(maliitOrientation)->windowGeometryRectInverted
89+ if (orientation == Qt::InvertedLandscapeOrientation || orientation == Qt::InvertedPortraitOrientation) {
90+ if (!d->wordRibbonEnabled) {
91+ return d->writeCache( orientation, d->storage(maliitOrientation)->windowGeometryRectInverted
92 .adjusted (0, wordRibbonHeight(maliitOrientation), 0, 0)
93- .translated(0,-wordRibbonHeight(maliitOrientation));
94- } else {
95- return d->storage(maliitOrientation)->windowGeometryRectInverted;
96+ .translated(0,-wordRibbonHeight(maliitOrientation)) );
97+ } else {
98+ return d->writeCache( orientation, d->storage(maliitOrientation)->windowGeometryRectInverted );
99+ }
100 }
101+
102+ if (!d->wordRibbonEnabled)
103+ return d->writeCache( orientation, d->storage(maliitOrientation)->windowGeometryRect.adjusted(0, d->storage(maliitOrientation)->wordRibbonHeight, 0, 0) );
104+
105+ return d->writeCache( orientation, d->storage(maliitOrientation)->windowGeometryRect );
106 }
107
108- if (!d->wordRibbonEnabled)
109- return d->storage(maliitOrientation)->windowGeometryRect.adjusted(0, d->storage(maliitOrientation)->wordRibbonHeight, 0, 0);
110-
111- return d->storage(maliitOrientation)->windowGeometryRect;
112+ return d->windowGeometryRectCached;
113 }
114
115 qreal DynamicLayout::keyWidth(LayoutHelper::Orientation orientation, KeyDescription::Width requestedSize)
116@@ -285,7 +304,10 @@
117
118 void DynamicLayout::onWordEngineSettingsChanged(bool wordEngineEnabled)
119 {
120- d->wordRibbonEnabled = wordEngineEnabled;
121+ if (d->wordRibbonEnabled != wordEngineEnabled) {
122+ d->wordRibbonEnabled = wordEngineEnabled;
123+ d->invalidateWindowGeometryCache();
124+ }
125 }
126
127 }} // namespaces
128
129=== modified file 'maliit-keyboard/lib/logic/dynamiclayout.h'
130--- maliit-keyboard/lib/logic/dynamiclayout.h 2013-06-17 10:53:15 +0000
131+++ maliit-keyboard/lib/logic/dynamiclayout.h 2013-07-30 16:18:26 +0000
132@@ -51,6 +51,7 @@
133 void initDynamicLayout();
134
135 int keypadHeight(LayoutHelper::Orientation orientation);
136+ int windowWidth(LayoutHelper::Orientation orientation);
137 QRect windowGeometryRect(Qt::ScreenOrientation orientation);
138 qreal keyboardScreenWidthRatio(LayoutHelper::Orientation orientation);
139
140
141=== modified file 'maliit-keyboard/lib/logic/dynamiclayout_p.h'
142--- maliit-keyboard/lib/logic/dynamiclayout_p.h 2013-07-04 10:57:47 +0000
143+++ maliit-keyboard/lib/logic/dynamiclayout_p.h 2013-07-30 16:18:26 +0000
144@@ -1,5 +1,7 @@
145
146-//#include "dynamiclayout.h"
147+#include <QtCore>
148+
149+#include "layouthelper.h"
150
151 namespace MaliitKeyboard {
152 namespace Logic {
153@@ -97,6 +99,15 @@
154 bool initialized;
155 bool wordRibbonEnabled;
156
157+ // short term-caching in memory
158+ Qt::ScreenOrientation cachedOrientation;
159+ bool windowGeometryCacheValid;
160+ QRect windowGeometryRectCached;
161+
162+ LayoutHelper::Orientation marginsCachedOrientation;
163+ bool marginsCacheValid;
164+ QVector<int> marginsCached;
165+
166 DynamicLayoutStorage* portraitStorage;
167 DynamicLayoutStorage* landscapeStorage;
168 DynamicLayoutStorage* genericStorage;
169@@ -105,6 +116,15 @@
170 q(_q),
171 initialized(false),
172 wordRibbonEnabled(false),
173+
174+ cachedOrientation(Qt::PortraitOrientation),
175+ windowGeometryCacheValid(false),
176+ windowGeometryRectCached(QRect(0,0,0,0)),
177+
178+ marginsCachedOrientation(LayoutHelper::Portrait),
179+ marginsCacheValid(false),
180+ marginsCached(0),
181+
182 portraitStorage(new DynamicLayoutStorage),
183 landscapeStorage(new DynamicLayoutStorage),
184 genericStorage(new DynamicLayoutStorage)
185@@ -279,6 +299,22 @@
186 qDebug() << "portrait inverted " << rInvertedPortrait << portraitStorage->windowGeometryRectInverted;
187 }
188 }
189+
190+ const QRect& writeCache( Qt::ScreenOrientation orientation, const QRect& cachedRect ) {
191+ windowGeometryCacheValid = true;
192+ cachedOrientation = orientation;
193+ windowGeometryRectCached = cachedRect;
194+ return windowGeometryRectCached;
195+ }
196+
197+ void invalidateWindowGeometryCache() {
198+ windowGeometryCacheValid = false;
199+ }
200+
201+ void invalidateMarginsCache() {
202+ marginsCacheValid = false;
203+ marginsCached.clear();
204+ }
205 };
206
207 }
208
209=== modified file 'maliit-keyboard/lib/logic/keyareaconverter.cpp'
210--- maliit-keyboard/lib/logic/keyareaconverter.cpp 2013-07-19 11:31:55 +0000
211+++ maliit-keyboard/lib/logic/keyareaconverter.cpp 2013-07-30 16:18:26 +0000
212@@ -86,7 +86,7 @@
213
214 static const QMargins bg_margins( uiConst->keyAreaBorders() );
215
216- const qreal max_width( uiConst->windowGeometryRect(qGuiApp->primaryScreen()->orientation()).width() );
217+ const qreal max_width( uiConst->windowWidth(orientation) );
218 const qreal key_height(uiConst->keyHeight(orientation));
219 const qreal keypadHeight = uiConst->keypadHeight(orientation);
220
221
222=== modified file 'maliit-keyboard/plugin/inputmethod.cpp'
223--- maliit-keyboard/plugin/inputmethod.cpp 2013-07-29 14:12:09 +0000
224+++ maliit-keyboard/plugin/inputmethod.cpp 2013-07-30 16:18:26 +0000
225@@ -172,7 +172,7 @@
226
227 explicit InputMethodPrivate(InputMethod * const q,
228 MAbstractInputMethodHost *host);
229- void setLayoutOrientation(Logic::LayoutHelper::Orientation orientation);
230+ void setLayoutOrientation(Qt::ScreenOrientation qtOrientation);
231 void updateKeyboardOrientation();
232 void updateWordRibbon();
233
234@@ -190,6 +190,7 @@
235 , extended_surface(qSharedPointerDynamicCast<Surface>(surface_factory->create(g_extended_surface_options, surface)))
236 , magnifier_surface(qSharedPointerDynamicCast<Surface>(surface_factory->create(g_extended_surface_options, surface)))
237 #endif
238+ , qmlRootItem(0)
239 , editor(EditorOptions(), new Model::Text, new Logic::WordEngine, new Logic::LanguageFeatures)
240 , feedback()
241 , style(new Style)
242@@ -263,7 +264,8 @@
243 engine->addImportPath(MALIIT_KEYBOARD_DATA_DIR);
244 setContextProperties(engine->rootContext());
245
246- view->setSource(QUrl::fromLocalFile(g_maliit_keyboard_qml));
247+ QObject::connect(view, SIGNAL(statusChanged(QQuickView::Status)),
248+ q, SLOT(onQQuickViewStatusChanged(QQuickView::Status)));
249
250 #ifdef EXTENDED_SURFACE_TEMP_DISABLED
251 QQmlEngine *const extended_engine(extended_surface->view()->engine());
252@@ -280,22 +282,6 @@
253 #endif
254 view->setProperty("role", 7);
255
256- qmlRootItem = view->rootObject();
257-
258- QObject::connect(
259- qmlRootItem,
260- SIGNAL(hideAnimationFinishedChanged()),
261- q,
262- SLOT(onHideAnimationFinished()));
263-
264- // workaround: contentOrientationChanged signal not fired by app/sdk
265- // http://qt-project.org/doc/qt-5.0/qtgui/qwindow.html#contentOrientation-prop
266- // this is normally handled by qmallitplatforminputcontextplugin in QtBase plugins
267- QObject::connect(view->screen(),
268- SIGNAL(orientationChanged(Qt::ScreenOrientation)),
269- q,
270- SLOT(deviceOrientationChanged(Qt::ScreenOrientation)));
271-
272 // workaround: resizeMode not working in current qpa imlementation
273 // http://qt-project.org/doc/qt-5.0/qtquick/qquickview.html#ResizeMode-enum
274 view->setResizeMode(QQuickView::SizeRootObjectToView);
275@@ -310,18 +296,20 @@
276 updateKeyboardOrientation();
277 }
278
279-void InputMethodPrivate::setLayoutOrientation(Logic::LayoutHelper::Orientation orientation)
280+void InputMethodPrivate::setLayoutOrientation(Qt::ScreenOrientation screenOrientation)
281 {
282+ Logic::LayoutHelper::Orientation orientation = uiConst->screenToMaliitOrientation(screenOrientation);
283+
284 layout.updater.setOrientation(orientation);
285 extended_layout.updater.setOrientation(orientation);
286
287- windowGeometryRect = uiConst->windowGeometryRect(view->screen()->orientation());
288+ windowGeometryRect = uiConst->windowGeometryRect( screenOrientation );
289
290 keyboardVisibleRect = windowGeometryRect.adjusted(0,uiConst->invisibleTouchAreaHeight(orientation),0,0);
291
292 // qpa does not rotate the coordinate system
293 windowGeometryRect = qGuiApp->primaryScreen()->mapBetween(
294- view->screen()->orientation(),
295+ screenOrientation,
296 qGuiApp->primaryScreen()->primaryOrientation(),
297 windowGeometryRect);
298
299@@ -336,6 +324,8 @@
300 host->setInputMethodArea(rect, view);
301 }
302
303+ qmlRootItem->setProperty("contentOrientation", screenOrientation);
304+
305 #ifdef HAVE_UBUNTU_PLATFORM_API
306 if (qmlRootItem->property("shown").toBool()) {
307 ubuntu_ui_report_osk_invisible();
308@@ -366,7 +356,7 @@
309
310 void InputMethodPrivate::updateKeyboardOrientation()
311 {
312- setLayoutOrientation(uiConst->screenToMaliitOrientation(QGuiApplication::primaryScreen()->orientation()));
313+ setLayoutOrientation(QGuiApplication::primaryScreen()->orientation());
314 }
315
316 void InputMethodPrivate::connectToNotifier()
317@@ -396,6 +386,8 @@
318 {
319 Q_D(InputMethod);
320
321+ d->view->setSource(QUrl::fromLocalFile(g_maliit_keyboard_qml));
322+
323 // FIXME: Reconnect feedback instance.
324 Setup::connectAll(&d->layout.event_handler, &d->layout.updater, &d->editor);
325 Setup::connectAll(&d->extended_layout.event_handler, &d->extended_layout.updater, &d->editor);
326@@ -585,12 +577,22 @@
327
328 void InputMethod::handleAppOrientationChanged(int angle)
329 {
330- Q_UNUSED(angle);
331-
332-#ifdef DISABLED_AS_CONTENT_ORIENTATION_NOT_WORKING
333 Q_D(InputMethod);
334- d->updateKeyboardOrientation();
335-#endif
336+
337+ Qt::ScreenOrientation orientation = Qt::PortraitOrientation;
338+ switch (angle) {
339+ case 0:
340+ orientation = Qt::LandscapeOrientation; break;
341+ case 90:
342+ orientation = Qt::InvertedPortraitOrientation; break;
343+ case 180:
344+ orientation = Qt::InvertedLandscapeOrientation; break;
345+ case 270:
346+ default:
347+ orientation = Qt::PortraitOrientation; break;
348+ }
349+
350+ d->setLayoutOrientation(orientation);
351 }
352
353 bool InputMethod::imExtensionEvent(MImExtensionEvent *event)
354@@ -738,7 +740,9 @@
355 d->layout.helper.setScreenSize(size);
356 d->extended_layout.helper.setScreenSize(d->layout.helper.screenSize());
357
358+#ifdef TEMP_DISABLED
359 d->updateKeyboardOrientation();
360+#endif
361 }
362
363 void InputMethod::onStyleSettingChanged()
364@@ -927,5 +931,20 @@
365 return d->predictionEnabled;
366 }
367
368+void InputMethod::onQQuickViewStatusChanged(QQuickView::Status status)
369+{
370+ Q_D(InputMethod);
371+
372+ switch (status) {
373+ case QQuickView::Ready:
374+ {
375+ d->qmlRootItem = qobject_cast<QQuickItem*> (d->view->rootObject());
376+ QObject::connect(d->qmlRootItem, SIGNAL(hideAnimationFinishedChanged()), this, SLOT(onHideAnimationFinished()));
377+ }
378+ break;
379+ default:
380+ break;
381+ }
382+}
383
384 } // namespace MaliitKeyboard
385
386=== modified file 'maliit-keyboard/plugin/inputmethod.h'
387--- maliit-keyboard/plugin/inputmethod.h 2013-07-29 11:52:26 +0000
388+++ maliit-keyboard/plugin/inputmethod.h 2013-07-30 16:18:26 +0000
389@@ -35,7 +35,9 @@
390 #include <maliit/plugins/abstractinputmethod.h>
391 #include <maliit/plugins/abstractinputmethodhost.h>
392 #include <maliit/plugins/keyoverride.h>
393+
394 #include <QtGui>
395+#include <QtQuick/QQuickView>
396
397 namespace MaliitKeyboard {
398
399@@ -75,6 +77,7 @@
400 Q_SLOT void deviceOrientationChanged(Qt::ScreenOrientation orientation);
401
402 Q_SLOT void updateWordEngine();
403+ Q_SLOT void onQQuickViewStatusChanged(QQuickView::Status status);
404
405 Q_PROPERTY(bool predictionEnabled READ predictionEnabled NOTIFY predictionEnabledChanged)
406
407
408=== modified file 'maliit-keyboard/qml/Keyboard.qml'
409--- maliit-keyboard/qml/Keyboard.qml 2013-07-16 16:22:34 +0000
410+++ maliit-keyboard/qml/Keyboard.qml 2013-07-30 16:18:26 +0000
411@@ -40,6 +40,8 @@
412
413 visible: layout.visible
414
415+ property int contentOrientation: Qt.PrimaryOrientation
416+
417 property bool shown: false;
418 property bool wordribbon_visible: true;
419
420
421=== modified file 'maliit-keyboard/qml/RotationHelper.qml'
422--- maliit-keyboard/qml/RotationHelper.qml 2013-05-16 17:32:04 +0000
423+++ maliit-keyboard/qml/RotationHelper.qml 2013-07-30 16:18:26 +0000
424@@ -18,11 +18,11 @@
425 import QtQuick.Window 2.0
426
427 Item {
428- id: orientationHelper
429-
430- property string __rotationString: Screen.angleBetween(Screen.primaryOrientation, Screen.orientation).toString();
431-
432- rotation: Screen.angleBetween(Screen.primaryOrientation, Screen.orientation);
433+ id: rotationHelper
434+
435+ property string __rotationString: Screen.angleBetween(Screen.primaryOrientation, contentOrientation).toString();
436+
437+ rotation: Screen.angleBetween(Screen.primaryOrientation, contentOrientation);
438
439 anchors.fill: parent
440
441@@ -33,7 +33,7 @@
442 State {
443 name: "270"
444 PropertyChanges {
445- target: orientationHelper
446+ target: rotationHelper
447 anchors {
448 leftMargin: (parent.width - parent.height) / 2
449 rightMargin: anchors.leftMargin
450@@ -45,7 +45,7 @@
451 State {
452 name: "90"
453 PropertyChanges {
454- target: orientationHelper
455+ target: rotationHelper
456 anchors {
457 leftMargin: (parent.width - parent.height) / 2
458 rightMargin: anchors.leftMargin

Subscribers

People subscribed via source and target branches