[Libreoffice-commits] core.git: 3 commits - android/sdremote ios/iosremote

siqi me at siqi.fr
Fri Jul 12 02:32:06 PDT 2013


 android/sdremote/res/drawable-xhdpi/ic_launcher.png                                                              |binary
 ios/iosremote/ic_launcher.png                                                                                    |binary
 ios/iosremote/ic_launcher at 2x.png                                                                                 |binary
 ios/iosremote/iosremote.xcodeproj/project.pbxproj                                                                |   58 +-
 ios/iosremote/iosremote.xcodeproj/project.xcworkspace/xcuserdata/siqi.xcuserdatad/UserInterfaceState.xcuserstate |binary
 ios/iosremote/iosremote/AppDelegate.h                                                                            |   22 
 ios/iosremote/iosremote/AppDelegate.m                                                                            |   52 ++
 ios/iosremote/iosremote/Communication/Client.h                                                                   |    3 
 ios/iosremote/iosremote/Communication/Client.m                                                                   |   18 
 ios/iosremote/iosremote/Communication/CommandInterpreter.h                                                       |    2 
 ios/iosremote/iosremote/Communication/CommandInterpreter.m                                                       |   21 
 ios/iosremote/iosremote/Communication/CommunicationManager.h                                                     |    1 
 ios/iosremote/iosremote/Communication/CommunicationManager.m                                                     |   14 
 ios/iosremote/iosremote/Communication/SlideShow.m                                                                |   18 
 ios/iosremote/iosremote/en.lproj/iPhone_autolayout.storyboard                                                    |  260 +++++++---
 ios/iosremote/iosremote/iosremote-Info.plist                                                                     |   15 
 ios/iosremote/iosremote/libreoffice_sdremoteAppDelegate.h                                                        |   15 
 ios/iosremote/iosremote/libreoffice_sdremoteAppDelegate.m                                                        |   46 -
 ios/iosremote/iosremote/main.m                                                                                   |    4 
 ios/iosremote/iosremote/serverList_vc.m                                                                          |    8 
 ios/iosremote/iosremote/slideShowPreviewTable_vc.h                                                               |    5 
 ios/iosremote/iosremote/slideShowPreviewTable_vc.m                                                               |   16 
 ios/iosremote/iosremote/slideShowSwipeInList.h                                                                   |    3 
 ios/iosremote/iosremote/slideShowSwipeInList.m                                                                   |   69 ++
 ios/iosremote/iosremote/slideShow_vc.h                                                                           |    8 
 ios/iosremote/iosremote/slideShow_vc.m                                                                           |  239 ++++++++-
 ios/iosremote/iosremote/touchPointer_vc.h                                                                        |   17 
 ios/iosremote/iosremote/touchPointer_vc.m                                                                        |   61 ++
 28 files changed, 762 insertions(+), 213 deletions(-)

New commits:
commit 544fd39ed3abe5d5a1699ae009c6ff797a3dfba6
Author: siqi <me at siqi.fr>
Date:   Fri Jul 12 11:31:34 2013 +0200

    swipe in sidebar improvement
    
    Change-Id: I7834d5ae8013004d080d433e4625a0a60bd5877a

diff --git a/ios/iosremote/iosremote.xcodeproj/project.pbxproj b/ios/iosremote/iosremote.xcodeproj/project.pbxproj
index 89b16ea..7b8bdde 100644
--- a/ios/iosremote/iosremote.xcodeproj/project.pbxproj
+++ b/ios/iosremote/iosremote.xcodeproj/project.pbxproj
@@ -49,6 +49,7 @@
 		57DC7007178D84490050FC58 /* CoreMotion.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 57DC7006178D84490050FC58 /* CoreMotion.framework */; };
 		57DC700F178E03330050FC58 /* touchPointer_vc.m in Sources */ = {isa = PBXBuildFile; fileRef = 57DC700E178E03330050FC58 /* touchPointer_vc.m */; };
 		57DC7012178E16A40050FC58 /* setRecursiveUserInteraction.m in Sources */ = {isa = PBXBuildFile; fileRef = 57DC7011178E16A40050FC58 /* setRecursiveUserInteraction.m */; };
+		57DF0A85178FFFAB008B2D3D /* iPhone_spring&strut.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 57DF0A83178FFFAB008B2D3D /* iPhone_spring&strut.storyboard */; };
 		57FE71E31785C61400B50125 /* pinValidation_vc.m in Sources */ = {isa = PBXBuildFile; fileRef = 57FE71E21785C61400B50125 /* pinValidation_vc.m */; };
 		57FE71E61785D7FE00B50125 /* slideShowPreview_vc.m in Sources */ = {isa = PBXBuildFile; fileRef = 57FE71E51785D7FE00B50125 /* slideShowPreview_vc.m */; };
 		57FE71E917861A9000B50125 /* slideShowPreviewTable_vc.m in Sources */ = {isa = PBXBuildFile; fileRef = 57FE71E817861A9000B50125 /* slideShowPreviewTable_vc.m */; };
@@ -118,6 +119,7 @@
 		57DC700E178E03330050FC58 /* touchPointer_vc.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = touchPointer_vc.m; sourceTree = "<group>"; };
 		57DC7010178E16A40050FC58 /* setRecursiveUserInteraction.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = setRecursiveUserInteraction.h; sourceTree = "<group>"; };
 		57DC7011178E16A40050FC58 /* setRecursiveUserInteraction.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = setRecursiveUserInteraction.m; sourceTree = "<group>"; };
+		57DF0A84178FFFAB008B2D3D /* en */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = en; path = "en.lproj/iPhone_spring&strut.storyboard"; sourceTree = "<group>"; };
 		57FE71E11785C61300B50125 /* pinValidation_vc.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = pinValidation_vc.h; path = Communication/pinValidation_vc.h; sourceTree = "<group>"; };
 		57FE71E21785C61400B50125 /* pinValidation_vc.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = pinValidation_vc.m; path = Communication/pinValidation_vc.m; sourceTree = "<group>"; };
 		57FE71E41785D7FE00B50125 /* slideShowPreview_vc.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = slideShowPreview_vc.h; sourceTree = "<group>"; };
@@ -237,12 +239,10 @@
 			isa = PBXGroup;
 			children = (
 				57C6E3F9175E06E800E8BC5F /* Supporting Files */,
-				57C6E40A175E06E800E8BC5F /* iPhone_autolayout.storyboard */,
+				57DF0A78178FFF8C008B2D3D /* StoryBoards */,
 				57FE71E11785C61300B50125 /* pinValidation_vc.h */,
 				57FE71E21785C61400B50125 /* pinValidation_vc.m */,
 				57AEEDAB1789443D007F4F97 /* slideShowPreview */,
-				57C6E401175E06E800E8BC5F /* AppDelegate.h */,
-				57C6E402175E06E800E8BC5F /* AppDelegate.m */,
 				571BFAD2178AB7BA00EF1BDB /* slideShow */,
 				5753DD9717834D7100DB71BB /* newServer_vc.h */,
 				5753DD9817834D7100DB71BB /* newServer_vc.m */,
@@ -258,6 +258,8 @@
 				57701736178AC83E00B99793 /* SWRevealViewController */,
 				57B152971764703500EECC67 /* Base64.h */,
 				57B152981764703500EECC67 /* Base64.m */,
+				57C6E401175E06E800E8BC5F /* AppDelegate.h */,
+				57C6E402175E06E800E8BC5F /* AppDelegate.m */,
 				57CFED9717838FDC00E82E05 /* EditableTableViewCell.h */,
 				57CFED9817838FDC00E82E05 /* EditableTableViewCell.m */,
 				57C6E3FA175E06E800E8BC5F /* iosremote-Info.plist */,
@@ -291,6 +293,15 @@
 			path = iosremote/Communication;
 			sourceTree = "<group>";
 		};
+		57DF0A78178FFF8C008B2D3D /* StoryBoards */ = {
+			isa = PBXGroup;
+			children = (
+				57DF0A83178FFFAB008B2D3D /* iPhone_spring&strut.storyboard */,
+				57C6E40A175E06E800E8BC5F /* iPhone_autolayout.storyboard */,
+			);
+			name = StoryBoards;
+			sourceTree = "<group>";
+		};
 /* End PBXGroup section */
 
 /* Begin PBXNativeTarget section */
@@ -363,6 +374,7 @@
 				57CC48C7178B42A400075DE4 /* timer_resume_btn.png in Resources */,
 				57DC7003178D82610050FC58 /* ic_launcher.png in Resources */,
 				57DC7005178D82940050FC58 /* ic_launcher at 2x.png in Resources */,
+				57DF0A85178FFFAB008B2D3D /* iPhone_spring&strut.storyboard in Resources */,
 			);
 			runOnlyForDeploymentPostprocessing = 0;
 		};
@@ -416,6 +428,14 @@
 			name = iPhone_autolayout.storyboard;
 			sourceTree = "<group>";
 		};
+		57DF0A83178FFFAB008B2D3D /* iPhone_spring&strut.storyboard */ = {
+			isa = PBXVariantGroup;
+			children = (
+				57DF0A84178FFFAB008B2D3D /* en */,
+			);
+			name = "iPhone_spring&strut.storyboard";
+			sourceTree = "<group>";
+		};
 /* End PBXVariantGroup section */
 
 /* Begin XCBuildConfiguration section */
diff --git a/ios/iosremote/iosremote.xcodeproj/project.xcworkspace/xcuserdata/siqi.xcuserdatad/UserInterfaceState.xcuserstate b/ios/iosremote/iosremote.xcodeproj/project.xcworkspace/xcuserdata/siqi.xcuserdatad/UserInterfaceState.xcuserstate
index 78e830a..931853b 100644
Binary files a/ios/iosremote/iosremote.xcodeproj/project.xcworkspace/xcuserdata/siqi.xcuserdatad/UserInterfaceState.xcuserstate and b/ios/iosremote/iosremote.xcodeproj/project.xcworkspace/xcuserdata/siqi.xcuserdatad/UserInterfaceState.xcuserstate differ
diff --git a/ios/iosremote/iosremote/Communication/Client.h b/ios/iosremote/iosremote/Communication/Client.h
index 51674fd..50f1d40 100644
--- a/ios/iosremote/iosremote/Communication/Client.h
+++ b/ios/iosremote/iosremote/Communication/Client.h
@@ -28,6 +28,9 @@
 
 - (void) sendCommand:(NSString *)aCommand;
 
+- (void)startConnectionTimeoutTimerwithInterval:(double) interval;
+- (void)stopConnectionTimeoutTimer;
+
 -(void)stream:(NSStream *)stream handleEvent:(NSStreamEvent)eventCode;
 
 @end
\ No newline at end of file
diff --git a/ios/iosremote/iosremote/Communication/Client.m b/ios/iosremote/iosremote/Communication/Client.m
index 09fdf6a..1320de1 100644
--- a/ios/iosremote/iosremote/Communication/Client.m
+++ b/ios/iosremote/iosremote/Communication/Client.m
@@ -11,6 +11,7 @@
 #import "Server.h"
 #import "CommandInterpreter.h"
 #import "CommunicationManager.h"
+#import "serverList_vc.h"
 
 #define CHARSET @"UTF-8"
 
@@ -60,12 +61,11 @@ dispatch_queue_t backgroundQueue;
     return self;
 }
 
