提交 f93f19d2 编写于 作者: M Matt Bierner

Enable/disable webview find buttons based on if results have been found

Fixes #80656
上级 ad5e8204
...@@ -59,7 +59,7 @@ export abstract class SimpleFindWidget extends Widget { ...@@ -59,7 +59,7 @@ export abstract class SimpleFindWidget extends Widget {
return null; return null;
} catch (e) { } catch (e) {
this.foundMatch = false; this.foundMatch = false;
this._updateButtons(); this.updateButtons(this.foundMatch);
return { content: e.message }; return { content: e.message };
} }
} }
...@@ -70,7 +70,7 @@ export abstract class SimpleFindWidget extends Widget { ...@@ -70,7 +70,7 @@ export abstract class SimpleFindWidget extends Widget {
this.oninput(this._findInput.domNode, (e) => { this.oninput(this._findInput.domNode, (e) => {
this.foundMatch = this.onInputChanged(); this.foundMatch = this.onInputChanged();
this._updateButtons(); this.updateButtons(this.foundMatch);
this._delayedUpdateHistory(); this._delayedUpdateHistory();
}); });
...@@ -209,7 +209,7 @@ export abstract class SimpleFindWidget extends Widget { ...@@ -209,7 +209,7 @@ export abstract class SimpleFindWidget extends Widget {
} }
this._isVisible = true; this._isVisible = true;
this._updateButtons(); this.updateButtons(this.foundMatch);
setTimeout(() => { setTimeout(() => {
dom.addClass(this._innerDomNode, 'visible'); dom.addClass(this._innerDomNode, 'visible');
...@@ -240,7 +240,7 @@ export abstract class SimpleFindWidget extends Widget { ...@@ -240,7 +240,7 @@ export abstract class SimpleFindWidget extends Widget {
// Need to delay toggling visibility until after Transition, then visibility hidden - removes from tabIndex list // Need to delay toggling visibility until after Transition, then visibility hidden - removes from tabIndex list
setTimeout(() => { setTimeout(() => {
this._isVisible = false; this._isVisible = false;
this._updateButtons(); this.updateButtons(this.foundMatch);
dom.removeClass(this._innerDomNode, 'visible'); dom.removeClass(this._innerDomNode, 'visible');
}, 200); }, 200);
} }
...@@ -266,10 +266,10 @@ export abstract class SimpleFindWidget extends Widget { ...@@ -266,10 +266,10 @@ export abstract class SimpleFindWidget extends Widget {
return this._findInput.getCaseSensitive(); return this._findInput.getCaseSensitive();
} }
private _updateButtons() { protected updateButtons(foundMatch: boolean) {
let hasInput = this.inputValue.length > 0; const hasInput = this.inputValue.length > 0;
this.prevBtn.setEnabled(this._isVisible && hasInput && this.foundMatch); this.prevBtn.setEnabled(this._isVisible && hasInput && foundMatch);
this.nextBtn.setEnabled(this._isVisible && hasInput && this.foundMatch); this.nextBtn.setEnabled(this._isVisible && hasInput && foundMatch);
} }
} }
......
...@@ -7,8 +7,10 @@ import { SimpleFindWidget } from 'vs/workbench/contrib/codeEditor/browser/find/s ...@@ -7,8 +7,10 @@ import { SimpleFindWidget } from 'vs/workbench/contrib/codeEditor/browser/find/s
import { IContextKeyService, IContextKey } from 'vs/platform/contextkey/common/contextkey'; import { IContextKeyService, IContextKey } from 'vs/platform/contextkey/common/contextkey';
import { IContextViewService } from 'vs/platform/contextview/browser/contextView'; import { IContextViewService } from 'vs/platform/contextview/browser/contextView';
import { KEYBINDING_CONTEXT_WEBVIEW_FIND_WIDGET_FOCUSED } from 'vs/workbench/contrib/webview/browser/webview'; import { KEYBINDING_CONTEXT_WEBVIEW_FIND_WIDGET_FOCUSED } from 'vs/workbench/contrib/webview/browser/webview';
import { Event } from 'vs/base/common/event';
export interface WebviewFindDelegate { export interface WebviewFindDelegate {
readonly hasFindResult: Event<boolean>;
find(value: string, previous: boolean): void; find(value: string, previous: boolean): void;
startFind(value: string): void; startFind(value: string): void;
stopFind(keepSelection?: boolean): void; stopFind(keepSelection?: boolean): void;
...@@ -25,6 +27,10 @@ export class WebviewFindWidget extends SimpleFindWidget { ...@@ -25,6 +27,10 @@ export class WebviewFindWidget extends SimpleFindWidget {
) { ) {
super(contextViewService, contextKeyService); super(contextViewService, contextKeyService);
this._findWidgetFocused = KEYBINDING_CONTEXT_WEBVIEW_FIND_WIDGET_FOCUSED.bindTo(contextKeyService); this._findWidgetFocused = KEYBINDING_CONTEXT_WEBVIEW_FIND_WIDGET_FOCUSED.bindTo(contextKeyService);
this._register(_delegate.hasFindResult(hasResult => {
this.updateButtons(hasResult);
}));
} }
public find(previous: boolean) { public find(previous: boolean) {
......
...@@ -377,12 +377,17 @@ export class ElectronWebviewBasedWebview extends Disposable implements Webview, ...@@ -377,12 +377,17 @@ export class ElectronWebviewBasedWebview extends Disposable implements Webview,
return; return;
} }
})); }));
this._register(addDisposableListener(this._webview, 'devtools-opened', () => { this._register(addDisposableListener(this._webview, 'devtools-opened', () => {
this._send('devtools-opened'); this._send('devtools-opened');
})); }));
if (_options.enableFindWidget) { if (_options.enableFindWidget) {
this._webviewFindWidget = this._register(instantiationService.createInstance(WebviewFindWidget, this)); this._webviewFindWidget = this._register(instantiationService.createInstance(WebviewFindWidget, this));
this._register(addDisposableListener(this._webview, 'found-in-page', e => {
this._hasFindResult.fire(e.result.matches > 0);
}));
} }
this.style(themeService.getTheme()); this.style(themeService.getTheme());
...@@ -576,6 +581,9 @@ export class ElectronWebviewBasedWebview extends Disposable implements Webview, ...@@ -576,6 +581,9 @@ export class ElectronWebviewBasedWebview extends Disposable implements Webview,
}); });
} }
private readonly _hasFindResult = this._register(new Emitter<boolean>());
public readonly hasFindResult: Event<boolean> = this._hasFindResult.event;
public startFind(value: string, options?: Electron.FindInPageOptions) { public startFind(value: string, options?: Electron.FindInPageOptions) {
if (!value || !this._webview) { if (!value || !this._webview) {
return; return;
...@@ -623,6 +631,7 @@ export class ElectronWebviewBasedWebview extends Disposable implements Webview, ...@@ -623,6 +631,7 @@ export class ElectronWebviewBasedWebview extends Disposable implements Webview,
} }
public stopFind(keepSelection?: boolean): void { public stopFind(keepSelection?: boolean): void {
this._hasFindResult.fire(false);
if (!this._webview) { if (!this._webview) {
return; return;
} }
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册