Slit loads its own settings and saves them as they are changed
added an assert in Resource
This commit is contained in:
parent
fe9b1efde5
commit
73a3c979b3
6 changed files with 181 additions and 152 deletions
|
@ -116,6 +116,7 @@ void Resource::setValue(const std::string &rname, long value) {
|
||||||
|
|
||||||
void Resource::setValue(const std::string &rname, const char *value) {
|
void Resource::setValue(const std::string &rname, const char *value) {
|
||||||
ASSERT(m_database != NULL);
|
ASSERT(m_database != NULL);
|
||||||
|
ASSERT(value != NULL);
|
||||||
|
|
||||||
std::string rc_string = rname + ": " + value;
|
std::string rc_string = rname + ": " + value;
|
||||||
XrmPutLineResource(&m_database, rc_string.c_str());
|
XrmPutLineResource(&m_database, rc_string.c_str());
|
||||||
|
|
|
@ -185,7 +185,9 @@ static const char *getFontSize(const char *pattern, int *size) {
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
BScreen::BScreen(Openbox &ob, int scrn) : ScreenInfo(ob, scrn), openbox(ob) {
|
BScreen::BScreen(Openbox &ob, int scrn, Resource &conf) : ScreenInfo(ob, scrn),
|
||||||
|
openbox(ob), config(conf)
|
||||||
|
{
|
||||||
event_mask = ColormapChangeMask | EnterWindowMask | PropertyChangeMask |
|
event_mask = ColormapChangeMask | EnterWindowMask | PropertyChangeMask |
|
||||||
SubstructureRedirectMask | KeyPressMask | KeyReleaseMask |
|
SubstructureRedirectMask | KeyPressMask | KeyReleaseMask |
|
||||||
ButtonPressMask | ButtonReleaseMask;
|
ButtonPressMask | ButtonReleaseMask;
|
||||||
|
@ -419,7 +421,7 @@ BScreen::BScreen(Openbox &ob, int scrn) : ScreenInfo(ob, scrn), openbox(ob) {
|
||||||
toolbar = new Toolbar(*this);
|
toolbar = new Toolbar(*this);
|
||||||
|
|
||||||
#ifdef SLIT
|
#ifdef SLIT
|
||||||
slit = new Slit(*this);
|
slit = new Slit(*this, config);
|
||||||
#endif // SLIT
|
#endif // SLIT
|
||||||
|
|
||||||
InitMenu();
|
InitMenu();
|
||||||
|
@ -1545,7 +1547,7 @@ void BScreen::raiseWindows(Window *workspace_stack, int num) {
|
||||||
*(session_stack + i++) = toolbar->getWindowID();
|
*(session_stack + i++) = toolbar->getWindowID();
|
||||||
|
|
||||||
#ifdef SLIT
|
#ifdef SLIT
|
||||||
if (slit->isOnTop())
|
if (slit->onTop())
|
||||||
*(session_stack + i++) = slit->getWindowID();
|
*(session_stack + i++) = slit->getWindowID();
|
||||||
#endif // SLIT
|
#endif // SLIT
|
||||||
|
|
||||||
|
|
14
src/Screen.h
14
src/Screen.h
|
@ -103,6 +103,7 @@ private:
|
||||||
Window geom_window;
|
Window geom_window;
|
||||||
|
|
||||||
Openbox &openbox;
|
Openbox &openbox;
|
||||||
|
Resource &config;
|
||||||
BImageControl *image_control;
|
BImageControl *image_control;
|
||||||
Configmenu *configmenu;
|
Configmenu *configmenu;
|
||||||
Iconmenu *iconmenu;
|
Iconmenu *iconmenu;
|
||||||
|
@ -175,7 +176,7 @@ protected:
|
||||||
|
|
||||||
|
|
||||||
public:
|
public:
|
||||||
BScreen(Openbox &, int);
|
BScreen(Openbox &, int, Resource &);
|
||||||
~BScreen(void);
|
~BScreen(void);
|
||||||
|
|
||||||
inline const Bool &isToolbarOnTop(void) const
|
inline const Bool &isToolbarOnTop(void) const
|
||||||
|
@ -207,18 +208,7 @@ public:
|
||||||
inline Rootmenu *getRootmenu(void) { return rootmenu; }
|
inline Rootmenu *getRootmenu(void) { return rootmenu; }
|
||||||
|
|
||||||
#ifdef SLIT
|
#ifdef SLIT
|
||||||
inline const Bool &isSlitOnTop(void) const { return resource.slit_on_top; }
|
|
||||||
inline const Bool &doSlitAutoHide(void) const
|
|
||||||
{ return resource.slit_auto_hide; }
|
|
||||||
inline Slit *getSlit(void) { return slit; }
|
inline Slit *getSlit(void) { return slit; }
|
||||||
inline const int &getSlitPlacement(void) const
|
|
||||||
{ return resource.slit_placement; }
|
|
||||||
inline const int &getSlitDirection(void) const
|
|
||||||
{ return resource.slit_direction; }
|
|
||||||
inline void saveSlitPlacement(int p) { resource.slit_placement = p; }
|
|
||||||
inline void saveSlitDirection(int d) { resource.slit_direction = d; }
|
|
||||||
inline void saveSlitOnTop(Bool t) { resource.slit_on_top = t; }
|
|
||||||
inline void saveSlitAutoHide(Bool t) { resource.slit_auto_hide = t; }
|
|
||||||
#endif // SLIT
|
#endif // SLIT
|
||||||
|
|
||||||
inline int getWindowZones(void) const
|
inline int getWindowZones(void) const
|
||||||
|
|
181
src/Slit.cc
181
src/Slit.cc
|
@ -41,11 +41,18 @@
|
||||||
#include "Slit.h"
|
#include "Slit.h"
|
||||||
#include "Toolbar.h"
|
#include "Toolbar.h"
|
||||||
|
|
||||||
|
#include <string>
|
||||||
|
#include <strstream>
|
||||||
|
|
||||||
Slit::Slit(BScreen &scr) : screen(scr), openbox(scr.getOpenbox()) {
|
Slit::Slit(BScreen &scr, Resource &conf) : screen(scr),
|
||||||
on_top = screen.isSlitOnTop();
|
openbox(scr.getOpenbox()), config(conf)
|
||||||
hidden = do_auto_hide = screen.doSlitAutoHide();
|
{
|
||||||
|
// default values
|
||||||
|
m_placement = CenterRight;
|
||||||
|
m_direction = Vertical;
|
||||||
|
m_ontop = false;
|
||||||
|
m_hidden = m_autohide = false;
|
||||||
|
|
||||||
display = screen.getBaseDisplay().getXDisplay();
|
display = screen.getBaseDisplay().getXDisplay();
|
||||||
frame.window = frame.pixmap = None;
|
frame.window = frame.pixmap = None;
|
||||||
|
|
||||||
|
@ -207,13 +214,108 @@ void Slit::removeClient(Window w, Bool remap) {
|
||||||
openbox.ungrab();
|
openbox.ungrab();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void Slit::setOnTop(bool b) {
|
||||||
|
m_ontop = b;
|
||||||
|
ostrstream s;
|
||||||
|
s << "session.screen" << screen.getScreenNumber() << ".slit.onTop" << ends;
|
||||||
|
config.setValue(s.str(), m_ontop ? "True" : "False");
|
||||||
|
}
|
||||||
|
|
||||||
|
void Slit::setAutoHide(bool b) {
|
||||||
|
m_autohide = b;
|
||||||
|
ostrstream s;
|
||||||
|
s << "session.screen" << screen.getScreenNumber() << ".slit.autoHide" << ends;
|
||||||
|
config.setValue(s.str(), m_autohide ? "True" : "False");
|
||||||
|
}
|
||||||
|
|
||||||
|
void Slit::setPlacement(int p) {
|
||||||
|
m_placement = p;
|
||||||
|
cout << "setting " << p << " " << m_placement << endl;
|
||||||
|
ostrstream s;
|
||||||
|
s << "session.screen" << screen.getScreenNumber() << ".slit.placement" <<
|
||||||
|
ends;
|
||||||
|
const char *placement;
|
||||||
|
switch (m_placement) {
|
||||||
|
case TopLeft: placement = "TopLeft"; break;
|
||||||
|
case CenterLeft: placement = "CenterLeft"; break;
|
||||||
|
case BottomLeft: placement = "BottomLeft"; break;
|
||||||
|
case TopCenter: placement = "TopCenter"; break;
|
||||||
|
case BottomCenter: placement = "BottomCenter"; break;
|
||||||
|
case TopRight: placement = "TopRight"; break;
|
||||||
|
case BottomRight: placement = "BottomRight"; break;
|
||||||
|
case CenterRight: default: placement = "CenterRight"; break;
|
||||||
|
}
|
||||||
|
config.setValue(s.str(), placement);
|
||||||
|
}
|
||||||
|
|
||||||
|
void Slit::setDirection(int d) {
|
||||||
|
m_direction = d;
|
||||||
|
ostrstream s;
|
||||||
|
s << "session.screen" << screen.getScreenNumber() << ".slit.direction" <<
|
||||||
|
ends;
|
||||||
|
config.setValue(s.str(),
|
||||||
|
m_direction == Horizontal ? "Horizontal" : "Vertical");
|
||||||
|
}
|
||||||
|
|
||||||
|
void Slit::load() {
|
||||||
|
std::ostrstream rscreen, rname, rclass;
|
||||||
|
std::string s;
|
||||||
|
bool b;
|
||||||
|
rscreen << "session.screen" << screen.getScreenNumber() << '.' << ends;
|
||||||
|
|
||||||
|
rname << rscreen.str() << "slit.placement" << ends;
|
||||||
|
rclass << rscreen.str() << "Slit.Placement" << ends;
|
||||||
|
if (config.getValue(rname.str(), rclass.str(), s)) {
|
||||||
|
cout << "getting " << s.c_str() << endl;
|
||||||
|
if (0 == strncasecmp(s.c_str(), "TopLeft", s.length()))
|
||||||
|
m_placement = TopLeft;
|
||||||
|
else if (0 == strncasecmp(s.c_str(), "CenterLeft", s.length()))
|
||||||
|
m_placement = CenterLeft;
|
||||||
|
else if (0 == strncasecmp(s.c_str(), "BottomLeft", s.length()))
|
||||||
|
m_placement = BottomLeft;
|
||||||
|
else if (0 == strncasecmp(s.c_str(), "TopCenter", s.length()))
|
||||||
|
m_placement = TopCenter;
|
||||||
|
else if (0 == strncasecmp(s.c_str(), "BottomCenter", s.length()))
|
||||||
|
m_placement = BottomCenter;
|
||||||
|
else if (0 == strncasecmp(s.c_str(), "TopRight", s.length()))
|
||||||
|
m_placement = TopRight;
|
||||||
|
else if (0 == strncasecmp(s.c_str(), "BottomRight", s.length()))
|
||||||
|
m_placement = BottomRight;
|
||||||
|
else if (0 == strncasecmp(s.c_str(), "CenterRight", s.length()))
|
||||||
|
m_placement = CenterRight;
|
||||||
|
}
|
||||||
|
|
||||||
|
rname.seekp(0); rclass.seekp(0);
|
||||||
|
rname << rscreen.str() << "slit.direction" << ends;
|
||||||
|
rclass << rscreen.str() << "Slit.Direction" << ends;
|
||||||
|
if (config.getValue(rname.str(), rclass.str(), s)) {
|
||||||
|
if (0 == strncasecmp(s.c_str(), "Horizontal", s.length()))
|
||||||
|
m_direction = Horizontal;
|
||||||
|
else if (0 == strncasecmp(s.c_str(), "Vertical", s.length()))
|
||||||
|
m_direction = Vertical;
|
||||||
|
}
|
||||||
|
|
||||||
|
rname.seekp(0); rclass.seekp(0);
|
||||||
|
rname << rscreen.str() << "slit.onTop" << ends;
|
||||||
|
rclass << rscreen.str() << "Slit.OnTop" << ends;
|
||||||
|
if (config.getValue(rname.str(), rclass.str(), b))
|
||||||
|
m_ontop = b;
|
||||||
|
|
||||||
|
rname.seekp(0); rclass.seekp(0);
|
||||||
|
rname << rscreen.str() << "slit.autoHide" << ends;
|
||||||
|
rclass << rscreen.str() << "Slit.AutoHide" << ends;
|
||||||
|
if (config.getValue(rname.str(), rclass.str(), b))
|
||||||
|
m_hidden = m_autohide = b;
|
||||||
|
}
|
||||||
|
|
||||||
void Slit::reconfigure(void) {
|
void Slit::reconfigure(void) {
|
||||||
|
load();
|
||||||
|
|
||||||
frame.area.setSize(0, 0);
|
frame.area.setSize(0, 0);
|
||||||
LinkedListIterator<SlitClient> it(clientList);
|
LinkedListIterator<SlitClient> it(clientList);
|
||||||
SlitClient *client;
|
SlitClient *client;
|
||||||
|
|
||||||
switch (screen.getSlitDirection()) {
|
switch (m_direction) {
|
||||||
case Vertical:
|
case Vertical:
|
||||||
for (client = it.current(); client; it++, client = it.current()) {
|
for (client = it.current(); client; it++, client = it.current()) {
|
||||||
frame.area.setH(frame.area.h() + client->height + screen.getBevelWidth());
|
frame.area.setH(frame.area.h() + client->height + screen.getBevelWidth());
|
||||||
|
@ -284,7 +386,7 @@ void Slit::reconfigure(void) {
|
||||||
int x, y;
|
int x, y;
|
||||||
it.reset();
|
it.reset();
|
||||||
|
|
||||||
switch (screen.getSlitDirection()) {
|
switch (m_direction) {
|
||||||
case Vertical:
|
case Vertical:
|
||||||
x = 0;
|
x = 0;
|
||||||
y = screen.getBevelWidth();
|
y = screen.getBevelWidth();
|
||||||
|
@ -364,10 +466,10 @@ void Slit::reconfigure(void) {
|
||||||
|
|
||||||
void Slit::reposition(void) {
|
void Slit::reposition(void) {
|
||||||
// place the slit in the appropriate place
|
// place the slit in the appropriate place
|
||||||
switch (screen.getSlitPlacement()) {
|
switch (m_placement) {
|
||||||
case TopLeft:
|
case TopLeft:
|
||||||
frame.area.setOrigin(0, 0);
|
frame.area.setOrigin(0, 0);
|
||||||
if (screen.getSlitDirection() == Vertical) {
|
if (m_direction == Vertical) {
|
||||||
frame.hidden = Point(screen.getBevelWidth() - screen.getBorderWidth()
|
frame.hidden = Point(screen.getBevelWidth() - screen.getBorderWidth()
|
||||||
- frame.area.w(), 0);
|
- frame.area.w(), 0);
|
||||||
} else {
|
} else {
|
||||||
|
@ -385,7 +487,7 @@ void Slit::reposition(void) {
|
||||||
case BottomLeft:
|
case BottomLeft:
|
||||||
frame.area.setOrigin(0, screen.size().h() - frame.area.h()
|
frame.area.setOrigin(0, screen.size().h() - frame.area.h()
|
||||||
- (screen.getBorderWidth() * 2));
|
- (screen.getBorderWidth() * 2));
|
||||||
if (screen.getSlitDirection() == Vertical)
|
if (m_direction == Vertical)
|
||||||
frame.hidden = Point(screen.getBevelWidth() - screen.getBorderWidth()
|
frame.hidden = Point(screen.getBevelWidth() - screen.getBorderWidth()
|
||||||
- frame.area.w(), frame.area.y());
|
- frame.area.w(), frame.area.y());
|
||||||
else
|
else
|
||||||
|
@ -410,7 +512,7 @@ void Slit::reposition(void) {
|
||||||
case TopRight:
|
case TopRight:
|
||||||
frame.area.setOrigin(screen.size().w() - frame.area.w()
|
frame.area.setOrigin(screen.size().w() - frame.area.w()
|
||||||
- (screen.getBorderWidth() * 2), 0);
|
- (screen.getBorderWidth() * 2), 0);
|
||||||
if (screen.getSlitDirection() == Vertical)
|
if (m_direction == Vertical)
|
||||||
frame.hidden = Point(screen.size().w() - screen.getBevelWidth()
|
frame.hidden = Point(screen.size().w() - screen.getBevelWidth()
|
||||||
- screen.getBorderWidth(), 0);
|
- screen.getBorderWidth(), 0);
|
||||||
else
|
else
|
||||||
|
@ -432,12 +534,12 @@ void Slit::reposition(void) {
|
||||||
- (screen.getBorderWidth() * 2),
|
- (screen.getBorderWidth() * 2),
|
||||||
screen.size().h() - frame.area.h()
|
screen.size().h() - frame.area.h()
|
||||||
- (screen.getBorderWidth() * 2));
|
- (screen.getBorderWidth() * 2));
|
||||||
if (screen.getSlitDirection() == Vertical)
|
if (m_direction == Vertical)
|
||||||
frame.hidden = Point(screen.size().w() - screen.getBevelWidth()
|
frame.hidden = Point(screen.size().w() - screen.getBevelWidth()
|
||||||
- screen.getBorderWidth(), frame.area.y());
|
- screen.getBorderWidth(), frame.area.y());
|
||||||
else
|
else
|
||||||
frame.hidden = Point(frame.area.x(), screen.size().h() - screen.getBevelWidth()
|
frame.hidden = Point(frame.area.x(), screen.size().h() -
|
||||||
- screen.getBorderWidth());
|
screen.getBevelWidth() - screen.getBorderWidth());
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -447,24 +549,26 @@ void Slit::reposition(void) {
|
||||||
tw = tbar->getWidth() + screen.getBorderWidth(),
|
tw = tbar->getWidth() + screen.getBorderWidth(),
|
||||||
th = tbar->getHeight() + screen.getBorderWidth();
|
th = tbar->getHeight() + screen.getBorderWidth();
|
||||||
|
|
||||||
if (tbar->getX() < frame.area.x() + sw && tbar->getX() + tw > frame.area.x() &&
|
if (tbar->getX() < frame.area.x() + sw &&
|
||||||
tbar->getY() < frame.area.y() + sh && tbar->getY() + th > frame.area.y()) {
|
tbar->getX() + tw > frame.area.x() &&
|
||||||
|
tbar->getY() < frame.area.y() + sh &&
|
||||||
|
tbar->getY() + th > frame.area.y()) {
|
||||||
if (frame.area.y() < th) {
|
if (frame.area.y() < th) {
|
||||||
frame.area.setY(frame.area.y() + tbar->getExposedHeight());
|
frame.area.setY(frame.area.y() + tbar->getExposedHeight());
|
||||||
if (screen.getSlitDirection() == Vertical)
|
if (m_direction == Vertical)
|
||||||
frame.hidden.setY(frame.hidden.y() + tbar->getExposedHeight());
|
frame.hidden.setY(frame.hidden.y() + tbar->getExposedHeight());
|
||||||
else
|
else
|
||||||
frame.hidden.setY(frame.area.y());
|
frame.hidden.setY(frame.area.y());
|
||||||
} else {
|
} else {
|
||||||
frame.area.setY(frame.area.y() - tbar->getExposedHeight());
|
frame.area.setY(frame.area.y() - tbar->getExposedHeight());
|
||||||
if (screen.getSlitDirection() == Vertical)
|
if (m_direction == Vertical)
|
||||||
frame.hidden.setY(frame.area.y() - tbar->getExposedHeight());
|
frame.hidden.setY(frame.area.y() - tbar->getExposedHeight());
|
||||||
else
|
else
|
||||||
frame.hidden.setY(frame.area.y());
|
frame.hidden.setY(frame.area.y());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (hidden)
|
if (m_hidden)
|
||||||
XMoveResizeWindow(display, frame.window, frame.hidden.x(),
|
XMoveResizeWindow(display, frame.window, frame.hidden.x(),
|
||||||
frame.hidden.y(), frame.area.w(), frame.area.h());
|
frame.hidden.y(), frame.area.w(), frame.area.h());
|
||||||
else
|
else
|
||||||
|
@ -482,10 +586,10 @@ void Slit::shutdown(void) {
|
||||||
void Slit::buttonPressEvent(XButtonEvent *e) {
|
void Slit::buttonPressEvent(XButtonEvent *e) {
|
||||||
if (e->window != frame.window) return;
|
if (e->window != frame.window) return;
|
||||||
|
|
||||||
if (e->button == Button1 && (! on_top)) {
|
if (e->button == Button1 && !m_ontop) {
|
||||||
Window w[1] = { frame.window };
|
Window w[1] = { frame.window };
|
||||||
screen.raiseWindows(w, 1);
|
screen.raiseWindows(w, 1);
|
||||||
} else if (e->button == Button2 && (! on_top)) {
|
} else if (e->button == Button2 && !m_ontop) {
|
||||||
XLowerWindow(display, frame.window);
|
XLowerWindow(display, frame.window);
|
||||||
} else if (e->button == Button3) {
|
} else if (e->button == Button3) {
|
||||||
if (! slitmenu->isVisible()) {
|
if (! slitmenu->isVisible()) {
|
||||||
|
@ -514,10 +618,10 @@ void Slit::buttonPressEvent(XButtonEvent *e) {
|
||||||
|
|
||||||
|
|
||||||
void Slit::enterNotifyEvent(XCrossingEvent *) {
|
void Slit::enterNotifyEvent(XCrossingEvent *) {
|
||||||
if (! do_auto_hide)
|
if (!m_autohide)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
if (hidden) {
|
if (m_hidden) {
|
||||||
if (! timer->isTiming()) timer->start();
|
if (! timer->isTiming()) timer->start();
|
||||||
} else {
|
} else {
|
||||||
if (timer->isTiming()) timer->stop();
|
if (timer->isTiming()) timer->stop();
|
||||||
|
@ -526,13 +630,13 @@ void Slit::enterNotifyEvent(XCrossingEvent *) {
|
||||||
|
|
||||||
|
|
||||||
void Slit::leaveNotifyEvent(XCrossingEvent *) {
|
void Slit::leaveNotifyEvent(XCrossingEvent *) {
|
||||||
if (! do_auto_hide)
|
if (!m_autohide)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
if (hidden) {
|
if (m_hidden) {
|
||||||
if (timer->isTiming()) timer->stop();
|
if (timer->isTiming()) timer->stop();
|
||||||
} else if (! slitmenu->isVisible()) {
|
} else if (! slitmenu->isVisible()) {
|
||||||
if (! timer->isTiming()) timer->start();
|
if (!timer->isTiming()) timer->start();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -577,8 +681,8 @@ void Slit::configureRequestEvent(XConfigureRequestEvent *e) {
|
||||||
|
|
||||||
|
|
||||||
void Slit::timeout(void) {
|
void Slit::timeout(void) {
|
||||||
hidden = ! hidden;
|
m_hidden = !m_hidden;
|
||||||
if (hidden)
|
if (m_hidden)
|
||||||
XMoveWindow(display, frame.window, frame.hidden.x(), frame.hidden.y());
|
XMoveWindow(display, frame.window, frame.hidden.x(), frame.hidden.y());
|
||||||
else
|
else
|
||||||
XMoveWindow(display, frame.window, frame.area.x(), frame.area.y());
|
XMoveWindow(display, frame.window, frame.area.x(), frame.area.y());
|
||||||
|
@ -601,8 +705,8 @@ Slitmenu::Slitmenu(Slit &sl) : Basemenu(sl.screen), slit(sl) {
|
||||||
|
|
||||||
update();
|
update();
|
||||||
|
|
||||||
if (slit.isOnTop()) setItemSelected(2, True);
|
if (slit.onTop()) setItemSelected(2, True);
|
||||||
if (slit.doAutoHide()) setItemSelected(3, True);
|
if (slit.autoHide()) setItemSelected(3, True);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -621,17 +725,17 @@ void Slitmenu::itemSelected(int button, int index) {
|
||||||
|
|
||||||
switch (item->function()) {
|
switch (item->function()) {
|
||||||
case 1: { // always on top
|
case 1: { // always on top
|
||||||
Bool change = ((slit.isOnTop()) ? False : True);
|
bool change = ((slit.onTop()) ? false : true);
|
||||||
slit.on_top = change;
|
slit.setOnTop(change);
|
||||||
setItemSelected(2, change);
|
setItemSelected(2, change);
|
||||||
|
|
||||||
if (slit.isOnTop()) slit.screen.raiseWindows((Window *) 0, 0);
|
if (slit.onTop()) slit.screen.raiseWindows((Window *) 0, 0);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
case 2: { // auto hide
|
case 2: { // auto hide
|
||||||
Bool change = ((slit.doAutoHide()) ? False : True);
|
Bool change = ((slit.autoHide()) ? false : true);
|
||||||
slit.do_auto_hide = change;
|
slit.setAutoHide(change);
|
||||||
setItemSelected(3, change);
|
setItemSelected(3, change);
|
||||||
|
|
||||||
break;
|
break;
|
||||||
|
@ -642,7 +746,7 @@ void Slitmenu::itemSelected(int button, int index) {
|
||||||
|
|
||||||
void Slitmenu::internal_hide(void) {
|
void Slitmenu::internal_hide(void) {
|
||||||
Basemenu::internal_hide();
|
Basemenu::internal_hide();
|
||||||
if (slit.doAutoHide())
|
if (slit.autoHide())
|
||||||
slit.timeout();
|
slit.timeout();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -667,7 +771,7 @@ Slitmenu::Directionmenu::Directionmenu(Slitmenu &sm)
|
||||||
|
|
||||||
update();
|
update();
|
||||||
|
|
||||||
if (sm.slit.screen.getSlitDirection() == Slit::Horizontal)
|
if (sm.slit.direction() == Slit::Horizontal)
|
||||||
setItemSelected(0, True);
|
setItemSelected(0, True);
|
||||||
else
|
else
|
||||||
setItemSelected(1, True);
|
setItemSelected(1, True);
|
||||||
|
@ -681,7 +785,7 @@ void Slitmenu::Directionmenu::itemSelected(int button, int index) {
|
||||||
BasemenuItem *item = find(index);
|
BasemenuItem *item = find(index);
|
||||||
if (! item) return;
|
if (! item) return;
|
||||||
|
|
||||||
slitmenu.slit.screen.saveSlitDirection(item->function());
|
slitmenu.slit.setDirection(item->function());
|
||||||
|
|
||||||
if (item->function() == Slit::Horizontal) {
|
if (item->function() == Slit::Horizontal) {
|
||||||
setItemSelected(0, True);
|
setItemSelected(0, True);
|
||||||
|
@ -735,10 +839,9 @@ void Slitmenu::Placementmenu::itemSelected(int button, int index) {
|
||||||
BasemenuItem *item = find(index);
|
BasemenuItem *item = find(index);
|
||||||
if (! (item && item->function())) return;
|
if (! (item && item->function())) return;
|
||||||
|
|
||||||
slitmenu.slit.screen.saveSlitPlacement(item->function());
|
slitmenu.slit.setPlacement(item->function());
|
||||||
hide();
|
hide();
|
||||||
slitmenu.slit.reconfigure();
|
slitmenu.slit.reconfigure();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
#endif // SLIT
|
#endif // SLIT
|
||||||
|
|
53
src/Slit.h
53
src/Slit.h
|
@ -70,17 +70,17 @@ private:
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
virtual void itemSelected(int, int);
|
virtual void itemSelected(int, int);
|
||||||
virtual void internal_hide(void);
|
virtual void internal_hide();
|
||||||
|
|
||||||
|
|
||||||
public:
|
public:
|
||||||
Slitmenu(Slit &);
|
Slitmenu(Slit &);
|
||||||
virtual ~Slitmenu(void);
|
virtual ~Slitmenu();
|
||||||
|
|
||||||
inline Basemenu *getDirectionmenu(void) { return directionmenu; }
|
inline Basemenu *getDirectionmenu() { return directionmenu; }
|
||||||
inline Basemenu *getPlacementmenu(void) { return placementmenu; }
|
inline Basemenu *getPlacementmenu() { return placementmenu; }
|
||||||
|
|
||||||
void reconfigure(void);
|
void reconfigure();
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
@ -94,11 +94,13 @@ private:
|
||||||
unsigned int width, height;
|
unsigned int width, height;
|
||||||
};
|
};
|
||||||
|
|
||||||
Bool on_top, hidden, do_auto_hide;
|
bool m_ontop, m_autohide, m_hidden;
|
||||||
|
int m_direction, m_placement;
|
||||||
Display *display;
|
Display *display;
|
||||||
|
|
||||||
Openbox &openbox;
|
Openbox &openbox;
|
||||||
BScreen &screen;
|
BScreen &screen;
|
||||||
|
Resource &config;
|
||||||
BTimer *timer;
|
BTimer *timer;
|
||||||
|
|
||||||
LinkedList<SlitClient> *clientList;
|
LinkedList<SlitClient> *clientList;
|
||||||
|
@ -108,8 +110,6 @@ private:
|
||||||
Pixmap pixmap;
|
Pixmap pixmap;
|
||||||
Window window;
|
Window window;
|
||||||
|
|
||||||
//int x, y, x_hidden, y_hidden;
|
|
||||||
//unsigned int width, height;
|
|
||||||
Rect area;
|
Rect area;
|
||||||
Point hidden;
|
Point hidden;
|
||||||
} frame;
|
} frame;
|
||||||
|
@ -121,42 +121,45 @@ private:
|
||||||
|
|
||||||
|
|
||||||
public:
|
public:
|
||||||
Slit(BScreen &);
|
Slit(BScreen &, Resource &);
|
||||||
virtual ~Slit();
|
virtual ~Slit();
|
||||||
|
|
||||||
inline const Bool &isOnTop(void) const { return on_top; }
|
|
||||||
inline const Bool &isHidden(void) const { return hidden; }
|
|
||||||
inline const Bool &doAutoHide(void) const { return do_auto_hide; }
|
|
||||||
|
|
||||||
inline Slitmenu *getMenu() { return slitmenu; }
|
inline Slitmenu *getMenu() { return slitmenu; }
|
||||||
|
|
||||||
inline const Window &getWindowID() const { return frame.window; }
|
inline const Window &getWindowID() const { return frame.window; }
|
||||||
|
|
||||||
//inline const int &getX(void) const
|
|
||||||
//{ return ((hidden) ? frame.x_hidden : frame.x); }
|
|
||||||
//inline const int &getY(void) const
|
|
||||||
//{ return ((hidden) ? frame.y_hidden : frame.y); }
|
|
||||||
inline const Point &origin() const { return frame.area.origin(); }
|
inline const Point &origin() const { return frame.area.origin(); }
|
||||||
|
|
||||||
//inline const unsigned int &getWidth(void) const { return frame.width; }
|
|
||||||
//inline const unsigned int &getHeight(void) const { return frame.height; }
|
|
||||||
inline const Size &size() const { return frame.area.size(); }
|
inline const Size &size() const { return frame.area.size(); }
|
||||||
|
|
||||||
inline const Rect &area() const { return frame.area; }
|
inline const Rect &area() const { return frame.area; }
|
||||||
|
|
||||||
void addClient(Window);
|
void addClient(Window);
|
||||||
void removeClient(SlitClient *, Bool = True);
|
void removeClient(SlitClient *, Bool = True);
|
||||||
void removeClient(Window, Bool = True);
|
void removeClient(Window, Bool = True);
|
||||||
void reconfigure(void);
|
void reconfigure();
|
||||||
void reposition(void);
|
void load();
|
||||||
void shutdown(void);
|
void reposition();
|
||||||
|
void shutdown();
|
||||||
|
|
||||||
void buttonPressEvent(XButtonEvent *);
|
void buttonPressEvent(XButtonEvent *);
|
||||||
void enterNotifyEvent(XCrossingEvent *);
|
void enterNotifyEvent(XCrossingEvent *);
|
||||||
void leaveNotifyEvent(XCrossingEvent *);
|
void leaveNotifyEvent(XCrossingEvent *);
|
||||||
void configureRequestEvent(XConfigureRequestEvent *);
|
void configureRequestEvent(XConfigureRequestEvent *);
|
||||||
|
|
||||||
virtual void timeout(void);
|
virtual void timeout();
|
||||||
|
|
||||||
|
inline bool isHidden() const { return m_hidden; }
|
||||||
|
|
||||||
|
inline bool onTop() const { return m_ontop; }
|
||||||
|
void setOnTop(bool);
|
||||||
|
|
||||||
|
inline bool autoHide() const { return m_autohide; }
|
||||||
|
void setAutoHide(bool);
|
||||||
|
|
||||||
|
inline int placement() const { return m_placement; }
|
||||||
|
void setPlacement(int);
|
||||||
|
|
||||||
|
inline int direction() const { return m_direction; }
|
||||||
|
void setDirection(int);
|
||||||
|
|
||||||
enum { Vertical = 1, Horizontal };
|
enum { Vertical = 1, Horizontal };
|
||||||
enum { TopLeft = 1, CenterLeft, BottomLeft, TopCenter, BottomCenter,
|
enum { TopLeft = 1, CenterLeft, BottomLeft, TopCenter, BottomCenter,
|
||||||
|
|
|
@ -179,6 +179,7 @@ Openbox::Openbox(int m_argc, char **m_argv, char *dpy_name, char *rc)
|
||||||
rc_file = bstrdup(rc);
|
rc_file = bstrdup(rc);
|
||||||
}
|
}
|
||||||
config.setFile(rc_file);
|
config.setFile(rc_file);
|
||||||
|
config.load();
|
||||||
|
|
||||||
no_focus = False;
|
no_focus = False;
|
||||||
|
|
||||||
|
@ -209,7 +210,7 @@ Openbox::Openbox(int m_argc, char **m_argv, char *dpy_name, char *rc)
|
||||||
|
|
||||||
screenList = new LinkedList<BScreen>;
|
screenList = new LinkedList<BScreen>;
|
||||||
for (int i = 0; i < getNumberOfScreens(); i++) {
|
for (int i = 0; i < getNumberOfScreens(); i++) {
|
||||||
BScreen *screen = new BScreen(*this, i);
|
BScreen *screen = new BScreen(*this, i, config);
|
||||||
|
|
||||||
if (! screen->isScreenManaged()) {
|
if (! screen->isScreenManaged()) {
|
||||||
delete screen;
|
delete screen;
|
||||||
|
@ -994,33 +995,6 @@ void Openbox::save_rc(void) {
|
||||||
char rc_string[1024];
|
char rc_string[1024];
|
||||||
const int screen_number = screen->getScreenNumber();
|
const int screen_number = screen->getScreenNumber();
|
||||||
|
|
||||||
char *placement = (char *) 0;
|
|
||||||
|
|
||||||
switch (screen->getSlitPlacement()) {
|
|
||||||
case Slit::TopLeft: placement = "TopLeft"; break;
|
|
||||||
case Slit::CenterLeft: placement = "CenterLeft"; break;
|
|
||||||
case Slit::BottomLeft: placement = "BottomLeft"; break;
|
|
||||||
case Slit::TopCenter: placement = "TopCenter"; break;
|
|
||||||
case Slit::BottomCenter: placement = "BottomCenter"; break;
|
|
||||||
case Slit::TopRight: placement = "TopRight"; break;
|
|
||||||
case Slit::BottomRight: placement = "BottomRight"; break;
|
|
||||||
case Slit::CenterRight: default: placement = "CenterRight"; break;
|
|
||||||
}
|
|
||||||
sprintf(rc_string, "session.screen%d.slit.placement", screen_number);
|
|
||||||
config.setValue(rc_string, placement);
|
|
||||||
|
|
||||||
sprintf(rc_string, "session.screen%d.slit.direction", screen_number);
|
|
||||||
config.setValue(rc_string,
|
|
||||||
screen->getSlitDirection() == Slit::Horizontal ?
|
|
||||||
"Horizontal" : "Vertical");
|
|
||||||
|
|
||||||
sprintf(rc_string, "session.screen%d.slit.onTop", screen_number);
|
|
||||||
config.setValue(rc_string, screen->getSlit()->isOnTop() ? "True" : "False");
|
|
||||||
|
|
||||||
sprintf(rc_string, "session.screen%d.slit.autoHide", screen_number);
|
|
||||||
config.setValue(rc_string, screen->getSlit()->doAutoHide() ?
|
|
||||||
"True" : "False");
|
|
||||||
|
|
||||||
config.setValue("session.opaqueMove",
|
config.setValue("session.opaqueMove",
|
||||||
(screen->doOpaqueMove()) ? "True" : "False");
|
(screen->doOpaqueMove()) ? "True" : "False");
|
||||||
config.setValue("session.imageDither",
|
config.setValue("session.imageDither",
|
||||||
|
@ -1045,6 +1019,7 @@ void Openbox::save_rc(void) {
|
||||||
screen->getColPlacementDirection() == BScreen::TopBottom ?
|
screen->getColPlacementDirection() == BScreen::TopBottom ?
|
||||||
"TopToBottom" : "BottomToTop");
|
"TopToBottom" : "BottomToTop");
|
||||||
|
|
||||||
|
const char *placement;
|
||||||
switch (screen->getPlacementPolicy()) {
|
switch (screen->getPlacementPolicy()) {
|
||||||
case BScreen::CascadePlacement: placement = "CascadePlacement"; break;
|
case BScreen::CascadePlacement: placement = "CascadePlacement"; break;
|
||||||
case BScreen::BestFitPlacement: placement = "BestFitPlacement"; break;
|
case BScreen::BestFitPlacement: placement = "BestFitPlacement"; break;
|
||||||
|
@ -1388,51 +1363,6 @@ void Openbox::load_rc(BScreen *screen) {
|
||||||
screen->savePlacementPolicy(BScreen::RowSmartPlacement);
|
screen->savePlacementPolicy(BScreen::RowSmartPlacement);
|
||||||
|
|
||||||
#ifdef SLIT
|
#ifdef SLIT
|
||||||
sprintf(name_lookup, "session.screen%d.slit.placement", screen_number);
|
|
||||||
sprintf(class_lookup, "Session.Screen%d.Slit.Placement", screen_number);
|
|
||||||
if (config.getValue(name_lookup, class_lookup, s)) {
|
|
||||||
if (0 == strncasecmp(s.c_str(), "TopLeft", s.length()))
|
|
||||||
screen->saveSlitPlacement(Slit::TopLeft);
|
|
||||||
else if (0 == strncasecmp(s.c_str(), "CenterLeft", s.length()))
|
|
||||||
screen->saveSlitPlacement(Slit::CenterLeft);
|
|
||||||
else if (0 == strncasecmp(s.c_str(), "BottomLeft", s.length()))
|
|
||||||
screen->saveSlitPlacement(Slit::BottomLeft);
|
|
||||||
else if (0 == strncasecmp(s.c_str(), "TopCenter", s.length()))
|
|
||||||
screen->saveSlitPlacement(Slit::TopCenter);
|
|
||||||
else if (0 == strncasecmp(s.c_str(), "BottomCenter", s.length()))
|
|
||||||
screen->saveSlitPlacement(Slit::BottomCenter);
|
|
||||||
else if (0 == strncasecmp(s.c_str(), "TopRight", s.length()))
|
|
||||||
screen->saveSlitPlacement(Slit::TopRight);
|
|
||||||
else if (0 == strncasecmp(s.c_str(), "BottomRight", s.length()))
|
|
||||||
screen->saveSlitPlacement(Slit::BottomRight);
|
|
||||||
else
|
|
||||||
screen->saveSlitPlacement(Slit::CenterRight);
|
|
||||||
} else
|
|
||||||
screen->saveSlitPlacement(Slit::CenterRight);
|
|
||||||
|
|
||||||
sprintf(name_lookup, "session.screen%d.slit.direction", screen_number);
|
|
||||||
sprintf(class_lookup, "Session.Screen%d.Slit.Direction", screen_number);
|
|
||||||
if (config.getValue(name_lookup, class_lookup, s)) {
|
|
||||||
if (0 == strncasecmp(s.c_str(), "Horizontal", s.length()))
|
|
||||||
screen->saveSlitDirection(Slit::Horizontal);
|
|
||||||
else
|
|
||||||
screen->saveSlitDirection(Slit::Vertical);
|
|
||||||
} else
|
|
||||||
screen->saveSlitDirection(Slit::Vertical);
|
|
||||||
|
|
||||||
sprintf(name_lookup, "session.screen%d.slit.onTop", screen_number);
|
|
||||||
sprintf(class_lookup, "Session.Screen%d.Slit.OnTop", screen_number);
|
|
||||||
if (config.getValue(name_lookup, class_lookup, b))
|
|
||||||
screen->saveSlitOnTop((Bool)b);
|
|
||||||
else
|
|
||||||
screen->saveSlitOnTop(False);
|
|
||||||
|
|
||||||
sprintf(name_lookup, "session.screen%d.slit.autoHide", screen_number);
|
|
||||||
sprintf(class_lookup, "Session.Screen%d.Slit.AutoHide", screen_number);
|
|
||||||
if (config.getValue(name_lookup, class_lookup, b))
|
|
||||||
screen->saveSlitAutoHide((Bool)b);
|
|
||||||
else
|
|
||||||
screen->saveSlitAutoHide(False);
|
|
||||||
#endif // SLIT
|
#endif // SLIT
|
||||||
|
|
||||||
#ifdef HAVE_STRFTIME
|
#ifdef HAVE_STRFTIME
|
||||||
|
|
Loading…
Reference in a new issue