/** Process a button event. */ void HandleButtonEvent(const XButtonEvent *event) { ClientNode *np; int north, south, east, west; np = FindClientByParent(event->window); if(np) { if(event->type == ButtonPress) { FocusClient(np); RaiseClient(np); } DispatchBorderButtonEvent(event, np); } else if(event->window == rootWindow && event->type == ButtonPress) { if(!ShowRootMenu(event->button, event->x, event->y, 0)) { if(event->button == Button4) { LeftDesktop(); } else if(event->button == Button5) { RightDesktop(); } } } else { const unsigned int mask = event->state & ~lockMask; np = FindClientByWindow(event->window); if(np) { switch(event->button) { case Button1: case Button2: FocusClient(np); RaiseClient(np); if(mask == Mod1Mask) { GetBorderSize(&np->state, &north, &south, &east, &west); MoveClient(np, event->x + west, event->y + north); } break; case Button3: if(mask == Mod1Mask) { GetBorderSize(&np->state, &north, &south, &east, &west); ResizeClient(np, BA_RESIZE | BA_RESIZE_E | BA_RESIZE_S, event->x + west, event->y + north); } else { FocusClient(np); RaiseClient(np); } break; default: break; } JXAllowEvents(display, ReplayPointer, eventTime); } } }
void FPlatformerIngameMenu::ToggleGameMenu() { if ((!RootMenuPageWidget.IsValid() || (bIsGameMenuUp) || (!PCOwner.IsValid()))) { return; } bIsGameMenuUp = true; APlatformerGameMode* const MyGame = PCOwner->GetWorld()->GetAuthGameMode<APlatformerGameMode>(); if (MyGame != nullptr) { MyGame->SetGamePaused(true); bWasActorHidden = PCOwner->GetPawn()->bHidden; } ShowRootMenu(); PCOwner->SetCinematicMode(bIsGameMenuUp,false,false,true,true); }
/** Show a root menu caused by a key binding. */ void ShowKeyMenu(const XKeyEvent *event) { KeyNode *np; unsigned int state; /* Remove the lock key modifiers. */ state = event->state & ~lockMask; for(np = bindings; np; np = np->next) { if(np->state == state && np->code == event->keycode) { const int button = GetRootMenuIndexFromString(np->command); if(JLIKELY(button >= 0)) { ShowRootMenu(button, -1, -1, 1); } return; } } }
/** Process a button press. */ void ProcessActionPress(struct ActionType *actions, struct TrayComponentType *cp, int x, int y, int button) { const ScreenType *sp; const ActionType *ap; const int mask = 1 << button; int mwidth, mheight; int menu; menu = -1; for(ap = actions; ap; ap = ap->next) { if(ap->mask & mask) { if(ap->action && ap->action[0]) { if(strncmp(ap->action, "root:", 5) != 0) { /* Show the button being pressed. */ GrabMouse(cp->tray->window); cp->grabbed = 1; if(cp->Redraw) { (cp->Redraw)(cp); UpdateSpecificTray(cp->tray, cp); } return; } else { menu = GetRootMenuIndexFromString(&ap->action[5]); } } else { menu = 1; } break; } } if(menu < 0) { return; } GetRootMenuSize(menu, &mwidth, &mheight); sp = GetCurrentScreen(cp->screenx, cp->screeny); if(cp->tray->layout == LAYOUT_HORIZONTAL) { x = cp->screenx; if(cp->screeny + cp->height / 2 < sp->y + sp->height / 2) { y = cp->screeny + cp->height; } else { y = cp->screeny - mheight; } } else { y = cp->screeny; if(cp->screenx + cp->width / 2 < sp->x + sp->width / 2) { x = cp->screenx + cp->width; } else { x = cp->screenx - mwidth; } } cp->grabbed = 1; if(cp->Redraw) { (cp->Redraw)(cp); UpdateSpecificTray(cp->tray, cp); } ShowRootMenu(menu, x, y); cp->grabbed = 0; if(cp->Redraw) { (cp->Redraw)(cp); UpdateSpecificTray(cp->tray, cp); } }
/** Process a button event. */ void HandleButtonEvent(const XButtonEvent *event) { int x, y; ClientNode *np; int north, south, east, west; np = FindClientByParent(event->window); if(np) { RaiseClient(np); if(focusModel == FOCUS_CLICK) { FocusClient(np); } switch(event->button) { case Button1: DispatchBorderButtonEvent(event, np); break; case Button2: MoveClient(np, event->x, event->y); break; case Button3: GetBorderSize(np, &north, &south, &east, &west); x = event->x + np->x - west; y = event->y + np->y - north; ShowWindowMenu(np, x, y); break; case Button4: ShadeClient(np); break; case Button5: UnshadeClient(np); break; default: break; } } else if(event->window == rootWindow && event->type == ButtonPress) { if(!ShowRootMenu(event->button, event->x, event->y)) { if(event->button == 4) { LeftDesktop(); } else if(event->button == 5) { RightDesktop(); } } } else { np = FindClientByWindow(event->window); if(np) { switch(event->button) { case Button1: case Button2: RaiseClient(np); if(focusModel == FOCUS_CLICK) { FocusClient(np); } if(event->state & Mod1Mask) { GetBorderSize(np, &north, &south, &east, &west); MoveClient(np, event->x + west, event->y + north); } break; case Button3: if(event->state & Mod1Mask) { GetBorderSize(np, &north, &south, &east, &west); ResizeClient(np, BA_RESIZE | BA_RESIZE_E | BA_RESIZE_S, event->x + west, event->y + north); } else { RaiseClient(np); if(focusModel == FOCUS_CLICK) { FocusClient(np); } } break; default: break; } JXAllowEvents(display, ReplayPointer, CurrentTime); } } UpdatePager(); }