no more menus, at last. woop

This commit is contained in:
Dana Jansens 2002-10-31 06:30:23 +00:00
parent 87e63d53af
commit 60b016b7fc
14 changed files with 0 additions and 2769 deletions

File diff suppressed because it is too large Load diff

View file

@ -1,178 +0,0 @@
// -*- mode: C++; indent-tabs-mode: nil; -*-
// Basemenu.hh for Blackbox - an X11 Window manager
// Copyright (c) 2001 - 2002 Sean 'Shaleh' Perry <shaleh@debian.org>
// Copyright (c) 1997 - 2000 Brad Hughes (bhughes@tcac.net)
//
// Permission is hereby granted, free of charge, to any person obtaining a
// copy of this software and associated documentation files (the "Software"),
// to deal in the Software without restriction, including without limitation
// the rights to use, copy, modify, merge, publish, distribute, sublicense,
// and/or sell copies of the Software, and to permit persons to whom the
// Software is furnished to do so, subject to the following conditions:
//
// The above copyright notice and this permission notice shall be included in
// all copies or substantial portions of the Software.
//
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
// THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
// DEALINGS IN THE SOFTWARE.
#ifndef __Basemenu_hh
#define __Basemenu_hh
extern "C" {
#include <X11/Xlib.h>
}
#include <string>
#include <vector>
class Blackbox;
class BImageControl;
class BScreen;
class BasemenuItem;
class Basemenu {
private:
typedef std::vector<BasemenuItem*> MenuItems;
MenuItems menuitems;
Blackbox *blackbox;
Basemenu *parent;
BImageControl *image_ctrl;
BScreen *screen;
bool moving, visible, movable, torn, internal_menu, title_vis, shifted,
hide_tree;
Display *display;
int which_sub, which_press, which_sbl, alignment;
struct _menu {
Pixmap frame_pixmap, title_pixmap, hilite_pixmap;
Window window, frame, title;
std::string label;
int x, y, x_move, y_move, x_shift, y_shift, sublevels, persub, minsub;
unsigned int width, height, title_h, frame_h, item_w, item_h, bevel_w,
bevel_h;
} menu;
Basemenu(const Basemenu&);
Basemenu& operator=(const Basemenu&);
protected:
inline void setTitleVisibility(bool b) { title_vis = b; }
inline void setMovable(bool b) { movable = b; }
inline void setHideTree(bool h) { hide_tree = h; }
inline void setMinimumSublevels(int m) { menu.minsub = m; }
virtual void itemSelected(int button, unsigned int index) = 0;
virtual void drawItem(int index, bool highlight = False, bool clear = False,
int x = -1, int y = -1,
unsigned int w = 0, unsigned int h = 0);
virtual void redrawTitle(void);
virtual void internal_hide(void);
public:
Basemenu(BScreen *scrn);
virtual ~Basemenu(void);
inline bool isTorn(void) const { return torn; }
inline bool isVisible(void) const { return visible; }
inline BScreen *getScreen(void) { return screen; }
inline Window getWindowID(void) const { return menu.window; }
inline const char *getLabel(void) const { return menu.label.c_str(); }
int insert(BasemenuItem *item, int pos);
int insert(const std::string& label, int function = 0,
const std::string& exec = "", int pos = -1);
int insert(const std::string &label, Basemenu *submenu, int pos = -1);
int remove(int index);
void changeItemLabel(unsigned int index, const std::string& label);
inline int getX(void) const { return menu.x; }
inline int getY(void) const { return menu.y; }
inline unsigned int getCount(void) { return menuitems.size(); }
inline int getCurrentSubmenu(void) const { return which_sub; }
BasemenuItem *find(int index);
inline unsigned int getWidth(void) const { return menu.width; }
inline unsigned int getHeight(void) const { return menu.height; }
inline unsigned int getTitleHeight(void) const
{ return menu.title_h; }
inline void setInternalMenu(void) { internal_menu = True; }
inline void setAlignment(int a) { alignment = a; }
inline void setTorn(void) { torn = True; }
inline void removeParent(void)
{ if (internal_menu) parent = (Basemenu *) 0; }
bool hasSubmenu(int index);
bool isItemSelected(int index);
bool isItemEnabled(int index);
void buttonPressEvent(XButtonEvent *be);
void buttonReleaseEvent(XButtonEvent *be);
void motionNotifyEvent(XMotionEvent *me);
void enterNotifyEvent(XCrossingEvent *ce);
void leaveNotifyEvent(XCrossingEvent *ce);
void exposeEvent(XExposeEvent *ee);
void reconfigure(void);
void setLabel(const std::string& label);
void move(int x, int y);
void update(void);
void setItemSelected(int index, bool sel);
void setItemEnabled(int index, bool enable);
virtual void drawSubmenu(int index);
virtual void show(void);
virtual void hide(void);
enum { AlignDontCare = 1, AlignTop, AlignBottom };
enum { Right = 1, Left };
enum { Empty = 0, Square, Triangle, Diamond };
};
class BasemenuItem {
private:
Basemenu *sub;
std::string l, e;
int f, enabled, selected;
friend class Basemenu;
protected:
public:
BasemenuItem(const std::string& lp, int fp = 0, const std::string& ep = ""):
sub(0), l(lp), e(ep), f(fp), enabled(1), selected(0) {}
BasemenuItem(const std::string& lp, Basemenu *mp): sub(mp), l(lp),
f(0), enabled(1),
selected(0) {}
inline const char *exec(void) const { return e.c_str(); }
inline const char *label(void) const { return l.c_str(); }
inline int function(void) const { return f; }
inline Basemenu *submenu(void) { return sub; }
inline void newLabel(const std::string& label) { l = label; }
inline int isEnabled(void) const { return enabled; }
inline void setEnabled(int e) { enabled = e; }
inline int isSelected(void) const { return selected; }
inline void setSelected(int s) { selected = s; }
};
#endif // __Basemenu_hh

View file

