summaryrefslogtreecommitdiff
path: root/libopie2/opieui
Side-by-side diff
Diffstat (limited to 'libopie2/opieui') (more/less context) (ignore whitespace changes)
-rw-r--r--libopie2/opieui/okeyconfigwidget.cpp41
1 files changed, 39 insertions, 2 deletions
diff --git a/libopie2/opieui/okeyconfigwidget.cpp b/libopie2/opieui/okeyconfigwidget.cpp
index b4f1c5e..2ea0bd5 100644
--- a/libopie2/opieui/okeyconfigwidget.cpp
+++ b/libopie2/opieui/okeyconfigwidget.cpp
@@ -501,12 +501,18 @@ void OKeyConfigManager::save() {
*/
for( OKeyConfigItem::List::Iterator it = m_keys.begin();
it != m_keys.end(); ++it ) {
if ( (*it).isEmpty() )
continue;
OKeyPair pair = (*it).keyPair();
+ OKeyPair deft = (*it).defaultKeyPair();
+ /* don't write if it is the default setting */
+ if ( (pair.keycode() == deft.keycode()) &&
+ (pair.modifier()== deft.modifier() ) )
+ return;
+
m_conf->writeEntry((*it).configKey()+"key", pair.keycode() );
m_conf->writeEntry((*it).configKey()+"mod", pair.modifier() );
}
}
/**
@@ -515,20 +521,51 @@ void OKeyConfigManager::save() {
* with same keycode and modifier key. The GUI takes care that a user can't
* cofigure two keys.
*
* Make sure you call e->ignore if you don't want to handle this event
*/
OKeyConfigItem OKeyConfigManager::handleKeyEvent( QKeyEvent* e ) {
- OKeyConfigItem::List _keyList = keyList( e->key() );
+ /*
+ * Fix Up issues with Qt/E, my keybard, and virtual input
+ * methods
+ * First my Keyboard delivers 256,512,1024 for shift/ctrl/alt instead of the button state
+ * Also key() on virtual inputmethods are zero and only ascii. We need to fix upper and lower
+ * case ascii
+ */
+ int key = e->key();
+ int mod = e->state();
+
+/*
+ * virtual keyboard
+ * else change the button mod only
+ */
+ qWarning( "handleKeyEvent...." );
+ if ( key == 0 ) {
+ key = e->ascii();
+ if ( key > 96 && key < 123)
+ key -= 32;
+ }else{
+ int new_mod = 0;
+ if ( mod & 256 )
+ new_mod |= Qt::ShiftButton;
+ else if ( mod & 512 )
+ new_mod |= Qt::AltButton;
+ else if ( mod & 1024 )
+ new_mod |= Qt::ControlButton;
+
+ mod = new_mod == 0? mod : new_mod;
+ }
+
+ OKeyConfigItem::List _keyList = keyList( key );
if ( _keyList.isEmpty() )
return OKeyConfigItem();
OKeyConfigItem item;
for ( OKeyConfigItem::List::Iterator it = _keyList.begin(); it != _keyList.end();
++it ) {
- if ( (*it).keyPair().modifier() == e->state() ) {
+ if ( (*it).keyPair().modifier() == mod ) {
item = *it;
break;
}
}