From 15757e953a83e67402d51be62c8ab756e134b28d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Martin=20Gr=C3=A4=C3=9Flin?= Date: Sun, 6 Mar 2011 12:15:16 +0100 Subject: [PATCH] TabBox uses signals to notify the effects EffectsHandlerImpl just forwards the signals from TabBox. In order to have a valid pointer to the TabBox, the TabBox is now initialized before compositing in Workspace. --- effects.cpp | 29 +++------------ effects.h | 4 --- effects/boxswitch/boxswitch.cpp | 9 +++-- effects/boxswitch/boxswitch.h | 6 ++-- effects/coverswitch/coverswitch.cpp | 9 +++-- effects/coverswitch/coverswitch.h | 6 ++-- effects/cube/cube.cpp | 9 +++-- effects/cube/cube.h | 6 ++-- effects/flipswitch/flipswitch.cpp | 9 +++-- effects/flipswitch/flipswitch.h | 6 ++-- effects/presentwindows/presentwindows.cpp | 12 ++++--- effects/presentwindows/presentwindows.h | 11 +++--- libkwineffects/kwineffects.cpp | 16 --------- libkwineffects/kwineffects.h | 43 ++++++++++++++++++++--- tabbox.cpp | 21 +++++------ tabbox.h | 6 ++++ workspace.cpp | 3 +- workspace.h | 3 ++ 18 files changed, 112 insertions(+), 96 deletions(-) diff --git a/effects.cpp b/effects.cpp index fcce0d6988..2f344dd865 100644 --- a/effects.cpp +++ b/effects.cpp @@ -26,6 +26,7 @@ along with this program. If not, see . #include "scene_xrender.h" #include "scene_opengl.h" #include "unmanaged.h" +#include "tabbox.h" #include "workspace.h" #include "kwinglutils.h" @@ -101,6 +102,10 @@ EffectsHandlerImpl::EffectsHandlerImpl(CompositingType type) connect(ws, SIGNAL(unmanagedAdded(KWin::Unmanaged*)), this, SLOT(slotUnmanagedAdded(KWin::Unmanaged*))); connect(ws, SIGNAL(clientActivated(KWin::Client*)), this, SLOT(slotClientActivated(KWin::Client*))); connect(ws, SIGNAL(deletedRemoved(KWin::Deleted*)), this, SLOT(slotDeletedRemoved(KWin::Deleted*))); + connect(ws->tabBox(), SIGNAL(tabBoxAdded(int)), SIGNAL(tabBoxAdded(int))); + connect(ws->tabBox(), SIGNAL(tabBoxUpdated()), SIGNAL(tabBoxUpdated())); + connect(ws->tabBox(), SIGNAL(tabBoxClosed()), SIGNAL(tabBoxClosed())); + connect(ws->tabBox(), SIGNAL(tabBoxKeyEvent(QKeyEvent*)), SIGNAL(tabBoxKeyEvent(QKeyEvent*))); // connect all clients foreach (Client *c, ws->clientList()) { setupClientConnections(c); @@ -400,30 +405,6 @@ void EffectsHandlerImpl::windowGeometryShapeChanged(EffectWindow* w, const QRect ep.second->windowGeometryShapeChanged(w, old); } -void EffectsHandlerImpl::tabBoxAdded(int mode) -{ - foreach (const EffectPair & ep, loaded_effects) - ep.second->tabBoxAdded(mode); -} - -void EffectsHandlerImpl::tabBoxClosed() -{ - foreach (const EffectPair & ep, loaded_effects) - ep.second->tabBoxClosed(); -} - -void EffectsHandlerImpl::tabBoxUpdated() -{ - foreach (const EffectPair & ep, loaded_effects) - ep.second->tabBoxUpdated(); -} - -void EffectsHandlerImpl::tabBoxKeyEvent(QKeyEvent* event) -{ - foreach (const EffectPair & ep, loaded_effects) - ep.second->tabBoxKeyEvent(event); -} - void EffectsHandlerImpl::setActiveFullScreenEffect(Effect* e) { fullscreen_effect = e; diff --git a/effects.h b/effects.h index 98d7375261..5d81465e24 100644 --- a/effects.h +++ b/effects.h @@ -164,10 +164,6 @@ public: void clientGroupItemRemoved(EffectWindow* c, EffectWindow* group); void windowDamaged(EffectWindow* w, const QRect& r); void windowGeometryShapeChanged(EffectWindow* w, const QRect& old); - void tabBoxAdded(int mode); - void tabBoxClosed(); - void tabBoxUpdated(); - void tabBoxKeyEvent(QKeyEvent* event); bool borderActivated(ElectricBorder border); void mouseChanged(const QPoint& pos, const QPoint& oldpos, Qt::MouseButtons buttons, Qt::MouseButtons oldbuttons, diff --git a/effects/boxswitch/boxswitch.cpp b/effects/boxswitch/boxswitch.cpp index 7bef1a408a..c243f1d049 100644 --- a/effects/boxswitch/boxswitch.cpp +++ b/effects/boxswitch/boxswitch.cpp @@ -58,6 +58,9 @@ BoxSwitchEffect::BoxSwitchEffect() highlight_margin = 10; reconfigure(ReconfigureAll); connect(effects, SIGNAL(windowClosed(EffectWindow*)), this, SLOT(slotWindowClosed(EffectWindow*))); + connect(effects, SIGNAL(tabBoxAdded(int)), this, SLOT(slotTabBoxAdded(int))); + connect(effects, SIGNAL(tabBoxClosed()), this, SLOT(slotTabBoxClosed())); + connect(effects, SIGNAL(tabBoxUpdated()), this, SLOT(slotTabBoxUpdated())); } BoxSwitchEffect::~BoxSwitchEffect() @@ -289,7 +292,7 @@ void BoxSwitchEffect::windowGeometryShapeChanged(EffectWindow* w, const QRect& o } } -void BoxSwitchEffect::tabBoxAdded(int mode) +void BoxSwitchEffect::slotTabBoxAdded(int mode) { if (!mActivated) { if ((mode == TabBoxWindowsMode && primaryTabBox) || @@ -315,13 +318,13 @@ void BoxSwitchEffect::tabBoxAdded(int mode) } } -void BoxSwitchEffect::tabBoxClosed() +void BoxSwitchEffect::slotTabBoxClosed() { if (mActivated) setInactive(); } -void BoxSwitchEffect::tabBoxUpdated() +void BoxSwitchEffect::slotTabBoxUpdated() { if (mActivated) { if ((mMode == TabBoxWindowsMode || mMode == TabBoxWindowsAlternativeMode) diff --git a/effects/boxswitch/boxswitch.h b/effects/boxswitch/boxswitch.h index c7695974af..61ffed5f60 100644 --- a/effects/boxswitch/boxswitch.h +++ b/effects/boxswitch/boxswitch.h @@ -55,15 +55,15 @@ public: virtual void windowInputMouseEvent(Window w, QEvent* e); virtual void windowDamaged(EffectWindow* w, const QRect& damage); virtual void windowGeometryShapeChanged(EffectWindow* w, const QRect& old); - virtual void tabBoxAdded(int mode); - virtual void tabBoxClosed(); - virtual void tabBoxUpdated(); virtual void* proxy(); void activateFromProxy(int mode, bool animate, bool showText, float positioningFactor); void paintWindowsBox(const QRegion& region); public Q_SLOTS: void slotWindowClosed(EffectWindow* w); + void slotTabBoxAdded(int mode); + void slotTabBoxClosed(); + void slotTabBoxUpdated(); private: class ItemInfo; diff --git a/effects/coverswitch/coverswitch.cpp b/effects/coverswitch/coverswitch.cpp index f94582c04d..e311b329ec 100644 --- a/effects/coverswitch/coverswitch.cpp +++ b/effects/coverswitch/coverswitch.cpp @@ -71,6 +71,9 @@ CoverSwitchEffect::CoverSwitchEffect() const QString fragmentshader = KGlobal::dirs()->findResource("data", "kwin/coverswitch-reflection.glsl"); m_reflectionShader = ShaderManager::instance()->loadFragmentShader(ShaderManager::GenericShader, fragmentshader); connect(effects, SIGNAL(windowClosed(EffectWindow*)), this, SLOT(slotWindowClosed(EffectWindow*))); + connect(effects, SIGNAL(tabBoxAdded(int)), this, SLOT(slotTabBoxAdded(int))); + connect(effects, SIGNAL(tabBoxClosed()), this, SLOT(slotTabBoxClosed())); + connect(effects, SIGNAL(tabBoxUpdated()), this, SLOT(slotTabBoxUpdated())); } CoverSwitchEffect::~CoverSwitchEffect() @@ -527,7 +530,7 @@ void CoverSwitchEffect::paintWindow(EffectWindow* w, int mask, QRegion region, W effects->paintWindow(w, mask, region, data); } -void CoverSwitchEffect::tabBoxAdded(int mode) +void CoverSwitchEffect::slotTabBoxAdded(int mode) { if (effects->activeFullScreenEffect() && effects->activeFullScreenEffect() != this) return; @@ -590,7 +593,7 @@ void CoverSwitchEffect::tabBoxAdded(int mode) } } -void CoverSwitchEffect::tabBoxClosed() +void CoverSwitchEffect::slotTabBoxClosed() { if (mActivated) { if (animateStop) { @@ -612,7 +615,7 @@ void CoverSwitchEffect::tabBoxClosed() } } -void CoverSwitchEffect::tabBoxUpdated() +void CoverSwitchEffect::slotTabBoxUpdated() { if (mActivated) { if (animateSwitch && currentWindowList.count() > 1) { diff --git a/effects/coverswitch/coverswitch.h b/effects/coverswitch/coverswitch.h index 9d1cb8e5e6..c76e2207ef 100644 --- a/effects/coverswitch/coverswitch.h +++ b/effects/coverswitch/coverswitch.h @@ -46,15 +46,15 @@ public: virtual void paintScreen(int mask, QRegion region, ScreenPaintData& data); virtual void postPaintScreen(); virtual void paintWindow(EffectWindow* w, int mask, QRegion region, WindowPaintData& data); - virtual void tabBoxAdded(int mode); - virtual void tabBoxClosed(); - virtual void tabBoxUpdated(); virtual void windowInputMouseEvent(Window w, QEvent* e); static bool supported(); public Q_SLOTS: void slotWindowClosed(EffectWindow *c); + void slotTabBoxAdded(int mode); + void slotTabBoxClosed(); + void slotTabBoxUpdated(); private: void paintScene(EffectWindow* frontWindow, const EffectWindowList& leftWindows, const EffectWindowList& rightWindows, diff --git a/effects/cube/cube.cpp b/effects/cube/cube.cpp index 89edf32b41..ee1d3b34da 100644 --- a/effects/cube/cube.cpp +++ b/effects/cube/cube.cpp @@ -103,6 +103,9 @@ CubeEffect::CubeEffect() m_capShader = ShaderManager::instance()->loadFragmentShader(ShaderManager::GenericShader, capshader); m_textureMirrorMatrix.scale(1.0, -1.0, 1.0); m_textureMirrorMatrix.translate(0.0, -1.0, 0.0); + connect(effects, SIGNAL(tabBoxAdded(int)), this, SLOT(slotTabBoxAdded(int))); + connect(effects, SIGNAL(tabBoxClosed()), this, SLOT(slotTabBoxClosed())); + connect(effects, SIGNAL(tabBoxUpdated()), this, SLOT(slotTabBoxUpdated())); reconfigure(ReconfigureAll); } @@ -1969,7 +1972,7 @@ void CubeEffect::windowInputMouseEvent(Window w, QEvent* e) } } -void CubeEffect::tabBoxAdded(int mode) +void CubeEffect::slotTabBoxAdded(int mode) { if (activated) return; @@ -1983,7 +1986,7 @@ void CubeEffect::tabBoxAdded(int mode) } } -void CubeEffect::tabBoxUpdated() +void CubeEffect::slotTabBoxUpdated() { if (activated) { rotateToDesktop(effects->currentTabBoxDesktop()); @@ -1991,7 +1994,7 @@ void CubeEffect::tabBoxUpdated() } } -void CubeEffect::tabBoxClosed() +void CubeEffect::slotTabBoxClosed() { if (activated) { effects->unrefTabBox(); diff --git a/effects/cube/cube.h b/effects/cube/cube.h index 43f256cdd2..2230074f66 100644 --- a/effects/cube/cube.h +++ b/effects/cube/cube.h @@ -51,9 +51,6 @@ public: virtual void mouseChanged(const QPoint& pos, const QPoint& oldpos, Qt::MouseButtons buttons, Qt::MouseButtons oldbuttons, Qt::KeyboardModifiers modifiers, Qt::KeyboardModifiers oldmodifiers); virtual void windowInputMouseEvent(Window w, QEvent* e); - virtual void tabBoxAdded(int mode); - virtual void tabBoxUpdated(); - virtual void tabBoxClosed(); // proxy functions virtual void* proxy(); @@ -70,6 +67,9 @@ private slots: void cubeShortcutChanged(const QKeySequence& seq); void cylinderShortcutChanged(const QKeySequence& seq); void sphereShortcutChanged(const QKeySequence& seq); + void slotTabBoxAdded(int mode); + void slotTabBoxUpdated(); + void slotTabBoxClosed(); private: enum RotationDirection { Left, diff --git a/effects/flipswitch/flipswitch.cpp b/effects/flipswitch/flipswitch.cpp index ecf3883c31..70eeeea6d1 100644 --- a/effects/flipswitch/flipswitch.cpp +++ b/effects/flipswitch/flipswitch.cpp @@ -71,6 +71,9 @@ FlipSwitchEffect::FlipSwitchEffect() connect(b, SIGNAL(globalShortcutChanged(QKeySequence)), this, SLOT(globalShortcutChangedAll(QKeySequence))); connect(effects, SIGNAL(windowAdded(EffectWindow*)), this, SLOT(slotWindowAdded(EffectWindow*))); connect(effects, SIGNAL(windowClosed(EffectWindow*)), this, SLOT(slotWindowClosed(EffectWindow*))); + connect(effects, SIGNAL(tabBoxAdded(int)), this, SLOT(slotTabBoxAdded(int))); + connect(effects, SIGNAL(tabBoxClosed()), this, SLOT(slotTabBoxClosed())); + connect(effects, SIGNAL(tabBoxUpdated()), this, SLOT(slotTabBoxUpdated())); } FlipSwitchEffect::~FlipSwitchEffect() @@ -510,7 +513,7 @@ void FlipSwitchEffect::paintWindow(EffectWindow* w, int mask, QRegion region, Wi //************************************************************* // Tabbox handling //************************************************************* -void FlipSwitchEffect::tabBoxAdded(int mode) +void FlipSwitchEffect::slotTabBoxAdded(int mode) { if (effects->activeFullScreenEffect() && effects->activeFullScreenEffect() != this) return; @@ -525,7 +528,7 @@ void FlipSwitchEffect::tabBoxAdded(int mode) } } -void FlipSwitchEffect::tabBoxClosed() +void FlipSwitchEffect::slotTabBoxClosed() { if (m_active) { setActive(false, TabboxMode); @@ -533,7 +536,7 @@ void FlipSwitchEffect::tabBoxClosed() } } -void FlipSwitchEffect::tabBoxUpdated() +void FlipSwitchEffect::slotTabBoxUpdated() { if (m_active && !m_stop) { if (!effects->currentTabBoxWindowList().isEmpty()) { diff --git a/effects/flipswitch/flipswitch.h b/effects/flipswitch/flipswitch.h index 75eed010cb..585e3c23cb 100644 --- a/effects/flipswitch/flipswitch.h +++ b/effects/flipswitch/flipswitch.h @@ -44,9 +44,6 @@ public: virtual void postPaintScreen(); virtual void prePaintWindow(EffectWindow *w, WindowPrePaintData &data, int time); virtual void paintWindow(EffectWindow* w, int mask, QRegion region, WindowPaintData& data); - virtual void tabBoxAdded(int mode); - virtual void tabBoxClosed(); - virtual void tabBoxUpdated(); virtual bool borderActivated(ElectricBorder border); virtual void grabbedKeyboardEvent(QKeyEvent* e); @@ -58,6 +55,9 @@ private Q_SLOTS: void globalShortcutChangedAll(QKeySequence shortcut); void slotWindowAdded(EffectWindow* w); void slotWindowClosed(EffectWindow *w); + void slotTabBoxAdded(int mode); + void slotTabBoxClosed(); + void slotTabBoxUpdated(); private: class ItemInfo; diff --git a/effects/presentwindows/presentwindows.cpp b/effects/presentwindows/presentwindows.cpp index dfe458977e..f6980fcef8 100644 --- a/effects/presentwindows/presentwindows.cpp +++ b/effects/presentwindows/presentwindows.cpp @@ -101,6 +101,10 @@ PresentWindowsEffect::PresentWindowsEffect() connect(effects, SIGNAL(windowAdded(EffectWindow*)), this, SLOT(slotWindowAdded(EffectWindow*))); connect(effects, SIGNAL(windowClosed(EffectWindow*)), this, SLOT(slotWindowClosed(EffectWindow*))); connect(effects, SIGNAL(windowDeleted(EffectWindow*)), this, SLOT(slotWindowDeleted(EffectWindow*))); + connect(effects, SIGNAL(tabBoxAdded(int)), this, SLOT(slotTabBoxAdded(int))); + connect(effects, SIGNAL(tabBoxClosed()), this, SLOT(slotTabBoxClosed())); + connect(effects, SIGNAL(tabBoxUpdated()), this, SLOT(slotTabBoxUpdated())); + connect(effects, SIGNAL(tabBoxKeyEvent(QKeyEvent*)), this, SLOT(slotTabBoxKeyEvent(QKeyEvent*))); } PresentWindowsEffect::~PresentWindowsEffect() @@ -662,7 +666,7 @@ void PresentWindowsEffect::grabbedKeyboardEvent(QKeyEvent *e) //----------------------------------------------------------------------------- // Tab box -void PresentWindowsEffect::tabBoxAdded(int mode) +void PresentWindowsEffect::slotTabBoxAdded(int mode) { if (effects->activeFullScreenEffect() && effects->activeFullScreenEffect() != this) return; @@ -680,7 +684,7 @@ void PresentWindowsEffect::tabBoxAdded(int mode) } } -void PresentWindowsEffect::tabBoxClosed() +void PresentWindowsEffect::slotTabBoxClosed() { if (m_activated) { effects->unrefTabBox(); @@ -689,13 +693,13 @@ void PresentWindowsEffect::tabBoxClosed() } } -void PresentWindowsEffect::tabBoxUpdated() +void PresentWindowsEffect::slotTabBoxUpdated() { if (m_activated) setHighlightedWindow(effects->currentTabBoxWindow()); } -void PresentWindowsEffect::tabBoxKeyEvent(QKeyEvent* event) +void PresentWindowsEffect::slotTabBoxKeyEvent(QKeyEvent* event) { if (!m_activated) return; diff --git a/effects/presentwindows/presentwindows.h b/effects/presentwindows/presentwindows.h index 24a6deb5f4..abd02b850c 100644 --- a/effects/presentwindows/presentwindows.h +++ b/effects/presentwindows/presentwindows.h @@ -107,12 +107,6 @@ public: virtual void windowInputMouseEvent(Window w, QEvent *e); virtual void grabbedKeyboardEvent(QKeyEvent *e); - // Tab box - virtual void tabBoxAdded(int mode); - virtual void tabBoxClosed(); - virtual void tabBoxUpdated(); - virtual void tabBoxKeyEvent(QKeyEvent* event); - // atoms virtual void propertyNotify(EffectWindow* w, long atom); @@ -161,6 +155,11 @@ public slots: void slotWindowAdded(EffectWindow *w); void slotWindowClosed(EffectWindow *w); void slotWindowDeleted(EffectWindow *w); + // Tab box + void slotTabBoxAdded(int mode); + void slotTabBoxClosed(); + void slotTabBoxUpdated(); + void slotTabBoxKeyEvent(QKeyEvent* event); private slots: void closeWindow(); diff --git a/libkwineffects/kwineffects.cpp b/libkwineffects/kwineffects.cpp index cd8b7561b0..f5db79c95e 100644 --- a/libkwineffects/kwineffects.cpp +++ b/libkwineffects/kwineffects.cpp @@ -155,22 +155,6 @@ void Effect::windowGeometryShapeChanged(EffectWindow*, const QRect&) { } -void Effect::tabBoxAdded(int) -{ -} - -void Effect::tabBoxClosed() -{ -} - -void Effect::tabBoxUpdated() -{ -} - -void Effect::tabBoxKeyEvent(QKeyEvent*) -{ -} - bool Effect::borderActivated(ElectricBorder) { return false; diff --git a/libkwineffects/kwineffects.h b/libkwineffects/kwineffects.h index 2dcafc7ebd..0b59bab221 100644 --- a/libkwineffects/kwineffects.h +++ b/libkwineffects/kwineffects.h @@ -461,10 +461,6 @@ public: */ virtual void propertyNotify(EffectWindow* w, long atom); - virtual void tabBoxAdded(int mode); - virtual void tabBoxClosed(); - virtual void tabBoxUpdated(); - virtual void tabBoxKeyEvent(QKeyEvent* event); virtual bool borderActivated(ElectricBorder border); /** @@ -891,6 +887,45 @@ Q_SIGNALS: * @since 4.7 **/ void windowUnminimized(EffectWindow *w); + /** + * Signal emitted when a tabbox is added. + * An effect who wants to replace the tabbox with itself should use @link refTabBox. + * @param mode The TabBoxMode. + * @see refTabBox + * @see tabBoxClosed + * @see tabBoxUpdated + * @see tabBoxKeyEvent + * @since 4.7 + **/ + void tabBoxAdded(int mode); + /** + * Signal emitted when the TabBox was closed by KWin core. + * An effect which referenced the TabBox should use @link unrefTabBox to unref again. + * @see unrefTabBox + * @see tabBoxAdded + * @since 4.7 + **/ + void tabBoxClosed(); + /** + * Signal emitted when the selected TabBox window changed or the TabBox List changed. + * An effect should only response to this signal if it referenced the TabBox with @link refTabBox. + * @see refTabBox + * @see currentTabBoxWindowList + * @see currentTabBoxDesktopList + * @see currentTabBoxWindow + * @see currentTabBoxDesktop + * @since 4.7 + **/ + void tabBoxUpdated(); + /** + * Signal emitted when a key event, which is not handled by TabBox directly is, happens while + * TabBox is active. An effect might use the key event to e.g. change the selected window. + * An effect should only response to this signal if it referenced the TabBox with @link refTabBox. + * @param event The key event not handled by TabBox directly + * @see refTabBox + * @since 4.7 + **/ + void tabBoxKeyEvent(QKeyEvent* event); protected: QVector< EffectPair > loaded_effects; diff --git a/tabbox.cpp b/tabbox.cpp index e2d07fe18a..908a92fcc2 100644 --- a/tabbox.cpp +++ b/tabbox.cpp @@ -353,8 +353,7 @@ void TabBox::reset(bool partial_reset) break; } - if (effects) - static_cast(effects)->tabBoxUpdated(); + emit tabBoxUpdated(); } /*! @@ -363,9 +362,7 @@ void TabBox::reset(bool partial_reset) void TabBox::nextPrev(bool next) { setCurrentIndex(m_tabBox->nextPrev(next), false); - - if (effects) - static_cast(effects)->tabBoxUpdated(); + emit tabBoxUpdated(); } @@ -448,8 +445,9 @@ void TabBox::TabBox::setCurrentIndex(QModelIndex index, bool notifyEffects) return; m_index = index; m_tabBox->setCurrentIndex(index); - if (effects && notifyEffects) - static_cast(effects)->tabBoxUpdated(); + if (notifyEffects) { + emit tabBoxUpdated(); + } } /*! @@ -458,8 +456,7 @@ void TabBox::TabBox::setCurrentIndex(QModelIndex index, bool notifyEffects) */ void TabBox::show() { - if (effects) - static_cast(effects)->tabBoxAdded(m_tabBoxMode); + emit tabBoxAdded(m_tabBoxMode); if (isDisplayed()) { m_isShown = false; return; @@ -480,8 +477,7 @@ void TabBox::hide(bool abort) m_isShown = false; unrefDisplay(); } - if (effects) - static_cast(effects)->tabBoxClosed(); + emit tabBoxClosed(); if (isDisplayed()) kDebug(1212) << "Tab box was not properly closed by an effect"; m_index = QModelIndex(); @@ -620,10 +616,9 @@ void TabBox::handleMouseEvent(XEvent* e) void TabBox::TabBox::grabbedKeyEvent(QKeyEvent* event) { + emit tabBoxKeyEvent(event); if (!m_isShown && isDisplayed()) { // tabbox has been replaced, check effects - if (effects) - static_cast(effects)->tabBoxKeyEvent(event); return; } setCurrentIndex(m_tabBox->grabbedKeyEvent(event)); diff --git a/tabbox.h b/tabbox.h index 1f02b1fc7d..ea4ac102a4 100644 --- a/tabbox.h +++ b/tabbox.h @@ -126,6 +126,12 @@ public: public slots: void show(); +signals: + void tabBoxAdded(int); + void tabBoxClosed(); + void tabBoxUpdated(); + void tabBoxKeyEvent(QKeyEvent*); + private: void setCurrentIndex(QModelIndex index, bool notifyEffects = true); void loadConfig(const KConfigGroup& config, TabBoxConfig& tabBoxConfig); diff --git a/workspace.cpp b/workspace.cpp index 03a76caa1b..be725d5b84 100644 --- a/workspace.cpp +++ b/workspace.cpp @@ -217,6 +217,8 @@ Workspace::Workspace(bool restore) ); Extensions::init(); + // need to create the tabbox before compositing scene is setup + tab_box = new TabBox::TabBox(this); setupCompositing(); // Compatibility @@ -235,7 +237,6 @@ Workspace::Workspace(bool restore) client_keys = new KActionCollection(this); initShortcuts(); - tab_box = new TabBox::TabBox(this); desktop_change_osd = new DesktopChangeOSD(this); init(); diff --git a/workspace.h b/workspace.h index cd53fc6528..4e49fd2dd5 100644 --- a/workspace.h +++ b/workspace.h @@ -385,6 +385,9 @@ public: void refTabBox(); void unrefTabBox(); void closeTabBox(bool abort = false); + TabBox::TabBox *tabBox() const { + return tab_box; + } // Tabbing void addClientGroup(ClientGroup* group);