Пример #1
0
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();
}
Пример #2
0
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;
}
Пример #3
0
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);
}