From 8ccfea478c63b48f9475e3b1816b8c3b904a50ef Mon Sep 17 00:00:00 2001 From: fluxgen <fluxgen> Date: Wed, 8 May 2002 14:12:28 +0000 Subject: fixed slit saving and some clean up --- src/Slit.cc | 90 ++++++++++++++++++++++++++++++++++++------------------------- 1 file changed, 53 insertions(+), 37 deletions(-) diff --git a/src/Slit.cc b/src/Slit.cc index 45ec396..48345c9 100644 --- a/src/Slit.cc +++ b/src/Slit.cc @@ -19,7 +19,7 @@ // FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER // DEALINGS IN THE SOFTWARE. -// $Id: Slit.cc,v 1.12 2002/04/08 22:26:58 fluxgen Exp $ +// $Id: Slit.cc,v 1.13 2002/05/08 14:12:28 fluxgen Exp $ //use GNU extensions #ifndef _GNU_SOURCE @@ -44,7 +44,7 @@ #include <algorithm> -Slit::Slit(BScreen *scr):screen(scr), timer(this), slitmenu(this) { +Slit::Slit(BScreen *scr):screen(scr), timer(this), slitmenu(*this) { fluxbox = Fluxbox::instance(); on_top = screen->isSlitOnTop(); @@ -96,6 +96,10 @@ Slit::~Slit() { void Slit::addClient(Window w) { + //Can't add non existent window + if (w == None) + return; + fluxbox->grab(); if (fluxbox->validateWindow(w)) { SlitClient *client = new SlitClient; @@ -660,8 +664,9 @@ void Slit::timeout(void) { } -Slitmenu::Slitmenu(Slit *sl) : Basemenu(sl->screen) { - slit = sl; +Slitmenu::Slitmenu(Slit &sl) : Basemenu(sl.screen), +slit(sl) { + I18n *i18n = I18n::instance(); using namespace FBNLS; setLabel(i18n->getMessage( @@ -672,7 +677,7 @@ Slitmenu::Slitmenu(Slit *sl) : Basemenu(sl->screen) { directionmenu = new Directionmenu(this); placementmenu = new Placementmenu(this); #ifdef XINERAMA - if (slit->screen->hasXinerama()) { // only create if we need + if (screen()->hasXinerama()) { // only create if we need headmenu = new Headmenu(this); } #endif // XINERAMA @@ -688,7 +693,7 @@ Slitmenu::Slitmenu(Slit *sl) : Basemenu(sl->screen) { #ifdef XINERAMA //TODO: NLS - if (slit->screen->hasXinerama()) { + if (screen()->hasXinerama()) { insert(i18n->getMessage(0, 0, "Place on Head"), headmenu); } #endif // XINERAMA @@ -700,10 +705,11 @@ Slitmenu::Slitmenu(Slit *sl) : Basemenu(sl->screen) { CommonSet, CommonAutoHide, "Auto hide"), 2); + setItemSelected(2, slit.isOnTop()); + setItemSelected(3, slit.doAutoHide()); + update(); - if (slit->isOnTop()) setItemSelected(2, true); - if (slit->doAutoHide()) setItemSelected(3, true); } @@ -711,7 +717,7 @@ Slitmenu::~Slitmenu(void) { delete directionmenu; delete placementmenu; #ifdef XINERAMA - if (slit->screen->hasXinerama()) { + if (screen()->hasXinerama()) { delete headmenu; } #endif // XINERAMA @@ -726,33 +732,37 @@ void Slitmenu::itemSelected(int button, unsigned int index) { switch (item->function()) { case 1: // always on top { - bool change = ((slit->isOnTop()) ? false : true); - slit->on_top = change; + bool change = ((slit.isOnTop()) ? false : true); + slit.on_top = change; + screen()->saveSlitOnTop(change); setItemSelected(2, change); - - if (slit->isOnTop()) - slit->screen->raiseWindows((Window *) 0, 0); + if (slit.isOnTop()) + screen()->raiseWindows(0, 0); + break; } case 2: // auto hide { - bool change = ((slit->doAutoHide()) ? false : true); - slit->do_auto_hide = change; + bool change = (slit.doAutoHide() ? false : true); + slit.do_auto_hide = change; + screen()->saveSlitAutoHide(change); setItemSelected(3, change); - break; } } + //save the new configuration + Fluxbox::instance()->save_rc(); + update(); } } void Slitmenu::internal_hide(void) { Basemenu::internal_hide(); - if (slit->doAutoHide()) - slit->timeout(); + if (slit.doAutoHide()) + slit.timeout(); } @@ -760,17 +770,20 @@ void Slitmenu::reconfigure(void) { directionmenu->reconfigure(); placementmenu->reconfigure(); #ifdef XINERAMA - if (slit->screen->hasXinerama()) { + if (screen()->hasXinerama()) { headmenu->reconfigure(); } #endif // XINERAMA + setItemSelected(2, slit.isOnTop()); + setItemSelected(3, slit.doAutoHide()); Basemenu::reconfigure(); } -Slitmenu::Directionmenu::Directionmenu(Slitmenu *sm) : Basemenu(sm->slit->screen) { - slitmenu = sm; +Slitmenu::Directionmenu::Directionmenu(Slitmenu *sm) : Basemenu(sm->screen()), +slitmenu(sm) { + I18n *i18n = I18n::instance(); using namespace FBNLS; setLabel(i18n->getMessage( @@ -789,7 +802,7 @@ Slitmenu::Directionmenu::Directionmenu(Slitmenu *sm) : Basemenu(sm->slit->screen update(); - if (sm->slit->screen->getSlitDirection() == Slit::HORIZONTAL) + if (screen()->getSlitDirection() == Slit::HORIZONTAL) setItemSelected(0, true); else setItemSelected(1, true); @@ -801,7 +814,7 @@ void Slitmenu::Directionmenu::itemSelected(int button, unsigned int index) { BasemenuItem *item = find(index); if (! item) return; - slitmenu->slit->screen->saveSlitDirection(item->function()); + screen()->saveSlitDirection(item->function()); if (item->function() == Slit::HORIZONTAL) { setItemSelected(0, true); @@ -810,15 +823,16 @@ void Slitmenu::Directionmenu::itemSelected(int button, unsigned int index) { setItemSelected(0, false); setItemSelected(1, true); } - - hide(); - slitmenu->slit->reconfigure(); + Fluxbox::instance()->save_rc(); + hide(); + slitmenu->slit.reconfigure(); } } -Slitmenu::Placementmenu::Placementmenu(Slitmenu *sm) : Basemenu(sm->slit->screen) { - slitmenu = sm; +Slitmenu::Placementmenu::Placementmenu(Slitmenu *sm) : Basemenu(sm->screen()), +slitmenu(sm) { + I18n *i18n = I18n::instance(); using namespace FBNLS; setLabel(i18n->getMessage( @@ -871,24 +885,25 @@ void Slitmenu::Placementmenu::itemSelected(int button, unsigned int index) { if (! item) return; if (item->function()) { - slitmenu->slit->screen->saveSlitPlacement(item->function()); + screen()->saveSlitPlacement(item->function()); hide(); - slitmenu->slit->reconfigure(); + slitmenu->slit.reconfigure(); + Fluxbox::instance()->save_rc(); } } } #ifdef XINERAMA -Slitmenu::Headmenu::Headmenu(Slitmenu *sm) - : Basemenu(sm->slit->screen) { - slitmenu = sm; +Slitmenu::Headmenu::Headmenu(Slitmenu *sm): Basemenu(sm->screen()), +slitmenu(sm) { + I18n *i18n = I18n::instance(); setLabel(i18n->getMessage(0, 0, "Place on Head")); //TODO: NLS setInternalMenu(); - int numHeads = slitmenu->slit->screen->getNumHeads(); + int numHeads = screen()->getNumHeads(); // fill menu with head entries for (int i = 0; i < numHeads; i++) { char headName[32]; @@ -905,9 +920,10 @@ void Slitmenu::Headmenu::itemSelected(int button, unsigned int index) { if (! item) return; - slitmenu->slit->screen->saveSlitOnHead(item->function()); + screen()->saveSlitOnHead(item->function()); hide(); - slitmenu->slit->reconfigure(); + slitmenu->slit.reconfigure(); + Fluxbox::instance()->save_rc(); } } -- cgit v0.11.2