diff --git a/src/Part.cpp b/src/Part.cpp index 39719da2..4b076d6f 100644 --- a/src/Part.cpp +++ b/src/Part.cpp @@ -23,11 +23,13 @@ // Qt #include + // KDE #include #include #include #include +#include #include // Konsole @@ -39,9 +41,16 @@ #include "Session.h" #include "SessionController.h" #include "SessionManager.h" +#include "TerminalDisplay.h" #include "ViewManager.h" #include "MainWindow.h" +// X +#ifdef Q_WS_X11 +#include +#include +#endif + extern "C" { // entry point for Konsole part library, @@ -70,6 +79,8 @@ Part::Part(QWidget* parentWidget , QObject* parent) ,_pluggedController(0) ,_manageProfilesAction(0) { + TerminalDisplay::HAVE_TRANSPARENCY = transparencyAvailable(); + // setup global actions createGlobalActions(); @@ -109,6 +120,35 @@ void Part::setupActionsForSession(SessionController* session) KActionCollection* collection = session->actionCollection(); collection->addAction("manage-profiles",_manageProfilesAction); } +bool Part::transparencyAvailable() +{ +#ifdef Q_WS_X11 + bool ARGB = false; + + int screen = QX11Info::appScreen(); + bool depth = (QX11Info::appDepth() == 32); + + Display* display = QX11Info::display(); + Visual* visual = static_cast(QX11Info::appVisual(screen)); + + XRenderPictFormat* format = XRenderFindVisualFormat(display, visual); + + if (depth && format->type == PictTypeDirect && format->direct.alphaMask) + { + ARGB = true; + } + + if (ARGB) + { + return KWindowSystem::compositingActive(); + } + else +#endif + { + return false; + } +} + bool Part::openFile() { return false; diff --git a/src/Part.h b/src/Part.h index 817d124c..935b81ed 100644 --- a/src/Part.h +++ b/src/Part.h @@ -119,6 +119,7 @@ private: Session* activeSession() const; void setupActionsForSession(SessionController* session); void createGlobalActions(); + bool transparencyAvailable(); private: ViewManager* _viewManager; diff --git a/src/TerminalDisplay.h b/src/TerminalDisplay.h index 684aeba0..9bea7657 100644 --- a/src/TerminalDisplay.h +++ b/src/TerminalDisplay.h @@ -386,6 +386,8 @@ public: /** Returns the terminal screen section which is displayed in this widget. See setScreenWindow() */ ScreenWindow* screenWindow() const; + static bool HAVE_TRANSPARENCY; + public slots: /** @@ -728,7 +730,6 @@ private: }; InputMethodData _inputMethodData; - static bool HAVE_TRANSPARENCY; static bool _antialiasText; // do we antialias or not //the delay in milliseconds between redrawing blinking text