mirror of
https://github.com/leanote/desktop-app.git
synced 2025-10-18 01:16:56 +00:00
add tray (windows & mac)
This commit is contained in:
75
main.js
75
main.js
@@ -1,7 +1,11 @@
|
|||||||
// var app = require('electron').app; // Module to control application life.
|
// var app = require('electron').app; // Module to control application life.
|
||||||
const {app, BrowserWindow, crashReporter} = require('electron');
|
const {app, BrowserWindow, crashReporter} = require('electron');
|
||||||
var ipc = require('electron').ipcMain;
|
var ipc = require('electron').ipcMain;
|
||||||
|
const electron = require('electron');
|
||||||
|
const Menu = electron.Menu
|
||||||
|
const Tray = electron.Tray
|
||||||
var pdfMain = require('pdf_main');
|
var pdfMain = require('pdf_main');
|
||||||
|
var appIcon;
|
||||||
|
|
||||||
// Report crashes to our server.
|
// Report crashes to our server.
|
||||||
crashReporter.start({
|
crashReporter.start({
|
||||||
@@ -11,6 +15,7 @@ crashReporter.start({
|
|||||||
autoSubmit: true
|
autoSubmit: true
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|
||||||
// Keep a global reference of the window object, if you don't, the window will
|
// Keep a global reference of the window object, if you don't, the window will
|
||||||
// be closed automatically when the javascript object is GCed.
|
// be closed automatically when the javascript object is GCed.
|
||||||
var mainWindow = null;
|
var mainWindow = null;
|
||||||
@@ -94,7 +99,6 @@ function openIt() {
|
|||||||
var leanoteProtocol = require('leanote_protocol');
|
var leanoteProtocol = require('leanote_protocol');
|
||||||
leanoteProtocol.init();
|
leanoteProtocol.init();
|
||||||
|
|
||||||
|
|
||||||
// Create the browser window.
|
// Create the browser window.
|
||||||
mainWindow = new BrowserWindow({
|
mainWindow = new BrowserWindow({
|
||||||
width: 1050,
|
width: 1050,
|
||||||
@@ -129,13 +133,27 @@ function openIt() {
|
|||||||
if(mainWindow && mainWindow.webContents)
|
if(mainWindow && mainWindow.webContents)
|
||||||
mainWindow.webContents.send('blurWindow');
|
mainWindow.webContents.send('blurWindow');
|
||||||
});
|
});
|
||||||
|
|
||||||
|
function close (e, force) {
|
||||||
|
console.log('close:', force);
|
||||||
|
mainWindow.hide();
|
||||||
|
e && e.preventDefault();
|
||||||
|
mainWindow.webContents.send('closeWindow');
|
||||||
|
}
|
||||||
|
|
||||||
|
// 以前的关闭是真关闭, 现是是假关闭了
|
||||||
// 关闭,先保存数据
|
// 关闭,先保存数据
|
||||||
mainWindow.on('close', function(e) {
|
mainWindow.on('close', function(e) {
|
||||||
console.log('close');
|
// windows支持tray, 点close就是隐藏
|
||||||
mainWindow.hide();
|
if (process.platform.toLowerCase().indexOf('win') === 0) { // win32
|
||||||
e.preventDefault();
|
mainWindow.hide();
|
||||||
mainWindow.webContents.send('closeWindow');
|
e.preventDefault();
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
// mac 在docker下quit;
|
||||||
|
// linux直接点x linux不支持Tray
|
||||||
|
close(e, false);
|
||||||
});
|
});
|
||||||
|
|
||||||
// 前端发来可以关闭了
|
// 前端发来可以关闭了
|
||||||
@@ -146,4 +164,51 @@ function openIt() {
|
|||||||
});
|
});
|
||||||
|
|
||||||
pdfMain.init();
|
pdfMain.init();
|
||||||
|
|
||||||
|
function show () {
|
||||||
|
mainWindow.show();
|
||||||
|
mainWindow.restore();
|
||||||
|
mainWindow.focus();
|
||||||
|
mainWindow.webContents.send('focusWindow');
|
||||||
|
}
|
||||||
|
|
||||||
|
var trayShowed = false;
|
||||||
|
ipc.on('show-tray', function(event, arg) {
|
||||||
|
if (trayShowed) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
trayShowed = true;
|
||||||
|
|
||||||
|
if (process.platform == 'linux') {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
// 打开一次就自动关了
|
||||||
|
appIcon = new Tray(__dirname + '/public/images/tray/' + ( process.platform == 'darwin' ? 'trayTemplate.png' : 'tray.png'))
|
||||||
|
var contextMenu = Menu.buildFromTemplate([
|
||||||
|
{
|
||||||
|
label: arg.Open, click: function () {
|
||||||
|
show();
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
label: arg.Close, click: function () {
|
||||||
|
close(null, true);
|
||||||
|
}
|
||||||
|
},
|
||||||
|
]);
|
||||||
|
appIcon.setToolTip('Leanote');
|
||||||
|
// appIcon.setTitle('Leanote');
|
||||||
|
// appIcon.setContextMenu(contextMenu);
|
||||||
|
|
||||||
|
appIcon.on('click', function (e) {
|
||||||
|
show();
|
||||||
|
e.preventDefault();
|
||||||
|
});
|
||||||
|
appIcon.on('right-click', function () {
|
||||||
|
appIcon.popUpContextMenu(contextMenu);
|
||||||
|
});
|
||||||
|
|
||||||
|
});
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@@ -33,7 +33,7 @@ var Config = {
|
|||||||
"name": "日本語"
|
"name": "日本語"
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"lang": "en-us",
|
"lang": "zh-cn",
|
||||||
"theme": "",
|
"theme": "",
|
||||||
"view": "summary"
|
"view": "summary"
|
||||||
};
|
};
|
BIN
public/images/tray/tray.png
Normal file
BIN
public/images/tray/tray.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 16 KiB |
BIN
public/images/tray/tray@2x.png
Normal file
BIN
public/images/tray/tray@2x.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 16 KiB |
BIN
public/images/tray/trayTemplate.png
Normal file
BIN
public/images/tray/trayTemplate.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 15 KiB |
BIN
public/images/tray/trayTemplate@2x.png
Normal file
BIN
public/images/tray/trayTemplate@2x.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 15 KiB |
@@ -18,6 +18,7 @@ var Api = {
|
|||||||
userService: UserService,
|
userService: UserService,
|
||||||
dbService: db,
|
dbService: db,
|
||||||
ipc: nodeRequire('electron').ipcRenderer,
|
ipc: nodeRequire('electron').ipcRenderer,
|
||||||
|
projectPath: projectPath,
|
||||||
|
|
||||||
// 打开本地目录
|
// 打开本地目录
|
||||||
// mac和windows下不同
|
// mac和windows下不同
|
||||||
|
@@ -21,28 +21,13 @@ $(function() {
|
|||||||
|
|
||||||
var isMacP = isMac();
|
var isMacP = isMac();
|
||||||
|
|
||||||
|
// mac上才会自己控制
|
||||||
$('.tool-close, .tool-close-blur').click(function() {
|
$('.tool-close, .tool-close-blur').click(function() {
|
||||||
onClose(function() {
|
onClose(function() {
|
||||||
gui.win.hide();
|
gui.win.hide();
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
// 从login.html -> note.html过来就没有reopen事件了?
|
|
||||||
// note.html -> login.html -> note.html, 使得两次bind
|
|
||||||
/*
|
|
||||||
if(gui.App._events) {
|
|
||||||
gui.App._events.reopen = function() {
|
|
||||||
win.show();
|
|
||||||
win.focus();
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
gui.App.on('reopen', function() {
|
|
||||||
win.show();
|
|
||||||
win.focus();
|
|
||||||
});
|
|
||||||
}
|
|
||||||
*/
|
|
||||||
|
|
||||||
$('.tool-min, .tool-min-blur').click(function() {
|
$('.tool-min, .tool-min-blur').click(function() {
|
||||||
gui.win.minimize();
|
gui.win.minimize();
|
||||||
});
|
});
|
||||||
@@ -56,6 +41,29 @@ $(function() {
|
|||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
|
// Tray
|
||||||
|
/*
|
||||||
|
|
||||||
|
var electron = nodeRequire('electron');
|
||||||
|
var Menu = electron.remote.Menu;
|
||||||
|
var Tray = electron.remote.Tray;
|
||||||
|
var appIcon = new Tray(projectPath + '/public/images/logo/tray.png')
|
||||||
|
var contextMenu = Menu.buildFromTemplate([
|
||||||
|
{
|
||||||
|
label: '打开', click: function () {
|
||||||
|
alert(3);
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
label: '关闭', click: function () {
|
||||||
|
alert(3);
|
||||||
|
}
|
||||||
|
},
|
||||||
|
]);
|
||||||
|
appIcon.setToolTip('This is my application.')
|
||||||
|
appIcon.setContextMenu(contextMenu)
|
||||||
|
*/
|
||||||
|
|
||||||
});
|
});
|
||||||
|
|
||||||
// bind close event
|
// bind close event
|
||||||
@@ -73,6 +81,7 @@ function Menu() {
|
|||||||
document.execCommand('cut');
|
document.execCommand('cut');
|
||||||
} else {
|
} else {
|
||||||
/*
|
/*
|
||||||
|
// 不知道什么原因, 可能是Chrome的原因
|
||||||
We don't execute document.execCommand() this time, because it is called recursively.
|
We don't execute document.execCommand() this time, because it is called recursively.
|
||||||
console.log('tinymce中没用');
|
console.log('tinymce中没用');
|
||||||
setTimeout(function() {
|
setTimeout(function() {
|
||||||
|
@@ -1450,6 +1450,11 @@ function initPage(initedCallback) {
|
|||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
|
ipc.send('show-tray', {
|
||||||
|
Open: getMsg('Open'),
|
||||||
|
Close: getMsg('Close')
|
||||||
|
});
|
||||||
|
|
||||||
// 注入前端变量#
|
// 注入前端变量#
|
||||||
WebService.set(Notebook, Note, Attach, Tag);
|
WebService.set(Notebook, Note, Attach, Tag);
|
||||||
|
|
||||||
|
@@ -39,3 +39,5 @@ var NodeFs = require('fs');
|
|||||||
Service.dispatch = function() {};
|
Service.dispatch = function() {};
|
||||||
var gui = require('gui');
|
var gui = require('gui');
|
||||||
// var remote = require('remote');
|
// var remote = require('remote');
|
||||||
|
|
||||||
|
var projectPath = __dirname;
|
||||||
|
@@ -310,5 +310,8 @@
|
|||||||
"localAccountTips": "你好, 您使用的是本地离线帐户, 您的数据只存在本地, 不会同步到Leanote服务器, 如果您不小心删除了数据或硬盘损坏, 您的数据将永久丢失. <br>所以我们推荐您使用Leanote帐户来使用该客户端, 这样您的数据将会存储到云端, 以避免失误造成的数据丢失. <br>Leanote桌面端不再支持创建本地帐户, 但您之前创建的本地帐户还是可以继续使用.",
|
"localAccountTips": "你好, 您使用的是本地离线帐户, 您的数据只存在本地, 不会同步到Leanote服务器, 如果您不小心删除了数据或硬盘损坏, 您的数据将永久丢失. <br>所以我们推荐您使用Leanote帐户来使用该客户端, 这样您的数据将会存储到云端, 以避免失误造成的数据丢失. <br>Leanote桌面端不再支持创建本地帐户, 但您之前创建的本地帐户还是可以继续使用.",
|
||||||
"Don't Show Anymore": "不再提示",
|
"Don't Show Anymore": "不再提示",
|
||||||
|
|
||||||
"ctrl/cmd+e Toggle Modify with Readonly": "ctrl/cmd+e 切换编辑与只读"
|
"ctrl/cmd+e Toggle Modify with Readonly": "ctrl/cmd+e 切换编辑与只读",
|
||||||
|
|
||||||
|
"Open": "打开",
|
||||||
|
"Close": "关闭"
|
||||||
}
|
}
|
Reference in New Issue
Block a user