void TopWindow::SyncCaption() { GuiLock __; LLOG("SyncCaption0"); SyncTitle(); if(IsOpen() && GetWindow()) { unsigned long wina[6]; memset(wina, 0, sizeof(wina)); int n = 0; Window w = GetWindow(); if(tool) wina[n++] = XAtom("_NET_WM_WINDOW_TYPE_UTILITY"); if(GetOwner()) wina[n++] = XAtom("_NET_WM_WINDOW_TYPE_DIALOG"); wina[n++] = XAtom("_NET_WM_WINDOW_TYPE_NORMAL"); XChangeProperty(Xdisplay, GetWindow(), XAtom("_NET_WM_WINDOW_TYPE"), XAtom("ATOM"), 32, PropModeReplace, (const unsigned char *)wina, n); // n = 0; // XChangeProperty(Xdisplay, GetWindow(), XAtom("_NET_WM_STATE"), XAtom("ATOM"), 32, // PropModeReplace, (const unsigned char *)wina, n); wm_hints->flags = InputHint|WindowGroupHint|StateHint; if(urgent) { if(IsForeground()) urgent = false; wm_hints->flags |= XUrgencyHint; WmState(w, urgent, XAtom("_NET_WM_STATE_DEMANDS_ATTENTION")); } wm_hints->initial_state = NormalState; wm_hints->input = XTrue; Ctrl *owner = GetOwner(); wm_hints->window_group = owner ? owner->GetWindow() : w; if(!icon.IsEmpty()) { int len = 0; Buffer<unsigned long> data = PreperIcon(icon, len); XChangeProperty(Xdisplay, w, XAtom("_NET_WM_ICON"), XA_CARDINAL, 32, PropModeReplace, (const unsigned char *)~data, len); if (!largeicon.IsEmpty()) { data = PreperIcon(largeicon, len); XChangeProperty(Xdisplay, w, XAtom("_NET_WM_ICON"), XA_CARDINAL, 32, PropModePrepend, (const unsigned char *)~data, len); } } XSetWMHints(Xdisplay, w, wm_hints); MWMHints mwmhints; memset(&mwmhints, 0, sizeof(mwmhints)); mwmhints.flags = MWM_HINTS_DECORATIONS; mwmhints.decorations = !frameless; XChangeProperty(Xdisplay, w, XAtom("_MOTIF_WM_HINTS"), XAtom("_MOTIF_WM_HINTS"), 32, PropModeReplace, (unsigned char *) &mwmhints, PROP_MWM_HINTS_ELEMENTS); } }
void TopWindow::SyncCaption() { GuiLock __; LLOG("TopWindow::SyncCaption " << UPP::Name(this)); if(fullscreen) return; HWND hwnd = GetHWND(); if(hwnd) { style = ::GetWindowLong(hwnd, GWL_STYLE); exstyle = ::GetWindowLong(hwnd, GWL_EXSTYLE); } style &= ~(WS_THICKFRAME|WS_MINIMIZEBOX|WS_MAXIMIZEBOX|WS_SYSMENU|WS_POPUP|WS_DLGFRAME); exstyle &= ~(WS_EX_TOOLWINDOW|WS_EX_DLGMODALFRAME); style |= WS_CAPTION; if(hasdhctrl) style |= WS_CLIPSIBLINGS|WS_CLIPCHILDREN; if(minimizebox) style |= WS_MINIMIZEBOX; if(maximizebox) style |= WS_MAXIMIZEBOX; if(sizeable) style |= WS_THICKFRAME; #ifndef PLATFORM_WINCE if(frameless) style = (style & ~WS_CAPTION) | WS_POPUP; else if(IsNull(icon) && !maximizebox && !minimizebox || noclosebox) { style |= WS_POPUPWINDOW|WS_DLGFRAME; exstyle |= WS_EX_DLGMODALFRAME; if(noclosebox) style &= ~WS_SYSMENU; } else #endif style |= WS_SYSMENU; if(tool) exstyle |= WS_EX_TOOLWINDOW; if(fullscreen) style = WS_POPUP; if(hwnd) { ::SetWindowLong(hwnd, GWL_STYLE, style); ::SetWindowLong(hwnd, GWL_EXSTYLE, exstyle); SyncTitle(); if(urgent) { if(IsForeground()) urgent = false; FLASHWINFO fi; memset(&fi, 0, sizeof(fi)); fi.cbSize = sizeof(fi); fi.hwnd = hwnd; fi.dwFlags = urgent ? FLASHW_TIMER|FLASHW_ALL : FLASHW_STOP; FlashWindowEx(&fi); } } DeleteIco(); #ifndef PLATFORM_WINCE //TODO!!! if(hwnd) { ::SendMessage(hwnd, WM_SETICON, false, (LPARAM)(ico = SystemDraw::IconWin32(icon))); ::SendMessage(hwnd, WM_SETICON, true, (LPARAM)(lico = SystemDraw::IconWin32(largeicon))); } #endif }
void TopWindow::ActiveFocus0(Ctrl& ctrl) { if(IsChild()) return; activefocus = &ctrl; if(IsForeground()) ctrl.SetWantFocus(); }