diff options
author | fluxgen <fluxgen> | 2004-05-02 21:08:28 (GMT) |
---|---|---|
committer | fluxgen <fluxgen> | 2004-05-02 21:08:28 (GMT) |
commit | 49162b5bf5159b512eaf1fbe91cc6c5587fbd491 (patch) | |
tree | cd2baa9806a7108843515f83c2e6eff48b2c5860 /src/Window.cc | |
parent | 1f88db4fd64fb918ed5b6f0694b8ebb6dedc5f26 (diff) | |
download | fluxbox_pavel-49162b5bf5159b512eaf1fbe91cc6c5587fbd491.zip fluxbox_pavel-49162b5bf5159b512eaf1fbe91cc6c5587fbd491.tar.bz2 |
using MenuCreator to create window menu
Diffstat (limited to 'src/Window.cc')
-rw-r--r-- | src/Window.cc | 91 |
1 files changed, 35 insertions, 56 deletions
diff --git a/src/Window.cc b/src/Window.cc index 8c6e07c..6630226 100644 --- a/src/Window.cc +++ b/src/Window.cc | |||
@@ -22,7 +22,7 @@ | |||
22 | // FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER | 22 | // FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER |
23 | // DEALINGS IN THE SOFTWARE. | 23 | // DEALINGS IN THE SOFTWARE. |
24 | 24 | ||
25 | // $Id: Window.cc,v 1.284 2004/04/30 13:48:58 rathnor Exp $ | 25 | // $Id: Window.cc,v 1.285 2004/05/02 21:08:28 fluxgen Exp $ |
26 | 26 | ||
27 | #include "Window.hh" | 27 | #include "Window.hh" |
28 | 28 | ||
@@ -31,23 +31,20 @@ | |||
31 | #include "fluxbox.hh" | 31 | #include "fluxbox.hh" |
32 | #include "Screen.hh" | 32 | #include "Screen.hh" |
33 | #include "FbWinFrameTheme.hh" | 33 | #include "FbWinFrameTheme.hh" |
34 | #include "MenuTheme.hh" | ||
35 | #include "FbAtoms.hh" | 34 | #include "FbAtoms.hh" |
36 | #include "RootTheme.hh" | 35 | #include "RootTheme.hh" |
37 | #include "Workspace.hh" | 36 | #include "Workspace.hh" |
38 | #include "LayerMenu.hh" | ||
39 | #include "FbWinFrame.hh" | 37 | #include "FbWinFrame.hh" |
40 | #include "WinButton.hh" | 38 | #include "WinButton.hh" |
41 | #include "WinButtonTheme.hh" | 39 | #include "WinButtonTheme.hh" |
42 | #include "SendToMenu.hh" | ||
43 | #include "Remember.hh" | 40 | #include "Remember.hh" |
41 | #include "MenuCreator.hh" | ||
44 | 42 | ||
45 | #include "FbTk/StringUtil.hh" | ||
46 | #include "FbTk/TextButton.hh" | 43 | #include "FbTk/TextButton.hh" |
47 | #include "FbTk/Compose.hh" | 44 | #include "FbTk/Compose.hh" |
48 | #include "FbTk/EventManager.hh" | 45 | #include "FbTk/EventManager.hh" |
49 | #include "FbTk/MultiButtonMenuItem.hh" | ||
50 | #include "FbTk/KeyUtil.hh" | 46 | #include "FbTk/KeyUtil.hh" |
47 | #include "FbTk/SimpleCommand.hh" | ||
51 | 48 | ||
52 | #ifdef HAVE_CONFIG_H | 49 | #ifdef HAVE_CONFIG_H |
53 | #include "config.h" | 50 | #include "config.h" |
@@ -250,10 +247,6 @@ private: | |||
250 | 247 | ||
251 | }; | 248 | }; |
252 | 249 | ||
253 | template <> | ||
254 | void LayerMenuItem<FluxboxWindow>::click(int button, int time) { | ||
255 | m_object->moveToLayer(m_layernum); | ||
256 | } | ||
257 | 250 | ||
258 | int FluxboxWindow::s_num_grabs = 0; | 251 | int FluxboxWindow::s_num_grabs = 0; |
259 | 252 | ||
@@ -275,8 +268,7 @@ FluxboxWindow::FluxboxWindow(WinClient &client, FbWinFrameTheme &tm, | |||
275 | m_attaching_tab(0), | 268 | m_attaching_tab(0), |
276 | m_screen(client.screen()), | 269 | m_screen(client.screen()), |
277 | display(FbTk::App::instance()->display()), | 270 | display(FbTk::App::instance()->display()), |
278 | m_windowmenu(client.screen().menuTheme(), client.screen().imageControl(), | 271 | m_windowmenu(MenuCreator::createMenu("", client.screenNumber())), |
279 | *client.screen().layerManager().getLayer(Fluxbox::instance()->getMenuLayer())), | ||
280 | m_button_grab_x(0), m_button_grab_y(0), | 272 | m_button_grab_x(0), m_button_grab_y(0), |
281 | m_last_move_x(0), m_last_move_y(0), | 273 | m_last_move_x(0), m_last_move_y(0), |
282 | m_last_resize_h(1), m_last_resize_w(1), | 274 | m_last_resize_h(1), m_last_resize_w(1), |
@@ -568,14 +560,14 @@ void FluxboxWindow::init() { | |||
568 | setState(m_current_state); | 560 | setState(m_current_state); |
569 | 561 | ||
570 | // add extra menus | 562 | // add extra menus |
571 | addExtraMenu("Send To...", new SendToMenu(*this)); | 563 | /* addExtraMenu("Send To...", new SendToMenu(*this)); |
572 | addExtraMenu("Layer...", | 564 | addExtraMenu("Layer...", |
573 | new LayerMenu<FluxboxWindow>(screen().menuTheme(), | 565 | new LayerMenu<FluxboxWindow>(screen().menuTheme(), |
574 | screen().imageControl(), | 566 | screen().imageControl(), |
575 | *screen().layerManager().getLayer(Fluxbox::instance()->getMenuLayer()), | 567 | *screen().layerManager().getLayer(Fluxbox::instance()->getMenuLayer()), |
576 | this, | 568 | this, |
577 | false)); | 569 | false)); |
578 | 570 | */ | |
579 | // the layermenu will get deleted as an extra menu | 571 | // the layermenu will get deleted as an extra menu |
580 | // don't call setupWindow here as the addExtraMenu call should | 572 | // don't call setupWindow here as the addExtraMenu call should |
581 | 573 | ||
@@ -1020,7 +1012,7 @@ void FluxboxWindow::reconfigure() { | |||
1020 | 1012 | ||
1021 | frame().reconfigure(); | 1013 | frame().reconfigure(); |
1022 | 1014 | ||
1023 | m_windowmenu.reconfigure(); | 1015 | menu().reconfigure(); |
1024 | 1016 | ||
1025 | } | 1017 | } |
1026 | 1018 | ||
@@ -1277,7 +1269,7 @@ void FluxboxWindow::hide() { | |||
1277 | #ifdef DEBUG | 1269 | #ifdef DEBUG |
1278 | cerr<<__FILE__<<"("<<__FUNCTION__<<")["<<this<<"]"<<endl; | 1270 | cerr<<__FILE__<<"("<<__FUNCTION__<<")["<<this<<"]"<<endl; |
1279 | #endif // DEBUG | 1271 | #endif // DEBUG |
1280 | m_windowmenu.hide(); | 1272 | menu().hide(); |
1281 | frame().hide(); | 1273 | frame().hide(); |
1282 | } | 1274 | } |
1283 | 1275 | ||
@@ -1390,7 +1382,7 @@ void FluxboxWindow::withdraw() { | |||
1390 | 1382 | ||
1391 | frame().hide(); | 1383 | frame().hide(); |
1392 | 1384 | ||
1393 | m_windowmenu.hide(); | 1385 | menu().hide(); |
1394 | } | 1386 | } |
1395 | 1387 | ||
1396 | /** | 1388 | /** |
@@ -1969,19 +1961,19 @@ void FluxboxWindow::showMenu(int menu_x, int menu_y) { | |||
1969 | int head = screen().getHead(menu_x, menu_y); | 1961 | int head = screen().getHead(menu_x, menu_y); |
1970 | 1962 | ||
1971 | // but not under screen | 1963 | // but not under screen |
1972 | if (menu_y + m_windowmenu.height() >= screen().maxBottom(head)) | 1964 | if (menu_y + menu().height() >= screen().maxBottom(head)) |
1973 | menu_y = screen().maxBottom(head) - m_windowmenu.height() - 1 - m_windowmenu.fbwindow().borderWidth(); | 1965 | menu_y = screen().maxBottom(head) - menu().height() - 1 - menu().fbwindow().borderWidth(); |
1974 | 1966 | ||
1975 | if (menu_x < static_cast<signed>(screen().maxLeft(head))) | 1967 | if (menu_x < static_cast<signed>(screen().maxLeft(head))) |
1976 | menu_x = screen().maxLeft(head); | 1968 | menu_x = screen().maxLeft(head); |
1977 | else if (menu_x + static_cast<signed>(m_windowmenu.width()) >= static_cast<signed>(screen().maxRight(head))) | 1969 | else if (menu_x + static_cast<signed>(menu().width()) >= static_cast<signed>(screen().maxRight(head))) |
1978 | menu_x = screen().maxRight(head) - m_windowmenu.width() - 1; | 1970 | menu_x = screen().maxRight(head) - menu().width() - 1; |
1979 | 1971 | ||
1980 | 1972 | ||
1981 | m_windowmenu.move(menu_x, menu_y); | 1973 | menu().move(menu_x, menu_y); |
1982 | m_windowmenu.show(); | 1974 | menu().show(); |
1983 | m_windowmenu.raise(); | 1975 | menu().raise(); |
1984 | m_windowmenu.grabInputFocus(); | 1976 | menu().grabInputFocus(); |
1985 | } | 1977 | } |
1986 | 1978 | ||
1987 | /** | 1979 | /** |
@@ -1989,8 +1981,8 @@ void FluxboxWindow::showMenu(int menu_x, int menu_y) { | |||
1989 | if it's already visible it'll be hidden | 1981 | if it's already visible it'll be hidden |
1990 | */ | 1982 | */ |
1991 | void FluxboxWindow::popupMenu() { | 1983 | void FluxboxWindow::popupMenu() { |
1992 | if (m_windowmenu.isVisible()) { | 1984 | if (menu().isVisible()) { |
1993 | m_windowmenu.hide(); | 1985 | menu().hide(); |
1994 | return; | 1986 | return; |
1995 | } | 1987 | } |
1996 | 1988 | ||
@@ -2838,8 +2830,8 @@ void FluxboxWindow::startMoving(Window win) { | |||
2838 | ButtonReleaseMask, GrabModeAsync, GrabModeAsync, | 2830 | ButtonReleaseMask, GrabModeAsync, GrabModeAsync, |
2839 | screen().rootWindow().window(), frame().theme().moveCursor(), CurrentTime); | 2831 | screen().rootWindow().window(), frame().theme().moveCursor(), CurrentTime); |
2840 | 2832 | ||
2841 | if (m_windowmenu.isVisible()) | 2833 | if (menu().isVisible()) |
2842 | m_windowmenu.hide(); | 2834 | menu().hide(); |
2843 | 2835 | ||
2844 | fluxbox->maskWindowEvents(screen().rootWindow().window(), this); | 2836 | fluxbox->maskWindowEvents(screen().rootWindow().window(), this); |
2845 | 2837 | ||
@@ -3504,35 +3496,22 @@ void FluxboxWindow::setupWindow() { | |||
3504 | menu().removeAll(); // clear old items | 3496 | menu().removeAll(); // clear old items |
3505 | menu().disableTitle(); // not titlebar | 3497 | menu().disableTitle(); // not titlebar |
3506 | 3498 | ||
3507 | // set new menu items | 3499 | if (!screen().windowMenuFilename().empty()) { |
3508 | menu().insert("Shade", shade_cmd); | 3500 | MenuCreator::createFromFile(screen().windowMenuFilename(), menu(), *this); |
3509 | menu().insert("Stick", stick_cmd); | 3501 | } else { |
3510 | // create maximize item with: | 3502 | MenuCreator::createWindowMenuItem("shade", "", menu(), *this); |
3511 | // button1: Maximize normal | 3503 | MenuCreator::createWindowMenuItem("stick", "", menu(), *this); |
3512 | // button2: Maximize Vertical | 3504 | MenuCreator::createWindowMenuItem("maximize", "", menu(), *this); |
3513 | // button3: Maximize Horizontal | 3505 | MenuCreator::createWindowMenuItem("iconify", "", menu(), *this); |
3514 | FbTk::MultiButtonMenuItem *maximize_item = new FbTk::MultiButtonMenuItem(3, "Maximize"); | 3506 | MenuCreator::createWindowMenuItem("raise", "", menu(), *this); |
3515 | maximize_item->setCommand(1, maximize_cmd); | 3507 | MenuCreator::createWindowMenuItem("lower", "", menu(), *this); |
3516 | maximize_item->setCommand(2, maximize_vert_cmd); | 3508 | MenuCreator::createWindowMenuItem("sendto", "", menu(), *this); |
3517 | maximize_item->setCommand(3, maximize_horiz_cmd); | 3509 | MenuCreator::createWindowMenuItem("layer", "", menu(), *this); |
3518 | menu().insert(maximize_item); | 3510 | MenuCreator::createWindowMenuItem("extramenus", "", menu(), *this); |
3519 | menu().insert("Iconify", iconify_cmd); | 3511 | MenuCreator::createWindowMenuItem("separator", "", menu(), *this); |
3520 | menu().insert("Raise", raise_cmd); | 3512 | MenuCreator::createWindowMenuItem("close", "", menu(), *this); |
3521 | menu().insert("Lower", lower_cmd); | ||
3522 | |||
3523 | |||
3524 | |||
3525 | ExtraMenus::iterator it = m_extramenus.begin(); | ||
3526 | ExtraMenus::iterator it_end = m_extramenus.end(); | ||
3527 | for (; it != it_end; ++it) { | ||
3528 | it->second->disableTitle(); // be sure there is no title | ||
3529 | menu().insert(it->first, it->second); | ||
3530 | } | 3513 | } |
3531 | 3514 | ||
3532 | |||
3533 | menu().insert("---"); | ||
3534 | menu().insert("Close", close_cmd); | ||
3535 | |||
3536 | menu().reconfigure(); // update graphics | 3515 | menu().reconfigure(); // update graphics |
3537 | } | 3516 | } |
3538 | 3517 | ||