@ -1,59 +0,0 @@
// -*- mode: C++; indent-tabs-mode: nil; -*-
// Clientmenu.cc for Blackbox - an X11 Window manager
// Copyright (c) 2001 - 2002 Sean 'Shaleh' Perry <shaleh@debian.org>
// Copyright (c) 1997 - 2000 Brad Hughes (bhughes@tcac.net)
//
// Permission is hereby granted, free of charge, to any person obtaining a
// copy of this software and associated documentation files (the "Software"),
// to deal in the Software without restriction, including without limitation
// the rights to use, copy, modify, merge, publish, distribute, sublicense,
// and/or sell copies of the Software, and to permit persons to whom the
// Software is furnished to do so, subject to the following conditions:
//
// The above copyright notice and this permission notice shall be included in
// all copies or substantial portions of the Software.
//
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
// THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
// DEALINGS IN THE SOFTWARE.
#ifdef HAVE_CONFIG_H
# include "../config.h"
#endif // HAVE_CONFIG_H
#include "blackbox.hh"
#include "Clientmenu.hh"
#include "Screen.hh"
#include "Window.hh"
#include "Workspace.hh"
#include "Workspacemenu.hh"
Clientmenu::Clientmenu(Workspace *ws) : Basemenu(ws->getScreen()) {
wkspc = ws;
setInternalMenu();
}
void Clientmenu::itemSelected(int button, unsigned int index) {
if (button > 2) return;
BlackboxWindow *win = wkspc->getWindow(index);
if (win) {
if (button == 1) {
if (! wkspc->isCurrent()) wkspc->setCurrent();
} else if (button == 2) {
if (! wkspc->isCurrent()) win->deiconify(True, False);
}
wkspc->raiseWindow(win);
win->setInputFocus();
}
Workspacemenu* wkspcmenu = wkspc->getScreen()->getWorkspacemenu();
if (! (wkspcmenu->isTorn() || isTorn())) hide();
}

View file

@ -1,47 +0,0 @@
// -*- mode: C++; indent-tabs-mode: nil; -*-
// Clientmenu.hh for Blackbox - an X11 Window manager
// Copyright (c) 2001 - 2002 Sean 'Shaleh' Perry <shaleh@debian.org>
// Copyright (c) 1997 - 2000 Brad Hughes (bhughes@tcac.net)
//
// Permission is hereby granted, free of charge, to any person obtaining a
// copy of this software and associated documentation files (the "Software"),
// to deal in the Software without restriction, including without limitation
// the rights to use, copy, modify, merge, publish, distribute, sublicense,
// and/or sell copies of the Software, and to permit persons to whom the
// Software is furnished to do so, subject to the following conditions:
//
// The above copyright notice and this permission notice shall be included in
// all copies or substantial portions of the Software.
//
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
// THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
// DEALINGS IN THE SOFTWARE.
#ifndef __Clientmenu_hh
#define __Clientmenu_hh
#include "Basemenu.hh"
class Workspace;
class BScreen;
class Clientmenu : public Basemenu {
private:
Workspace *wkspc;
Clientmenu(const Clientmenu&);
Clientmenu& operator=(const Clientmenu&);
protected:
virtual void itemSelected(int button, unsigned int index);
public:
Clientmenu(Workspace *ws);
};
#endif // __Clientmenu_hh

View file

@ -1,615 +0,0 @@
// -*- mode: C++; indent-tabs-mode: nil; c-basic-offset: 2; -*-
// Configmenu.cc for Blackbox - An X11 Window Manager
// Copyright (c) 2001 - 2002 Sean 'Shaleh' Perry <shaleh@debian.org>
// Copyright (c) 1997 - 2000 Brad Hughes (bhughes@tcac.net)
//
// Permission is hereby granted, free of charge, to any person obtaining a
// copy of this software and associated documentation files (the "Software"),
// to deal in the Software without restriction, including without limitation
// the rights to use, copy, modify, merge, publish, distribute, sublicense,
// and/or sell copies of the Software, and to permit persons to whom the
// Software is furnished to do so, subject to the following conditions:
//
// The above copyright notice and this permission notice shall be included in
// all copies or substantial portions of the Software.
//
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
// THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
// DEALINGS IN THE SOFTWARE.
#ifdef HAVE_CONFIG_H
# include "../config.h"
#endif // HAVE_CONFIG_H
#include "i18n.hh"
#include "Configmenu.hh"
#include "Image.hh"
#include "Toolbar.hh"
#include "Window.hh"
#include "Screen.hh"
Configmenu::Configmenu(BScreen *scr) : Basemenu(scr) {
setLabel(i18n(ConfigmenuSet, ConfigmenuConfigOptions, "Config Options"));
setInternalMenu();
focusmenu = new Focusmenu(this);
placementmenu = new Placementmenu(this);
windowsnapmenu = new WindowToWindowSnapmenu(this);
edgesnapmenu = new WindowToEdgeSnapmenu(this);
#ifdef XINERAMA
xineramamenu = new Xineramamenu(this);
#endif // XINERAMA
#ifdef XFT
xftmenu = new Xftmenu(this);
#endif // XFT
insert(i18n(ConfigmenuSet, ConfigmenuFocusModel,
"Focus Model"), focusmenu);
insert(i18n(ConfigmenuSet, ConfigmenuWindowPlacement,
"Window Placement"), placementmenu);
insert(i18n(ConfigmenuSet, ConfigmenuWindowToWindowSnap,
"Window-To-Window Snapping"), windowsnapmenu);
insert(i18n(ConfigmenuSet, ConfigmenuWindowToEdgeSnap,
"Window-To-Edge Snapping"), edgesnapmenu);
#ifdef XINERAMA
insert(i18n(ConfigmenuSet, ConfigmenuXineramaSupport,
"XineramaSupport"), xineramamenu);
#endif // XINERAMA
#ifdef XFT
insert(i18n(ConfigmenuSet, ConfigmenuXftOptions,
"Xft Font Options"), xftmenu);
#endif // XINERAMA
insert(i18n(ConfigmenuSet, ConfigmenuImageDithering,
"Image Dithering"), 1);
insert(i18n(ConfigmenuSet, ConfigmenuOpaqueMove,
"Opaque Window Moving"), 2);
insert(i18n(ConfigmenuSet, ConfigmenuWorkspaceWarping,
"Workspace Warping"), 3);
insert(i18n(ConfigmenuSet, ConfigmenuFullMax,
"Full Maximization"), 4);
insert(i18n(ConfigmenuSet, ConfigmenuFocusNew,
"Focus New Windows"), 5);
insert(i18n(ConfigmenuSet, ConfigmenuFocusLast,
"Focus Last Window on Workspace"), 6);
insert(i18n(ConfigmenuSet, ConfigmenuDisableBindings,
"Disable Mouse with Scroll Lock"), 7);
insert(i18n(ConfigmenuSet, ConfigmenuHideToolbar,
"Hide Toolbar"), 8);
update();
setValues();
}
void Configmenu::setValues(void) {
int index = 4;
#ifdef XINERAMA
++index;
#endif // XINERAMA
#ifdef XFT
++index;
#endif // XFT
setItemSelected(index++, getScreen()->doImageDither());
setItemSelected(index++, getScreen()->doOpaqueMove());
setItemSelected(index++, getScreen()->doWorkspaceWarping());
setItemSelected(index++, getScreen()->doFullMax());
setItemSelected(index++, getScreen()->doFocusNew());
setItemSelected(index++, getScreen()->doFocusLast());
setItemSelected(index++, getScreen()->allowScrollLock());
setItemSelected(index++, getScreen()->doHideToolbar());
}
Configmenu::~Configmenu(void) {
delete focusmenu;
delete placementmenu;
delete windowsnapmenu;
delete edgesnapmenu;
#ifdef XINERAMA
delete xineramamenu;
#endif // XINERAMA
#ifdef XFT
delete xftmenu;
#endif // XFT
}
void Configmenu::itemSelected(int button, unsigned int index) {
if (button != 1)
return;
BasemenuItem *item = find(index);
if (! item->function())
return;
switch(item->function()) {
case 1: // dither
getScreen()->saveImageDither(! getScreen()->doImageDither());
setItemSelected(index, getScreen()->doImageDither());
break;
case 2: // opaque move
getScreen()->saveOpaqueMove(! getScreen()->doOpaqueMove());
setItemSelected(index, getScreen()->doOpaqueMove());
break;
case 3: // workspace wrapping
getScreen()->saveWorkspaceWarping(! getScreen()->doWorkspaceWarping());
setItemSelected(index, getScreen()->doWorkspaceWarping());
break;
case 4: // full maximization
getScreen()->saveFullMax(! getScreen()->doFullMax());
setItemSelected(index, getScreen()->doFullMax());
break;
case 5: // focus new windows
getScreen()->saveFocusNew(! getScreen()->doFocusNew());
setItemSelected(index, getScreen()->doFocusNew());
break;
case 6: // focus last window on workspace
getScreen()->saveFocusLast(! getScreen()->doFocusLast());
setItemSelected(index, getScreen()->doFocusLast());
break;
case 7: // disable mouse bindings with Scroll Lock
getScreen()->saveAllowScrollLock(! getScreen()->allowScrollLock());
setItemSelected(index, getScreen()->allowScrollLock());
getScreen()->reconfigure();
break;
case 8: // hide toolbar
getScreen()->saveHideToolbar(! getScreen()->doHideToolbar());
setItemSelected(index, getScreen()->doHideToolbar());
break;
}
}
void Configmenu::reconfigure(void) {
setValues();
focusmenu->reconfigure();
placementmenu->reconfigure();
windowsnapmenu->reconfigure();
edgesnapmenu->reconfigure();
#ifdef XINERAMA
xineramamenu->reconfigure();
#endif // XINERAMA
#ifdef XFT
xftmenu->reconfigure();
#endif // XFT
Basemenu::reconfigure();
}
Configmenu::Focusmenu::Focusmenu(Configmenu *cm) : Basemenu(cm->getScreen()) {
setLabel(i18n(ConfigmenuSet, ConfigmenuFocusModel, "Focus Model"));
setInternalMenu();
insert(i18n(ConfigmenuSet, ConfigmenuClickToFocus, "Click To Focus"), 1);
insert(i18n(ConfigmenuSet, ConfigmenuSloppyFocus, "Sloppy Focus"), 2);
insert(i18n(ConfigmenuSet, ConfigmenuAutoRaise, "Auto Raise"), 3);
insert(i18n(ConfigmenuSet, ConfigmenuClickRaise, "Click Raise"), 4);
update();
setValues();
}
void Configmenu::Focusmenu::setValues(void) {
setItemSelected(0, ! getScreen()->isSloppyFocus());
setItemSelected(1, getScreen()->isSloppyFocus());
setItemEnabled(2, getScreen()->isSloppyFocus());
setItemSelected(2, getScreen()->doAutoRaise());
setItemEnabled(3, getScreen()->isSloppyFocus());
setItemSelected(3, getScreen()->doClickRaise());
}
void Configmenu::Focusmenu::reconfigure(void) {
setValues();
Basemenu::reconfigure();
}
void Configmenu::Focusmenu::itemSelected(int button, unsigned int index) {
if (button != 1)
return;
BasemenuItem *item = find(index);
if (! item->function())
return;
switch (item->function()) {
case 1: // click to focus
getScreen()->toggleFocusModel(BScreen::ClickToFocus);
break;
case 2: // sloppy focus
getScreen()->toggleFocusModel(BScreen::SloppyFocus);
break;
case 3: // auto raise with sloppy focus
getScreen()->saveAutoRaise(! getScreen()->doAutoRaise());
break;
case 4: // click raise with sloppy focus
getScreen()->saveClickRaise(! getScreen()->doClickRaise());
// make sure the appropriate mouse buttons are grabbed on the windows
getScreen()->toggleFocusModel(BScreen::SloppyFocus);
break;
}
setValues();
}
Configmenu::Placementmenu::Placementmenu(Configmenu *cm):
Basemenu(cm->getScreen()) {
setLabel(i18n(ConfigmenuSet, ConfigmenuWindowPlacement, "Window Placement"));
setInternalMenu();
insert(i18n(ConfigmenuSet, ConfigmenuSmartRows, "Smart Placement (Rows)"),
BScreen::RowSmartPlacement);
insert(i18n(ConfigmenuSet, ConfigmenuSmartCols, "Smart Placement (Columns)"),
BScreen::ColSmartPlacement);
insert(i18n(ConfigmenuSet, ConfigmenuCascade, "Cascade Placement"),
BScreen::CascadePlacement);
insert(i18n(ConfigmenuSet, ConfigmenuUnderMouse, "Under Mouse Placement"),
BScreen::UnderMousePlacement);
insert(i18n(ConfigmenuSet, ConfigmenuClickMouse, "Click Mouse Placement"),
BScreen::ClickMousePlacement);
insert(i18n(ConfigmenuSet, ConfigmenuLeftRight, "Left to Right"),
BScreen::LeftRight);
insert(i18n(ConfigmenuSet, ConfigmenuRightLeft, "Right to Left"),
BScreen::RightLeft);
insert(i18n(ConfigmenuSet, ConfigmenuTopBottom, "Top to Bottom"),
BScreen::TopBottom);
insert(i18n(ConfigmenuSet, ConfigmenuBottomTop, "Bottom to Top"),
BScreen::BottomTop);
insert(i18n(ConfigmenuSet, ConfigmenuIgnoreShaded, "Ignore Shaded Windows"),
BScreen::IgnoreShaded);
insert(i18n(ConfigmenuSet, ConfigmenuIgnoreMax,
"Ignore Full-Maximized Windows"),
BScreen::IgnoreMaximized);
update();
setValues();
}
void Configmenu::Placementmenu::setValues(void) {
int placement = getScreen()->getPlacementPolicy();
setItemSelected(0, placement == BScreen::RowSmartPlacement);
setItemSelected(1, placement == BScreen::ColSmartPlacement);
setItemSelected(2, placement == BScreen::CascadePlacement);
setItemSelected(3, placement == BScreen::UnderMousePlacement);
setItemSelected(4, placement == BScreen::ClickMousePlacement);
bool rl = (getScreen()->getRowPlacementDirection() == BScreen::LeftRight),
tb = (getScreen()->getColPlacementDirection() == BScreen::TopBottom),
e = (placement == BScreen::RowSmartPlacement ||
placement == BScreen::ColSmartPlacement);
setItemSelected(5, rl);
setItemSelected(6, ! rl);
setItemEnabled(5, e);
setItemEnabled(6, e);
setItemSelected(7, tb);
setItemSelected(8, ! tb);
setItemEnabled(7, e);
setItemEnabled(8, e);
setItemSelected(9, getScreen()->getPlaceIgnoreShaded());
setItemSelected(10, getScreen()->getPlaceIgnoreMaximized());
setItemEnabled(9, e);
setItemEnabled(10, e);
}
void Configmenu::Placementmenu::reconfigure(void) {
setValues();
Basemenu::reconfigure();
}
void Configmenu::Placementmenu::itemSelected(int button, unsigned int index) {
if (button != 1)
return;
BasemenuItem *item = find(index);
if (! item->function())
return;
switch (item->function()) {
case BScreen::RowSmartPlacement:
getScreen()->savePlacementPolicy(item->function());
break;
case BScreen::ColSmartPlacement:
getScreen()->savePlacementPolicy(item->function());
break;
case BScreen::CascadePlacement:
getScreen()->savePlacementPolicy(item->function());
break;
case BScreen::UnderMousePlacement:
getScreen()->savePlacementPolicy(item->function());
break;
case BScreen::ClickMousePlacement:
getScreen()->savePlacementPolicy(item->function());
break;
case BScreen::LeftRight:
getScreen()->saveRowPlacementDirection(BScreen::LeftRight);
break;
case BScreen::RightLeft:
getScreen()->saveRowPlacementDirection(BScreen::RightLeft);
break;
case BScreen::TopBottom:
getScreen()->saveColPlacementDirection(BScreen::TopBottom);
break;
case BScreen::BottomTop:
getScreen()->saveColPlacementDirection(BScreen::BottomTop);
break;
case BScreen::IgnoreShaded:
getScreen()->savePlaceIgnoreShaded(! getScreen()->getPlaceIgnoreShaded());
break;
case BScreen::IgnoreMaximized:
getScreen()->
savePlaceIgnoreMaximized(! getScreen()->getPlaceIgnoreMaximized());
break;
}
setValues();
}
Configmenu::WindowToWindowSnapmenu::WindowToWindowSnapmenu(Configmenu *cm) :
Basemenu(cm->getScreen()) {
setLabel(i18n(ConfigmenuSet, ConfigmenuWindowToWindowSnap,
"Window-To-Window Snapping"));
setInternalMenu();
insert(i18n(ConfigmenuSet, ConfigmenuWindowDoSnapNo, "No Snapping"), 1);
insert(i18n(ConfigmenuSet, ConfigmenuWindowDoSnap, "Edge Snapping"), 2);
insert(i18n(ConfigmenuSet, ConfigmenuWindowDoResistance,
"Edge Resistance"), 3);
insert(i18n(ConfigmenuSet, ConfigmenuWindowCornerSnap,
"Window Corner Snapping"), 4);
update();
setValues();
}
void Configmenu::WindowToWindowSnapmenu::setValues(void) {
setItemSelected(0, (getScreen()->getWindowToWindowSnap() ==
BScreen::WindowNoSnap));
setItemSelected(1, (getScreen()->getWindowToWindowSnap() ==
BScreen::WindowSnap));
setItemSelected(2, (getScreen()->getWindowToWindowSnap() ==
BScreen::WindowResistance));
setItemEnabled(3, getScreen()->getWindowToWindowSnap());
setItemSelected(3, getScreen()->getWindowCornerSnap());
}
void Configmenu::WindowToWindowSnapmenu::reconfigure(void) {
setValues();
Basemenu::reconfigure();
}
void Configmenu::WindowToWindowSnapmenu::itemSelected(int button, unsigned int index) {
if (button != 1)
return;
BasemenuItem *item = find(index);
if (! item->function())
return;
switch (item->function()) {
case 1: // none
getScreen()->saveWindowToWindowSnap(BScreen::WindowNoSnap);
break;
case 2: // edge snapping
getScreen()->saveWindowToWindowSnap(BScreen::WindowSnap);
break;
case 3: // edge resistance
getScreen()->saveWindowToWindowSnap(BScreen::WindowResistance);
break;
case 4: // window corner snapping
getScreen()->saveWindowCornerSnap(! getScreen()->getWindowCornerSnap());
break;
}
setValues();
}
Configmenu::WindowToEdgeSnapmenu::WindowToEdgeSnapmenu(Configmenu *cm) :
Basemenu(cm->getScreen()) {
setLabel(i18n(ConfigmenuSet, ConfigmenuWindowToEdgeSnap,
"Window-To-Edge Snapping"));
setInternalMenu();
insert(i18n(ConfigmenuSet, ConfigmenuWindowDoSnapNo, "No Snapping"), 1);
insert(i18n(ConfigmenuSet, ConfigmenuWindowDoSnap, "Edge Snapping"), 2);
insert(i18n(ConfigmenuSet, ConfigmenuWindowDoResistance,
"Edge Resistance"), 3);
update();
setValues();
}
void Configmenu::WindowToEdgeSnapmenu::setValues(void) {
setItemSelected(0, (getScreen()->getWindowToEdgeSnap() ==
BScreen::WindowNoSnap));
setItemSelected(1, (getScreen()->getWindowToEdgeSnap() ==
BScreen::WindowSnap));
setItemSelected(2, (getScreen()->getWindowToEdgeSnap() ==
BScreen::WindowResistance));
}
void Configmenu::WindowToEdgeSnapmenu::reconfigure(void) {
setValues();
Basemenu::reconfigure();
}
void Configmenu::WindowToEdgeSnapmenu::itemSelected(int button, unsigned int index) {
if (button != 1)
return;
BasemenuItem *item = find(index);
if (! item->function())
return;
switch (item->function()) {
case 1: // none
getScreen()->saveWindowToEdgeSnap(BScreen::WindowNoSnap);
break;
case 2: // edge snapping
getScreen()->saveWindowToEdgeSnap(BScreen::WindowSnap);
break;
case 3: // edge resistance
getScreen()->saveWindowToEdgeSnap(BScreen::WindowResistance);
break;
}
setValues();
}
#ifdef XINERAMA
Configmenu::Xineramamenu::Xineramamenu(Configmenu *cm):
Basemenu(cm->getScreen()) {
setLabel(i18n(ConfigmenuSet, ConfigmenuXineramaSupport, "Xinerama Support"));
setInternalMenu();
insert(i18n(ConfigmenuSet, ConfigmenuXineramaPlacement, "Window Placement"),
1);
insert(i18n(ConfigmenuSet, ConfigmenuXineramaMaximizing, "Window Maximizing"),
2);
insert(i18n(ConfigmenuSet, ConfigmenuXineramaSnapping, "Window Snapping"),
3);
update();
setValues();
}
void Configmenu::Xineramamenu::setValues(void) {
setItemSelected(0, getScreen()->getBlackbox()->doXineramaPlacement());
setItemSelected(1, getScreen()->getBlackbox()->doXineramaMaximizing());
setItemSelected(2, getScreen()->getBlackbox()->doXineramaSnapping());
}
void Configmenu::Xineramamenu::reconfigure(void) {
setValues();
Basemenu::reconfigure();
}
void Configmenu::Xineramamenu::itemSelected(int button, unsigned int index) {
if (button != 1)
return;
BasemenuItem *item = find(index);
if (! item->function())
return;
Blackbox *bb = getScreen()->getBlackbox();
switch (item->function()) {
case 1: // window placement
bb->saveXineramaPlacement(! bb->doXineramaPlacement());
setItemSelected(0, bb->doXineramaPlacement());
break;
case 2: // window maximizing
bb->saveXineramaMaximizing(! bb->doXineramaMaximizing());
setItemSelected(1, bb->doXineramaMaximizing());
break;
case 3: // window snapping
bb->saveXineramaSnapping(! bb->doXineramaSnapping());
setItemSelected(2, bb->doXineramaSnapping());
break;
}
}
#endif // XINERAMA
#ifdef XFT
Configmenu::Xftmenu::Xftmenu(Configmenu *cm):
Basemenu(cm->getScreen()) {
setLabel(i18n(ConfigmenuSet, ConfigmenuXftOptions, "Xft Font Options"));
setInternalMenu();
insert(i18n(ConfigmenuSet, ConfigmenuXftAA, "Anti-Alias Text"), 1);
insert(i18n(ConfigmenuSet, ConfigmenuXftShadow, "Drop Shadows Under Text"),
2);
update();
setValues();
}
void Configmenu::Xftmenu::setValues(void) {
setItemSelected(0, getScreen()->doAAFonts());
setItemEnabled(1, getScreen()->doAAFonts());
setItemSelected(1, getScreen()->doShadowFonts());
}
void Configmenu::Xftmenu::reconfigure(void) {
setValues();
Basemenu::reconfigure();
}
void Configmenu::Xftmenu::itemSelected(int button, unsigned int index) {
if (button != 1)
return;
BasemenuItem *item = find(index);
if (! item->function())
return;
switch (item->function()) {
case 1: // anti-alias text
getScreen()->saveAAFonts(! getScreen()->doAAFonts());
break;
case 2: // drop shadows
getScreen()->saveShadowFonts(! getScreen()->doShadowFonts());
break;
}
setValues();
}
#endif // XFT

