summaryrefslogtreecommitdiffstats
path: root/kxkb/kxkb.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'kxkb/kxkb.cpp')
-rw-r--r--kxkb/kxkb.cpp131
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"));
}