Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions include/SDL3/SDL_messagebox.h
Original file line number Diff line number Diff line change
Expand Up @@ -63,6 +63,7 @@ typedef Uint32 SDL_MessageBoxFlags;
#define SDL_MESSAGEBOX_INFORMATION 0x00000040u /**< informational dialog */
#define SDL_MESSAGEBOX_BUTTONS_LEFT_TO_RIGHT 0x00000080u /**< buttons placed left to right */
#define SDL_MESSAGEBOX_BUTTONS_RIGHT_TO_LEFT 0x00000100u /**< buttons placed right to left */
#define SDL_MESSAGEBOX_QUESTION 0x00000200u /**< question dialog, since 3.4.0 */

/**
* SDL_MessageBoxButtonData flags.
Expand Down
5 changes: 4 additions & 1 deletion src/dialog/unix/SDL_zenitymessagebox.c
Original file line number Diff line number Diff line change
Expand Up @@ -97,13 +97,16 @@ bool SDL_Zenity_ShowMessageBox(const SDL_MessageBoxData *messageboxdata, int *bu
* We need to handle it gracefully, otherwise no message box will be shown.
*/
argv[argc++] = zenity_major > 3 || (zenity_major == 3 && zenity_minor >= 90) ? "--icon" : "--icon-name";
switch (messageboxdata->flags & (SDL_MESSAGEBOX_ERROR | SDL_MESSAGEBOX_WARNING | SDL_MESSAGEBOX_INFORMATION)) {
switch (messageboxdata->flags & (SDL_MESSAGEBOX_ERROR | SDL_MESSAGEBOX_WARNING | SDL_MESSAGEBOX_INFORMATION | SDL_MESSAGEBOX_QUESTION)) {
case SDL_MESSAGEBOX_ERROR:
argv[argc++] = "dialog-error";
break;
case SDL_MESSAGEBOX_WARNING:
argv[argc++] = "dialog-warning";
break;
case SDL_MESSAGEBOX_QUESTION:
argv[argc++] = "dialog-question";
break;
case SDL_MESSAGEBOX_INFORMATION:
default:
argv[argc++] = "dialog-information";
Expand Down
10 changes: 8 additions & 2 deletions src/video/windows/SDL_windowsmessagebox.c
Original file line number Diff line number Diff line change
Expand Up @@ -728,7 +728,7 @@ static bool WIN_ShowOldMessageBox(const SDL_MessageBoxData *messageboxdata, int
return SDL_SetError("Number of buttons exceeds limit of %d", MAX_BUTTONS);
}

switch (messageboxdata->flags & (SDL_MESSAGEBOX_ERROR | SDL_MESSAGEBOX_WARNING | SDL_MESSAGEBOX_INFORMATION)) {
switch (messageboxdata->flags & (SDL_MESSAGEBOX_ERROR | SDL_MESSAGEBOX_WARNING | SDL_MESSAGEBOX_INFORMATION | SDL_MESSAGEBOX_QUESTION)) {
case SDL_MESSAGEBOX_ERROR:
icon = (Uint16)(size_t)IDI_ERROR;
break;
Expand All @@ -738,7 +738,10 @@ static bool WIN_ShowOldMessageBox(const SDL_MessageBoxData *messageboxdata, int
case SDL_MESSAGEBOX_INFORMATION:
icon = (Uint16)(size_t)IDI_INFORMATION;
break;
}
case SDL_MESSAGEBOX_QUESTION:
icon = (Uint16)(size_t)IDI_QUESTION;
break;
}

/* Jan 25th, 2013 - [email protected]
*
Expand Down Expand Up @@ -1006,6 +1009,9 @@ bool WIN_ShowMessageBox(const SDL_MessageBoxData *messageboxdata, int *buttonID)
TaskConfig.pszMainIcon = TD_WARNING_ICON;
} else if (messageboxdata->flags & SDL_MESSAGEBOX_INFORMATION) {
TaskConfig.pszMainIcon = TD_INFORMATION_ICON;
} else if (messageboxdata->flags & SDL_MESSAGEBOX_QUESTION) {
TaskConfig.dwFlags |= TDF_USE_HICON_MAIN;
TaskConfig.hMainIcon = LoadIcon(NULL, IDI_QUESTION);
} else {
TaskConfig.pszMainIcon = NULL;
}
Expand Down
20 changes: 17 additions & 3 deletions src/video/x11/SDL_x11toolkit.c
Original file line number Diff line number Diff line change
Expand Up @@ -155,7 +155,7 @@ typedef struct SDL_ToolkitMenuControlX11
} SDL_ToolkitMenuControlX11;

/* Font for icon control */
static const char *g_IconFont = "-*-*-bold-r-normal-*-%d-*-*-*-*-*-iso8859-1[33 88 105]";
static const char *g_IconFont = "-*-*-bold-r-normal-*-%d-*-*-*-*-*-iso8859-1[33 88 105 63]";
#define G_ICONFONT_SIZE 22

/* General UI font */
Expand Down Expand Up @@ -1845,7 +1845,7 @@ static void X11Toolkit_DrawIconControl(SDL_ToolkitControlX11 *control) {
X11_XSetForeground(control->window->display, control->window->ctx, icon_control->xcolor_bg_shadow.pixel);
X11_XFillArc(control->window->display, control->window->drawable, control->window->ctx, control->rect.x + (2 * control->window->iscale), control->rect.y + (2* control->window->iscale), control->rect.w, control->rect.h, 0, 360 * 64);

switch (icon_control->flags & (SDL_MESSAGEBOX_ERROR | SDL_MESSAGEBOX_WARNING | SDL_MESSAGEBOX_INFORMATION)) {
switch (icon_control->flags & (SDL_MESSAGEBOX_ERROR | SDL_MESSAGEBOX_WARNING | SDL_MESSAGEBOX_INFORMATION | SDL_MESSAGEBOX_QUESTION)) {
case SDL_MESSAGEBOX_ERROR:
X11_XSetForeground(control->window->display, control->window->ctx, icon_control->xcolor_red_darker.pixel);
X11_XFillArc(control->window->display, control->window->drawable, control->window->ctx, control->rect.x, control->rect.y, control->rect.w, control->rect.h, 0, 360 * 64);
Expand All @@ -1860,6 +1860,7 @@ static void X11Toolkit_DrawIconControl(SDL_ToolkitControlX11 *control) {
X11_XFillArc(control->window->display, control->window->drawable, control->window->ctx, control->rect.x+(1* control->window->iscale), control->rect.y+(1* control->window->iscale), control->rect.w-(2* control->window->iscale), control->rect.h-(2* control->window->iscale), 0, 360 * 64);
X11_XSetForeground(control->window->display, control->window->ctx, icon_control->xcolor_black.pixel);
break;
case SDL_MESSAGEBOX_QUESTION:
case SDL_MESSAGEBOX_INFORMATION:
X11_XSetForeground(control->window->display, control->window->ctx, icon_control->xcolor_white.pixel);
X11_XFillArc(control->window->display, control->window->drawable, control->window->ctx, control->rect.x, control->rect.y, control->rect.w, control->rect.h, 0, 360 * 64);
Expand Down Expand Up @@ -1956,7 +1957,7 @@ SDL_ToolkitControlX11 *X11Toolkit_CreateIconControl(SDL_ToolkitWindowX11 *window
}

/* Set colors */
switch (flags & (SDL_MESSAGEBOX_ERROR | SDL_MESSAGEBOX_WARNING | SDL_MESSAGEBOX_INFORMATION)) {
switch (flags & (SDL_MESSAGEBOX_ERROR | SDL_MESSAGEBOX_WARNING | SDL_MESSAGEBOX_INFORMATION | SDL_MESSAGEBOX_QUESTION)) {
case SDL_MESSAGEBOX_ERROR:
control->icon_char = 'X';
control->xcolor_white.flags = DoRed|DoGreen|DoBlue;
Expand Down Expand Up @@ -2001,6 +2002,19 @@ SDL_ToolkitControlX11 *X11Toolkit_CreateIconControl(SDL_ToolkitWindowX11 *window
X11_XAllocColor(window->display, window->cmap, &control->xcolor_white);
X11_XAllocColor(window->display, window->cmap, &control->xcolor_blue);
break;
case SDL_MESSAGEBOX_QUESTION:
control->icon_char = '?';
control->xcolor_white.flags = DoRed|DoGreen|DoBlue;
control->xcolor_white.red = 65535;
control->xcolor_white.green = 65535;
control->xcolor_white.blue = 65535;
control->xcolor_blue.flags = DoRed|DoGreen|DoBlue;
control->xcolor_blue.red = 0;
control->xcolor_blue.green = 0;
control->xcolor_blue.blue = 65535;
X11_XAllocColor(window->display, window->cmap, &control->xcolor_white);
X11_XAllocColor(window->display, window->cmap, &control->xcolor_blue);
break;
default:
X11_XFreeFont(window->display, control->icon_char_font);
SDL_free(control);
Expand Down
9 changes: 9 additions & 0 deletions test/testmessage.c
Original file line number Diff line number Diff line change
Expand Up @@ -307,6 +307,15 @@ int main(int argc, char *argv[])
SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, "Error Presenting MessageBox: %s", SDL_GetError());
quit(1);
}

success = SDL_ShowSimpleMessageBox(SDL_MESSAGEBOX_QUESTION,
"Question icon",
"This is a MessageBox with a question icon.",
NULL);
if (!success) {
SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, "Error Presenting MessageBox: %s", SDL_GetError());
quit(1);
}

button_messagebox(NULL);

Expand Down
Loading