当用户点击motif窗口(widget)的关闭框时如何拦截,以及如何阻止Motif窗口管理器关闭被点击的关闭框上的整个调用应用程序(以便我的应用程序可以关闭Motif应用程序上下文和windows继续运行)?我试图通过Google,tuts和docs找到自己,但没有骰子。需要C ++。
答案 0 :(得分:1)
这似乎有效(在inet上找到):
#include <Xm/Protocols.h>
Boolean SetCloseCallBack (Widget shell, void (*callback) (Widget, XtPointer, XtPointer))
{
extern Atom XmInternAtom (Display *, char *, Boolean);
if (!shell)
return False;
Display* disp = XtDisplay (shell);
if (!disp)
return False;
// Retrieve Window Manager Protocol Property
Atom prop = XmInternAtom (disp, const_cast<char*>("WM_PROTOCOLS"), False);
if (!prop)
return False;
// Retrieve Window Manager Delete Window Property
Atom prot = XmInternAtom (disp, const_cast<char*>("WM_DELETE_WINDOW"), True);
if (!prot)
return False;
// Ensure that Shell has the Delete Window Property
// NB: Necessary since some Window managers are not
// Fully XWM Compilant (olwm for instance is not)
XmAddProtocols (shell, prop, &prot, 1);
// Now add our callback into the Protocol Callback List
XmAddProtocolCallback (shell, prop, prot, callback, NULL);
return True;
}
设置这样的回调将阻止应用程序被关闭,因为关闭事件被处理为默认事件处理程序。
答案 1 :(得分:1)
不是vendorShellWidgetClass会为你做的伎俩吗?就像在,关闭主题应用程序上下文而不是窗口..
答案 2 :(得分:0)
您需要捕获unix信号以防止应用程序关闭。