/* * windowmenu.cc * Copyright (C) 2000 Frank Hale * frankhale@yahoo.com * http://sapphire.sourceforge.net/ * * Updated: 18 Nov 2001 * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License * as published by the Free Software Foundation; either version 2 * of the License, or any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ #include "aewm.hh" #include "windowmanager.hh" WindowMenu::WindowMenu() : GenericMenu() { sendToDesktop = new WindowMenu(this); sendToDesktop->updateMenu(); windowMaxMenu = new WindowMenu(this); windowMaxMenu->updateMenu(); updateWindowMenu(); } WindowMenu::WindowMenu(WindowMenu *parentMenu) : GenericMenu (parentMenu) { } WindowMenu::~WindowMenu() { } void WindowMenu::updateWindowMenu() { char* temp = new char[wm->getMaxDesktops()]; for(int i=0; igetMaxDesktops(); i++) { sprintf(temp, "%d", i); sendToDesktop->insert(temp,"", SEND_TO_DESKTOP); } delete [] temp; insert("Send To Desktop", "", sendToDesktop, -1); insert("Sticky Toggle", "", STICKY); insert("separator", "", -1); windowMaxMenu->insert("Max Vert Toggle", "", MAX_VERT); windowMaxMenu->insert("Max Horz Toggle", "", MAX_HORZ); windowMaxMenu->insert("Max Both Toggle", "", MAX_BOTH); insert("Maximize", "", windowMaxMenu, MAX_BOTH); insert("Minimize", "", MINIMIZE); insert("Shade Toggle", "", SHADE); // insert("On Top", "", ON_TOP); insert("separator", "", -1); insert("Destroy", "", CLOSE); updateMenu(); addToMenuList(this); windowMaxMenu->updateMenu(); addToMenuList(windowMaxMenu); sendToDesktop->updateMenu(); addToMenuList(sendToDesktop); } void WindowMenu::handle_button_release_event(XButtonEvent *e) { int desktop=0; GenericMenu::handle_button_release_event(e); if ( getParentMenu() != NULL ) { client = ((WindowMenu *)(getParentMenu()))->client; } switch (e->button) { case Button1: if (curr) { switch( curr->function ) { case SEND_TO_DESKTOP: desktop = atoi(curr->name.c_str()); client->set_desktop(desktop); hideAllVisibleSubmenus(); break; case MAX_VERT: client->maximize_vertical(); client->warpToTitlebarCenter(); break; case MAX_HORZ: client->maximize_horizontal(); client->warpToTitlebarCenter(); break; case MAX_BOTH: client->maximize(); client->warpToTitlebarCenter(); break; case MINIMIZE: client->iconify(); break; case STICKY: client->stick(DISALLOW_STICKY_TRANS); break; case SHADE: client->shade(); client->warpToTitlebarCenter(); break; case CLOSE: client->send_wm_delete(); break; } } break; case Button2: case Button3: hide(); break; } switch(wm->getFocusModel()) { case FOCUS_FOLLOW: case FOCUS_SLOPPY: wm->setFocusedClientUnderPointer(); break; case FOCUS_CLICK: break; } if (getParentMenu() != NULL) { getParentMenu()->hide(); client = NULL; } }