diff -abBpur cvs-fluxbox/src/Ewmh.cc ak-fluxbox/src/Ewmh.cc --- cvs-fluxbox/src/Ewmh.cc 2004-02-17 11:33:57.547912424 +0100 +++ ak-fluxbox/src/Ewmh.cc 2004-02-17 11:50:49.519069424 +0100 @@ -174,7 +174,8 @@ void Ewmh::setupFrame(FluxboxWindow &win */ if (atoms[l] == m_net_wm_window_type_dock) { // we also assume it shouldn't be visible in any toolbar - win.setHidden(true); + win.setFocusHidden(true); + win.setIconHidden(true); break; } @@ -722,7 +723,8 @@ void Ewmh::setState(FluxboxWindow &win, setFullscreen(win, value); } else if (state == m_net_wm_state_hidden || state == m_net_wm_state_skip_taskbar) { - win.setHidden(value); + win.setFocusHidden(value); + win.setIconHidden(win.isFocusHidden()); } else if (state == m_net_wm_state_below) { if (value) win.moveToLayer(Fluxbox::instance()->getBottomLayer()); @@ -752,7 +754,8 @@ void Ewmh::toggleState(FluxboxWindow &wi setFullscreen(win, getState(win) == 0); // toggle current state } else if (state == m_net_wm_state_hidden || state == m_net_wm_state_skip_taskbar) { - win.setHidden(!win.isHidden()); + win.setFocusHidden(!win.isFocusHidden()); + win.setIconHidden(!win.isIconHidden()); } else if (state == m_net_wm_state_below) { if (win.layerNum() == Fluxbox::instance()->getBottomLayer()) win.moveToLayer(Fluxbox::instance()->getNormalLayer()); diff -abBpur cvs-fluxbox/src/Gnome.cc ak-fluxbox/src/Gnome.cc --- cvs-fluxbox/src/Gnome.cc 2004-02-17 11:33:57.550911968 +0100 +++ ak-fluxbox/src/Gnome.cc 2004-02-17 11:35:22.798952296 +0100 @@ -369,7 +369,10 @@ void Gnome::setState(FluxboxWindow *win, win->shade(); if (state & WIN_STATE_HIDDEN) - win->setHidden(! win->isHidden()); + { + win->setFocusHidden(! win->isFocusHidden()); + win->setIconHidden(! win->isIconHidden()); + } /* diff -abBpur cvs-fluxbox/src/IconbarTool.cc ak-fluxbox/src/IconbarTool.cc --- cvs-fluxbox/src/IconbarTool.cc 2004-02-17 11:33:57.551911816 +0100 +++ ak-fluxbox/src/IconbarTool.cc 2004-02-17 11:35:22.800951992 +0100 @@ -211,7 +211,7 @@ inline bool checkAddWindow(IconbarTool:: break; } - if (win.isHidden()) + if (win.isIconHidden()) ret_val = false; return ret_val; @@ -682,7 +682,7 @@ void IconbarTool::removeWindow(FluxboxWi void IconbarTool::addWindow(FluxboxWindow &win) { // we just want windows that has clients - if (win.clientList().empty() || win.isHidden() ) + if (win.clientList().empty() || win.isIconHidden() ) return; IconButton *button = new IconButton(m_icon_container, m_theme.focusedText().font(), win); diff -abBpur cvs-fluxbox/src/Remember.cc ak-fluxbox/src/Remember.cc --- cvs-fluxbox/src/Remember.cc 2004-02-17 11:33:57.552911664 +0100 +++ ak-fluxbox/src/Remember.cc 2004-02-17 12:02:28.324834800 +0100 @@ -210,7 +210,8 @@ Application::Application(bool grouped) { decostate_remember = dimensions_remember = - hiddenstate_remember = + focushiddenstate_remember = + iconhiddenstate_remember = jumpworkspace_remember = layer_remember = position_remember = @@ -364,8 +365,13 @@ int Remember::parseApp(ifstream &file, A app.rememberShadedstate((str_label=="yes")); } else if (str_key == "Tab") { app.rememberTabstate((str_label=="yes")); + } else if (str_key == "FocusHidden") { + app.rememberFocusHiddenstate((str_label=="yes")); + } else if (str_key == "IconHidden") { + app.rememberIconHiddenstate((str_label=="yes")); } else if (str_key == "Hidden") { - app.rememberHiddenstate((str_label=="yes")); + app.rememberIconHiddenstate((str_label=="yes")); + app.rememberFocusHiddenstate((str_label=="yes")); } else if (str_key == "Deco") { if (str_label == "NONE") { app.rememberDecostate((unsigned int) 0); @@ -548,9 +554,6 @@ void Remember::save() { if (a.tabstate_remember) { apps_file << " [Tab]\t\t{" << ((a.tabstate)?"yes":"no") << "}" << endl; } - if (a.hiddenstate_remember) { - apps_file << " [Hidden]\t\t{" << ((a.tabstate)?"yes":"no") << "}" << endl; - } if (a.decostate_remember) { switch (a.decostate) { case (0) : @@ -578,6 +581,17 @@ void Remember::save() { break; } } + + if (a.focushiddenstate_remember || a.iconhiddenstate_remember) { + if (a.focushiddenstate_remember && a.iconhiddenstate_remember && + a.focushiddenstate && a.iconhiddenstate) + apps_file << " [Hidden]\t{" << ((a.focushiddenstate)?"yes":"no") << "}" << endl; + else if (a.focushiddenstate_remember) { + apps_file << " [FocusHidden]\t{" << ((a.focushiddenstate)?"yes":"no") << "}" << endl; + } else if (a.iconhiddenstate_remember) { + apps_file << " [IconHidden]\t{" << ((a.iconhiddenstate)?"yes":"no") << "}" << endl; + } + } if (a.stuckstate_remember) { apps_file << " [Sticky]\t{" << ((a.stuckstate)?"yes":"no") << "}" << endl; } @@ -607,8 +621,11 @@ bool Remember::isRemembered(WinClient &w case REM_POSITION: return app->position_remember; break; - case REM_HIDDENSTATE: - return app->hiddenstate_remember; + case REM_FOCUSHIDDENSTATE: + return app->focushiddenstate_remember; + break; + case REM_ICONHIDDENSTATE: + return app->iconhiddenstate_remember; break; case REM_STUCKSTATE: return app->stuckstate_remember; @@ -655,8 +672,11 @@ void Remember::rememberAttrib(WinClient case REM_POSITION: app->rememberPosition(win->x(), win->y()); break; - case REM_HIDDENSTATE: - app->rememberHiddenstate(win->isHidden()); + case REM_FOCUSHIDDENSTATE: + app->rememberFocusHiddenstate(win->isFocusHidden()); + break; + case REM_ICONHIDDENSTATE: + app->rememberIconHiddenstate(win->isIconHidden()); break; case REM_SHADEDSTATE: app->rememberShadedstate(win->isShaded()); @@ -703,8 +723,11 @@ void Remember::forgetAttrib(WinClient &w case REM_POSITION: app->forgetPosition(); break; - case REM_HIDDENSTATE: - app->forgetHiddenstate(); + case REM_FOCUSHIDDENSTATE: + app->forgetFocusHiddenstate(); + break; + case REM_ICONHIDDENSTATE: + app->forgetIconHiddenstate(); break; case REM_STUCKSTATE: app->forgetStuckstate(); @@ -809,8 +832,10 @@ void Remember::setupFrame(FluxboxWindow if (win.isStuck() && !app->stuckstate || !win.isStuck() && app->stuckstate) win.stick(); // toggles - if (app->hiddenstate_remember) - win.setHidden(true); + if (app->focushiddenstate_remember) + win.setFocusHidden(true); + if (app->iconhiddenstate_remember) + win.setIconHidden(true); if (app->layer_remember) win.moveToLayer(app->layer); diff -abBpur cvs-fluxbox/src/Remember.hh ak-fluxbox/src/Remember.hh --- cvs-fluxbox/src/Remember.hh 2004-02-17 11:33:57.553911512 +0100 +++ ak-fluxbox/src/Remember.hh 2004-02-17 12:02:28.324834800 +0100 @@ -50,7 +50,8 @@ public: inline void forgetShadedstate() { shadedstate_remember = false; } inline void forgetTabstate() { tabstate_remember = false; } inline void forgetDecostate() { decostate_remember = false; } - inline void forgetHiddenstate() { hiddenstate_remember= false; } + inline void forgetFocusHiddenstate() { focushiddenstate_remember= false; } + inline void forgetIconHiddenstate() { iconhiddenstate_remember= false; } inline void forgetStuckstate() { stuckstate_remember = false; } inline void forgetJumpworkspace() { jumpworkspace_remember = false; } inline void forgetLayer() { layer_remember = false; } @@ -60,9 +61,10 @@ public: { workspace = ws; workspace_remember = true; } inline void rememberDimensions(int width, int height) { w = width; h = height; dimensions_remember = true; } - - inline void rememberHiddenstate(bool state) - { hiddenstate= state; hiddenstate_remember= true; } + inline void rememberFocusHiddenstate(bool state) + { focushiddenstate= state; focushiddenstate_remember= true; } + inline void rememberIconHiddenstate(bool state) + { iconhiddenstate= state; iconhiddenstate_remember= true; } inline void rememberPosition(int posx, int posy, unsigned char rfc= 0 ) { x = posx; y = posy; refc = rfc; position_remember = true; } inline void rememberShadedstate(bool state) @@ -106,8 +108,11 @@ public: bool stuckstate_remember; bool stuckstate; - bool hiddenstate_remember; - bool hiddenstate; + bool focushiddenstate_remember; + bool focushiddenstate; + + bool iconhiddenstate_remember; + bool iconhiddenstate; bool jumpworkspace_remember; bool jumpworkspace; @@ -138,7 +143,8 @@ public: enum Attribute { REM_DECOSTATE= 0, REM_DIMENSIONS, - REM_HIDDENSTATE, + REM_FOCUSHIDDENSTATE, + REM_ICONHIDDENSTATE, REM_JUMPWORKSPACE, REM_LAYER, REM_POSITION, diff -abBpur cvs-fluxbox/src/Screen.cc ak-fluxbox/src/Screen.cc --- cvs-fluxbox/src/Screen.cc 2004-02-17 11:33:57.554911360 +0100 +++ ak-fluxbox/src/Screen.cc 2004-02-17 11:35:22.806951080 +0100 @@ -2411,7 +2411,7 @@ bool BScreen::doSkipWindow(const WinClie // skip if not active client (i.e. only visit each fbwin once) (opts & CYCLEGROUPS) != 0 && win->winClient().window() != winclient.window() || (opts & CYCLESKIPSHADED) != 0 && win->isShaded() || // skip if shaded - win->isHidden() + win->isFocusHidden() ); } diff -abBpur cvs-fluxbox/src/Slit.cc ak-fluxbox/src/Slit.cc --- cvs-fluxbox/src/Slit.cc 2004-02-17 11:33:57.555911208 +0100 +++ ak-fluxbox/src/Slit.cc 2004-02-17 11:35:22.809950624 +0100 @@ -1129,11 +1129,12 @@ void Slit::loadClientList(const char *fi return; // save filename so we can save client list later - m_filename = FbTk::StringUtil::expandFilename(filename); + m_filename = filename; + std::string real_filename= FbTk::StringUtil::expandFilename(filename); struct stat buf; - if (stat(m_filename.c_str(), &buf) == 0) { - std::ifstream file(m_filename.c_str()); + if (stat(real_filename.c_str(), &buf) == 0) { + std::ifstream file(real_filename.c_str()); std::string name; while (! file.eof()) { name = ""; @@ -1170,7 +1171,7 @@ void Slit::updateClientmenu() { m_clientlist_menu.insert("Cycle Up", cycle_up); m_clientlist_menu.insert("Cycle Down", cycle_down); - FbTk::MenuItem *separator = new FbTk::MenuItem("-------"); + FbTk::MenuItem *separator = new FbTk::MenuItem("---"); separator->setEnabled(false); m_clientlist_menu.insert(separator); @@ -1186,7 +1187,7 @@ void Slit::updateClientmenu() { void Slit::saveClientList() { - std::ofstream file(m_filename.c_str()); + std::ofstream file(FbTk::StringUtil::expandFilename(m_filename).c_str()); SlitClients::iterator it = m_client_list.begin(); SlitClients::iterator it_end = m_client_list.end(); std::string prevName; diff -abBpur cvs-fluxbox/src/Window.cc ak-fluxbox/src/Window.cc --- cvs-fluxbox/src/Window.cc 2004-02-17 11:33:57.559910600 +0100 +++ ak-fluxbox/src/Window.cc 2004-02-17 11:35:22.819949104 +0100 @@ -265,6 +265,7 @@ FluxboxWindow::FluxboxWindow(WinClient & m_focussig(*this), m_titlesig(*this), m_themelistener(*this), + m_icon_hidden(false), moving(false), resizing(false), shaded(false), iconic(false), focused(false), stuck(false), m_managed(false), @@ -1688,7 +1689,7 @@ void FluxboxWindow::moveToLayer(int laye } } -void FluxboxWindow::setHidden(bool value) { +void FluxboxWindow::setFocusHidden(bool value) { if(value) m_blackbox_attrib.flags |= ATTRIB_HIDDEN; else @@ -1697,6 +1698,12 @@ void FluxboxWindow::setHidden(bool value m_statesig.notify(); } +void FluxboxWindow::setIconHidden(bool value) { + m_icon_hidden= value; + m_statesig.notify(); +} + + // window has actually RECEIVED focus (got a FocusIn event) // so now we make it a focused frame etc void FluxboxWindow::setFocusFlag(bool focus) { diff -abBpur cvs-fluxbox/src/Window.hh ak-fluxbox/src/Window.hh --- cvs-fluxbox/src/Window.hh 2004-02-17 11:33:57.559910600 +0100 +++ ak-fluxbox/src/Window.hh 2004-02-17 11:35:22.820948952 +0100 @@ -207,7 +207,8 @@ public: void raiseLayer(); void lowerLayer(); void moveToLayer(int layernum); - void setHidden(bool value); + void setFocusHidden(bool value); + void setIconHidden(bool value); void reconfigure(); @@ -262,7 +263,8 @@ public: @name accessors */ //@{ - inline bool isHidden() const { return (m_blackbox_attrib.flags & ATTRIB_HIDDEN); } + inline bool isFocusHidden() const { return (m_blackbox_attrib.flags & ATTRIB_HIDDEN); } + inline bool isIconHidden() const { return m_icon_hidden; } inline bool isManaged() const { return m_managed; } inline bool isFocused() const { return focused; } bool isVisible() const; @@ -468,7 +470,7 @@ private: } functions; bool m_shaped; ///< if the window is shaped with a mask - + bool m_icon_hidden; ///< if the window is in the iconbar int m_old_pos_x, m_old_pos_y; ///< old position so we can restore from maximized unsigned int m_old_width, m_old_height; ///< old size so we can restore from maximized state int m_last_button_x, ///< last known x position of the mouse button diff -abBpur cvs-fluxbox/src/Workspace.cc ak-fluxbox/src/Workspace.cc --- cvs-fluxbox/src/Workspace.cc 2004-02-17 11:33:57.559910600 +0100 +++ ak-fluxbox/src/Workspace.cc 2004-02-17 11:35:22.822948648 +0100 @@ -339,7 +339,7 @@ bool Workspace::checkGrouping(FluxboxWin } bool Workspace::loadGroups(const std::string &filename) { - string real_filename = filename; + string real_filename = FbTk::StringUtil::expandFilename(filename); FbTk::StringUtil::removeTrailingWhitespace(real_filename); ifstream infile(real_filename.c_str()); if (!infile)