status_t TWindowMenuItem::Invoke(BMessage* /*message*/) { if (!fDragging) { if (fID >= 0) { int32 action = (modifiers() & B_CONTROL_KEY) != 0 ? B_MINIMIZE_WINDOW : B_BRING_TO_FRONT; bool doZoom = false; BRect zoomRect(0.0f, 0.0f, 0.0f, 0.0f); BMenuItem* item; if (!fExpanded) item = Menu()->Superitem(); else item = this; if (item->Menu()->Window() != NULL) { zoomRect = item->Menu()->ConvertToScreen(item->Frame()); doZoom = (fMini && action == B_BRING_TO_FRONT) || (!fMini && action == B_MINIMIZE_WINDOW); } do_window_action(fID, action, zoomRect, doZoom); } } return B_OK; }
static void WarpMouseToWindow(const char* windowName) { int32 count; int32 *tokens = get_token_list(-1, &count); team_id pe_team = be_app->Team(); bool found = false; for (int32 i = count-1; i>=0 && !found; i--) { window_info* windowInfo = get_window_info(tokens[i]); if (windowInfo && windowInfo->team == pe_team && !strcmp(windowInfo->name, windowName)) { do_window_action(windowInfo->id, B_BRING_TO_FRONT, BRect(0,0,0,0), false); found = true; } free(windowInfo); } free(tokens); }