Mercurial > dwindows
changeset 2327:0d7f8136d771
GTK4: Move dw_messagebox() into thread safety protection using dw_messagebox_int().
author | bsmith@81767d24-ef19-dc11-ae90-00e081727c95 |
---|---|
date | Sun, 28 Feb 2021 10:42:55 +0000 |
parents | 258c1b9c29f4 |
children | 5363f953b22a |
files | gtk4/dw.c |
diffstat | 1 files changed, 39 insertions(+), 25 deletions(-) [+] |
line wrap: on
line diff
--- a/gtk4/dw.c Tue Feb 23 22:43:19 2021 +0000 +++ b/gtk4/dw.c Sun Feb 28 10:42:55 2021 +0000 @@ -1601,29 +1601,19 @@ fprintf(stderr, "%s", outbuf); } -/* - * Displays a Message Box with given text and title.. - * Parameters: - * title: The title of the message box. - * flags: Defines buttons and icons to display - * format: printf style format string. - * ...: Additional variables for use in the format. - */ -int API dw_messagebox(const char *title, int flags, const char *format, ...) +/* Internal version that does not use variable arguments */ +DW_FUNCTION_DEFINITION(dw_messagebox_int, int, const char *title, int flags, char *outbuf) +DW_FUNCTION_ADD_PARAM3(title, flags, outbuf) +DW_FUNCTION_RETURN(dw_messagebox_int, int) +DW_FUNCTION_RESTORE_PARAM3(title, const char *, flags, int, outbuf, char *) { GtkMessageType gtkicon = GTK_MESSAGE_OTHER; GtkButtonsType gtkbuttons = GTK_BUTTONS_OK; GtkWidget *dialog; - int response; - va_list args; - char outbuf[1025] = {0}; + int response, retval = DW_MB_RETURN_OK; DWDialog *tmp = dw_dialog_new(NULL); ULONG width, height; - va_start(args, format); - vsnprintf(outbuf, 1024, format, args); - va_end(args); - if(flags & DW_MB_ERROR) gtkicon = GTK_MESSAGE_ERROR; else if(flags & DW_MB_WARNING) @@ -1655,23 +1645,47 @@ switch(response) { case GTK_RESPONSE_OK: - return DW_MB_RETURN_OK; + retval = DW_MB_RETURN_OK; + break; case GTK_RESPONSE_CANCEL: - return DW_MB_RETURN_CANCEL; + retval = DW_MB_RETURN_CANCEL; + break; case GTK_RESPONSE_YES: - return DW_MB_RETURN_YES; + retval = DW_MB_RETURN_YES; + break; case GTK_RESPONSE_NO: - return DW_MB_RETURN_NO; + retval = DW_MB_RETURN_NO; + break; default: { /* Handle the destruction of the dialog result */ if(flags & (DW_MB_OKCANCEL | DW_MB_YESNOCANCEL)) - return DW_MB_RETURN_CANCEL; + retval = DW_MB_RETURN_CANCEL; else if(flags & DW_MB_YESNO) - return DW_MB_RETURN_NO; - } - } - return DW_MB_RETURN_OK; + retval = DW_MB_RETURN_NO; + } + } + DW_FUNCTION_RETURN_THIS(retval); +} + +/* + * Displays a Message Box with given text and title.. + * Parameters: + * title: The title of the message box. + * flags: Defines buttons and icons to display + * format: printf style format string. + * ...: Additional variables for use in the format. + */ +int API dw_messagebox(const char *title, int flags, const char *format, ...) +{ + va_list args; + char outbuf[1025] = {0}; + + va_start(args, format); + vsnprintf(outbuf, 1024, format, args); + va_end(args); + + return dw_messagebox_int(title, flags, outbuf); } /*