-- (void)startConnectionTimeoutTimer
+#pragma mark - Connection timeout handling
+- (void)startConnectionTimeoutTimerwithInterval:(double) interval
 {
     [self stopConnectionTimeoutTimer]; // Or make sure any existing timer is stopped before this method is called
 
-    NSTimeInterval interval = 3.0; // Measured in seconds, is a double
-
     self.connectionTimeoutTimer = [NSTimer scheduledTimerWithTimeInterval:interval
                                                                    target:self
                                                                  selector:@selector(handleConnectionTimeout)
@@ -75,9 +75,11 @@ dispatch_queue_t backgroundQueue;
 
 - (void)handleConnectionTimeout
 {
-    NSLog(@"handleConnectionTimeout");
-    [self disconnect];
-    [[NSNotificationCenter defaultCenter]postNotificationName:@"connection.status.disconnected" object:nil];
+    if (self.comManager.state == CONNECTING){
+        NSLog(@"handleConnectionTimeout");
+        [self disconnect];
+        [[NSNotificationCenter defaultCenter]postNotificationName:@"connection.status.disconnected" object:nil];
+    }
 }
 
 - (void)dealloc
@@ -224,7 +226,7 @@ int count = 0;
 
 - (void) connect
 {
-    [self startConnectionTimeoutTimer];
+    [self startConnectionTimeoutTimerwithInterval:3.0];
     backgroundQueue = dispatch_queue_create("com.libreoffice.iosremote", NULL);
     dispatch_async(backgroundQueue, ^(void) {
         [self streamOpenWithIp:self.server.serverAddress withPortNumber:self.mPort];
diff --git a/ios/iosremote/iosremote/Communication/CommandInterpreter.m b/ios/iosremote/iosremote/Communication/CommandInterpreter.m
index c3455ca..4c1b2f5 100644
--- a/ios/iosremote/iosremote/Communication/CommandInterpreter.m
+++ b/ios/iosremote/iosremote/Communication/CommandInterpreter.m
@@ -78,7 +78,7 @@ dispatch_queue_t backgroundQueue;
             [[NSNotificationCenter defaultCenter] postNotificationName:MSG_SLIDE_CHANGED object:nil];
             marker = 3;
         } else if ([instruction isEqualToString:@"slide_preview"]){
-            NSLog(@"Interpreter: slide_preview");
+//            NSLog(@"Interpreter: slide_preview");
             backgroundQueue = dispatch_queue_create("com.libreoffice.iosremote", NULL);
             dispatch_async(backgroundQueue, ^(void) {
                 uint slideNumber = [[command objectAtIndex:1] integerValue];
@@ -88,7 +88,7 @@ dispatch_queue_t backgroundQueue;
             });
             marker = 4;
         } else if ([instruction isEqualToString:@"slide_notes"]){
-            NSLog(@"Interpreter: slide_notes");
+//            NSLog(@"Interpreter: slide_notes");
             backgroundQueue = dispatch_queue_create("com.libreoffice.iosremote", NULL);
             uint slideNumber = [[command objectAtIndex:1] integerValue];
             NSMutableString *notes = [[NSMutableString alloc] init];
diff --git a/ios/iosremote/iosremote/Communication/CommunicationManager.h b/ios/iosremote/iosremote/Communication/CommunicationManager.h
index 2c57dc0..d4a1f75 100644
--- a/ios/iosremote/iosremote/Communication/CommunicationManager.h
+++ b/ios/iosremote/iosremote/Communication/CommunicationManager.h
@@ -72,6 +72,7 @@ enum ConnectionState : NSInteger {
 @property ConnectionState state;
 @property (nonatomic, strong) id delegate;
 @property (atomic, strong) NSMutableArray* servers;
+ at property (nonatomic, strong) Client* client;
 @property (nonatomic, strong) CommandInterpreter* interpreter;
 @property (nonatomic, strong) CommandTransmitter* transmitter;
 
diff --git a/ios/iosremote/iosremote/Communication/CommunicationManager.m b/ios/iosremote/iosremote/Communication/CommunicationManager.m
index 52a8266..683f1f7 100644
--- a/ios/iosremote/iosremote/Communication/CommunicationManager.m
+++ b/ios/iosremote/iosremote/Communication/CommunicationManager.m
@@ -19,9 +19,6 @@
 #define ExistingServersKey @"CommunicationManager.ExistingServers"
 
 @interface CommunicationManager()
-
- at property (nonatomic, strong) Client* client;
-
 @end
 
 // Singlton Pattern
@@ -52,6 +49,8 @@
     if([[note name] isEqualToString:@"connection.status.connected"]){
         if (self.state!=CONNECTED){
             NSLog(@"Connected, waiting for pairing response");
+            // A 5 seconds timer waiting for pairing response. 
+            [self.client startConnectionTimeoutTimerwithInterval:5.0];
             self.transmitter = [[CommandTransmitter alloc] initWithClient:self.client];
         }
     } else if ([[note name] isEqualToString:@"connection.status.disconnected"]){
diff --git a/ios/iosremote/iosremote/en.lproj/iPhone_autolayout.storyboard b/ios/iosremote/iosremote/en.lproj/iPhone_autolayout.storyboard
index c900f65..850d83f 100644
--- a/ios/iosremote/iosremote/en.lproj/iPhone_autolayout.storyboard
+++ b/ios/iosremote/iosremote/en.lproj/iPhone_autolayout.storyboard
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<document type="com.apple.InterfaceBuilder3.CocoaTouch.Storyboard.XIB" version="2.0" toolsVersion="3084" systemVersion="13A497d" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" initialViewController="qoG-TN-hN0">
+<document type="com.apple.InterfaceBuilder3.CocoaTouch.Storyboard.XIB" version="2.0" toolsVersion="3084" systemVersion="13A510d" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" initialViewController="qoG-TN-hN0">
     <dependencies>
         <plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="2083"/>
     </dependencies>
@@ -330,14 +330,17 @@
                                                 <constraint firstAttribute="height" constant="122" id="idF-T1-zdQ"/>
                                             </constraints>
                                         </imageView>
-                                        <label opaque="NO" clipsSubviews="YES" userInteractionEnabled="NO" tag="2" contentMode="left" text="1" textAlignment="center" lineBreakMode="tailTruncation" numberOfLines="2" baselineAdjustment="alignBaselines" minimumScaleFactor="1" preferredMaxLayoutWidth="29" translatesAutoresizingMaskIntoConstraints="NO" id="yWM-Nx-KmF">
+                                        <label clipsSubviews="YES" userInteractionEnabled="NO" tag="2" contentMode="left" text="1" textAlignment="center" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" minimumScaleFactor="1" highlighted="YES" translatesAutoresizingMaskIntoConstraints="NO" id="yWM-Nx-KmF">
                                             <color key="backgroundColor" white="0.66666666666666663" alpha="1" colorSpace="calibratedWhite"/>
+                                            <accessibility key="accessibilityConfiguration">
+                                                <accessibilityTraits key="traits" none="YES" selected="YES" staticText="YES"/>
+                                            </accessibility>
                                             <constraints>
                                                 <constraint firstAttribute="width" constant="29" id="d7p-Jx-M0G"/>
                                             </constraints>
                                             <fontDescription key="fontDescription" type="system" pointSize="17"/>
                                             <color key="textColor" red="1" green="1" blue="1" alpha="1" colorSpace="calibratedRGB"/>
-                                            <color key="highlightedColor" white="1" alpha="1" colorSpace="calibratedWhite"/>
+                                            <nil key="highlightedColor"/>
                                         </label>
                                     </subviews>
                                     <color key="backgroundColor" white="0.0" alpha="0.0" colorSpace="calibratedWhite"/>
@@ -358,9 +361,6 @@
                             <outlet property="delegate" destination="5d0-J5-Cal" id="QXg-wT-RSm"/>
                         </connections>
                     </tableView>
-                    <connections>
-                        <outlet property="slidesTable" destination="Ke1-ze-r00" id="Jvb-7c-oza"/>
-                    </connections>
                 </tableViewController>
                 <placeholder placeholderIdentifier="IBFirstResponder" id="Fb5-Zn-HeE" userLabel="First Responder" sceneMemberID="firstResponder"/>
             </objects>
@@ -721,9 +721,8 @@
                         <subviews>
                             <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="2Zo-K8-3NM">
                                 <subviews>
-                                    <label opaque="NO" clipsSubviews="YES" userInteractionEnabled="NO" contentMode="left" text="Title of the presentation" textAlignment="center" lineBreakMode="tailTruncation" numberOfLines="5" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" preferredMaxLayoutWidth="178" translatesAutoresizingMaskIntoConstraints="NO" id="nJf-ed-YfY">
+                                    <label opaque="NO" clipsSubviews="YES" userInteractionEnabled="NO" contentMode="left" text="Title of the presentation(TODO)" textAlignment="center" lineBreakMode="tailTruncation" numberOfLines="5" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" preferredMaxLayoutWidth="178" translatesAutoresizingMaskIntoConstraints="NO" id="nJf-ed-YfY">
                                         <constraints>
-                                            <constraint firstAttribute="height" constant="56" type="user" id="VUf-zJ-vPG"/>
                                             <constraint firstAttribute="width" constant="178" id="wto-RF-nap"/>
                                         </constraints>
                                         <fontDescription key="fontDescription" type="boldSystem" pointSize="25"/>
@@ -773,7 +772,6 @@
                                     <constraint firstItem="g5m-gQ-o0u" firstAttribute="leading" relation="greaterThanOrEqual" secondItem="2Zo-K8-3NM" secondAttribute="leading" constant="32" type="user" id="VP2-HW-0K1"/>
                                     <constraint firstItem="Dds-oJ-Uhh" firstAttribute="leading" secondItem="mrB-Wd-OcP" secondAttribute="leading" type="user" id="WW4-GU-mSH"/>
                                     <constraint firstItem="Dds-oJ-Uhh" firstAttribute="top" secondItem="g5m-gQ-o0u" secondAttribute="bottom" constant="8" symbolic="YES" type="user" id="gtQ-av-tu7"/>
-                                    <constraint firstAttribute="bottom" secondItem="mrB-Wd-OcP" secondAttribute="bottom" constant="20" symbolic="YES" type="user" id="imp-d1-gQ3"/>
                                     <constraint firstAttribute="height" constant="169" type="user" id="kbX-jk-qBX"/>
                                     <constraint firstItem="nJf-ed-YfY" firstAttribute="centerX" secondItem="2Zo-K8-3NM" secondAttribute="centerX" type="default" id="qYz-zW-Lfz"/>
                                     <constraint firstItem="nJf-ed-YfY" firstAttribute="top" secondItem="2Zo-K8-3NM" secondAttribute="top" constant="20" symbolic="YES" type="user" id="qcW-Ip-dGx"/>
@@ -840,7 +838,6 @@
         <class className="slideShowPreviewTable_vc" superclassName="UITableViewController">
             <source key="sourceIdentifier" type="project" relativePath="./Classes/slideShowPreviewTable_vc.h"/>
             <relationships>
-                <relationship kind="action" name="startPresentationAction:"/>
                 <relationship kind="outlet" name="optionsTable" candidateClass="UITableView"/>
             </relationships>
         </class>
@@ -849,7 +846,6 @@
             <relationships>
                 <relationship kind="action" name="stopWatchClear:"/>
                 <relationship kind="action" name="stopWatchStart:"/>
-                <relationship kind="outlet" name="slidesTable" candidateClass="UITableView"/>
             </relationships>
         </class>
         <class className="slideShow_vc" superclassName="UIViewController">
diff --git a/ios/iosremote/iosremote/serverList_vc.m b/ios/iosremote/iosremote/serverList_vc.m
index 8493ff5..5d26463 100644
--- a/ios/iosremote/iosremote/serverList_vc.m
+++ b/ios/iosremote/iosremote/serverList_vc.m
@@ -10,6 +10,7 @@
 #import "CommunicationManager.h"
 #import "newServer_vc.h"
 #import "Server.h"
+#import "Client.h"
 
 @interface server_list_vc ()
 
@@ -61,6 +62,7 @@
                                                                                    object:nil
                                                                                     queue:mainQueue
                                                                                usingBlock:^(NSNotification *note) {
+                                                                                   [self.comManager.client stopConnectionTimeoutTimer];
                                                                                    self.comManager.state = CONNECTED;
                                                                                    [self disableSpinner];
                                                                                    [self performSegueWithIdentifier:@"pinValidation" sender:self ];
@@ -69,6 +71,7 @@
                                                                                            object:nil
                                                                                             queue:mainQueue
                                                                                        usingBlock:^(NSNotification *note) {
+                                                                                           [self.comManager.client stopConnectionTimeoutTimer];
                                                                                            self.comManager.state = CONNECTED;
                                                                                            [self disableSpinner];
                                                                                            [self performSegueWithIdentifier:@"SlideShowPreview" sender:self ];
@@ -128,7 +131,6 @@
     }
 
     NSLog(@"Connecting to %@:%@", [[self.comManager.servers objectAtIndex:indexPath.row] serverName], [[self.comManager.servers objectAtIndex:indexPath.row] serverAddress]);
-    self.comManager.delegate = self;
     [self.comManager connectToServer:[self.comManager.servers objectAtIndex:indexPath.row]];
     [tableView deselectRowAtIndexPath:indexPath animated:YES];
 }
diff --git a/ios/iosremote/iosremote/slideShowSwipeInList.h b/ios/iosremote/iosremote/slideShowSwipeInList.h
index 8b10604..d95ba94 100644
--- a/ios/iosremote/iosremote/slideShowSwipeInList.h
+++ b/ios/iosremote/iosremote/slideShowSwipeInList.h
@@ -14,7 +14,4 @@
 @property (strong, nonatomic) NSTimer *stopWatchTimer;
 @property (strong, nonatomic) NSDate *startDate;
 
-
- at property (strong, nonatomic) IBOutlet UITableView *slidesTable;
-
 @end
diff --git a/ios/iosremote/iosremote/slideShowSwipeInList.m b/ios/iosremote/iosremote/slideShowSwipeInList.m
index 2628800..011fccc 100644
--- a/ios/iosremote/iosremote/slideShowSwipeInList.m
+++ b/ios/iosremote/iosremote/slideShowSwipeInList.m
@@ -43,11 +43,20 @@ dispatch_queue_t backgroundQueue;
     self.slideshow = self.comManager.interpreter.slideShow;
     self.slideshow.secondaryDelegate = self;
     self.state = TIMER_STATE_CLEARED;
-
     if ([[NSUserDefaults standardUserDefaults] boolForKey:KEY_TIMER]) {
-        UIButton *l = (UIButton *)[[self.slidesTable cellForRowAtIndexPath:[NSIndexPath indexPathForItem:0 inSection:0]] viewWithTag:2];
-        [self stopWatchStart:l];
+        [self stopWatchStart:nil];
     }
+    self.clearsSelectionOnViewWillAppear = NO;
+}
+
+- (void) viewDidAppear:(BOOL)animated
+{
+    [self changeStartButtonIconForButton:nil];
+    NSIndexPath *indexPath = [NSIndexPath indexPathForItem:self.slideshow.currentSlide
+                                                inSection:1];
+    [self.tableView selectRowAtIndexPath:indexPath animated:NO scrollPosition:UITableViewScrollPositionNone];
+    [self.tableView scrollToRowAtIndexPath:indexPath atScrollPosition:UITableViewScrollPositionMiddle animated:NO];
+    [[[self.tableView cellForRowAtIndexPath:indexPath] viewWithTag:2] setBackgroundColor:[UIColor lightGrayColor]];
 }
 
 - (void) prepareForSegue: (UIStoryboardSegue *) segue sender: (id) sender
@@ -77,15 +86,37 @@ dispatch_queue_t backgroundQueue;
 
 #pragma mark - Table view data source
 
+- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView
+{
+    return 2;
+}
+
 - (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
 {
-    // +1 for stopwatch
-    return [self.slideshow size]+1;
+    // Section one used for stopwatch
+    if (section == 0)
+        return 1;
+    else
+        return [self.slideshow size];
+}
+
+- (NSString *)tableView:(UITableView *)tableView titleForHeaderInSection:(NSInteger)section
+{
+    switch (section) {
+        case 0:
+            return @"Stop Watch";
+            break;
+        case 1:
+            return @"Slides";
+        default:
+            break;
+    }
+    return nil;
 }
 
 - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
 {
-    if (indexPath.row == 0) {
+    if (indexPath.section == 0) {
         static NSString *CellIdentifier = @"stopWatch";
 
         UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier: CellIdentifier];
@@ -98,26 +129,25 @@ dispatch_queue_t backgroundQueue;
         UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier: CellIdentifier];
         UILabel * slideNumber = (UILabel *)[cell viewWithTag:2];
 
+        // Starting 20, all tags are used for thumbnails in this sidebar
         [cell setTag:20+indexPath.row];
-        [self.slideshow getContentAtIndex:indexPath.row-1 forView:cell];
-        [slideNumber setText:[NSString stringWithFormat:@"%u", indexPath.row]];
+        [self.slideshow getContentAtIndex:indexPath.row forView:cell];
+        [slideNumber setText:[NSString stringWithFormat:@"%u", indexPath.row+1]];
         return cell;
     }
 }
 
-
 - (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
 {
-    if (indexPath.row == 0)
+    if (indexPath.section == 0)
         return;
-    [self.comManager.transmitter gotoSlide:indexPath.row - 1];
+    [self.comManager.transmitter gotoSlide:indexPath.row];
+    [[[self.tableView cellForRowAtIndexPath:indexPath] viewWithTag:2] setBackgroundColor:[UIColor lightGrayColor]];
     [self.revealViewController revealToggle: self];
-    [tableView deselectRowAtIndexPath:indexPath animated:YES];
 }
 
 
 - (void)viewDidUnload {
-    [self setSlidesTable:nil];
     [super viewDidUnload];
 }
 
@@ -135,7 +165,7 @@ dispatch_queue_t backgroundQueue;
 
     // Format the elapsed time and set it to the label
     NSString *timeString = [dateFormatter stringFromDate:timerDate];
-    UILabel *l = (UILabel *)[[self.slidesTable cellForRowAtIndexPath:[NSIndexPath indexPathForItem:0 inSection:0]] viewWithTag:1];
+    UILabel *l = (UILabel *)[[self.tableView cellForRowAtIndexPath:[NSIndexPath indexPathForItem:0 inSection:0]] viewWithTag:1];
     l.text = timeString;
 }
 
@@ -170,8 +200,15 @@ dispatch_queue_t backgroundQueue;
             break;
     }
 
-    UIButton * btn = (UIButton *)sender;
+    [self changeStartButtonIconForButton:sender];
+}
 
+- (void) changeStartButtonIconForButton:(UIButton *)sender
+{
+    UIButton * btn = sender;
+    if (!btn) {
+        btn = (UIButton *)[[self.tableView cellForRowAtIndexPath:[NSIndexPath indexPathForItem:0 inSection:0]] viewWithTag:2];
+    }
     switch (self.state) {
         case TIMER_STATE_RUNNING:
             [btn setImage:[UIImage imageNamed:@"timer_pause_btn"] forState:UIControlStateNormal];
@@ -194,7 +231,7 @@ dispatch_queue_t backgroundQueue;
     self.lastInterval = 0;
     self.state = TIMER_STATE_CLEARED;
 
-    UIButton *l = (UIButton *)[[self.slidesTable cellForRowAtIndexPath:[NSIndexPath indexPathForItem:0 inSection:0]] viewWithTag:2];
+    UIButton *l = (UIButton *)[[self.tableView cellForRowAtIndexPath:[NSIndexPath indexPathForItem:0 inSection:0]] viewWithTag:2];
     [l setImage:[UIImage imageNamed:@"timer_start_btn"] forState:UIControlStateNormal];
     [self updateTimer];
 }
commit d3c31b6fccd605ced0c7657916c38cda02206b11
Author: siqi <me at siqi.fr>
Date:   Thu Jul 11 22:21:06 2013 +0200

    two pointer mode implemented & various bug fixes
    
    Change-Id: Ib927b7a463d29838fd16eb62dc23a05a230c0274

diff --git a/ios/iosremote/iosremote.xcodeproj/project.xcworkspace/xcuserdata/siqi.xcuserdatad/UserInterfaceState.xcuserstate b/ios/iosremote/iosremote.xcodeproj/project.xcworkspace/xcuserdata/siqi.xcuserdatad/UserInterfaceState.xcuserstate
index a7650de..78e830a 100644
Binary files a/ios/iosremote/iosremote.xcodeproj/project.xcworkspace/xcuserdata/siqi.xcuserdatad/UserInterfaceState.xcuserstate and b/ios/iosremote/iosremote.xcodeproj/project.xcworkspace/xcuserdata/siqi.xcuserdatad/UserInterfaceState.xcuserstate differ
diff --git a/ios/iosremote/iosremote/Communication/CommunicationManager.m b/ios/iosremote/iosremote/Communication/CommunicationManager.m
index 1ac878d..52a8266 100644
--- a/ios/iosremote/iosremote/Communication/CommunicationManager.m
+++ b/ios/iosremote/iosremote/Communication/CommunicationManager.m
@@ -49,15 +49,14 @@
 
 - (void) connectionStatusHandler:(NSNotification *)note
 {
-    if ([self.delegate respondsToSelector:@selector(disableSpinner)])
-        [self.delegate disableSpinner];
     if([[note name] isEqualToString:@"connection.status.connected"]){
         if (self.state!=CONNECTED){
-            NSLog(@"Connected");
+            NSLog(@"Connected, waiting for pairing response");
             self.transmitter = [[CommandTransmitter alloc] initWithClient:self.client];
-            self.state = CONNECTED;
         }
     } else if ([[note name] isEqualToString:@"connection.status.disconnected"]){
+        if ([self.delegate respondsToSelector:@selector(disableSpinner)])
+            [self.delegate disableSpinner];
         if (self.state != DISCONNECTED) {
             NSLog(@"Connection Failed");
             self.state = DISCONNECTED;
@@ -118,8 +117,8 @@
     if (self.state == CONNECTING) {
         return;
     } else {
-            self.state = CONNECTING;
             [self.client disconnect];
+            self.state = CONNECTING;
             // initialise it with a given server
             self.client = [[Client alloc]initWithServer:server managedBy:self interpretedBy:self.interpreter];
             self.transmitter = [[CommandTransmitter alloc] initWithClient:self.client];
diff --git a/ios/iosremote/iosremote/en.lproj/iPhone_autolayout.storyboard b/ios/iosremote/iosremote/en.lproj/iPhone_autolayout.storyboard
index 5fbdb23..c900f65 100644
--- a/ios/iosremote/iosremote/en.lproj/iPhone_autolayout.storyboard
+++ b/ios/iosremote/iosremote/en.lproj/iPhone_autolayout.storyboard
@@ -460,31 +460,18 @@
                                     <accessibilityTraits key="traits" none="YES" notEnabled="YES"/>
                                 </accessibility>
                             </view>
-                            <scrollView hidden="YES" multipleTouchEnabled="YES" contentMode="scaleToFill" verticalCompressionResistancePriority="1000" scrollEnabled="NO" translatesAutoresizingMaskIntoConstraints="NO" id="sco-8x-zSx">
-                                <subviews>
-                                    <imageView hidden="YES" userInteractionEnabled="NO" alpha="0.0" contentMode="scaleAspectFit" image="ic_launcher at 2x.png" translatesAutoresizingMaskIntoConstraints="NO" id="ExH-sw-Z1i">
-                                        <constraints>
-                                            <constraint firstAttribute="height" constant="251" type="user" id="fag-vU-Fek"/>
-                                        </constraints>
-                                    </imageView>
-                                    <view hidden="YES" contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="iCc-m2-vR5" userLabel="pointer">
-                                        <color key="backgroundColor" red="1" green="0.0" blue="0.0" alpha="1" colorSpace="calibratedRGB"/>
-                                        <constraints>
-                                            <constraint firstAttribute="width" constant="5" id="Pvc-0L-c6j"/>
-                                            <constraint firstAttribute="height" constant="5" id="pYn-Z0-Lv4"/>
-                                        </constraints>
-                                    </view>
-                                </subviews>
+                            <imageView hidden="YES" alpha="0.0" contentMode="scaleAspectFit" image="ic_launcher at 2x.png" translatesAutoresizingMaskIntoConstraints="NO" id="ExH-sw-Z1i">
                                 <constraints>
-                                    <constraint firstItem="iCc-m2-vR5" firstAttribute="centerY" secondItem="ExH-sw-Z1i" secondAttribute="centerY" type="user" id="1ij-Ea-epv"/>
-                                    <constraint firstItem="ExH-sw-Z1i" firstAttribute="centerX" secondItem="sco-8x-zSx" secondAttribute="centerX" type="default" id="HzU-KT-Di4"/>
-                                    <constraint firstItem="ExH-sw-Z1i" firstAttribute="centerY" secondItem="sco-8x-zSx" secondAttribute="centerY" type="default" id="Jp6-hL-zFM"/>
-                                    <constraint firstItem="ExH-sw-Z1i" firstAttribute="leading" secondItem="sco-8x-zSx" secondAttribute="leading" type="default" id="Mlu-wO-svM"/>
-                                    <constraint firstItem="iCc-m2-vR5" firstAttribute="centerX" secondItem="ExH-sw-Z1i" secondAttribute="centerX" type="user" id="W0H-CC-5rY"/>
-                                    <constraint firstItem="ExH-sw-Z1i" firstAttribute="trailing" secondItem="sco-8x-zSx" secondAttribute="trailing" type="default" id="cE4-Q3-f4A"/>
-                                    <constraint firstAttribute="bottom" secondItem="ExH-sw-Z1i" secondAttribute="bottom" constant="149" id="vm4-SB-sLt"/>
+                                    <constraint firstAttribute="height" constant="253" id="li4-9E-WeL"/>
                                 </constraints>
-                            </scrollView>
+                            </imageView>
+                            <view hidden="YES" contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="iCc-m2-vR5" userLabel="pointer">
+                                <color key="backgroundColor" red="1" green="0.0" blue="0.0" alpha="1" colorSpace="calibratedRGB"/>
+                                <constraints>
+                                    <constraint firstAttribute="width" constant="5" id="Pvc-0L-c6j"/>
+                                    <constraint firstAttribute="height" constant="5" id="pYn-Z0-Lv4"/>
+                                </constraints>
+                            </view>
                             <view contentMode="scaleToFill" restorationIdentifier="" translatesAutoresizingMaskIntoConstraints="NO" id="3od-5c-yzI" userLabel="Bottom">
                                 <subviews>
                                     <button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="vh9-Zy-DPu">
@@ -555,24 +542,25 @@
                         </subviews>
                         <color key="backgroundColor" red="0.90196079015731812" green="0.90196079015731812" blue="0.90196079015731812" alpha="1" colorSpace="calibratedRGB"/>
                         <constraints>
+                            <constraint firstItem="ExH-sw-Z1i" firstAttribute="trailing" secondItem="Xty-aF-WDv" secondAttribute="trailing" type="default" id="5D0-O5-xr5"/>
                             <constraint firstItem="evg-Ah-Kcw" firstAttribute="leading" secondItem="Xty-aF-WDv" secondAttribute="leading" constant="-13" id="5Ku-go-4Y7"/>
                             <constraint firstItem="3od-5c-yzI" firstAttribute="leading" secondItem="Xty-aF-WDv" secondAttribute="leading" type="default" id="5et-XH-ZVD"/>
-                            <constraint firstItem="sco-8x-zSx" firstAttribute="centerY" secondItem="Xty-aF-WDv" secondAttribute="centerY" type="default" id="5g1-xQ-Rjo"/>
                             <constraint firstItem="uSh-Ne-BdH" firstAttribute="top" secondItem="Xty-aF-WDv" secondAttribute="top" type="default" id="5oi-ag-u6c"/>
                             <constraint firstAttribute="bottom" secondItem="uSh-Ne-BdH" secondAttribute="bottom" constant="-92" id="7f7-gO-D5h"/>
                             <constraint firstItem="3od-5c-yzI" firstAttribute="bottom" secondItem="Xty-aF-WDv" secondAttribute="bottom" type="default" id="9qT-8J-cJX"/>
-                            <constraint firstItem="sco-8x-zSx" firstAttribute="top" secondItem="Xty-aF-WDv" secondAttribute="top" constant="-1" id="ABt-Qu-Csc"/>
                             <constraint firstItem="YvB-Gp-Fvr" firstAttribute="top" secondItem="Xty-aF-WDv" secondAttribute="top" constant="5" type="user" id="DoA-5l-NFS"/>
                             <constraint firstItem="evg-Ah-Kcw" firstAttribute="top" secondItem="YvB-Gp-Fvr" secondAttribute="bottom" constant="8" symbolic="YES" type="default" id="FDk-Bs-3cI"/>
                             <constraint firstItem="YvB-Gp-Fvr" firstAttribute="trailing" secondItem="Xty-aF-WDv" secondAttribute="trailing" type="default" id="FXg-Ij-nfl"/>
                             <constraint firstItem="uSh-Ne-BdH" firstAttribute="trailing" secondItem="Xty-aF-WDv" secondAttribute="trailing" type="default" id="HAC-vD-Hqj"/>
                             <constraint firstItem="uSh-Ne-BdH" firstAttribute="leading" secondItem="Xty-aF-WDv" secondAttribute="leading" type="default" id="HeG-j9-sqU"/>
                             <constraint firstItem="YvB-Gp-Fvr" firstAttribute="leading" secondItem="Xty-aF-WDv" secondAttribute="leading" type="default" id="I4g-8o-Kbt"/>
-                            <constraint firstItem="3od-5c-yzI" firstAttribute="centerX" secondItem="evg-Ah-Kcw" secondAttribute="centerX" type="default" id="OBV-yE-3pQ"/>
-                            <constraint firstItem="sco-8x-zSx" firstAttribute="trailing" secondItem="Xty-aF-WDv" secondAttribute="trailing" type="default" id="TvG-hv-kxd"/>
+                            <constraint firstItem="ExH-sw-Z1i" firstAttribute="centerX" secondItem="evg-Ah-Kcw" secondAttribute="centerX" type="default" id="VNk-MY-fXM"/>
+                            <constraint firstItem="ExH-sw-Z1i" firstAttribute="centerY" secondItem="Xty-aF-WDv" secondAttribute="centerY" type="default" id="Vim-gy-wQ5"/>
+                            <constraint firstItem="iCc-m2-vR5" firstAttribute="leading" secondItem="Xty-aF-WDv" secondAttribute="leading" constant="157" id="dda-gh-C3S"/>
                             <constraint firstItem="3od-5c-yzI" firstAttribute="trailing" secondItem="Xty-aF-WDv" secondAttribute="trailing" type="default" id="eJ5-5R-zZM"/>
-                            <constraint firstItem="sco-8x-zSx" firstAttribute="leading" secondItem="Xty-aF-WDv" secondAttribute="leading" type="default" id="tDh-lz-AgT"/>
+                            <constraint firstItem="ExH-sw-Z1i" firstAttribute="leading" secondItem="Xty-aF-WDv" secondAttribute="leading" type="default" id="tz5-fd-LV0"/>
                             <constraint firstAttribute="bottom" secondItem="evg-Ah-Kcw" secondAttribute="bottom" constant="88" id="uDo-cI-z18"/>
+                            <constraint firstItem="iCc-m2-vR5" firstAttribute="centerY" secondItem="ExH-sw-Z1i" secondAttribute="centerY" type="default" id="wfp-Rv-pF0"/>
                         </constraints>
                     </view>
                     <connections>
@@ -586,7 +574,6 @@
                         <outlet property="slideNumber" destination="3BV-KX-Qla" id="681-YP-k0T"/>
                         <outlet property="slideView" destination="bZq-z2-OKU" id="yu0-P8-F3v"/>
                         <outlet property="touchPointerImage" destination="ExH-sw-Z1i" id="I0L-0P-zSk"/>
-                        <outlet property="touchPointerScrollView" destination="sco-8x-zSx" id="7B3-1T-ZI8"/>
                     </connections>
                 </viewController>
                 <placeholder placeholderIdentifier="IBFirstResponder" id="Uei-nM-J1S" userLabel="First Responder" sceneMemberID="firstResponder"/>
@@ -821,6 +808,79 @@
         <image name="timer_clear_btn.png" width="74" height="74"/>
         <image name="timer_start_btn.png" width="74" height="74"/>
     </resources>
+    <classes>
+        <class className="EditableTableViewCell" superclassName="UITableViewCell">
+            <source key="sourceIdentifier" type="project" relativePath="./Classes/EditableTableViewCell.h"/>
+        </class>
+        <class className="NSLayoutConstraint" superclassName="NSObject">
+            <source key="sourceIdentifier" type="project" relativePath="./Classes/NSLayoutConstraint.h"/>
+        </class>
+        <class className="SWRevealViewController" superclassName="UIViewController">
+            <source key="sourceIdentifier" type="project" relativePath="./Classes/SWRevealViewController.h"/>
+        </class>
+        <class className="newServerViewController" superclassName="UITableViewController">
+            <source key="sourceIdentifier" type="project" relativePath="./Classes/newServerViewController.h"/>
+            <relationships>
+                <relationship kind="action" name="save:"/>
+            </relationships>
+        </class>
+        <class className="pinValidation_vc" superclassName="UIViewController">
+            <source key="sourceIdentifier" type="project" relativePath="./Classes/pinValidation_vc.h"/>
+            <relationships>
+                <relationship kind="outlet" name="pinLabel" candidateClass="UILabel"/>
+                <relationship kind="outlet" name="statusLabel" candidateClass="UILabel"/>
+            </relationships>
+        </class>
+        <class className="server_list_vc" superclassName="UITableViewController">
+            <source key="sourceIdentifier" type="project" relativePath="./Classes/server_list_vc.h"/>
+            <relationships>
+                <relationship kind="outlet" name="serverTable" candidateClass="UITableView"/>
+            </relationships>
+        </class>
+        <class className="slideShowPreviewTable_vc" superclassName="UITableViewController">
+            <source key="sourceIdentifier" type="project" relativePath="./Classes/slideShowPreviewTable_vc.h"/>
+            <relationships>
+                <relationship kind="action" name="startPresentationAction:"/>
+                <relationship kind="outlet" name="optionsTable" candidateClass="UITableView"/>
+            </relationships>
+        </class>
+        <class className="slideShowSwipeInList" superclassName="UITableViewController">
+            <source key="sourceIdentifier" type="project" relativePath="./Classes/slideShowSwipeInList.h"/>
+            <relationships>
+                <relationship kind="action" name="stopWatchClear:"/>
+                <relationship kind="action" name="stopWatchStart:"/>
+                <relationship kind="outlet" name="slidesTable" candidateClass="UITableView"/>
+            </relationships>
+        </class>
+        <class className="slideShow_vc" superclassName="UIViewController">
+            <source key="sourceIdentifier" type="project" relativePath="./Classes/slideShow_vc.h"/>
+            <relationships>
+                <relationship kind="action" name="accPointerAction:"/>
+                <relationship kind="action" name="nextSlideAction:"/>
+                <relationship kind="action" name="pointerAction:"/>
+                <relationship kind="action" name="previousSlideAction:"/>
+                <relationship kind="outlet" name="blockingView" candidateClass="UIView"/>
+                <relationship kind="outlet" name="bottomView" candidateClass="UIView"/>
+                <relationship kind="outlet" name="lecturer_notes" candidateClass="UIWebView"/>
+                <relationship kind="outlet" name="movingPointer" candidateClass="UIView"/>
+                <relationship kind="outlet" name="notesView" candidateClass="UIView"/>
+                <relationship kind="outlet" name="pointerBtn" candidateClass="UIButton"/>
+                <relationship kind="outlet" name="revealButtonItem" candidateClass="UIBarButtonItem"/>
+                <relationship kind="outlet" name="secondarySlideView" candidateClass="UIImageView"/>
+                <relationship kind="outlet" name="slideNumber" candidateClass="UILabel"/>
+                <relationship kind="outlet" name="slideView" candidateClass="UIImageView"/>
+                <relationship kind="outlet" name="touchPointerImage" candidateClass="UIImageView"/>
+                <relationship kind="outlet" name="touchPointerScrollView" candidateClass="UIScrollView"/>
+            </relationships>
+        </class>
+        <class className="touchPointer_vc" superclassName="UIViewController">
+            <source key="sourceIdentifier" type="project" relativePath="./Classes/touchPointer_vc.h"/>
+            <relationships>
+                <relationship kind="action" name="dismissModal:"/>
+                <relationship kind="outlet" name="imageView" candidateClass="UIImageView"/>
+            </relationships>
+        </class>
+    </classes>
     <simulatedMetricsContainer key="defaultSimulatedMetrics">
         <simulatedStatusBarMetrics key="statusBar"/>
         <simulatedOrientationMetrics key="orientation"/>
diff --git a/ios/iosremote/iosremote/serverList_vc.m b/ios/iosremote/iosremote/serverList_vc.m
index 9d15bc8..8493ff5 100644
--- a/ios/iosremote/iosremote/serverList_vc.m
+++ b/ios/iosremote/iosremote/serverList_vc.m
@@ -61,12 +61,16 @@
                                                                                    object:nil
                                                                                     queue:mainQueue
                                                                                usingBlock:^(NSNotification *note) {
+                                                                                   self.comManager.state = CONNECTED;
+                                                                                   [self disableSpinner];
                                                                                    [self performSegueWithIdentifier:@"pinValidation" sender:self ];
                                                                                }];
     self.slideShowPreviewStartObserver = [[NSNotificationCenter defaultCenter] addObserverForName:STATUS_PAIRING_PAIRED
                                                                                            object:nil
                                                                                             queue:mainQueue
                                                                                        usingBlock:^(NSNotification *note) {
+                                                                                           self.comManager.state = CONNECTED;
+                                                                                           [self disableSpinner];
                                                                                            [self performSegueWithIdentifier:@"SlideShowPreview" sender:self ];
                                                                                        }];
     [super viewDidAppear:animated];
diff --git a/ios/iosremote/iosremote/slideShow_vc.m b/ios/iosremote/iosremote/slideShow_vc.m
index 71d83d8..db979a3 100644
--- a/ios/iosremote/iosremote/slideShow_vc.m
+++ b/ios/iosremote/iosremote/slideShow_vc.m
@@ -187,19 +187,34 @@
 
 - (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event {
     UITouch *touch = [[event allTouches] anyObject];
-    CGPoint loc = [touch locationInView:self.slideView];
-    if (loc.x >= 0 && loc.x <= self.slideView.frame.origin.x+self.slideView.frame.size.width
-        && loc.y >= 0 && loc.y <= self.slideView.frame.origin.y + self.slideView.frame.size.height)
-        NSLog(@"Touch begins at: %f, %f", loc.x, loc.y);
+    CGPoint loc = [touch locationInView:self.touchPointerImage];
+    if (loc.x >= 0 && loc.x <= self.touchPointerImage.frame.size.width
+        && loc.y >= 0 && loc.y <= self.touchPointerImage.frame.size.height){
+        CGPoint p;
+        p.x = loc.x + self.touchPointerImage.frame.origin.x;
+        p.y = loc.y + self.touchPointerImage.frame.origin.y;
+        self.movingPointer.center = p;
+        [self.movingPointer setHidden:NO];
+    }
 }
 
 - (void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event
 {
     UITouch *touch = [[event allTouches] anyObject];
-    CGPoint loc = [touch locationInView:self.slideView];
-    if (loc.x >= 0 && loc.x <= self.slideView.frame.origin.x+self.slideView.frame.size.width
-        && loc.y >= 0 && loc.y <= self.slideView.frame.origin.y + self.slideView.frame.size.height)
-        NSLog(@"Touch at: %f, %f", loc.x, loc.y);
+    CGPoint loc = [touch locationInView:self.touchPointerImage];
+    if (loc.x >= 0 && loc.x <= self.touchPointerImage.frame.size.width
+        && loc.y >= self.movingPointer.frame.size.height && loc.y <= self.touchPointerImage.frame.size.height - self.movingPointer.frame.size.height)
+    {
+        CGPoint p;
+        p.x = loc.x + self.touchPointerImage.frame.origin.x;
+        p.y = loc.y + self.touchPointerImage.frame.origin.y;
+        self.movingPointer.center = p;
+    }
+}
+
+- (void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event
+{
+    [self.movingPointer setHidden:YES];
 }
 
 #pragma mark - System defaults
@@ -253,8 +268,12 @@
 
     BOOL acc = [[NSUserDefaults standardUserDefaults] boolForKey:KEY_POINTER];
     if (!acc) {
+        // Hook up acc detection
         [self.pointerBtn addTarget:self action:@selector(pointerAction:) forControlEvents:UIControlEventTouchUpOutside];
         [self.pointerBtn addTarget:self action:@selector(pointerAction:) forControlEvents:UIControlEventTouchUpInside];
+    } else {
+        // Disable all calibration functions for acc based pointer
+        self.count = INT_MAX;
     }
 }
 
commit a5f6c185ed1cff681b8002583def8389c5a07400
Author: siqi <me at siqi.fr>
Date:   Thu Jul 11 16:33:04 2013 +0200

    accelormeter implemented but doesn't work well...
    
    Change-Id: Ia5f2c1e706b21914ff483378e1bf8ffbdeb5eed6

diff --git a/android/sdremote/res/drawable-xhdpi/ic_launcher.png b/android/sdremote/res/drawable-xhdpi/ic_launcher.png
index 4a575a6..3de2dcc 100644
Binary files a/android/sdremote/res/drawable-xhdpi/ic_launcher.png and b/android/sdremote/res/drawable-xhdpi/ic_launcher.png differ
diff --git a/ios/iosremote/ic_launcher.png b/ios/iosremote/ic_launcher.png
new file mode 100644
index 0000000..3de2dcc
Binary files /dev/null and b/ios/iosremote/ic_launcher.png differ
diff --git a/ios/iosremote/ic_launcher at 2x.png b/ios/iosremote/ic_launcher at 2x.png
new file mode 100644
index 0000000..e336ce0
Binary files /dev/null and b/ios/iosremote/ic_launcher at 2x.png differ
diff --git a/ios/iosremote/iosremote.xcodeproj/project.pbxproj b/ios/iosremote/iosremote.xcodeproj/project.pbxproj
index d35a80d..89b16ea 100644
--- a/ios/iosremote/iosremote.xcodeproj/project.pbxproj
+++ b/ios/iosremote/iosremote.xcodeproj/project.pbxproj
@@ -32,7 +32,7 @@
 		57C6E3F7175E06E800E8BC5F /* CoreGraphics.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 57C6E3F6175E06E800E8BC5F /* CoreGraphics.framework */; };
 		57C6E3FD175E06E800E8BC5F /* InfoPlist.strings in Resources */ = {isa = PBXBuildFile; fileRef = 57C6E3FB175E06E800E8BC5F /* InfoPlist.strings */; };
 		57C6E3FF175E06E800E8BC5F /* main.m in Sources */ = {isa = PBXBuildFile; fileRef = 57C6E3FE175E06E800E8BC5F /* main.m */; };
-		57C6E403175E06E800E8BC5F /* libreoffice_sdremoteAppDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = 57C6E402175E06E800E8BC5F /* libreoffice_sdremoteAppDelegate.m */; };
+		57C6E403175E06E800E8BC5F /* AppDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = 57C6E402175E06E800E8BC5F /* AppDelegate.m */; };
 		57C6E405175E06E800E8BC5F /* Default.png in Resources */ = {isa = PBXBuildFile; fileRef = 57C6E404175E06E800E8BC5F /* Default.png */; };
 		57C6E407175E06E800E8BC5F /* Default at 2x.png in Resources */ = {isa = PBXBuildFile; fileRef = 57C6E406175E06E800E8BC5F /* Default at 2x.png */; };
 		57C6E409175E06E800E8BC5F /* Default-568h at 2x.png in Resources */ = {isa = PBXBuildFile; fileRef = 57C6E408175E06E800E8BC5F /* Default-568h at 2x.png */; };
@@ -44,6 +44,11 @@
 		57CC48C6178B42A400075DE4 /* timer_pause_btn.png in Resources */ = {isa = PBXBuildFile; fileRef = 57CC48C4178B42A400075DE4 /* timer_pause_btn.png */; };
 		57CC48C7178B42A400075DE4 /* timer_resume_btn.png in Resources */ = {isa = PBXBuildFile; fileRef = 57CC48C5178B42A400075DE4 /* timer_resume_btn.png */; };
 		57CFED9917838FDC00E82E05 /* EditableTableViewCell.m in Sources */ = {isa = PBXBuildFile; fileRef = 57CFED9817838FDC00E82E05 /* EditableTableViewCell.m */; };
+		57DC7003178D82610050FC58 /* ic_launcher.png in Resources */ = {isa = PBXBuildFile; fileRef = 57DC7002178D82610050FC58 /* ic_launcher.png */; };
+		57DC7005178D82940050FC58 /* ic_launcher at 2x.png in Resources */ = {isa = PBXBuildFile; fileRef = 57DC7004178D82940050FC58 /* ic_launcher at 2x.png */; };
+		57DC7007178D84490050FC58 /* CoreMotion.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 57DC7006178D84490050FC58 /* CoreMotion.framework */; };
+		57DC700F178E03330050FC58 /* touchPointer_vc.m in Sources */ = {isa = PBXBuildFile; fileRef = 57DC700E178E03330050FC58 /* touchPointer_vc.m */; };
+		57DC7012178E16A40050FC58 /* setRecursiveUserInteraction.m in Sources */ = {isa = PBXBuildFile; fileRef = 57DC7011178E16A40050FC58 /* setRecursiveUserInteraction.m */; };
 		57FE71E31785C61400B50125 /* pinValidation_vc.m in Sources */ = {isa = PBXBuildFile; fileRef = 57FE71E21785C61400B50125 /* pinValidation_vc.m */; };
 		57FE71E61785D7FE00B50125 /* slideShowPreview_vc.m in Sources */ = {isa = PBXBuildFile; fileRef = 57FE71E51785D7FE00B50125 /* slideShowPreview_vc.m */; };
 		57FE71E917861A9000B50125 /* slideShowPreviewTable_vc.m in Sources */ = {isa = PBXBuildFile; fileRef = 57FE71E817861A9000B50125 /* slideShowPreviewTable_vc.m */; };
@@ -88,8 +93,8 @@
 		57C6E3FC175E06E800E8BC5F /* en */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = en; path = en.lproj/InfoPlist.strings; sourceTree = "<group>"; };
 		57C6E3FE175E06E800E8BC5F /* main.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = main.m; sourceTree = "<group>"; };
 		57C6E400175E06E800E8BC5F /* iosremote-Prefix.pch */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "iosremote-Prefix.pch"; sourceTree = "<group>"; };
-		57C6E401175E06E800E8BC5F /* libreoffice_sdremoteAppDelegate.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = libreoffice_sdremoteAppDelegate.h; sourceTree = "<group>"; };
-		57C6E402175E06E800E8BC5F /* libreoffice_sdremoteAppDelegate.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = libreoffice_sdremoteAppDelegate.m; sourceTree = "<group>"; };
+		57C6E401175E06E800E8BC5F /* AppDelegate.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = AppDelegate.h; sourceTree = "<group>"; };
+		57C6E402175E06E800E8BC5F /* AppDelegate.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = AppDelegate.m; sourceTree = "<group>"; };
 		57C6E404175E06E800E8BC5F /* Default.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = Default.png; sourceTree = "<group>"; };
 		57C6E406175E06E800E8BC5F /* Default at 2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "Default at 2x.png"; sourceTree = "<group>"; };
 		57C6E408175E06E800E8BC5F /* Default-568h at 2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "Default-568h at 2x.png"; sourceTree = "<group>"; };
@@ -106,6 +111,13 @@
 		57CC48C5178B42A400075DE4 /* timer_resume_btn.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = timer_resume_btn.png; path = iosremote/timer_resume_btn.png; sourceTree = "<group>"; };
 		57CFED9717838FDC00E82E05 /* EditableTableViewCell.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = EditableTableViewCell.h; sourceTree = "<group>"; };
 		57CFED9817838FDC00E82E05 /* EditableTableViewCell.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = EditableTableViewCell.m; sourceTree = "<group>"; };
+		57DC7002178D82610050FC58 /* ic_launcher.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = ic_launcher.png; sourceTree = "<group>"; };
+		57DC7004178D82940050FC58 /* ic_launcher at 2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "ic_launcher at 2x.png"; sourceTree = "<group>"; };
+		57DC7006178D84490050FC58 /* CoreMotion.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreMotion.framework; path = System/Library/Frameworks/CoreMotion.framework; sourceTree = SDKROOT; };
+		57DC700D178E03330050FC58 /* touchPointer_vc.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = touchPointer_vc.h; sourceTree = "<group>"; };
+		57DC700E178E03330050FC58 /* touchPointer_vc.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = touchPointer_vc.m; sourceTree = "<group>"; };
+		57DC7010178E16A40050FC58 /* setRecursiveUserInteraction.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = setRecursiveUserInteraction.h; sourceTree = "<group>"; };
+		57DC7011178E16A40050FC58 /* setRecursiveUserInteraction.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = setRecursiveUserInteraction.m; sourceTree = "<group>"; };
 		57FE71E11785C61300B50125 /* pinValidation_vc.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = pinValidation_vc.h; path = Communication/pinValidation_vc.h; sourceTree = "<group>"; };
 		57FE71E21785C61400B50125 /* pinValidation_vc.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = pinValidation_vc.m; path = Communication/pinValidation_vc.m; sourceTree = "<group>"; };
 		57FE71E41785D7FE00B50125 /* slideShowPreview_vc.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = slideShowPreview_vc.h; sourceTree = "<group>"; };
@@ -120,6 +132,7 @@
 			isa = PBXFrameworksBuildPhase;
 			buildActionMask = 2147483647;
 			files = (
+				57DC7007178D84490050FC58 /* CoreMotion.framework in Frameworks */,
 				BE9EBD071765BF0800283FD2 /* CoreImage.framework in Frameworks */,
 				57C6E3F3175E06E800E8BC5F /* UIKit.framework in Frameworks */,
 				57C6E3F5175E06E800E8BC5F /* Foundation.framework in Frameworks */,
@@ -139,6 +152,10 @@
 				5770173E178B08A800B99793 /* SWReavealMainController.m */,
 				57701740178B0A6800B99793 /* slideShowSwipeInList.h */,
 				57701741178B0A6900B99793 /* slideShowSwipeInList.m */,
+				57DC700D178E03330050FC58 /* touchPointer_vc.h */,
+				57DC700E178E03330050FC58 /* touchPointer_vc.m */,
+				57DC7010178E16A40050FC58 /* setRecursiveUserInteraction.h */,
+				57DC7011178E16A40050FC58 /* setRecursiveUserInteraction.m */,
 			);
 			name = slideShow;
 			sourceTree = "<group>";
@@ -186,6 +203,9 @@
 		57C6E3E6175E06E800E8BC5F = {
 			isa = PBXGroup;
 			children = (
+				57DC7006178D84490050FC58 /* CoreMotion.framework */,
+				57DC7004178D82940050FC58 /* ic_launcher at 2x.png */,
+				57DC7002178D82610050FC58 /* ic_launcher.png */,
 				57AEEDAA1788D7B2007F4F97 /* Assets */,
 				BE9EBD061765BF0800283FD2 /* CoreImage.framework */,
 				57C6E425175E076900E8BC5F /* Communication */,
@@ -221,8 +241,8 @@
 				57FE71E11785C61300B50125 /* pinValidation_vc.h */,
 				57FE71E21785C61400B50125 /* pinValidation_vc.m */,
 				57AEEDAB1789443D007F4F97 /* slideShowPreview */,
-				57C6E401175E06E800E8BC5F /* libreoffice_sdremoteAppDelegate.h */,
-				57C6E402175E06E800E8BC5F /* libreoffice_sdremoteAppDelegate.m */,
+				57C6E401175E06E800E8BC5F /* AppDelegate.h */,
+				57C6E402175E06E800E8BC5F /* AppDelegate.m */,
 				571BFAD2178AB7BA00EF1BDB /* slideShow */,
 				5753DD9717834D7100DB71BB /* newServer_vc.h */,
 				5753DD9817834D7100DB71BB /* newServer_vc.m */,
@@ -341,6 +361,8 @@
 				571D4808178B2F080063D93B /* timer_start_btn.png in Resources */,
 				57CC48C6178B42A400075DE4 /* timer_pause_btn.png in Resources */,
 				57CC48C7178B42A400075DE4 /* timer_resume_btn.png in Resources */,
+				57DC7003178D82610050FC58 /* ic_launcher.png in Resources */,
+				57DC7005178D82940050FC58 /* ic_launcher at 2x.png in Resources */,
 			);
 			runOnlyForDeploymentPostprocessing = 0;
 		};
@@ -352,7 +374,7 @@
 			buildActionMask = 2147483647;
 			files = (
 				57C6E3FF175E06E800E8BC5F /* main.m in Sources */,
-				57C6E403175E06E800E8BC5F /* libreoffice_sdremoteAppDelegate.m in Sources */,
+				57C6E403175E06E800E8BC5F /* AppDelegate.m in Sources */,
 				57C6E42E175E076900E8BC5F /* Client.m in Sources */,
 				57C6E42F175E076900E8BC5F /* CommunicationManager.m in Sources */,
 				57C6E430175E076900E8BC5F /* CommandInterpreter.m in Sources */,
@@ -370,6 +392,8 @@
 				57701739178AC83E00B99793 /* SWRevealViewController.m in Sources */,
 				5770173F178B08A800B99793 /* SWReavealMainController.m in Sources */,
 				57701742178B0A6900B99793 /* slideShowSwipeInList.m in Sources */,
+				57DC700F178E03330050FC58 /* touchPointer_vc.m in Sources */,
+				57DC7012178E16A40050FC58 /* setRecursiveUserInteraction.m in Sources */,
 			);
 			runOnlyForDeploymentPostprocessing = 0;
 		};
diff --git a/ios/iosremote/iosremote.xcodeproj/project.xcworkspace/xcuserdata/siqi.xcuserdatad/UserInterfaceState.xcuserstate b/ios/iosremote/iosremote.xcodeproj/project.xcworkspace/xcuserdata/siqi.xcuserdatad/UserInterfaceState.xcuserstate
index 8869eee..a7650de 100644
Binary files a/ios/iosremote/iosremote.xcodeproj/project.xcworkspace/xcuserdata/siqi.xcuserdatad/UserInterfaceState.xcuserstate and b/ios/iosremote/iosremote.xcodeproj/project.xcworkspace/xcuserdata/siqi.xcuserdatad/UserInterfaceState.xcuserstate differ
diff --git a/ios/iosremote/iosremote/libreoffice_sdremoteAppDelegate.h b/ios/iosremote/iosremote/AppDelegate.h
similarity index 60%
rename from ios/iosremote/iosremote/libreoffice_sdremoteAppDelegate.h
rename to ios/iosremote/iosremote/AppDelegate.h
index 9b87a86..6e61ec1 100644
--- a/ios/iosremote/iosremote/libreoffice_sdremoteAppDelegate.h
+++ b/ios/iosremote/iosremote/AppDelegate.h
@@ -7,9 +7,16 @@
 // file, You can obtain one at http://mozilla.org/MPL/2.0/.
 
 #import <UIKit/UIKit.h>
+#import <CoreMotion/CoreMotion.h>
 
- at interface libreoffice_sdremoteAppDelegate : UIResponder <UIApplicationDelegate>
+ at class ViewController;
 
+ at interface AppDelegate : UIResponder <UIApplicationDelegate> {
+    CMMotionManager *motionManager;
+}
+
+ at property (readonly) CMMotionManager *motionManager;
 @property (strong, nonatomic) UIWindow *window;
+ at property (strong, nonatomic) ViewController *viewController;
 
 @end
diff --git a/ios/iosremote/iosremote/libreoffice_sdremoteAppDelegate.m b/ios/iosremote/iosremote/AppDelegate.m
similarity index 91%
rename from ios/iosremote/iosremote/libreoffice_sdremoteAppDelegate.m
rename to ios/iosremote/iosremote/AppDelegate.m
index 0123ac6..b548d69 100644
--- a/ios/iosremote/iosremote/libreoffice_sdremoteAppDelegate.m
+++ b/ios/iosremote/iosremote/AppDelegate.m
@@ -6,16 +6,22 @@
 // License, v. 2.0. If a copy of the MPL was not distributed with this
 // file, You can obtain one at http://mozilla.org/MPL/2.0/.
 
-#import "libreoffice_sdremoteAppDelegate.h"
+#import "AppDelegate.h"
 
- at implementation libreoffice_sdremoteAppDelegate
+ at implementation AppDelegate
 
 - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
 {
     // Override point for customization after application launch.
     return YES;
 }
-							
+
+- (CMMotionManager *)motionManager
+{
+    if (!motionManager) motionManager = [[CMMotionManager alloc] init];
+    return motionManager;
+}
+
 - (void)applicationWillResignActive:(UIApplication *)application
 {
     // Sent when the application is about to move from active to inactive state. This can occur for certain types of temporary interruptions (such as an incoming phone call or SMS message) or when the user quits the application and it begins the transition to the background state.
diff --git a/ios/iosremote/iosremote/Communication/Client.m b/ios/iosremote/iosremote/Communication/Client.m
index ed8d3af..09fdf6a 100644
--- a/ios/iosremote/iosremote/Communication/Client.m
+++ b/ios/iosremote/iosremote/Communication/Client.m
@@ -195,7 +195,7 @@ int count = 0;
                     }
                 }
             }
