=== modified file 'GalleryView.qml'
--- GalleryView.qml	2016-02-23 11:46:52 +0000
+++ GalleryView.qml	2016-02-23 11:51:30 +0000
@@ -76,6 +76,7 @@
             model: galleryView.model
             visible: opacity != 0.0
             inView: galleryView.inView && galleryView.currentView == slideshowView
+            focus: inView
             inSelectionMode: main.contentExportMode || galleryView.userSelectionMode
             onToggleSelection: model.toggleSelected(currentIndex)
             onToggleHeader: header.toggle();
@@ -89,6 +90,7 @@
             model: galleryView.model
             visible: opacity != 0.0
             inView: galleryView.inView && galleryView.currentView == photogridView
+            focus: inView
             inSelectionMode: main.contentExportMode || galleryView.userSelectionMode
             onPhotoClicked: {
                 slideshowView.showPhotoAtIndex(index);

=== modified file 'PhotogridView.qml'
--- PhotogridView.qml	2016-02-23 11:46:52 +0000
+++ PhotogridView.qml	2016-02-23 11:51:30 +0000
@@ -22,7 +22,7 @@
 import CameraApp 0.1
 import "MimeTypeMapper.js" as MimeTypeMapper
 
-Item {
+FocusScope {
     id: photogridView
 
     property var model

=== modified file 'SlideshowView.qml'
--- SlideshowView.qml	2016-02-23 11:46:52 +0000
+++ SlideshowView.qml	2016-02-23 11:51:30 +0000
@@ -23,7 +23,7 @@
 import CameraApp 0.1
 import "MimeTypeMapper.js" as MimeTypeMapper
 
-Item {
+FocusScope {
     id: slideshowView
 
     property var model
@@ -111,14 +111,12 @@
 
         anchors.fill: parent
         model: slideshowView.model
+        focus: true
         orientation: ListView.Horizontal
         boundsBehavior: Flickable.StopAtBounds
         cacheBuffer: width
         highlightRangeMode: ListView.StrictlyEnforceRange
-        // FIXME: this disables the animation introduced by highlightRangeMode
-        // happening setting currentIndex; it is necessary at least because we
-        // were hitting https://bugreports.qt-project.org/browse/QTBUG-41035
-        highlightMoveDuration: 0
+        highlightMoveDuration: UbuntuAnimation.FastDuration
         snapMode: ListView.SnapOneItem
         onCountChanged: {
             // currentIndex is -1 by default and stays so until manually set to something else

=== modified file 'ViewFinderOverlay.qml'
--- ViewFinderOverlay.qml	2016-02-23 11:46:52 +0000
+++ ViewFinderOverlay.qml	2016-02-23 11:51:30 +0000
@@ -32,6 +32,7 @@
     property real revealProgress: noSpaceHint.visible ? 1.0 : bottomEdge.progress
     property var controls: controls
     property var settings: settings
+    property int sensorOrientation
     property bool readyForCapture
 
     function showFocusRing(x, y) {
@@ -692,9 +693,8 @@
                     break;
             }
 
-            if (Screen.primaryOrientation == Qt.PortraitOrientation) {
-                orientation += 90;
-            }
+            // account for the orientation of the sensor
+            orientation -= viewFinderOverlay.sensorOrientation;
 
             if (camera.captureMode == Camera.CaptureVideo) {
                 if (main.contentExportMode) {

=== modified file 'ViewFinderOverlayLoader.qml'
--- ViewFinderOverlayLoader.qml	2016-02-23 11:46:52 +0000
+++ ViewFinderOverlayLoader.qml	2016-02-23 11:51:30 +0000
@@ -24,6 +24,7 @@
     property real revealProgress: loader.item ? loader.item.revealProgress : 0
     property var controls: loader.item ? loader.item.controls : null
     property var settings: loader.item.settings
+    property int sensorOrientation
     property bool readyForCapture
 
     function showFocusRing(x, y) {
@@ -37,6 +38,7 @@
     asynchronous: true
     Component.onCompleted: {
         loader.setSource("ViewFinderOverlay.qml", { "camera": loader.camera,
+                                                    "sensorOrientation": Qt.binding(function () {return loader.sensorOrientation}),
                                                     "readyForCapture": Qt.binding(function() { return loader.readyForCapture})
                                                   });
     }

=== modified file 'ViewFinderView.qml'
--- ViewFinderView.qml	2016-02-23 11:46:52 +0000
+++ ViewFinderView.qml	2016-02-23 11:51:30 +0000
@@ -23,7 +23,7 @@
 import QtGraphicalEffects 1.0
 import Ubuntu.Content 0.1
 
-Item {
+FocusScope {
     id: viewFinderView
 
     property bool overlayVisible: true
@@ -265,6 +265,7 @@
                 // Set orientation only at startup because later on Screen.primaryOrientation
                 // may change.
                 orientation = Screen.primaryOrientation === Qt.PortraitOrientation  ? -90 : 0;
+                viewFinderOverlay.sensorOrientation = orientation;
             }
 
             transform: Rotation {

=== modified file 'camera-app.qml'
--- camera-app.qml	2016-02-23 11:46:52 +0000
+++ camera-app.qml	2016-02-23 11:51:30 +0000
@@ -30,6 +30,26 @@
     height: units.gu(80)
     color: "black"
     title: "Camera"
+    // special flag only supported by Unity8/MIR so far that hides the shell's
+    // top panel in Staged mode
+    flags: Qt.Window | 0x00800000
+
+    property int preFullScreenVisibility
+
+    function toggleFullScreen() {
+        if (main.visibility != Window.FullScreen) {
+            preFullScreenVisibility = main.visibility;
+            main.visibility = Window.FullScreen;
+        } else {
+            main.visibility = preFullScreenVisibility;
+        }
+    }
+
+    function exitFullScreen() {
+        if (main.visibility == Window.FullScreen) {
+            main.visibility = preFullScreenVisibility;
+        }
+    }
 
     UnityActions.ActionManager {
         actions: [
@@ -63,11 +83,7 @@
 
     Component.onCompleted: {
         i18n.domain = "camera-app";
-        if (!application.desktopMode) {
-            main.showFullScreen();
-        } else {
-            main.show();
-        }
+        main.show();
     }
 
 
@@ -78,6 +94,15 @@
         flickableDirection: state == "PORTRAIT" ? Flickable.HorizontalFlick : Flickable.VerticalFlick
         boundsBehavior: Flickable.StopAtBounds
 
+        Keys.onPressed: {
+            if (event.key == Qt.Key_F11) {
+                main.toggleFullScreen();
+                event.accepted = true;
+            }
+        }
+        Keys.onEscapePressed: main.exitFullScreen()
+
+
         property real panesMargin: units.gu(1)
         property real ratio
         property int orientationAngle: Screen.angleBetween(Screen.primaryOrientation, Screen.orientation)
@@ -256,6 +281,7 @@
             height: viewSwitcher.height
             overlayVisible: !viewSwitcher.moving && !viewSwitcher.flicking
             inView: viewSwitcher.ratio < 0.5
+            focus: !galleryView.focus
             opacity: inView ? 1.0 : 0.0
             onPhotoTaken: {
                 galleryView.prependMediaToModel(filePath);
@@ -273,6 +299,7 @@
             width: viewSwitcher.width
             height: viewSwitcher.height
             inView: viewSwitcher.ratio > 0.0
+            focus: inView
             onExit: viewSwitcher.switchToViewFinder()
             opacity: inView ? 1.0 : 0.0
         }

