Merge lp:~fboucault/ubuntu-ui-toolkit/rtl_support into lp:ubuntu-ui-toolkit

Proposed by Florian Boucault
Status: Merged
Approved by: Zsombor Egri
Approved revision: 908
Merged at revision: 920
Proposed branch: lp:~fboucault/ubuntu-ui-toolkit/rtl_support
Merge into: lp:ubuntu-ui-toolkit
Prerequisite: lp:~fboucault/ubuntu-ui-toolkit/gallery_cleaner_responsiveness
Diff against target: 334 lines (+79/-7)
19 files modified
examples/ubuntu-ui-toolkit-gallery/TemplateFlow.qml (+1/-0)
examples/ubuntu-ui-toolkit-gallery/TemplateRow.qml (+12/-0)
examples/ubuntu-ui-toolkit-gallery/TemplateSection.qml (+1/-0)
examples/ubuntu-ui-toolkit-gallery/TemplateSectionNavigation.qml (+3/-0)
examples/ubuntu-ui-toolkit-gallery/ubuntu-ui-toolkit-gallery.qml (+3/-0)
modules/Ubuntu/Components/Label.qml (+12/-0)
modules/Ubuntu/Components/ListItems/Empty.qml (+5/-0)
modules/Ubuntu/Components/Popups/PopupBase.qml (+3/-0)
modules/Ubuntu/Components/Slider.qml (+15/-4)
modules/Ubuntu/Components/TextArea.qml (+3/-0)
modules/Ubuntu/Components/TextField.qml (+3/-0)
modules/Ubuntu/Components/Themes/Ambiance/ButtonStyle.qml (+3/-0)
modules/Ubuntu/Components/Themes/Ambiance/HeaderStyle.qml (+2/-0)
modules/Ubuntu/Components/Themes/Ambiance/PartialColorize.qml (+4/-2)
modules/Ubuntu/Components/Themes/Ambiance/PartialColorizeUbuntuShape.qml (+1/-1)
modules/Ubuntu/Components/Themes/Ambiance/ProgressBarStyle.qml (+2/-0)
modules/Ubuntu/Components/Themes/Ambiance/ProgressionVisualStyle.qml (+1/-0)
modules/Ubuntu/Components/Themes/Ambiance/SwitchStyle.qml (+2/-0)
modules/Ubuntu/Components/Toolbar.qml (+3/-0)
To merge this branch: bzr merge lp:~fboucault/ubuntu-ui-toolkit/rtl_support
Reviewer Review Type Date Requested Status
PS Jenkins bot continuous-integration Approve
Zsombor Egri Approve
Review via email: mp+200868@code.launchpad.net

Commit message

Added Right-to-Left languages support to most widgets and to the UI Toolkit Gallery.

The following widgets now behave properly in RTL environments:
  - List Items
  - Popups
  - Slider
  - TextArea
  - TextField
  - Button
  - ProgressBar
  - Toolbar
  - Header
  - Switch

Tabs still need to be reversed.
Relayout issues had to be workarounded (QTBUG 35095) for Label and Row.

To post a comment you must log in.
Revision history for this message
Florian Boucault (fboucault) wrote :

Manual testing is best done by invoking qmlscene with the -reverse switch.
English strings won't automatically reverse though. Adding the following to Label.qml does that for testing purposes:

    horizontalAlignment: Text.AlignLeft

Revision history for this message
PS Jenkins bot (ps-jenkins) wrote :
review: Needs Fixing (continuous-integration)
Revision history for this message
PS Jenkins bot (ps-jenkins) wrote :
review: Needs Fixing (continuous-integration)
Revision history for this message
Zsombor Egri (zsombi) wrote :

Looks good to me.

review: Approve
Revision history for this message
Zsombor Egri (zsombi) wrote :

> Looks good to me.

However I just saw that an extra API has been added to Text... You need to add that to components.api.

review: Needs Fixing
Revision history for this message
Zsombor Egri (zsombi) wrote :

> > Looks good to me.
>
> However I just saw that an extra API has been added to Text... You need to add
> that to components.api.

... or actually make it private/internal so it does not break components.api.

905. By Florian Boucault

Merged trunk

906. By Florian Boucault

Merged from trunk

907. By Florian Boucault

Removed newly introduced public method from Label.

