fix saving of various slit params (Simon)
This commit is contained in:
parent
9163668e98
commit
e48f7836fd
6 changed files with 150 additions and 33 deletions
|
@ -1,10 +1,13 @@
|
|||
(Format: Year/Month/Day)
|
||||
Changes for 0.9.1:
|
||||
*03/04/16:
|
||||
* Fixed saving of some other slit params - placement, direction,
|
||||
autohide (Simon)
|
||||
Screen.hh/cc Slit.hh/cc fluxbox.cc
|
||||
* Fixed saving of toolbar and slit layer (Simon)
|
||||
LayerMenu.hh Screen.hh Slit.hh/cc Toolbar.hh/cc ToolbarHandler.hh
|
||||
Window.cc
|
||||
* Fixed toolbar width percent menu item
|
||||
* Fixed toolbar width percent menu item (Henrik)
|
||||
Toolbar.cc
|
||||
* Fixed current focused client button rendered (Henrik)
|
||||
FbWinFrame.hh/cc, Window.cc
|
||||
|
|
|
@ -22,7 +22,7 @@
|
|||
// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
|
||||
// DEALINGS IN THE SOFTWARE.
|
||||
|
||||
// $Id: Screen.cc,v 1.125 2003/04/16 14:43:01 rathnor Exp $
|
||||
// $Id: Screen.cc,v 1.126 2003/04/16 16:17:56 rathnor Exp $
|
||||
|
||||
|
||||
#include "Screen.hh"
|
||||
|
@ -192,6 +192,29 @@ setFromString(const char *strval) {
|
|||
setDefaultValue();
|
||||
}
|
||||
|
||||
template<>
|
||||
void Resource<Slit::Placement>::
|
||||
setFromString(const char *strval) {
|
||||
if (strcasecmp(strval, "TopLeft")==0)
|
||||
m_value = Slit::TOPLEFT;
|
||||
else if (strcasecmp(strval, "CenterLeft")==0)
|
||||
m_value = Slit::CENTERLEFT;
|
||||
else if (strcasecmp(strval, "BottomLeft")==0)
|
||||
m_value = Slit::BOTTOMLEFT;
|
||||
else if (strcasecmp(strval, "TopCenter")==0)
|
||||
m_value = Slit::TOPCENTER;
|
||||
else if (strcasecmp(strval, "BottomCenter")==0)
|
||||
m_value = Slit::BOTTOMCENTER;
|
||||
else if (strcasecmp(strval, "TopRight")==0)
|
||||
m_value = Slit::TOPRIGHT;
|
||||
else if (strcasecmp(strval, "CenterRight")==0)
|
||||
m_value = Slit::CENTERRIGHT;
|
||||
else if (strcasecmp(strval, "BottomRight")==0)
|
||||
m_value = Slit::BOTTOMRIGHT;
|
||||
else
|
||||
setDefaultValue();
|
||||
}
|
||||
|
||||
template<>
|
||||
void Resource<ToolbarHandler::ToolbarMode>::
|
||||
setFromString(const char *strval) {
|
||||
|
@ -212,6 +235,16 @@ setFromString(const char *strval) {
|
|||
}
|
||||
|
||||
template<>
|
||||
void Resource<Slit::Direction>::
|
||||
setFromString(const char *strval) {
|
||||
if (strcasecmp(strval, "Vertical") == 0)
|
||||
m_value = Slit::VERTICAL;
|
||||
else if (strcasecmp(strval, "Horizontal") == 0)
|
||||
m_value = Slit::HORIZONTAL;
|
||||
else
|
||||
setDefaultValue();
|
||||
}
|
||||
|
||||
string Resource<Toolbar::Placement>::
|
||||
getString() {
|
||||
switch (m_value) {
|
||||
|
@ -256,6 +289,39 @@ getString() {
|
|||
return string("BottomCenter");
|
||||
}
|
||||
|
||||
|
||||
string Resource<Slit::Placement>::
|
||||
getString() {
|
||||
switch (m_value) {
|
||||
case Slit::TOPLEFT:
|
||||
return string("TopLeft");
|
||||
break;
|
||||
case Slit::CENTERLEFT:
|
||||
return string("CenterLeft");
|
||||
break;
|
||||
case Slit::BOTTOMLEFT:
|
||||
return string("BottomLeft");
|
||||
break;
|
||||
case Slit::TOPCENTER:
|
||||
return string("TopCenter");
|
||||
break;
|
||||
case Slit::BOTTOMCENTER:
|
||||
return string("BottomCenter");
|
||||
break;
|
||||
case Slit::TOPRIGHT:
|
||||
return string("TopRight");
|
||||
break;
|
||||
case Slit::CENTERRIGHT:
|
||||
return string("CenterRight");
|
||||
break;
|
||||
case Slit::BOTTOMRIGHT:
|
||||
return string("BottomRight");
|
||||
break;
|
||||
}
|
||||
//default string
|
||||
return string("BottomRight");
|
||||
}
|
||||
|
||||
template<>
|
||||
string Resource<ToolbarHandler::ToolbarMode>::
|
||||
getString() {
|
||||
|
@ -284,6 +350,22 @@ getString() {
|
|||
return string("Icons");
|
||||
}
|
||||
|
||||
template<>
|
||||
string Resource<Slit::Direction>::
|
||||
getString() {
|
||||
switch (m_value) {
|
||||
case Slit::VERTICAL:
|
||||
return string("Vertical");
|
||||
break;
|
||||
case Slit::HORIZONTAL:
|
||||
return string("Horizontal");
|
||||
break;
|
||||
}
|
||||
// default string
|
||||
return string("Vertical");
|
||||
}
|
||||
|
||||
|
||||
namespace {
|
||||
|
||||
class AddWorkspaceCmd:public FbTk::Command {
|
||||
|
@ -400,7 +482,12 @@ BScreen::ScreenResource::ScreenResource(ResourceManager &rm,
|
|||
toolbar_mode(rm, ToolbarHandler::ICONS, scrname+".toolbar.mode", altscrname+".Toolbar.Mode"),
|
||||
toolbar_on_head(rm, 0, scrname+".toolbar.onhead", altscrname+".Toolbar.onHead"),
|
||||
toolbar_placement(rm, Toolbar::BOTTOMCENTER,
|
||||
scrname+".toolbar.placement", altscrname+".Toolbar.Placement")
|
||||
scrname+".toolbar.placement", altscrname+".Toolbar.Placement"),
|
||||
slit_auto_hide(rm, false, scrname+".slit.autoHide", altscrname+".Slit.AutoHide"),
|
||||
slit_placement(rm, Slit::BOTTOMRIGHT,
|
||||
scrname+".slit.placement", altscrname+".Slit.Placement"),
|
||||
slit_direction(rm, Slit::VERTICAL, scrname+".slit.direction", altscrname+".Slit.Direction")
|
||||
|
||||
{
|
||||
|
||||
};
|
||||
|
|
|
@ -22,7 +22,7 @@
|
|||
// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
|
||||
// DEALINGS IN THE SOFTWARE.
|
||||
|
||||
// $Id: Screen.hh,v 1.79 2003/04/16 14:43:02 rathnor Exp $
|
||||
// $Id: Screen.hh,v 1.80 2003/04/16 16:17:57 rathnor Exp $
|
||||
|
||||
#ifndef SCREEN_HH
|
||||
#define SCREEN_HH
|
||||
|
@ -36,6 +36,7 @@
|
|||
#include "MultLayers.hh"
|
||||
#include "XLayerItem.hh"
|
||||
#include "ToolbarHandler.hh"
|
||||
#include "Slit.hh"
|
||||
|
||||
#include <X11/Xlib.h>
|
||||
#include <X11/Xresource.h>
|
||||
|
@ -52,7 +53,6 @@
|
|||
#endif // HAVE_CONFIG_H
|
||||
|
||||
class Netizen;
|
||||
class Slit;
|
||||
class Toolbar;
|
||||
class FbWinFrameTheme;
|
||||
class RootTheme;
|
||||
|
@ -109,15 +109,16 @@ public:
|
|||
inline const std::string &getRootCommand() const { return *resource.rootcommand; }
|
||||
inline Fluxbox::FocusModel getFocusModel() const { return *resource.focus_model; }
|
||||
|
||||
inline bool doSlitAutoHide() const { return resource.slit_auto_hide; }
|
||||
inline bool &doSlitAutoHide() { return *resource.slit_auto_hide; }
|
||||
inline const bool &doSlitAutoHide() const { return *resource.slit_auto_hide; }
|
||||
#ifdef SLIT
|
||||
inline Slit *getSlit() { return m_slit.get(); }
|
||||
inline const Slit *getSlit() const { return m_slit.get(); }
|
||||
#endif // SLIT
|
||||
inline int getSlitPlacement() const { return resource.slit_placement; }
|
||||
inline int getSlitDirection() const { return resource.slit_direction; }
|
||||
inline void saveSlitPlacement(int p) { resource.slit_placement = p; }
|
||||
inline void saveSlitDirection(int d) { resource.slit_direction = d; }
|
||||
inline Slit::Placement getSlitPlacement() const { return *resource.slit_placement; }
|
||||
inline Slit::Direction getSlitDirection() const { return *resource.slit_direction; }
|
||||
inline void saveSlitPlacement(Slit::Placement p) { resource.slit_placement = p; }
|
||||
inline void saveSlitDirection(Slit::Direction d) { resource.slit_direction = d; }
|
||||
inline void saveSlitAutoHide(bool t) { resource.slit_auto_hide = t; }
|
||||
|
||||
inline unsigned int getSlitOnHead() const { return resource.slit_on_head; }
|
||||
|
@ -409,8 +410,9 @@ private:
|
|||
Resource<ToolbarHandler::ToolbarMode> toolbar_mode;
|
||||
Resource<int> toolbar_on_head;
|
||||
Resource<Toolbar::Placement> toolbar_placement;
|
||||
bool slit_auto_hide;
|
||||
int slit_placement, slit_direction;
|
||||
Resource<bool> slit_auto_hide;
|
||||
Resource<Slit::Placement> slit_placement;
|
||||
Resource<Slit::Direction> slit_direction;
|
||||
|
||||
unsigned int slit_on_head;
|
||||
|
||||
|
|
54
src/Slit.cc
54
src/Slit.cc
|
@ -22,7 +22,7 @@
|
|||
// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
|
||||
// DEALINGS IN THE SOFTWARE.
|
||||
|
||||
// $Id: Slit.cc,v 1.39 2003/04/16 13:43:43 rathnor Exp $
|
||||
// $Id: Slit.cc,v 1.40 2003/04/16 16:18:02 rathnor Exp $
|
||||
|
||||
#include "Slit.hh"
|
||||
|
||||
|
@ -185,9 +185,10 @@ private:
|
|||
|
||||
class SlitDirMenuItem: public FbTk::MenuItem {
|
||||
public:
|
||||
SlitDirMenuItem(const char *label, Slit &slit):FbTk::MenuItem(label),
|
||||
m_slit(slit),
|
||||
m_label(label ? label : "") {
|
||||
SlitDirMenuItem(const char *label, Slit &slit, FbTk::RefCount<FbTk::Command> &cmd)
|
||||
:FbTk::MenuItem(label,cmd),
|
||||
m_slit(slit),
|
||||
m_label(label ? label : "") {
|
||||
setLabel(m_label.c_str()); // update label
|
||||
}
|
||||
void click(int button, int time) {
|
||||
|
@ -197,6 +198,7 @@ public:
|
|||
else
|
||||
m_slit.setDirection(Slit::HORIZONTAL);
|
||||
setLabel(m_label.c_str());
|
||||
FbTk::MenuItem::click(button, time);
|
||||
}
|
||||
|
||||
void setLabel(const char *label) {
|
||||
|
@ -219,13 +221,14 @@ private:
|
|||
|
||||
class PlaceSlitMenuItem: public FbTk::MenuItem {
|
||||
public:
|
||||
PlaceSlitMenuItem(const char *label, Slit &slit, Slit::Placement place):
|
||||
FbTk::MenuItem(label), m_slit(slit), m_place(place) {
|
||||
PlaceSlitMenuItem(const char *label, Slit &slit, Slit::Placement place, FbTk::RefCount<FbTk::Command> &cmd):
|
||||
FbTk::MenuItem(label, cmd), m_slit(slit), m_place(place) {
|
||||
|
||||
}
|
||||
bool isEnabled() const { return m_slit.placement() != m_place; }
|
||||
void click(int button, int time) {
|
||||
m_slit.setPlacement(m_place);
|
||||
FbTk::MenuItem::click(button, time);
|
||||
}
|
||||
private:
|
||||
Slit &m_slit;
|
||||
|
@ -258,9 +261,9 @@ Slit::Slit(BScreen &scr, FbTk::XLayer &layer, const char *filename)
|
|||
true));
|
||||
|
||||
// default placement and direction
|
||||
m_direction = HORIZONTAL;
|
||||
m_placement = BOTTOMRIGHT;
|
||||
hidden = do_auto_hide = false;
|
||||
m_direction = screen().getSlitDirection();
|
||||
m_placement = screen().getSlitPlacement();
|
||||
hidden = do_auto_hide = screen().doSlitAutoHide();
|
||||
|
||||
frame.pixmap = None;
|
||||
|
||||
|
@ -456,11 +459,13 @@ void Slit::addClient(Window w) {
|
|||
|
||||
void Slit::setDirection(Direction dir) {
|
||||
m_direction = dir;
|
||||
screen().saveSlitDirection(dir);
|
||||
reconfigure();
|
||||
}
|
||||
|
||||
void Slit::setPlacement(Placement place) {
|
||||
m_placement = place;
|
||||
screen().saveSlitPlacement(place);
|
||||
reconfigure();
|
||||
}
|
||||
|
||||
|
@ -533,6 +538,9 @@ void Slit::reconfigure() {
|
|||
frame.width = 0;
|
||||
frame.height = 0;
|
||||
|
||||
// be sure to sync slit auto hide up with the screen's menu resource
|
||||
do_auto_hide = screen().doSlitAutoHide();
|
||||
|
||||
// Need to count windows because not all client list entries
|
||||
// actually correspond to mapped windows.
|
||||
int num_windows = 0;
|
||||
|
@ -1091,6 +1099,7 @@ void Slit::saveClientList() {
|
|||
|
||||
void Slit::setAutoHide(bool val) {
|
||||
do_auto_hide = val;
|
||||
screen().saveSlitAutoHide(val);
|
||||
}
|
||||
|
||||
void Slit::setupMenu() {
|
||||
|
@ -1098,7 +1107,14 @@ void Slit::setupMenu() {
|
|||
using namespace FBNLS;
|
||||
using namespace FbTk;
|
||||
|
||||
RefCount<Command> menu_cmd(new SimpleCommand<Slit>(*this, &Slit::reconfigure));
|
||||
FbTk::MacroCommand *s_a_reconf_macro = new FbTk::MacroCommand();
|
||||
FbTk::RefCount<FbTk::Command> saverc_cmd(new FbTk::SimpleCommand<Fluxbox>(*Fluxbox::instance(),
|
||||
&Fluxbox::save_rc));
|
||||
FbTk::RefCount<FbTk::Command> reconf_cmd(new FbCommands::ReconfigureFluxboxCmd());
|
||||
s_a_reconf_macro->add(saverc_cmd);
|
||||
s_a_reconf_macro->add(reconf_cmd);
|
||||
FbTk::RefCount<FbTk::Command> save_and_reconfigure(s_a_reconf_macro);
|
||||
|
||||
// setup base menu
|
||||
slitmenu.setLabel("Slit");
|
||||
slitmenu.insert(i18n->getMessage(
|
||||
|
@ -1111,12 +1127,14 @@ void Slit::setupMenu() {
|
|||
slitmenu.insert(new BoolMenuItem(i18n->getMessage(
|
||||
CommonSet, CommonAutoHide,
|
||||
"Auto hide"),
|
||||
do_auto_hide,
|
||||
menu_cmd));
|
||||
screen().doSlitAutoHide(),
|
||||
save_and_reconfigure));
|
||||
|
||||
slitmenu.insert(new SlitDirMenuItem(i18n->getMessage(
|
||||
SlitSet, SlitSlitDirection,
|
||||
"Slit Direction"), *this));
|
||||
SlitSet, SlitSlitDirection,
|
||||
"Slit Direction"),
|
||||
*this,
|
||||
save_and_reconfigure));
|
||||
slitmenu.insert("Clients", &clientlist_menu);
|
||||
slitmenu.update();
|
||||
|
||||
|
@ -1156,9 +1174,15 @@ void Slit::setupMenu() {
|
|||
place_menu[i].base,
|
||||
place_menu[i].default_str);
|
||||
placement_menu.insert(new PlaceSlitMenuItem(i18n_str, *this,
|
||||
place_menu[i].slit_placement));
|
||||
place_menu[i].slit_placement,
|
||||
save_and_reconfigure));
|
||||
}
|
||||
}
|
||||
// finaly update sub menu
|
||||
placement_menu.update();
|
||||
}
|
||||
|
||||
void Slit::moveToLayer(int layernum) {
|
||||
m_layeritem->moveToLayer(layernum);
|
||||
m_screen.saveSlitLayer((Fluxbox::Layer) layernum);
|
||||
}
|
||||
|
|
|
@ -22,7 +22,7 @@
|
|||
// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
|
||||
// DEALINGS IN THE SOFTWARE.
|
||||
|
||||
/// $Id: Slit.hh,v 1.21 2003/04/16 13:43:44 rathnor Exp $
|
||||
/// $Id: Slit.hh,v 1.22 2003/04/16 16:18:05 rathnor Exp $
|
||||
|
||||
#ifndef SLIT_HH
|
||||
#define SLIT_HH
|
||||
|
@ -33,7 +33,6 @@
|
|||
#include "XLayerItem.hh"
|
||||
#include "LayerMenu.hh"
|
||||
#include "fluxbox.hh"
|
||||
#include "Screen.hh"
|
||||
|
||||
#include <X11/Xlib.h>
|
||||
#include <X11/Xutil.h>
|
||||
|
@ -43,6 +42,7 @@
|
|||
#include <memory>
|
||||
|
||||
class SlitClient;
|
||||
class BScreen;
|
||||
|
||||
/// Handles dock apps
|
||||
class Slit : public FbTk::TimeoutHandler, public FbTk::EventHandler {
|
||||
|
@ -103,7 +103,7 @@ public:
|
|||
void configureRequestEvent(XConfigureRequestEvent &event);
|
||||
//@}
|
||||
|
||||
void moveToLayer(int layernum) { m_layeritem->moveToLayer(layernum); m_screen.saveSlitLayer((Fluxbox::Layer) layernum); }
|
||||
void moveToLayer(int layernum);
|
||||
FbTk::XLayerItem &getLayerItem() { return *m_layeritem; }
|
||||
|
||||
virtual void timeout();
|
||||
|
|
|
@ -22,7 +22,7 @@
|
|||
// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
|
||||
// DEALINGS IN THE SOFTWARE.
|
||||
|
||||
// $Id: fluxbox.cc,v 1.113 2003/04/16 14:43:06 rathnor Exp $
|
||||
// $Id: fluxbox.cc,v 1.114 2003/04/16 16:18:06 rathnor Exp $
|
||||
|
||||
#include "fluxbox.hh"
|
||||
|
||||
|
@ -1703,6 +1703,7 @@ void Fluxbox::save_rc() {
|
|||
BScreen *screen = *it;
|
||||
int screen_number = screen->getScreenNumber();
|
||||
|
||||
/*
|
||||
#ifdef SLIT
|
||||
string slit_placement;
|
||||
|
||||
|
@ -1735,9 +1736,9 @@ void Fluxbox::save_rc() {
|
|||
screen->getSlitOnHead());
|
||||
XrmPutLineResource(&new_blackboxrc, rc_string);
|
||||
#endif // XINERAMA
|
||||
*/
|
||||
*//*
|
||||
#endif // SLIT
|
||||
|
||||
*/
|
||||
sprintf(rc_string, "session.screen%d.rowPlacementDirection: %s", screen_number,
|
||||
((screen->getRowPlacementDirection() == BScreen::LEFTRIGHT) ?
|
||||
"LeftToRight" : "RightToLeft"));
|
||||
|
|
Loading…
Reference in a new issue