Index: src/IconButton.cc =================================================================== RCS file: /cvsroot/fluxbox/fluxbox/src/IconButton.cc,v retrieving revision 1.22 diff -a -b -B -p -u -r1.22 IconButton.cc --- src/IconButton.cc 15 Jul 2004 14:20:19 -0000 1.22 +++ src/IconButton.cc 4 Aug 2004 09:39:46 -0000 @@ -49,6 +49,8 @@ #include #endif // SHAPE +typedef FbTk::RefCount RefCmd; + namespace { class ShowMenu: public FbTk::Command { @@ -81,6 +83,21 @@ private: FluxboxWindow &m_win; }; +// simple forwarding of wheeling, but only +// if desktopwheeling is enabled +class WheelWorkspaceCmd : public FbTk::Command { +public: + explicit WheelWorkspaceCmd(FluxboxWindow &win, FbTk::Command *cmd):m_win(win), + m_cmd(cmd){ } + void execute() { + if(m_win.screen().isDesktopWheeling()) { + m_cmd->execute(); + } + } +private: + FluxboxWindow &m_win; + RefCmd m_cmd; +}; } // end anonymous namespace @@ -94,22 +111,24 @@ IconButton::IconButton(const FbTk::FbWin ExposureMask | ButtonPressMask | ButtonReleaseMask), m_use_pixmap(true) { - typedef FbTk::RefCount RefCmd; - RefCmd hidemenus(new FbTk::SimpleCommand(win.screen(), &BScreen::hideMenus)); - RefCmd next_workspace(CommandParser::instance().parseLine("nextworkspace")); - RefCmd prev_workspace(CommandParser::instance().parseLine("prevworkspace")); + RefCmd next_workspace(new ::WheelWorkspaceCmd(m_win, + CommandParser::instance().parseLine("nextworkspace"))); + RefCmd prev_workspace(new ::WheelWorkspaceCmd(m_win, + CommandParser::instance().parseLine("prevworkspace"))); //!! TODO: There're some issues with MacroCommand when // this object dies when the last macrocommand is executed (focused cmd) // In iconbar mode Icons + // RefCmd hidemenus(new FbTk::SimpleCommand(win.screen(), &BScreen::hideMenus)); // FbTk::MacroCommand *focus_macro = new FbTk::MacroCommand(); // focus_macro->add(hidemenus); // focus_macro->add(focus); - FbTk::RefCount focus_cmd(new ::FocusCommand(m_win)); - FbTk::RefCount menu_cmd(new ::ShowMenu(m_win)); + RefCmd focus_cmd(new ::FocusCommand(m_win)); + RefCmd menu_cmd(new ::ShowMenu(m_win)); setOnClick(focus_cmd, 1); setOnClick(menu_cmd, 3); setOnClick(next_workspace, 4); setOnClick(prev_workspace, 5); + m_win.hintSig().attach(this); FbTk::EventManager::instance()->add(*this, m_icon_window);