diff options
Diffstat (limited to 'style/polish.cpp')
-rw-r--r-- | style/polish.cpp | 878 |
1 files changed, 878 insertions, 0 deletions
diff --git a/style/polish.cpp b/style/polish.cpp new file mode 100644 index 0000000..f845d2b --- /dev/null +++ b/style/polish.cpp @@ -0,0 +1,878 @@ +//#include <qdir.h> +#include "baghira.h" +#include <sys/types.h> +#include <sys/stat.h> +#include <unistd.h> +#include <qapplication.h> +#include <qbrush.h> +#include <qcolor.h> +#include <qcombobox.h> +#include <qcursor.h> +#include <qdialog.h> +#include <qframe.h> +#include <qfile.h> +#include <qheader.h> +#include <qgroupbox.h> +//#include <qiconview.h> +#include <qlabel.h> +#include <qlayout.h> +#include <qlistbox.h> +#include <klistview.h> +#include <kmenubar.h> +#include <qpalette.h> +#include <qpainter.h> +#include <qpopupmenu.h> +#include <qpushbutton.h> +#include <qscrollbar.h> +#include <qscrollview.h> +#include <qsizepolicy.h> +#include <qslider.h> +#include <qtabbar.h> +#include <qtoolbar.h> +#include <qtoolbutton.h> +#include <kdeversion.h> +#include <kpixmapeffect.h> +#include <kglobalsettings.h> +#include <kwin.h> +#include <X11/Xlib.h> +#include <X11/Xatom.h> + +#include <fixx11h.h> +#define OPAQUE 0xffffffff +#define OPACITY "_KDE_WM_WINDOW_OPACITY" +#define _FORCE_SCROLLBARS_ 0 + +#ifndef CLAMP +#define CLAMP(x,l,u) x < l ? l :\ +x > u ? u :\ +x +#endif + + +void LiquidStyle::polish( QPalette &pal ) +{ + if ( inExitPolish ) + return ; + // clear out all old colorized pixmaps + int i; + for ( i = 0; i < BITMAP_ITEMS; ++i ) + { + if ( pixmaps[ i ] ) + { + delete pixmaps[ i ]; + pixmaps[ i ] = NULL; + } + } + // clear out all dicts + btnDict.clear(); + btnShadowedDict.clear(); + // reset brushes + pagerHoverBrush = QBrush(); + pagerBrush = QBrush(); + + bool newPalette = false; + struct stat buffer; + if ( stat( QFile::encodeName( QDir::homeDirPath() + "/.qt/qtrc" ), &buffer ) == 0 ) + { + unsigned int lastModTime = ( unsigned int ) buffer.st_mtime; + if ( lastModTime > qtrcModificationTime ) + { + qtrcModificationTime = lastModTime; + newPalette = true; + } + } + else if ( !initialPaletteLoaded ) // Hack, should always have qtrc in KDE + newPalette = true; + initialPaletteLoaded = true; + + if ( !newPalette ) + { + pal = polishedPalette; + return ; + } + + originalBgColor = pal.color(QPalette::Active, QColorGroup::Background); + if (optionHandler->style() == Brushed) + pal.setColor(QColorGroup::Background, brushedMetalColor(optionHandler->BrushTint())); + if (isOOO) + pal.setColor( QColorGroup::Button, pal.active().background() ); + else if (optionHandler->custCols[0] != -1) + { + pal.setColor(QColorGroup::Background, QColor(optionHandler->custCols[0])); + pal.setColor(QColorGroup::Button, QColor(optionHandler->custCols[1])); + pal.setColor(QColorGroup::Base, QColor(optionHandler->custCols[2])); + pal.setColor(QPalette::Active, QColorGroup::Text, QColor(optionHandler->custCols[3])); + pal.setColor(QPalette::Active, QColorGroup::Foreground, QColor(optionHandler->custCols[3])); + pal.setColor(QColorGroup::Highlight, QColor(optionHandler->custCols[4])); + pal.setColor(QPalette::Active, QColorGroup::HighlightedText, QColor(optionHandler->custCols[5])); + pal.setColor(QPalette::Active, QColorGroup::ButtonText, QColor(optionHandler->custCols[6])); + pal.setColor(QColorGroup::Mid, QColor((qRed(optionHandler->custCols[2])+qRed(optionHandler->custCols[3]))/2,(qGreen(optionHandler->custCols[2])+qGreen(optionHandler->custCols[3]))/2,(qBlue(optionHandler->custCols[2])+qBlue(optionHandler->custCols[3]))/2)); + + pal.setColor(QPalette::Inactive, QColorGroup::Text, QColor(optionHandler->custCols[3])); + pal.setColor(QPalette::Inactive, QColorGroup::HighlightedText, QColor(optionHandler->custCols[5])); + pal.setColor(QPalette::Inactive, QColorGroup::ButtonText, QColor(optionHandler->custCols[6])); + } + else + pal.setColor( QColorGroup::Button, optionHandler->CustomButtonColor() ); +#if 0 + if ( isKicker ) + { + origPanelBrush = pal.brush( QPalette::Active, QColorGroup::Background ); + origPanelPalette = pal; + QColor c( pal.active().background() ); + + if ( optionHandler->usePanelCustomColor() && optionHandler->panelCustomColor().isValid() ) + c = optionHandler->panelCustomColor(); + + kickerColor = c; + + pal.setColor( QColorGroup::Mid, optionHandler->CustomButtonColor().dark( 110 ) ); + pal.setColor( QColorGroup::Dark, optionHandler->CustomButtonColor().dark( 130 ) ); + pal.setColor( QColorGroup::Midlight, optionHandler->CustomButtonColor().light( 110 ) ); + pal.setColor( QColorGroup::Light, optionHandler->CustomButtonColor().light( 115 ) ); + pal.setColor( QColorGroup::Button, optionHandler->CustomButtonColor()); + + if (optionHandler->style() == Brushed) + { + QBrush brush( c, gradBrush ); + pal.setBrush( QColorGroup::Background, brush ); + } + else if ( optionHandler->usePanelStipple() ) + { + QPixmap stipple( 64, 64 ); + stipple.fill( c.rgb() ); + QPainter p( &stipple ); + p.setPen( c.dark( 100 + (int)(optionHandler->stippleContrast()/4) ) ); + for ( int i = 1; i < 64; i += 4 ) + { + p.drawLine( 0, i, 63, i ); + p.drawLine( 0, i+2, 63, i+2 ); + } + p.setPen( c.dark( 100 + optionHandler->stippleContrast()) ); + for ( int i = 2; i < 63; i += 4 ) + p.drawLine( 0, i, 63, i ); + p.end(); + QBrush brush( c, stipple ); + pal.setBrush( QColorGroup::Background, brush ); + } + else + pal.setBrush( QColorGroup::Background, c ); + } +#endif + /*else*/ if (optionHandler->style() == Brushed) + { + QColor c( pal.active().background() ); + QBrush brush( c, gradBrush ); + pal.setBrush( QColorGroup::Background, brush ); + } + else if ( !isPlain() ) + { + QColor c( pal.active().background() ); + QPixmap stipple( 64, 64 ); + stipple.fill( c.rgb() ); + QPainter p; + p.begin( &stipple ); + p.setPen( c.dark( 100 + (int)(optionHandler->stippleContrast()/2) ) ); + for ( i = 1; i < 64; i += 4 ) + { + p.drawLine( 0, i, 63, i ); + p.drawLine( 0, i+2, 63, i+2 ); + } + p.setPen( c.dark( 100 + optionHandler->stippleContrast() ) ); + for ( i = 2; i < 63; i += 4 ) + p.drawLine( 0, i, 63, i ); + p.end(); + QBrush brush( c, stipple ); + pal.setBrush( QColorGroup::Background, brush ); + } + + if (optionHandler->bevelHighlights()) + { + QColor c(pal.active().highlight()); + QColor c2(c.light(140)); + QPixmap pix2 = QPixmap(48,48); + QPainter coolPainter(&pix2); + KPixmap pix = QPixmap(48,24); + KPixmapEffect::gradient(pix,c,c2,KPixmapEffect::VerticalGradient,0); + coolPainter.drawPixmap(0,0,pix); + KPixmapEffect::gradient(pix,c2,c,KPixmapEffect::VerticalGradient,0); + coolPainter.drawPixmap(0,24,pix); + QBrush brush(c, pix2); + pal.setBrush(QColorGroup::Highlight, brush); + } + polishedPalette = pal; + optionHandler->reset(); +} + +void LiquidStyle::unPolish( QApplication *app ) +{ + popupBack.resize(0,0); + QPalette pal( app->palette() ); + inExitPolish = true; + + if ( !isPlain() ) + { + // reset any stipples + if ( pal.brush( QPalette::Active, QColorGroup::Background ).pixmap() ) + pal.setBrush( QColorGroup::Background, pal.active().background() ); + if ( pal.brush( QPalette::Active, QColorGroup::Button ).pixmap() ) + pal.setBrush( QColorGroup::Button, pal.active().button() ); +// app->blockSignals( TRUE ); + app->setPalette( pal ); +// app->blockSignals( FALSE ); + } + + inExitPolish = false; +} + +Atom baghira_deco_design = XInternAtom(qt_xdisplay(), "BAGHIRA_DECO_DESIGN", False); + +void LiquidStyle::polish( QWidget *w ) +{ +// bool testWidget = w->inherits("Splash"); +// int testInt = 0; +// if (w->sizePolicy().horData() == QSizePolicy::Minimum || w->sizePolicy().horData() == QSizePolicy::MinimumExpanding) +// qWarning("%s, \"%s\"",w->className(), w->name()); +// w->installEventFilter(this); + + bool tmpBool = false; + bool isViewport = qstrcmp( w->name(), "qt_viewport" ) == 0 || + qstrcmp( w->name(), "qt_clipped_viewport" ) == 0; + bool isViewportChild = w->parent() && + ( ( qstrcmp( w->parent() ->name(), "qt_viewport" ) == 0 ) || + ( qstrcmp( w->parent() ->name(), "qt_clipped_viewport" ) == 0 ) ); + + if (w->isTopLevel()) + { + if ( ::qt_cast<QPopupMenu*>(w)) // popup menu designs + { + switch (optionHandler->MenuBackground()) + { + case Plain: + w->setBackgroundMode( QWidget::PaletteBackground ); + if (optionHandler->UseCustomMenuColor()) + w->setPaletteBackgroundColor(optionHandler->Color()); + else if (optionHandler->MenuColorButton()) + w->setPaletteBackgroundColor(optionHandler->buttonColor()); + else + w->setPaletteBackgroundColor(optionHandler->bgColor()); + break; + case Stipples: + { + QColor c; + if (optionHandler->UseCustomMenuColor()) + c = QColor( optionHandler->Color() ); + else if (optionHandler->MenuColorButton()) + c = QColor( optionHandler->buttonColor() ); + else + c = QColor( originalBgColor ); + if (popupBack.isNull()) + { + popupBack = QPixmap(64,64); + QPixmap *stipple = &popupBack; + stipple->fill( c.rgb() ); + QPainter p; + p.begin( stipple ); + if (optionHandler->UseCustomMenuColor()) + { + QColor c2 = QColor( optionHandler->Color2() ); + p.setPen(QColor((3*c.red()+c2.red())/4, + (3*c.green()+c2.green())/4, + (3*c.blue()+c2.blue())/4)); + for ( int i = 1; i < 64; i += 4 ) + { + p.drawLine( 0, i, 63, i ); + p.drawLine( 0, i+2, 63, i+2 ); + } + p.setPen(c2); + for ( int i = 2; i < 63; i += 4 ) + { + p.drawLine( 0, i, 63, i ); + } + } + else + { + p.setPen( c.dark( 100 + (int)(optionHandler->stippleContrast()/4) ) ); + for ( int i = 1; i < 64; i += 4 ) + { + p.drawLine( 0, i, 63, i ); + p.drawLine( 0, i+2, 63, i+2 ); + } + p.setPen( c.dark( 100 + optionHandler->stippleContrast() ) ); + for ( int i = 2; i < 63; i += 4 ) + { + p.drawLine( 0, i, 63, i ); + } + } + p.end(); + } + w->setBackgroundMode( QWidget::NoBackground ); + break; + } + case Gradient: + { + w->setBackgroundMode( QWidget::PaletteBackground ); + KPixmap tmpPix = QPixmap(w->width(), 32); + w->setPaletteBackgroundPixmap(KPixmapEffect::unbalancedGradient(tmpPix, optionHandler->Color(), optionHandler->Color2(),KPixmapEffect::HorizontalGradient, 100, 100, 16)); + w->installEventFilter( this ); + break; + } + default: + w->setBackgroundMode( QWidget::PaletteBackground ); + break; + } + //set popup menu opacity for them as they bypass the windowmanager + unsigned long opacity = optionHandler->MenuOpacity()/100.0*OPAQUE; + XChangeProperty(qt_xdisplay(), w->winId(), XInternAtom(qt_xdisplay(), OPACITY, False), XA_CARDINAL, 32, PropModeReplace, (unsigned char *) &opacity, 1L); + goto kstpolish; + } + else + { + if (optionHandler->wmDesign < 5) // set deco design X Property + { + unsigned char *data = 0; + Atom actual; + int format, result; + unsigned long n, left; + result = XGetWindowProperty(qt_xdisplay(), w->winId(), baghira_deco_design, 0L, 1L, False, XA_CARDINAL, &actual, &format, &n, &left, &data); + if (result != Success || data == None) // not found set design + { + int tmp = optionHandler->wmDesign != Tiger ? optionHandler->wmDesign : Panther; + XChangeProperty(qt_xdisplay(), w->winId(), baghira_deco_design, XA_CARDINAL, 32, PropModeReplace, (unsigned char *) &(tmp), 1L); + } + } + if ((optionHandler->style() == Brushed) && !( ::qt_cast<QPopupMenu*>(w) || ::qt_cast<QMenuBar*>(w) || w->isDesktop() || ::qt_cast<QListBox*>(w) || w->inherits("QTipLabel") || w->inherits("AlphaWidget") || w->inherits("ScrollWidget") || w->inherits("PlayerWidget"))) + // install resize event filter, allowing us to update the b/m gradient on horizontal resizes. some widgets must be excluded though + { + if (!isKicker) + w->installEventFilter( bmShower ); + w->installEventFilter( this ); + } + } + } // TopLevel Widgets + + if (w->inherits("KURLBar")/*ListBox*/) + { + w->setPaletteBackgroundColor(qApp->palette().color(QPalette::Active, QColorGroup::Base)); +// ((QListBox*)w)->viewport()->setPaletteBackgroundColor(qApp->palette().color(QPalette::Active, QColorGroup::Base)); + goto kstpolish; + } + + + if (w->inherits("KColorGrid")) + { + // kiconedit doesn't check for the paintevent rect size, but tries to create a (possibly) NULL Pixmap (after palette change event e.g.) + // so we catch it's paint event and destroy it if the size is NULL + // remove this after kiconedit corrected its code + w->installEventFilter( this ); + goto kstpolish; + } + + if (w->inherits("BGMonitor") || w->inherits("mapWidget") || w->isA("MyButton") || (w->parentWidget() && w->parentWidget()->inherits("Thumbnail"))) + // don't touch these widgets at all - they don't like it + { + goto kstpolish; + } + + + + if (qstrcmp( w->name(), "kde toolbar widget" ) == 0 ) + w->installEventFilter( this ); + + if (::qt_cast<QButton*>(w)) + { + w->setBackgroundOrigin(QWidget::WindowOrigin); + if (::qt_cast<QPushButton*>(w)) + { + if (w->inherits("KKeyButton")) + { + w->setBackgroundMode( QWidget::PaletteBackground); + QPalette pal( w->palette() ); + pal.setBrush( QColorGroup::Background, qApp->palette().active().background() ); + w->setPalette( pal ); + } + else if (w->inherits("KCalcButton")) + { + w->setBackgroundMode( QWidget::PaletteBackground); + QPalette pal( w->palette() ); + pal.setBrush( QColorGroup::Background, qApp->palette().brush(QPalette::Active, QColorGroup::Background)); + w->setPalette( pal ); + } + else +#if !KDE_IS_VERSION(3,4,3) + if (!(w->parent() && w->parent()->inherits("MiniBar"))) +#endif + w->setBackgroundMode( QWidget::NoBackground); + w->installEventFilter( this ); + goto kstpolish; + } + else if (w->inherits( "QRadioButton" ) || w->inherits( "QCheckBox" )) + { + w->setBackgroundOrigin(QWidget::WindowOrigin); + w->installEventFilter( this ); + goto kstpolish; + } + } + + if ( ::qt_cast<QToolBar*>(w)) + { + if (optionHandler->useToolButtonFrame() && w->inherits("KToolBar")) + ((QToolBar*)w)->boxLayout()->setSpacing( 0 ); + ((QToolBar*)w)->setMargin( 4 ); + w->setBackgroundMode(PaletteBackground); + w->setBackgroundOrigin(QWidget::WindowOrigin); + if (optionHandler->style() > Panther) + { + w->installEventFilter( this ); + if (optionHandler->wmDesign == Tiger) + { + XChangeProperty(qt_xdisplay(), w->topLevelWidget()->winId(), baghira_deco_design, XA_CARDINAL, 32, PropModeReplace, (unsigned char *) &(optionHandler->wmDesign), 1L); + } + } + + goto kstpolish ; + } + //if (testWidget) qWarning("testwidget stage %d",testInt++); + + if (tmpBool = ::qt_cast<QToolButton*>(w) || w->inherits( "QToolBarSeparator" ) || w->inherits( "KToolBarSeparator" ) ) + { + if (tmpBool && w->parentWidget() && ::qt_cast<QToolBar*>(w->parentWidget()) ) + { + w->setSizePolicy(QSizePolicy::Fixed, QSizePolicy::Fixed); + } + w->setBackgroundMode( QWidget::PaletteBackground ); + w->setBackgroundOrigin(QWidget::WindowOrigin); + w->installEventFilter( this ); + goto kstpolish; + } + + if (::qt_cast<QComboBox*>(w)) + { + w->setBackgroundMode(NoBackground); + w->installEventFilter( this ); + w->setBackgroundOrigin(QWidget::WindowOrigin); + goto kstpolish; + } + + if (w->inherits("TaskBar")) + { + w->setBackgroundOrigin(QWidget::WidgetOrigin); + goto kstpolish; + } + + if (w->inherits("QSpinWidget") || w->inherits("KDockWidgetAbstractHeaderDrag")){ + w->installEventFilter( this ); + goto kstpolish; + } + + if ( !isPlain () && (w->inherits( "KonqIconViewWidget" ) || w->inherits( "khtml")/* || w->inherits( "QtVisionView")*/)) + { + // if you want custom backgrounds in konqueror, you have to reset pixmap, since Konq animation can't handle it + // original liquid did this on khtml, too (at speed loss) so we'll see, if we get errors from this... + QPalette pal( w->palette() ); + pal.setBrush( QColorGroup::Background, pal.active().background() ); + w->setPalette( pal ); + } + + if (::qt_cast<QSlider*>(w)) + { + //avoid flicker + w->setBackgroundMode( QWidget::NoBackground ); + goto kstpolish; + } + + if ((::qt_cast<QScrollView*>(w) || w->inherits("KateView") || w->inherits("TEWidget") || w->inherits("CHexViewWidget")) && !(w->isA("KOAgenda"))) + { + if (::qt_cast<KListView*>(w) && optionHandler->custCols[7] != -1 && ((KListView*)w)->alternateBackground() == KGlobalSettings::alternateBackgroundColor()) + { + ((KListView*)w)->setAlternateBackground(QColor(optionHandler->custCols[7])); + } +#if _FORCE_SCROLLBARS_ + if (::qt_cast<QScrollView*>(w) && !w->inherits( "KActiveLabel" )) + { + ((QScrollView*)w)->setVScrollBarMode(QScrollView::AlwaysOn); + } +#endif + if (::qt_cast<QListBox*>(w) && w->isTopLevel()) + //set opacity for them as they bypass the windowmanager + { + uint opacity = 0.8*OPAQUE; + XChangeProperty(qt_xdisplay(), w->winId(), XInternAtom(qt_xdisplay(), OPACITY, False), XA_CARDINAL, 32, PropModeReplace, (unsigned char *) &opacity, 1L); + } +#if 0 + // doesn't work properly - best would be to have the items drawn via style() + int height = ((QListBox*)w)->itemHeight(); + if (height > 0) + { + QPalette pal = w->palette(); + QColor c(pal.active().highlight()); + QColor c2(c.light(140)); + KPixmap pix = QPixmap(48,height); + KPixmapEffect::gradient(pix,c2,c,KPixmapEffect::VerticalGradient,0); + QBrush brush(c, pix); + pal.setBrush(QColorGroup::Highlight, brush); + w->setPalette(pal); + } +#endif + // listen to enter events - highlightning the scrollbars + w->setMouseTracking( true ); + w->installEventFilter( this ); + goto kstpolish; + } + + if (w->inherits("QStatusBar")) + { + w->setBackgroundOrigin(QWidget::WindowOrigin); + if ( qstrcmp( w->name(), "KonquerorFrameStatusBar" ) == 0 ) + // konqueror resets the statusbars background to Qt::White as soon as you open a new tab - our eventfilter will block this + { + w->installEventFilter( this ); + } + goto kstpolish; + } + + if (w->inherits( "QLineEdit" ) || w->inherits("QSplitterHandle") || w->isA( "AppletHandleDrag" ) || w->inherits( "KMiniPagerButton" )) + { + w->setBackgroundOrigin(QWidget::WindowOrigin); + w->installEventFilter( this ); + goto kstpolish; + } + + if (w->inherits( "TaskContainer" )) + { + w->installEventFilter( this ); + goto kstpolish; + } + + if (w->inherits( "KickerTip" )) + // kickers new tooltip uses backgroundColor() instead of paletteBackgroundColor() - causing Qt::black + { + w->setPaletteBackgroundColor(qApp->palette().color(QPalette::Active, QColorGroup::Button)); + w->setBackgroundMode( QWidget::NoBackground ); + goto kstpolish; + } + + if ( !isPlain() ) + { + if ( !isViewport && w->parent() && qstrcmp( w->parent() ->name(), "proxyview" ) == 0 ) + { + w->setBackgroundOrigin( QWidget::WindowOrigin ); + goto kstpolish ; + } + + if ( w->inherits( "PanelButtonBase" ) ) + goto kstpolish ; + if ( !isKicker&& !isViewport && !isViewportChild && !w->testWFlags( WType_Popup ) && !w->inherits( "KDesktop" ) && !w->inherits( "PasswordDlg" )) + { + if ( w->backgroundMode() == QWidget::PaletteBackground || w->backgroundMode() == QWidget::PaletteButton ) + { + w->setBackgroundOrigin( QWidget::WindowOrigin ); + } + } + } + if ( ::qt_cast<QPushButton*>(w) || ::qt_cast<QComboBox*>(w)) goto kstpolish; + if ( ::qt_cast<QMenuBar*>(w)) + { +// if (optionHandler->SupportAppleBar() && w->isTopLevel()){ +// // QPalette pal(w->palette()); +// qWarning("resetting erase pixmap"); +// QColor c( w->palette().active().background() ); +// QPixmap stipple( 64, 64 ); +// stipple.fill( c.rgb() ); +// QPainter p; +// p.begin( &stipple ); +// p.setPen( c.dark( 100 + (int)(optionHandler->stippleContrast()/2) ) ); +// for (int i = 1; i < 64; i += 4 ) { +// p.drawLine( 0, i, 63, i ); +// p.drawLine( 0, i+2, 63, i+2 ); +// } +// p.setPen( c.dark( 100 + optionHandler->stippleContrast()) ); +// for ( int i = 2; i < 63; i += 4 ) { +// p.drawLine( 0, i, 63, i ); +// } +// p.end(); +// // QBrush brush( c, stipple ); +// // pal.setBrush( QColorGroup::Background, brush ); +// // w->setPalette( pal ); +// w->setErasePixmap(stipple); +// } + w->setBackgroundMode( QWidget::PaletteBackground ); + if (optionHandler->UseCustomMenuColor()) + { + QPalette pal( w->palette() ); + pal.setBrush( QColorGroup::Highlight, optionHandler->menuColorHigh() ); + pal.setBrush( QColorGroup::HighlightedText, optionHandler->textColorHigh() ); + w->setPalette( pal ); + } + w->setBackgroundOrigin(QWidget::WindowOrigin); + w->installEventFilter( this ); +#if 0 + if (!::qt_cast<KMenuBar*>(w)) + { + bool bold = w->font().bold(); + bool italic = w->font().italic(); + bool underline = w->font().underline(); + bool overline = w->font().overline(); + w->setFont(KGlobalSettings::menuFont()); + if (bold) + (const_cast<QFont*>(&w->font()))->setBold(true); + if (italic) + (const_cast<QFont*>(&w->font()))->setItalic(true); + if (underline) + (const_cast<QFont*>(&w->font()))->setUnderline(true); + if (overline) + (const_cast<QFont*>(&w->font()))->setOverline(true); + } +#endif + goto kstpolish ; + } + + if (::qt_cast<QFrame*>(w)) + { + w->setBackgroundOrigin(QWidget::WindowOrigin); + if ( ::qt_cast<QLabel*>(w)) + { + if (w->parentWidget() && w->parentWidget()->inherits("Kontact::Splash")) + goto kstpolish; + else if ( !isPlain() && !(w->inherits( "QTipLabel" ) || w->inherits( "KSystemTray" ))) + { + w->setBackgroundMode( QWidget::PaletteBackground ); + } + else if ( w->inherits( "QTipLabel" ) ) + { + w->setPalette( tooltipPalette ); + w->setBackgroundOrigin(QWidget::WidgetOrigin); + w->installEventFilter( this ); + } + } + if (qstrcmp( w->name(), "backdrop" ) == 0) //kscd + { + ((QFrame *)w)->setFrameShape(QFrame::LineEditPanel); + ((QFrame *)w)->setFrameShadow(QFrame::Sunken); + goto kstpolish; + } + if (w->inherits( "KWinInternal::TabBox" )) + { + uint opacity = 0.8*OPAQUE; + XChangeProperty(qt_xdisplay(), w->winId(), XInternAtom(qt_xdisplay(), OPACITY, False), XA_CARDINAL, 32, PropModeReplace, (unsigned char *) &opacity, 1L); + goto kstpolish; + } + else if (w->inherits( "KAnimWidget" )) + { + ((QFrame *)w)->setFrameShape(QFrame::NoFrame); + w->installEventFilter( this ); // the widget resets it's frameshape on mouseevents - looks crap! + goto kstpolish ; + } + else if (((QFrame *)w)->frameShape() >= QFrame::Box && ((QFrame *)w)->frameShape() <= QFrame::WinPanel){ + ((QFrame *)w)->setFrameShape(QFrame::StyledPanel); + goto kstpolish ; + } + } + //if (testWidget) qWarning("testwidget stage %d",testInt++); + + + if ( w->parentWidget() && ( ( ::qt_cast<QListBox*>(w) && ::qt_cast<QPushButton*>(w->parentWidget())) || w->inherits( "KCompletionBox" ) ) ) { + QListBox* listbox = (QListBox*) w; + listbox->setBackgroundMode( NoBackground ); + w->installEventFilter( this ); + goto kstpolish; + } + //if (testWidget) qWarning("testwidget stage %d",testInt++); + + + if (::qt_cast<QHeader*>(w)){ +// if (::qt_cast<QListView*>(w->parentWidget())) +// headerSortID = ((QListView*)w->parentWidget())->sortColumn(); +// if (w->parentWidget()) qWarning(w->parentWidget()->className()); + w->setBackgroundMode( NoBackground ); + w->installEventFilter( this ); + goto kstpolish; + } + //if (testWidget) qWarning("testwidget stage %d",testInt++); + + + if (::qt_cast<QTabBar*>(w)){ +// qWarning("installing tab event"); + w->setMouseTracking( true ); + w->installEventFilter( this ); + w->setBackgroundOrigin(QWidget::WindowOrigin); + goto kstpolish; + } + + if (::qt_cast<QGroupBox*>(w) && ((QGroupBox*)w)->frameShape() == QFrame::GroupBoxPanel && !((QGroupBox*)w)->isFlat()) + { + if ( optionHandler->drawGroupBoxShadow() ) + { + w->setPaletteBackgroundPixmap ( *groupShadow ); + if (((QGroupBox*)w)->isCheckable()) + { + QWidget *cb = (QWidget*)w->child("qt_groupbox_checkbox",0,false); + cb->setPalette(w->parentWidget() ? w->parentWidget()->palette() : qApp->palette()); + QFont font( cb->font() ); + font.setBold( true ); + cb->setFont( font ); + } + } + w->setBackgroundOrigin(QWidget::WindowOrigin); + w->installEventFilter(this); + } + //if (testWidget) qWarning("testwidget stage %d",testInt++); + + + if (w->inherits("QProgressBar")) + { + w->setBackgroundMode( NoBackground ); + w->installEventFilter(this); + connect(w, SIGNAL(destroyed(QObject*)), this, SLOT(progressBarDestroyed(QObject*))); + goto kstpolish; + } + + if ( w->inherits( "QDockWindow" ) ) { + w->setBackgroundMode( QWidget::PaletteBackground ); + w->setBackgroundOrigin(QWidget::WindowOrigin); + w->installEventFilter( this ); + goto kstpolish ; + } + + if ( ::qt_cast<QScrollBar*>(w)) { + QCursor tmpCursor(Qt::PointingHandCursor); + w->setCursor(tmpCursor); + w->installEventFilter( this ); + w->setBackgroundMode( QWidget::NoBackground ); + goto kstpolish ; + } + if ( w->inherits( "KdetvView")) { + w->setBackgroundMode( QWidget::NoBackground ); + } + //if (testWidget) qWarning("testwidget stage %d",testInt++); + kstpolish: KStyle::polish( w ); // nothing of all above? do default kde stuff +} + + + +void LiquidStyle::unPolish( QWidget *w ) { + + bool isViewport; + bool isViewportChild; + + // general - better than querying for each and ever widget if it got one... + w->removeEventFilter( this ); + + + if (w->inherits("KColorGrid")){ + goto kstunpolish; + } + + if ( w->inherits("QToolBar") || qstrcmp( w->name(), "kde toolbar widget" ) == 0 ) { + w->setBackgroundOrigin( QWidget::WidgetOrigin ); +// w->unsetPalette(); + goto kstunpolish; + } + if ( w->inherits( "QPopupMenu" ) ) { + w->unsetPalette(); + w->setBackgroundMode( QWidget::PaletteButton ); + w->removeEventFilter( this ); + XDeleteProperty (qt_xdisplay(), w->winId(), XInternAtom(qt_xdisplay(), OPACITY, False)); + goto kstunpolish; + } + if (::qt_cast<QListBox*>(w) && w->isTopLevel()){ + XDeleteProperty (qt_xdisplay(), w->winId(), XInternAtom(qt_xdisplay(), OPACITY, False)); + goto kstunpolish; + } + if ( !isPlain () && w->inherits( "KonqIconViewWidget" ) || + w->inherits( "KHTMLView" ) ) { + w->unsetPalette(); + goto kstunpolish; + } + if (w->inherits("KateView") || w->inherits("TEWidget") || w->inherits("CHexViewWidget")){ +// w->setMouseTracking( false ); + goto kstunpolish; + } + + if (w->isA( "QViewportWidget" ) || w->inherits( "QClipperWidget" ) ) + goto kstunpolish; + + if ( !isPlain() ) { + if ( w->inherits( "KActiveLabel" ) || w->inherits( "QTipLabel" ) ) { + w->unsetPalette(); + goto kstunpolish; + } + /* + else if(w->inherits("KdmClock")){ + ; // Check this! + return; + }*/ + } + else if ( w->inherits( "QMenuBar" ) ) { + w->setBackgroundMode( QWidget::PaletteButton ); + if ( !isPlain() ) + w->setBackgroundOrigin( QWidget::WidgetOrigin ); + goto kstunpolish; + }else if ( w->inherits( "QDockWindow" ) ) { + w->setBackgroundMode( QWidget::PaletteButton ); + if ( !isPlain() ) + w->setBackgroundOrigin( QWidget::WidgetOrigin ); + goto kstunpolish; + } else if ( w->inherits( "QComboBox" ) || w->inherits( "QPushButton" ) ) { + if (w->inherits( "QPushButton" )) + { + ButtonFadeInfo *bfi_ = bfi[w->winId()]; + if (bfi_){ + if (bfi_->timerId != 0) + w->killTimer(bfi_->timerId); + bfi.setAutoDelete(TRUE); + bfi.remove(w->winId()); + } + } + w->setBackgroundMode( QWidget::PaletteButton ); + } else if ( w->inherits( "QScrollBar" ) ) { +// if (!w->isEnabled()) w->setEnabled(true); + w->setBackgroundMode( QWidget::PaletteBackground ); + goto kstunpolish; + } else if ( w->inherits( "QHeader" ) ) { + w->setMouseTracking( false ); + } + + if ( w->inherits( "QToolButton" ) ) { +// w->unsetPalette(); + w->setBackgroundMode( QWidget::PaletteButton ); + if ( !isPlain() ) + w->setBackgroundOrigin( QWidget::WidgetOrigin ); + goto kstunpolish; + } + + isViewport = qstrcmp( w->name(), "qt_viewport" ) == 0 || + qstrcmp( w->name(), "qt_clipped_viewport" ) == 0; + isViewportChild = w->parent() && + ( ( qstrcmp( w->parent() ->name(), "qt_viewport" ) == 0 ) || + ( qstrcmp( w->parent() ->name(), "qt_clipped_viewport" ) == 0 ) ); + + if ( isViewportChild ) { + if ( w->inherits( "QRadioButton" ) || w->inherits( "QComboBox" ) || w->inherits( "QPushButton" ) ) { + if ( isHTMLWidget( w ) ) { + w->setBackgroundMode( QWidget::PaletteBackground ); + goto kstunpolish; + } + } + } + + if ( !isPlain() ) { + if ( !isViewport && w->parent() && qstrcmp( w->parent() ->name(), "proxyview" ) == 0 ) { + w->setBackgroundOrigin( QWidget::WidgetOrigin ); + goto kstunpolish; + } + if ( w->ownPalette() && !w->inherits( "QButton" ) && !w->inherits( "QComboBox" ) ) + goto kstunpolish; + if ( w->inherits( "PanelButtonBase" ) ) + goto kstunpolish; + + if ( !isViewport && !isViewportChild && !w->testWFlags( WType_Popup ) && + !w->inherits( "KDesktop" ) && !w->inherits( "PasswordDlg" ) ) { + + if ( w->backgroundOrigin() == QWidget::WindowOrigin ) + w->setBackgroundOrigin( QWidget::WidgetOrigin ); + goto kstunpolish; + } + } +kstunpolish: KStyle::unPolish( w ); + } |