diff options
-rw-r--r-- | src/Screen.cc | 165 | ||||
-rw-r--r-- | src/Screen.hh | 17 |
2 files changed, 113 insertions, 69 deletions
diff --git a/src/Screen.cc b/src/Screen.cc index fa311cd..312354d 100644 --- a/src/Screen.cc +++ b/src/Screen.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: Screen.cc,v 1.96 2003/01/10 00:35:19 fluxgen Exp $ | 25 | // $Id: Screen.cc,v 1.97 2003/01/12 17:59:20 fluxgen Exp $ |
26 | 26 | ||
27 | 27 | ||
28 | #include "Screen.hh" | 28 | #include "Screen.hh" |
@@ -34,7 +34,6 @@ | |||
34 | #include "Window.hh" | 34 | #include "Window.hh" |
35 | #include "Workspace.hh" | 35 | #include "Workspace.hh" |
36 | #include "Workspacemenu.hh" | 36 | #include "Workspacemenu.hh" |
37 | #include "Configmenu.hh" | ||
38 | #include "StringUtil.hh" | 37 | #include "StringUtil.hh" |
39 | #include "Netizen.hh" | 38 | #include "Netizen.hh" |
40 | #include "DirHelper.hh" | 39 | #include "DirHelper.hh" |
@@ -42,6 +41,9 @@ | |||
42 | #include "SimpleCommand.hh" | 41 | #include "SimpleCommand.hh" |
43 | #include "MenuTheme.hh" | 42 | #include "MenuTheme.hh" |
44 | #include "FbCommands.hh" | 43 | #include "FbCommands.hh" |
44 | #include "BoolMenuItem.hh" | ||
45 | #include "IntResMenuItem.hh" | ||
46 | #include "MacroCommand.hh" | ||
45 | 47 | ||
46 | //use GNU extensions | 48 | //use GNU extensions |
47 | #ifndef _GNU_SOURCE | 49 | #ifndef _GNU_SOURCE |
@@ -294,8 +296,8 @@ BScreen::ScreenResource::ScreenResource(ResourceManager &rm, | |||
294 | tab_height(rm, 16, scrname+".tab.height", altscrname+".Tab.Height"), | 296 | tab_height(rm, 16, scrname+".tab.height", altscrname+".Tab.Height"), |
295 | tab_placement(rm, Tab::PTOP, scrname+".tab.placement", altscrname+".Tab.Placement"), | 297 | tab_placement(rm, Tab::PTOP, scrname+".tab.placement", altscrname+".Tab.Placement"), |
296 | tab_alignment(rm, Tab::ALEFT, scrname+".tab.alignment", altscrname+".Tab.Alignment"), | 298 | tab_alignment(rm, Tab::ALEFT, scrname+".tab.alignment", altscrname+".Tab.Alignment"), |
297 | toolbar_on_head(rm, 0, scrname+".toolbar.onhead", altscrname+".Toolbar.onHead"), | 299 | toolbar_on_head(rm, 0, scrname+".toolbar.onhead", altscrname+".Toolbar.onHead") |
298 | toolbar_placement(rm, Toolbar::BOTTOMCENTER, scrname+".toolbar.placement", altscrname+".Toolbar.Placement") | 300 | // toolbar_placement(rm, Toolbar::BOTTOMCENTER, scrname+".toolbar.placement", altscrname+".Toolbar.Placement") |
299 | { | 301 | { |
300 | 302 | ||
301 | }; | 303 | }; |
@@ -422,10 +424,7 @@ BScreen::BScreen(ResourceManager &rm, | |||
422 | } | 424 | } |
423 | } | 425 | } |
424 | 426 | ||
425 | workspacemenu.reset(new FbTk::Menu(*m_menutheme, scrn, *image_control)); | 427 | workspacemenu.reset(createMenuFromScreen(*this)); |
426 | setupWorkspacemenu(*this, *workspacemenu); | ||
427 | |||
428 | configmenu = new Configmenu(this); | ||
429 | 428 | ||
430 | Workspace *wkspc = (Workspace *) 0; | 429 | Workspace *wkspc = (Workspace *) 0; |
431 | if (*resource.workspaces != 0) { | 430 | if (*resource.workspaces != 0) { |
@@ -441,22 +440,32 @@ BScreen::BScreen(ResourceManager &rm, | |||
441 | } | 440 | } |
442 | 441 | ||
443 | current_workspace = workspacesList.front(); | 442 | current_workspace = workspacesList.front(); |
444 | workspacemenu->setItemSelected(2, true); | ||
445 | |||
446 | m_toolbar.reset(new Toolbar(this)); | ||
447 | m_toolbar->setPlacement(*resource.toolbar_placement); | ||
448 | m_toolbar->reconfigure(); | ||
449 | 443 | ||
450 | #ifdef SLIT | 444 | #ifdef SLIT |
451 | m_slit.reset(new Slit(this)); | 445 | // must create this one before configure menu |
446 | m_slit.reset(new Slit(*this)); | ||
452 | #endif // SLIT | 447 | #endif // SLIT |
453 | 448 | ||
449 | m_toolbar.reset(new Toolbar(this)); | ||
450 | |||
451 | setupWorkspacemenu(*this, *workspacemenu); | ||
452 | |||
453 | m_configmenu.reset(createMenuFromScreen(*this)); | ||
454 | setupConfigmenu(*m_configmenu.get()); | ||
455 | |||
456 | workspacemenu->setItemSelected(2, true); | ||
457 | |||
458 | |||
459 | // m_toolbar->setPlacement(*resource.toolbar_placement); | ||
460 | m_toolbar->reconfigure(); | ||
461 | |||
454 | initMenu(); // create and initiate rootmenu | 462 | initMenu(); // create and initiate rootmenu |
455 | 463 | ||
456 | raiseWindows(Workspace::Stack()); | 464 | raiseWindows(Workspace::Stack()); |
457 | 465 | ||
458 | //update menus | 466 | //update menus |
459 | m_rootmenu->update(); | 467 | m_rootmenu->update(); |
468 | m_configmenu->update(); | ||
460 | #ifdef SLIT | 469 | #ifdef SLIT |
461 | if (m_slit.get()) | 470 | if (m_slit.get()) |
462 | m_slit->reconfigure(); | 471 | m_slit->reconfigure(); |
@@ -558,8 +567,6 @@ BScreen::~BScreen() { | |||
558 | } | 567 | } |
559 | netizenList.clear(); | 568 | netizenList.clear(); |
560 | 569 | ||
561 | delete configmenu; | ||
562 | |||
563 | delete image_control; | 570 | delete image_control; |
564 | 571 | ||
565 | delete theme; | 572 | delete theme; |
@@ -658,8 +665,7 @@ void BScreen::reconfigure() { | |||
658 | 665 | ||
659 | //reconfigure menus | 666 | //reconfigure menus |
660 | workspacemenu->reconfigure(); | 667 | workspacemenu->reconfigure(); |
661 | 668 | m_configmenu->reconfigure(); | |
662 | configmenu->reconfigure(); | ||
663 | 669 | ||
664 | { | 670 | { |
665 | int remember_sub = m_rootmenu->currentSubmenu(); | 671 | int remember_sub = m_rootmenu->currentSubmenu(); |
@@ -669,7 +675,7 @@ void BScreen::reconfigure() { | |||
669 | m_rootmenu->drawSubmenu(remember_sub); | 675 | m_rootmenu->drawSubmenu(remember_sub); |
670 | } | 676 | } |
671 | 677 | ||
672 | m_toolbar->setPlacement(*resource.toolbar_placement); | 678 | // m_toolbar->setPlacement(*resource.toolbar_placement); |
673 | m_toolbar->reconfigure(); | 679 | m_toolbar->reconfigure(); |
674 | if (m_toolbar->theme().font().isAntialias() != *resource.antialias) | 680 | if (m_toolbar->theme().font().isAntialias() != *resource.antialias) |
675 | m_toolbar->theme().font().setAntialias(*resource.antialias); | 681 | m_toolbar->theme().font().setAntialias(*resource.antialias); |
@@ -1160,31 +1166,6 @@ void BScreen::raiseWindows(const Workspace::Stack &workspace_stack) { | |||
1160 | 1166 | ||
1161 | session_stack[i++] = workspacemenu->windowID(); | 1167 | session_stack[i++] = workspacemenu->windowID(); |
1162 | 1168 | ||
1163 | session_stack[i++] = configmenu->focusmenu().windowID(); | ||
1164 | session_stack[i++] = configmenu->placementmenu().windowID(); | ||
1165 | session_stack[i++] = configmenu->tabmenu().windowID(); | ||
1166 | session_stack[i++] = configmenu->windowID(); | ||
1167 | |||
1168 | #ifdef SLIT | ||
1169 | session_stack[i++] = m_slit->menu().getDirectionmenu().windowID(); | ||
1170 | session_stack[i++] = m_slit->menu().getPlacementmenu().windowID(); | ||
1171 | #ifdef XINERAMA | ||
1172 | if (hasXinerama()) { | ||
1173 | session_stack[i++] = m_slit->menu().getHeadmenu()->windowID(); | ||
1174 | } | ||
1175 | #endif // XINERAMA | ||
1176 | session_stack[i++] = m_slit->menu().windowID(); | ||
1177 | #endif // SLIT | ||
1178 | |||
1179 | session_stack[i++] = | ||
1180 | m_toolbar->menu().placementmenu()->windowID(); | ||
1181 | #ifdef XINERAMA | ||
1182 | if (hasXinerama()) { | ||
1183 | session_stack[i++] = m_toolbar->getMenu()->getHeadmenu()->windowID(); | ||
1184 | } | ||
1185 | #endif // XINERAMA | ||
1186 | session_stack[i++] = m_toolbar->menu().windowID(); | ||
1187 | |||
1188 | Rootmenus::iterator rit = rootmenuList.begin(); | 1169 | Rootmenus::iterator rit = rootmenuList.begin(); |
1189 | Rootmenus::iterator rit_end = rootmenuList.end(); | 1170 | Rootmenus::iterator rit_end = rootmenuList.end(); |
1190 | for (; rit != rit_end; ++rit) { | 1171 | for (; rit != rit_end; ++rit) { |
@@ -1378,7 +1359,7 @@ void BScreen::initMenu() { | |||
1378 | while (m_rootmenu->numberOfItems()) | 1359 | while (m_rootmenu->numberOfItems()) |
1379 | m_rootmenu->remove(0); | 1360 | m_rootmenu->remove(0); |
1380 | } else | 1361 | } else |
1381 | m_rootmenu.reset(new FbTk::Menu(*m_menutheme.get(), getScreenNumber(), *getImageControl())); | 1362 | m_rootmenu.reset(createMenuFromScreen(*this)); |
1382 | 1363 | ||
1383 | bool defaultMenu = true; | 1364 | bool defaultMenu = true; |
1384 | Fluxbox * const fb = Fluxbox::instance(); | 1365 | Fluxbox * const fb = Fluxbox::instance(); |
@@ -1519,19 +1500,20 @@ bool BScreen::parseMenuFile(ifstream &file, FbTk::Menu &menu, int &row) { | |||
1519 | } | 1500 | } |
1520 | } // end of style | 1501 | } // end of style |
1521 | */ | 1502 | */ |
1522 | /* else if (str_key == "config") { | 1503 | else if (str_key == "config") { |
1523 | if (! str_label.size()) { | 1504 | if (! str_label.size()) { |
1524 | fprintf(stderr, | 1505 | fprintf(stderr, |
1525 | i18n-> | 1506 | i18n-> |
1526 | getMessage( | 1507 | getMessage( |
1527 | FBNLS::ScreenSet, FBNLS::ScreenCONFIGError, | 1508 | FBNLS::ScreenSet, FBNLS::ScreenCONFIGError, |
1528 | "BScreen::parseMenufile: [config] error, " | 1509 | "BScreen::parseMenufile: [config] error, " |
1529 | "no label defined")); | 1510 | "no label defined")); |
1530 | cerr<<"Row: "<<row<<endl; | 1511 | cerr<<"Row: "<<row<<endl; |
1531 | } else | 1512 | } else { |
1532 | menu.insert(str_label.c_str(), configmenu); | 1513 | cerr<<"inserts configmenu: "<<m_configmenu.get()<<endl; |
1533 | } // end of config | 1514 | menu.insert(str_label.c_str(), m_configmenu.get()); |
1534 | */ | 1515 | } |
1516 | } // end of config | ||
1535 | else if ( str_key == "include") { // include | 1517 | else if ( str_key == "include") { // include |
1536 | if (!str_label.size()) { | 1518 | if (!str_label.size()) { |
1537 | fprintf(stderr, | 1519 | fprintf(stderr, |
@@ -1589,9 +1571,10 @@ bool BScreen::parseMenuFile(ifstream &file, FbTk::Menu &menu, int &row) { | |||
1589 | else | 1571 | else |
1590 | submenu->setLabel(str_label.c_str()); | 1572 | submenu->setLabel(str_label.c_str()); |
1591 | 1573 | ||
1592 | parseMenuFile(file, *submenu, row); | 1574 | parseMenuFile(file, *submenu, row); |
1593 | submenu->update(); | 1575 | submenu->update(); |
1594 | menu.insert(str_label.c_str(), submenu); | 1576 | menu.insert(str_label.c_str(), submenu); |
1577 | // save to list so we can delete it later | ||
1595 | rootmenuList.push_back(submenu); | 1578 | rootmenuList.push_back(submenu); |
1596 | 1579 | ||
1597 | } | 1580 | } |
@@ -1661,6 +1644,70 @@ bool BScreen::parseMenuFile(ifstream &file, FbTk::Menu &menu, int &row) { | |||
1661 | return ((menu.numberOfItems() == 0) ? true : false); | 1644 | return ((menu.numberOfItems() == 0) ? true : false); |
1662 | } | 1645 | } |
1663 | 1646 | ||
1647 | void BScreen::setupConfigmenu(FbTk::Menu &menu) { | ||
1648 | I18n *i18n = I18n::instance(); | ||
1649 | using namespace FBNLS; | ||
1650 | |||
1651 | FbTk::MacroCommand *s_a_reconf_macro = new FbTk::MacroCommand(); | ||
1652 | FbTk::RefCount<FbTk::Command> saverc_cmd(new FbTk::SimpleCommand<Fluxbox>(*Fluxbox::instance(), &Fluxbox::save_rc)); | ||
1653 | FbTk::RefCount<FbTk::Command> reconf_cmd(new FbCommands::ReconfigureFluxboxCmd()); | ||
1654 | s_a_reconf_macro->add(saverc_cmd); | ||
1655 | s_a_reconf_macro->add(reconf_cmd); | ||
1656 | FbTk::RefCount<FbTk::Command> save_and_reconfigure(s_a_reconf_macro); | ||
1657 | #ifdef SLIT | ||
1658 | if (getSlit() != 0) | ||
1659 | menu.insert("Slit", &getSlit()->menu()); | ||
1660 | #endif // SLIT | ||
1661 | menu.insert(i18n->getMessage( | ||
1662 | ToolbarSet, ToolbarToolbarTitle, | ||
1663 | "Toolbar"), &m_toolbar->menu()); | ||
1664 | |||
1665 | menu.insert(new | ||
1666 | BoolMenuItem(i18n->getMessage( | ||
1667 | ConfigmenuSet, ConfigmenuImageDithering, | ||
1668 | "Image Dithering"), | ||
1669 | *resource.image_dither, save_and_reconfigure)); | ||
1670 | menu.insert(new | ||
1671 | BoolMenuItem( | ||
1672 | i18n->getMessage( | ||
1673 | ConfigmenuSet, ConfigmenuOpaqueMove, | ||
1674 | "Opaque Window Moving"), | ||
1675 | *resource.opaque_move, save_and_reconfigure)); | ||
1676 | menu.insert(new | ||
1677 | BoolMenuItem(i18n->getMessage( | ||
1678 | ConfigmenuSet, ConfigmenuFullMax, | ||
1679 | "Full Maximization"), | ||
1680 | *resource.full_max, save_and_reconfigure)); | ||
1681 | menu.insert(new | ||
1682 | BoolMenuItem(i18n->getMessage( | ||
1683 | ConfigmenuSet, ConfigmenuFocusNew, | ||
1684 | "Focus New Windows"), | ||
1685 | *resource.focus_new, save_and_reconfigure)); | ||
1686 | menu.insert(new | ||
1687 | BoolMenuItem(i18n->getMessage( | ||
1688 | ConfigmenuSet, ConfigmenuFocusLast, | ||
1689 | "Focus Last Window on Workspace"), | ||
1690 | *resource.focus_last, save_and_reconfigure)); | ||
1691 | menu.insert(new | ||
1692 | BoolMenuItem(i18n->getMessage( | ||
1693 | ConfigmenuSet, ConfigmenuMaxOverSlit, | ||
1694 | "Maximize Over Slit"), | ||
1695 | *resource.max_over_slit, save_and_reconfigure)); | ||
1696 | menu.insert(new | ||
1697 | BoolMenuItem(i18n->getMessage( | ||
1698 | ConfigmenuSet, ConfigmenuWorkspaceWarping, | ||
1699 | "Workspace Warping"), | ||
1700 | *resource.workspace_warping, save_and_reconfigure)); | ||
1701 | menu.insert(new | ||
1702 | BoolMenuItem(i18n->getMessage( | ||
1703 | ConfigmenuSet, ConfigmenuDesktopWheeling, | ||
1704 | "Desktop MouseWheel Switching"), | ||
1705 | *resource.desktop_wheeling, save_and_reconfigure)); | ||
1706 | menu.insert(new BoolMenuItem("antialias", *resource.antialias, save_and_reconfigure)); | ||
1707 | // finaly update menu | ||
1708 | menu.update(); | ||
1709 | } | ||
1710 | |||
1664 | void BScreen::createStyleMenu(FbTk::Menu &menu, bool newmenu, const char *label, const char *directory) { | 1711 | void BScreen::createStyleMenu(FbTk::Menu &menu, bool newmenu, const char *label, const char *directory) { |
1665 | /* | 1712 | /* |
1666 | // perform shell style ~ home directory expansion | 1713 | // perform shell style ~ home directory expansion |
diff --git a/src/Screen.hh b/src/Screen.hh index 0002e0d..418cb12 100644 --- a/src/Screen.hh +++ b/src/Screen.hh | |||
@@ -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: Screen.hh,v 1.60 2003/01/10 00:34:08 fluxgen Exp $ | 25 | // $Id: Screen.hh,v 1.61 2003/01/12 17:57:46 fluxgen Exp $ |
26 | 26 | ||
27 | #ifndef SCREEN_HH | 27 | #ifndef SCREEN_HH |
28 | #define SCREEN_HH | 28 | #define SCREEN_HH |
@@ -32,7 +32,8 @@ | |||
32 | #include "Workspace.hh" | 32 | #include "Workspace.hh" |
33 | #include "Tab.hh" | 33 | #include "Tab.hh" |
34 | #include "Resource.hh" | 34 | #include "Resource.hh" |
35 | #include "Toolbar.hh" | 35 | #include "Subject.hh" |
36 | #include "FbWinFrameTheme.hh" | ||
36 | 37 | ||
37 | #include <X11/Xlib.h> | 38 | #include <X11/Xlib.h> |
38 | #include <X11/Xresource.h> | 39 | #include <X11/Xresource.h> |
@@ -48,11 +49,12 @@ | |||
48 | #include "config.h" | 49 | #include "config.h" |
49 | #endif // HAVE_CONFIG_H | 50 | #endif // HAVE_CONFIG_H |
50 | 51 | ||
51 | class Configmenu; | ||
52 | class Workspacemenu; | 52 | class Workspacemenu; |
53 | class Iconmenu; | 53 | class Iconmenu; |
54 | class Netizen; | 54 | class Netizen; |
55 | class Slit; | 55 | class Slit; |
56 | class Toolbar; | ||
57 | class FbWinFrameTheme; | ||
56 | 58 | ||
57 | namespace FbTk { | 59 | namespace FbTk { |
58 | class MenuTheme; | 60 | class MenuTheme; |
@@ -168,7 +170,6 @@ public: | |||
168 | 170 | ||
169 | /// @return the resource value of number of workspace | 171 | /// @return the resource value of number of workspace |
170 | inline int getNumberOfWorkspaces() const { return *resource.workspaces; } | 172 | inline int getNumberOfWorkspaces() const { return *resource.workspaces; } |
171 | inline Toolbar::Placement getToolbarPlacement() const { return *resource.toolbar_placement; } | ||
172 | 173 | ||
173 | inline int getToolbarOnHead() { return *resource.toolbar_on_head; } | 174 | inline int getToolbarOnHead() { return *resource.toolbar_on_head; } |
174 | 175 | ||
@@ -191,7 +192,6 @@ public: | |||
191 | inline void saveToolbarOnTop(bool r) { *resource.toolbar_on_top = r; } | 192 | inline void saveToolbarOnTop(bool r) { *resource.toolbar_on_top = r; } |
192 | inline void saveToolbarAutoHide(bool r) { *resource.toolbar_auto_hide = r; } | 193 | inline void saveToolbarAutoHide(bool r) { *resource.toolbar_auto_hide = r; } |
193 | inline void saveToolbarWidthPercent(int w) { *resource.toolbar_width_percent = w; } | 194 | inline void saveToolbarWidthPercent(int w) { *resource.toolbar_width_percent = w; } |
194 | inline void saveToolbarPlacement(Toolbar::Placement p) { *resource.toolbar_placement = p; } | ||
195 | 195 | ||
196 | inline void saveToolbarOnHead(int head) { *resource.toolbar_on_head = head; } | 196 | inline void saveToolbarOnHead(int head) { *resource.toolbar_on_head = head; } |
197 | 197 | ||
@@ -310,6 +310,7 @@ public: | |||
310 | }; | 310 | }; |
311 | 311 | ||
312 | private: | 312 | private: |
313 | void setupConfigmenu(FbTk::Menu &menu); | ||
313 | void createStyleMenu(FbTk::Menu &menu, bool newmenu, const char *label, const char *directory); | 314 | void createStyleMenu(FbTk::Menu &menu, bool newmenu, const char *label, const char *directory); |
314 | 315 | ||
315 | bool parseMenuFile(std::ifstream &filestream, FbTk::Menu &menu, int &row); | 316 | bool parseMenuFile(std::ifstream &filestream, FbTk::Menu &menu, int &row); |
@@ -333,7 +334,7 @@ private: | |||
333 | Window geom_window; | 334 | Window geom_window; |
334 | 335 | ||
335 | FbTk::ImageControl *image_control; | 336 | FbTk::ImageControl *image_control; |
336 | Configmenu *configmenu; | 337 | std::auto_ptr<FbTk::Menu> m_configmenu; |
337 | 338 | ||
338 | std::auto_ptr<FbTk::Menu> m_rootmenu; | 339 | std::auto_ptr<FbTk::Menu> m_rootmenu; |
339 | 340 | ||
@@ -383,10 +384,6 @@ private: | |||
383 | Resource<Tab::Alignment> tab_alignment; | 384 | Resource<Tab::Alignment> tab_alignment; |
384 | Resource<int> toolbar_on_head; | 385 | Resource<int> toolbar_on_head; |
385 | 386 | ||
386 | |||
387 | Resource<Toolbar::Placement> toolbar_placement; | ||
388 | |||
389 | |||
390 | bool slit_on_top, slit_auto_hide; | 387 | bool slit_on_top, slit_auto_hide; |
391 | int slit_placement, slit_direction; | 388 | int slit_placement, slit_direction; |
392 | 389 | ||