diff --git a/tabbox.cpp b/tabbox.cpp index 0c75a75989..f3381fbb01 100644 --- a/tabbox.cpp +++ b/tabbox.cpp @@ -280,6 +280,7 @@ TabBox::TabBox(QObject *parent) , m_desktopGrab(false) , m_tabGrab(false) , m_forcedGlobalMouseGrab(false) + , m_ready(false) { m_isShown = false; m_defaultConfig = TabBoxConfig(); @@ -308,11 +309,9 @@ TabBox::TabBox(QObject *parent) m_desktopListConfig.setDesktopSwitchingMode(TabBoxConfig::StaticDesktopSwitching); m_desktopListConfig.setLayout(TabBoxConfig::VerticalLayout); m_tabBox = new TabBoxHandlerImpl(this); - m_tabBox->setConfig(m_defaultConfig); - + connect(m_tabBox, SIGNAL(ready()), SLOT(handlerReady())); m_tabBoxMode = TabBoxDesktopMode; // init variables - reconfigure(); connect(&m_delayedShowTimer, SIGNAL(timeout()), this, SLOT(show())); } @@ -320,6 +319,13 @@ TabBox::~TabBox() { } +void TabBox::handlerReady() +{ + m_tabBox->setConfig(m_defaultConfig); + reconfigure(); + m_ready = true; +} + void TabBox::initShortcuts(KActionCollection* keys) { KAction *a = NULL; @@ -752,26 +758,41 @@ void TabBox::navigatingThroughWindows(bool forward, const KShortcut& shortcut, T void TabBox::slotWalkThroughWindows() { + if (!m_ready){ + return; + } navigatingThroughWindows(true, m_cutWalkThroughWindows, TabBoxWindowsMode); } void TabBox::slotWalkBackThroughWindows() { + if (!m_ready){ + return; + } navigatingThroughWindows(false, m_cutWalkThroughWindowsReverse, TabBoxWindowsMode); } void TabBox::slotWalkThroughWindowsAlternative() { + if (!m_ready){ + return; + } navigatingThroughWindows(true, m_cutWalkThroughWindowsAlternative, TabBoxWindowsAlternativeMode); } void TabBox::slotWalkBackThroughWindowsAlternative() { + if (!m_ready){ + return; + } navigatingThroughWindows(false, m_cutWalkThroughWindowsAlternativeReverse, TabBoxWindowsAlternativeMode); } void TabBox::slotWalkThroughDesktops() { + if (!m_ready){ + return; + } if (isGrabbed()) return; if (areModKeysDepressed(m_cutWalkThroughDesktops)) { @@ -784,6 +805,9 @@ void TabBox::slotWalkThroughDesktops() void TabBox::slotWalkBackThroughDesktops() { + if (!m_ready){ + return; + } if (isGrabbed()) return; if (areModKeysDepressed(m_cutWalkThroughDesktopsReverse)) { @@ -796,6 +820,9 @@ void TabBox::slotWalkBackThroughDesktops() void TabBox::slotWalkThroughDesktopList() { + if (!m_ready){ + return; + } if (isGrabbed()) return; if (areModKeysDepressed(m_cutWalkThroughDesktopList)) { @@ -808,6 +835,9 @@ void TabBox::slotWalkThroughDesktopList() void TabBox::slotWalkBackThroughDesktopList() { + if (!m_ready){ + return; + } if (isGrabbed()) return; if (areModKeysDepressed(m_cutWalkThroughDesktopListReverse)) { diff --git a/tabbox.h b/tabbox.h index f83ae4507d..9c77fa0ab5 100644 --- a/tabbox.h +++ b/tabbox.h @@ -188,6 +188,8 @@ public slots: void slotWalkThroughWindowsAlternativeKeyChanged(const QKeySequence& seq); void slotWalkBackThroughWindowsAlternativeKeyChanged(const QKeySequence& seq); + void handlerReady(); + signals: void tabBoxAdded(int); void tabBoxClosed(); @@ -239,6 +241,7 @@ private: KShortcut m_cutWalkThroughGroupWindows, m_cutWalkThroughGroupWindowsReverse; KShortcut m_cutWalkThroughWindowsAlternative, m_cutWalkThroughWindowsAlternativeReverse; bool m_forcedGlobalMouseGrab; + bool m_ready; // indicates whether the config is completely loaded }; } // namespace TabBox } // namespace diff --git a/tabbox/tabboxhandler.cpp b/tabbox/tabboxhandler.cpp index 5ffb27810f..39b09b75cd 100644 --- a/tabbox/tabboxhandler.cpp +++ b/tabbox/tabboxhandler.cpp @@ -30,6 +30,8 @@ along with this program. If not, see . #include "tabboxview.h" // Qt #include +#include +#include #include #include #include @@ -94,11 +96,10 @@ TabBoxHandlerPrivate::TabBoxHandlerPrivate(TabBoxHandler *q) view = new TabBoxView(); // load the layouts - parseConfig(KStandardDirs::locate("data", "kwin/DefaultTabBoxLayouts.xml")); - view->clientDelegate()->setConfig(tabBoxLayouts.value("Default")); - view->additionalClientDelegate()->setConfig(tabBoxLayouts.value("Text")); - view->desktopDelegate()->setConfig(tabBoxLayouts.value("Desktop")); - view->desktopDelegate()->setLayouts(tabBoxLayouts); + QFuture< void> future = QtConcurrent::run(this, &TabBoxHandlerPrivate::parseConfig, KStandardDirs::locate("data", "kwin/DefaultTabBoxLayouts.xml")); + QFutureWatcher< void > *watcher = new QFutureWatcher< void >(q); + watcher->setFuture(future); + q->connect(watcher, SIGNAL(finished()), q, SIGNAL(ready())); } TabBoxHandlerPrivate::~TabBoxHandlerPrivate() @@ -325,6 +326,10 @@ void TabBoxHandlerPrivate::parseConfig(const QString& fileName) tabBoxLayouts.insert(layoutName, currentLayout); } } // for loop layouts + view->clientDelegate()->setConfig(tabBoxLayouts.value("Default")); + view->additionalClientDelegate()->setConfig(tabBoxLayouts.value("Text")); + view->desktopDelegate()->setConfig(tabBoxLayouts.value("Desktop")); + view->desktopDelegate()->setLayouts(tabBoxLayouts); } /*********************************************** diff --git a/tabbox/tabboxhandler.h b/tabbox/tabboxhandler.h index af5a2c8de9..cefec5f587 100644 --- a/tabbox/tabboxhandler.h +++ b/tabbox/tabboxhandler.h @@ -339,6 +339,7 @@ signals: * @see setConfig */ void configChanged(); + void ready(); private: friend class TabBoxHandlerPrivate;