X-Git-Url: https://git.dogcows.com/gitweb?a=blobdiff_plain;ds=sidebyside;f=src%2FWindowmenu.cc;h=f274a047e3cc38e121503bd305154b48d29dac3a;hb=e5bdc511678f9005f5cb3330f01a1af98bf0da83;hp=6f216e5c90395846c7c1ba51057d3c590cb872e7;hpb=ae3dc273c4b42553208d230a775731df18058a4a;p=chaz%2Fopenbox diff --git a/src/Windowmenu.cc b/src/Windowmenu.cc index 6f216e5c..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,37 +21,32 @@ // 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 HAVE_STRING_H +extern "C" { +#ifdef HAVE_STRING_H # include #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()), -window(win), screen(*win.getScreen()) -{ + +Windowmenu::Windowmenu(BlackboxWindow *win) : Basemenu(win->getScreen()) { + window = win; setTitleVisibility(False); setMovable(False); setInternalMenu(); - sendToMenu = new SendtoWorkspacemenu(*this); + sendToMenu = new SendtoWorkspacemenu(this); insert(i18n(WindowmenuSet, WindowmenuSendTo, "Send To ..."), sendToMenu); insert(i18n(WindowmenuSet, WindowmenuShade, "Shade"), @@ -72,10 +68,10 @@ window(win), screen(*win.getScreen()) update(); - setItemEnabled(1, window.hasTitlebar()); - setItemEnabled(2, window.isIconifiable()); - setItemEnabled(3, window.isMaximizable()); - setItemEnabled(8, window.isClosable()); + setItemEnabled(1, window->hasTitlebar()); + setItemEnabled(2, window->isIconifiable()); + setItemEnabled(3, window->isMaximizable()); + setItemEnabled(8, window->isClosable()); } @@ -85,71 +81,64 @@ Windowmenu::~Windowmenu(void) { void Windowmenu::show(void) { - if (isItemEnabled(1)) setItemSelected(1, window.isShaded()); - if (isItemEnabled(3)) setItemSelected(3, window.isMaximized()); - if (isItemEnabled(6)) setItemSelected(6, window.isStuck()); + if (isItemEnabled(1)) setItemSelected(1, window->isShaded()); + if (isItemEnabled(3)) setItemSelected(3, window->isMaximized()); + if (isItemEnabled(6)) setItemSelected(6, window->isStuck()); Basemenu::show(); } -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; } } void Windowmenu::reconfigure(void) { - setItemEnabled(1, window.hasTitlebar()); - setItemEnabled(2, window.isIconifiable()); - setItemEnabled(3, window.isMaximizable()); - setItemEnabled(8, window.isClosable()); + setItemEnabled(1, window->hasTitlebar()); + setItemEnabled(2, window->isIconifiable()); + setItemEnabled(3, window->isMaximizable()); + setItemEnabled(8, window->isClosable()); sendToMenu->reconfigure(); @@ -157,39 +146,51 @@ void Windowmenu::reconfigure(void) { } -Windowmenu::SendtoWorkspacemenu::SendtoWorkspacemenu(Windowmenu &w) - : Basemenu(w.screen), windowmenu(w) { - setTitleVisibility(False); - setMovable(False); - setInternalMenu(); - update(); - } +Windowmenu::SendtoWorkspacemenu::SendtoWorkspacemenu(Windowmenu *w) + : Basemenu(w->getScreen()) { + window = w->window; -void Windowmenu::SendtoWorkspacemenu::itemSelected(int button, int index) { + setTitleVisibility(False); + setMovable(False); + setInternalMenu(); + update(); +} + + +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(); }