From: Daniel Caujolle-B. <f1...@us...> - 2002-11-23 02:40:43
|
Update of /cvsroot/xine/xine-ui/src/xitk/xine-toolkit In directory sc8-pr-cvs1:/tmp/cvs-serv29893/xine-toolkit Modified Files: _xitk.h mrlbrowser.c test.c window.c window.h xitk.c xitk.h Log Message: Fix KDE window mapping bug (Mike?). Get rid of enlightenment hack (no more needed). Test WM type at xitk_init() call (some aren't checked yet (like gnomecompliant) Index: _xitk.h =================================================================== RCS file: /cvsroot/xine/xine-ui/src/xitk/xine-toolkit/_xitk.h,v retrieving revision 1.49 retrieving revision 1.50 diff -u -r1.49 -r1.50 --- _xitk.h 11 Nov 2002 22:50:59 -0000 1.49 +++ _xitk.h 23 Nov 2002 02:40:39 -0000 1.50 @@ -89,6 +89,13 @@ #undef MIN #define MIN(a, b) (((a) < (b)) ? (a) : (b)) +#define WM_TYPE_UNKNOWN 0 +#define WM_TYPE_KDE 1 +#define WM_TYPE_E 2 +#define WM_TYPE_ICE 3 +#define WM_TYPE_WMAKER 4 +#define WM_TYPE_GNOMECOMP 5 + #ifdef __GNUC__ #define XITK_DIE(FMT, ARGS...) do { fprintf(stderr, "xiTK DIE: "FMT, ##ARGS); exit(-1); } while(0) #define XITK_WARNING(FMT, ARGS...) do { fprintf(stderr, "xiTK WARNING: "FMT, ##ARGS); } while(0) @@ -519,6 +526,9 @@ int xitk_get_background_color(void); int xitk_get_focus_color(void); int xitk_get_select_color(void); + +int xitk_get_wm_type(void); + /* * copy src to dest and substitute special chars. dest should have * enought space to store chars. Index: mrlbrowser.c =================================================================== RCS file: /cvsroot/xine/xine-ui/src/xitk/xine-toolkit/mrlbrowser.c,v retrieving revision 1.56 retrieving revision 1.57 diff -u -r1.56 -r1.57 --- mrlbrowser.c 16 Nov 2002 01:32:01 -0000 1.56 +++ mrlbrowser.c 23 Nov 2002 02:40:39 -0000 1.57 @@ -562,7 +562,8 @@ private_data->visible = 1; xitk_show_widgets(private_data->widget_list); XLOCK(private_data->imlibdata->x.disp); - XMapRaised(private_data->imlibdata->x.disp, private_data->window); + XRaiseWindow(private_data->imlibdata->x.disp, private_data->window); + XMapWindow(private_data->imlibdata->x.disp, private_data->window); XUNLOCK(private_data->imlibdata->x.disp); } } @@ -1257,7 +1258,8 @@ private_data->mrls_num, 0); XLOCK (mb->imlibdata->x.disp); - XMapRaised(mb->imlibdata->x.disp, private_data->window); + XRaiseWindow(mb->imlibdata->x.disp, private_data->window); + XMapWindow(mb->imlibdata->x.disp, private_data->window); XUNLOCK (mb->imlibdata->x.disp); private_data->widget_key = Index: test.c =================================================================== RCS file: /cvsroot/xine/xine-ui/src/xitk/xine-toolkit/test.c,v retrieving revision 1.27 retrieving revision 1.28 diff -u -r1.27 -r1.28 --- test.c 28 Oct 2002 21:51:01 -0000 1.27 +++ test.c 23 Nov 2002 02:40:39 -0000 1.28 @@ -259,6 +259,7 @@ * */ static void change_label(xitk_widget_t *w, void *data) { + xitk_window_t *xw; static char *labels[] = { "A Label", "Boom" @@ -278,8 +279,8 @@ //xitk_window_dialog_ok_with_width(test->imlibdata, "Long error message", window_message_cb, NULL, 500, ALIGN_DEFAULT, "** This program is free software; you can redistribute it and/or modify\n** it under the terms of the GNU General Public License as published by\n** the Free Software Foundation; either version 2 of the License, or\n** (at your option) any later version."); // xitk_window_dialog_yesno(test->imlibdata, NULL, NULL, NULL, NULL, ALIGN_LEFT, "Le programme <linux kernel> a provoqué une faute de protection dans le module <unknown> à l'adresse 0x00001234.\nCitroën dump:\nAX:0x00\t\tBX:0x00\nCX:0x00\t\tGS:0x00;-)"); // xitk_window_dialog_ok_with_width(test->imlibdata, "Long error message", window_message_cb, NULL, 500, ALIGN_DEFAULT, "**Thisprogramisfreesoftware;youcanredistributeitand/ormodify**itunderthetermsoftheGNUGeneralPublicLicenseaspublishedby**TheFreeSoftwareFoundation;eitherversion2oftheLicense,or**(atyouroption)anylaterversion."); - xitk_window_dialog_error(test->imlibdata, - "Stream number %d <%s.mpg> is not valid.\n", nlab, labels[nlab]); + xw = xitk_window_dialog_error(test->imlibdata, + "Stream number %d <%s.mpg> is not valid.\n", nlab, labels[nlab]); } /* Index: window.c =================================================================== RCS file: /cvsroot/xine/xine-ui/src/xitk/xine-toolkit/window.c,v retrieving revision 1.24 retrieving revision 1.25 diff -u -r1.24 -r1.25 --- window.c 28 Oct 2002 21:51:02 -0000 1.24 +++ window.c 23 Nov 2002 02:40:39 -0000 1.25 @@ -663,9 +663,9 @@ /* * Create a window error, containing an error message. */ -void xitk_window_dialog_one_button_with_width(ImlibData *im, char *title, char *button_label, - xitk_state_callback_t cb, void *userdata, - int window_width, int align, char *message, ...) { +xitk_window_t *xitk_window_dialog_one_button_with_width(ImlibData *im, char *title, char *button_label, + xitk_state_callback_t cb, void *userdata, + int window_width, int align, char *message, ...) { xitk_dialog_t *wd; xitk_labelbutton_widget_t lb; int windoww = window_width, windowh; @@ -673,7 +673,7 @@ int bwidth = 100, bx, by; if((im == NULL) || (window_width == 0) || (message == NULL)) - return; + return NULL; wd = (xitk_dialog_t *) xitk_xmalloc(sizeof(xitk_dialog_t)); @@ -683,7 +683,7 @@ int n, size = 100; if((buf = xitk_xmalloc(size)) == NULL) - return; + return NULL; while(1) { @@ -700,7 +700,7 @@ size *= 2; if((buf = realloc(buf, size)) == NULL) - return; + return NULL; } i = xitk_image_create_image_from_string(im, DEFAULT_FONT_12, windoww - 40, align, buf); @@ -789,18 +789,20 @@ wd->widget_list, (void *)wd); + return wd->xwin; } -void xitk_window_dialog_ok_with_width(ImlibData *im, char *title, - xitk_state_callback_t cb, void *userdata, - int window_width, int align, char *message, ...) { - - va_list args; - char *buf; - int n, size = 100; +xitk_window_t *xitk_window_dialog_ok_with_width(ImlibData *im, char *title, + xitk_state_callback_t cb, void *userdata, + int window_width, int align, char *message, ...) { + + va_list args; + char *buf; + int n, size = 100; + xitk_window_t *xw = NULL; if((buf = xitk_xmalloc(size)) == NULL) - return; + return NULL; while(1) { @@ -817,27 +819,28 @@ size *= 2; if((buf = realloc(buf, size)) == NULL) - return; + return NULL; } { char buf2[(strlen(buf) * 2) + 1]; xitk_subst_special_chars(buf, buf2); - xitk_window_dialog_one_button_with_width(im, title, _("OK"), cb, userdata, window_width, - align, buf2); + xw = xitk_window_dialog_one_button_with_width(im, title, _("OK"), cb, userdata, window_width, + align, buf2); } XITK_FREE(buf); + return xw; } /* * Create an interactive window, containing 'yes', 'no', 'cancel' buttons. */ -void xitk_window_dialog_two_buttons_with_width(ImlibData *im, char *title, - char *button1_label, char *button2_label, - xitk_state_callback_t cb1, - xitk_state_callback_t cb2, - void *userdata, - int window_width, int align, char *message, ...) { +xitk_window_t *xitk_window_dialog_two_buttons_with_width(ImlibData *im, char *title, + char *button1_label, char *button2_label, + xitk_state_callback_t cb1, + xitk_state_callback_t cb2, + void *userdata, + int window_width, int align, char *message, ...) { xitk_dialog_t *wd; xitk_labelbutton_widget_t lb; int windoww = window_width, windowh; @@ -845,7 +848,7 @@ int bwidth = 100, bx1, bx2, by; if((im == NULL) || (window_width == 0) || (message == NULL)) - return; + return NULL; wd = (xitk_dialog_t *) xitk_xmalloc(sizeof(xitk_dialog_t)); @@ -855,7 +858,7 @@ int n, size = 100; if((buf = xitk_xmalloc(size)) == NULL) - return; + return NULL; while(1) { @@ -872,7 +875,7 @@ size *= 2; if((buf = realloc(buf, size)) == NULL) - return; + return NULL; } i = xitk_image_create_image_from_string(im, DEFAULT_FONT_12, windoww - 40, align, buf); @@ -976,22 +979,24 @@ NULL, wd->widget_list, (void *)wd); + return wd->xwin; } /* * */ -void xitk_window_dialog_yesno_with_width(ImlibData *im, char *title, - xitk_state_callback_t ycb, - xitk_state_callback_t ncb, - void *userdata, - int window_width, int align, char *message, ...) { - va_list args; - char *buf; - int n, size = 100; +xitk_window_t *xitk_window_dialog_yesno_with_width(ImlibData *im, char *title, + xitk_state_callback_t ycb, + xitk_state_callback_t ncb, + void *userdata, + int window_width, int align, char *message, ...) { + va_list args; + char *buf; + int n, size = 100; + xitk_window_t *xw = NULL; if((buf = xitk_xmalloc(size)) == NULL) - return; + return NULL; while(1) { @@ -1008,32 +1013,33 @@ size *= 2; if((buf = realloc(buf, size)) == NULL) - return; + return NULL; } { char buf2[(strlen(buf) * 2) + 1]; xitk_subst_special_chars(buf, buf2); - xitk_window_dialog_two_buttons_with_width(im, title, _("Yes"), _("No"), - ycb, ncb, userdata, window_width, align, buf2); + xw = xitk_window_dialog_two_buttons_with_width(im, title, _("Yes"), _("No"), + ycb, ncb, userdata, window_width, align, buf2); } XITK_FREE(buf); + return xw; } /* * Create an interactive window, containing 'yes', 'no', 'cancel' buttons. */ -void xitk_window_dialog_three_buttons_with_width(ImlibData *im, char *title, - char *button1_label, - char *button2_label, - char *button3_label, - xitk_state_callback_t cb1, - xitk_state_callback_t cb2, - xitk_state_callback_t cb3, - void *userdata, - int window_width, int align, char *message, ...) { +xitk_window_t *xitk_window_dialog_three_buttons_with_width(ImlibData *im, char *title, + char *button1_label, + char *button2_label, + char *button3_label, + xitk_state_callback_t cb1, + xitk_state_callback_t cb2, + xitk_state_callback_t cb3, + void *userdata, + int window_width, int align, char *message, ...) { xitk_dialog_t *wd; xitk_labelbutton_widget_t lb; int windoww = window_width, windowh; @@ -1041,7 +1047,7 @@ int bwidth = 100, bx1, bx2, bx3, by; if((im == NULL) || (window_width == 0) || (message == NULL)) - return; + return NULL; wd = (xitk_dialog_t *) xitk_xmalloc(sizeof(xitk_dialog_t)); @@ -1051,7 +1057,7 @@ int n, size = 100; if((buf = xitk_xmalloc(size)) == NULL) - return; + return NULL; while(1) { @@ -1068,7 +1074,7 @@ size *= 2; if((buf = realloc(buf, size)) == NULL) - return; + return NULL; } i = xitk_image_create_image_from_string(im, DEFAULT_FONT_12, windoww - 40, align, buf); @@ -1189,20 +1195,23 @@ NULL, wd->widget_list, (void *)wd); + + return wd->xwin; } -void xitk_window_dialog_yesnocancel_with_width(ImlibData *im, char *title, - xitk_state_callback_t ycb, - xitk_state_callback_t ncb, - xitk_state_callback_t ccb, - void *userdata, - int window_width, int align, char *message, ...) { - va_list args; - char *buf; - int n, size = 100; +xitk_window_t *xitk_window_dialog_yesnocancel_with_width(ImlibData *im, char *title, + xitk_state_callback_t ycb, + xitk_state_callback_t ncb, + xitk_state_callback_t ccb, + void *userdata, + int window_width, int align, char *message, ...) { + va_list args; + char *buf; + int n, size = 100; + xitk_window_t *xw = NULL; if((buf = xitk_xmalloc(size)) == NULL) - return; + return NULL; while(1) { @@ -1219,15 +1228,16 @@ size *= 2; if((buf = realloc(buf, size)) == NULL) - return; + return NULL; } { char buf2[(strlen(buf) * 2) + 1]; xitk_subst_special_chars(buf, buf2); - xitk_window_dialog_three_buttons_with_width(im, title, _("Yes"), _("No"), _("Cancel"), - ycb, ncb, ccb, userdata, window_width, align, buf2); + xw = xitk_window_dialog_three_buttons_with_width(im, title, _("Yes"), _("No"), _("Cancel"), + ycb, ncb, ccb, userdata, window_width, align, buf2); } XITK_FREE(buf); + return xw; } Index: window.h =================================================================== RCS file: /cvsroot/xine/xine-ui/src/xitk/xine-toolkit/window.h,v retrieving revision 1.7 retrieving revision 1.8 diff -u -r1.7 -r1.8 --- window.h 29 Apr 2002 23:43:02 -0000 1.7 +++ window.h 23 Nov 2002 02:40:39 -0000 1.8 @@ -115,54 +115,54 @@ /* * */ -void xitk_window_dialog_one_button_with_width(ImlibData *im, char *title, char *button_label, - xitk_state_callback_t cb, void *userdata, - int window_width, int align, char *message, ...); +xitk_window_t *xitk_window_dialog_one_button_with_width(ImlibData *im, char *title, char *button_label, + xitk_state_callback_t cb, void *userdata, + int window_width, int align, char *message, ...); /* * Display an OK window (sized), containing the message. */ -void xitk_window_dialog_ok_with_width(ImlibData *im, char *title, - xitk_state_callback_t cb, void *userdata, - int window_width, int align, char *message, ...); +xitk_window_t *xitk_window_dialog_ok_with_width(ImlibData *im, char *title, + xitk_state_callback_t cb, void *userdata, + int window_width, int align, char *message, ...); /* * */ -void xitk_window_dialog_two_buttons_with_width(ImlibData *im, char *title, - char *button1_label, char *button2_label, - xitk_state_callback_t cb1, - xitk_state_callback_t cb2, - void *userdata, - int window_width, int align, char *message, ...); +xitk_window_t *xitk_window_dialog_two_buttons_with_width(ImlibData *im, char *title, + char *button1_label, char *button2_label, + xitk_state_callback_t cb1, + xitk_state_callback_t cb2, + void *userdata, + int window_width, int align, char *message, ...); /* * Display a question window with 'yes' and 'no' buttons. */ -void xitk_window_dialog_yesno_with_width(ImlibData *im, char *title, - xitk_state_callback_t ycb, - xitk_state_callback_t ncb, - void *userdata, - int window_width, int align, char *message, ...); +xitk_window_t *xitk_window_dialog_yesno_with_width(ImlibData *im, char *title, + xitk_state_callback_t ycb, + xitk_state_callback_t ncb, + void *userdata, + int window_width, int align, char *message, ...); /* * */ -void xitk_window_dialog_three_buttons_with_width(ImlibData *im, char *title, - char *button1_label, - char *button2_label, - char *button3_label, - xitk_state_callback_t cb1, - xitk_state_callback_t cb2, - xitk_state_callback_t cb3, - void *userdata, - int window_width, int align, char *message, ...); +xitk_window_t *xitk_window_dialog_three_buttons_with_width(ImlibData *im, char *title, + char *button1_label, + char *button2_label, + char *button3_label, + xitk_state_callback_t cb1, + xitk_state_callback_t cb2, + xitk_state_callback_t cb3, + void *userdata, + int window_width, int align, char *message, ...); /* * Display a question window with 'yes', 'no' and 'cancel' buttons. */ -void xitk_window_dialog_yesnocancel_with_width(ImlibData *im, char *title, - xitk_state_callback_t ycb, - xitk_state_callback_t ncb, - xitk_state_callback_t ccb, - void *userdata, - int window_width, int align, char *message, ...); +xitk_window_t *xitk_window_dialog_yesnocancel_with_width(ImlibData *im, char *title, + xitk_state_callback_t ycb, + xitk_state_callback_t ncb, + xitk_state_callback_t ccb, + void *userdata, + int window_width, int align, char *message, ...); #endif Index: xitk.c =================================================================== RCS file: /cvsroot/xine/xine-ui/src/xitk/xine-toolkit/xitk.c,v retrieving revision 1.57 retrieving revision 1.58 diff -u -r1.57 -r1.58 --- xitk.c 13 Nov 2002 22:40:28 -0000 1.57 +++ xitk.c 23 Nov 2002 02:40:39 -0000 1.58 @@ -59,6 +59,7 @@ #include "slider.h" #include "combo.h" #include "tips.h" +#include "window.h" #include "_config.h" #include "_xitk.h" @@ -132,6 +133,8 @@ xitk_list_t *gfx; int use_xshm; + int wm_type; + int (*x_error_handler)(Display *, XErrorEvent *); pthread_mutex_t mutex; @@ -144,6 +147,7 @@ static __xitk_t *gXitk; static pid_t xitk_pid; +static Atom XA_WIN_LAYER = None, XA_STAYS_ON_TOP = None; void widget_stop(void); @@ -302,6 +306,161 @@ return gXitk->use_xshm; } +int xitk_check_wm(Display *display) { + Atom *atoms; + int i, natoms; + int type = WM_TYPE_UNKNOWN; + Window window; + + XLockDisplay(display); + window = XCreateSimpleWindow(display, RootWindow(display, (XDefaultScreen(display))), + 0, 0, 1, 1, 0, 0, 0); + XSelectInput(display, window, PropertyChangeMask | StructureNotifyMask ); + XMapWindow(display, window); + + while(!xitk_is_window_visible(display, window)) + xitk_usec_sleep(5000); + + atoms = XListProperties(display, window, &natoms); + + if(natoms) { + for(i = 0; i < natoms; i++) { + char *atomname = XGetAtomName(display, atoms[i]); + + if(!strncasecmp("_E_FRAME_SIZE",atomname, 13)) + type = WM_TYPE_E; + else if(!strncasecmp("_KDE_",atomname, 5)) + type = WM_TYPE_KDE; + else if(!strncasecmp("_ICEWM_",atomname, 7)) + type = WM_TYPE_ICE; + else if(!strncasecmp("KWM_WIN_DESKTOP",atomname, 15)) + type = WM_TYPE_WMAKER; + } + } + + XUnmapWindow(display, window); + XDestroyWindow(display, window); + + switch(type) { + case WM_TYPE_KDE: + XA_WIN_LAYER = XInternAtom(display, "_NET_WM_STATE", False); + XA_STAYS_ON_TOP = XInternAtom(display, "_NET_WM_STATE_STAYS_ON_TOP", False); + break; + case WM_TYPE_UNKNOWN: + case WM_TYPE_E: + case WM_TYPE_ICE: + case WM_TYPE_WMAKER: + case WM_TYPE_GNOMECOMP: + XA_WIN_LAYER = XInternAtom(display, "_WIN_LAYER", False); + break; + } + + XUnlockDisplay(display); + + printf("-[ WM type: "); + switch(type) { + case WM_TYPE_UNKNOWN: + printf("Unknown"); + break; + case WM_TYPE_KDE: + printf("KDE"); + break; + case WM_TYPE_E: + printf("Enlightenment"); + break; + case WM_TYPE_ICE: + printf("Ice"); + break; + case WM_TYPE_WMAKER: + printf("WindowMaker"); + break; + case WM_TYPE_GNOMECOMP: + printf("GnomeCompliant"); + break; + } + printf(" ]-\n"); + + return type; +} +int xitk_get_wm_type(void) { + return gXitk->wm_type; +} + +int xitk_get_layer_level(void) { + int level = 10; + + switch(gXitk->wm_type) { + case WM_TYPE_GNOMECOMP: + case WM_TYPE_UNKNOWN: + case WM_TYPE_KDE: + level = 10; /* Wrong, but we need to provide a default value */ + break; + case WM_TYPE_WMAKER: + level = 6; + break; + case WM_TYPE_ICE: + level = 8; + break; + case WM_TYPE_E: + level = 6; + break; + } + return level; +} + +void xitk_set_layer_above(Window window) { + + switch(gXitk->wm_type) { + + case WM_TYPE_KDE: + XLockDisplay(gXitk->display); + XChangeProperty(gXitk->display, window, XA_WIN_LAYER, + XA_ATOM, 32, PropModeReplace, (unsigned char *)&XA_STAYS_ON_TOP, 1); + XUnlockDisplay(gXitk->display); + break; + + case WM_TYPE_GNOMECOMP: + case WM_TYPE_UNKNOWN: + case WM_TYPE_WMAKER: + case WM_TYPE_ICE: + case WM_TYPE_E: + default: + { + long propvalue[1]; + + propvalue[0] = xitk_get_layer_level(); + + XLockDisplay(gXitk->display); + XChangeProperty(gXitk->display, window, XA_WIN_LAYER, + XA_CARDINAL, 32, PropModeReplace, (unsigned char *)propvalue, + 1); + XUnlockDisplay(gXitk->display); + } + break; + } +} +void xitk_set_window_layer(Window window, int layer) { + XEvent xev; + + if(gXitk->wm_type == WM_TYPE_KDE) + return; + + xev.type = ClientMessage; + xev.xclient.type = ClientMessage; + xev.xclient.window = window; + xev.xclient.message_type = XA_WIN_LAYER; + xev.xclient.format = 32; + xev.xclient.data.l[0] = (long) layer; + xev.xclient.data.l[1] = (long) 0; + xev.xclient.data.l[2] = (long) 0; + xev.xclient.data.l[3] = (long) 0; + + XLockDisplay(gXitk->display); + XSendEvent(gXitk->display, RootWindow(gXitk->display, (XDefaultScreen(gXitk->display))), + False, SubstructureNotifyMask, (XEvent*) &xev); + XUnlockDisplay(gXitk->display); +} + /* * Create a new widget_list, store the pointer in private * list of xitk_widget_list_t, then return the widget_list pointer. @@ -990,6 +1149,8 @@ } } #endif + + gXitk->wm_type = xitk_check_wm(display); } /* Index: xitk.h =================================================================== RCS file: /cvsroot/xine/xine-ui/src/xitk/xine-toolkit/xitk.h,v retrieving revision 1.77 retrieving revision 1.78 diff -u -r1.77 -r1.78 --- xitk.h 18 Nov 2002 01:28:29 -0000 1.77 +++ xitk.h 23 Nov 2002 02:40:39 -0000 1.78 @@ -64,6 +64,13 @@ #define XITK_PATH_MAX PATH_MAX #endif +#define WM_TYPE_UNKNOWN 0 +#define WM_TYPE_KDE 1 +#define WM_TYPE_E 2 +#define WM_TYPE_ICE 3 +#define WM_TYPE_WMAKER 4 +#define WM_TYPE_GNOMECOMP 5 + #define INPUT_MOTION (ExposureMask | ButtonPressMask | ButtonReleaseMask | \ KeyPressMask | KeyReleaseMask | ButtonMotionMask | \ StructureNotifyMask | PropertyChangeMask | \ @@ -367,6 +374,25 @@ */ char *xitk_set_locale(void); +/* + * + */ +int xitk_get_layer_level(void); + +/* + * Return WM_TYPE_* + */ +int xitk_get_wm_type(void); + +/* + * + */ +void xitk_set_layer_above(Window window); + +/* + * + */ +void xitk_set_window_layer(Window window, int layer); /* * This function start the widget live. It's a block function, @@ -1974,137 +2000,110 @@ /* * */ -void xitk_window_dialog_one_button_with_width(ImlibData *im, char *title, char *button_label, - xitk_state_callback_t cb, void *userdata, - int window_width, int align, char *message, ...); +xitk_window_t *xitk_window_dialog_one_button_with_width(ImlibData *im, char *title, char *button_label, + xitk_state_callback_t cb, void *userdata, + int window_width, int align, char *message, ...); /** * */ -void xitk_window_dialog_ok_with_width(ImlibData *im, char *title, - xitk_state_callback_t cb, void *userdata, - int window_width, int align, char *message, ...); +xitk_window_t *xitk_window_dialog_ok_with_width(ImlibData *im, char *title, + xitk_state_callback_t cb, void *userdata, + int window_width, int align, char *message, ...); /** * */ -void xitk_window_dialog_ok(ImlibData *im, char *title, - xitk_state_callback_t cb, void *userdata, int align, char *message, ...); +xitk_window_t *xitk_window_dialog_ok(ImlibData *im, char *title, + xitk_state_callback_t cb, void *userdata, int align, char *message, ...); + #ifdef __GNUC__ -#define xitk_window_dialog_ok(im, title, cb, userdata, align, message, args...) do \ - if(((im) == NULL) || ((message) == NULL)) \ - return; \ - xitk_window_dialog_ok_with_width(im, title, cb, userdata, 400, align, message, ##args); \ -} while(0) -#define xitk_window_dialog_error(im, message, args...) do { \ - if(((im) == NULL) || ((message) == NULL)) \ - return; \ - xitk_window_dialog_ok_with_width(im, _("Error"), NULL, NULL, 400, ALIGN_CENTER, message, ##args);\ -} while(0) -#define xitk_window_dialog_info(im, message, args...) do { \ - if(((im) == NULL) || ((message) == NULL)) \ - return; \ - xitk_window_dialog_ok_with_width(im, _("Information"), NULL, NULL, 400, ALIGN_CENTER, message, ##args);\ -} while(0) +#define xitk_window_dialog_ok(im, title, cb, userdata, align, message, args...) \ + xitk_window_dialog_ok_with_width(im, title, cb, userdata, 400, align, message, ##args) + +#define xitk_window_dialog_error(im, message, args...) \ + xitk_window_dialog_ok_with_width(im, _("Error"), NULL, NULL, 400, ALIGN_CENTER, message, ##args) + +#define xitk_window_dialog_info(im, message, args...) \ + xitk_window_dialog_ok_with_width(im, _("Information"), NULL, NULL, 400, ALIGN_CENTER, message, ##args) #else -#define xitk_window_dialog_ok(im, title, cb, userdata, align, ...) do { \ - if(((im) == NULL)) \ - return; \ - xitk_window_dialog_ok_with_width(im, title, cb, userdata, 400, align, __VA_ARGS__); \ -} while(0) -#define xitk_window_dialog_error(im, ...) do { \ - if(((im) == NULL)) \ - return; \ - xitk_window_dialog_ok_with_width(im, _("Error"), NULL, NULL, 400, ALIGN_CENTER, __VA_ARGS__); \ -} while(0) -#define xitk_window_dialog_info(im, ...) do { \ - if(((im) == NULL)) \ - return; \ - xitk_window_dialog_ok_with_width(im, _("Information"), NULL, NULL, 400, ALIGN_CENTER, __VA_ARGS__);\ -} while(0) -#endif +#define xitk_window_dialog_ok(im, title, cb, userdata, align, ...) \ + xitk_window_dialog_ok_with_width(im, title, cb, userdata, 400, align, __VA_ARGS__) -/* +#define xitk_window_dialog_error(im, ...) \ + xitk_window_dialog_ok_with_width(im, _("Error"), NULL, NULL, 400, ALIGN_CENTER, __VA_ARGS__) + +#define xitk_window_dialog_info(im, ...) \ + xitk_window_dialog_ok_with_width(im, _("Information"), NULL, NULL, 400, ALIGN_CENTER, __VA_ARGS__)#endif +#endif +/* * */ -void xitk_window_dialog_three_buttons_with_width(ImlibData *im, char *title, - xitk_state_callback_t cb1, - xitk_state_callback_t cb2, - xitk_state_callback_t cb3, - void *userdata, - int window_width, int align, char *message, ...); +xitk_window_t *xitk_window_dialog_three_buttons_with_width(ImlibData *im, char *title, xitk_state_callback_t cb1, + xitk_state_callback_t cb2, + xitk_state_callback_t cb3, + void *userdata, + int window_width, int align, char *message, ...); /** * */ -void xitk_window_dialog_yesnocancel_with_width(ImlibData *im, char *title, - xitk_state_callback_t ycb, - xitk_state_callback_t ncb, - xitk_state_callback_t ccb, - void *userdata, - int window_width, int align, char *message, ...); +xitk_window_t *xitk_window_dialog_yesnocancel_with_width(ImlibData *im, char *title, + xitk_state_callback_t ycb, + xitk_state_callback_t ncb, + xitk_state_callback_t ccb, + void *userdata, + int window_width, int align, char *message, ...); /** * */ -void xitk_window_dialog_yesnocancel(ImlibData *im, char *title, - xitk_state_callback_t ycb, - xitk_state_callback_t ncb, - xitk_state_callback_t ccb, - void *userdata, int align, char *message, ...); +xitk_window_t *xitk_window_dialog_yesnocancel(ImlibData *im, char *title, + xitk_state_callback_t ycb, + xitk_state_callback_t ncb, + xitk_state_callback_t ccb, + void *userdata, int align, char *message, ...); #ifdef __GNUC__ -#define xitk_window_dialog_yesnocancel(im, title, ycb, ncb, ccb, userdata, align, message, args...) do { \ - if(((im) == NULL) || ((message) == NULL)) \ - return; \ - xitk_window_dialog_yesnocancel_with_width(im, title, ycb, ncb, ccb, userdata, 400, align, message, ##args); \ -} while(0) +#define xitk_window_dialog_yesnocancel(im, title, ycb, ncb, ccb, userdata, align, message, args...) \ + xitk_window_dialog_yesnocancel_with_width(im, title, ycb, ncb, ccb, userdata, 400, align, message, ##args) #else -#define xitk_window_dialog_yesnocancel(im, title, ycb, ncb, ccb, userdata, align, ...) do { \ - if(((im) == NULL)) \ - return; \ - xitk_window_dialog_yesnocancel_with_width(im, title, ycb, ncb, ccb, userdata, 400, align, __VA_ARGS__);\ -} while(0) +#define xitk_window_dialog_yesnocancel(im, title, ycb, ncb, ccb, userdata, align, ...) \ + xitk_window_dialog_yesnocancel_with_width(im, title, ycb, ncb, ccb, userdata, 400, align, __VA_ARGS__) #endif /* * */ -void xitk_window_dialog_two_buttons_with_width(ImlibData *im, char *title, - char *button1_label, char *button2_label, - xitk_state_callback_t cb1, - xitk_state_callback_t cb2, - void *userdata, - int window_width, int align, char *message, ...); +xitk_window_t *xitk_window_dialog_two_buttons_with_width(ImlibData *im, char *title, + char *button1_label, char *button2_label, + xitk_state_callback_t cb1, + xitk_state_callback_t cb2, + void *userdata, + int window_width, int align, char *message, ...); /** * */ -void xitk_window_dialog_yesno_with_width(ImlibData *im, char *title, - xitk_state_callback_t ycb, - xitk_state_callback_t ncb, - void *userdata, - int window_width, int align, char *message, ...); +xitk_window_t *xitk_window_dialog_yesno_with_width(ImlibData *im, char *title, + xitk_state_callback_t ycb, + xitk_state_callback_t ncb, + void *userdata, + int window_width, int align, char *message, ...); /** * */ -void xitk_window_dialog_yesno(ImlibData *im, char *title, - xitk_state_callback_t ycb, - xitk_state_callback_t ncb, - void *userdata, int align, char *message, ...); +xitk_window_t *xitk_window_dialog_yesno(ImlibData *im, char *title, + xitk_state_callback_t ycb, + xitk_state_callback_t ncb, + void *userdata, int align, char *message, ...); #ifdef __GNUC__ -#define xitk_window_dialog_yesno(im, title, ycb, ncb, userdata, align, message, args...) do { \ - if(((im) == NULL) || ((message) == NULL)) \ - return; \ - xitk_window_dialog_yesno_with_width(im, title, ycb, ncb, userdata, 400, align, message, ##args); \ -} while(0) +#define xitk_window_dialog_yesno(im, title, ycb, ncb, userdata, align, message, args...) \ + xitk_window_dialog_yesno_with_width(im, title, ycb, ncb, userdata, 400, align, message, ##args) #else -#define xitk_window_dialog_yesno(im, title, ycb, ncb, userdata, align, ...) do { \ - if(((im) == NULL)) \ - return; \ - xitk_window_dialog_yesno_with_width(im, title, ycb, ncb, userdata, 400, align, __VA_ARGS__); \ -} while(0) +#define xitk_window_dialog_yesno(im, title, ycb, ncb, userdata, align, ...) \ + xitk_window_dialog_yesno_with_width(im, title, ycb, ncb, userdata, 400, align, __VA_ARGS__) #endif |