X-Git-Url: https://git.dogcows.com/gitweb?a=blobdiff_plain;ds=sidebyside;f=src%2FScreen.cc;h=2ff2ce4d67bf1d95118b4746de26ebb5d39127a1;hb=20bc088a998a362977233086577d74d00eea8765;hp=a05c23865ee8380d0a1f565d2bd3e45ebad79069;hpb=08d793bb796f608774d6fdefd1950df54477e2c6;p=chaz%2Fopenbox diff --git a/src/Screen.cc b/src/Screen.cc index a05c2386..2ff2ce4d 100644 --- a/src/Screen.cc +++ b/src/Screen.cc @@ -106,7 +106,7 @@ static int anotherWMRunning(Display *display, XErrorEvent *) { BScreen::BScreen(Blackbox *bb, unsigned int scrn) : ScreenInfo(bb, scrn) { blackbox = bb; - screenstr = (string)"session.screen" + itostring(scrn) + '.'; + screenstr = "session.screen" + itostring(scrn) + '.'; config = blackbox->getConfig(); xatom = blackbox->getXAtom(); @@ -132,6 +132,8 @@ BScreen::BScreen(Blackbox *bb, unsigned int scrn) : ScreenInfo(bb, scrn) { resource.mstyle.t_font = resource.mstyle.f_font = resource.tstyle.font = resource.wstyle.font = (BFont *) 0; + geom_pixmap = None; + xatom->setSupported(this); // set-up netwm support #ifdef HAVE_GETPID xatom->setValue(getRootWindow(), XAtom::blackbox_pid, XAtom::cardinal, @@ -386,6 +388,13 @@ void BScreen::saveFocusLast(bool f) { } +void BScreen::saveAAFonts(bool f) { + resource.aa_fonts = f; + reconfigure(); + config->setValue(screenstr + "antialiasFonts", resource.aa_fonts); +} + + void BScreen::saveHideToolbar(bool h) { resource.hide_toolbar = h; if (resource.hide_toolbar) @@ -495,6 +504,7 @@ void BScreen::save_rc(void) { saveSloppyFocus(resource.sloppy_focus); saveAutoRaise(resource.auto_raise); saveImageDither(doImageDither()); + saveAAFonts(resource.aa_fonts); saveOpaqueMove(resource.opaque_move); saveFullMax(resource.full_max); saveFocusNew(resource.focus_new); @@ -538,6 +548,9 @@ void BScreen::load_rc(void) { if (! config->getValue(screenstr + "opaqueMove", resource.opaque_move)) resource.opaque_move = false; + if (! config->getValue(screenstr + "antialiasFonts", resource.aa_fonts)) + resource.aa_fonts = true; + if (! config->getValue(screenstr + "hideToolbar", resource.hide_toolbar)) resource.hide_toolbar = false; @@ -725,7 +738,7 @@ void BScreen::rereadMenu(void) { void BScreen::LoadStyle(void) { - Configuration style; + Configuration style(False); const char *sfile = blackbox->getStyleFilename(); if (sfile != NULL) { @@ -737,6 +750,9 @@ void BScreen::LoadStyle(void) { } } + // merge in the rc file + style.merge(config->file(), True); + string s; // load fonts/fontsets @@ -751,10 +767,10 @@ void BScreen::LoadStyle(void) { resource.wstyle.font = resource.tstyle.font = resource.mstyle.f_font = resource.mstyle.t_font = (BFont *) 0; - resource.wstyle.font = readDatabaseFont("window.font", style); - resource.tstyle.font = readDatabaseFont("toolbar.font", style); - resource.mstyle.t_font = readDatabaseFont("menu.title.font", style); - resource.mstyle.f_font = readDatabaseFont("menu.frame.font", style); + resource.wstyle.font = readDatabaseFont("window.", style); + resource.tstyle.font = readDatabaseFont("toolbar.", style); + resource.mstyle.t_font = readDatabaseFont("menu.title.", style); + resource.mstyle.f_font = readDatabaseFont("menu.frame.", style); // load window config resource.wstyle.t_focus = @@ -2006,7 +2022,7 @@ Workspace* BScreen::getWorkspace(unsigned int index) { } -void BScreen::buttonPressEvent(XButtonEvent *xbutton) { +void BScreen::buttonPressEvent(const XButtonEvent *xbutton) { if (xbutton->button == 1) { if (! isRootColormapInstalled()) image_control->installRootColormap(); @@ -2071,6 +2087,9 @@ void BScreen::buttonPressEvent(XButtonEvent *xbutton) { void BScreen::toggleFocusModel(FocusModel model) { + std::for_each(windowList.begin(), windowList.end(), + std::mem_fun(&BlackboxWindow::ungrabButtons)); + if (model == SloppyFocus) { saveSloppyFocus(True); } else { @@ -2080,14 +2099,8 @@ void BScreen::toggleFocusModel(FocusModel model) { saveSloppyFocus(False); } - updateFocusModel(); -} - - -void BScreen::updateFocusModel() -{ - std::for_each(workspacesList.begin(), workspacesList.end(), - std::mem_fun(&Workspace::updateFocusModel)); + std::for_each(windowList.begin(), windowList.end(), + std::mem_fun(&BlackboxWindow::grabButtons)); } @@ -2135,13 +2148,38 @@ BColor BScreen::readDatabaseColor(const string &rname, } -BFont *BScreen::readDatabaseFont(const string &rname, +BFont *BScreen::readDatabaseFont(const string &rbasename, const Configuration &style) { string fontname; string s; - style.getValue(rname, s); // if this fails, a blank string will be used, - // which will cause the fallback font to load. + +#ifdef XFT + int i; + if (style.getValue(rbasename + "xft.font", s) && + style.getValue(rbasename + "xft.size", i)) { + string family = s; + bool bold = False; + bool italic = False; + if (style.getValue(rbasename + "xft.flags", s)) { + if (s.find("bold") != string::npos) + bold = True; + if (s.find("italic") != string::npos) + italic = True; + } + + BFont *b = new BFont(blackbox->getXDisplay(), this, family, i, bold, + italic, resource.aa_fonts); + if (b->valid()) + return b; + else + delete b; // fall back to the normal X font stuff + } +#endif // XFT + + style.getValue(rbasename + "font", s); + // if this fails, a blank string will be used, which will cause the fallback + // font to load. BFont *b = new BFont(blackbox->getXDisplay(), this, s); if (! b->valid())