View file

@ -1,163 +0,0 @@
// -*- mode: C++; indent-tabs-mode: nil; -*-
// Configmenu.hh for Blackbox - An X11 Window Manager
// Copyright (c) 2001 - 2002 Sean 'Shaleh' Perry <shaleh@debian.org>
// Copyright (c) 1997 - 2000 Brad Hughes (bhughes@tcac.net)
//
// Permission is hereby granted, free of charge, to any person obtaining a
// copy of this software and associated documentation files (the "Software"),
// to deal in the Software without restriction, including without limitation
// the rights to use, copy, modify, merge, publish, distribute, sublicense,
// and/or sell copies of the Software, and to permit persons to whom the
// Software is furnished to do so, subject to the following conditions:
//
// The above copyright notice and this permission notice shall be included in
// all copies or substantial portions of the Software.
//
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
// THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
// DEALINGS IN THE SOFTWARE.
#ifndef __Configmenu_hh
#define __Configmenu_hh
#include "Basemenu.hh"
// forward declaration
class Blackbox;
class BScreen;
class Configmenu;
class Configmenu : public Basemenu {
private:
class Focusmenu : public Basemenu {
private:
Focusmenu(const Focusmenu&);
Focusmenu& operator=(const Focusmenu&);
protected:
virtual void itemSelected(int button, unsigned int index);
virtual void setValues(void);
public:
Focusmenu(Configmenu *cm);
virtual void reconfigure(void);
};
class Placementmenu : public Basemenu {
private:
Placementmenu(const Placementmenu&);
Placementmenu& operator=(const Placementmenu&);
protected:
virtual void itemSelected(int button, unsigned int index);
virtual void setValues(void);
public:
Placementmenu(Configmenu *cm);
virtual void reconfigure(void);
};
class WindowToWindowSnapmenu : public Basemenu {
private:
WindowToWindowSnapmenu(const WindowToWindowSnapmenu&);
WindowToWindowSnapmenu& operator=(const WindowToWindowSnapmenu&);
protected:
virtual void itemSelected(int button, unsigned int index);
virtual void setValues(void);
public:
WindowToWindowSnapmenu(Configmenu *cm);
virtual void reconfigure(void);
};
class WindowToEdgeSnapmenu : public Basemenu {
private:
WindowToEdgeSnapmenu(const WindowToEdgeSnapmenu&);
WindowToEdgeSnapmenu& operator=(const WindowToEdgeSnapmenu&);
protected:
virtual void itemSelected(int button, unsigned int index);
virtual void setValues(void);
public:
WindowToEdgeSnapmenu(Configmenu *cm);
virtual void reconfigure(void);
};
#ifdef XINERAMA
class Xineramamenu : public Basemenu {
private:
Xineramamenu(const Xineramamenu&);
Xineramamenu& operator=(const Xineramamenu&);
protected:
virtual void itemSelected(int button, unsigned int index);
virtual void setValues(void);
public:
Xineramamenu(Configmenu *cm);
virtual void reconfigure(void);
};
#endif // XINERAMA
#ifdef XFT
class Xftmenu : public Basemenu {
private:
Xftmenu(const Xftmenu&);
Xftmenu& operator=(const Xftmenu&);
protected:
virtual void itemSelected(int button, unsigned int index);
virtual void setValues(void);
public:
Xftmenu(Configmenu *cm);
virtual void reconfigure(void);
};
#endif // XFT
Focusmenu *focusmenu;
Placementmenu *placementmenu;
WindowToWindowSnapmenu *windowsnapmenu;
WindowToEdgeSnapmenu *edgesnapmenu;
#ifdef XINERAMA
Xineramamenu *xineramamenu;
#endif // XINERAMA
#ifdef XFT
Xftmenu *xftmenu;
#endif // XFT
// friend class Focusmenu;
// friend class Placementmenu;
Configmenu(const Configmenu&);
Configmenu& operator=(const Configmenu&);
protected:
virtual void itemSelected(int button, unsigned int index);
virtual void setValues(void);
public:
Configmenu(BScreen *scr);
virtual ~Configmenu(void);
inline Basemenu *getFocusmenu(void) { return focusmenu; }
inline Basemenu *getPlacementmenu(void) { return placementmenu; }
inline Basemenu *getWindowSnapmenu(void) { return windowsnapmenu; }
inline Basemenu *getEdgeSnapmenu(void) { return edgesnapmenu; }
#ifdef XINERAMA
inline Basemenu *getXineramamenu(void) { return xineramamenu; }
#endif // XINERAMA
#ifdef XFT
inline Basemenu *getXftmenu(void) { return xftmenu; }
#endif // XFT
virtual void reconfigure(void);
};
#endif // __Configmenu_hh

