X-Git-Url: https://git.brokenzipper.com/gitweb?a=blobdiff_plain;f=src%2FToolbar.cc;h=8a3ea6b2828acea09a5d0cbd2394fcc9a9e01513;hb=90e7db977fc94e4a3c1ae5689f1998d9723d4c71;hp=59b92ee101637fb4aa44a4ffc0723f14260420ec;hpb=89563281384c34886fb12b169d1bdf8d293f0b48;p=chaz%2Fopenbox diff --git a/src/Toolbar.cc b/src/Toolbar.cc index 59b92ee1..8a3ea6b2 100644 --- a/src/Toolbar.cc +++ b/src/Toolbar.cc @@ -62,14 +62,12 @@ # endif // HAVE_SYS_TIME_H #endif // TIME_WITH_SYS_TIME -#ifdef HAVE_SSTREAM -# include -#endif // HAVE_SSTREAM - +#include #include +using std::ends; -Toolbar::Toolbar(BScreen &scrn, Resource &conf) : screen(scrn), - openbox(scrn.getOpenbox()), config(conf) +Toolbar::Toolbar(BScreen &scrn, Resource &conf) : openbox(scrn.getOpenbox()), + screen(scrn), config(conf) { load(); @@ -217,30 +215,35 @@ Toolbar::~Toolbar() { void Toolbar::setOnTop(bool b) { m_ontop = b; - std::ostringstream s; - s << "session.screen" << screen.getScreenNumber() << ".toolbar.onTop"; + std::ostrstream s; + s << "session.screen" << screen.getScreenNumber() << ".toolbar.onTop" << ends; config.setValue(s.str(), m_ontop ? "True" : "False"); + s.rdbuf()->freeze(0); } void Toolbar::setAutoHide(bool b) { m_autohide = b; - std::ostringstream s; - s << "session.screen" << screen.getScreenNumber() << ".toolbar.autoHide"; + std::ostrstream s; + s << "session.screen" << screen.getScreenNumber() << ".toolbar.autoHide" + << ends; config.setValue(s.str(), m_autohide ? "True" : "False"); + s.rdbuf()->freeze(0); } void Toolbar::setWidthPercent(int w) { m_width_percent = w; - std::ostringstream s; + std::ostrstream s; s << "session.screen" << screen.getScreenNumber() << ".toolbar.widthPercent" - ; + << ends; config.setValue(s.str(), m_width_percent); + s.rdbuf()->freeze(0); } void Toolbar::setPlacement(int p) { m_placement = p; - std::ostringstream s; - s << "session.screen" << screen.getScreenNumber() << ".toolbar.placement"; + std::ostrstream s; + s << "session.screen" << screen.getScreenNumber() << ".toolbar.placement" + << ends; const char *placement; switch (m_placement) { case TopLeft: placement = "TopLeft"; break; @@ -251,6 +254,7 @@ void Toolbar::setPlacement(int p) { case BottomCenter: default: placement = "BottomCenter"; break; } config.setValue(s.str(), placement); + s.rdbuf()->freeze(0); } void Toolbar::save() { @@ -261,22 +265,23 @@ void Toolbar::save() { } void Toolbar::load() { - std::ostringstream rscreen, rname, rclass; + std::ostrstream rscreen, rname, rclass; std::string s; bool b; long l; - rscreen << "session.screen" << screen.getScreenNumber() << '.'; + rscreen << "session.screen" << screen.getScreenNumber() << '.' << ends; - rname << rscreen.str() << "toolbar.widthPercent"; - rclass << rscreen.str() << "Toolbar.WidthPercent"; + rname << rscreen.str() << "toolbar.widthPercent" << ends; + rclass << rscreen.str() << "Toolbar.WidthPercent" << ends; if (config.getValue(rname.str(), rclass.str(), l) && (l > 0 && l <= 100)) m_width_percent = l; else m_width_percent =66; rname.seekp(0); rclass.seekp(0); - rname << rscreen.str() << "toolbar.placement"; - rclass << rscreen.str() << "Toolbar.Placement"; + rname.rdbuf()->freeze(0); rclass.rdbuf()->freeze(0); + rname << rscreen.str() << "toolbar.placement" << ends; + rclass << rscreen.str() << "Toolbar.Placement" << ends; if (config.getValue(rname.str(), rclass.str(), s)) { if (0 == strncasecmp(s.c_str(), "TopLeft", s.length())) m_placement = TopLeft; @@ -294,20 +299,25 @@ void Toolbar::load() { m_placement = BottomCenter; rname.seekp(0); rclass.seekp(0); - rname << rscreen.str() << "toolbar.onTop"; - rclass << rscreen.str() << "Toolbar.OnTop"; + rname.rdbuf()->freeze(0); rclass.rdbuf()->freeze(0); + rname << rscreen.str() << "toolbar.onTop" << ends; + rclass << rscreen.str() << "Toolbar.OnTop" << ends; if (config.getValue(rname.str(), rclass.str(), b)) m_ontop = b; else m_ontop = false; rname.seekp(0); rclass.seekp(0); - rname << rscreen.str() << "toolbar.autoHide"; - rclass << rscreen.str() << "Toolbar.AutoHide"; + rname.rdbuf()->freeze(0); rclass.rdbuf()->freeze(0); + rname << rscreen.str() << "toolbar.autoHide" << ends; + rclass << rscreen.str() << "Toolbar.AutoHide" << ends; if (config.getValue(rname.str(), rclass.str(), b)) m_hidden = m_autohide = b; else m_hidden = m_autohide = false; + + rscreen.rdbuf()->freeze(0); + rname.rdbuf()->freeze(0); rclass.rdbuf()->freeze(0); } void Toolbar::reconfigure() { @@ -714,11 +724,13 @@ void Toolbar::checkClock(Bool redraw, Bool date) { void Toolbar::redrawWindowLabel(Bool redraw) { - if (screen.getOpenbox().getFocusedWindow()) { + OpenboxWindow *foc = screen.getOpenbox().focusedWindow(); + if (foc == (OpenboxWindow *) 0) { + XClearWindow(display, frame.window_label); + } else { if (redraw) XClearWindow(display, frame.window_label); - OpenboxWindow *foc = screen.getOpenbox().getFocusedWindow(); if (foc->getScreen() != &screen) return; int dx = (frame.bevel_w * 2), dlen = strlen(*foc->getTitle()); @@ -770,8 +782,6 @@ void Toolbar::redrawWindowLabel(Bool redraw) { else XDrawString(display, frame.window_label, style->w_text_gc, dx, (style->font->ascent + 1), *foc->getTitle(), dlen); - } else { - XClearWindow(display, frame.window_label); } } @@ -961,14 +971,12 @@ void Toolbar::edit() { return; XSetInputFocus(display, frame.workspace_label, - ((screen.sloppyFocus()) ? RevertToPointerRoot : - RevertToParent), - CurrentTime); + RevertToPointerRoot, CurrentTime); XClearWindow(display, frame.workspace_label); openbox.setNoFocus(True); - if (openbox.getFocusedWindow()) - openbox.getFocusedWindow()->setFocusFlag(False); + if (openbox.focusedWindow()) + openbox.focusedWindow()->setFocusFlag(False); XDrawRectangle(display, frame.workspace_label, screen.getWindowStyle()->l_text_focus_gc, @@ -1143,12 +1151,12 @@ void Toolbar::keyPressEvent(XKeyEvent *ke) { m_editing = False; openbox.setNoFocus(False); - if (openbox.getFocusedWindow()) { - openbox.getFocusedWindow()->setInputFocus(); - openbox.getFocusedWindow()->setFocusFlag(True); - } else { - XSetInputFocus(display, PointerRoot, None, CurrentTime); - } + if (openbox.focusedWindow()) { + openbox.focusedWindow()->setInputFocus(); + openbox.focusedWindow()->setFocusFlag(True); + } else + openbox.focusWindow((OpenboxWindow *) 0); + // check to make sure that new_name[0] != 0... otherwise we have a null // workspace name which causes serious problems, especially for the // Openbox::LoadRC() method.