-

-

+
diff --git a/static/pip/titlebarPreload.js b/static/pip/titlebarPreload.js
new file mode 100644
index 0000000000..bc6f4c6272
--- /dev/null
+++ b/static/pip/titlebarPreload.js
@@ -0,0 +1,23 @@
+// eslint-disable-next-line no-console
+console.log('titlebar-preloaded~~~~~~~');
+// eslint-disable-next-line @typescript-eslint/no-var-requires
+const { ipcRenderer, remote } = require('electron');
+
+document.addEventListener('DOMContentLoaded', () => {
+ const close = document.querySelector('.titlebarClose');
+ const min = document.querySelector('.titlebarMin');
+ const full = document.querySelector('.titlebarFull');
+ const recover = document.querySelector('.titlebarRecover');
+ if (close) {
+ close.addEventListener('mouseup', () => ipcRenderer.send('mouseup', 'close'));
+ }
+ if (min) {
+ min.addEventListener('mouseup', () => ipcRenderer.send('mouseup', 'min'));
+ }
+ if (full) {
+ full.addEventListener('mouseup', () => ipcRenderer.send('mouseup', 'full'));
+ }
+ if (recover) {
+ recover.addEventListener('mouseup', () => ipcRenderer.send('mouseup', 'recover'));
+ }
+});
diff --git a/static/pip/winTitlebar.html b/static/pip/winTitlebar.html
index 6b6499c3e0..04e75bc585 100644
--- a/static/pip/winTitlebar.html
+++ b/static/pip/winTitlebar.html
@@ -2,9 +2,9 @@
-
$Title$
+
Title
-$END$
+
From 5f7ace51794cd424dc24a4b5a449011487d25a26 Mon Sep 17 00:00:00 2001
From: Tan Yang <1029862865@qq.com>
Date: Fri, 16 Aug 2019 15:28:33 +0800
Subject: [PATCH 009/123] fix(browsingview): add browserView before remove when
change tab
---
src/main/index.js | 3 ++-
1 file changed, 2 insertions(+), 1 deletion(-)
diff --git a/src/main/index.js b/src/main/index.js
index af66ff96de..2ee51f433b 100644
--- a/src/main/index.js
+++ b/src/main/index.js
@@ -518,8 +518,9 @@ function registerMainWindowEvent(mainWindow) {
});
} else {
browserViews = tabGroups[index][currentBrowserHostname];
- mainWindow.removeBrowserView(mainWindow.getBrowserView());
+ const id = mainWindow.getBrowserView().id;
mainWindow.addBrowserView(browserViews[isPip ? 1 : 0]);
+ mainWindow.removeBrowserView(mainWindow.getBrowserViews().find(view => view.id === id));
if (!isPip) {
browsingWindow.removeBrowserView(browsingWindow.getBrowserViews()[0]);
browsingWindow.addBrowserView(browserViews[1]);
From 0f5b42be7dc41c2fc948acf6edaaf9dc92828409 Mon Sep 17 00:00:00 2001
From: Tan Yang <1029862865@qq.com>
Date: Mon, 19 Aug 2019 12:11:28 +0800
Subject: [PATCH 010/123] feat(browsingview): add functions to titlebar
---
src/main/index.js | 107 +++++++++++-------
src/renderer/components/BrowsingPip.vue | 8 --
src/renderer/components/BrowsingView.vue | 3 +-
.../BrowsingView/BrowsingFavicons.vue | 2 +-
static/pip/macTitlebar.html | 31 -----
static/pip/titlebarPreload.js | 53 +++++++++
6 files changed, 121 insertions(+), 83 deletions(-)
diff --git a/src/main/index.js b/src/main/index.js
index 2ee51f433b..3bf12dc269 100644
--- a/src/main/index.js
+++ b/src/main/index.js
@@ -461,11 +461,14 @@ function registerMainWindowEvent(mainWindow) {
});
ipcMain.on('pip-window-close', () => {
const views = browsingWindow.getBrowserViews();
- browsingWindow.removeBrowserView(views[0]);
- browsingWindow.removeBrowserView(views[1]);
+ views.forEach((view) => {
+ browsingWindow.removeBrowserView(view);
+ });
views[0].webContents.loadURL(initialBrowserUrl).then(() => {
views[0].webContents.clearHistory();
});
+ const index = tabGroups.findIndex(tab => Object.keys(tab)[0] === currentPipHostname);
+ tabGroups[index][currentPipHostname].reverse();
});
ipcMain.on('remove-browser', () => {
const mainView = mainWindow.getBrowserView();
@@ -487,8 +490,9 @@ function registerMainWindowEvent(mainWindow) {
mainWindow.send('update-pip-state');
});
ipcMain.on('shift-page-tab', (evt, url) => {
- const isPip = browsingWindow.isVisible();
- currentPipHostname = isPip ? currentBrowserHostname : urlParse(url).hostname;
+ if (!browsingWindow) createBrowsingWindow();
+ const isPip = browsingWindow && browsingWindow.isVisible();
+ if (!isPip) currentPipHostname = urlParse(url).hostname;
currentBrowserHostname = urlParse(url).hostname;
const index = tabGroups.findIndex(tab => Object.keys(tab)[0] === currentBrowserHostname);
lastBrowserUrl = initialBrowserUrl;
@@ -519,14 +523,21 @@ function registerMainWindowEvent(mainWindow) {
} else {
browserViews = tabGroups[index][currentBrowserHostname];
const id = mainWindow.getBrowserView().id;
- mainWindow.addBrowserView(browserViews[isPip ? 1 : 0]);
- mainWindow.removeBrowserView(mainWindow.getBrowserViews().find(view => view.id === id));
- if (!isPip) {
- browsingWindow.removeBrowserView(browsingWindow.getBrowserViews()[0]);
+ if (isPip) {
+ mainWindow.addBrowserView(
+ browserViews[currentPipHostname === currentBrowserHostname ? 1 : 0],
+ );
+ mainWindow.removeBrowserView(mainWindow.getBrowserViews().find(view => view.id === id));
+ } else {
+ mainWindow.addBrowserView(browserViews[0]);
+ mainWindow.removeBrowserView(mainWindow.getBrowserViews().find(view => view.id === id));
+ browsingWindow.removeBrowserView(browsingWindow.getBrowserView());
browsingWindow.addBrowserView(browserViews[1]);
}
}
- mainWindow.send('current-browser-id', browserViews.map(v => v.id));
+ const mainId = mainWindow.getBrowserViews()[0].id;
+ const browserId = browsingWindow.getBrowserViews()[0].id;
+ mainWindow.send('current-browser-id', [mainId, browserId]);
mainWindow.send('update-browser-view', !(currentBrowserHostname !== 'blank' && index === -1));
});
ipcMain.on('create-browser-view', (evt, args) => {
@@ -596,10 +607,9 @@ function registerMainWindowEvent(mainWindow) {
}
});
ipcMain.on('maximizable', (evt, val) => {
- console.log(val);
if (val) {
- titlebarView.webContents.executeJavaScript('document.querySelector(".titlebarMax").style.display = mouseenter ? "block" : "none";'
- + 'document.querySelector(".titlebarFull").style.display = mouseenter ? "none" : "block";');
+ titlebarView.webContents.executeJavaScript('document.querySelector(".titlebarMax").style.display = "block";'
+ + 'document.querySelector(".titlebarFull").style.display = "none"');
} else {
titlebarView.webContents.executeJavaScript('document.querySelector(".titlebarMax").style.display = "none";'
+ 'document.querySelector(".titlebarFull").style.display = "block";');
@@ -629,6 +639,13 @@ function registerMainWindowEvent(mainWindow) {
+ 'document.querySelector(".titlebarFull").style.display = "";'
+ 'document.querySelector(".titlebarRecover").style.display = "none";');
break;
+ case 'max':
+ if (browsingWindow.isMaximized()) {
+ browsingWindow.unmaximize();
+ } else {
+ browsingWindow.maximize();
+ }
+ break;
default:
break;
}
@@ -637,19 +654,30 @@ function registerMainWindowEvent(mainWindow) {
const isDifferentBrowser = currentPipHostname !== '' && currentBrowserHostname !== currentPipHostname;
const mainView = mainWindow.getBrowserView();
mainWindow.removeBrowserView(mainView);
- const index = tabGroups.findIndex(tab => Object.keys(tab)[0] === currentBrowserHostname);
- const browserView = browsingWindow.getBrowserViews()[0];
- browsingWindow.removeBrowserView(browserView);
- browsingWindow.removeBrowserView(pipControlView);
- browsingWindow.removeBrowserView(titlebarView);
- browserView.webContents.loadURL(isDifferentBrowser ? lastBrowserUrl : initialBrowserUrl);
+ const browViews = browsingWindow.getBrowserViews();
+ browViews.forEach((view) => {
+ browsingWindow.removeBrowserView(view);
+ });
createPipControlView();
createTitlebarView();
- browsingWindow.addBrowserView(mainView);
- browsingWindow.addBrowserView(pipControlView);
- browsingWindow.addBrowserView(titlebarView);
- mainWindow.addBrowserView(isDifferentBrowser ? tabGroups[index][currentBrowserHostname]
- .find(tab => tab.id !== mainView.id) : browserView);
+ if (isDifferentBrowser) {
+ const index = tabGroups.findIndex(tab => Object.keys(tab)[0] === currentBrowserHostname);
+ mainWindow.addBrowserView(tabGroups[index][currentBrowserHostname][1]);
+ browsingWindow.addBrowserView(mainView);
+ browsingWindow.addBrowserView(pipControlView);
+ browsingWindow.addBrowserView(titlebarView);
+ browViews[0].webContents.loadURL(lastBrowserUrl);
+ } else {
+ mainWindow.addBrowserView(browViews[0]);
+ browsingWindow.addBrowserView(mainView);
+ browViews[0].webContents.loadURL(initialBrowserUrl);
+ browsingWindow.addBrowserView(pipControlView);
+ browsingWindow.addBrowserView(titlebarView);
+ }
+ currentPipHostname = urlParse(browsingWindow.getBrowserViews()[0]
+ .webContents.getURL()).hostname;
+ currentBrowserHostname = urlParse(mainWindow.getBrowserView()
+ .webContents.getURL()).hostname;
pipControlView.webContents.loadURL(`file:${require('path').resolve(__static, 'pip/pipControl.html')}`);
pipControlView.setBackgroundColor('#00FFFFFF');
titlebarView.webContents.loadURL(titlebarUrl);
@@ -661,26 +689,25 @@ function registerMainWindowEvent(mainWindow) {
browsingWindow.focus();
});
ipcMain.on('enter-pip', () => {
- const mainView = mainWindow.getBrowserView();
createPipControlView();
createTitlebarView();
titlebarView.webContents.openDevTools({ mode: 'detach' });
if (!browsingWindow) {
createBrowsingWindow();
+ const index = tabGroups.findIndex(tab => Object.keys(tab)[0] === currentBrowserHostname);
+ browserViews = tabGroups[index][currentBrowserHostname];
browsingWindow.openDevTools();
- const browView = browserViews.find(view => view.id !== mainView.id);
- mainWindow.removeBrowserView(mainView);
- mainWindow.addBrowserView(browView);
- browsingWindow.addBrowserView(mainView);
+ mainWindow.removeBrowserView(browserViews[0]);
+ mainWindow.addBrowserView(browserViews[1]);
+ browsingWindow.addBrowserView(browserViews[0]);
browsingWindow.addBrowserView(pipControlView);
browsingWindow.addBrowserView(titlebarView);
browsingWindow.show();
} else {
- const browView = browsingWindow.getBrowserView();
- mainWindow.removeBrowserView(mainView);
- browsingWindow.removeBrowserView(browView);
- mainWindow.addBrowserView(browView);
- browsingWindow.addBrowserView(mainView);
+ mainWindow.removeBrowserView(browserViews[0]);
+ browsingWindow.removeBrowserView(browserViews[1]);
+ mainWindow.addBrowserView(browserViews[1]);
+ browsingWindow.addBrowserView(browserViews[0]);
browsingWindow.addBrowserView(pipControlView);
browsingWindow.addBrowserView(titlebarView);
browsingWindow.show();
@@ -702,19 +729,17 @@ function registerMainWindowEvent(mainWindow) {
if (titlebarView) titlebarView.setBounds(args);
});
ipcMain.on('exit-pip', () => {
- const mainView = mainWindow.getBrowserView();
- const browViews = browsingWindow.getBrowserViews();
- mainWindow.removeBrowserView(mainView);
+ mainWindow.removeBrowserView(browserViews[1]);
if (browsingWindow) {
- browsingWindow.removeBrowserView(browViews[0]);
+ browsingWindow.removeBrowserView(browserViews[0]);
browsingWindow.removeBrowserView(pipControlView);
browsingWindow.removeBrowserView(titlebarView);
}
- if (mainView.webContents.canGoBack()) {
- mainView.webContents.goBack();
+ if (browserViews[1].webContents.canGoBack()) {
+ browserViews[1].webContents.goBack();
}
- mainWindow.addBrowserView(browViews[0]);
- if (browsingWindow) browsingWindow.addBrowserView(mainView);
+ mainWindow.addBrowserView(browserViews[0]);
+ if (browsingWindow) browsingWindow.addBrowserView(browserViews[1]);
if (browsingWindow) {
if (browsingWindow.isFullScreen()) {
hideBrowsingWindow = true;
diff --git a/src/renderer/components/BrowsingPip.vue b/src/renderer/components/BrowsingPip.vue
index b4200f3cb4..5f83e6ae74 100644
--- a/src/renderer/components/BrowsingPip.vue
+++ b/src/renderer/components/BrowsingPip.vue
@@ -14,14 +14,6 @@ export default {
};
},
mounted() {
- window.addEventListener('keydown', (e) => {
- if (e.keyCode === 18) {
- electron.ipcRenderer.send('maximizable', true);
- }
- });
- window.addEventListener('keyup', () => {
- electron.ipcRenderer.send('maximizable', false);
- });
window.addEventListener('focus', () => {
electron.ipcRenderer.send('update-focused-window', false);
electron.ipcRenderer.send('update-enabled', 'window.pip', true);
diff --git a/src/renderer/components/BrowsingView.vue b/src/renderer/components/BrowsingView.vue
index 25cac685c5..95f6b7874a 100644
--- a/src/renderer/components/BrowsingView.vue
+++ b/src/renderer/components/BrowsingView.vue
@@ -484,8 +484,7 @@ export default {
this.$electron.remote.getCurrentWindow().getBrowserViews()[0].webContents.loadURL(urlParseLax(url).protocol ? url : `https:${url}`);
},
pipAdapter() {
- const parseUrl = urlParseLax(this.$electron.remote.getCurrentWindow()
- .getBrowserViews()[0].webContents.getURL());
+ const parseUrl = urlParseLax(this.currentPipBrowserView().webContents.getURL());
if (parseUrl.host.includes('youtube')) {
this.pipType = 'youtube';
this.youtubeAdapter();
diff --git a/src/renderer/components/BrowsingView/BrowsingFavicons.vue b/src/renderer/components/BrowsingView/BrowsingFavicons.vue
index f7ab88f7d2..7a4ce4ce2a 100644
--- a/src/renderer/components/BrowsingView/BrowsingFavicons.vue
+++ b/src/renderer/components/BrowsingView/BrowsingFavicons.vue
@@ -96,7 +96,7 @@ export default {
this.faviconIndex = -1;
},
handleFavOpen(item: { name: string, type: string, url: string }) {
- this.handleBookmarkOpen(this.recordUrl[item.type] ? this.recordUrl[item.type] : item.url);
+ this.handleBookmarkOpen(item.url);
},
handleFavAnimEnd(e: AnimationEvent) {
const target = e.target as HTMLElement;
diff --git a/static/pip/macTitlebar.html b/static/pip/macTitlebar.html
index 204b490b6f..7710521b3a 100644
--- a/static/pip/macTitlebar.html
+++ b/static/pip/macTitlebar.html
@@ -67,37 +67,6 @@
-