AnA*_*ice 22 atom-editor electron
在我的OSX Electron应用程序中,我有一个托盘图标,我想在打开和关闭Electron应用程序窗口之间切换.类似于点击OSX Dropbox托盘图标将打开和关闭Dropbox托盘菜单,无论您多快点击托盘图标.
这是我正在使用的代码:
tray.on('click', function(e){
if (mainWindow.isVisible()) {
mainWindow.hide()
} else {
mainWindow.show()
}
});
Run Code Online (Sandbox Code Playgroud)
如果你慢慢点击(在点击之间等待一秒),这是有效的,但如果你反复点击,一秒钟内超过1倍,点击失败并且没有任何反应.我在文档中找不到任何类型的延迟.有关正在发生的事情以及如何使点击事件可靠运行的任何想法?
HiD*_*Deo 17
您描述的问题很容易重现.您得到的结果不是错误或错误的实现,但它是关于当前方式Electron处理托盘元素上的这些点击事件的预期结果.
这个类Tray相对暴露3个事件点击:click,double-click和right-click.
如果您使用该right-click活动,则不会遇到此问题,您可以根据需要快速点击,每次都会收到回叫.
例如,用于处理此事件的macOS的电子代码如下:
- (void)rightMouseUp:(NSEvent*)event {
trayIcon_->NotifyRightClicked(
[self getBoundsFromEvent:event],
ui::EventFlagsFromModifiers([event modifierFlags]));
}
Run Code Online (Sandbox Code Playgroud)
对于每次右键单击,他们都会触发right-click事件,就是这样.
现在,如果我们看看如何处理左键单击,代码会略有不同:
- (void)mouseUp:(NSEvent*)event {
// ...
// Truncated to only show the relevant part...
// ...
// Single click event.
if (event.clickCount == 1)
trayIcon_->NotifyClicked(
[self getBoundsFromEvent:event],
ui::EventFlagsFromModifiers([event modifierFlags]));
// Double click event.
if (event.clickCount == 2)
trayIcon_->NotifyDoubleClicked(
[self getBoundsFromEvent:event],
ui::EventFlagsFromModifiers([event modifierFlags]));
[self setNeedsDisplay:YES];
}
Run Code Online (Sandbox Code Playgroud)
多次单击托盘图标时,event.clickCount并不总是返回1.而是返回一个计算单击时间的值.
因此,当您非常快速地点击托盘图标时,event.clickCount其值将大于,2并且它们仅在值为1或者2如果不是这样的情况下发出事件,则它们没有任何后备,他们只是"不要"发出任何事件.这是你在测试中看到的足够快的点击结果.
因此,如果不自行修改Electron实现,提交问题或提取请求,您现在就无法避免此行为.
agu*_*ben 12
Electron 3.0 引入了一个防止双击等待的 API。
// Ignore double click events for the tray icon
tray.setIgnoreDoubleClickEvents(true)
Run Code Online (Sandbox Code Playgroud)
“设置忽略双击事件的选项。忽略这些事件允许您检测托盘图标的每一次单击。默认情况下,此值设置为 false。”
| 归档时间: |
|
| 查看次数: |
3195 次 |
| 最近记录: |