जो समस्या आप वर्णन कर रहे हैं वह पुन: उत्पन्न करना आसान है। नतीजा जो आप प्राप्त कर रहे हैं वह आपके पक्ष में एक बग या गलत कार्यान्वयन नहीं है, लेकिन मौजूदा तरीके से इलेक्ट्रान इन ट्रे घटनाओं को ट्रे तत्व पर संभालने का अनुमानित परिणाम है।
कक्षा Tray
क्लिक करने के सापेक्ष 3 घटनाओं को उजागर करता है: click
, double-click
और right-click
।
यदि आप right-click
ईवेंट का उपयोग करते हैं, तो आपको यह समस्या नहीं होगी, आप जितनी जल्दी चाहें क्लिक कर सकते हैं, आपको हर बार कॉलबैक मिलेगा।
उदाहरण इस घटना को संभालने के लिए के लिए MacOS के लिए इलेक्ट्रॉन कोड the following है:
- (void)rightMouseUp:(NSEvent*)event {
trayIcon_->NotifyRightClicked(
[self getBoundsFromEvent:event],
ui::EventFlagsFromModifiers([event modifierFlags]));
}
हर सही क्लिक के लिए, वे right-click
घटना फायरिंग कर रहे हैं और बस इतना ही।
अब अगर हम कैसे लेफ्ट क्लिक नियंत्रित किया जाता है पर एक नज़र डालें, the code थोड़ा अलग है:
- (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];
}
ट्रे आइकन कई बार क्लिक किया है, event.clickCount
हमेशा 1 वापस नहीं करता है। इसके बजाए, यह एक मान देता है जो क्लिक किए गए समय की गणना करता है।
तो जब आप बहुत तेजी से ट्रे आइकन क्लिक करें, event.clickCount
2
से अधिक मूल्य होगा और वे केवल एक घटना उत्सर्जन कर रहे हैं जब मूल्य 1
या 2
है और अगर यह मामला नहीं है, वे नहीं है कोई फॉलबैक है, वे बस किसी भी घटना को उत्सर्जित नहीं करते हैं। पर्याप्त परिणाम क्लिक करते समय आप अपने परीक्षणों में देख रहे हैं।
तो इलेक्ट्रॉन के कार्यान्वयन को संशोधित किए बिना, कोई समस्या या पुल अनुरोध सबमिट करने के बाद, आप इस व्यवहार से बचने के समय नहीं कर सकते हैं।