From 1b74576259041be426de5e8b6cb61aa8a50d6d78 Mon Sep 17 00:00:00 2001
From: Zach Fox <fox@highfidelity.io>
Date: Wed, 29 Mar 2017 14:53:45 -0700
Subject: [PATCH] Fix tablet-close behavior for PAL; remove users-tablet.js

---
 libraries/script-engine/src/TabletScriptingInterface.h |  9 +++++++++
 scripts/defaultScripts.js                              |  1 -
 scripts/system/pal.js                                  | 10 ++++++++++
 scripts/system/tablet-ui/tabletUI.js                   |  8 ++++----
 4 files changed, 23 insertions(+), 5 deletions(-)

diff --git a/libraries/script-engine/src/TabletScriptingInterface.h b/libraries/script-engine/src/TabletScriptingInterface.h
index 2e7b91fa4c..2cb15a5087 100644
--- a/libraries/script-engine/src/TabletScriptingInterface.h
+++ b/libraries/script-engine/src/TabletScriptingInterface.h
@@ -85,6 +85,7 @@ class TabletProxy : public QObject {
     Q_OBJECT
     Q_PROPERTY(QString name READ getName)
     Q_PROPERTY(bool toolbarMode READ getToolbarMode WRITE setToolbarMode)
+    Q_PROPERTY(bool tabletShown MEMBER _tabletShown NOTIFY tabletShownChanged)
 public:
     TabletProxy(QString name);
 
@@ -206,6 +207,13 @@ signals:
      */
     void screenChanged(QVariant type, QVariant url);
 
+    /** jsdoc
+    * Signaled when the tablet becomes visible or becomes invisible
+    * @function TabletProxy#isTabletShownChanged
+    * @returns {Signal}
+    */
+    void tabletShownChanged();
+
 protected slots:
     void addButtonsToHomeScreen();
     void desktopWindowClosed();
@@ -224,6 +232,7 @@ protected:
     QObject* _qmlOffscreenSurface { nullptr };
     QmlWindowClass* _desktopWindow { nullptr };
     bool _toolbarMode { false };
+    bool _tabletShown { false };
 
     enum class State { Uninitialized, Home, Web, Menu, QML };
     State _state { State::Uninitialized };
diff --git a/scripts/defaultScripts.js b/scripts/defaultScripts.js
index d557083cf2..81ce72d901 100644
--- a/scripts/defaultScripts.js
+++ b/scripts/defaultScripts.js
@@ -25,7 +25,6 @@ var DEFAULT_SCRIPTS_COMBINED = [
     "system/tablet-goto.js",
     "system/marketplaces/marketplaces.js",
     "system/edit.js",
-    "system/tablet-users.js",
     "system/selectAudioDevice.js",
     "system/notifications.js",
     "system/dialTone.js",
diff --git a/scripts/system/pal.js b/scripts/system/pal.js
index a7c4f56ea6..63d59f5719 100644
--- a/scripts/system/pal.js
+++ b/scripts/system/pal.js
@@ -690,6 +690,7 @@ function startup() {
     tablet.fromQml.connect(fromQml);
     button.clicked.connect(onTabletButtonClicked);
     tablet.screenChanged.connect(onTabletScreenChanged);
+    tablet.tabletShownChanged.connect(tabletVisibilityChanged);
     Users.usernameFromIDReply.connect(usernameFromIDReply);
     Window.domainChanged.connect(clearLocalQMLDataAndClosePAL);
     Window.domainConnectionRefused.connect(clearLocalQMLDataAndClosePAL);
@@ -723,6 +724,14 @@ function off() {
     Users.requestsDomainListData = false;
 }
 
+function tabletVisibilityChanged() {
+    if (tablet.tabletShown) {
+        onTabletButtonClicked();
+    } else {
+        off();
+    }
+}
+
 var onPalScreen = false;
 var shouldActivateButton = false;
 
@@ -868,6 +877,7 @@ function shutdown() {
     button.clicked.disconnect(onTabletButtonClicked);
     tablet.removeButton(button);
     tablet.screenChanged.disconnect(onTabletScreenChanged);
+    tablet.tabletShownChanged.disconnect(tabletVisibilityChanged);
     Users.usernameFromIDReply.disconnect(usernameFromIDReply);
     Window.domainChanged.disconnect(clearLocalQMLDataAndClosePAL);
     Window.domainConnectionRefused.disconnect(clearLocalQMLDataAndClosePAL);
diff --git a/scripts/system/tablet-ui/tabletUI.js b/scripts/system/tablet-ui/tabletUI.js
index a010cb0a9c..a653d193bd 100644
--- a/scripts/system/tablet-ui/tabletUI.js
+++ b/scripts/system/tablet-ui/tabletUI.js
@@ -16,7 +16,6 @@
    MyAvatar, Menu */
 
 (function() { // BEGIN LOCAL_SCOPE
-    var tabletShown = false;
     var tabletRezzed = false;
     var activeHand = null;
     var DEFAULT_WIDTH = 0.4375;
@@ -93,7 +92,7 @@
     }
 
     function showTabletUI() {
-        tabletShown = true;
+        Tablet.getTablet("com.highfidelity.interface.tablet.system").tabletShown = true;
 
         if (!tabletRezzed || !tabletIsValid()) {
             closeTabletUI()
@@ -117,7 +116,7 @@
     }
 
     function hideTabletUI() {
-        tabletShown = false;
+        Tablet.getTablet("com.highfidelity.interface.tablet.system").tabletShown = false;
         if (!UIWebTablet) {
             return;
         }
@@ -141,7 +140,7 @@
     }
 
     function closeTabletUI() {
-        tabletShown = false;
+        Tablet.getTablet("com.highfidelity.interface.tablet.system").tabletShown = false;
         if (UIWebTablet) {
             if (UIWebTablet.onClose) {
                 UIWebTablet.onClose();
@@ -168,6 +167,7 @@
         var now = Date.now();
 
         // close the WebTablet if it we go into toolbar mode.
+        var tabletShown = Tablet.getTablet("com.highfidelity.interface.tablet.system").tabletShown;
         var toolbarMode = Tablet.getTablet("com.highfidelity.interface.tablet.system").toolbarMode;
         var visibleToOthers = Settings.getValue("tabletVisibleToOthers");