From ec92bd80b06a2f201a5f5f15aeecf70fdfac52a4 Mon Sep 17 00:00:00 2001 From: abose Date: Thu, 18 Sep 2025 11:02:47 +0530 Subject: [PATCH 1/3] fix: quick view comes up too freqeuntly on hover. now we only show when mouse doesnt move --- src/features/QuickViewManager.js | 38 ++++++++++++++------------------ 1 file changed, 16 insertions(+), 22 deletions(-) diff --git a/src/features/QuickViewManager.js b/src/features/QuickViewManager.js index 5f9fb9c8c6..3d77632dc8 100644 --- a/src/features/QuickViewManager.js +++ b/src/features/QuickViewManager.js @@ -245,7 +245,7 @@ define(function (require, exports, module) { const CMD_ENABLE_QUICK_VIEW = "view.enableQuickView", QUICK_VIEW_EDITOR_MARKER = 'quickViewMark', // Time (ms) mouse must remain over a provider's matched text before popover appears - HOVER_DELAY = 500, + HOVER_DELAY = 350, // Pointer height, used to shift popover above pointer (plus a little bit of space) POINTER_HEIGHT = 10, POPOVER_HORZ_MARGIN = 5; // Horizontal margin @@ -300,7 +300,6 @@ define(function (require, exports, module) { EditorManager.getActiveEditor().focus(); } } - showPreviewQueued = false; mouseInPreviewContainer = false; unlockQuickView(); window.clearTimeout(popoverState.hoverTimer); @@ -546,8 +545,6 @@ define(function (require, exports, module) { return false; } - let showPreviewQueued = false; - function processMouseMove() { animationRequest = null; @@ -579,24 +576,21 @@ define(function (require, exports, module) { } } - if(!showPreviewQueued){ - // Initialize popoverState - showPreviewQueued = true; - popoverState = popoverState || {}; - - // Set timer to scan and show. This will get cancelled (in hidePreview()) - // if mouse movement rendered this popover inapplicable before timer fires. - // When showing "immediately", still use setTimeout() to make this async - // so we return from this mousemove event handler ASAP. - popoverState.hoverTimer = window.setTimeout(function () { - showPreviewQueued = false; - if(!mouseInPreviewContainer && !quickViewLocked){ - hidePreview(); - popoverState = {}; - showPreview(editor); - } - }, HOVER_DELAY); - } + popoverState = popoverState || {}; + + // Set timer to scan and show. This will get cancelled (in hidePreview()) + // if mouse movement rendered this popover inapplicable before timer fires. + // When showing "immediately", still use setTimeout() to make this async + // so we return from this mousemove event handler ASAP. + clearTimeout(popoverState.hoverTimer); + popoverState.hoverTimer = window.setTimeout(function () { + if(!mouseInPreviewContainer && !quickViewLocked){ + console.error("showing"); + hidePreview(); + popoverState = {}; + showPreview(editor); + } + }, HOVER_DELAY); } function handleMouseMove(event) { From 0bcf028b02617c5994c63495298fb12909095fc3 Mon Sep 17 00:00:00 2001 From: abose Date: Thu, 18 Sep 2025 11:35:12 +0530 Subject: [PATCH 2/3] fix: quick view integ test fails in slow machines --- test/spec/QuickViewManager-test.js | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/test/spec/QuickViewManager-test.js b/test/spec/QuickViewManager-test.js index b4fda33061..e14a5804c6 100644 --- a/test/spec/QuickViewManager-test.js +++ b/test/spec/QuickViewManager-test.js @@ -203,7 +203,9 @@ define(function (require, exports, module) { } expect(rangeMarker).toBeDefined(); let range = rangeMarker.find(); - expect(range.from.ch).toBe(4); + // there are two quick views, if the test started before css lint, then we will only have color preview + // at ch:11, else the css lint error preview starts at 4 + expect([4, 11].includes(range.from.ch)).toBeTrue(); expect(range.to.ch).toBe(18); }); From d75181357813e5ff7698ba89c18163ee140aedb2 Mon Sep 17 00:00:00 2001 From: abose Date: Thu, 18 Sep 2025 13:54:45 +0530 Subject: [PATCH 3/3] fix: linux/mac integ test failures due to login dialog capturing key event handler --- test/spec/login-desktop-integ-test.js | 60 +++++++-------------------- 1 file changed, 15 insertions(+), 45 deletions(-) diff --git a/test/spec/login-desktop-integ-test.js b/test/spec/login-desktop-integ-test.js index 3184733d7b..bf5daa4cd6 100644 --- a/test/spec/login-desktop-integ-test.js +++ b/test/spec/login-desktop-integ-test.js @@ -71,7 +71,7 @@ define(function (require, exports, module) { await awaitsFor( function () { return testWindow._test_login_service_exports && - testWindow._test_login_desktop_exports; + testWindow._test_login_desktop_exports; }, "Test exports to be available", 5000 @@ -244,10 +244,14 @@ define(function (require, exports, module) { async function performFullLoginFlow() { // Mock desktop app functions for login flow + let capturedBrowserURL = null; testWindow.Phoenix.app.openURLInDefaultBrowser = function(url) { + capturedBrowserURL = url; return true; }; + let capturedClipboardText = null; testWindow.Phoenix.app.copyToClipboard = function(text) { + capturedClipboardText = text; return true; }; @@ -263,6 +267,16 @@ define(function (require, exports, module) { // Wait for desktop login dialog await testWindow.__PR.waitForModalDialog(".modal"); + const copyButton = testWindow.$('.modal').find('[data-button-id="copy"]'); + copyButton.trigger('click'); + expect(capturedClipboardText).toBe("123456"); + + // Test open browser functionality + const openBrowserButton = testWindow.$('.modal').find('[data-button-id="open"]'); + openBrowserButton.trigger('click'); + expect(capturedBrowserURL).toBeDefined(); + expect(capturedBrowserURL).toContain('authorizeApp'); + expect(capturedBrowserURL).toContain('test-session-123'); // Click refresh button to verify login const refreshButton = testWindow.$('.modal').find('[data-button-id="refresh"]'); @@ -306,50 +320,6 @@ define(function (require, exports, module) { await cleanupTrialState(); }); - it("should open browser and copy validation code", async function () { - // Setup basic user mock - setupProUserMock(false); - - // Mock desktop app functions - let capturedBrowserURL = null; - let capturedClipboardText = null; - - if (testWindow.Phoenix && testWindow.Phoenix.app) { - testWindow.Phoenix.app.openURLInDefaultBrowser = function(url) { - capturedBrowserURL = url; - return true; - }; - testWindow.Phoenix.app.copyToClipboard = function(text) { - capturedClipboardText = text; - return true; - }; - } - - // Click profile button and sign in - const $profileButton = testWindow.$("#user-profile-button"); - $profileButton.trigger('click'); - await popupToAppear(SIGNIN_POPUP); - - const popupContent = testWindow.$('.profile-popup'); - const signInButton = popupContent.find('#phoenix-signin-btn'); - signInButton.trigger('click'); - - // Wait for desktop login dialog - await testWindow.__PR.waitForModalDialog(".modal"); - - // Test copy functionality - const copyButton = testWindow.$('.modal').find('[data-button-id="copy"]'); - copyButton.trigger('click'); - expect(capturedClipboardText).toBe("123456"); - - // Test open browser functionality - const openBrowserButton = testWindow.$('.modal').find('[data-button-id="open"]'); - openBrowserButton.trigger('click'); - expect(capturedBrowserURL).toBeDefined(); - expect(capturedBrowserURL).toContain('authorizeApp'); - expect(capturedBrowserURL).toContain('test-session-123'); - }); - LoginShared.setupSharedTests(); }); });