robotgo/window/alert_c.h
2022-11-28 14:21:03 -08:00

43 lines
1.5 KiB
C

// #include "os.h"
#if defined(IS_MACOSX)
#include <CoreFoundation/CoreFoundation.h>
#endif
#if defined(IS_MACOSX)
CFStringRef CFStringCreateWithUTF8String(const char *title) {
if (title == NULL) { return NULL; }
return CFStringCreateWithCString(NULL, title, kCFStringEncodingUTF8);
}
#endif
int showAlert(const char *title, const char *msg,
const char *defaultButton, const char *cancelButton) {
#if defined(IS_MACOSX)
CFStringRef alertHeader = CFStringCreateWithUTF8String(title);
CFStringRef alertMessage = CFStringCreateWithUTF8String(msg);
CFStringRef defaultButtonTitle = CFStringCreateWithUTF8String(defaultButton);
CFStringRef cancelButtonTitle = CFStringCreateWithUTF8String(cancelButton);
CFOptionFlags responseFlags;
SInt32 err = CFUserNotificationDisplayAlert(
0.0, kCFUserNotificationNoteAlertLevel, NULL, NULL, NULL, alertHeader, alertMessage,
defaultButtonTitle, cancelButtonTitle, NULL, &responseFlags);
if (alertHeader != NULL) CFRelease(alertHeader);
if (alertMessage != NULL) CFRelease(alertMessage);
if (defaultButtonTitle != NULL) CFRelease(defaultButtonTitle);
if (cancelButtonTitle != NULL) CFRelease(cancelButtonTitle);
if (err != 0) { return -1; }
return (responseFlags == kCFUserNotificationDefaultResponse) ? 0 : 1;
#elif defined(USE_X11)
return 0;
#else
/* TODO: Display custom buttons instead of the pre-defined "OK" and "Cancel". */
int response = MessageBox(NULL, msg, title,
(cancelButton == NULL) ? MB_OK : MB_OKCANCEL );
return (response == IDOK) ? 0 : 1;
#endif
}