Revision history for this message
PS Jenkins bot (ps-jenkins) wrote :
review: Needs Fixing (continuous-integration)
908. By Florian Boucault

Label: marked onWidthChanged internal as to suppress documentation errors.

Revision history for this message
PS Jenkins bot (ps-jenkins) wrote :
review: Needs Fixing (continuous-integration)
Revision history for this message
Zsombor Egri (zsombi) wrote :

Can go in, hope to get CI also rolling.

review: Approve
Revision history for this message
PS Jenkins bot (ps-jenkins) :
review: Approve (continuous-integration)

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
=== modified file 'examples/ubuntu-ui-toolkit-gallery/TemplateFlow.qml'
--- examples/ubuntu-ui-toolkit-gallery/TemplateFlow.qml 2013-04-24 17:09:29 +0000
+++ examples/ubuntu-ui-toolkit-gallery/TemplateFlow.qml 2014-01-23 19:11:13 +0000
@@ -32,6 +32,7 @@
32 Label {32 Label {
33 id: label33 id: label
34 text: templateFlow.title34 text: templateFlow.title
35 anchors.left: parent.left
35 width: templateFlow.titleWidth36 width: templateFlow.titleWidth
36 y: templateFlow.titleOffset37 y: templateFlow.titleOffset
37 elide: Text.ElideRight38 elide: Text.ElideRight
3839
=== modified file 'examples/ubuntu-ui-toolkit-gallery/TemplateRow.qml'
--- examples/ubuntu-ui-toolkit-gallery/TemplateRow.qml 2013-04-24 17:09:29 +0000
+++ examples/ubuntu-ui-toolkit-gallery/TemplateRow.qml 2014-01-23 19:11:13 +0000
@@ -32,6 +32,7 @@
32 id: label32 id: label
33 text: templateRow.title33 text: templateRow.title
34 width: templateRow.titleWidth34 width: templateRow.titleWidth
35 anchors.left: parent.left
35 anchors.verticalCenter: contentRow.verticalCenter36 anchors.verticalCenter: contentRow.verticalCenter
36 elide: Text.ElideRight37 elide: Text.ElideRight
37 font.weight: Font.Light38 font.weight: Font.Light
@@ -44,5 +45,16 @@
44 anchors.leftMargin: units.gu(2)45 anchors.leftMargin: units.gu(2)
45 anchors.right: parent.right46 anchors.right: parent.right
46 spacing: units.gu(2)47 spacing: units.gu(2)
48
49 /* FIXME: workaround for QTBUG 35095 where Row's content is not relaidout
50 when the width changes and LayoutMirroring is enabled.
51
52 Ref.: https://bugreports.qt-project.org/browse/QTBUG-35095
53 */
54 onWidthChanged: if (LayoutMirroring.enabled) forceRelayout()
55
56 function forceRelayout() {
57 spacing = spacing + 0.00001;
58 }
47 }59 }
48}60}
4961
=== modified file 'examples/ubuntu-ui-toolkit-gallery/TemplateSection.qml'
--- examples/ubuntu-ui-toolkit-gallery/TemplateSection.qml 2013-04-24 17:09:29 +0000
+++ examples/ubuntu-ui-toolkit-gallery/TemplateSection.qml 2014-01-23 19:11:13 +0000
@@ -34,6 +34,7 @@
34 id: label34 id: label
35 text: templateSection.title35 text: templateSection.title
36 fontSize: "large"36 fontSize: "large"
37 anchors.left: parent.left
37 }38 }
3839
39 WebLink {40 WebLink {
4041
=== modified file 'examples/ubuntu-ui-toolkit-gallery/TemplateSectionNavigation.qml'
--- examples/ubuntu-ui-toolkit-gallery/TemplateSectionNavigation.qml 2013-04-24 17:09:29 +0000
+++ examples/ubuntu-ui-toolkit-gallery/TemplateSectionNavigation.qml 2014-01-23 19:11:13 +0000
@@ -33,6 +33,7 @@
33 id: label33 id: label
34 text: templateSection.title34 text: templateSection.title
35 fontSize: "large"35 fontSize: "large"
36 anchors.left: parent.left
36 }37 }
3738
38 WebLink {39 WebLink {
@@ -43,6 +44,7 @@
43 visible: documentation != ""44 visible: documentation != ""
44 fontSize: "small"45 fontSize: "small"
45 opacity: 0.346 opacity: 0.3
47 anchors.left: parent.left
46 }48 }
4749
48 WebLink {50 WebLink {
@@ -50,6 +52,7 @@
50 url: templateSection.designUrl52 url: templateSection.designUrl
51 fontSize: "small"53 fontSize: "small"
52 opacity: 0.354 opacity: 0.3
55 anchors.left: parent.left
53 }56 }
5457
55 Image {58 Image {
5659
=== modified file 'examples/ubuntu-ui-toolkit-gallery/ubuntu-ui-toolkit-gallery.qml'
--- examples/ubuntu-ui-toolkit-gallery/ubuntu-ui-toolkit-gallery.qml 2014-01-07 19:40:29 +0000
+++ examples/ubuntu-ui-toolkit-gallery/ubuntu-ui-toolkit-gallery.qml 2014-01-23 19:11:13 +0000
@@ -36,6 +36,9 @@
36 */36 */
37 automaticOrientation: true37 automaticOrientation: true
3838
39 LayoutMirroring.enabled: Qt.application.layoutDirection == Qt.RightToLeft
40 LayoutMirroring.childrenInherit: true
41
39 state: width >= units.gu(80) ? "wide" : "narrow"42 state: width >= units.gu(80) ? "wide" : "narrow"
40 states: [43 states: [
41 State {44 State {
4245
=== modified file 'modules/Ubuntu/Components/Label.qml'
--- modules/Ubuntu/Components/Label.qml 2013-07-04 21:36:23 +0000
+++ modules/Ubuntu/Components/Label.qml 2014-01-23 19:11:13 +0000
@@ -57,4 +57,16 @@
57 font.pixelSize: FontUtils.sizeToPixels(fontSize)57 font.pixelSize: FontUtils.sizeToPixels(fontSize)
58 font.family: "Ubuntu"58 font.family: "Ubuntu"
59 color: Theme.palette.selected.backgroundText59 color: Theme.palette.selected.backgroundText
60
61 /* FIXME: workaround for QTBUG 35095 where Text's alignment is incorrect
62 when the width changes and LayoutMirroring is enabled.
63
64 Ref.: https://bugreports.qt-project.org/browse/QTBUG-35095
65 */
66 /*! \internal */
67 onWidthChanged: if (LayoutMirroring.enabled) {
68 // force a relayout
69 lineHeight += 0.00001;
70 lineHeight -= 0.00001;
71 }
60}72}
6173
=== modified file 'modules/Ubuntu/Components/ListItems/Empty.qml'
--- modules/Ubuntu/Components/ListItems/Empty.qml 2013-12-23 14:01:58 +0000
+++ modules/Ubuntu/Components/ListItems/Empty.qml 2014-01-23 19:11:13 +0000
@@ -184,6 +184,9 @@
184 // Keep compatible with the old version184 // Keep compatible with the old version
185 height: implicitHeight185 height: implicitHeight
186186
187 LayoutMirroring.enabled: Qt.application.layoutDirection == Qt.RightToLeft
188 LayoutMirroring.childrenInherit: true
189
187 /*! \internal */190 /*! \internal */
188 QtObject {191 QtObject {
189 id: priv192 id: priv
@@ -347,6 +350,8 @@
347 top: parent.top350 top: parent.top
348 bottom: parent.bottom351 bottom: parent.bottom
349 }352 }
353 LayoutMirroring.enabled: false
354 LayoutMirroring.childrenInherit: true
350355
351 Item {356 Item {
352 id: confirmRemovalDialog357 id: confirmRemovalDialog
353358
=== modified file 'modules/Ubuntu/Components/Popups/PopupBase.qml'
--- modules/Ubuntu/Components/Popups/PopupBase.qml 2013-06-26 19:25:09 +0000
+++ modules/Ubuntu/Components/Popups/PopupBase.qml 2014-01-23 19:11:13 +0000
@@ -56,6 +56,9 @@
56 automaticOrientation: stateWrapper.rootItem && stateWrapper.rootItem.automaticOrientation ?56 automaticOrientation: stateWrapper.rootItem && stateWrapper.rootItem.automaticOrientation ?
57 stateWrapper.rootItem.automaticOrientation : false57 stateWrapper.rootItem.automaticOrientation : false
5858
59 LayoutMirroring.enabled: Qt.application.layoutDirection == Qt.RightToLeft
60 LayoutMirroring.childrenInherit: true
61
59 /*!62 /*!
60 \preliminary63 \preliminary
61 Make the popup visible. Reparent to the background area object first if needed.64 Make the popup visible. Reparent to the background area object first if needed.
6265
=== modified file 'modules/Ubuntu/Components/Slider.qml'
--- modules/Ubuntu/Components/Slider.qml 2013-08-07 13:42:54 +0000
+++ modules/Ubuntu/Components/Slider.qml 2014-01-23 19:11:13 +0000
@@ -141,13 +141,24 @@
141 property real dragInitNormalizedValue: 0.0141 property real dragInitNormalizedValue: 0.0
142142
143 function normalizedValueFromValue(value) {143 function normalizedValueFromValue(value) {
144 return MathUtils.clampAndProject(value, slider.minimumValue,144 if (Qt.application.layoutDirection == Qt.RightToLeft) {
145 slider.maximumValue, 0.0, 1.0);145 return MathUtils.clampAndProject(value, slider.minimumValue,
146 slider.maximumValue, 1.0, 0.0);
147 } else {
148 return MathUtils.clampAndProject(value, slider.minimumValue,
149 slider.maximumValue, 0.0, 1.0);
150 }
151
146 }152 }
147153
148 function valueFromNormalizedValue(normalizedValue) {154 function valueFromNormalizedValue(normalizedValue) {
149 return MathUtils.lerp(MathUtils.clamp(normalizedValue, 0.0, 1.0),155 if (Qt.application.layoutDirection == Qt.RightToLeft) {
150 slider.minimumValue, slider.maximumValue);156 return MathUtils.lerp(MathUtils.clamp(normalizedValue, 0.0, 1.0),
157 slider.maximumValue, slider.minimumValue);
158 } else {
159 return MathUtils.lerp(MathUtils.clamp(normalizedValue, 0.0, 1.0),
160 slider.minimumValue, slider.maximumValue);
161 }
151 }162 }
152163
153 /* Mimic the behaviour of the 'pressed' property with one important difference:164 /* Mimic the behaviour of the 'pressed' property with one important difference:
154165
=== modified file 'modules/Ubuntu/Components/TextArea.qml'
--- modules/Ubuntu/Components/TextArea.qml 2013-11-06 22:17:05 +0000
+++ modules/Ubuntu/Components/TextArea.qml 2014-01-23 19:11:13 +0000
@@ -741,6 +741,9 @@
741 /*!\internal */741 /*!\internal */
742 onHeightChanged: internal.inputAreaHeight = control.height - 2 * internal.frameSpacing742 onHeightChanged: internal.inputAreaHeight = control.height - 2 * internal.frameSpacing
743743
744 LayoutMirroring.enabled: Qt.application.layoutDirection == Qt.RightToLeft
745 LayoutMirroring.childrenInherit: true
746
744 /*!\internal */747 /*!\internal */
745 property alias __internal: internal748 property alias __internal: internal
746 QtObject {749 QtObject {
747750
=== modified file 'modules/Ubuntu/Components/TextField.qml'
--- modules/Ubuntu/Components/TextField.qml 2014-01-13 15:23:25 +0000
+++ modules/Ubuntu/Components/TextField.qml 2014-01-23 19:11:13 +0000
@@ -809,6 +809,9 @@
809 control.focus = false;809 control.focus = false;
810 }810 }
811811
812 LayoutMirroring.enabled: Qt.application.layoutDirection == Qt.RightToLeft
813 LayoutMirroring.childrenInherit: true
814
812 // grab clicks from the area between the frame and the input815 // grab clicks from the area between the frame and the input
813 MouseArea {816 MouseArea {
814 anchors.fill: parent817 anchors.fill: parent
815818
=== modified file 'modules/Ubuntu/Components/Themes/Ambiance/ButtonStyle.qml'
--- modules/Ubuntu/Components/Themes/Ambiance/ButtonStyle.qml 2013-07-05 12:33:02 +0000
+++ modules/Ubuntu/Components/Themes/Ambiance/ButtonStyle.qml 2014-01-23 19:11:13 +0000
@@ -33,6 +33,9 @@
33 implicitWidth: Math.max(minimumWidth, foreground.implicitWidth + 2*horizontalPadding)33 implicitWidth: Math.max(minimumWidth, foreground.implicitWidth + 2*horizontalPadding)
34 implicitHeight: units.gu(5)34 implicitHeight: units.gu(5)
3535
36 LayoutMirroring.enabled: Qt.application.layoutDirection == Qt.RightToLeft
37 LayoutMirroring.childrenInherit: true
38
36 /* The proxy is necessary because Gradient.stops and GradientStop.color are39 /* The proxy is necessary because Gradient.stops and GradientStop.color are
37 non-NOTIFYable properties. They cannot be written to so it is fine but40 non-NOTIFYable properties. They cannot be written to so it is fine but
38 the proxy avoids the warnings.41 the proxy avoids the warnings.
3942
=== modified file 'modules/Ubuntu/Components/Themes/Ambiance/HeaderStyle.qml'
--- modules/Ubuntu/Components/Themes/Ambiance/HeaderStyle.qml 2013-11-12 06:41:24 +0000
+++ modules/Ubuntu/Components/Themes/Ambiance/HeaderStyle.qml 2014-01-23 19:11:13 +0000
@@ -72,6 +72,8 @@
72 height: headerStyle.contentHeight72 height: headerStyle.contentHeight
7373
74 Label {74 Label {
75 LayoutMirroring.enabled: Qt.application.layoutDirection == Qt.RightToLeft
76
75 anchors {77 anchors {
76 left: parent.left78 left: parent.left
77 verticalCenter: parent.verticalCenter79 verticalCenter: parent.verticalCenter
7880
=== modified file 'modules/Ubuntu/Components/Themes/Ambiance/PartialColorize.qml'
--- modules/Ubuntu/Components/Themes/Ambiance/PartialColorize.qml 2013-08-01 14:05:39 +0000
+++ modules/Ubuntu/Components/Themes/Ambiance/PartialColorize.qml 2014-01-23 19:11:13 +0000
@@ -32,7 +32,9 @@
32 property color leftColor32 property color leftColor
33 property color rightColor33 property color rightColor
34 property real progress34 property real progress
35 35 property bool mirror: false
36 property string texCoord: mirror ? "1.0 - qt_TexCoord0.x" : "qt_TexCoord0.x"
37
36 fragmentShader: "38 fragmentShader: "
37 varying highp vec2 qt_TexCoord0;39 varying highp vec2 qt_TexCoord0;
38 uniform sampler2D source;40 uniform sampler2D source;
@@ -43,7 +45,7 @@
4345
44 void main() {46 void main() {
45 lowp vec4 sourceColor = texture2D(source, qt_TexCoord0);47 lowp vec4 sourceColor = texture2D(source, qt_TexCoord0);
46 lowp vec4 newColor = mix(leftColor, rightColor, step(progress, qt_TexCoord0.x));48 lowp vec4 newColor = mix(leftColor, rightColor, step(progress, " + texCoord + "));
47 gl_FragColor = newColor * sourceColor.a * qt_Opacity;49 gl_FragColor = newColor * sourceColor.a * qt_Opacity;
48 }"50 }"
49}51}
5052
=== modified file 'modules/Ubuntu/Components/Themes/Ambiance/PartialColorizeUbuntuShape.qml'
--- modules/Ubuntu/Components/Themes/Ambiance/PartialColorizeUbuntuShape.qml 2013-08-02 12:13:33 +0000
+++ modules/Ubuntu/Components/Themes/Ambiance/PartialColorizeUbuntuShape.qml 2014-01-23 19:11:13 +0000
@@ -27,7 +27,7 @@
2727
28 void main() {28 void main() {
29 lowp vec4 color = texture2D(source, qt_TexCoord0);29 lowp vec4 color = texture2D(source, qt_TexCoord0);
30 lowp vec4 newColor = mix(leftColor, rightColor, step(progress, qt_TexCoord0.x));30 lowp vec4 newColor = mix(leftColor, rightColor, step(progress, " + texCoord + "));
31 highp float opacity = (1.0 - color.r / max(1.0/256.0, color.a));31 highp float opacity = (1.0 - color.r / max(1.0/256.0, color.a));
32 lowp vec4 result = opacity * vec4(0.0, 0.0, 0.0, 1.0) + vec4(1.0 - opacity) * newColor;32 lowp vec4 result = opacity * vec4(0.0, 0.0, 0.0, 1.0) + vec4(1.0 - opacity) * newColor;
33 gl_FragColor = vec4(result.rgb * result.a, result.a) * color.a * qt_Opacity;33 gl_FragColor = vec4(result.rgb * result.a, result.a) * color.a * qt_Opacity;
3434
=== modified file 'modules/Ubuntu/Components/Themes/Ambiance/ProgressBarStyle.qml'
--- modules/Ubuntu/Components/Themes/Ambiance/ProgressBarStyle.qml 2013-08-07 12:26:36 +0000
+++ modules/Ubuntu/Components/Themes/Ambiance/ProgressBarStyle.qml 2014-01-23 19:11:13 +0000
@@ -46,6 +46,7 @@
46 progress: progressBarStyle.progress46 progress: progressBarStyle.progress
47 leftColor: Theme.palette.selected.foreground47 leftColor: Theme.palette.selected.foreground
48 rightColor: Theme.palette.normal.base48 rightColor: Theme.palette.normal.base
49 mirror: Qt.application.layoutDirection == Qt.RightToLeft
49 }50 }
5051
51 Label {52 Label {
@@ -74,5 +75,6 @@
74 leftColor: Theme.palette.selected.foregroundText75 leftColor: Theme.palette.selected.foregroundText
75 rightColor: Theme.palette.normal.baseText76 rightColor: Theme.palette.normal.baseText
76 progress: (progressBarStyle.progress * background.width - valueLabel.x) / valueLabel.width77 progress: (progressBarStyle.progress * background.width - valueLabel.x) / valueLabel.width
78 mirror: Qt.application.layoutDirection == Qt.RightToLeft
77 }79 }
78}80}
7981
=== modified file 'modules/Ubuntu/Components/Themes/Ambiance/ProgressionVisualStyle.qml'
--- modules/Ubuntu/Components/Themes/Ambiance/ProgressionVisualStyle.qml 2013-12-09 12:23:15 +0000
+++ modules/Ubuntu/Components/Themes/Ambiance/ProgressionVisualStyle.qml 2014-01-23 19:11:13 +0000
@@ -34,6 +34,7 @@
34 }34 }
3535
36 opacity: enabled ? 1.0 : 0.536 opacity: enabled ? 1.0 : 0.5
37 mirror: Qt.application.layoutDirection == Qt.RightToLeft
37 }38 }
3839
39 Image {40 Image {
4041
=== modified file 'modules/Ubuntu/Components/Themes/Ambiance/SwitchStyle.qml'
--- modules/Ubuntu/Components/Themes/Ambiance/SwitchStyle.qml 2013-09-02 09:08:52 +0000
+++ modules/Ubuntu/Components/Themes/Ambiance/SwitchStyle.qml 2014-01-23 19:11:13 +0000
@@ -36,6 +36,8 @@
36 implicitWidth: units.gu(10)36 implicitWidth: units.gu(10)
37 implicitHeight: units.gu(5)37 implicitHeight: units.gu(5)
38 opacity: styledItem.enabled ? 1.0 : 0.538 opacity: styledItem.enabled ? 1.0 : 0.5
39 LayoutMirroring.enabled: false
40 LayoutMirroring.childrenInherit: true
3941
40 UbuntuShape {42 UbuntuShape {
41 id: background43 id: background
4244
=== modified file 'modules/Ubuntu/Components/Toolbar.qml'
--- modules/Ubuntu/Components/Toolbar.qml 2013-12-02 21:25:26 +0000
+++ modules/Ubuntu/Components/Toolbar.qml 2014-01-23 19:11:13 +0000
@@ -33,6 +33,9 @@
33 }33 }
34 height: background.height34 height: background.height
3535
36 LayoutMirroring.enabled: Qt.application.layoutDirection == Qt.RightToLeft
37 LayoutMirroring.childrenInherit: true
38
36 // Closing of the toolbar on app contents ineraction is handled by the Page.39 // Closing of the toolbar on app contents ineraction is handled by the Page.
37 __closeOnContentsClicks: false40 __closeOnContentsClicks: false
3841

Subscribers

People subscribed via source and target branches

to status/vote changes: