Here is an example that uses a private ClientMessage handler.
When you close the main window from the menu, it pops up a dialogue asking for confirmation.
/************************** Example 10 ***********************/
#include "EZ.h"
EZ_Widget *Dialogue; /* a dialogue */
Atom WMProtocolsAtom; /* WM_PROTOCOLS */
Atom DeleteWindowAtom; /* WM_DELETE_WINDOW */
void yesCallBack(EZ_Widget *widget, void *data)
{
EZ_Shutdown();
exit(0);
}
void noCallBack(EZ_Widget *widget, void *data)
{
if(widget)
{
EZ_Widget *toplevel = (EZ_Widget *)data;
EZ_HideWidget(toplevel);
EZ_ReleaseGrab();
}
}
void buttonCallBack(EZ_Widget *widget, void *data)
{
EZ_DisplayWidget(Dialogue);
EZ_SetGrab(Dialogue);
EZ_SetFocusTo((EZ_Widget *)EZ_GetWidgetPtrData(Dialogue));
}
void clientMessageHandler(EZ_Widget *widget, void *data, int etype, XEvent *xev)
{
XClientMessageEvent *ev = (XClientMessageEvent *)xev;
if(ev->message_type == WMProtocolsAtom)
{
Atom c = (ev->data.l)[0];
if(c == DeleteWindowAtom)
{
EZ_DisplayWidget(Dialogue);
EZ_SetGrab(Dialogue);
EZ_SetFocusTo((EZ_Widget *)EZ_GetWidgetPtrData(Dialogue));
}
}
}
main(int argc, char **argv)
{
EZ_Widget *frame, *button, *buttonA;
EZ_Widget *yes, *no;
EZ_Initialize(argc,argv,0);
DeleteWindowAtom = EZ_GetAtom("WM_DELETE_WINDOW");
WMProtocolsAtom = EZ_GetAtom("WM_PROTOCOLS");
frame = EZ_CreateWidget(EZ_WIDGET_FRAME, NULL, 0);
button = EZ_CreateWidget(EZ_WIDGET_NORMAL_BUTTON, frame,
EZ_LABEL_STRING, "Press me", 0);
EZ_AddWidgetCallBack(button, EZ_CALLBACK, buttonCallBack, NULL, 0);
buttonA = EZ_CreateWidget(EZ_WIDGET_NORMAL_BUTTON, frame,
EZ_LABEL_STRING, "A Button", 0);
Dialogue = EZ_CreateWidget(EZ_WIDGET_FRAME, NULL,
EZ_LABEL_STRING, "Want to Quit?",
EZ_TRANSIENT, 1, 0);
yes = EZ_CreateWidget(EZ_WIDGET_NORMAL_BUTTON, Dialogue,
EZ_LABEL_STRING, "Yes", 0);
no = EZ_CreateWidget(EZ_WIDGET_NORMAL_BUTTON, Dialogue,
EZ_LABEL_STRING, "No", 0);
EZ_AddWidgetCallBack(yes, EZ_CALLBACK, yesCallBack,NULL, 0);
EZ_AddWidgetCallBack(no, EZ_CALLBACK, noCallBack, Dialogue,0);
EZ_SetWidgetPtrData(Dialogue, no);
EZ_SetClientMessageHandler(clientMessageHandler, NULL);
EZ_DisplayWidget(frame);
EZ_EventMainLoop();
}
/************************** Example 10 ***********************/