diff --git a/Core/Handling/DragHandlerBrowser.cs b/Core/Handling/DragHandlerBrowser.cs index 9ba0e553..ba982df6 100644 --- a/Core/Handling/DragHandlerBrowser.cs +++ b/Core/Handling/DragHandlerBrowser.cs @@ -4,10 +4,18 @@ namespace TweetDuck.Core.Handling{ sealed class DragHandlerBrowser : IDragHandler{ + private readonly RequestHandlerBrowser requestHandler; + + public DragHandlerBrowser(RequestHandlerBrowser requestHandler){ + this.requestHandler = requestHandler; + } + public bool OnDragEnter(IWebBrowser browserControl, IBrowser browser, IDragData dragData, DragOperationsMask mask){ void TriggerDragStart(string type, string data = null){ browserControl.ExecuteScriptAsync("window.TDGF_onGlobalDragStart", type, data); } + + requestHandler.BlockNextUserNavUrl = dragData.LinkUrl; // empty if not a link if (dragData.IsLink){ TriggerDragStart("link", dragData.LinkUrl); diff --git a/Core/Handling/RequestHandlerBrowser.cs b/Core/Handling/RequestHandlerBrowser.cs index db72fd73..3765af74 100644 --- a/Core/Handling/RequestHandlerBrowser.cs +++ b/Core/Handling/RequestHandlerBrowser.cs @@ -3,6 +3,8 @@ namespace TweetDuck.Core.Handling{ sealed class RequestHandlerBrowser : RequestHandlerBase{ + public string BlockNextUserNavUrl { get; set; } + public RequestHandlerBrowser() : base(true){} public override CefReturnValue OnBeforeResourceLoad(IWebBrowser browserControl, IBrowser browser, IFrame frame, IRequest request, IRequestCallback callback){ @@ -14,6 +16,16 @@ public override CefReturnValue OnBeforeResourceLoad(IWebBrowser browserControl, return base.OnBeforeResourceLoad(browserControl, browser, frame, request, callback); } + public override bool OnBeforeBrowse(IWebBrowser browserControl, IBrowser browser, IFrame frame, IRequest request, bool userGesture, bool isRedirect){ + if (userGesture && request.TransitionType == TransitionType.LinkClicked){ + bool block = request.Url == BlockNextUserNavUrl; + BlockNextUserNavUrl = string.Empty; + return block; + } + + return base.OnBeforeBrowse(browserControl, browser, frame, request, userGesture, isRedirect); + } + public override bool OnResourceResponse(IWebBrowser browserControl, IBrowser browser, IFrame frame, IRequest request, IResponse response){ if (request.ResourceType == ResourceType.Image && request.Url.Contains("backgrounds/spinner_blue")){ request.Url = TwitterUtils.LoadingSpinner.Url; diff --git a/Core/TweetDeckBrowser.cs b/Core/TweetDeckBrowser.cs index e45951bd..50f56ef4 100644 --- a/Core/TweetDeckBrowser.cs +++ b/Core/TweetDeckBrowser.cs @@ -40,14 +40,16 @@ public bool IsTweetDeckWebsite{ private string prevSoundNotificationPath = null; public TweetDeckBrowser(FormBrowser owner, TweetDeckBridge bridge){ + RequestHandlerBrowser requestHandler = new RequestHandlerBrowser(); + this.browser = new ChromiumWebBrowser(TwitterUtils.TweetDeckURL){ DialogHandler = new FileDialogHandler(), - DragHandler = new DragHandlerBrowser(), + DragHandler = new DragHandlerBrowser(requestHandler), MenuHandler = new ContextMenuBrowser(owner), JsDialogHandler = new JavaScriptDialogHandler(), KeyboardHandler = new KeyboardHandlerBrowser(owner), LifeSpanHandler = new LifeSpanHandler(), - RequestHandler = new RequestHandlerBrowser() + RequestHandler = requestHandler }; this.browser.LoadingStateChanged += browser_LoadingStateChanged;