tray: removed double click handling

This commit is contained in:
Jesse Chounard
2026-02-05 12:05:57 -06:00
committed by Sam Lantinga
parent bc16157c9d
commit cb0c7b01e4
4 changed files with 13 additions and 38 deletions

View File

@@ -34,7 +34,6 @@ struct SDL_Tray;
/* Objective-C helper class to handle status item button clicks */
@interface SDLTrayClickHandler : NSObject
@property (nonatomic, assign) struct SDL_Tray *tray;
@property (nonatomic, assign) NSTimeInterval lastLeftClickTime;
@property (nonatomic, strong) id middleClickMonitor;
- (void)handleClick:(id)sender;
- (void)startMonitoringMiddleClicks;
@@ -73,7 +72,6 @@ struct SDL_Tray {
SDL_TrayClickCallback left_click_callback;
SDL_TrayClickCallback right_click_callback;
SDL_TrayClickCallback middle_click_callback;
SDL_TrayClickCallback double_click_callback;
};
@implementation SDLTrayClickHandler
@@ -90,22 +88,11 @@ struct SDL_Tray {
bool show_menu = false;
if (buttonNumber == 0) {
/* Left click - check for double-click ourselves */
NSTimeInterval now = [NSDate timeIntervalSinceReferenceDate];
NSTimeInterval doubleClickInterval = [NSEvent doubleClickInterval];
if (self.tray->double_click_callback && (now - self.lastLeftClickTime) <= doubleClickInterval) {
/* Double-click */
self.tray->double_click_callback(self.tray->userdata, self.tray);
self.lastLeftClickTime = 0; /* Reset to prevent triple-click from triggering another double */
/* Left click */
if (self.tray->left_click_callback) {
show_menu = self.tray->left_click_callback(self.tray->userdata, self.tray);
} else {
/* Single left click */
self.lastLeftClickTime = now;
if (self.tray->left_click_callback) {
show_menu = self.tray->left_click_callback(self.tray->userdata, self.tray);
} else {
show_menu = true;
}
show_menu = true;
}
} else if (buttonNumber == 1) {
/* Right click */
@@ -217,7 +204,6 @@ SDL_Tray *SDL_CreateTrayWithProperties(SDL_PropertiesID props)
tray->left_click_callback = (SDL_TrayClickCallback)SDL_GetPointerProperty(props, SDL_PROP_TRAY_CREATE_LEFTCLICK_CALLBACK_POINTER, NULL);
tray->right_click_callback = (SDL_TrayClickCallback)SDL_GetPointerProperty(props, SDL_PROP_TRAY_CREATE_RIGHTCLICK_CALLBACK_POINTER, NULL);
tray->middle_click_callback = (SDL_TrayClickCallback)SDL_GetPointerProperty(props, SDL_PROP_TRAY_CREATE_MIDDLECLICK_CALLBACK_POINTER, NULL);
tray->double_click_callback = (SDL_TrayClickCallback)SDL_GetPointerProperty(props, SDL_PROP_TRAY_CREATE_DOUBLECLICK_CALLBACK_POINTER, NULL);
tray->statusItem = nil;
tray->statusBar = [NSStatusBar systemStatusBar];

View File

@@ -67,8 +67,6 @@ struct SDL_Tray {
SDL_TrayClickCallback left_click_callback;
SDL_TrayClickCallback right_click_callback;
SDL_TrayClickCallback middle_click_callback;
SDL_TrayClickCallback double_click_callback;
bool ignore_next_left_up;
};
static UINT_PTR get_next_id(void)
@@ -131,9 +129,7 @@ LRESULT CALLBACK TrayWindowProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lPar
switch (LOWORD(lParam)) {
case WM_LBUTTONUP:
if (tray->ignore_next_left_up) {
tray->ignore_next_left_up = false;
} else if (tray->left_click_callback) {
if (tray->left_click_callback) {
show_menu = tray->left_click_callback(tray->userdata, tray);
} else {
show_menu = true;
@@ -153,16 +149,6 @@ LRESULT CALLBACK TrayWindowProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lPar
tray->middle_click_callback(tray->userdata, tray);
}
break;
case WM_LBUTTONDBLCLK:
if (tray->double_click_callback) {
tray->double_click_callback(tray->userdata, tray);
/* Suppress the WM_LBUTTONUP that follows a double-click, so we
don't fire both double-click and left-click callbacks. This
matches the behavior on other platforms. */
tray->ignore_next_left_up = true;
}
break;
}
if (show_menu && tray->menu) {
@@ -331,7 +317,6 @@ SDL_Tray *SDL_CreateTrayWithProperties(SDL_PropertiesID props)
tray->left_click_callback = (SDL_TrayClickCallback)SDL_GetPointerProperty(props, SDL_PROP_TRAY_CREATE_LEFTCLICK_CALLBACK_POINTER, NULL);
tray->right_click_callback = (SDL_TrayClickCallback)SDL_GetPointerProperty(props, SDL_PROP_TRAY_CREATE_RIGHTCLICK_CALLBACK_POINTER, NULL);
tray->middle_click_callback = (SDL_TrayClickCallback)SDL_GetPointerProperty(props, SDL_PROP_TRAY_CREATE_MIDDLECLICK_CALLBACK_POINTER, NULL);
tray->double_click_callback = (SDL_TrayClickCallback)SDL_GetPointerProperty(props, SDL_PROP_TRAY_CREATE_DOUBLECLICK_CALLBACK_POINTER, NULL);
tray->menu = NULL;
if (!SDL_RegisterTrayClass(TEXT("SDL_TRAY"))) {