X-Git-Url: https://git.brokenzipper.com/gitweb?a=blobdiff_plain;f=src%2FScreen.cc;h=eb93320638f98ba4b999d2994043b562646d1a49;hb=9af642d29918e8b36d7f1fd17e4c771662d4fe97;hp=5d860bd70c21afd564c9d5cebec714c37334bf53;hpb=c2d992a35c11b8212bf390528d9828a815e8b5fd;p=chaz%2Fopenbox diff --git a/src/Screen.cc b/src/Screen.cc index 5d860bd7..eb933206 100644 --- a/src/Screen.cc +++ b/src/Screen.cc @@ -339,6 +339,7 @@ BScreen::~BScreen(void) { if (resource.tstyle.font) delete resource.tstyle.font; +#ifdef BITMAPBUTTONS if (resource.wstyle.close_button.mask != None) XFreePixmap(blackbox->getXDisplay(), resource.wstyle.close_button.mask); if (resource.wstyle.max_button.mask != None) @@ -363,6 +364,7 @@ BScreen::~BScreen(void) { resource.wstyle.stick_button.mask = None; resource.tstyle.left_button.mask = resource.tstyle.right_button.mask = None; resource.mstyle.bullet_image.mask = resource.mstyle.tick_image.mask = None; +#endif // BITMAPBUTTONS XFreeGC(blackbox->getXDisplay(), opGC); } @@ -427,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(); } @@ -707,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)) @@ -1062,6 +1065,13 @@ 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); if (resource.wstyle.max_button.mask != None) @@ -1075,14 +1085,15 @@ void BScreen::LoadStyle(void) { resource.wstyle.icon_button.mask = resource.wstyle.icon_button.mask = None; - readDatabaseMask("window.button.close_mask", resource.wstyle.close_button, + readDatabaseMask("window.button.close.mask", resource.wstyle.close_button, style); - readDatabaseMask("window.button.max_mask", resource.wstyle.max_button, + readDatabaseMask("window.button.max.mask", resource.wstyle.max_button, style); - readDatabaseMask("window.button.icon_mask", resource.wstyle.icon_button, + readDatabaseMask("window.button.icon.mask", resource.wstyle.icon_button, style); - readDatabaseMask("window.button.stick_mask", resource.wstyle.stick_button, + readDatabaseMask("window.button.stick.mask", resource.wstyle.stick_button, style); +#endif // BITMAPBUTTONS // we create the window.frame texture by hand because it exists only to // make the code cleaner and is not actually used for display @@ -1124,10 +1135,12 @@ void BScreen::LoadStyle(void) { resource.wstyle.h_unfocus = resource.wstyle.f_unfocus; // load toolbar config +#ifdef BITMAPBUTTONS if (resource.tstyle.left_button.mask != None) XFreePixmap(blackbox->getXDisplay(), resource.tstyle.left_button.mask); if (resource.tstyle.right_button.mask != None) XFreePixmap(blackbox->getXDisplay(), resource.tstyle.right_button.mask); +#endif // BITMAPBUTTONS resource.tstyle.toolbar = readDatabaseTexture("toolbar", "black", style); @@ -1149,10 +1162,13 @@ void BScreen::LoadStyle(void) { readDatabaseColor("toolbar.clock.textColor", "white", style); resource.tstyle.b_pic = readDatabaseColor("toolbar.button.picColor", "black", style); - readDatabaseMask("toolbar.button.left_mask", resource.tstyle.left_button, + +#ifdef BITMAPBUTTONS + readDatabaseMask("toolbar.button.left.mask", resource.tstyle.left_button, style); - readDatabaseMask("toolbar.button.right_mask", resource.tstyle.right_button, + readDatabaseMask("toolbar.button.right.mask", resource.tstyle.right_button, style); +#endif // BITMAPBUTTONS resource.tstyle.justify = LeftJustify; if (style.getValue("toolbar.justify", s)) { @@ -1171,10 +1187,12 @@ void BScreen::LoadStyle(void) { } // load menu config +#ifdef BITMAPBUTTONS if (resource.mstyle.bullet_image.mask != None) XFreePixmap(blackbox->getXDisplay(), resource.mstyle.bullet_image.mask); if (resource.mstyle.tick_image.mask != None) XFreePixmap(blackbox->getXDisplay(), resource.mstyle.tick_image.mask); +#endif // BITMAPBUTTONS resource.mstyle.title = readDatabaseTexture("menu.title", "white", style); @@ -1190,8 +1208,11 @@ void BScreen::LoadStyle(void) { readDatabaseColor("menu.frame.disableColor", "black", style); resource.mstyle.h_text = readDatabaseColor("menu.hilite.textColor", "black", style); - readDatabaseMask("menu.bullet.mask", resource.mstyle.bullet_image, style); + +#ifdef BITMAPBUTTONS + readDatabaseMask("menu.arrow.mask", resource.mstyle.bullet_image, style); readDatabaseMask("menu.selected.mask", resource.mstyle.tick_image, style); +#endif // BITMAPBUTTONS resource.mstyle.t_justify = LeftJustify; if (style.getValue("menu.title.justify", s)) { @@ -1739,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() + @@ -1762,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(); @@ -1853,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(); @@ -1865,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; @@ -1903,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; @@ -2297,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; @@ -2511,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]; } @@ -2629,6 +2647,7 @@ void BScreen::toggleFocusModel(FocusModel model) { std::mem_fun(&BlackboxWindow::grabButtons)); } +#ifdef BITMAPBUTTONS void BScreen::readDatabaseMask(const string &rname, PixmapMask &pixmapMask, const Configuration &style) { string s; @@ -2655,15 +2674,19 @@ void BScreen::readDatabaseMask(const string &rname, PixmapMask &pixmapMask, pixmapMask.mask = None; pixmapMask.w = pixmapMask.h = 0; } +#endif // BITMAPSUCCESS 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); @@ -2671,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; } @@ -2707,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