void DropGrid::PopUpGrid::Deactivate() { if(IsOpen() && IsPopUp()) { WhenPopDown(); IgnoreMouseClick(); GridCtrl::Close(); WhenClose(); } }
LRESULT TopWindow::WindowProc(UINT message, WPARAM wParam, LPARAM lParam) { GuiLock __; HWND hwnd = GetHWND(); #ifndef PLATFORM_WINCE bool inloop; #endif switch(message) { #ifndef PLATFORM_WINCE case WM_QUERYENDSESSION: inloop = InLoop(); WhenClose(); return inloop ? !InLoop() : !IsOpen(); case WM_ENDSESSION: EndSession() = true; PostQuitMessage(0); return 0; #endif case WM_CLOSE: if(IsEnabled()) { IgnoreMouseUp(); WhenClose(); } return 0; case WM_WINDOWPOSCHANGED: #ifndef PLATFORM_WINCE if(IsIconic(hwnd)) state = MINIMIZED; else if(IsZoomed(hwnd)) state = MAXIMIZED; else #endif { state = OVERLAPPED; overlapped = GetScreenClient(hwnd); } Layout(); break; } return Ctrl::WindowProc(message, wParam, lParam); }
LRESULT TopWindow::WindowProc(UINT message, WPARAM wParam, LPARAM lParam) { GuiLock __; HWND hwnd = GetHWND(); #ifndef PLATFORM_WINCE bool inloop; #endif switch(message) { #ifndef PLATFORM_WINCE case WM_QUERYENDSESSION: inloop = InLoop(); WhenClose(); return inloop ? !InLoop() : !IsOpen(); #endif case WM_CLOSE: if(IsEnabled()) { IgnoreMouseUp(); WhenClose(); } return 0; case WM_WINDOWPOSCHANGED: if(!isopen) break; #ifndef PLATFORM_WINCE if(IsIconic(hwnd)) state = MINIMIZED; else if(IsZoomed(hwnd)) state = MAXIMIZED; else #endif { state = OVERLAPPED; if(IsWindowVisible(hwnd)) overlapped = GetScreenClient(hwnd); // 12-05-23 Tom added 'if(IsWindowVisible(hwnd))' to get only proper rectangles } LLOG("TopWindow::WindowProc::WM_WINDOWPOSCHANGED: overlapped = " << overlapped); Layout(); break; } return Ctrl::WindowProc(message, wParam, lParam); }
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(); }
int TopWindow::Run(bool appmodal) { GuiLock __; LLOG("TopWindow::Run() <- " << typeid(*this).name()); LLOG("Focus = " << UPP::Name(GetFocusCtrl())); if(!IsOpen()) Open(); if(!IsVisible()) Show(); bool pinloop = inloop; int pexitcode = exitcode; exitcode = Null; Vector<Ctrl *> es; if(appmodal) es = GetTopCtrls(); else { Vector<Ctrl *> ws = GetTopCtrls(); for(int i = 0; i < ws.GetCount(); i++) if(ws[i]->InLoop()) es.Add(ws[i]); Ctrl *mw = GetMainWindow(); if(mw) GatherWindowTree(mw, ws, es); } Vector< Ptr<Ctrl> > disabled = DisableCtrls(es, this); #ifdef _DEBUG for(int d = 0; d < disabled.GetCount(); d++) LLOG("DisableCtrls[" << d << "] = " << UPP::Name(disabled[d])); LLOG("Running EventLoop in " << UPP::Name(this)); #endif EventLoop(this); #ifdef _DEBUG LLOG("Finished EventLoop in " << UPP::Name(this)); for(int e = 0; e < disabled.GetCount(); e++) LLOG("EnableCtrls[" << e << "] = " << UPP::Name(disabled[e])); #endif EnableCtrls(disabled); if(IsNull(exitcode)) { WhenClose(); if(IsNull(exitcode)) DefaultBreak(); } int q = exitcode; inloop = pinloop; exitcode = pexitcode; LLOG("TopWindow::Run() = " << q << " -> " << typeid(*this).name()); #ifdef GUI_WIN LLOG("Focus = " << UPP::Name(GetFocusCtrl()) << ", raw " << (void *)::GetFocus()); #endif return q; }