From 118cd456107a4770af1781cf9d7c5908060ddc18 Mon Sep 17 00:00:00 2001
From: chrisgarrity <chrisg@media.mit.edu>
Date: Tue, 17 Jul 2018 18:37:19 -0400
Subject: [PATCH] Only update blocks locale when blocks are visible

In `blocks.jsx` only call setLocale if visible. Depends on `getLocale` being added to VM to know when global locale changed while not visible making the VM out of sync.
---
 src/containers/blocks.jsx | 19 ++++++++++++++-----
 1 file changed, 14 insertions(+), 5 deletions(-)

diff --git a/src/containers/blocks.jsx b/src/containers/blocks.jsx
index 1de665e33..6ac3c7d31 100644
--- a/src/containers/blocks.jsx
+++ b/src/containers/blocks.jsx
@@ -94,7 +94,9 @@ class Blocks extends React.Component {
         addFunctionListener(this.workspace, 'zoom', this.onWorkspaceMetricsChange);
 
         this.attachVM();
-        this.setLocale();
+        if (this.props.isVisible) {
+            this.setLocale();
+        }
 
         analytics.pageview('/editors/blocks');
     }
@@ -117,9 +119,9 @@ class Blocks extends React.Component {
             this.ScratchBlocks.hideChaff();
         }
 
-        if (prevProps.locale !== this.props.locale) {
-            this.setLocale();
-        }
+        // if (prevProps.locale !== this.props.locale) {
+        //     this.setLocale();
+        // }
 
         if (prevProps.toolboxXML !== this.props.toolboxXML) {
             // rather than update the toolbox "sync" -- update it in the next frame
@@ -138,10 +140,17 @@ class Blocks extends React.Component {
         // @todo hack to resize blockly manually in case resize happened while hidden
         // @todo hack to reload the workspace due to gui bug #413
         if (this.props.isVisible) { // Scripts tab
+
             this.workspace.setVisible(true);
-            this.props.vm.refreshWorkspace();
+            if (prevProps.locale !== this.props.locale || this.props.locale !== this.props.vm.getLocale()) {
+                this.setLocale();
+            } else {
+                this.props.vm.refreshWorkspace();
+            }
+
             // Re-enable toolbox refreshes without causing one. See #updateToolbox for more info.
             this.workspace.toolboxRefreshEnabled_ = true;
+            // this.workspace.setToolboxRefreshEnabled(true);
             window.dispatchEvent(new Event('resize'));
         } else {
             this.workspace.setVisible(false);
-- 
GitLab