X-Git-Url: https://git.dogcows.com/gitweb?a=blobdiff_plain;f=src%2FWindowmenu.cc;h=f274a047e3cc38e121503bd305154b48d29dac3a;hb=c2609fbec7d69e0eb1dad589d778eb109b9590df;hp=70636996bd82843dd5cdae4d183f784a8239b629;hpb=8d3c97389f23271c7b44a726111c97d34bc2ced2;p=chaz%2Fopenbox diff --git a/src/Windowmenu.cc b/src/Windowmenu.cc index 70636996..f274a047 100644 --- a/src/Windowmenu.cc +++ b/src/Windowmenu.cc @@ -1,5 +1,6 @@ -// Windowmenu.cc for Openbox -// Copyright (c) 2001 Sean 'Shaleh' Perry +// -*- mode: C++; indent-tabs-mode: nil; -*- +// Windowmenu.cc for Blackbox - an X11 Window manager +// Copyright (c) 2001 - 2002 Sean 'Shaleh' Perry // Copyright (c) 1997 - 2000 Brad Hughes (bhughes@tcac.net) // // Permission is hereby granted, free of charge, to any person obtaining a @@ -20,55 +21,50 @@ // FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER // DEALINGS IN THE SOFTWARE. -// stupid macros needed to access some functions in version 2 of the GNU C -// library -#ifndef _GNU_SOURCE -#define _GNU_SOURCE -#endif // _GNU_SOURCE - #ifdef HAVE_CONFIG_H # include "../config.h" #endif // HAVE_CONFIG_H -#include "i18n.h" -#include "openbox.h" -#include "Screen.h" -#include "Window.h" -#include "Windowmenu.h" -#include "Workspace.h" - -#ifdef STDC_HEADERS +extern "C" { +#ifdef HAVE_STRING_H # include -#endif // STDC_HEADERS +#endif // HAVE_STRING_H +} + +#include "i18n.hh" +#include "blackbox.hh" +#include "Screen.hh" +#include "Window.hh" +#include "Windowmenu.hh" +#include "Workspace.hh" -Windowmenu::Windowmenu(OpenboxWindow *win) : Basemenu(win->getScreen()) { +Windowmenu::Windowmenu(BlackboxWindow *win) : Basemenu(win->getScreen()) { window = win; - screen = window->getScreen(); setTitleVisibility(False); setMovable(False); setInternalMenu(); sendToMenu = new SendtoWorkspacemenu(this); - insert(i18n->getMessage(WindowmenuSet, WindowmenuSendTo, "Send To ..."), - sendToMenu); - insert(i18n->getMessage(WindowmenuSet, WindowmenuShade, "Shade"), - BScreen::WindowShade); - insert(i18n->getMessage(WindowmenuSet, WindowmenuIconify, "Iconify"), - BScreen::WindowIconify); - insert(i18n->getMessage(WindowmenuSet, WindowmenuMaximize, "Maximize"), - BScreen::WindowMaximize); - insert(i18n->getMessage(WindowmenuSet, WindowmenuRaise,"Raise"), - BScreen::WindowRaise); - insert(i18n->getMessage(WindowmenuSet, WindowmenuLower, "Lower"), - BScreen::WindowLower); - insert(i18n->getMessage(WindowmenuSet, WindowmenuStick, "Stick"), - BScreen::WindowStick); - insert(i18n->getMessage(WindowmenuSet, WindowmenuKillClient, "Kill Client"), - BScreen::WindowKill); - insert(i18n->getMessage(WindowmenuSet, WindowmenuClose, "Close"), - BScreen::WindowClose); + insert(i18n(WindowmenuSet, WindowmenuSendTo, "Send To ..."), + sendToMenu); + insert(i18n(WindowmenuSet, WindowmenuShade, "Shade"), + BScreen::WindowShade); + insert(i18n(WindowmenuSet, WindowmenuIconify, "Iconify"), + BScreen::WindowIconify); + insert(i18n(WindowmenuSet, WindowmenuMaximize, "Maximize"), + BScreen::WindowMaximize); + insert(i18n(WindowmenuSet, WindowmenuRaise,"Raise"), + BScreen::WindowRaise); + insert(i18n(WindowmenuSet, WindowmenuLower, "Lower"), + BScreen::WindowLower); + insert(i18n(WindowmenuSet, WindowmenuStick, "Stick"), + BScreen::WindowStick); + insert(i18n(WindowmenuSet, WindowmenuKillClient, "Kill Client"), + BScreen::WindowKill); + insert(i18n(WindowmenuSet, WindowmenuClose, "Close"), + BScreen::WindowClose); update(); @@ -93,54 +89,47 @@ void Windowmenu::show(void) { } -void Windowmenu::itemSelected(int button, int index) { +void Windowmenu::itemSelected(int button, unsigned int index) { BasemenuItem *item = find(index); - /* Added by Scott Moynes, April 8, 2002 - Ignore the middle button for every item except the maximize - button in the window menu. Maximize needs it for - horizontal/vertical maximize, however, for the others it is - inconsistent with the rest of the window behaviour. - */ - if(button != 2) { - hide(); - switch (item->function()) { - case BScreen::WindowShade: - window->shade(); - break; - - case BScreen::WindowIconify: - window->iconify(); - break; - - case BScreen::WindowMaximize: - window->maximize((unsigned int) button); - break; - - case BScreen::WindowClose: - window->close(); - break; - - case BScreen::WindowRaise: - screen->getWorkspace(window->getWorkspaceNumber())->raiseWindow(window); - break; - - case BScreen::WindowLower: - screen->getWorkspace(window->getWorkspaceNumber())->lowerWindow(window); - break; - - case BScreen::WindowStick: - window->stick(); - break; - - case BScreen::WindowKill: - XKillClient(screen->getBaseDisplay()->getXDisplay(), - window->getClientWindow()); - break; - } - } else if (item->function() == BScreen::WindowMaximize) { - hide(); - window->maximize((unsigned int) button); + hide(); + switch (item->function()) { + case BScreen::WindowShade: + window->shade(); + break; + + case BScreen::WindowIconify: + window->iconify(); + break; + + case BScreen::WindowMaximize: + window->maximize(button); + break; + + case BScreen::WindowClose: + window->close(); + break; + + case BScreen::WindowRaise: { + Workspace *wkspc = getScreen()->getWorkspace(window->getWorkspaceNumber()); + wkspc->raiseWindow(window); + } + break; + + case BScreen::WindowLower: { + Workspace *wkspc = getScreen()->getWorkspace(window->getWorkspaceNumber()); + wkspc->lowerWindow(window); + } + break; + + case BScreen::WindowStick: + window->stick(); + break; + + case BScreen::WindowKill: + XKillClient(getScreen()->getBaseDisplay()->getXDisplay(), + window->getClientWindow()); + break; } } @@ -158,8 +147,9 @@ void Windowmenu::reconfigure(void) { Windowmenu::SendtoWorkspacemenu::SendtoWorkspacemenu(Windowmenu *w) - : Basemenu(w->screen) { - windowmenu = w; + : Basemenu(w->getScreen()) { + + window = w->window; setTitleVisibility(False); setMovable(False); @@ -168,30 +158,39 @@ Windowmenu::SendtoWorkspacemenu::SendtoWorkspacemenu(Windowmenu *w) } -void Windowmenu::SendtoWorkspacemenu::itemSelected(int button, int index) { +void Windowmenu::SendtoWorkspacemenu::itemSelected(int button, + unsigned int index) { if (button > 2) return; - if (index <= windowmenu->screen->getWorkspaceCount()) { - if (index == windowmenu->screen->getCurrentWorkspaceID()) return; - if (windowmenu->window->isStuck()) windowmenu->window->stick(); + if (index <= getScreen()->getWorkspaceCount()) { + if (index == getScreen()->getCurrentWorkspaceID()) return; + if (window->isStuck()) window->stick(); - if (button == 1) windowmenu->window->withdraw(); - windowmenu->screen->reassociateWindow(windowmenu->window, index, True); - if (button == 2) windowmenu->screen->changeWorkspaceID(index); + if (button == 1) window->withdraw(); + getScreen()->reassociateWindow(window, index, True); + if (button == 2) getScreen()->changeWorkspaceID(index); } hide(); } void Windowmenu::SendtoWorkspacemenu::update(void) { - int i, r = getCount(); - - if (r != 0) - for (i = 0; i < r; ++i) + unsigned int i, r = getCount(), + workspace_count = getScreen()->getWorkspaceCount(); + if (r > workspace_count) { + for (i = r; i < workspace_count; ++i) remove(0); + r = getCount(); + } - for (i = 0; i < windowmenu->screen->getWorkspaceCount(); ++i) - insert(windowmenu->screen->getWorkspace(i)->getName()); + for (i = 0; i < workspace_count; ++i) { + if (r < workspace_count) { + insert(getScreen()->getWorkspace(i)->getName()); + ++r; + } else { + changeItemLabel(i, getScreen()->getWorkspace(i)->getName()); + } + } Basemenu::update(); }