using MenuCreator to create window menu
This commit is contained in:
parent
1f88db4fd6
commit
49162b5bf5
1 changed files with 35 additions and 56 deletions
|
@ -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.284 2004/04/30 13:48:58 rathnor Exp $
|
// $Id: Window.cc,v 1.285 2004/05/02 21:08:28 fluxgen Exp $
|
||||||
|
|
||||||
#include "Window.hh"
|
#include "Window.hh"
|
||||||
|
|
||||||
|
@ -31,23 +31,20 @@
|
||||||
#include "fluxbox.hh"
|
#include "fluxbox.hh"
|
||||||
#include "Screen.hh"
|
#include "Screen.hh"
|
||||||
#include "FbWinFrameTheme.hh"
|
#include "FbWinFrameTheme.hh"
|
||||||
#include "MenuTheme.hh"
|
|
||||||
#include "FbAtoms.hh"
|
#include "FbAtoms.hh"
|
||||||
#include "RootTheme.hh"
|
#include "RootTheme.hh"
|
||||||
#include "Workspace.hh"
|
#include "Workspace.hh"
|
||||||
#include "LayerMenu.hh"
|
|
||||||
#include "FbWinFrame.hh"
|
#include "FbWinFrame.hh"
|
||||||
#include "WinButton.hh"
|
#include "WinButton.hh"
|
||||||
#include "WinButtonTheme.hh"
|
#include "WinButtonTheme.hh"
|
||||||
#include "SendToMenu.hh"
|
|
||||||
#include "Remember.hh"
|
#include "Remember.hh"
|
||||||
|
#include "MenuCreator.hh"
|
||||||
|
|
||||||
#include "FbTk/StringUtil.hh"
|
|
||||||
#include "FbTk/TextButton.hh"
|
#include "FbTk/TextButton.hh"
|
||||||
#include "FbTk/Compose.hh"
|
#include "FbTk/Compose.hh"
|
||||||
#include "FbTk/EventManager.hh"
|
#include "FbTk/EventManager.hh"
|
||||||
#include "FbTk/MultiButtonMenuItem.hh"
|
|
||||||
#include "FbTk/KeyUtil.hh"
|
#include "FbTk/KeyUtil.hh"
|
||||||
|
#include "FbTk/SimpleCommand.hh"
|
||||||
|
|
||||||
#ifdef HAVE_CONFIG_H
|
#ifdef HAVE_CONFIG_H
|
||||||
#include "config.h"
|
#include "config.h"
|
||||||
|
@ -250,10 +247,6 @@ private:
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|
||||||
template <>
|
|
||||||
void LayerMenuItem<FluxboxWindow>::click(int button, int time) {
|
|
||||||
m_object->moveToLayer(m_layernum);
|
|
||||||
}
|
|
||||||
|
|
||||||
int FluxboxWindow::s_num_grabs = 0;
|
int FluxboxWindow::s_num_grabs = 0;
|
||||||
|
|
||||||
|
@ -275,8 +268,7 @@ FluxboxWindow::FluxboxWindow(WinClient &client, FbWinFrameTheme &tm,
|
||||||
m_attaching_tab(0),
|
m_attaching_tab(0),
|
||||||
m_screen(client.screen()),
|
m_screen(client.screen()),
|
||||||
display(FbTk::App::instance()->display()),
|
display(FbTk::App::instance()->display()),
|
||||||
m_windowmenu(client.screen().menuTheme(), client.screen().imageControl(),
|
m_windowmenu(MenuCreator::createMenu("", client.screenNumber())),
|
||||||
*client.screen().layerManager().getLayer(Fluxbox::instance()->getMenuLayer())),
|
|
||||||
m_button_grab_x(0), m_button_grab_y(0),
|
m_button_grab_x(0), m_button_grab_y(0),
|
||||||
m_last_move_x(0), m_last_move_y(0),
|
m_last_move_x(0), m_last_move_y(0),
|
||||||
m_last_resize_h(1), m_last_resize_w(1),
|
m_last_resize_h(1), m_last_resize_w(1),
|
||||||
|
@ -568,14 +560,14 @@ void FluxboxWindow::init() {
|
||||||
setState(m_current_state);
|
setState(m_current_state);
|
||||||
|
|
||||||
// add extra menus
|
// add extra menus
|
||||||
addExtraMenu("Send To...", new SendToMenu(*this));
|
/* addExtraMenu("Send To...", new SendToMenu(*this));
|
||||||
addExtraMenu("Layer...",
|
addExtraMenu("Layer...",
|
||||||
new LayerMenu<FluxboxWindow>(screen().menuTheme(),
|
new LayerMenu<FluxboxWindow>(screen().menuTheme(),
|
||||||
screen().imageControl(),
|
screen().imageControl(),
|
||||||
*screen().layerManager().getLayer(Fluxbox::instance()->getMenuLayer()),
|
*screen().layerManager().getLayer(Fluxbox::instance()->getMenuLayer()),
|
||||||
this,
|
this,
|
||||||
false));
|
false));
|
||||||
|
*/
|
||||||
// the layermenu will get deleted as an extra menu
|
// the layermenu will get deleted as an extra menu
|
||||||
// don't call setupWindow here as the addExtraMenu call should
|
// don't call setupWindow here as the addExtraMenu call should
|
||||||
|
|
||||||
|
@ -1020,7 +1012,7 @@ void FluxboxWindow::reconfigure() {
|
||||||
|
|
||||||
frame().reconfigure();
|
frame().reconfigure();
|
||||||
|
|
||||||
m_windowmenu.reconfigure();
|
menu().reconfigure();
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1277,7 +1269,7 @@ void FluxboxWindow::hide() {
|
||||||
#ifdef DEBUG
|
#ifdef DEBUG
|
||||||
cerr<<__FILE__<<"("<<__FUNCTION__<<")["<<this<<"]"<<endl;
|
cerr<<__FILE__<<"("<<__FUNCTION__<<")["<<this<<"]"<<endl;
|
||||||
#endif // DEBUG
|
#endif // DEBUG
|
||||||
m_windowmenu.hide();
|
menu().hide();
|
||||||
frame().hide();
|
frame().hide();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1390,7 +1382,7 @@ void FluxboxWindow::withdraw() {
|
||||||
|
|
||||||
frame().hide();
|
frame().hide();
|
||||||
|
|
||||||
m_windowmenu.hide();
|
menu().hide();
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -1969,19 +1961,19 @@ void FluxboxWindow::showMenu(int menu_x, int menu_y) {
|
||||||
int head = screen().getHead(menu_x, menu_y);
|
int head = screen().getHead(menu_x, menu_y);
|
||||||
|
|
||||||
// but not under screen
|
// but not under screen
|
||||||
if (menu_y + m_windowmenu.height() >= screen().maxBottom(head))
|
if (menu_y + menu().height() >= screen().maxBottom(head))
|
||||||
menu_y = screen().maxBottom(head) - m_windowmenu.height() - 1 - m_windowmenu.fbwindow().borderWidth();
|
menu_y = screen().maxBottom(head) - menu().height() - 1 - menu().fbwindow().borderWidth();
|
||||||
|
|
||||||
if (menu_x < static_cast<signed>(screen().maxLeft(head)))
|
if (menu_x < static_cast<signed>(screen().maxLeft(head)))
|
||||||
menu_x = screen().maxLeft(head);
|
menu_x = screen().maxLeft(head);
|
||||||
else if (menu_x + static_cast<signed>(m_windowmenu.width()) >= static_cast<signed>(screen().maxRight(head)))
|
else if (menu_x + static_cast<signed>(menu().width()) >= static_cast<signed>(screen().maxRight(head)))
|
||||||
menu_x = screen().maxRight(head) - m_windowmenu.width() - 1;
|
menu_x = screen().maxRight(head) - menu().width() - 1;
|
||||||
|
|
||||||
|
|
||||||
m_windowmenu.move(menu_x, menu_y);
|
menu().move(menu_x, menu_y);
|
||||||
m_windowmenu.show();
|
menu().show();
|
||||||
m_windowmenu.raise();
|
menu().raise();
|
||||||
m_windowmenu.grabInputFocus();
|
menu().grabInputFocus();
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -1989,8 +1981,8 @@ void FluxboxWindow::showMenu(int menu_x, int menu_y) {
|
||||||
if it's already visible it'll be hidden
|
if it's already visible it'll be hidden
|
||||||
*/
|
*/
|
||||||
void FluxboxWindow::popupMenu() {
|
void FluxboxWindow::popupMenu() {
|
||||||
if (m_windowmenu.isVisible()) {
|
if (menu().isVisible()) {
|
||||||
m_windowmenu.hide();
|
menu().hide();
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -2838,8 +2830,8 @@ void FluxboxWindow::startMoving(Window win) {
|
||||||
ButtonReleaseMask, GrabModeAsync, GrabModeAsync,
|
ButtonReleaseMask, GrabModeAsync, GrabModeAsync,
|
||||||
screen().rootWindow().window(), frame().theme().moveCursor(), CurrentTime);
|
screen().rootWindow().window(), frame().theme().moveCursor(), CurrentTime);
|
||||||
|
|
||||||
if (m_windowmenu.isVisible())
|
if (menu().isVisible())
|
||||||
m_windowmenu.hide();
|
menu().hide();
|
||||||
|
|
||||||
fluxbox->maskWindowEvents(screen().rootWindow().window(), this);
|
fluxbox->maskWindowEvents(screen().rootWindow().window(), this);
|
||||||
|
|
||||||
|
@ -3504,35 +3496,22 @@ void FluxboxWindow::setupWindow() {
|
||||||
menu().removeAll(); // clear old items
|
menu().removeAll(); // clear old items
|
||||||
menu().disableTitle(); // not titlebar
|
menu().disableTitle(); // not titlebar
|
||||||
|
|
||||||
// set new menu items
|
if (!screen().windowMenuFilename().empty()) {
|
||||||
menu().insert("Shade", shade_cmd);
|
MenuCreator::createFromFile(screen().windowMenuFilename(), menu(), *this);
|
||||||
menu().insert("Stick", stick_cmd);
|
} else {
|
||||||
// create maximize item with:
|
MenuCreator::createWindowMenuItem("shade", "", menu(), *this);
|
||||||
// button1: Maximize normal
|
MenuCreator::createWindowMenuItem("stick", "", menu(), *this);
|
||||||
// button2: Maximize Vertical
|
MenuCreator::createWindowMenuItem("maximize", "", menu(), *this);
|
||||||
// button3: Maximize Horizontal
|
MenuCreator::createWindowMenuItem("iconify", "", menu(), *this);
|
||||||
FbTk::MultiButtonMenuItem *maximize_item = new FbTk::MultiButtonMenuItem(3, "Maximize");
|
MenuCreator::createWindowMenuItem("raise", "", menu(), *this);
|
||||||
maximize_item->setCommand(1, maximize_cmd);
|
MenuCreator::createWindowMenuItem("lower", "", menu(), *this);
|
||||||
maximize_item->setCommand(2, maximize_vert_cmd);
|
MenuCreator::createWindowMenuItem("sendto", "", menu(), *this);
|
||||||
maximize_item->setCommand(3, maximize_horiz_cmd);
|
MenuCreator::createWindowMenuItem("layer", "", menu(), *this);
|
||||||
menu().insert(maximize_item);
|
MenuCreator::createWindowMenuItem("extramenus", "", menu(), *this);
|
||||||
menu().insert("Iconify", iconify_cmd);
|
MenuCreator::createWindowMenuItem("separator", "", menu(), *this);
|
||||||
menu().insert("Raise", raise_cmd);
|
MenuCreator::createWindowMenuItem("close", "", menu(), *this);
|
||||||
menu().insert("Lower", lower_cmd);
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
ExtraMenus::iterator it = m_extramenus.begin();
|
|
||||||
ExtraMenus::iterator it_end = m_extramenus.end();
|
|
||||||
for (; it != it_end; ++it) {
|
|
||||||
it->second->disableTitle(); // be sure there is no title
|
|
||||||
menu().insert(it->first, it->second);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
menu().insert("---");
|
|
||||||
menu().insert("Close", close_cmd);
|
|
||||||
|
|
||||||
menu().reconfigure(); // update graphics
|
menu().reconfigure(); // update graphics
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue