cleaning in the menu code

This commit is contained in:
fluxgen 2003-12-10 23:08:06 +00:00
parent cb8e8e8d05
commit 5ffb6290c1
15 changed files with 103 additions and 139 deletions

View file

@ -19,7 +19,7 @@
// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER // FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
// DEALINGS IN THE SOFTWARE. // DEALINGS IN THE SOFTWARE.
// $Id: FbMenu.cc,v 1.1 2003/07/10 11:26:40 fluxgen Exp $ // $Id: FbMenu.cc,v 1.2 2003/12/10 23:08:03 fluxgen Exp $
#include "FbMenu.hh" #include "FbMenu.hh"
@ -27,9 +27,9 @@
#include "Shape.hh" #include "Shape.hh"
FbMenu::FbMenu(MenuTheme &tm, int screen_num, FbTk::ImageControl &imgctrl, FbMenu::FbMenu(MenuTheme &tm, FbTk::ImageControl &imgctrl,
FbTk::XLayer &layer): FbTk::XLayer &layer):
FbTk::Menu(tm, screen_num, imgctrl), FbTk::Menu(tm, imgctrl),
m_layeritem(fbwindow(), layer), m_layeritem(fbwindow(), layer),
m_shape(new Shape(fbwindow(), tm.shapePlaces())) { m_shape(new Shape(fbwindow(), tm.shapePlaces())) {

View file

@ -19,7 +19,7 @@
// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER // FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
// DEALINGS IN THE SOFTWARE. // DEALINGS IN THE SOFTWARE.
// $Id: FbMenu.hh,v 1.2 2003/07/10 11:25:13 fluxgen Exp $ // $Id: FbMenu.hh,v 1.3 2003/12/10 23:08:03 fluxgen Exp $
#ifndef FBMENU_HH #ifndef FBMENU_HH
#define FBMENU_HH #define FBMENU_HH
@ -33,7 +33,7 @@ class Shape;
/// a layered and shaped menu /// a layered and shaped menu
class FbMenu:public FbTk::Menu { class FbMenu:public FbTk::Menu {
public: public:
FbMenu(MenuTheme &tm, int screen_num, FbTk::ImageControl &imgctrl, FbMenu(MenuTheme &tm, FbTk::ImageControl &imgctrl,
FbTk::XLayer &layer); FbTk::XLayer &layer);
~FbMenu(); ~FbMenu();
void clearWindow(); void clearWindow();

View file

@ -22,7 +22,7 @@
// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER // FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
// DEALINGS IN THE SOFTWARE. // DEALINGS IN THE SOFTWARE.
// $Id: Menu.cc,v 1.43 2003/11/28 23:26:27 fluxgen Exp $ // $Id: Menu.cc,v 1.44 2003/12/10 23:08:06 fluxgen Exp $
//use GNU extensions //use GNU extensions
#ifndef _GNU_SOURCE #ifndef _GNU_SOURCE
@ -48,45 +48,18 @@
using namespace std; using namespace std;
namespace {
Pixmap getRootPixmap(int screen_num) {
Pixmap root_pm = 0;
// get root pixmap for transparency
Display *disp = FbTk::App::instance()->display();
Atom real_type;
int real_format;
unsigned long items_read, items_left;
unsigned int *data;
if (XGetWindowProperty(disp, RootWindow(disp, screen_num),
XInternAtom(disp, "_XROOTPMAP_ID", false),
0L, 1L,
false, XA_PIXMAP, &real_type,
&real_format, &items_read, &items_left,
(unsigned char **) &data) == Success &&
items_read) {
root_pm = (Pixmap) (*data);
XFree(data);
}
return root_pm;
}
}; // end anonymous namespace
namespace FbTk { namespace FbTk {
static Menu *shown = 0; static Menu *shown = 0;
Menu *Menu::s_focused = 0; Menu *Menu::s_focused = 0;
Menu::Menu(MenuTheme &tm, int screen_num, ImageControl &imgctrl): Menu::Menu(MenuTheme &tm, ImageControl &imgctrl):
m_theme(tm), m_theme(tm),
m_screen_num(screen_num),
m_image_ctrl(imgctrl), m_image_ctrl(imgctrl),
m_display(FbTk::App::instance()->display()),
m_parent(0), m_parent(0),
m_screen_width(DisplayWidth(m_display, screen_num)), m_screen_width(DisplayWidth(FbTk::App::instance()->display(), tm.screenNum())),
m_screen_height(DisplayHeight(m_display, screen_num)), m_screen_height(DisplayHeight(FbTk::App::instance()->display(), tm.screenNum())),
m_alignment(ALIGNDONTCARE), m_alignment(ALIGNDONTCARE),
m_border_width(0), m_border_width(0),
m_themeobserver(*this), m_themeobserver(*this),
@ -123,7 +96,7 @@ Menu::Menu(MenuTheme &tm, int screen_num, ImageControl &imgctrl):
menu.bevel_w = 2; menu.bevel_w = 2;
menu.width = menu.title_h = menu.item_w = menu.frame_h = menu.title_h = menu.item_w = menu.frame_h =
m_theme.titleFont().height() + menu.bevel_w * 2; m_theme.titleFont().height() + menu.bevel_w * 2;
menu.sublevels = menu.sublevels =
@ -132,13 +105,11 @@ Menu::Menu(MenuTheme &tm, int screen_num, ImageControl &imgctrl):
menu.item_h = m_theme.frameFont().height() + menu.bevel_w; menu.item_h = m_theme.frameFont().height() + menu.bevel_w;
menu.height = menu.title_h + 2 + menu.frame_h;
long event_mask = ButtonPressMask | ButtonReleaseMask | long event_mask = ButtonPressMask | ButtonReleaseMask |
ButtonMotionMask | KeyPressMask | ExposureMask | FocusChangeMask; ButtonMotionMask | KeyPressMask | ExposureMask | FocusChangeMask;
//create menu window // create menu window
menu.window = FbTk::FbWindow(screen_num, menu.window = FbTk::FbWindow(tm.screenNum(),
menu.x, menu.y, menu.width, menu.height, 0, 0, 10, 10,
event_mask, event_mask,
true); // override redirect true); // override redirect
@ -152,7 +123,7 @@ Menu::Menu(MenuTheme &tm, int screen_num, ImageControl &imgctrl):
event_mask |= EnterWindowMask | LeaveWindowMask; event_mask |= EnterWindowMask | LeaveWindowMask;
//create menu title //create menu title
menu.title = FbTk::FbWindow(menu.window, menu.title = FbTk::FbWindow(menu.window,
0, 0, menu.width, menu.height, 0, 0, width(), menu.title_h,
event_mask); event_mask);
evm.add(*this, menu.title); evm.add(*this, menu.title);
@ -160,7 +131,7 @@ Menu::Menu(MenuTheme &tm, int screen_num, ImageControl &imgctrl):
event_mask |= PointerMotionMask; event_mask |= PointerMotionMask;
menu.frame = FbTk::FbWindow(menu.window, menu.frame = FbTk::FbWindow(menu.window,
0, menu.title_h, 0, menu.title_h,
menu.width, menu.frame_h, width(), menu.frame_h ? menu.frame_h : 1,
event_mask); event_mask);
evm.add(*this, menu.frame); evm.add(*this, menu.frame);
// update style // update style
@ -421,30 +392,36 @@ void Menu::update(int active_index) {
menu.persub = 0; menu.persub = 0;
} }
menu.width = (menu.sublevels * (menu.item_w));
if (! menu.width) menu.width = menu.item_w;
menu.frame_h = (menu.item_h * menu.persub); menu.frame_h = (menu.item_h * menu.persub);
if (menu.frame_h < 0) if (menu.frame_h < 0)
menu.frame_h = 0; menu.frame_h = 0;
menu.height = menu.frame_h;
if (title_vis)
menu.height += menu.title_h + ((menu.frame_h>0)?menu.title.borderWidth():0);
if (menu.height < 1) int new_width = (menu.sublevels * menu.item_w);
menu.height = 1; int new_height = menu.frame_h;
if (title_vis)
new_height += menu.title_h + ((menu.frame_h>0)?menu.title.borderWidth():0);
if (new_width < 1)
new_width = menu.item_w;
if (new_height < 1)
new_height = 1;
menu.window.resize(new_width, new_height);
Pixmap tmp; Pixmap tmp;
if (title_vis) { if (title_vis) {
tmp = menu.title_pixmap; tmp = menu.title_pixmap;
const FbTk::Texture &tex = m_theme.titleTexture(); const FbTk::Texture &tex = m_theme.titleTexture();
if (tex.type() == (FbTk::Texture::FLAT | FbTk::Texture::SOLID)) { if (!tex.usePixmap()) {
menu.title_pixmap = None; menu.title_pixmap = None;
menu.title.setBackgroundColor(tex.color()); menu.title.setBackgroundColor(tex.color());
} else { } else {
menu.title_pixmap = menu.title_pixmap =
m_image_ctrl.renderImage(menu.width, menu.title_h, tex); m_image_ctrl.renderImage(width(), menu.title_h, tex);
menu.title.setBackgroundPixmap(menu.title_pixmap); menu.title.setBackgroundPixmap(menu.title_pixmap);
} }
@ -455,11 +432,11 @@ void Menu::update(int active_index) {
tmp = menu.frame_pixmap; tmp = menu.frame_pixmap;
const FbTk::Texture &frame_tex = m_theme.frameTexture(); const FbTk::Texture &frame_tex = m_theme.frameTexture();
if (frame_tex.type() == (FbTk::Texture::FLAT | FbTk::Texture::SOLID)) { if (!frame_tex.usePixmap()) {
menu.frame_pixmap = None; menu.frame_pixmap = None;
} else { } else {
menu.frame_pixmap = menu.frame_pixmap =
m_image_ctrl.renderImage(menu.width, menu.frame_h, frame_tex); m_image_ctrl.renderImage(width(), menu.frame_h, frame_tex);
} }
if (tmp) if (tmp)
@ -467,18 +444,18 @@ void Menu::update(int active_index) {
tmp = menu.hilite_pixmap; tmp = menu.hilite_pixmap;
const FbTk::Texture &hilite_tex = m_theme.hiliteTexture(); const FbTk::Texture &hilite_tex = m_theme.hiliteTexture();
if (hilite_tex.type() == (FbTk::Texture::FLAT | FbTk::Texture::SOLID)) if (!hilite_tex.usePixmap()) {
menu.hilite_pixmap = None; menu.hilite_pixmap = None;
else } else
menu.hilite_pixmap = menu.hilite_pixmap =
m_image_ctrl.renderImage(menu.item_w, menu.item_h, hilite_tex); m_image_ctrl.renderImage(menu.item_w, menu.item_h, hilite_tex);
if (tmp) if (tmp)
m_image_ctrl.removeImage(tmp); m_image_ctrl.removeImage(tmp);
tmp = menu.sel_pixmap; tmp = menu.sel_pixmap;
if (hilite_tex.type() == (FbTk::Texture::FLAT | FbTk::Texture::SOLID)) if (!hilite_tex.usePixmap()) {
menu.sel_pixmap = None; menu.sel_pixmap = None;
else { } else {
int hw = menu.item_h / 2; int hw = menu.item_h / 2;
menu.sel_pixmap = menu.sel_pixmap =
m_image_ctrl.renderImage(hw, hw, hilite_tex); m_image_ctrl.renderImage(hw, hw, hilite_tex);
@ -486,11 +463,11 @@ void Menu::update(int active_index) {
if (tmp) if (tmp)
m_image_ctrl.removeImage(tmp); m_image_ctrl.removeImage(tmp);
menu.window.resize(menu.width, menu.height);
if (title_vis) { if (title_vis) {
menu.title.moveResize(-menu.title.borderWidth(), -menu.title.borderWidth(), menu.title.moveResize(-menu.title.borderWidth(), -menu.title.borderWidth(),
menu.width + menu.title.borderWidth(), menu.title_h); width() + menu.title.borderWidth(), menu.title_h);
} }
menu.frame.moveResize(0, ((title_vis) ? menu.title.y() + menu.title.height() + menu.frame.moveResize(0, ((title_vis) ? menu.title.y() + menu.title.height() +
@ -637,11 +614,11 @@ void Menu::redrawTitle() {
switch (m_theme.titleFontJustify()) { switch (m_theme.titleFontJustify()) {
case FbTk::RIGHT: case FbTk::RIGHT:
dx += menu.width - l; dx += width() - l;
break; break;
case FbTk::CENTER: case FbTk::CENTER:
dx += (menu.width - l) / 2; dx += (width() - l) / 2;
break; break;
default: default:
break; break;
@ -695,10 +672,10 @@ void Menu::drawSubmenu(unsigned int index) {
} }
if (m_alignment == ALIGNBOTTOM && if (m_alignment == ALIGNBOTTOM &&
(y + item->submenu()->menu.height) > ((shifted) ? menu.y_shift : (y + item->submenu()->height()) > ((shifted) ? menu.y_shift :
menu.y) + menu.height) { menu.y) + height()) {
y = (((shifted) ? menu.y_shift : menu.y) + y = (((shifted) ? menu.y_shift : menu.y) +
menu.height - item->submenu()->menu.height); height() - item->submenu()->height());
} }
if ((x + item->submenu()->width()) > m_screen_width) { if ((x + item->submenu()->width()) > m_screen_width) {
@ -1090,13 +1067,13 @@ void Menu::buttonReleaseEvent(XButtonEvent &re) {
update(); update();
} }
if (re.x >= 0 && re.x <= (signed) menu.width && if (re.x >= 0 && re.x <= (signed) width() &&
re.y >= 0 && re.y <= (signed) menu.title_h && re.y >= 0 && re.y <= (signed) menu.title_h &&
re.button == 3) re.button == 3)
hide(); hide();
} else if (re.window == menu.frame && } else if (re.window == menu.frame &&
re.x >= 0 && re.x < (signed) menu.width && re.x >= 0 && re.x < (signed) width() &&
re.y >= 0 && re.y < (signed) menu.frame_h) { re.y >= 0 && re.y < (signed) menu.frame_h) {
int sbl = (re.x / menu.item_w), i = (re.y / menu.item_h), int sbl = (re.x / menu.item_w), i = (re.y / menu.item_h),
@ -1147,7 +1124,7 @@ void Menu::motionNotifyEvent(XMotionEvent &me) {
} }
} }
} else if ((! (me.state & Button1Mask)) && me.window == menu.frame && } else if ((! (me.state & Button1Mask)) && me.window == menu.frame &&
me.x >= 0 && me.x < (signed) menu.width && me.x >= 0 && me.x < (signed) width() &&
me.y >= 0 && me.y < (signed) menu.frame_h) { me.y >= 0 && me.y < (signed) menu.frame_h) {
int sbl = (me.x / menu.item_w), i = (me.y / menu.item_h), int sbl = (me.x / menu.item_w), i = (me.y / menu.item_h),
w = (sbl * menu.persub) + i; w = (sbl * menu.persub) + i;
@ -1230,16 +1207,16 @@ void Menu::enterNotifyEvent(XCrossingEvent &ce) {
return; return;
menu.x_shift = menu.x, menu.y_shift = menu.y; menu.x_shift = menu.x, menu.y_shift = menu.y;
if (menu.x + menu.width > m_screen_width) { if (menu.x + width() > m_screen_width) {
menu.x_shift = m_screen_width - menu.width - 2*m_border_width; menu.x_shift = m_screen_width - width() - 2*m_border_width;
shifted = true; shifted = true;
} else if (menu.x < 0) { } else if (menu.x < 0) {
menu.x_shift = 0; //-m_border_width; menu.x_shift = 0; //-m_border_width;
shifted = true; shifted = true;
} }
if (menu.y + menu.height + 2*m_border_width > m_screen_height) { if (menu.y + height() + 2*m_border_width > m_screen_height) {
menu.y_shift = m_screen_height - menu.height - 2*m_border_width; menu.y_shift = m_screen_height - height() - 2*m_border_width;
shifted = true; shifted = true;
} else if (menu.y + (signed) menu.title_h < 0) { } else if (menu.y + (signed) menu.title_h < 0) {
menu.y_shift = 0; // -m_border_width;; menu.y_shift = 0; // -m_border_width;;

View file

@ -22,7 +22,7 @@
// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER // FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
// DEALINGS IN THE SOFTWARE. // DEALINGS IN THE SOFTWARE.
// $Id: Menu.hh,v 1.24 2003/12/08 16:39:44 fluxgen Exp $ // $Id: Menu.hh,v 1.25 2003/12/10 23:08:06 fluxgen Exp $
#ifndef FBTK_MENU_HH #ifndef FBTK_MENU_HH
#define FBTK_MENU_HH #define FBTK_MENU_HH
@ -57,7 +57,7 @@ public:
*/ */
enum { EMPTY = 0, SQUARE, TRIANGLE, DIAMOND }; enum { EMPTY = 0, SQUARE, TRIANGLE, DIAMOND };
Menu(MenuTheme &tm, int screen_num, ImageControl &imgctrl); Menu(MenuTheme &tm, ImageControl &imgctrl);
virtual ~Menu(); virtual ~Menu();
/** /**
@ -132,7 +132,7 @@ public:
//@{ //@{
inline bool isTorn() const { return torn; } inline bool isTorn() const { return torn; }
inline bool isVisible() const { return visible; } inline bool isVisible() const { return visible; }
inline int screenNumber() const { return m_screen_num; } inline int screenNumber() const { return menu.window.screenNumber(); }
inline Window window() const { return menu.window.window(); } inline Window window() const { return menu.window.window(); }
inline FbWindow &fbwindow() { return menu.window; } inline FbWindow &fbwindow() { return menu.window; }
inline const FbWindow &fbwindow() const { return menu.window; } inline const FbWindow &fbwindow() const { return menu.window; }
@ -141,8 +141,8 @@ public:
inline const std::string &label() const { return menu.label; } inline const std::string &label() const { return menu.label; }
inline int x() const { return menu.x; } inline int x() const { return menu.x; }
inline int y() const { return menu.y; } inline int y() const { return menu.y; }
inline unsigned int width() const { return menu.width; } inline unsigned int width() const { return menu.window.width(); }
inline unsigned int height() const { return menu.height; } inline unsigned int height() const { return menu.window.height(); }
inline unsigned int numberOfItems() const { return menuitems.size(); } inline unsigned int numberOfItems() const { return menuitems.size(); }
inline int currentSubmenu() const { return which_sub; } inline int currentSubmenu() const { return which_sub; }
inline unsigned int titleHeight() const { return menu.title_h; } inline unsigned int titleHeight() const { return menu.title_h; }
@ -178,8 +178,6 @@ private:
typedef std::vector<MenuItem *> Menuitems; typedef std::vector<MenuItem *> Menuitems;
const MenuTheme &m_theme; const MenuTheme &m_theme;
Display *m_display;
const int m_screen_num;
Menu *m_parent; Menu *m_parent;
ImageControl &m_image_ctrl; ImageControl &m_image_ctrl;
Menuitems menuitems; Menuitems menuitems;
@ -198,7 +196,7 @@ private:
std::string label; std::string label;
int x, y, x_move, y_move, x_shift, y_shift, sublevels, persub, minsub, int x, y, x_move, y_move, x_shift, y_shift, sublevels, persub, minsub,
grab_x, grab_y; grab_x, grab_y;
unsigned int width, height, title_h, frame_h, item_w, item_h, bevel_w, unsigned int title_h, frame_h, item_w, item_h, bevel_w,
bevel_h; bevel_h;
} menu; } menu;

View file

@ -20,7 +20,7 @@
// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER // FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
// DEALINGS IN THE SOFTWARE. // DEALINGS IN THE SOFTWARE.
// $Id: IconbarTool.cc,v 1.20 2003/12/07 17:51:02 fluxgen Exp $ // $Id: IconbarTool.cc,v 1.21 2003/12/10 23:08:03 fluxgen Exp $
#include "IconbarTool.hh" #include "IconbarTool.hh"
@ -186,7 +186,7 @@ IconbarTool::IconbarTool(const FbTk::FbWindow &parent, IconbarTheme &theme, BScr
screen.name() + ".iconbar.mode", screen.altName() + ".Iconbar.Mode"), screen.name() + ".iconbar.mode", screen.altName() + ".Iconbar.Mode"),
m_rc_use_pixmap(screen.resourceManager(), true, m_rc_use_pixmap(screen.resourceManager(), true,
screen.name() + ".iconbar.usePixmap", screen.altName() + ".Iconbar.UsePixmap"), screen.name() + ".iconbar.usePixmap", screen.altName() + ".Iconbar.UsePixmap"),
m_menu(*screen.menuTheme(), menu.screenNumber(), screen.imageControl(), m_menu(*screen.menuTheme(), screen.imageControl(),
*screen.layerManager().getLayer(Fluxbox::instance()->getMenuLayer())) { *screen.layerManager().getLayer(Fluxbox::instance()->getMenuLayer())) {
// setup mode menu // setup mode menu

View file

@ -20,7 +20,7 @@
// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER // FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
// DEALINGS IN THE SOFTWARE. // DEALINGS IN THE SOFTWARE.
// $Id: LayerMenu.hh,v 1.6 2003/12/03 22:12:26 fluxgen Exp $ // $Id: LayerMenu.hh,v 1.7 2003/12/10 23:08:03 fluxgen Exp $
#ifndef LAYERMENU_HH #ifndef LAYERMENU_HH
#define LAYERMENU_HH #define LAYERMENU_HH
@ -60,7 +60,7 @@ private:
template <typename ItemType> template <typename ItemType>
class LayerMenu : public FbMenu { class LayerMenu : public FbMenu {
public: public:
LayerMenu(MenuTheme &tm, int screen_num, FbTk::ImageControl &imgctrl, LayerMenu(MenuTheme &tm, FbTk::ImageControl &imgctrl,
FbTk::XLayer &layer, ItemType *item, bool save_rc); FbTk::XLayer &layer, ItemType *item, bool save_rc);
private: private:
@ -69,9 +69,9 @@ private:
template <typename ItemType> template <typename ItemType>
LayerMenu<ItemType>::LayerMenu(MenuTheme &tm, int screen_num, FbTk::ImageControl &imgctrl, LayerMenu<ItemType>::LayerMenu(MenuTheme &tm, FbTk::ImageControl &imgctrl,
FbTk::XLayer &layer, ItemType *item, bool save_rc): FbTk::XLayer &layer, ItemType *item, bool save_rc):
FbMenu(tm, screen_num, imgctrl, layer), FbMenu(tm, imgctrl, layer),
m_object(item) m_object(item)
{ {
@ -93,18 +93,16 @@ LayerMenu<ItemType>::LayerMenu(MenuTheme &tm, int screen_num, FbTk::ImageControl
}; };
FbTk::RefCount<FbTk::Command> saverc_cmd(new FbTk::SimpleCommand<Fluxbox>( FbTk::RefCount<FbTk::Command> saverc_cmd(new FbTk::SimpleCommand<Fluxbox>(
*Fluxbox::instance(), *Fluxbox::instance(),
&Fluxbox::save_rc)); &Fluxbox::save_rc));
for (size_t i=0; i < 6; ++i) { for (size_t i=0; i < 6; ++i) {
// TODO: fetch nls string // TODO: fetch nls string
if (save_rc) { if (save_rc) {
insert(new LayerMenuItem<ItemType>( insert(new LayerMenuItem<ItemType>(layer_menuitems[i].default_str,
layer_menuitems[i].default_str,
m_object, layer_menuitems[i].layernum, saverc_cmd)); m_object, layer_menuitems[i].layernum, saverc_cmd));
} else { } else {
insert(new LayerMenuItem<ItemType>( insert(new LayerMenuItem<ItemType>(layer_menuitems[i].default_str,
layer_menuitems[i].default_str,
m_object, layer_menuitems[i].layernum)); m_object, layer_menuitems[i].layernum));
} }
} }

View file

@ -21,7 +21,7 @@
// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER // FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
// DEALINGS IN THE SOFTWARE. // DEALINGS IN THE SOFTWARE.
// $Id: Remember.cc,v 1.30 2003/11/17 00:20:54 fluxgen Exp $ // $Id: Remember.cc,v 1.31 2003/12/10 23:08:03 fluxgen Exp $
#include "Remember.hh" #include "Remember.hh"
#include "ClientPattern.hh" #include "ClientPattern.hh"
@ -109,11 +109,7 @@ private:
FbTk::Menu *createRememberMenu(Remember &remember, FluxboxWindow &win, bool enabled) { FbTk::Menu *createRememberMenu(Remember &remember, FluxboxWindow &win, bool enabled) {
// each fluxboxwindow has its own windowmenu // each fluxboxwindow has its own windowmenu
// so we also create a remember menu just for it... // so we also create a remember menu just for it...
BScreen &screen = win.screen(); FbTk::Menu *menu = win.screen().createMenu("");
FbTk::Menu *menu = new FbMenu(*screen.menuTheme(),
screen.screenNumber(),
screen.imageControl(),
*screen.layerManager().getLayer(Fluxbox::instance()->getMenuLayer()));
// if enabled, then we want this to be a unavailable menu // if enabled, then we want this to be a unavailable menu
if (!enabled) { if (!enabled) {
@ -141,8 +137,6 @@ FbTk::Menu *createRememberMenu(Remember &remember, FluxboxWindow &win, bool enab
Remember::REM_SHADEDSTATE)); Remember::REM_SHADEDSTATE));
menu->insert(new RememberMenuItem("Layer", remember, win, menu->insert(new RememberMenuItem("Layer", remember, win,
Remember::REM_LAYER)); Remember::REM_LAYER));
// menu->insert(new RememberMenuItem("Tab", remember, win,
// Remember::REM_TABSTATE));
menu->insert(new RememberMenuItem("Save on close", remember, win, menu->insert(new RememberMenuItem("Save on close", remember, win,
Remember::REM_SAVEONCLOSE)); Remember::REM_SAVEONCLOSE));

View file

@ -22,7 +22,7 @@
// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER // FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
// DEALINGS IN THE SOFTWARE. // DEALINGS IN THE SOFTWARE.
// $Id: Screen.cc,v 1.246 2003/12/10 22:28:07 fluxgen Exp $ // $Id: Screen.cc,v 1.247 2003/12/10 23:08:03 fluxgen Exp $
#include "Screen.hh" #include "Screen.hh"
@ -133,17 +133,6 @@ int anotherWMRunning(Display *display, XErrorEvent *) {
return -1; return -1;
} }
FbTk::Menu *createMenuFromScreen(BScreen &screen, const char *label = 0) {
FbTk::Menu *menu = new FbMenu(*screen.menuTheme(),
screen.screenNumber(),
screen.imageControl(),
*screen.layerManager().getLayer(Fluxbox::instance()->getMenuLayer()));
if (label)
menu->setLabel(label);
return menu;
}
class FocusModelMenuItem : public FbTk::MenuItem { class FocusModelMenuItem : public FbTk::MenuItem {
public: public:
FocusModelMenuItem(const char *label, BScreen &screen, FocusModelMenuItem(const char *label, BScreen &screen,
@ -353,10 +342,10 @@ BScreen::BScreen(FbTk::ResourceManager &rm,
// setup workspaces and workspace menu // setup workspaces and workspace menu
workspacemenu.reset(createMenuFromScreen(*this)); workspacemenu.reset(createMenu(""));
workspacemenu->setInternalMenu(); workspacemenu->setInternalMenu();
//!! TODO: NLS //!! TODO: NLS
m_iconmenu.reset(createMenuFromScreen(*this, "Icons")); m_iconmenu.reset(createMenu("Icons"));
m_iconmenu->setInternalMenu(); m_iconmenu->setInternalMenu();
if (*resource.workspaces != 0) { if (*resource.workspaces != 0) {
@ -392,7 +381,7 @@ BScreen::BScreen(FbTk::ResourceManager &rm,
fluxbox->load_rc(*this); fluxbox->load_rc(*this);
// TODO: nls // TODO: nls
m_configmenu.reset(createMenuFromScreen(*this, "Configuration")); m_configmenu.reset(createMenu("Configuration"));
setupConfigmenu(*m_configmenu.get()); setupConfigmenu(*m_configmenu.get());
m_configmenu->setInternalMenu(); m_configmenu->setInternalMenu();
@ -569,6 +558,16 @@ void BScreen::update(FbTk::Subject *subj) {
renderGeomWindow(); renderGeomWindow();
} }
FbTk::Menu *BScreen::createMenu(const std::string &label) {
FbTk::Menu *menu = new FbMenu(*menuTheme(),
imageControl(),
*layerManager().getLayer(Fluxbox::instance()->getMenuLayer()));
if (!label.empty())
menu->setLabel(label.c_str());
return menu;
}
void BScreen::reconfigure() { void BScreen::reconfigure() {
m_menutheme->setAlpha(*resource.menu_alpha); m_menutheme->setAlpha(*resource.menu_alpha);
Fluxbox::instance()->loadRootCommand(*this); Fluxbox::instance()->loadRootCommand(*this);
@ -1548,7 +1547,7 @@ void BScreen::initMenu() {
m_rootmenu_list.clear(); m_rootmenu_list.clear();
} else } else
m_rootmenu.reset(createMenuFromScreen(*this)); m_rootmenu.reset(createMenu(""));
bool defaultMenu = true; bool defaultMenu = true;
Fluxbox * const fb = Fluxbox::instance(); Fluxbox * const fb = Fluxbox::instance();
@ -1759,7 +1758,7 @@ bool BScreen::parseMenuFile(ifstream &file, FbTk::Menu &menu, int &row) {
"no menu label defined\n")); "no menu label defined\n"));
cerr<<"Row: "<<row<<endl; cerr<<"Row: "<<row<<endl;
} else { } else {
FbTk::Menu *submenu = createMenuFromScreen(*this); FbTk::Menu *submenu = createMenu("");
if (str_cmd.size()) if (str_cmd.size())
submenu->setLabel(str_cmd.c_str()); submenu->setLabel(str_cmd.c_str());
@ -1873,7 +1872,7 @@ void BScreen::setupConfigmenu(FbTk::Menu &menu) {
// be deleted toghether with the parent // be deleted toghether with the parent
const char *focusmenu_label = i18n->getMessage(ConfigmenuSet, ConfigmenuFocusModel, const char *focusmenu_label = i18n->getMessage(ConfigmenuSet, ConfigmenuFocusModel,
"Focus Model"); "Focus Model");
FbTk::Menu *focus_menu = createMenuFromScreen(*this, focusmenu_label); FbTk::Menu *focus_menu = createMenu(focusmenu_label ? focusmenu_label : "");
focus_menu->insert(new FocusModelMenuItem(i18n->getMessage(ConfigmenuSet, focus_menu->insert(new FocusModelMenuItem(i18n->getMessage(ConfigmenuSet,
ConfigmenuClickToFocus, ConfigmenuClickToFocus,

View file

@ -22,7 +22,7 @@
// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER // FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
// DEALINGS IN THE SOFTWARE. // DEALINGS IN THE SOFTWARE.
// $Id: Screen.hh,v 1.125 2003/09/29 12:53:58 rathnor Exp $ // $Id: Screen.hh,v 1.126 2003/12/10 23:08:03 fluxgen Exp $
#ifndef SCREEN_HH #ifndef SCREEN_HH
#define SCREEN_HH #define SCREEN_HH
@ -112,6 +112,8 @@ public:
const FbTk::Menu *getWorkspacemenu() const { return workspacemenu.get(); } const FbTk::Menu *getWorkspacemenu() const { return workspacemenu.get(); }
FbTk::Menu *getWorkspacemenu() { return workspacemenu.get(); } FbTk::Menu *getWorkspacemenu() { return workspacemenu.get(); }
unsigned int currentWorkspaceID() const; unsigned int currentWorkspaceID() const;
Pixmap rootPixmap() const; Pixmap rootPixmap() const;
/* /*
@ -161,6 +163,8 @@ public:
void update(FbTk::Subject *subj); void update(FbTk::Subject *subj);
FbTk::Menu *createMenu(const std::string &label);
/// @return the resource value of number of workspace /// @return the resource value of number of workspace
inline int getNumberOfWorkspaces() const { return *resource.workspaces; } inline int getNumberOfWorkspaces() const { return *resource.workspaces; }

View file

@ -20,7 +20,7 @@
// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER // FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
// DEALINGS IN THE SOFTWARE. // DEALINGS IN THE SOFTWARE.
// $Id: SendToMenu.cc,v 1.4 2003/12/04 00:08:55 fluxgen Exp $ // $Id: SendToMenu.cc,v 1.5 2003/12/10 23:08:03 fluxgen Exp $
#include "SendToMenu.hh" #include "SendToMenu.hh"
@ -45,7 +45,7 @@ private:
}; };
SendToMenu::SendToMenu(FluxboxWindow &win): SendToMenu::SendToMenu(FluxboxWindow &win):
FbMenu(*win.screen().menuTheme(), win.screen().screenNumber(), FbMenu(*win.screen().menuTheme(),
win.screen().imageControl(), win.screen().imageControl(),
*win.screen().layerManager().getLayer(Fluxbox::instance()->getMenuLayer())), *win.screen().layerManager().getLayer(Fluxbox::instance()->getMenuLayer())),
m_win(win) { m_win(win) {

View file

@ -22,7 +22,7 @@
// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER // FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
// DEALINGS IN THE SOFTWARE. // DEALINGS IN THE SOFTWARE.
// $Id: Slit.cc,v 1.82 2003/12/07 16:39:43 fluxgen Exp $ // $Id: Slit.cc,v 1.83 2003/12/10 23:08:03 fluxgen Exp $
#include "Slit.hh" #include "Slit.hh"
@ -236,19 +236,15 @@ Slit::Slit(BScreen &scr, FbTk::XLayer &layer, const char *filename)
: m_hidden(false), : m_hidden(false),
m_screen(scr), m_screen(scr),
m_slitmenu(*scr.menuTheme(), m_slitmenu(*scr.menuTheme(),
scr.screenNumber(),
scr.imageControl(), scr.imageControl(),
*scr.layerManager().getLayer(Fluxbox::instance()->getMenuLayer())), *scr.layerManager().getLayer(Fluxbox::instance()->getMenuLayer())),
m_placement_menu(*scr.menuTheme(), m_placement_menu(*scr.menuTheme(),
scr.screenNumber(),
scr.imageControl(), scr.imageControl(),
*scr.layerManager().getLayer(Fluxbox::instance()->getMenuLayer())), *scr.layerManager().getLayer(Fluxbox::instance()->getMenuLayer())),
m_clientlist_menu(*scr.menuTheme(), m_clientlist_menu(*scr.menuTheme(),
scr.screenNumber(),
scr.imageControl(), scr.imageControl(),
*scr.layerManager().getLayer(Fluxbox::instance()->getMenuLayer())), *scr.layerManager().getLayer(Fluxbox::instance()->getMenuLayer())),
m_layermenu(new LayerMenu<Slit>(*scr.menuTheme(), m_layermenu(new LayerMenu<Slit>(*scr.menuTheme(),
scr.screenNumber(),
scr.imageControl(), scr.imageControl(),
*scr.layerManager().getLayer(Fluxbox::instance()->getMenuLayer()), *scr.layerManager().getLayer(Fluxbox::instance()->getMenuLayer()),
this, this,

View file

@ -22,7 +22,7 @@
// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER // FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
// DEALINGS IN THE SOFTWARE. // DEALINGS IN THE SOFTWARE.
// $Id: Toolbar.cc,v 1.130 2003/12/08 17:29:44 fluxgen Exp $ // $Id: Toolbar.cc,v 1.131 2003/12/10 23:08:03 fluxgen Exp $
#include "Toolbar.hh" #include "Toolbar.hh"
@ -192,16 +192,15 @@ Toolbar::Toolbar(BScreen &scrn, FbTk::XLayer &layer, size_t width):
m_window_pm(0), m_window_pm(0),
m_screen(scrn), m_screen(scrn),
m_layermenu(*scrn.menuTheme(), m_layermenu(*scrn.menuTheme(),
scrn.screenNumber(),
scrn.imageControl(), scrn.imageControl(),
*scrn.layerManager().getLayer(Fluxbox::instance()->getMenuLayer()), *scrn.layerManager().getLayer(Fluxbox::instance()->getMenuLayer()),
this, this,
true), true),
m_placementmenu(*scrn.menuTheme(), m_placementmenu(*scrn.menuTheme(),
scrn.screenNumber(), scrn.imageControl(), scrn.imageControl(),
*scrn.layerManager().getLayer(Fluxbox::instance()->getMenuLayer())), *scrn.layerManager().getLayer(Fluxbox::instance()->getMenuLayer())),
m_toolbarmenu(*scrn.menuTheme(), m_toolbarmenu(*scrn.menuTheme(),
scrn.screenNumber(), scrn.imageControl(), scrn.imageControl(),
*scrn.layerManager().getLayer(Fluxbox::instance()->getMenuLayer())), *scrn.layerManager().getLayer(Fluxbox::instance()->getMenuLayer())),
m_theme(scrn.screenNumber()), m_theme(scrn.screenNumber()),
m_layeritem(frame.window, layer), m_layeritem(frame.window, layer),

View file

@ -22,7 +22,7 @@
// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER // FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
// DEALINGS IN THE SOFTWARE. // DEALINGS IN THE SOFTWARE.
// $Id: Window.cc,v 1.249 2003/12/10 22:28:07 fluxgen Exp $ // $Id: Window.cc,v 1.250 2003/12/10 23:08:03 fluxgen Exp $
#include "Window.hh" #include "Window.hh"
@ -264,7 +264,7 @@ FluxboxWindow::FluxboxWindow(WinClient &client, BScreen &scr, FbWinFrameTheme &t
maximized(MAX_NONE), maximized(MAX_NONE),
m_screen(scr), m_screen(scr),
display(FbTk::App::instance()->display()), display(FbTk::App::instance()->display()),
m_windowmenu(*scr.menuTheme(), scr.screenNumber(), scr.imageControl(), m_windowmenu(*scr.menuTheme(), scr.imageControl(),
*scr.layerManager().getLayer(Fluxbox::instance()->getMenuLayer())), *scr.layerManager().getLayer(Fluxbox::instance()->getMenuLayer())),
m_old_decoration(DECOR_NORMAL), m_old_decoration(DECOR_NORMAL),
m_client(&client), m_client(&client),
@ -541,7 +541,6 @@ void FluxboxWindow::init() {
addExtraMenu("Layer...", addExtraMenu("Layer...",
new LayerMenu<FluxboxWindow>(*screen().menuTheme(), new LayerMenu<FluxboxWindow>(*screen().menuTheme(),
screen().screenNumber(),
screen().imageControl(), screen().imageControl(),
*screen().layerManager().getLayer(Fluxbox::instance()->getMenuLayer()), *screen().layerManager().getLayer(Fluxbox::instance()->getMenuLayer()),
this, this,

View file

@ -22,7 +22,7 @@
// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER // FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
// DEALINGS IN THE SOFTWARE. // DEALINGS IN THE SOFTWARE.
// $Id: Workspace.cc,v 1.85 2003/12/07 17:49:07 fluxgen Exp $ // $Id: Workspace.cc,v 1.86 2003/12/10 23:08:03 fluxgen Exp $
#include "Workspace.hh" #include "Workspace.hh"
@ -119,7 +119,7 @@ Workspace::Workspace(BScreen &scrn, FbTk::MultLayers &layermanager,
const std::string &name, unsigned int i): const std::string &name, unsigned int i):
m_screen(scrn), m_screen(scrn),
m_lastfocus(0), m_lastfocus(0),
m_clientmenu(*scrn.menuTheme(), scrn.screenNumber(), scrn.imageControl(), m_clientmenu(*scrn.menuTheme(), scrn.imageControl(),
*scrn.layerManager().getLayer(Fluxbox::instance()->getMenuLayer())), *scrn.layerManager().getLayer(Fluxbox::instance()->getMenuLayer())),
m_layermanager(layermanager), m_layermanager(layermanager),
m_name(name), m_name(name),

View file

@ -20,7 +20,7 @@
// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER // FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
// DEALINGS IN THE SOFTWARE. // DEALINGS IN THE SOFTWARE.
// $Id: Xinerama.hh,v 1.6 2003/12/03 22:12:26 fluxgen Exp $ // $Id: Xinerama.hh,v 1.7 2003/12/10 23:08:03 fluxgen Exp $
#ifndef XINERAMA_HH #ifndef XINERAMA_HH
#define XINERAMA_HH #define XINERAMA_HH
@ -74,7 +74,7 @@ private:
template <typename ItemType> template <typename ItemType>
XineramaHeadMenu<ItemType>::XineramaHeadMenu(MenuTheme &tm, BScreen &screen, FbTk::ImageControl &imgctrl, XineramaHeadMenu<ItemType>::XineramaHeadMenu(MenuTheme &tm, BScreen &screen, FbTk::ImageControl &imgctrl,
FbTk::XLayer &layer, ItemType &item, const char * title = 0): FbTk::XLayer &layer, ItemType &item, const char * title = 0):
FbMenu(tm, screen.screenNumber(), imgctrl, layer), FbMenu(tm, imgctrl, layer),
m_object(item) m_object(item)
{ {
if (title) if (title)