aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorTerry Truong <terry06890@gmail.com>2022-07-05 13:50:18 +1000
committerTerry Truong <terry06890@gmail.com>2022-07-05 13:50:18 +1000
commitc325f9f06e5f04670e696b2f2edd1322ed45fa00 (patch)
treee35c1e209c0e0d6d2686dd1df653fd1cd352fff6 /src
parentfa576abbe37a80c73b683db5d1f844bf277cbd16 (diff)
Fix unreliable touch-detection on mobile-mode-swap
Diffstat (limited to 'src')
-rw-r--r--src/App.vue84
1 files changed, 41 insertions, 43 deletions
diff --git a/src/App.vue b/src/App.vue
index 5cd5ac8..1a5cb44 100644
--- a/src/App.vue
+++ b/src/App.vue
@@ -154,7 +154,7 @@ export default defineComponent({
mainAreaDims: [0, 0] as [number, number],
tileAreaDims: [0, 0] as [number, number],
lastResizeHdlrTime: 0, // Used to throttle resize handling
- pendingResizeHdlr: 0, // Set via setTimeout() for a non-initial resize event
+ afterResizeHdlr: 0, // Set via setTimeout() to execute after a run of resize events
// For transitions
ancestryBarInTransition: false,
tutPaneInTransition: false,
@@ -793,53 +793,51 @@ export default defineComponent({
},
// For other events
async onResize(){
- // Handle event, delaying/ignoring if this was recently done
- if (this.pendingResizeHdlr == 0){
- let handleResize = async () => {
- // Update layout/ui options with defaults, excluding user-modified ones
- let lytOpts = getDefaultLytOpts();
- let uiOpts = getDefaultUiOpts(lytOpts);
- let changedTree = false;
- for (let prop of Object.getOwnPropertyNames(lytOpts) as (keyof LayoutOptions)[]){
- let item = localStorage.getItem('LYT ' + prop);
- if (item == null && this.lytOpts[prop] != lytOpts[prop]){
- this.lytOpts[prop] = lytOpts[prop];
- }
+ // Handle event if not recently done
+ let handleResize = async () => {
+ // Update layout/ui options with defaults, excluding user-modified ones
+ let lytOpts = getDefaultLytOpts();
+ let uiOpts = getDefaultUiOpts(lytOpts);
+ console.log(uiOpts.touchDevice)
+ let changedTree = false;
+ for (let prop of Object.getOwnPropertyNames(lytOpts) as (keyof LayoutOptions)[]){
+ let item = localStorage.getItem('LYT ' + prop);
+ if (item == null && this.lytOpts[prop] != lytOpts[prop]){
+ this.lytOpts[prop] = lytOpts[prop];
}
- for (let prop of Object.getOwnPropertyNames(uiOpts) as (keyof UiOptions)[]){
- let item = localStorage.getItem('UI ' + prop);
- //Note: Using JSON.stringify here to roughly deep-compare values
- if (item == null && JSON.stringify(this.uiOpts[prop]) != JSON.stringify(uiOpts[prop])){
- this.uiOpts[prop] = uiOpts[prop];
- if (prop == 'tree'){
- changedTree = true;
- }
+ }
+ for (let prop of Object.getOwnPropertyNames(uiOpts) as (keyof UiOptions)[]){
+ let item = localStorage.getItem('UI ' + prop);
+ //Note: Using JSON.stringify here to roughly deep-compare values
+ if (item == null && JSON.stringify(this.uiOpts[prop]) != JSON.stringify(uiOpts[prop])){
+ this.uiOpts[prop] = uiOpts[prop];
+ if (prop == 'tree'){
+ changedTree = true;
}
}
- // Relayout
- this.overflownRoot = false;
- if (!changedTree){
- await this.updateAreaDims();
- this.relayoutWithCollapse();
- } else {
- this.reInit();
- }
- };
- //
- let currentTime = new Date().getTime();
- if (currentTime - this.lastResizeHdlrTime > this.uiOpts.animationDelay){
- this.lastResizeHdlrTime = currentTime;
- await handleResize();
- this.lastResizeHdlrTime = new Date().getTime();
+ }
+ // Relayout
+ this.overflownRoot = false;
+ if (!changedTree){
+ await this.updateAreaDims();
+ this.relayoutWithCollapse();
} else {
- let remainingDelay = this.uiOpts.animationDelay - (currentTime - this.lastResizeHdlrTime);
- this.pendingResizeHdlr = setTimeout(async () => {
- this.pendingResizeHdlr = 0;
- await handleResize();
- this.lastResizeHdlrTime = new Date().getTime();
- }, remainingDelay);
+ this.reInit();
}
- }
+ };
+ let currentTime = new Date().getTime();
+ if (currentTime - this.lastResizeHdlrTime > this.uiOpts.animationDelay){
+ this.lastResizeHdlrTime = currentTime;
+ await handleResize();
+ this.lastResizeHdlrTime = new Date().getTime();
+ }
+ // Also setup a handler to execute after a run of resize events
+ clearTimeout(this.afterResizeHdlr);
+ this.afterResizeHdlr = setTimeout(async () => {
+ this.afterResizeHdlr = 0;
+ await handleResize();
+ this.lastResizeHdlrTime = new Date().getTime();
+ }, 200); // If too small, touch-device detection when swapping to/from mobile-mode gets unreliable
},
onKeyUp(evt: KeyboardEvent): void {
if (this.uiOpts.disableShortcuts){