提交 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 {
return null;
} catch (e) {
this.foundMatch = false;
this._updateButtons();
this.updateButtons(this.foundMatch);
return { content: e.message };
}
}
......@@ -70,7 +70,7 @@ export abstract class SimpleFindWidget extends Widget {
this.oninput(this._findInput.domNode, (e) => {
this.foundMatch = this.onInputChanged();
this._updateButtons();
this.updateButtons(this.foundMatch);
this._delayedUpdateHistory();
});
......@@ -209,7 +209,7 @@ export abstract class SimpleFindWidget extends Widget {
}
this._isVisible = true;
this._updateButtons();
this.updateButtons(this.foundMatch);
setTimeout(() => {
dom.addClass(this._innerDomNode, 'visible');
......@@ -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
setTimeout(() => {
this._isVisible = false;
this._updateButtons();
this.updateButtons(this.foundMatch);
dom.removeClass(this._innerDomNode, 'visible');
}, 200);
}
......@@ -266,10 +266,10 @@ export abstract class SimpleFindWidget extends Widget {
return this._findInput.getCaseSensitive();
}
private _updateButtons() {
let hasInput = this.inputValue.length > 0;
this.prevBtn.setEnabled(this._isVisible && hasInput && this.foundMatch);
this.nextBtn.setEnabled(this._isVisible && hasInput && this.foundMatch);
protected updateButtons(foundMatch: boolean) {
const hasInput = this.inputValue.length > 0;
this.prevBtn.setEnabled(this._isVisible && hasInput && foundMatch);
this.nextBtn.setEnabled(this._isVisible && hasInput && foundMatch);
}
}
......
......@@ -7,8 +7,10 @@ import { SimpleFindWidget } from 'vs/workbench/contrib/codeEditor/browser/find/s
import { IContextKeyService, IContextKey } from 'vs/platform/contextkey/common/contextkey';
import { IContextViewService } from 'vs/platform/contextview/browser/contextView';
import { KEYBINDING_CONTEXT_WEBVIEW_FIND_WIDGET_FOCUSED } from 'vs/workbench/contrib/webview/browser/webview';
import { Event } from 'vs/base/common/event';
export interface WebviewFindDelegate {
readonly hasFindResult: Event<boolean>;
find(value: string, previous: boolean): void;
startFind(value: string): void;
stopFind(keepSelection?: boolean): void;
......@@ -25,6 +27,10 @@ export class WebviewFindWidget extends SimpleFindWidget {
) {
super(contextViewService, contextKeyService);
this._findWidgetFocused = KEYBINDING_CONTEXT_WEBVIEW_FIND_WIDGET_FOCUSED.bindTo(contextKeyService);
this._register(_delegate.hasFindResult(hasResult => {
this.updateButtons(hasResult);
}));
}
public find(previous: boolean) {
......
......@@ -377,12 +377,17 @@ export class ElectronWebviewBasedWebview extends Disposable implements Webview,
return;
}
}));
this._register(addDisposableListener(this._webview, 'devtools-opened', () => {
this._send('devtools-opened');
}));
if (_options.enableFindWidget) {
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());
......@@ -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) {
if (!value || !this._webview) {
return;
......@@ -623,6 +631,7 @@ export class ElectronWebviewBasedWebview extends Disposable implements Webview,
}
public stopFind(keepSelection?: boolean): void {
this._hasFindResult.fire(false);
if (!this._webview) {
return;
}
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册