From 6ea99fc3c567fa184b2fe3dd6bcd2301d9529147 Mon Sep 17 00:00:00 2001 From: MCMXC <16797721+mcmxcdev@users.noreply.github.com> Date: Wed, 26 Jul 2023 08:48:19 -0600 Subject: feat: picture in picture availability for video players - add buildMenuForVideo method in contextMenuBuilder.ts - add picture in picture context menu entry which toggles picture in picture mode --- src/webview/contextMenuBuilder.ts | 38 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 38 insertions(+) (limited to 'src/webview/contextMenuBuilder.ts') diff --git a/src/webview/contextMenuBuilder.ts b/src/webview/contextMenuBuilder.ts index d18bc56f9..0d8b659f0 100644 --- a/src/webview/contextMenuBuilder.ts +++ b/src/webview/contextMenuBuilder.ts @@ -249,6 +249,10 @@ export class ContextMenuBuilder { return this.buildMenuForImage(info); } + if (info.mediaType === 'video') { + return this.buildMenuForVideo(info); + } + if ( info.isEditable || (info.inputFieldType && info.inputFieldType !== 'none') @@ -406,6 +410,40 @@ export class ContextMenuBuilder { return menu; } + /** + * Builds a menu applicable to a video. + * + * @return {Menu} The `Menu` + */ + buildMenuForVideo( + menuInfo: IContextMenuParams, + ): Electron.CrossProcessExports.Menu { + const menu = new Menu(); + const video = document.querySelectorAll('video')[0]; + + if ( + document.pictureInPictureEnabled && + !video.disablePictureInPicture && + this.isSrcUrlValid(menuInfo) + ) { + menu.append( + new MenuItem({ + type: 'checkbox', + label: 'Picture in picture', + enabled: true, + checked: !!document.pictureInPictureElement, + click: async () => { + await (document.pictureInPictureElement + ? document.exitPictureInPicture() + : video.requestPictureInPicture()); + }, + }), + ); + } + + return menu; + } + /** * Checks if the current text selection contains a single misspelled word and * if so, adds suggested spellings as individual menu items. -- cgit v1.2.3-54-g00ecf