View file

@ -1,57 +0,0 @@
// -*- mode: C++; indent-tabs-mode: nil; -*-
// Icon.cc for Blackbox - an X11 Window manager
// Copyright (c) 2001 - 2002 Sean 'Shaleh' Perry <shaleh@debian.org>
// Copyright (c) 1997 - 2000 Brad Hughes (bhughes@tcac.net)
//
// Permission is hereby granted, free of charge, to any person obtaining a
// copy of this software and associated documentation files (the "Software"),
// to deal in the Software without restriction, including without limitation
// the rights to use, copy, modify, merge, publish, distribute, sublicense,
// and/or sell copies of the Software, and to permit persons to whom the
// Software is furnished to do so, subject to the following conditions:
//
// The above copyright notice and this permission notice shall be included in
// all copies or substantial portions of the Software.
//
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
// THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
// DEALINGS IN THE SOFTWARE.
#ifdef HAVE_CONFIG_H
# include "../config.h"
#endif // HAVE_CONFIG_H
#include "i18n.hh"
#include "Iconmenu.hh"
#include "Screen.hh"
#include "Window.hh"
Iconmenu::Iconmenu(BScreen *scrn) : Basemenu(scrn) {
setInternalMenu();
setLabel(i18n(IconSet, IconIcons, "Icons"));
update();
}
void Iconmenu::itemSelected(int button, unsigned int index) {
if (button != 1)
return;
if (index < getScreen()->getIconCount()) {
BlackboxWindow *win = getScreen()->getIcon(index);
if (win) {
win->deiconify();
win->setInputFocus();
}
}
if (! (getScreen()->getWorkspacemenu()->isTorn() || isTorn()))
hide();
}

