DialogShell::~DialogShell() { Atom WM_DELETE_WINDOW=XmInternAtom( XtDisplay( _w ), "WM_DELETE_WINDOW", False ); XmRemoveWMProtocolCallback( _w, WM_DELETE_WINDOW, ( XtCallbackProc ) quitCallback, NULL ); }
void ui_remove_window_close_callback( Widget shell, XtCallbackProc delete_callback, XtPointer client_data ) { Atom WM_DELETE_WINDOW; WM_DELETE_WINDOW = XmInternAtom(XtDisplay(shell),"WM_DELETE_WINDOW",False); XmRemoveWMProtocolCallback(shell,WM_DELETE_WINDOW, delete_callback, client_data); }
/*********************************************************************** * The instance is gone. Remove Event Handlers so that they aren't * called with a reference to the old instance. ***********************************************************************/ void RxpTeardown (PluginInstance* This) { if (This->toplevel_widget != NULL) { /* ConfigureNotify on top level */ XtRemoveRawEventHandler (This->toplevel_widget, StructureNotifyMask, False, StructureNotifyHandler, (XtPointer) This); XtRemoveRawEventHandler (This->toplevel_widget, NoEventMask, True, RxpWmDelWinHandler, (XtPointer) This); #if 0 XmRemoveWMProtocolCallback (This->toplevel_widget, RxGlobal.wm_delete_window, RxpWmDelWinHandler, (XtPointer) This); #endif } }
/*----------------------------------------------------------------------*/ /* extern */ void XfeShellRemoveCloseCallback(Widget shell, XtCallbackProc callback, XtPointer data) { static Atom wm_delete_window = None; assert( XtIsShell(shell) ); if (!_XfeIsAlive(shell)) { return; } if (wm_delete_window == None) { wm_delete_window = XmInternAtom(XtDisplay(shell), "WM_DELETE_WINDOW", False); } XmRemoveWMProtocolCallback(shell,wm_delete_window,callback,data); }
/****************************************************** Create a fileSelectionBox ******************************************************/ Widget createFileDialog(Widget parent,void *okCallback,XtPointer okParm, void *cancelCallback,XtPointer cancelParm,XtPointer userParm, String title,String pattern,String directory) { XmString Xtitle; XmString Xpattern; XmString Xdirectory; XmString Xcurrentdir=0; static Widget fileselectdialog = 0; /* make it static for reuse */ static void *oldOk= NULL; static void *oldCancel=NULL; static XtPointer oldOkParm = 0; static XtPointer oldCancelParm = 0; static Atom WM_DELETE_WINDOW = 0; char file_sel[]="file_sel"; /* parent = 0 means we want to unmanage the fileSelectdialog */ if (!parent){ if (fileselectdialog && XtIsManaged(fileselectdialog)) XtUnmanageChild(fileselectdialog); return(fileselectdialog); } /* destroy runtimeToplevel fileselectdialog so we will not have exposure problems */ if ( parent && fileselectdialog && XtParent(XtParent(fileselectdialog)) != parent) { XtDestroyWidget(fileselectdialog); fileselectdialog = 0; } /* "Open" was selected. Create a Motif FileSelectionDialog w/callback */ if (!fileselectdialog) { fileselectdialog = XmCreateFileSelectionDialog(parent, file_sel, NULL, 0); XtVaSetValues(fileselectdialog, XmNallowShellResize, FALSE, NULL); WM_DELETE_WINDOW = XmInternAtom(XtDisplay(fileselectdialog), "WM_DELETE_WINDOW", False); XtAddCallback(fileselectdialog,XmNhelpCallback, (XtCallbackProc)helpCallback,(XtPointer)NULL); } else { XtVaGetValues(fileselectdialog, XmNdirectory, &Xcurrentdir, NULL); if (oldOk) XtRemoveCallback(fileselectdialog,XmNokCallback, (XtCallbackProc)oldOk ,(XtPointer)oldOkParm); if (oldCancel) XtRemoveCallback(fileselectdialog,XmNcancelCallback, (XtCallbackProc)oldCancel ,(XtPointer)oldCancelParm); if (oldCancel) XmRemoveWMProtocolCallback(XtParent(fileselectdialog), WM_DELETE_WINDOW,(XtCallbackProc)oldCancel,(XtPointer)oldCancelParm ); } Xtitle=XmStringCreateLtoR(title,XmSTRING_DEFAULT_CHARSET); Xpattern=XmStringCreateLtoR(pattern,XmSTRING_DEFAULT_CHARSET); if ( !directory && Xcurrentdir ) Xdirectory = Xcurrentdir; else Xdirectory = XmStringCreateLtoR(directory,XmSTRING_DEFAULT_CHARSET); XtVaSetValues(fileselectdialog, XmNuserData, userParm, XmNdialogTitle, Xtitle, XmNdirectory, Xdirectory, XmNpattern, Xpattern, (XtPointer)NULL); XmStringFree(Xtitle); XmStringFree(Xpattern); XmStringFree(Xdirectory); XtAddCallback(fileselectdialog,XmNokCallback, (XtCallbackProc)okCallback, (XtPointer)okParm); XtAddCallback(fileselectdialog,XmNcancelCallback, (XtCallbackProc)cancelCallback,(XtPointer)cancelParm); XmAddWMProtocolCallback(XtParent(fileselectdialog),WM_DELETE_WINDOW, (XtCallbackProc)cancelCallback,(XtPointer)cancelParm ); oldOk = okCallback; oldCancel = cancelCallback; oldOkParm = okParm; oldCancelParm = cancelParm; XtManageChild(fileselectdialog); XFlush(display); /* XtPopup(XtParent(fileselectdialog), XtGrabNone); */ return(fileselectdialog); }