Il problema che stai descrivendo è facile da riprodurre. Il risultato che stai ottenendo non è un bug o un'implementazione sbagliata dalla tua parte, ma è il risultato atteso per quanto riguarda il modo in cui Electron sta gestendo questi eventi click su un elemento tray.
La classe Tray
espone 3 eventi relativi a clic: click
, double-click
e right-click
.
Se si utilizza l'evento right-click
, non si verificherà questo problema, è possibile fare clic alla velocità desiderata, richiamare la richiamata ogni volta.
Il codice Electron per MacOS, ad esempio per gestire questo evento è the following:
- (void)rightMouseUp:(NSEvent*)event {
trayIcon_->NotifyRightClicked(
[self getBoundsFromEvent:event],
ui::EventFlagsFromModifiers([event modifierFlags]));
}
Per ogni tasto destro del mouse, Sparano caso right-click
e il gioco è fatto.
Ora, se diamo uno sguardo a come il click sinistro vengono gestiti, the code è leggermente diverso:
- (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];
}
Quando l'icona sulla barra ottenere cliccato più volte, il event.clickCount
non sempre ritornare 1. Invece, restituisce un valore che conta i tempi cliccati.
Così, quando sei clic sull'icona della barra molto veloce, event.clickCount
avrà un valore maggiore di 2
e stanno emettendo solo un evento quando il valore è 1
o 2
e se non è il caso, non fare avere qualche ripiego, semplicemente non emettono alcun evento. Questo è il risultato che stai vedendo nei tuoi test quando fai clic abbastanza velocemente.
Quindi, senza modificare autonomamente l'implementazione di Electron, inoltrando un problema o una richiesta di pull, al momento non è possibile evitare questo comportamento.