Das Problem, das Sie beschreiben, ist einfach zu reproduzieren. Das Ergebnis, das Sie erhalten, ist kein Fehler oder eine falsche Implementierung auf Ihrer Seite, aber es ist das erwartete Ergebnis in Bezug auf die aktuelle Art, wie Electron diese Klickereignisse auf einem Tray-Element behandelt.
Die Klasse Tray
zeigt 3 Ereignisse relativ zum Klick an: click
, double-click
und right-click
.
Wenn Sie das Ereignis right-click
verwenden, haben Sie dieses Problem nicht, Sie können so schnell klicken, wie Sie möchten, Sie erhalten Ihren Rückruf immer wieder.
Der Electron Code für Mac OS zum Beispiel dieses Ereignis zu behandeln ist the following:
- (void)rightMouseUp:(NSEvent*)event {
trayIcon_->NotifyRightClicked(
[self getBoundsFromEvent:event],
ui::EventFlagsFromModifiers([event modifierFlags]));
}
Für jedes der rechten Maustaste, sind Brennen sie die right-click
Ereignis und das ist es.
Nun, wenn wir einen Blick auf, wie die linke Maustaste nehmen behandelt werden, the code ist etwas anders:
- (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];
}
Wenn das Tray-Icon mehrere Male angeklickt erhalten, wird die event.clickCount
nicht immer 1 zurück. Stattdessen wird ein Wert zurückgegeben, der die Klicks zählt.
Also, wenn Sie den Tray-Icon sehr schnell sind klicken, wird event.clickCount
einen Wert größer als 2
haben und sie emittiert nur ein Ereignis, wenn der Wert 1
oder 2
ist und wenn es nicht der Fall ist, sie es nicht tun Sie haben keinen Fallback, sie geben einfach kein Ereignis aus. Das ist das Ergebnis, das Sie in Ihren Tests sehen, wenn Sie schnell genug klicken.
Also, ohne die Electron-Implementierung selbst zu ändern, ein Problem oder eine Pull-Anforderung zu senden, können Sie dieses Verhalten im Moment nicht vermeiden.