diff options
| author | 2010-02-08 15:57:48 +0000 | |
|---|---|---|
| committer | 2010-02-08 15:57:48 +0000 | |
| commit | 024faf2edc6216668783bc197c80609c64557af0 (patch) | |
| tree | 9e38f640d50da095ba101220a6a5190716a701f6 /src | |
| parent | applied patch, thanks to egns (diff) | |
| download | KVIrc-024faf2edc6216668783bc197c80609c64557af0.tar.gz KVIrc-024faf2edc6216668783bc197c80609c64557af0.tar.bz2 KVIrc-024faf2edc6216668783bc197c80609c64557af0.zip | |
Avoid the use of a direct X call to get an ARGB visual; use Qt::WA_TranslucentBackground instead.
This way we can use a QApplication() ctor without the Display* parameter, gaining:
1) more respect from kde, that will stop calling us a "Qt-subapplication"
2) compositing portability (still to be tested)
git-svn-id: https://svn.kvirc.de/svn/trunk/kvirc@3933 17fca916-40b9-46aa-a4ea-0a15b648b75c
Diffstat (limited to 'src')
| -rw-r--r-- | src/kvilib/tal/kvi_tal_application.cpp | 16 | ||||
| -rw-r--r-- | src/kvilib/tal/kvi_tal_application.h | 9 | ||||
| -rw-r--r-- | src/kvirc/kernel/kvi_app.cpp | 15 | ||||
| -rw-r--r-- | src/kvirc/kernel/kvi_app.h | 24 | ||||
| -rw-r--r-- | src/kvirc/kernel/kvi_main.cpp | 56 | ||||
| -rw-r--r-- | src/kvirc/ui/kvi_customtoolbar.cpp | 6 | ||||
| -rw-r--r-- | src/kvirc/ui/kvi_frame.cpp | 3 | ||||
| -rw-r--r-- | src/kvirc/ui/kvi_ircview.cpp | 6 | ||||
| -rw-r--r-- | src/kvirc/ui/kvi_menubar.cpp | 1 | ||||
| -rw-r--r-- | src/kvirc/ui/kvi_statusbar.cpp | 2 | ||||
| -rw-r--r-- | src/kvirc/ui/kvi_windowlist_tree.cpp | 1 | ||||
| -rw-r--r-- | src/modules/options/optw_interfacelookglobal.cpp | 39 |
12 files changed, 50 insertions, 128 deletions
diff --git a/src/kvilib/tal/kvi_tal_application.cpp b/src/kvilib/tal/kvi_tal_application.cpp index db31689f5..55e07658b 100644 --- a/src/kvilib/tal/kvi_tal_application.cpp +++ b/src/kvilib/tal/kvi_tal_application.cpp @@ -26,31 +26,15 @@ #include "kvi_tal_application.h" #ifdef COMPILE_KDE_SUPPORT - KviTalApplication::KviTalApplication(int &, char **) : KApplication() { } - - #ifdef COMPILE_X11_SUPPORT - KviTalApplication::KviTalApplication(Display * display, int &, char **, Qt::HANDLE visual, Qt::HANDLE colormap) - : KApplication(display, visual, colormap) - { - } - #endif #else - KviTalApplication::KviTalApplication(int & iArgc, char ** ppcArgv) : QApplication(iArgc,ppcArgv) { } - - #ifdef COMPILE_X11_SUPPORT - KviTalApplication::KviTalApplication(Display * display, int & iArgc, char ** ppcArgv, Qt::HANDLE visual, Qt::HANDLE colormap) - : QApplication(display, iArgc, ppcArgv, visual, colormap) - { - } - #endif #endif KviTalApplication::~KviTalApplication() diff --git a/src/kvilib/tal/kvi_tal_application.h b/src/kvilib/tal/kvi_tal_application.h index b5d92d4e7..8e7ea7af4 100644 --- a/src/kvilib/tal/kvi_tal_application.h +++ b/src/kvilib/tal/kvi_tal_application.h @@ -61,15 +61,6 @@ public: */ KviTalApplication(int & iArgc, char ** ppcArgv); -#ifdef COMPILE_X11_SUPPORT - /** - * \brief Constructs the application object - * \param iArgc The number of arguments - * \param ppcArgv The arguments list - * \return KviTalApplication - */ - KviTalApplication(Display * display, int & iArgc, char ** ppcArgv, Qt::HANDLE visual = 0, Qt::HANDLE colormap = 0); -#endif /** * \brief Destructs the application object */ diff --git a/src/kvirc/kernel/kvi_app.cpp b/src/kvirc/kernel/kvi_app.cpp index 8b8376dd7..34a4c42c5 100644 --- a/src/kvirc/kernel/kvi_app.cpp +++ b/src/kvirc/kernel/kvi_app.cpp @@ -172,21 +172,6 @@ QPixmap * g_pActivityMeterPixmap = 0; KviApp::KviApp(int &argc,char ** argv) : KviTalApplication(argc,argv) { - internalInit(); - m_bSupportsCompositing=false; -} - -#ifdef COMPILE_X11_SUPPORT -KviApp::KviApp(Display * display, int & argc, char ** argv, Qt::HANDLE visual, Qt::HANDLE colormap) -: KviTalApplication(display, argc, argv, visual, colormap) -{ - internalInit(); - m_bSupportsCompositing=true; -} -#endif - -void KviApp::internalInit() -{ setApplicationName("KVIrc"); setApplicationVersion(KVIRC_VERSION_RELEASE); setOrganizationDomain("kvirc.net"); diff --git a/src/kvirc/kernel/kvi_app.h b/src/kvirc/kernel/kvi_app.h index b836025e3..f26742502 100644 --- a/src/kvirc/kernel/kvi_app.h +++ b/src/kvirc/kernel/kvi_app.h @@ -49,6 +49,10 @@ class KviIpcSentinel; #endif // !COMPILE_NO_IPC +#ifdef COMPILE_X11_SUPPORT + #include <QX11Info> +#endif + class KviTalPopupMenu; class QPixmap; class KviTalListBox; @@ -85,9 +89,6 @@ class KVIRC_API KviApp : public KviTalApplication Q_OBJECT public: KviApp(int &argc,char ** argv); -#ifdef COMPILE_X11_SUPPORT - KviApp(Display * display, int & argc, char ** argv, Qt::HANDLE visual = 0, Qt::HANDLE colormap = 0); -#endif ~KviApp(); protected: @@ -107,7 +108,6 @@ protected: #ifdef COMPILE_PSEUDO_TRANSPARENCY bool m_bUpdatePseudoTransparencyPending; #endif - bool m_bSupportsCompositing; #ifndef COMPILE_NO_IPC KviIpcSentinel * m_pIpcSentinel; #endif @@ -144,7 +144,20 @@ public: static int getGloballyUniqueId(); // returns an unique integer identifier across the application bool firstTimeRun(){ return m_bFirstTimeRun; }; - bool supportsCompositing() { return m_bSupportsCompositing; }; + inline bool supportsCompositing() + { +#if defined(COMPILE_ON_WINDOWS) || defined(COMPILE_ON_MINGW) + //we need >= win2000 + return true; +#endif +#ifdef COMPILE_X11_SUPPORT + return QX11Info::isCompositingManagerRunning(); +#endif +#ifdef COMPILE_ON_MAC + return true; +#endif + return false; + }; void setupBegin(); void setupFinish(); @@ -281,7 +294,6 @@ public slots: void restoreDefaultScript(); void addRecentUrl(const QString& text); private: - void internalInit(); void createSplashScreen(); void destroySplashScreen(); diff --git a/src/kvirc/kernel/kvi_main.cpp b/src/kvirc/kernel/kvi_main.cpp index 8e6eb4492..a7b558f1b 100644 --- a/src/kvirc/kernel/kvi_main.cpp +++ b/src/kvirc/kernel/kvi_main.cpp @@ -41,17 +41,13 @@ extern bool kvi_sendIpcMessage(const char * message); // kvi_ipc.cpp #endif -#include <qglobal.h> //for qDebug() - +#include <QtGlobal> //for qDebug() #include <QMessageBox> #ifdef COMPILE_KDE_SUPPORT #include <KCmdLineArgs> #include <KAboutData> #endif -#ifdef COMPILE_X11_SUPPORT - #include <X11/extensions/Xrender.h> -#endif #define KVI_ARGS_RETCODE_OK 0 #define KVI_ARGS_RETCODE_ERROR 1 @@ -362,55 +358,7 @@ int main(int argc, char ** argv) KCmdLineArgs::init(1, &argv[0], pAbout); #endif - bool bArgVisual = false; - -#ifdef COMPILE_X11_SUPPORT - //this makes sure we are running X11 with a compositing manager that supports ARGV visuals - //Code taken from an example by Zack Rusin http://zrusin.blogspot.com - Display * pDisplay = XOpenDisplay(0); // open default display - Colormap colormap = 0; - Visual * pVisual = 0; - - if(pDisplay) - { - int iScreen = DefaultScreen(pDisplay); - int iEventBase, iErrorBase; - - if(XRenderQueryExtension(pDisplay, &iEventBase, &iErrorBase)) - { - int iNvi; - XVisualInfo templ; - templ.screen = iScreen; - templ.depth = 32; - templ.c_class = TrueColor; - XVisualInfo * pXvi = XGetVisualInfo(pDisplay, VisualScreenMask | - VisualDepthMask | - VisualClassMask, &templ, &iNvi); - - for(int i = 0; i < iNvi; ++i) - { - XRenderPictFormat * pFormat = XRenderFindVisualFormat(pDisplay, pXvi[i].visual); - if(pFormat->type == PictTypeDirect && pFormat->direct.alphaMask) - { - pVisual = pXvi[i].visual; - colormap = XCreateColormap(pDisplay, RootWindow(pDisplay, iScreen), pVisual, AllocNone); - bArgVisual = true; - break; - } - } - } - } - - // Need to have the X socket open before IPC startup - if(bArgVisual) - { - pTheApp = new KviApp(pDisplay, argc, argv, Qt::HANDLE(pVisual), Qt::HANDLE(colormap)); - } else { -#endif - pTheApp = new KviApp(argc,argv); -#ifdef COMPILE_X11_SUPPORT - } -#endif + pTheApp = new KviApp(argc,argv); #ifdef COMPILE_DBUS_SUPPORT #ifndef COMPILE_KDE_SUPPORT diff --git a/src/kvirc/ui/kvi_customtoolbar.cpp b/src/kvirc/ui/kvi_customtoolbar.cpp index 0549deb06..3142de3e3 100644 --- a/src/kvirc/ui/kvi_customtoolbar.cpp +++ b/src/kvirc/ui/kvi_customtoolbar.cpp @@ -75,13 +75,15 @@ KviCustomToolBar::~KviCustomToolBar() void KviCustomToolBar::paintEvent(QPaintEvent * e) { KviToolBar::paintEvent(e); + if(KviActionManager::customizingToolBars() && (KviActionManager::currentToolBar() == this)) { - QPainter p(this); + QPainter *p = new QPainter(this); QPalette pal=palette(); QColor col=pal.highlight().color(); col.setAlpha(127); - p.fillRect(rect(),QBrush(col)); + p->fillRect(rect(),QBrush(col)); + delete p; } } diff --git a/src/kvirc/ui/kvi_frame.cpp b/src/kvirc/ui/kvi_frame.cpp index 0757954b4..bdd3d53b1 100644 --- a/src/kvirc/ui/kvi_frame.cpp +++ b/src/kvirc/ui/kvi_frame.cpp @@ -93,6 +93,9 @@ KviFrame::KviFrame() { g_pFrame = this; setAutoFillBackground(false); + setAttribute(Qt::WA_TranslucentBackground); + //disable this flag that gets enabled by qt when using Qt::WA_TranslucentBackground + setAttribute(Qt::WA_NoSystemBackground, false); m_pWinList = new KviPointerList<KviWindow>; setWindowTitle(KVI_DEFAULT_FRAME_CAPTION); diff --git a/src/kvirc/ui/kvi_ircview.cpp b/src/kvirc/ui/kvi_ircview.cpp index dad199c2b..f4ce1bc85 100644 --- a/src/kvirc/ui/kvi_ircview.cpp +++ b/src/kvirc/ui/kvi_ircview.cpp @@ -225,8 +225,8 @@ KviIrcView::KviIrcView(QWidget *parent,KviFrame *pFrm,KviWindow *pWnd) // initialize the initializable setAttribute(Qt::WA_NoSystemBackground); // This disables automatic qt double buffering - setAttribute(Qt::WA_OpaquePaintEvent); - //setAttribute(Qt::WA_PaintOnScreen); // disable qt backing store (that would force us to trigger repaint() instead of the 10 times faster paintEvent(0)) +// setAttribute(Qt::WA_OpaquePaintEvent); +// setAttribute(Qt::WA_PaintOnScreen); // disable qt backing store (that would force us to trigger repaint() instead of the 10 times faster paintEvent(0)) m_iFlushTimer = 0; m_pToolsPopup = 0; @@ -295,6 +295,7 @@ KviIrcView::KviIrcView(QWidget *parent,KviFrame *pFrm,KviWindow *pWnd) // Create the scroll bar m_pScrollBar = new QScrollBar(Qt::Vertical,this); + m_pScrollBar->setAutoFillBackground(true); m_pScrollBar->setMaximum(0); m_pScrollBar->setMinimum(0); m_pScrollBar->setSingleStep(1); @@ -308,6 +309,7 @@ KviIrcView::KviIrcView(QWidget *parent,KviFrame *pFrm,KviWindow *pWnd) m_pToolsButton = new QToolButton(this); m_pToolsButton->setObjectName("btntools"); + m_pToolsButton->setAutoFillBackground(true); QIcon is1(*(g_pIconManager->getSmallIcon(KVI_SMALLICON_POPUPMENU))); m_pToolsButton->setAutoRaise(true); diff --git a/src/kvirc/ui/kvi_menubar.cpp b/src/kvirc/ui/kvi_menubar.cpp index 32d0dd8bc..71b36a9f8 100644 --- a/src/kvirc/ui/kvi_menubar.cpp +++ b/src/kvirc/ui/kvi_menubar.cpp @@ -44,6 +44,7 @@ KviMenuBar::KviMenuBar(KviFrame * par,const char * name) : KviTalMenuBar(par,name) { + setAutoFillBackground(false); m_pFrm = par; m_iNumDefaultItems = 0; diff --git a/src/kvirc/ui/kvi_statusbar.cpp b/src/kvirc/ui/kvi_statusbar.cpp index 6f2e14d7c..38e92fd87 100644 --- a/src/kvirc/ui/kvi_statusbar.cpp +++ b/src/kvirc/ui/kvi_statusbar.cpp @@ -54,6 +54,8 @@ KviStatusBar::KviStatusBar(KviFrame * pFrame) : QStatusBar(pFrame) { + setAutoFillBackground(false); + setProperty("name","statusbar"); m_pFrame = pFrame; // ugh :D diff --git a/src/kvirc/ui/kvi_windowlist_tree.cpp b/src/kvirc/ui/kvi_windowlist_tree.cpp index 033173453..f3355c876 100644 --- a/src/kvirc/ui/kvi_windowlist_tree.cpp +++ b/src/kvirc/ui/kvi_windowlist_tree.cpp @@ -169,6 +169,7 @@ KviTreeWindowListTreeWidget::KviTreeWindowListTreeWidget(QWidget * par) setFont(KVI_OPTION_FONT(KviOption_fontTreeWindowList)); setFocusPolicy(Qt::NoFocus); setFrameShape(NoFrame); + setAutoFillBackground(false); viewport()->setAutoFillBackground(false); m_pPrevItem=0; } diff --git a/src/modules/options/optw_interfacelookglobal.cpp b/src/modules/options/optw_interfacelookglobal.cpp index 6e08dc8bb..dd69cecc8 100644 --- a/src/modules/options/optw_interfacelookglobal.cpp +++ b/src/modules/options/optw_interfacelookglobal.cpp @@ -96,35 +96,26 @@ KviThemeTransparencyOptionsWidget::KviThemeTransparencyOptionsWidget(QWidget * p KVI_OPTION_BOOL(KviOption_boolUseGlobalPseudoTransparency)); connect(m_pUseTransparencyBoolSelector,SIGNAL(toggled(bool)),c,SLOT(setEnabled(bool))); - #ifdef COMPILE_X11_SUPPORT - m_pUseCompositingForTransparencyBoolSelector = addBoolSelector(0,4,1,4,__tr2qs_ctx("Use compositing for real transparency","options"),KviOption_boolUseCompositingForTransparency, KVI_OPTION_BOOL(KviOption_boolUseGlobalPseudoTransparency)); - m_pGlobalBackgroundPixmapSelector = addPixmapSelector(0,6,1,6,__tr2qs_ctx("Transparency blend image:","options"),KviOption_pixmapGlobalTransparencyBackground, KVI_OPTION_BOOL(KviOption_boolUseGlobalPseudoTransparency) && !KVI_OPTION_BOOL(KviOption_boolUseCompositingForTransparency)); - layout()->setRowStretch(6,1); + m_pUseCompositingForTransparencyBoolSelector = addBoolSelector(0,4,1,4,__tr2qs_ctx("Use compositing for real transparency","options"),KviOption_boolUseCompositingForTransparency, KVI_OPTION_BOOL(KviOption_boolUseGlobalPseudoTransparency)); - if(g_pApp->supportsCompositing()) - { - connect(m_pUseTransparencyBoolSelector,SIGNAL(toggled(bool)),m_pUseCompositingForTransparencyBoolSelector,SLOT(setEnabled(bool))); - connect(m_pUseCompositingForTransparencyBoolSelector,SIGNAL(toggled(bool)),this,SLOT(enableGlobalBackgroundPixmapSelector(bool))); - } else { - m_pUseCompositingForTransparencyBoolSelector->setEnabled(false); - m_pUseCompositingForTransparencyBoolSelector->setChecked(false); - enableGlobalBackgroundPixmapSelector(true); - } + m_pGlobalBackgroundPixmapSelector = addPixmapSelector(0,6,1,6,__tr2qs_ctx("Transparency blend image:","options"),KviOption_pixmapGlobalTransparencyBackground, KVI_OPTION_BOOL(KviOption_boolUseGlobalPseudoTransparency) && !KVI_OPTION_BOOL(KviOption_boolUseCompositingForTransparency)); + layout()->setRowStretch(6,1); - #elif defined(COMPILE_ON_WINDOWS) || defined(COMPILE_ON_MINGW) - m_pUseWindowsFakeDesktopTransparencyBoolSelector = addBoolSelector(0,4,1,4,__tr2qs_ctx("Use desktop background for transparency","options"),KviOption_boolUseWindowsDesktopForTransparency, KVI_OPTION_BOOL(KviOption_boolUseGlobalPseudoTransparency)); - - m_pGlobalBackgroundPixmapSelector = addPixmapSelector(0,6,1,6,__tr2qs_ctx("Transparency blend image:","options"),KviOption_pixmapGlobalTransparencyBackground, KVI_OPTION_BOOL(KviOption_boolUseGlobalPseudoTransparency) && !KVI_OPTION_BOOL(KviOption_boolUseCompositingForTransparency)); - layout()->setRowStretch(6,1); + if(g_pApp->supportsCompositing()) + { + connect(m_pUseTransparencyBoolSelector,SIGNAL(toggled(bool)),m_pUseCompositingForTransparencyBoolSelector,SLOT(setEnabled(bool))); + connect(m_pUseCompositingForTransparencyBoolSelector,SIGNAL(toggled(bool)),this,SLOT(enableGlobalBackgroundPixmapSelector(bool))); + } else { + m_pUseCompositingForTransparencyBoolSelector->setEnabled(false); + m_pUseCompositingForTransparencyBoolSelector->setChecked(false); + enableGlobalBackgroundPixmapSelector(true); + } - connect(m_pUseTransparencyBoolSelector,SIGNAL(toggled(bool)),m_pUseWindowsFakeDesktopTransparencyBoolSelector,SLOT(setEnabled(bool))); + #if defined(COMPILE_ON_WINDOWS) || defined(COMPILE_ON_MINGW) + m_pUseWindowsFakeDesktopTransparencyBoolSelector = addBoolSelector(0,4,1,4,__tr2qs_ctx("Use desktop background for transparency","options"),KviOption_boolUseWindowsDesktopForTransparency, KVI_OPTION_BOOL(KviOption_boolUseGlobalPseudoTransparency)); connect(m_pUseWindowsFakeDesktopTransparencyBoolSelector,SIGNAL(toggled(bool)),this,SLOT(enableGlobalBackgroundPixmapSelector(bool))); - - #else - m_pGlobalBackgroundPixmapSelector = addPixmapSelector(0,4,1,4,__tr2qs_ctx("Transparency blend image:","options"),KviOption_pixmapGlobalTransparencyBackground, KVI_OPTION_BOOL(KviOption_boolUseGlobalPseudoTransparency)); - layout()->setRowStretch(4,1); - #endif //!COMPILE_X11_SUPPORT + #endif connect(m_pUseTransparencyBoolSelector,SIGNAL(toggled(bool)),this,SLOT(enableGlobalBackgroundPixmapSelector(bool))); #else //!COMPILE_PSEUDO_TRANSPARENCY createLayout(); |