View file

@ -1,46 +0,0 @@
// -*- mode: C++; indent-tabs-mode: nil; -*-
// Icon.hh for Blackbox - an X11 Window manager
// Copyright (c) 2001 - 2002 Sean 'Shaleh' Perry <shaleh@debian.org>
// Copyright (c) 1997 - 2000 Brad Hughes (bhughes@tcac.net)
//
// Permission is hereby granted, free of charge, to any person obtaining a
// copy of this software and associated documentation files (the "Software"),
// to deal in the Software without restriction, including without limitation
// the rights to use, copy, modify, merge, publish, distribute, sublicense,
// and/or sell copies of the Software, and to permit persons to whom the
// Software is furnished to do so, subject to the following conditions:
//
// The above copyright notice and this permission notice shall be included in
// all copies or substantial portions of the Software.
//
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
// THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
// DEALINGS IN THE SOFTWARE.
#ifndef __Icon_hh
#define __Icon_hh
#include "Basemenu.hh"
// forward declaration
class Iconmenu;
class BScreen;
class Iconmenu : public Basemenu {
private:
Iconmenu(const Iconmenu&);
Iconmenu& operator=(const Iconmenu&);
protected:
virtual void itemSelected(int button, unsigned int index);
public:
Iconmenu(BScreen *scrn);
};
#endif // __Icon_hh

View file

@ -1,96 +0,0 @@
// -*- mode: C++; indent-tabs-mode: nil; -*-
// Rootmenu.cc for Blackbox - an X11 Window manager
// Copyright (c) 2001 - 2002 Sean 'Shaleh' Perry <shaleh@debian.org>
// Copyright (c) 1997 - 2000 Brad Hughes (bhughes@tcac.net)
//
// Permission is hereby granted, free of charge, to any person obtaining a
// copy of this software and associated documentation files (the "Software"),
// to deal in the Software without restriction, including without limitation
// the rights to use, copy, modify, merge, publish, distribute, sublicense,
// and/or sell copies of the Software, and to permit persons to whom the
// Software is furnished to do so, subject to the following conditions:
//
// The above copyright notice and this permission notice shall be included in
// all copies or substantial portions of the Software.
//
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
// THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
// DEALINGS IN THE SOFTWARE.
#ifdef HAVE_CONFIG_H
# include "../config.h"
#endif // HAVE_CONFIG_H
extern "C" {
#ifdef HAVE_STDIO_H
# include <stdio.h>
#endif // HAVE_STDIO_H
#ifdef HAVE_STDLIB_H
# include <stdlib.h>
#endif // HAVE_STDLIB_H
#ifdef HAVE_STRING_H
# include <string.h>
#endif // HAVE_STRING_H
#ifdef HAVE_SYS_PARAM_H
# include <sys/param.h>
#endif // HAVE_SYS_PARAM_H
}
#include "blackbox.hh"
#include "Rootmenu.hh"
#include "Screen.hh"
#include "Util.hh"
Rootmenu::Rootmenu(BScreen *scrn) : Basemenu(scrn) { }
void Rootmenu::itemSelected(int button, unsigned int index) {
if (button != 1)
return;
BasemenuItem *item = find(index);
if (! item->function())
return;
if (! (getScreen()->getRootmenu()->isTorn() || isTorn()) &&
item->function() != BScreen::Reconfigure &&
item->function() != BScreen::SetStyle)
hide();
switch (item->function()) {
case BScreen::Execute:
if (item->exec())
bexec(item->exec(), getScreen()->displayString());
break;
case BScreen::Restart:
getScreen()->getBlackbox()->restart();
break;
case BScreen::RestartOther:
if (item->exec())
getScreen()->getBlackbox()->restart(item->exec());
break;
case BScreen::Exit:
getScreen()->getBlackbox()->shutdown();
break;
case BScreen::SetStyle:
if (item->exec())
getScreen()->getBlackbox()->saveStyleFilename(item->exec());
case BScreen::Reconfigure:
getScreen()->getBlackbox()->reconfigure();
return;
}
}

