bool GUIinput::EventAction(const std::string& event) { if(event=="activate") TakeFocus(); else if(event=="deactivate") ReleaseFocus(); else if(event=="togglefocus") { if(HasFocus()) { ReleaseFocus(); } else { TakeFocus(); } } else if(event=="togglehidden") { if(isHidden()) TakeFocus(); GUIframe::EventAction(event); } else GUIframe::EventAction(event); return false; }
void TopWindow::EventProc(XWindow& w, XEvent *event) { GuiLock __; Ptr<Ctrl> this_ = this; if(event->type == ClientMessage) { if(event->xclient.format == 32 && event->xclient.message_type) if(event->xclient.message_type == XAtom("WM_PROTOCOLS")) { Atom a = event->xclient.data.l[0]; if(a == XAtom("WM_DELETE_WINDOW") && IsEnabled()) { LLOG("DELETE_WINDOW " << Name()); WhenClose(); return; } if(a == XAtom("WM_TAKE_FOCUS")) { LLOG("TAKE_FOCUS serial: " << event->xclient.serial); Xeventtime = event->xclient.data.l[1]; TakeFocus(); return; } if(a == XAtom("_NET_WM_PING")) { XEvent ev = *event; ev.xclient.window = Xroot; XSendEvent(Xdisplay, Xroot, 0, SubstructureRedirectMask|SubstructureNotifyMask, &ev); return; } LLOG("Unknown WM_PROTOCOLS: " << XAtomName(a)); } } else if(event->type == PropertyNotify && event->xproperty.atom == XAtom("_NET_WM_STATE")) { LLOG("_NET_WM_STATE notify"); Vector<int> p = GetPropertyInts(GetWindow(), XAtom("_NET_WM_STATE")); if(FindIndex(p, (int)XAtom("_NET_WM_STATE_HIDDEN")) >= 0) { state = MINIMIZED; LLOG("MINIMIZED"); } else if(FindIndex(p, (int)XAtom("_NET_WM_STATE_MAXIMIZED_HORZ")) >= 0 && FindIndex(p, (int)XAtom("_NET_WM_STATE_MAXIMIZED_VERT")) >= 0) { state = MAXIMIZED; LLOG("MAXIMIZED"); } else { state = OVERLAPPED; LLOG("OVERLAPPED"); } } if(this_) Ctrl::EventProc(w, event); if(this_) SyncSizeHints(); }