-            NSLog(@"Command:%@", str);
+//            NSLog(@"Command:%@", str);
             NSArray *commands = [str componentsSeparatedByString:@"\n"];
             [self.receiver parse:commands];
             data = nil;
diff --git a/ios/iosremote/iosremote/Communication/CommandInterpreter.h b/ios/iosremote/iosremote/Communication/CommandInterpreter.h
index 287cdc5..806e912 100644
--- a/ios/iosremote/iosremote/Communication/CommandInterpreter.h
+++ b/ios/iosremote/iosremote/Communication/CommandInterpreter.h
@@ -13,7 +13,7 @@
 
 @interface CommandInterpreter : NSObject
 
- at property (nonatomic, strong) SlideShow* slideShow;
+ at property (atomic, strong) SlideShow* slideShow;
 
 - (void) parse:(NSArray *)cmd;
 
diff --git a/ios/iosremote/iosremote/Communication/CommandInterpreter.m b/ios/iosremote/iosremote/Communication/CommandInterpreter.m
index fb26da5..c3455ca 100644
--- a/ios/iosremote/iosremote/Communication/CommandInterpreter.m
+++ b/ios/iosremote/iosremote/Communication/CommandInterpreter.m
@@ -20,6 +20,8 @@
 
 @synthesize slideShow = _slideShow;
 