View file

@ -1,47 +0,0 @@
// -*- mode: C++; indent-tabs-mode: nil; -*-
// Rootmenu.hh for Blackbox - an X11 Window manager
// Copyright (c) 2001 - 2002 Sean 'Shaleh' Perry <shaleh@debian.org>
// Copyright (c) 1997 - 2000 Brad Hughes (bhughes@tcac.net)
//
// Permission is hereby granted, free of charge, to any person obtaining a
// copy of this software and associated documentation files (the "Software"),
// to deal in the Software without restriction, including without limitation
// the rights to use, copy, modify, merge, publish, distribute, sublicense,
// and/or sell copies of the Software, and to permit persons to whom the
// Software is furnished to do so, subject to the following conditions:
//
// The above copyright notice and this permission notice shall be included in
// all copies or substantial portions of the Software.
//
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
// THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
// DEALINGS IN THE SOFTWARE.
#ifndef __Rootmenu_hh
#define __Rootmenu_hh
// forward declarations
class BScreen;
#include "Basemenu.hh"
class Rootmenu : public Basemenu {
private:
Rootmenu(const Rootmenu&);
Rootmenu& operator=(const Rootmenu&);
protected:
virtual void itemSelected(int button, unsigned int index);
public:
Rootmenu(BScreen *scrn);
};
#endif // __Rootmenu_hh

View file

@ -1,208 +0,0 @@
// -*- mode: C++; indent-tabs-mode: nil; -*-
// Windowmenu.cc for Blackbox - an X11 Window manager
// Copyright (c) 2001 - 2002 Sean 'Shaleh' Perry <shaleh@debian.org>
// Copyright (c) 1997 - 2000 Brad Hughes (bhughes@tcac.net)
//
// Permission is hereby granted, free of charge, to any person obtaining a
// copy of this software and associated documentation files (the "Software"),
// to deal in the Software without restriction, including without limitation
// the rights to use, copy, modify, merge, publish, distribute, sublicense,
// and/or sell copies of the Software, and to permit persons to whom the
// Software is furnished to do so, subject to the following conditions:
//
// The above copyright notice and this permission notice shall be included in
// all copies or substantial portions of the Software.
//
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
// THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
// DEALINGS IN THE SOFTWARE.
#ifdef HAVE_CONFIG_H
# include "../config.h"
#endif // HAVE_CONFIG_H
extern "C" {
#ifdef HAVE_STRING_H
# include <string.h>
#endif // HAVE_STRING_H
}
#include "i18n.hh"
#include "blackbox.hh"
#include "Screen.hh"
#include "Window.hh"
#include "Windowmenu.hh"
#include "Workspace.hh"
Windowmenu::Windowmenu(BlackboxWindow *win) : Basemenu(win->getScreen()) {
window = win;
setTitleVisibility(False);
setMovable(False);
setInternalMenu();
sendToMenu = new SendtoWorkspacemenu(this);
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();
setItemEnabled(1, window->hasTitlebar());
setItemEnabled(2, window->isIconifiable());
setItemEnabled(3, window->isMaximizable());
setItemEnabled(8, window->isClosable());
}
Windowmenu::~Windowmenu(void) {
delete sendToMenu;
}
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());
Basemenu::show();
}
void Windowmenu::itemSelected(int button, unsigned int index) {
if (button != 1)
return;
BasemenuItem *item = find(index);
hide();
switch (item->function()) {
case BScreen::WindowShade:
window->shade();
break;
case BScreen::WindowIconify:
window->iconify();
break;
case BScreen::WindowMaximize:
window->maximize(1); // full maximize
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());
sendToMenu->reconfigure();
Basemenu::reconfigure();
}
Windowmenu::SendtoWorkspacemenu::SendtoWorkspacemenu(Windowmenu *w)
: Basemenu(w->getScreen()) {
window = w->window;
setTitleVisibility(False);
setMovable(False);
setInternalMenu();
update();
}
void Windowmenu::SendtoWorkspacemenu::itemSelected(int button,
unsigned int index) {
if (button > 2) return;
if (index <= getScreen()->getWorkspaceCount()) {
if (index == getScreen()->getCurrentWorkspaceID()) return;
if (window->isStuck()) window->stick();
if (button == 1) window->withdraw();
getScreen()->reassociateWindow(window, index, True);
if (button == 2) getScreen()->changeWorkspaceID(index);
}
hide();
}
void Windowmenu::SendtoWorkspacemenu::update(void) {
unsigned int i, r = getCount(),
workspace_count = getScreen()->getWorkspaceCount();
while (r > workspace_count) {
remove(0);
r = getCount();
}
for (i = 0; i < workspace_count; ++i) {
if (r < workspace_count) {
insert(getScreen()->getWorkspace(i)->getName());
++r;
} else {
changeItemLabel(i, getScreen()->getWorkspace(i)->getName());
setItemEnabled(i, i != getScreen()->getCurrentWorkspaceID());
}
}
Basemenu::update();
}
void Windowmenu::SendtoWorkspacemenu::show(void) {
update();
Basemenu::show();
}

View file

