X-Git-Url: https://git.dogcows.com/gitweb?a=blobdiff_plain;f=src%2FScreen.cc;h=23638ae906f3ea86786d8972ca61d50e643bb5c7;hb=478771552533b63ff6c0dda136bca5e6b1701c91;hp=919ea9b62960979dd1da495c0df78c4483409f27;hpb=341c4e04ffc5572dc02563df914dc65a0a57b9f3;p=chaz%2Fopenbox diff --git a/src/Screen.cc b/src/Screen.cc index 919ea9b6..23638ae9 100644 --- a/src/Screen.cc +++ b/src/Screen.cc @@ -21,9 +21,7 @@ // FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER // DEALINGS IN THE SOFTWARE. -#ifdef HAVE_CONFIG_H -# include "../config.h" -#endif // HAVE_CONFIG_H +#include "../config.h" extern "C" { #include @@ -86,6 +84,7 @@ using std::string; #include "Window.hh" #include "Workspace.hh" #include "Workspacemenu.hh" +#include "XAtom.hh" #ifndef FONT_ELEMENT_SIZE #define FONT_ELEMENT_SIZE 50 @@ -110,6 +109,7 @@ BScreen::BScreen(Blackbox *bb, unsigned int scrn) : ScreenInfo(bb, scrn) { blackbox = bb; screenstr = (string)"session.screen" + itostring(scrn) + '.'; config = blackbox->getConfig(); + xatom = blackbox->getXAtom(); event_mask = ColormapChangeMask | EnterWindowMask | PropertyChangeMask | SubstructureRedirectMask | ButtonPressMask | ButtonReleaseMask; @@ -135,13 +135,10 @@ BScreen::BScreen(Blackbox *bb, unsigned int scrn) : ScreenInfo(bb, scrn) { resource.mstyle.t_font = resource.mstyle.f_font = resource.tstyle.font = resource.wstyle.font = (XFontStruct *) 0; + xatom->setSupported(this); // set-up netwm support #ifdef HAVE_GETPID - pid_t bpid = getpid(); - - XChangeProperty(blackbox->getXDisplay(), getRootWindow(), - blackbox->getBlackboxPidAtom(), XA_CARDINAL, - sizeof(pid_t) * 8, PropModeReplace, - (unsigned char *) &bpid, 1); + xatom->setValue(getRootWindow(), XAtom::blackbox_pid, XAtom::Type_Cardinal, + (unsigned long) getpid()); #endif // HAVE_GETPID XDefineCursor(blackbox->getXDisplay(), getRootWindow(), @@ -408,6 +405,16 @@ void BScreen::saveFocusLast(bool f) { } +void BScreen::saveHideToolbar(bool h) { + resource.hide_toolbar = h; + if (resource.hide_toolbar) + toolbar->unmapToolbar(); + else + toolbar->mapToolbar(); + config->setValue(screenstr + "hideToolbar", resource.hide_toolbar); +} + + void BScreen::saveWorkspaces(unsigned int w) { resource.workspaces = w; config->setValue(screenstr + "workspaces", resource.workspaces); @@ -493,6 +500,7 @@ void BScreen::save_rc(void) { saveFullMax(resource.full_max); saveFocusNew(resource.focus_new); saveFocusLast(resource.focus_last); + saveHideToolbar(resource.hide_toolbar); saveWorkspaces(resource.workspaces); savePlacementPolicy(resource.placement_policy); saveEdgeSnapThreshold(resource.edge_snap_threshold); @@ -529,6 +537,9 @@ void BScreen::load_rc(void) { if (! config->getValue(screenstr + "opaqueMove", resource.opaque_move)) resource.opaque_move = false; + if (! config->getValue(screenstr + "hideToolbar", resource.hide_toolbar)) + resource.hide_toolbar = false; + if (! config->getValue(screenstr + "imageDither", b)) b = true; image_control->setDither(b); @@ -949,7 +960,7 @@ BlackboxWindow *BScreen::getIcon(unsigned int index) { unsigned int BScreen::addWorkspace(void) { Workspace *wkspc = new Workspace(this, workspacesList.size()); workspacesList.push_back(wkspc); - saveWorkspaces(getWorkspaceCount() + 1); + saveWorkspaces(getWorkspaceCount()); saveWorkspaceNames(); workspacemenu->insert(wkspc->getName(), wkspc->getMenu(), @@ -981,7 +992,7 @@ unsigned int BScreen::removeLastWorkspace(void) { workspacesList.pop_back(); delete wkspc; - saveWorkspaces(getWorkspaceCount() - 1); + saveWorkspaces(getWorkspaceCount()); saveWorkspaceNames(); toolbar->reconfigure(); @@ -1056,6 +1067,13 @@ void BScreen::unmanageWindow(BlackboxWindow *w, bool remap) { removeNetizen(w->getClientWindow()); + /* + some managed windows can also be window group controllers. when + unmanaging such windows, we should also delete the window group. + */ + BWindowGroup *group = blackbox->searchGroup(w->getClientWindow()); + delete group; + delete w; }