X-Git-Url: https://git.brokenzipper.com/gitweb?a=blobdiff_plain;f=src%2FScreen.cc;h=eb93320638f98ba4b999d2994043b562646d1a49;hb=87e63d53af67d5ea98f55a27007663d4c9c8fc6c;hp=987f923bd41eb04845131d9baed5714d76c03795;hpb=e0d619e309a7fe6de1524b2574ecc9d77aee5a35;p=chaz%2Fopenbox diff --git a/src/Screen.cc b/src/Screen.cc index 987f923b..eb933206 100644 --- a/src/Screen.cc +++ b/src/Screen.cc @@ -429,15 +429,15 @@ void BScreen::saveFocusLast(bool f) { void BScreen::saveAAFonts(bool f) { resource.aa_fonts = f; - reconfigure(); config->setValue(screenstr + "antialiasFonts", resource.aa_fonts); + reconfigure(); } void BScreen::saveShadowFonts(bool f) { resource.shadow_fonts = f; - reconfigure(); config->setValue(screenstr + "dropShadowFonts", resource.shadow_fonts); + reconfigure(); } @@ -709,12 +709,13 @@ void BScreen::load_rc(void) { if (! config->getValue(screenstr + "opaqueMove", resource.opaque_move)) resource.opaque_move = false; - if (! config->getValue(screenstr + "dropShadowFonts", resource.shadow_fonts)) - resource.shadow_fonts = false; - if (! config->getValue(screenstr + "antialiasFonts", resource.aa_fonts)) resource.aa_fonts = true; + if (! resource.aa_fonts || + ! config->getValue(screenstr + "dropShadowFonts", resource.shadow_fonts)) + resource.shadow_fonts = false; + if (! config->getValue(screenstr + "resizeZones", resource.resize_zones) || (resource.resize_zones != 1 && resource.resize_zones != 2 && resource.resize_zones != 4)) @@ -1064,6 +1065,12 @@ void BScreen::LoadStyle(void) { resource.wstyle.b_pressed = readDatabaseTexture("window.button.pressed", "black", style); + //if neither of these can be found, we will use the previous resource + resource.wstyle.b_pressed_focus = + readDatabaseTexture("window.button.pressed.focus", "black", style, true); + resource.wstyle.b_pressed_unfocus = + readDatabaseTexture("window.button.pressed.unfocus", "black", style, true); + #ifdef BITMAPBUTTONS if (resource.wstyle.close_button.mask != None) XFreePixmap(blackbox->getXDisplay(), resource.wstyle.close_button.mask); @@ -1753,6 +1760,9 @@ void BScreen::raiseWindows(Window *workspace_stack, unsigned int num) { #ifdef XINERAMA ++bbwins; #endif // XINERAMA +#ifdef XFT + ++bbwins; +#endif // XFT Window *session_stack = new Window[(num + workspacesList.size() + rootmenuList.size() + @@ -1776,6 +1786,9 @@ void BScreen::raiseWindows(Window *workspace_stack, unsigned int num) { #ifdef XINERAMA *(session_stack + i++) = configmenu->getXineramamenu()->getWindowID(); #endif // XINERAMA +#ifdef XFT + *(session_stack + i++) = configmenu->getXftmenu()->getWindowID(); +#endif // XFT *(session_stack + i++) = configmenu->getWindowID(); *(session_stack + i++) = slit->getMenu()->getDirectionmenu()->getWindowID(); @@ -1867,8 +1880,7 @@ void BScreen::propagateWindowName(const BlackboxWindow *bw) { if (bw->isIconic()) { iconmenu->changeItemLabel(bw->getWindowNumber(), bw->getIconTitle()); iconmenu->update(); - } - else { + } else { Clientmenu *clientmenu = getWorkspace(bw->getWorkspaceNumber())->getMenu(); clientmenu->changeItemLabel(bw->getWindowNumber(), bw->getTitle()); clientmenu->update(); @@ -1879,36 +1891,28 @@ void BScreen::propagateWindowName(const BlackboxWindow *bw) { } -void BScreen::nextFocus(void) { +void BScreen::nextFocus(void) const { BlackboxWindow *focused = blackbox->getFocusedWindow(), *next = focused; - if (focused) { - // if window is not on this screen, ignore it - if (focused->getScreen()->getScreenNumber() != getScreenNumber()) - focused = (BlackboxWindow*) 0; - } - - if (focused && current_workspace->getCount() > 1) { - // next is the next window to recieve focus, current is a place holder - BlackboxWindow *current; + if (focused && + focused->getScreen()->getScreenNumber() == getScreenNumber() && + current_workspace->getCount() > 1) { do { - current = next; - next = current_workspace->getNextWindowInList(current); - } while(! next->setInputFocus() && next != focused); + next = current_workspace->getNextWindowInList(next); + } while (next != focused && ! next->setInputFocus()); if (next != focused) current_workspace->raiseWindow(next); - } else if (current_workspace->getCount() >= 1) { + } else if (current_workspace->getCount() > 0) { next = current_workspace->getTopWindowOnStack(); - - current_workspace->raiseWindow(next); next->setInputFocus(); + current_workspace->raiseWindow(next); } } -void BScreen::prevFocus(void) { +void BScreen::prevFocus(void) const { BlackboxWindow *focused = blackbox->getFocusedWindow(), *next = focused; @@ -1917,27 +1921,26 @@ void BScreen::prevFocus(void) { if (focused->getScreen()->getScreenNumber() != getScreenNumber()) focused = (BlackboxWindow*) 0; } - - if (focused && current_workspace->getCount() > 1) { - // next is the next window to recieve focus, current is a place holder - BlackboxWindow *current; + + if (focused && + focused->getScreen()->getScreenNumber() == getScreenNumber() && + current_workspace->getCount() > 1) { + // next is the next window to receive focus, current is a place holder do { - current = next; - next = current_workspace->getPrevWindowInList(current); - } while(! next->setInputFocus() && next != focused); + next = current_workspace->getPrevWindowInList(next); + } while (next != focused && ! next->setInputFocus()); if (next != focused) current_workspace->raiseWindow(next); - } else if (current_workspace->getCount() >= 1) { + } else if (current_workspace->getCount() > 0) { next = current_workspace->getTopWindowOnStack(); - - current_workspace->raiseWindow(next); next->setInputFocus(); + current_workspace->raiseWindow(next); } } -void BScreen::raiseFocus(void) { +void BScreen::raiseFocus(void) const { BlackboxWindow *focused = blackbox->getFocusedWindow(); if (! focused) return; @@ -2311,7 +2314,8 @@ bool BScreen::parseMenuFile(FILE *file, Rootmenu *menu) { for (; it != end; ++it) { const string& fname = *it; - if (fname[fname.size()-1] == '~') + //ignore backups and dot files + if (fname[fname.size()-1] == '~' || fname[0] == '.') continue; string style = stylesdir; @@ -2525,7 +2529,7 @@ void BScreen::updateAvailableArea(void) { } -Workspace* BScreen::getWorkspace(unsigned int index) { +Workspace* BScreen::getWorkspace(unsigned int index) const { assert(index < workspacesList.size()); return workspacesList[index]; } @@ -2674,12 +2678,15 @@ void BScreen::readDatabaseMask(const string &rname, PixmapMask &pixmapMask, BTexture BScreen::readDatabaseTexture(const string &rname, const string &default_color, - const Configuration &style) { + const Configuration &style, + bool allowNoTexture) { BTexture texture; string s; if (style.getValue(rname, s)) texture = BTexture(s); + else if (allowNoTexture) //no default + texture.setTexture(BTexture::NoTexture); else texture.setTexture(BTexture::Solid | BTexture::Flat); @@ -2687,12 +2694,15 @@ BTexture BScreen::readDatabaseTexture(const string &rname, texture.setDisplay(getBaseDisplay(), getScreenNumber()); texture.setImageControl(image_control); - texture.setColor(readDatabaseColor(rname + ".color", default_color, style)); - texture.setColorTo(readDatabaseColor(rname + ".colorTo", default_color, + if (texture.texture() != BTexture::NoTexture) { + texture.setColor(readDatabaseColor(rname + ".color", default_color, style)); - texture.setBorderColor(readDatabaseColor(rname + ".borderColor", - default_color, style)); - + texture.setColorTo(readDatabaseColor(rname + ".colorTo", default_color, + style)); + texture.setBorderColor(readDatabaseColor(rname + ".borderColor", + default_color, style)); + } + return texture; } @@ -2723,15 +2733,35 @@ BFont *BScreen::readDatabaseFont(const string &rbasename, string family = s; bool bold = False; bool italic = False; + bool dropShadow = False; + if (style.getValue(rbasename + "xft.flags", s)) { if (s.find("bold") != string::npos) bold = True; if (s.find("italic") != string::npos) italic = True; + if (s.find("shadow") != string::npos) + dropShadow = True; } + unsigned char offset = 1; + if (style.getValue(rbasename + "xft.shadow.offset", s)) { + offset = atoi(s.c_str()); //doesn't detect errors + if (offset > CHAR_MAX) + offset = 1; + } + + int tint = 25; + if (style.getValue(rbasename + "xft.shadow.tint", s)) { + tint = atoi(s.c_str()); + } + + if (tint > 100) tint = 100; + if (tint < -100) tint = -100; + BFont *b = new BFont(blackbox->getXDisplay(), this, family, i, bold, - italic, resource.shadow_fonts, resource.aa_fonts); + italic, dropShadow && resource.shadow_fonts, offset, + tint, resource.aa_fonts); if (b->valid()) return b; else