bool static writeConfig(KConfig *cfg, const Options &opts, const Options &def, bool exportingStyle=false) { if(!cfg) { const char *xdg=xdgConfigFolder(); if(xdg) { char filename[QTC_MAX_FILENAME_LEN]; sprintf(filename, "%s/"QTC_FILE, xdg); #if QT_VERSION >= 0x040000 KConfig defCfg(filename, KConfig::OnlyLocal); #else KConfig defCfg(filename, false, false); #endif return writeConfig(&defCfg, opts, def, exportingStyle); } } else { #if QT_VERSION >= 0x040000 KConfigGroup config(cfg, QTC_GROUP); #else cfg->setGroup(QTC_GROUP); #endif CFG_WRITE_ENTRY(round) CFG_WRITE_ENTRY_D(highlightFactor) CFG_WRITE_ENTRY(toolbarBorders) CFG_WRITE_ENTRY_FORCE(appearance) CFG_WRITE_ENTRY(fixParentlessDialogs) CFG_WRITE_ENTRY(stripedProgress) CFG_WRITE_ENTRY(animatedProgress) CFG_WRITE_ENTRY(lighterPopupMenuBgnd) CFG_WRITE_ENTRY(embolden) CFG_WRITE_ENTRY(defBtnIndicator) CFG_WRITE_ENTRY_B(sliderThumbs, true) CFG_WRITE_ENTRY_B(handles, false) CFG_WRITE_ENTRY(highlightTab) CFG_WRITE_ENTRY_SHADE(shadeSliders, false, false) CFG_WRITE_ENTRY_SHADE(shadeMenubars, true, false) CFG_WRITE_ENTRY_SHADE(shadeCheckRadio, false, true) CFG_WRITE_ENTRY_FORCE(menubarAppearance) CFG_WRITE_ENTRY_FORCE(menuitemAppearance) CFG_WRITE_ENTRY_FORCE(toolbarAppearance) CFG_WRITE_ENTRY_B(toolbarSeparators, true) CFG_WRITE_ENTRY_B(splitters, false) CFG_WRITE_ENTRY(customMenuTextColor) CFG_WRITE_ENTRY(coloredMouseOver) CFG_WRITE_ENTRY(menubarMouseOver) CFG_WRITE_ENTRY(shadeMenubarOnlyWhenActive) CFG_WRITE_ENTRY(thinnerMenuItems) CFG_WRITE_ENTRY(customSlidersColor) CFG_WRITE_ENTRY(customMenubarsColor) CFG_WRITE_ENTRY(customMenuSelTextColor) CFG_WRITE_ENTRY(customMenuNormTextColor) CFG_WRITE_ENTRY(customCheckRadioColor) CFG_WRITE_ENTRY(scrollbarType) CFG_WRITE_ENTRY(shadowButtons) CFG_WRITE_ENTRY_FORCE(lvAppearance) CFG_WRITE_ENTRY_FORCE(tabAppearance) CFG_WRITE_ENTRY_FORCE(sliderAppearance) CFG_WRITE_ENTRY_FORCE(progressAppearance) #ifndef QTC_PLAIN_FOCUS_ONLY CFG_WRITE_ENTRY(stdFocus) #endif CFG_WRITE_ENTRY(lvLines) CFG_WRITE_ENTRY(drawStatusBarFrames) CFG_WRITE_ENTRY(fillSlider) CFG_WRITE_ENTRY(roundMbTopOnly) CFG_WRITE_ENTRY(borderMenuitems) CFG_WRITE_ENTRY(gradientPbGroove) CFG_WRITE_ENTRY(darkerBorders) CFG_WRITE_ENTRY(vArrows) #ifdef __cplusplus CFG_WRITE_ENTRY(stdSidebarButtons) #endif cfg->sync(); return true; } return false; }
bool QtCurveHandler::readConfig(bool compositingToggled) { QtCurveConfig oldConfig=m_config; KConfig configFile("kwinqtcurverc"); const KConfigGroup config(&configFile, "General"); QFontMetrics fm(m_titleFont); // active font = inactive font int oldSize=m_titleHeight, oldToolSize=m_titleHeightTool; bool changedBorder=false; // The title should stretch with bigger font sizes! m_titleHeight = qMax(16, fm.height() + 4); // 4 px for the shadow etc. // have an even title/button size so the button icons are fully centered... if (m_titleHeight%2 == 0) m_titleHeight++; fm = QFontMetrics(m_titleFontTool); // active font = inactive font // The title should stretch with bigger font sizes! m_titleHeightTool = qMax(13, fm.height()); // don't care about the shadow etc. // have an even title/button size so the button icons are fully centered... if (m_titleHeightTool%2 == 0) m_titleHeightTool++; m_config.load(&configFile); #if KDE_IS_VERSION(4, 3, 85) static bool borderHack=false; if(borderHack) { m_config.setOuterBorder(KWindowSystem::compositingActive() ? QtCurveConfig::SHADE_NONE : (m_config.customShadows() ? QtCurveConfig::SHADE_SHADOW : QtCurveConfig::SHADE_DARK)); changedBorder=true; borderHack=false; } else if(compositingToggled && !m_config.outerBorder() && (m_config.borderSize()<QtCurveConfig::BORDER_TINY || (wStyle()->pixelMetric((QStyle::PixelMetric)QtC_WindowBorder, 0L, 0L)&WINDOW_BORDER_COLOR_TITLEBAR_ONLY))) { QDBusConnection::sessionBus().send(QDBusMessage::createSignal("/KWin", "org.kde.KWin", "reloadConfig")); borderHack=true; } #endif m_titleHeight+=2*titleBarPad(); QFile in(xdgConfigFolder() + "/qtcurve/" BORDER_SIZE_FILE); int prevSize(-1), prevToolSize(-1), prevSide(-1), prevBot(-1); if(in.open(QIODevice::ReadOnly)) { QTextStream stream(&in); prevSize=in.readLine().toInt(); prevToolSize=in.readLine().toInt(); prevBot=in.readLine().toInt(); prevSide=in.readLine().toInt(); in.close(); } setBorderSize(); int borderEdge=borderEdgeSize()*2; bool borderSizesChanged=prevSize!=(m_titleHeight+borderEdge) || prevToolSize!=(m_titleHeightTool+borderEdge) || prevBot!=borderSize(true) || prevSide!=borderSize(false); if(borderSizesChanged) { KSaveFile sizeFile(xdgConfigFolder() + "/qtcurve/" BORDER_SIZE_FILE); if (sizeFile.open()) { QTextStream stream(&sizeFile); stream << m_titleHeight+borderEdge << endl << m_titleHeightTool+borderEdge << endl << borderSize(true) << endl << borderSize(false) << endl; stream.flush(); sizeFile.finalize(); sizeFile.close(); } } #if KDE_IS_VERSION(4, 3, 0) bool shadowChanged(false); if(customShadows()) { QtCurveShadowConfiguration actShadow(QPalette::Active), inactShadow(QPalette::Inactive); actShadow.load(&configFile); inactShadow.load(&configFile); shadowChanged=m_shadowCache.shadowConfigurationChanged(actShadow) || m_shadowCache.shadowConfigurationChanged(inactShadow); m_shadowCache.setShadowConfiguration(actShadow); m_shadowCache.setShadowConfiguration(inactShadow); if(shadowChanged || oldConfig.roundBottom()!=roundBottom()) m_shadowCache.reset(); } #endif if(m_dBus && (borderSizesChanged || changedBorder)) { m_dBus->emitBorderSizes(); // KDE4 apps... borderSizeChanged(); // Gtk2 apps... } return changedBorder || oldSize!=m_titleHeight || oldToolSize!=m_titleHeightTool || #if KDE_IS_VERSION(4, 3, 0) shadowChanged || #endif m_config!=oldConfig; }
static bool readConfig(const char *file, Options *opts, Options *def) #endif { #ifdef __cplusplus if(file.isEmpty()) { const char *xdg=xdgConfigFolder(); if(xdg) { QString filename(xdg); filename+="/"QTC_FILE; return readConfig(filename, opts, def); } } #else if(!file) { const char *xdg=xdgConfigFolder(); if(xdg) { char filename[QTC_MAX_FILENAME_LEN]; sprintf(filename, "%s/"QTC_FILE, xdg); return readConfig(filename, opts, def); } } #endif else { #ifdef __cplusplus QtCConfig cfg(file); if(cfg.ok()) { #else GHashTable *cfg=loadConfig(file); if(cfg) { #endif QTC_CFG_READ_ROUND(round) QTC_CFG_READ_DI(highlightFactor) QTC_CFG_READ_TB_BORDER(toolbarBorders) QTC_CFG_READ_APPEARANCE(appearance, def->appearance) QTC_CFG_READ_BOOL(fixParentlessDialogs) QTC_CFG_READ_BOOL(stripedProgress) QTC_CFG_READ_BOOL(animatedProgress) QTC_CFG_READ_BOOL(lighterPopupMenuBgnd) QTC_CFG_READ_BOOL(embolden) QTC_CFG_READ_DEF_BTN(defBtnIndicator) QTC_CFG_READ_LINE(sliderThumbs) QTC_CFG_READ_LINE(handles) QTC_CFG_READ_BOOL(highlightTab) QTC_CFG_READ_SHADE(shadeSliders, false) QTC_CFG_READ_SHADE(shadeMenubars, true) QTC_CFG_READ_SHADE(shadeCheckRadio, false) QTC_CFG_READ_APPEARANCE(menubarAppearance, def->menubarAppearance) QTC_CFG_READ_APPEARANCE(menuitemAppearance, opts->appearance) QTC_CFG_READ_APPEARANCE(toolbarAppearance, def->toolbarAppearance) QTC_CFG_READ_LINE(toolbarSeparators) QTC_CFG_READ_LINE(splitters) QTC_CFG_READ_BOOL(customMenuTextColor) QTC_CFG_READ_MOUSE_OVER(coloredMouseOver) QTC_CFG_READ_BOOL(menubarMouseOver) QTC_CFG_READ_BOOL(shadeMenubarOnlyWhenActive) QTC_CFG_READ_BOOL(thinnerMenuItems) QTC_CFG_READ_COLOR(customSlidersColor) QTC_CFG_READ_COLOR(customMenubarsColor) QTC_CFG_READ_COLOR(customMenuSelTextColor) QTC_CFG_READ_COLOR(customMenuNormTextColor) QTC_CFG_READ_COLOR(customCheckRadioColor) QTC_CFG_READ_SCROLLBAR(scrollbarType) QTC_CFG_READ_BOOL(shadowButtons) QTC_CFG_READ_APPEARANCE(lvAppearance, opts->appearance) QTC_CFG_READ_APPEARANCE(tabAppearance, opts->appearance) QTC_CFG_READ_APPEARANCE(sliderAppearance, opts->appearance) QTC_CFG_READ_APPEARANCE(progressAppearance, opts->appearance) #ifndef QTC_PLAIN_FOCUS_ONLY QTC_CFG_READ_BOOL(stdFocus) #endif QTC_CFG_READ_BOOL(lvLines) QTC_CFG_READ_BOOL(drawStatusBarFrames) QTC_CFG_READ_BOOL(fillSlider) QTC_CFG_READ_BOOL(roundMbTopOnly) QTC_CFG_READ_BOOL(borderMenuitems) QTC_CFG_READ_BOOL(gradientPbGroove) QTC_CFG_READ_BOOL(darkerBorders) QTC_CFG_READ_BOOL(vArrows) QTC_CFG_READ_BOOL(colorMenubarMouseOver) #ifdef __cplusplus QTC_CFG_READ_BOOL(stdSidebarButtons) QTC_CFG_READ_BOOL(gtkScrollViews); QTC_CFG_READ_BOOL(gtkComboMenus); #endif #ifndef QTC_COMMON_ONLY_COVERTERS QTC_CFG_READ_SHADING(shading, SHADING_HSL); #endif #ifndef __cplusplus releaseConfig(cfg); #endif if(SHADE_SELECTED==opts->shadeCheckRadio) opts->shadeCheckRadio=SHADE_BLEND_SELECTED; checkColor(&opts->shadeMenubars, &opts->customMenubarsColor); checkColor(&opts->shadeSliders, &opts->customSlidersColor); checkColor(&opts->shadeCheckRadio, &opts->customCheckRadioColor); if(APPEARANCE_BEVELLED==opts->toolbarAppearance) opts->toolbarAppearance=APPEARANCE_GRADIENT; else if(APPEARANCE_RAISED==opts->toolbarAppearance) opts->toolbarAppearance=APPEARANCE_FLAT; if(APPEARANCE_BEVELLED==opts->menubarAppearance) opts->menubarAppearance=APPEARANCE_GRADIENT; else if(APPEARANCE_RAISED==opts->menubarAppearance) opts->menubarAppearance=APPEARANCE_FLAT; if(APPEARANCE_BEVELLED==opts->sliderAppearance) opts->sliderAppearance=APPEARANCE_GRADIENT; if(APPEARANCE_BEVELLED==opts->tabAppearance) opts->tabAppearance=APPEARANCE_GRADIENT; if(opts->highlightFactor<((100.0+MIN_HIGHLIGHT_FACTOR)/100.0) || opts->highlightFactor>((100.0+MAX_HIGHLIGHT_FACTOR)/100.0)) opts->highlightFactor=DEFAULT_HIGHLIGHT_FACTOR; if(opts->animatedProgress && !opts->stripedProgress) opts->animatedProgress=false; if(SHADE_CUSTOM==opts->shadeMenubars || SHADE_BLEND_SELECTED==opts->shadeMenubars || !opts->borderMenuitems) opts->colorMenubarMouseOver=true; return true; } } return false; } static bool fileExists(const char *path) { struct stat info; return 0==lstat(path, &info) && (info.st_mode&S_IFMT)==S_IFREG; } static const char * getSystemConfigFile() { static const char * constFiles[]={ "/etc/qt4/"QTC_FILE, "/etc/qt3/"QTC_FILE, "/etc/qt/"QTC_FILE, NULL }; int i; for(i=0; constFiles[i]; ++i) if(fileExists(constFiles[i])) return constFiles[i]; return NULL; } static void defaultSettings(Options *opts) { /* Set hard-coded defaults... */ opts->contrast=7; opts->highlightFactor=DEFAULT_HIGHLIGHT_FACTOR; opts->round=ROUND_FULL; opts->lighterPopupMenuBgnd=true; opts->animatedProgress=true; opts->stripedProgress=true; opts->highlightTab=true; opts->embolden=false; opts->appearance=APPEARANCE_DULL_GLASS; opts->lvAppearance=APPEARANCE_BEVELLED; opts->tabAppearance=APPEARANCE_GRADIENT; opts->sliderAppearance=APPEARANCE_DULL_GLASS; opts->menubarAppearance=APPEARANCE_GRADIENT; opts->menuitemAppearance=APPEARANCE_DULL_GLASS; opts->toolbarAppearance=APPEARANCE_GRADIENT; opts->progressAppearance=APPEARANCE_DULL_GLASS; opts->defBtnIndicator=IND_COLORED; opts->sliderThumbs=LINE_DOTS; opts->handles=LINE_DOTS; opts->shadeSliders=SHADE_BLEND_SELECTED; opts->shadeMenubars=SHADE_DARKEN; opts->shadeCheckRadio=SHADE_NONE; opts->toolbarBorders=TB_NONE; opts->toolbarSeparators=LINE_DOTS; opts->splitters=LINE_DOTS; opts->fixParentlessDialogs=false; opts->customMenuTextColor=false; opts->coloredMouseOver=MO_PLASTIK; opts->menubarMouseOver=true; opts->shadeMenubarOnlyWhenActive=true; opts->thinnerMenuItems=false; opts->scrollbarType=SCROLLBAR_KDE; opts->shadowButtons=true; #ifndef QTC_PLAIN_FOCUS_ONLY opts->stdFocus=true; #endif opts->lvLines=false; opts->drawStatusBarFrames=false; opts->fillSlider=true; opts->roundMbTopOnly=true; opts->borderMenuitems=true; opts->gradientPbGroove=true; opts->darkerBorders=false; opts->vArrows=false; opts->colorMenubarMouseOver=false; #ifdef __cplusplus opts->stdSidebarButtons=false; opts->gtkScrollViews=false; opts->gtkComboMenus=false; opts->customMenubarsColor.setRgb(0, 0, 0); opts->customSlidersColor.setRgb(0, 0, 0); opts->customMenuNormTextColor.setRgb(0, 0, 0); opts->customMenuSelTextColor.setRgb(0, 0, 0); opts->customCheckRadioColor.setRgb(0, 0, 0); #else opts->customMenubarsColor.red=opts->customMenubarsColor.green=opts->customMenubarsColor.blue=0; opts->customSlidersColor.red=opts->customSlidersColor.green=opts->customSlidersColor.blue=0; opts->customMenuNormTextColor.red=opts->customMenuNormTextColor.green=opts->customMenuNormTextColor.blue=0; opts->customMenuSelTextColor.red=opts->customMenuSelTextColor.green=opts->customMenuSelTextColor.blue=0; opts->customCheckRadioColor.red=opts->customCheckRadioColor.green=opts->customCheckRadioColor.blue=0; #endif /* Read system config file... */ { static const char * systemFilename=NULL; if(!systemFilename) systemFilename=getSystemConfigFile(); if(systemFilename) readConfig(systemFilename, opts, opts); } }