void StopWinMenu(short selected, XEvent *event) { switch(selected){ case I_ICONIFY: IconifyWin(TheWin); break; case I_CLOSE: CloseWin(TheWin); break; case I_AUTORISE: if(TheWin->flags & RISEN) { MoveResizeWin(TheWin, TheWin->ra.x, TheWin->ra.y, TheWin->ra.w, TheWin->ra.h); TheWin->flags &= ~RISEN; } else { int maxw, maxh, bw, bh, wi, hi; maxw = TheWin->ra.maxw; maxh = TheWin->ra.maxh; bw = TheWin->ra.bw; bh = TheWin->ra.bh; wi = TheWin->ra.wi; hi = TheWin->ra.hi; TheWin->ra.x = TheWin->Attr.x; TheWin->ra.y = TheWin->Attr.y; TheWin->ra.w = TheWin->Attr.width; TheWin->ra.h = TheWin->Attr.height; MoveResizeWin(TheWin, 0, 0, (maxw > TheScreen.width) ? (bw + ((int)((TheScreen.width - bw - 1) / wi)) * wi) : maxw, (maxh > TheScreen.height) ? (bh + ((int)((TheScreen.height - bh - 1) / hi)) * hi) : maxh); TheWin->flags |= RISEN; } break; case I_BACK: LowerWin(TheWin); break; case I_KILL: break; case I_MENU: WinMenuMenu(TheWin, event->xbutton.x, event->xbutton.y); break; case I_REALLY: XKillClient(disp, TheWin->win); break; default: if(move_back) XWarpPointer(disp, None, None, 0, 0, 0, 0, hexX, hexY); } XUnmapWindow(disp, TheScreen.HexMenu.IconParent); if(TheWin) XInstallColormap(disp, TheWin->Attributes.colormap); ReinstallDefaultHandle(); UngrabPointer(); }
void TWindow::GrabPointer(Time time) { time = CurrentTime; // ignore time for now ASSERT(fWindow); if (sPointerGrabWindow) UngrabPointer(time); int result = XGrabPointer(sDisplay, fWindow, false, ButtonPressMask|ButtonReleaseMask|PointerMotionMask, GrabModeAsync, GrabModeAsync, None, None, CurrentTime); ASSERT(result == GrabSuccess); if (result == GrabSuccess) sPointerGrabWindow = this; }
MenuItem *StartMenu(Menu *menu, int x, int y, Bool q, void (*prc)(XEvent *event, MenuItem *selectedMenuItem)) { selectedMenuItem=NULL; quittable = q; keepIt = ((TheScreen.desktop.flags & UDETransientMenus) ? 0 : KeepNonTransMenu) | KeepMenuActive; SpecialProc = prc; if(x>(TheScreen.width-menu->width)) x=TheScreen.width-menu->width; if(y>(TheScreen.height-menu->height-1)) y=TheScreen.height-menu->height-1; Menu2ws(menu,TheScreen.desktop.ActiveWorkSpace); InstallMenuHandle(); GrabPointer(TheScreen.root,ButtonPressMask|ButtonReleaseMask|LeaveWindowMask|\ EnterWindowMask,TheScreen.Mice[C_DEFAULT]); menu->parent=NULL; XInstallColormap(disp,TheScreen.colormap); MapMenu(menu, x, y); while(keepIt){ XEvent event; XNextEvent(disp,&event); if(Handle[event.type]) (*Handle[event.type])(&event); } UngrabPointer(); ReinstallDefaultHandle(); DeleteMenuTree(menu); if(ActiveWin) XInstallColormap(disp,ActiveWin->Attributes.colormap); activemen=NULL; return(selectedMenuItem); }