+dispatch_queue_t backgroundQueue;
+
 - (CommandInterpreter *) init
 {
     self = [super init];
@@ -45,7 +47,7 @@
         marker = 2;
     }
     else if ([instruction isEqualToString:STATUS_PAIRING_PAIRED]){
-        NSLog(@"Paired command: %@", command);
+//        NSLog(@"Paired command: %@", command);
         [[NSNotificationCenter defaultCenter] postNotificationName:STATUS_PAIRING_PAIRED
                                                             object:nil];
         marker = 2;
@@ -77,14 +79,17 @@
             marker = 3;
         } else if ([instruction isEqualToString:@"slide_preview"]){
             NSLog(@"Interpreter: slide_preview");
-            uint slideNumber = [[command objectAtIndex:1] integerValue];
-            NSString * imageData = [command objectAtIndex:2];
-            [self.slideShow putImage:imageData
-                             AtIndex:slideNumber];
-            [[NSNotificationCenter defaultCenter] postNotificationName:MSG_SLIDE_PREVIEW object:[NSNumber numberWithUnsignedInt:slideNumber]];
+            backgroundQueue = dispatch_queue_create("com.libreoffice.iosremote", NULL);
+            dispatch_async(backgroundQueue, ^(void) {
+                uint slideNumber = [[command objectAtIndex:1] integerValue];
+                NSString * imageData = [command objectAtIndex:2];
+                [self.slideShow putImage:imageData
+                                 AtIndex:slideNumber];
+            });
             marker = 4;
         } else if ([instruction isEqualToString:@"slide_notes"]){
             NSLog(@"Interpreter: slide_notes");
+            backgroundQueue = dispatch_queue_create("com.libreoffice.iosremote", NULL);
             uint slideNumber = [[command objectAtIndex:1] integerValue];
             NSMutableString *notes = [[NSMutableString alloc] init];
             for (int i = 2; i<command.count; ++i) {
diff --git a/ios/iosremote/iosremote/Communication/SlideShow.m b/ios/iosremote/iosremote/Communication/SlideShow.m
index 3ec06b8..8f890b8 100644
--- a/ios/iosremote/iosremote/Communication/SlideShow.m
+++ b/ios/iosremote/iosremote/Communication/SlideShow.m
@@ -31,6 +31,7 @@
 @synthesize secondaryDelegate = _secondaryDelegate;
 
 dispatch_queue_t backgroundQueue;
+NSLock *dictLock;
 
 - (SlideShow *) init{
     self = [super init];
@@ -56,6 +57,7 @@ dispatch_queue_t backgroundQueue;
                                                           object:nil
                                                            queue:mainQueue
                                                       usingBlock:^(NSNotification *note) {
+                                                          dispatch_async(backgroundQueue, ^(void) {
                                                           if ([[self.loadBuffer allKeysForObject:[NSNumber numberWithInt:[[[note userInfo] objectForKey:@"index"] intValue]]] count]) {
                                                               NSArray * tagArray = [self.loadBuffer allKeysForObject:[NSNumber numberWithInt:[[[note userInfo] objectForKey:@"index"] intValue]]];
                                                               for (NSNumber *tag in tagArray) {
@@ -67,7 +69,9 @@ dispatch_queue_t backgroundQueue;
                                                                   if ([view isKindOfClass:[UIImageView class]]){
                                                                       UIImage *image = [self.imagesDictionary objectForKey:[self.loadBuffer objectForKey:tag]];
                                                                       if (image) {
-                                                                          [(UIImageView *)view setImage:image];
+                                                                          dispatch_async(dispatch_get_main_queue(), ^{
+                                                                             [(UIImageView *)view setImage:image];
+                                                                          });
                                                                           [self.loadBuffer removeObjectForKey:tag];
                                                                       }
                                                                   }
@@ -75,27 +79,35 @@ dispatch_queue_t backgroundQueue;
 //                                                                      NSLog(@"Async notes");
                                                                       NSString *note = [self.notesDictionary objectForKey:[self.loadBuffer objectForKey:tag]];
                                                                       if (note) {
-                                                                          [(UIWebView *)view loadHTMLString:note baseURL:nil];
+                                                                          dispatch_async(dispatch_get_main_queue(), ^{
+                                                                              [(UIWebView *)view loadHTMLString:note baseURL:nil];
+                                                                          });
                                                                           [self.loadBuffer removeObjectForKey:tag];
                                                                       }
                                                                   } else if ([view isKindOfClass:[UITableViewCell class]]){
                                                                       UIImage *image = [self.imagesDictionary objectForKey:[self.loadBuffer objectForKey:tag]];
                                                                       if (image){
                                                                           UIImageView *imageView = (UIImageView *)[view viewWithTag:1];
-                                                                          [imageView setImage:image];
+                                                                          dispatch_async(dispatch_get_main_queue(), ^{
+                                                                              [imageView setImage:image];
+                                                                          });
                                                                           [self.loadBuffer removeObjectForKey:tag];
                                                                       }
                                                                   }
                                                               }
                                                           }
+                                                          });
                                                       }];
+    dictLock = [[NSLock alloc] init];
     return self;
 }
 
 - (void) putImage: (NSString *)img AtIndex: (uint) index{
         NSData* data = [NSData dataWithBase64String:img];
         UIImage* image = [UIImage imageWithData:data];
+        [dictLock lock];
         [self.imagesDictionary setObject:image forKey:[NSNumber numberWithUnsignedInt:index]];
+        [dictLock unlock];
         [[NSNotificationCenter defaultCenter] postNotificationName:@"storage_update_ready"
                                                             object:nil
                                                           userInfo:[NSDictionary dictionaryWithObject:[NSNumber numberWithInt:index] forKey:@"index"]];
diff --git a/ios/iosremote/iosremote/en.lproj/iPhone_autolayout.storyboard b/ios/iosremote/iosremote/en.lproj/iPhone_autolayout.storyboard
index b64e5f59..5fbdb23 100644
--- a/ios/iosremote/iosremote/en.lproj/iPhone_autolayout.storyboard
+++ b/ios/iosremote/iosremote/en.lproj/iPhone_autolayout.storyboard
@@ -374,70 +374,6 @@
                         <rect key="frame" x="0.0" y="20" width="320" height="548"/>
                         <autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/>
                         <subviews>
-                            <view contentMode="scaleToFill" restorationIdentifier="" translatesAutoresizingMaskIntoConstraints="NO" id="3od-5c-yzI" userLabel="Bottom">
-                                <subviews>
-                                    <button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="vh9-Zy-DPu">
-                                        <constraints>
-                                            <constraint firstAttribute="width" constant="93" id="tXD-cs-5jt"/>
-                                        </constraints>
-                                        <fontDescription key="fontDescription" type="boldSystem" pointSize="15"/>
-                                        <state key="normal" backgroundImage="released_previous_button.png">
-                                            <color key="titleColor" red="0.19607843459999999" green="0.30980393290000002" blue="0.52156865600000002" alpha="1" colorSpace="calibratedRGB"/>
-                                            <color key="titleShadowColor" white="0.5" alpha="1" colorSpace="calibratedWhite"/>
-                                        </state>
-                                        <state key="highlighted" backgroundImage="pushed_previous_button.png">
-                                            <color key="titleColor" white="1" alpha="1" colorSpace="calibratedWhite"/>
-                                        </state>
-                                        <connections>
-                                            <action selector="previousSlideAction:" destination="Ivv-3X-Nhr" eventType="touchUpInside" id="DAf-Qp-7KW"/>
-                                        </connections>
-                                    </button>
-                                    <button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="XDZ-bs-OUM">
-                                        <fontDescription key="fontDescription" type="boldSystem" pointSize="15"/>
-                                        <state key="normal" backgroundImage="released_next_button.png">
-                                            <color key="titleColor" red="0.19607843459999999" green="0.30980393290000002" blue="0.52156865600000002" alpha="1" colorSpace="calibratedRGB"/>
-                                            <color key="titleShadowColor" white="0.5" alpha="1" colorSpace="calibratedWhite"/>
-                                        </state>
-                                        <state key="highlighted" backgroundImage="pushed_next_button.png">
-                                            <color key="titleColor" white="1" alpha="1" colorSpace="calibratedWhite"/>
-                                        </state>
-                                        <connections>
-                                            <action selector="nextSlideAction:" destination="Ivv-3X-Nhr" eventType="touchUpInside" id="qTl-Ib-3Z8"/>
-                                        </connections>
-                                    </button>
-                                    <button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="kMb-xm-ope">
-                                        <color key="backgroundColor" white="0.0" alpha="0.0" colorSpace="calibratedWhite"/>
-                                        <constraints>
-                                            <constraint firstAttribute="width" constant="59" id="Kjm-ct-oJ3"/>
-                                            <constraint firstAttribute="height" constant="60" id="xrc-bW-vTq"/>
-                                        </constraints>
-                                        <fontDescription key="fontDescription" type="boldSystem" pointSize="15"/>
-                                        <state key="normal" title="Button" image="pointer.png">
-                                            <color key="titleColor" red="0.19607843459999999" green="0.30980393290000002" blue="0.52156865600000002" alpha="1" colorSpace="calibratedRGB"/>
-                                            <color key="titleShadowColor" white="0.5" alpha="1" colorSpace="calibratedWhite"/>
-                                        </state>
-                                        <state key="highlighted" image="pointer_pushed.png">
-                                            <color key="titleColor" white="1" alpha="1" colorSpace="calibratedWhite"/>
-                                        </state>
-                                        <connections>
-                                            <action selector="pointerAction:" destination="Ivv-3X-Nhr" eventType="touchUpInside" id="KYl-be-1wN"/>
-                                        </connections>
-                                    </button>
-                                </subviews>
-                                <color key="backgroundColor" red="0.93333333333333335" green="0.93333333333333335" blue="0.93333333333333335" alpha="1" colorSpace="deviceRGB"/>
-                                <constraints>
-                                    <constraint firstItem="XDZ-bs-OUM" firstAttribute="centerY" secondItem="3od-5c-yzI" secondAttribute="centerY" type="default" id="992-ZE-DXX"/>
-                                    <constraint firstItem="kMb-xm-ope" firstAttribute="centerY" secondItem="vh9-Zy-DPu" secondAttribute="centerY" type="default" id="DAr-Sf-YhO"/>
-                                    <constraint firstAttribute="trailing" secondItem="XDZ-bs-OUM" secondAttribute="trailing" constant="20" symbolic="YES" type="default" id="Eqp-Q3-L92"/>
-                                    <constraint firstItem="kMb-xm-ope" firstAttribute="top" secondItem="XDZ-bs-OUM" secondAttribute="top" type="default" id="H9E-FR-J2C"/>
-                                    <constraint firstItem="vh9-Zy-DPu" firstAttribute="leading" secondItem="3od-5c-yzI" secondAttribute="leading" constant="20" symbolic="YES" type="default" id="SQd-eE-VN0"/>
-                                    <constraint firstAttribute="height" constant="88" type="user" id="dBc-X5-XIU"/>
-                                    <constraint firstItem="kMb-xm-ope" firstAttribute="top" secondItem="vh9-Zy-DPu" secondAttribute="top" type="default" id="r6I-Jb-2lm"/>
-                                    <constraint firstItem="kMb-xm-ope" firstAttribute="leading" secondItem="3od-5c-yzI" secondAttribute="leading" constant="132" id="tY1-mj-gK5"/>
-                                    <constraint firstItem="vh9-Zy-DPu" firstAttribute="width" secondItem="XDZ-bs-OUM" secondAttribute="width" type="user" id="x0P-o6-T4k"/>
-                                    <constraint firstItem="kMb-xm-ope" firstAttribute="height" secondItem="XDZ-bs-OUM" secondAttribute="height" type="user" id="zeV-2j-i1K"/>
-                                </constraints>
-                            </view>
                             <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="YvB-Gp-Fvr" userLabel="Preview">
                                 <subviews>
                                     <imageView userInteractionEnabled="NO" contentMode="scaleAspectFit" verticalCompressionResistancePriority="1000" translatesAutoresizingMaskIntoConstraints="NO" id="bZq-z2-OKU">
@@ -518,33 +454,204 @@
                                     <constraint firstItem="Y23-iV-GJx" firstAttribute="width" secondItem="xGi-A7-hat" secondAttribute="width" type="user" id="uLC-ir-IGd"/>
                                 </constraints>
                             </view>
+                            <view hidden="YES" opaque="NO" userInteractionEnabled="NO" alpha="0.60000000000000009" contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="uSh-Ne-BdH" userLabel="blockview">
+                                <color key="backgroundColor" cocoaTouchSystemColor="scrollViewTexturedBackgroundColor"/>
+                                <accessibility key="accessibilityConfiguration">
+                                    <accessibilityTraits key="traits" none="YES" notEnabled="YES"/>
+                                </accessibility>
+                            </view>
+                            <scrollView hidden="YES" multipleTouchEnabled="YES" contentMode="scaleToFill" verticalCompressionResistancePriority="1000" scrollEnabled="NO" translatesAutoresizingMaskIntoConstraints="NO" id="sco-8x-zSx">
+                                <subviews>
+                                    <imageView hidden="YES" userInteractionEnabled="NO" alpha="0.0" contentMode="scaleAspectFit" image="ic_launcher at 2x.png" translatesAutoresizingMaskIntoConstraints="NO" id="ExH-sw-Z1i">
+                                        <constraints>
+                                            <constraint firstAttribute="height" constant="251" type="user" id="fag-vU-Fek"/>
+                                        </constraints>
+                                    </imageView>
+                                    <view hidden="YES" contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="iCc-m2-vR5" userLabel="pointer">
+                                        <color key="backgroundColor" red="1" green="0.0" blue="0.0" alpha="1" colorSpace="calibratedRGB"/>
+                                        <constraints>
+                                            <constraint firstAttribute="width" constant="5" id="Pvc-0L-c6j"/>
+                                            <constraint firstAttribute="height" constant="5" id="pYn-Z0-Lv4"/>
+                                        </constraints>
+                                    </view>
+                                </subviews>
+                                <constraints>
+                                    <constraint firstItem="iCc-m2-vR5" firstAttribute="centerY" secondItem="ExH-sw-Z1i" secondAttribute="centerY" type="user" id="1ij-Ea-epv"/>
+                                    <constraint firstItem="ExH-sw-Z1i" firstAttribute="centerX" secondItem="sco-8x-zSx" secondAttribute="centerX" type="default" id="HzU-KT-Di4"/>
+                                    <constraint firstItem="ExH-sw-Z1i" firstAttribute="centerY" secondItem="sco-8x-zSx" secondAttribute="centerY" type="default" id="Jp6-hL-zFM"/>
+                                    <constraint firstItem="ExH-sw-Z1i" firstAttribute="leading" secondItem="sco-8x-zSx" secondAttribute="leading" type="default" id="Mlu-wO-svM"/>
+                                    <constraint firstItem="iCc-m2-vR5" firstAttribute="centerX" secondItem="ExH-sw-Z1i" secondAttribute="centerX" type="user" id="W0H-CC-5rY"/>
+                                    <constraint firstItem="ExH-sw-Z1i" firstAttribute="trailing" secondItem="sco-8x-zSx" secondAttribute="trailing" type="default" id="cE4-Q3-f4A"/>
+                                    <constraint firstAttribute="bottom" secondItem="ExH-sw-Z1i" secondAttribute="bottom" constant="149" id="vm4-SB-sLt"/>
+                                </constraints>
+                            </scrollView>
+                            <view contentMode="scaleToFill" restorationIdentifier="" translatesAutoresizingMaskIntoConstraints="NO" id="3od-5c-yzI" userLabel="Bottom">
+                                <subviews>
+                                    <button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="vh9-Zy-DPu">
+                                        <constraints>
+                                            <constraint firstAttribute="width" constant="93" id="tXD-cs-5jt"/>
+                                        </constraints>
+                                        <fontDescription key="fontDescription" type="boldSystem" pointSize="15"/>
+                                        <state key="normal" backgroundImage="released_previous_button.png">
+                                            <color key="titleColor" red="0.19607843459999999" green="0.30980393290000002" blue="0.52156865600000002" alpha="1" colorSpace="calibratedRGB"/>
+                                            <color key="titleShadowColor" white="0.5" alpha="1" colorSpace="calibratedWhite"/>
+                                        </state>
+                                        <state key="highlighted" backgroundImage="pushed_previous_button.png">
+                                            <color key="titleColor" white="1" alpha="1" colorSpace="calibratedWhite"/>
+                                        </state>
+                                        <connections>
+                                            <action selector="previousSlideAction:" destination="Ivv-3X-Nhr" eventType="touchUpInside" id="DAf-Qp-7KW"/>
+                                        </connections>
+                                    </button>
+                                    <button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="XDZ-bs-OUM">
+                                        <fontDescription key="fontDescription" type="boldSystem" pointSize="15"/>
+                                        <state key="normal" backgroundImage="released_next_button.png">
+                                            <color key="titleColor" red="0.19607843459999999" green="0.30980393290000002" blue="0.52156865600000002" alpha="1" colorSpace="calibratedRGB"/>
+                                            <color key="titleShadowColor" white="0.5" alpha="1" colorSpace="calibratedWhite"/>
+                                        </state>
+                                        <state key="highlighted" backgroundImage="pushed_next_button.png">
+                                            <color key="titleColor" white="1" alpha="1" colorSpace="calibratedWhite"/>
+                                        </state>
+                                        <connections>
+                                            <action selector="nextSlideAction:" destination="Ivv-3X-Nhr" eventType="touchUpInside" id="qTl-Ib-3Z8"/>
+                                        </connections>
+                                    </button>
+                                    <button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="kMb-xm-ope">
+                                        <color key="backgroundColor" white="0.0" alpha="0.0" colorSpace="calibratedWhite"/>
+                                        <constraints>
+                                            <constraint firstAttribute="width" constant="59" id="Kjm-ct-oJ3"/>
+                                            <constraint firstAttribute="height" constant="60" id="xrc-bW-vTq"/>
+                                        </constraints>
+                                        <fontDescription key="fontDescription" type="boldSystem" pointSize="15"/>
+                                        <state key="normal" title="Button" image="pointer.png">
+                                            <color key="titleColor" red="0.19607843459999999" green="0.30980393290000002" blue="0.52156865600000002" alpha="1" colorSpace="calibratedRGB"/>
+                                            <color key="titleShadowColor" white="0.5" alpha="1" colorSpace="calibratedWhite"/>
+                                        </state>
+                                        <state key="highlighted" image="pointer_pushed.png">
+                                            <color key="titleColor" white="1" alpha="1" colorSpace="calibratedWhite"/>
+                                        </state>
+                                        <connections>
+                                            <action selector="accPointerAction:" destination="Ivv-3X-Nhr" eventType="touchDown" id="35J-B2-GIE"/>
+                                            <action selector="accPointerAction:" destination="Ivv-3X-Nhr" eventType="touchUpOutside" id="F8W-M1-8Lb"/>
+                                            <action selector="accPointerAction:" destination="Ivv-3X-Nhr" eventType="touchUpInside" id="Lb1-HF-wdh"/>
+                                            <action selector="pointerAction:" destination="Ivv-3X-Nhr" eventType="touchDown" id="gK9-ff-k1g"/>
+                                        </connections>
+                                    </button>
+                                </subviews>
+                                <color key="backgroundColor" red="0.93333333333333335" green="0.93333333333333335" blue="0.93333333333333335" alpha="1" colorSpace="deviceRGB"/>
+                                <constraints>
+                                    <constraint firstItem="XDZ-bs-OUM" firstAttribute="centerY" secondItem="3od-5c-yzI" secondAttribute="centerY" type="default" id="992-ZE-DXX"/>
+                                    <constraint firstItem="kMb-xm-ope" firstAttribute="centerY" secondItem="vh9-Zy-DPu" secondAttribute="centerY" type="default" id="DAr-Sf-YhO"/>
+                                    <constraint firstAttribute="trailing" secondItem="XDZ-bs-OUM" secondAttribute="trailing" constant="20" symbolic="YES" type="default" id="Eqp-Q3-L92"/>
+                                    <constraint firstItem="kMb-xm-ope" firstAttribute="top" secondItem="XDZ-bs-OUM" secondAttribute="top" type="default" id="H9E-FR-J2C"/>
+                                    <constraint firstItem="vh9-Zy-DPu" firstAttribute="leading" secondItem="3od-5c-yzI" secondAttribute="leading" constant="20" symbolic="YES" type="default" id="SQd-eE-VN0"/>
+                                    <constraint firstAttribute="height" constant="88" type="user" id="dBc-X5-XIU"/>
+                                    <constraint firstItem="kMb-xm-ope" firstAttribute="top" secondItem="vh9-Zy-DPu" secondAttribute="top" type="default" id="r6I-Jb-2lm"/>
+                                    <constraint firstItem="kMb-xm-ope" firstAttribute="leading" secondItem="3od-5c-yzI" secondAttribute="leading" constant="132" id="tY1-mj-gK5"/>
+                                    <constraint firstItem="vh9-Zy-DPu" firstAttribute="width" secondItem="XDZ-bs-OUM" secondAttribute="width" type="user" id="x0P-o6-T4k"/>
+                                    <constraint firstItem="kMb-xm-ope" firstAttribute="height" secondItem="XDZ-bs-OUM" secondAttribute="height" type="user" id="zeV-2j-i1K"/>
+                                </constraints>
+                            </view>
                         </subviews>
                         <color key="backgroundColor" red="0.90196079015731812" green="0.90196079015731812" blue="0.90196079015731812" alpha="1" colorSpace="calibratedRGB"/>
                         <constraints>
                             <constraint firstItem="evg-Ah-Kcw" firstAttribute="leading" secondItem="Xty-aF-WDv" secondAttribute="leading" constant="-13" id="5Ku-go-4Y7"/>
                             <constraint firstItem="3od-5c-yzI" firstAttribute="leading" secondItem="Xty-aF-WDv" secondAttribute="leading" type="default" id="5et-XH-ZVD"/>
-                            <constraint firstItem="3od-5c-yzI" firstAttribute="top" secondItem="evg-Ah-Kcw" secondAttribute="bottom" type="user" id="7vy-A8-l8f"/>
+                            <constraint firstItem="sco-8x-zSx" firstAttribute="centerY" secondItem="Xty-aF-WDv" secondAttribute="centerY" type="default" id="5g1-xQ-Rjo"/>
+                            <constraint firstItem="uSh-Ne-BdH" firstAttribute="top" secondItem="Xty-aF-WDv" secondAttribute="top" type="default" id="5oi-ag-u6c"/>
+                            <constraint firstAttribute="bottom" secondItem="uSh-Ne-BdH" secondAttribute="bottom" constant="-92" id="7f7-gO-D5h"/>
+                            <constraint firstItem="3od-5c-yzI" firstAttribute="bottom" secondItem="Xty-aF-WDv" secondAttribute="bottom" type="default" id="9qT-8J-cJX"/>
+                            <constraint firstItem="sco-8x-zSx" firstAttribute="top" secondItem="Xty-aF-WDv" secondAttribute="top" constant="-1" id="ABt-Qu-Csc"/>
                             <constraint firstItem="YvB-Gp-Fvr" firstAttribute="top" secondItem="Xty-aF-WDv" secondAttribute="top" constant="5" type="user" id="DoA-5l-NFS"/>
                             <constraint firstItem="evg-Ah-Kcw" firstAttribute="top" secondItem="YvB-Gp-Fvr" secondAttribute="bottom" constant="8" symbolic="YES" type="default" id="FDk-Bs-3cI"/>
                             <constraint firstItem="YvB-Gp-Fvr" firstAttribute="trailing" secondItem="Xty-aF-WDv" secondAttribute="trailing" type="default" id="FXg-Ij-nfl"/>
-                            <constraint firstItem="evg-Ah-Kcw" firstAttribute="centerX" secondItem="3od-5c-yzI" secondAttribute="centerX" type="default" id="HOg-6M-zJ9"/>
+                            <constraint firstItem="uSh-Ne-BdH" firstAttribute="trailing" secondItem="Xty-aF-WDv" secondAttribute="trailing" type="default" id="HAC-vD-Hqj"/>
+                            <constraint firstItem="uSh-Ne-BdH" firstAttribute="leading" secondItem="Xty-aF-WDv" secondAttribute="leading" type="default" id="HeG-j9-sqU"/>
                             <constraint firstItem="YvB-Gp-Fvr" firstAttribute="leading" secondItem="Xty-aF-WDv" secondAttribute="leading" type="default" id="I4g-8o-Kbt"/>
+                            <constraint firstItem="3od-5c-yzI" firstAttribute="centerX" secondItem="evg-Ah-Kcw" secondAttribute="centerX" type="default" id="OBV-yE-3pQ"/>
+                            <constraint firstItem="sco-8x-zSx" firstAttribute="trailing" secondItem="Xty-aF-WDv" secondAttribute="trailing" type="default" id="TvG-hv-kxd"/>
                             <constraint firstItem="3od-5c-yzI" firstAttribute="trailing" secondItem="Xty-aF-WDv" secondAttribute="trailing" type="default" id="eJ5-5R-zZM"/>
-                            <constraint firstAttribute="bottom" secondItem="3od-5c-yzI" secondAttribute="bottom" type="user" id="sob-HW-K69"/>
+                            <constraint firstItem="sco-8x-zSx" firstAttribute="leading" secondItem="Xty-aF-WDv" secondAttribute="leading" type="default" id="tDh-lz-AgT"/>
+                            <constraint firstAttribute="bottom" secondItem="evg-Ah-Kcw" secondAttribute="bottom" constant="88" id="uDo-cI-z18"/>
                         </constraints>
                     </view>
                     <connections>
+                        <outlet property="blockingView" destination="uSh-Ne-BdH" id="g9R-1S-DJA"/>
+                        <outlet property="bottomView" destination="3od-5c-yzI" id="bAX-eX-GfA"/>
                         <outlet property="lecturer_notes" destination="xGi-A7-hat" id="Cng-HM-0wW"/>
+                        <outlet property="movingPointer" destination="iCc-m2-vR5" id="Y9t-hw-qhs"/>
                         <outlet property="notesView" destination="evg-Ah-Kcw" id="mlQ-Ez-ekQ"/>
+                        <outlet property="pointerBtn" destination="kMb-xm-ope" id="0Ig-tz-vu5"/>
                         <outlet property="secondarySlideView" destination="B2g-rO-b9G" id="98R-qU-Psa"/>
                         <outlet property="slideNumber" destination="3BV-KX-Qla" id="681-YP-k0T"/>
                         <outlet property="slideView" destination="bZq-z2-OKU" id="yu0-P8-F3v"/>
+                        <outlet property="touchPointerImage" destination="ExH-sw-Z1i" id="I0L-0P-zSk"/>
+                        <outlet property="touchPointerScrollView" destination="sco-8x-zSx" id="7B3-1T-ZI8"/>
                     </connections>
                 </viewController>
                 <placeholder placeholderIdentifier="IBFirstResponder" id="Uei-nM-J1S" userLabel="First Responder" sceneMemberID="firstResponder"/>
             </objects>
             <point key="canvasLocation" x="2290" y="1807"/>
         </scene>
+        <!--Touch Pointer vc-->
+        <scene sceneID="lb3-jJ-4Di">
+            <objects>
+                <viewController id="hES-Cx-oSf" customClass="touchPointer_vc" sceneMemberID="viewController">
+                    <view key="view" contentMode="scaleToFill" id="5Hd-U9-nNh">
+                        <rect key="frame" x="0.0" y="20" width="320" height="548"/>
+                        <autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/>
+                        <subviews>
+                            <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="mRz-Gd-KLu">
+                                <subviews>
+                                    <button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" buttonType="roundedRect" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="wNe-aT-xcf">
+                                        <constraints>
+                                            <constraint firstAttribute="width" constant="214" id="HOe-Si-LIu"/>
+                                        </constraints>
+                                        <fontDescription key="fontDescription" type="boldSystem" pointSize="15"/>
+                                        <state key="normal" title="Back">
+                                            <color key="titleColor" red="0.19607843459999999" green="0.30980393290000002" blue="0.52156865600000002" alpha="1" colorSpace="calibratedRGB"/>
+                                            <color key="titleShadowColor" white="0.5" alpha="1" colorSpace="calibratedWhite"/>
+                                        </state>
+                                        <state key="highlighted">

... etc. - the rest is truncated


More information about the Libreoffice-commits mailing list