diff options
Diffstat (limited to 'kxkb/kxkb.cpp')
-rw-r--r-- | kxkb/kxkb.cpp | 131 |
1 files changed, 75 insertions, 56 deletions
diff --git a/kxkb/kxkb.cpp b/kxkb/kxkb.cpp index 9c30ac440..8bced3fea 100644 --- a/kxkb/kxkb.cpp +++ b/kxkb/kxkb.cpp @@ -105,80 +105,85 @@ KXKBApp::~KXKBApp() int KXKBApp::newInstance() { - if (settingsRead()) { - setLayout(m_currentLayout); - } + readSettings(); return 0; } -bool KXKBApp::settingsRead() +void KXKBApp::readSettings() { - kxkbConfig.load(KxkbConfig::LOAD_ALL); - applySettings(); + // Xkb options + kxkbConfig.load(KxkbConfig::LOAD_INIT_OPTIONS); - if ( kxkbConfig.m_useKxkb == false ) { + if (!kxkbConfig.m_useKxkb) + { + kdDebug() << "kxkb is disabled, applying xkb options and exiting" << endl; + applyXkbOptions(); kapp->quit(); - return false; + return; } - m_prevWinId = X11Helper::UNKNOWN_WINDOW_ID; + kdDebug() << "applying xkb options and layouts" << endl; + kxkbConfig.load(KxkbConfig::LOAD_ALL_OPTIONS); + applyXkbOptions(); - if( kxkbConfig.m_switchingPolicy == SWITCH_POLICY_GLOBAL ) { - delete kWinModule; - kWinModule = NULL; - } - else { - TQDesktopWidget desktopWidget; - if( desktopWidget.numScreens() > 1 && desktopWidget.isVirtualDesktop() == false ) { - kdWarning() << "With non-virtual desktop only global switching policy supported on non-primary screens" << endl; - //TODO: find out how to handle that - } + // Active window watcher + m_prevWinId = X11Helper::UNKNOWN_WINDOW_ID; - if( kWinModule == NULL ) { - kWinModule = new KWinModule(0, KWinModule::INFO_DESKTOP); - connect(kWinModule, TQ_SIGNAL(activeWindowChanged(WId)), TQ_SLOT(windowChanged(WId))); - } - m_prevWinId = kWinModule->activeWindow(); - kdDebug() << "Active window " << m_prevWinId << endl; - } + if (kxkbConfig.m_switchingPolicy == SWITCH_POLICY_GLOBAL) + { + delete kWinModule; + kWinModule = nullptr; + } - m_layoutOwnerMap->reset(); - m_layoutOwnerMap->setCurrentWindow( m_prevWinId ); + else + { + TQDesktopWidget desktopWidget; + if (desktopWidget.numScreens() > 1 && !desktopWidget.isVirtualDesktop()) + { + kdWarning() << "With non-virtual desktop only global switching policy supported on non-primary screens" << endl; + //TODO: find out how to handle that + } - if( m_rules == NULL ) - m_rules = new XkbRules(false); + if (!kWinModule) + { + kWinModule = new KWinModule(nullptr, KWinModule::INFO_DESKTOP); + connect(kWinModule, TQ_SIGNAL(activeWindowChanged(WId)), TQ_SLOT(windowChanged(WId))); + } - for(int ii=0; ii<(int)kxkbConfig.m_layouts.count(); ii++) { - LayoutUnit& layoutUnit = kxkbConfig.m_layouts[ii]; - } + m_prevWinId = kWinModule->activeWindow(); + kdDebug() << "Active window " << m_prevWinId << endl; + } - m_currentLayout = kxkbConfig.m_layouts[0]; - kdDebug() << "default layout is " << m_currentLayout.toPair() << endl; + // Init layout owner map + m_layoutOwnerMap->reset(); + m_layoutOwnerMap->setCurrentWindow( m_prevWinId ); - if( kxkbConfig.m_layouts.count() == 1 && !kxkbConfig.m_showSingle) { - kapp->quit(); - return false; - } + // Init rules + if (!m_rules) + { + m_rules = new XkbRules(false); + } - initTray(); + // Init layouts + for (int i = 0; i < kxkbConfig.m_layouts.count(); i++) + { + LayoutUnit& layoutUnit = kxkbConfig.m_layouts[i]; + } - TDEGlobal::config()->reparseConfiguration(); // kcontrol modified kdeglobals - keys->readSettings(); - keys->updateConnections(); + m_currentLayout = kxkbConfig.m_layouts[0]; + setLayout(m_currentLayout); - return true; -} + kdDebug() << "default layout is " << m_currentLayout.toPair() << endl; -void KXKBApp::applySettings() -{ - XkbOptions options = kxkbConfig.getKXkbOptions(); - if (!m_extension->setXkbOptions(options)) { - kdWarning() << "Setting XKB options failed!" << endl; + if (kxkbConfig.m_layouts.count() == 1 && !kxkbConfig.m_showSingle) + { + kapp->quit(); + return; } -} -void KXKBApp::initTray() -{ + TDEGlobal::config()->reparseConfiguration(); // kcontrol modified kdeglobals + + // Init tray if (!m_tray) { m_tray = new KxkbSystemTray(&kxkbConfig); @@ -189,13 +194,25 @@ void KXKBApp::initTray() m_tray->initLayoutList(kxkbConfig.m_layouts, *m_rules); m_tray->setCurrentLayout(m_currentLayout); m_tray->show(); + + // Init keybindings + keys->readSettings(); + keys->updateConnections(); +} + +void KXKBApp::applyXkbOptions() +{ + XkbOptions options = kxkbConfig.getKXkbOptions(); + if (!m_extension->setXkbOptions(options)) { + kdWarning() << "Setting XKB options failed!" << endl; + } } void KXKBApp::hardwareChanged(TDEGenericDevice *dev) { if (dev->type() == TDEGenericDeviceType::Keyboard) { - TQTimer::singleShot(500, this, TQ_SLOT(applySettings())); + TQTimer::singleShot(500, this, TQ_SLOT(applyXkbOptions())); } } @@ -275,11 +292,13 @@ void KXKBApp::slotGroupChanged(uint group) { kdDebug() << "slotGroupChanged: " << group << ", layout count: " << kxkbConfig.m_layouts.count() << endl; if (group >= kxkbConfig.m_layouts.count()) { - if (m_tray) { + if (m_tray) + { m_tray->setError(i18n("Unknown")); } - if (kxkbConfig.m_enableNotify) { + if (kxkbConfig.m_enableNotify) + { showErrorNotification(i18n("Unknown")); } |