@ -1,79 +0,0 @@
// Windowmenu.hh for Blackbox - an X11 Window manager
// Copyright (c) 2001 Sean 'Shaleh' Perry <shaleh@debian.org>
// Copyright (c) 1997 - 2000 Brad Hughes (bhughes@tcac.net)
//
// Permission is hereby granted, free of charge, to any person obtaining a
// copy of this software and associated documentation files (the "Software"),
// to deal in the Software without restriction, including without limitation
// the rights to use, copy, modify, merge, publish, distribute, sublicense,
// and/or sell copies of the Software, and to permit persons to whom the
// Software is furnished to do so, subject to the following conditions:
//
// The above copyright notice and this permission notice shall be included in
// all copies or substantial portions of the Software.
//
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
// THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
// DEALINGS IN THE SOFTWARE.
#ifndef __Windowmenu_hh
#define __Windowmenu_hh
#include "Basemenu.hh"
// forward declaration
class Windowmenu;
class SendtoWorkspaceMenu;
class BlackboxWindow;
class Windowmenu : public Basemenu {
private:
BlackboxWindow *window;
class SendtoWorkspacemenu : public Basemenu {
private:
BlackboxWindow *window;
SendtoWorkspacemenu(const SendtoWorkspacemenu&);
SendtoWorkspacemenu& operator=(const SendtoWorkspacemenu&);
protected:
virtual void itemSelected(int button, unsigned int index);
public:
SendtoWorkspacemenu(Windowmenu *w);
void update(void);
virtual void show(void);
};
SendtoWorkspacemenu *sendToMenu;
friend class SendtoWorkspacemenu;
Windowmenu(const Windowmenu&);
Windowmenu& operator=(const Windowmenu&);
protected:
virtual void itemSelected(int button, unsigned int index);
public:
Windowmenu(BlackboxWindow *win);
virtual ~Windowmenu(void);
inline Basemenu *getSendToMenu(void) { return (Basemenu *) sendToMenu; }
void reconfigure(void);
void setClosable(void);
virtual void show(void);
};
#endif // __Windowmenu_hh

View file

@ -1,88 +0,0 @@
// -*- mode: C++; indent-tabs-mode: nil; -*-
// Workspacemenu.cc for Blackbox - an X11 Window manager
// Copyright (c) 2001 - 2002 Sean 'Shaleh' Perry <shaleh@debian.org>
// Copyright (c) 1997 - 2000 Brad Hughes (bhughes@tcac.net)
//
// Permission is hereby granted, free of charge, to any person obtaining a
// copy of this software and associated documentation files (the "Software"),
// to deal in the Software without restriction, including without limitation
// the rights to use, copy, modify, merge, publish, distribute, sublicense,
// and/or sell copies of the Software, and to permit persons to whom the
// Software is furnished to do so, subject to the following conditions:
//
// The above copyright notice and this permission notice shall be included in
// all copies or substantial portions of the Software.
//
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
// THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
// DEALINGS IN THE SOFTWARE.
#ifdef HAVE_CONFIG_H
# include "../config.h"
#endif // HAVE_CONFIG_H
#include "i18n.hh"
#include "blackbox.hh"
#include "Clientmenu.hh"
#include "Screen.hh"
#include "Toolbar.hh"
#include "Workspacemenu.hh"
#include "Workspace.hh"
Workspacemenu::Workspacemenu(BScreen *scrn) : Basemenu(scrn) {
setInternalMenu();
setLabel(i18n(WorkspacemenuSet, WorkspacemenuWorkspacesTitle, "Workspaces"));
insert(i18n(WorkspacemenuSet, WorkspacemenuNewWorkspace, "New Workspace"));
insert(i18n(WorkspacemenuSet, WorkspacemenuRemoveLast, "Remove Last"));
}
void Workspacemenu::itemSelected(int button, unsigned int index) {
if (button != 1)
return;
if (index == 0) {
getScreen()->addWorkspace();
} else if (index == 1) {
getScreen()->removeLastWorkspace();
} else {
// subtract 2 because the workspace menu has 2 extra items at the top before
// the list of the workspace names
index -= 2;
const Workspace* const wkspc = getScreen()->getCurrentWorkspace();
if (wkspc->getID() != index && index < getScreen()->getWorkspaceCount())
getScreen()->changeWorkspaceID(index);
}
if (! (getScreen()->getWorkspacemenu()->isTorn() || isTorn()))
hide();
}
void Workspacemenu::changeWorkspaceLabel(unsigned int index,
const std::string& label) {
// add 2 because the workspace menu has 2 extra items at the top before the
// list of the workspace names
changeItemLabel(index + 2, label);
}
void Workspacemenu::insertWorkspace(Workspace *wkspc) {
assert(wkspc);
// add 2 because the workspace menu has 2 extra items at the top before the
// list of the workspace names
insert(wkspc->getName(), wkspc->getMenu(), wkspc->getID() + 2);
}
void Workspacemenu::removeWorkspace(Workspace *wkspc) {
assert(wkspc);
// add 2 because the workspace menu has 2 extra items at the top before the
// list of the workspace names
remove(wkspc->getID() + 2);
}

View file

@ -1,52 +0,0 @@
// -*- mode: C++; indent-tabs-mode: nil; -*-
// WorkspaceMenu.hh for Blackbox - an X11 Window manager
// Copyright (c) 2001 - 2002 Sean 'Shaleh' Perry <shaleh@debian.org>
// Copyright (c) 1997 - 2000 Brad Hughes (bhughes@tcac.net)
//
// Permission is hereby granted, free of charge, to any person obtaining a
// copy of this software and associated documentation files (the "Software"),
// to deal in the Software without restriction, including without limitation
// the rights to use, copy, modify, merge, publish, distribute, sublicense,
// and/or sell copies of the Software, and to permit persons to whom the
// Software is furnished to do so, subject to the following conditions:
//
// The above copyright notice and this permission notice shall be included in
// all copies or substantial portions of the Software.
//
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
// THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
// DEALINGS IN THE SOFTWARE.
#ifndef __Workspacemenu_hh
#define __Workspacemenu_hh
#include "Basemenu.hh"
// forward declaration
class Workspacemenu;
class Toolbar;
class Workspace;
class Workspacemenu : public Basemenu {
private:
Workspacemenu(const Workspacemenu&);
Workspacemenu& operator=(const Workspacemenu&);
protected:
virtual void itemSelected(int button, unsigned int index);
public:
Workspacemenu(BScreen *scrn);
void changeWorkspaceLabel(unsigned int index, const std::string& label);
void insertWorkspace(Workspace *wkspc);
void removeWorkspace(Workspace *wkspc);
};
#endif // __Workspacemenu_hh