aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/Screen.cc84
1 files changed, 71 insertions, 13 deletions
diff --git a/src/Screen.cc b/src/Screen.cc
index 85b2e12..178b2a4 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.109 2003/02/16 17:57:54 rathnor Exp $ 25// $Id: Screen.cc,v 1.110 2003/02/17 12:35:59 fluxgen Exp $
26 26
27 27
28#include "Screen.hh" 28#include "Screen.hh"
@@ -41,7 +41,7 @@
41#include "MenuTheme.hh" 41#include "MenuTheme.hh"
42#include "FbCommands.hh" 42#include "FbCommands.hh"
43#include "BoolMenuItem.hh" 43#include "BoolMenuItem.hh"
44//#include "IntResMenuItem.hh" 44#include "IntResMenuItem.hh"
45#include "MacroCommand.hh" 45#include "MacroCommand.hh"
46#include "XLayerItem.hh" 46#include "XLayerItem.hh"
47#include "MultLayers.hh" 47#include "MultLayers.hh"
@@ -279,6 +279,14 @@ private:
279 BScreen &m_screen; 279 BScreen &m_screen;
280}; 280};
281 281
282class ReloadStyleCmd: public FbTk::Command {
283public:
284 void execute() {
285 FbCommands::SetStyleCmd cmd(Fluxbox::instance()->getStyleFilename());
286 cmd.execute();
287 }
288};
289
282void setupWorkspacemenu(BScreen &scr, FbTk::Menu &menu) { 290void setupWorkspacemenu(BScreen &scr, FbTk::Menu &menu) {
283 menu.removeAll(); // clear all items 291 menu.removeAll(); // clear all items
284 using namespace FbTk; 292 using namespace FbTk;
@@ -426,11 +434,16 @@ BScreen::BScreen(ResourceManager &rm,
426 434
427 image_control->setDither(*resource.image_dither); 435 image_control->setDither(*resource.image_dither);
428 theme = new Theme(disp, getRootWindow(), colormap(), getScreenNumber(), 436 theme = new Theme(disp, getRootWindow(), colormap(), getScreenNumber(),
429 fluxbox->getStyleFilename(), getRootCommand().c_str()); 437 fluxbox->getStyleFilename().c_str(), getRootCommand().c_str());
430 438
431 theme->reconfigure(*resource.antialias); 439 theme->reconfigure(*resource.antialias);
440 // setup windowtheme, toolbartheme for antialias
441 m_windowtheme.font().setAntialias(*resource.antialias);
442 m_menutheme->titleFont().setAntialias(*resource.antialias);
443 m_menutheme->frameFont().setAntialias(*resource.antialias);
444
432 // set database for new Theme Engine 445 // set database for new Theme Engine
433 FbTk::ThemeManager::instance().load(fluxbox->getStyleFilename()); 446 FbTk::ThemeManager::instance().load(fluxbox->getStyleFilename().c_str());
434 447
435 // special case for tab rotated 448 // special case for tab rotated
436 if (*resource.tab_rotate_vertical && 449 if (*resource.tab_rotate_vertical &&
@@ -482,7 +495,7 @@ BScreen::BScreen(ResourceManager &rm,
482 } else { 495 } else {
483 geom_pixmap = image_control->renderImage(geom_w, geom_h, 496 geom_pixmap = image_control->renderImage(geom_w, geom_h,
484 m_windowtheme.labelFocusTexture()); 497 m_windowtheme.labelFocusTexture());
485 geom_window.setBackgroundPixmap(geom_pixmap); 498 geom_window.setBackgroundPixmap(geom_pixmap);
486 } 499 }
487 } 500 }
488 501
@@ -493,12 +506,10 @@ BScreen::BScreen(ResourceManager &rm,
493 for (int i = 0; i < *resource.workspaces; ++i) { 506 for (int i = 0; i < *resource.workspaces; ++i) {
494 wkspc = new Workspace(*this, m_layermanager, workspacesList.size()); 507 wkspc = new Workspace(*this, m_layermanager, workspacesList.size());
495 workspacesList.push_back(wkspc); 508 workspacesList.push_back(wkspc);
496 // workspacemenu->insert(wkspc->name().c_str(), &wkspc->menu());
497 } 509 }
498 } else { 510 } else { // create at least one workspace
499 wkspc = new Workspace(*this, m_layermanager, workspacesList.size()); 511 wkspc = new Workspace(*this, m_layermanager, workspacesList.size());
500 workspacesList.push_back(wkspc); 512 workspacesList.push_back(wkspc);
501 // workspacemenu->insert(wkspc->name().c_str(), &wkspc->menu());
502 } 513 }
503 514
504 current_workspace = workspacesList.front(); 515 current_workspace = workspacesList.front();
@@ -508,7 +519,25 @@ BScreen::BScreen(ResourceManager &rm,
508#endif // SLIT 519#endif // SLIT
509 520
510 m_toolbar.reset(new Toolbar(*this)); 521 m_toolbar.reset(new Toolbar(*this));
511 522 // setup toolbar width menu item
523 FbTk::MenuItem *toolbar_menuitem = new IntResMenuItem("Toolbar width percent",
524 resource.toolbar_width_percent,
525 0, 100); // min/max value
526 FbTk::RefCount<FbTk::Command> reconfig_toolbar(new FbTk::
527 SimpleCommand<Toolbar>
528 (*(m_toolbar.get()), &Toolbar::reconfigure));
529 FbTk::RefCount<FbTk::Command> save_resources(new FbTk::
530 SimpleCommand<Fluxbox>
531 (*Fluxbox::instance(), &Fluxbox::save_rc));
532 FbTk::MacroCommand *toolbar_menuitem_macro = new FbTk::MacroCommand();
533 toolbar_menuitem_macro->add(reconfig_toolbar);
534 toolbar_menuitem_macro->add(save_resources);
535
536 FbTk::RefCount<FbTk::Command> reconfig_toolbar_and_save_resource(toolbar_menuitem_macro);
537
538 toolbar_menuitem->setCommand(reconfig_toolbar_and_save_resource);
539 m_toolbar->menu().insert(toolbar_menuitem);
540
512 setupWorkspacemenu(*this, *workspacemenu); 541 setupWorkspacemenu(*this, *workspacemenu);
513 542
514 m_configmenu.reset(createMenuFromScreen(*this)); 543 m_configmenu.reset(createMenuFromScreen(*this));
@@ -661,7 +690,16 @@ void BScreen::reconfigure() {
661 theme->setRootCommand(getRootCommand()); 690 theme->setRootCommand(getRootCommand());
662 const string &filename = Fluxbox::instance()->getStyleFilename(); 691 const string &filename = Fluxbox::instance()->getStyleFilename();
663 theme->load(filename.c_str()); // old theme engine 692 theme->load(filename.c_str()); // old theme engine
693 // setup windowtheme, toolbartheme for antialias
694 m_windowtheme.font().setAntialias(*resource.antialias);
695 m_menutheme->titleFont().setAntialias(*resource.antialias);
696 m_menutheme->frameFont().setAntialias(*resource.antialias);
697
664 FbTk::ThemeManager::instance().load(filename.c_str()); // new theme engine 698 FbTk::ThemeManager::instance().load(filename.c_str()); // new theme engine
699
700 if (m_toolbar.get())
701 m_toolbar->theme().font().setAntialias(*resource.antialias);
702
665 theme->reconfigure(*resource.antialias); 703 theme->reconfigure(*resource.antialias);
666 704
667 I18n *i18n = I18n::instance(); 705 I18n *i18n = I18n::instance();
@@ -1183,6 +1221,14 @@ void BScreen::setupWindowActions(FluxboxWindow &win) {
1183#ifdef DEBUG 1221#ifdef DEBUG
1184 cerr<<__FILE__<<": Creating stick button"<<endl; 1222 cerr<<__FILE__<<": Creating stick button"<<endl;
1185#endif // DEBUG 1223#endif // DEBUG
1224 } else if ((*dir)[i] == Fluxbox::SHADE) {
1225 newbutton = new WinButton(WinButton::SHADE,
1226 frame.titlebar(),
1227 0, 0, 10, 10);
1228 newbutton->setOnClick(shade_cmd);
1229#ifdef DEBUG
1230 cerr<<__FILE__<<": Creating shade button"<<endl;
1231#endif // DEBUG
1186 } 1232 }
1187 1233
1188 if (newbutton != 0) { 1234 if (newbutton != 0) {
@@ -1207,8 +1253,9 @@ void BScreen::setupWindowActions(FluxboxWindow &win) {
1207 menu.removeAll(); // clear old items 1253 menu.removeAll(); // clear old items
1208 menu.disableTitle(); // not titlebar 1254 menu.disableTitle(); // not titlebar
1209 1255
1210 // check and setup layer menu 1256 // check and setup layer menu as a submenu windowmenu
1211 FbTk::Menu &layer_menu = win.getLayermenu(); 1257 FbTk::Menu &layer_menu = win.getLayermenu();
1258 layer_menu.disableTitle(); // no titlebar
1212 // if it hasn't already been setup (no need to reset it) 1259 // if it hasn't already been setup (no need to reset it)
1213 if (layer_menu.numberOfItems() == 0) { 1260 if (layer_menu.numberOfItems() == 0) {
1214 Fluxbox *fluxbox = Fluxbox::instance(); 1261 Fluxbox *fluxbox = Fluxbox::instance();
@@ -1528,6 +1575,8 @@ void BScreen::initMenu() {
1528bool BScreen::parseMenuFile(ifstream &file, FbTk::Menu &menu, int &row) { 1575bool BScreen::parseMenuFile(ifstream &file, FbTk::Menu &menu, int &row) {
1529 1576
1530 string line; 1577 string line;
1578 FbTk::RefCount<FbTk::Command>
1579 hide_menu(new FbTk::SimpleCommand<FbTk::Menu>(menu, &FbTk::Menu::hide));
1531 1580
1532 while (! file.eof()) { 1581 while (! file.eof()) {
1533 1582
@@ -1568,7 +1617,11 @@ bool BScreen::parseMenuFile(ifstream &file, FbTk::Menu &menu, int &row) {
1568 cerr<<"Row: "<<row<<endl; 1617 cerr<<"Row: "<<row<<endl;
1569 } else { 1618 } else {
1570 FbTk::RefCount<FbTk::Command> exec_cmd(new FbCommands::ExecuteCmd(str_cmd)); 1619 FbTk::RefCount<FbTk::Command> exec_cmd(new FbCommands::ExecuteCmd(str_cmd));
1571 menu.insert(str_label.c_str(), exec_cmd); 1620 FbTk::MacroCommand *exec_and_hide = new FbTk::MacroCommand();
1621 exec_and_hide->add(hide_menu);
1622 exec_and_hide->add(exec_cmd);
1623 FbTk::RefCount<FbTk::Command> exec_and_hide_cmd(exec_and_hide);
1624 menu.insert(str_label.c_str(), exec_and_hide_cmd);
1572 } 1625 }
1573 } else if (str_key == "exit") { // exit 1626 } else if (str_key == "exit") { // exit
1574 if (!str_label.size()) { 1627 if (!str_label.size()) {
@@ -1711,7 +1764,8 @@ bool BScreen::parseMenuFile(ifstream &file, FbTk::Menu &menu, int &row) {
1711 "no menu label defined\n")); 1764 "no menu label defined\n"));
1712 cerr<<"Row: "<<row<<endl; 1765 cerr<<"Row: "<<row<<endl;
1713 } else { 1766 } else {
1714 FbTk::RefCount<FbTk::Command> reconfig_fb_cmd(new FbCommands::ReconfigureFluxboxCmd()); 1767 FbTk::RefCount<FbTk::Command>
1768 reconfig_fb_cmd(new FbCommands::ReconfigureFluxboxCmd());
1715 menu.insert(str_label.c_str(), reconfig_fb_cmd); 1769 menu.insert(str_label.c_str(), reconfig_fb_cmd);
1716 } 1770 }
1717 } else if (str_key == "stylesdir" || str_key == "stylesmenu") { 1771 } else if (str_key == "stylesdir" || str_key == "stylesmenu") {
@@ -1811,7 +1865,11 @@ void BScreen::setupConfigmenu(FbTk::Menu &menu) {
1811 ConfigmenuSet, ConfigmenuDesktopWheeling, 1865 ConfigmenuSet, ConfigmenuDesktopWheeling,
1812 "Desktop MouseWheel Switching"), 1866 "Desktop MouseWheel Switching"),
1813 *resource.desktop_wheeling, save_and_reconfigure)); 1867 *resource.desktop_wheeling, save_and_reconfigure));
1814 menu.insert(new BoolMenuItem("antialias", *resource.antialias, save_and_reconfigure)); 1868
1869 // setup antialias cmd to reload style and save resource on toggle
1870 menu.insert(new BoolMenuItem("antialias", *resource.antialias,
1871 save_and_reconfigure));
1872
1815 // finaly update menu 1873 // finaly update menu
1816 menu.update(); 1874 menu.update();
1817} 1875}