summaryrefslogtreecommitdiff
path: root/libopie2
authorzecke <zecke>2004-03-27 20:18:11 (UTC)
committer zecke <zecke>2004-03-27 20:18:11 (UTC)
commit0821e9018b0a3b1ea11ff5a4454db2e047d94d88 (patch) (side-by-side diff)
tree5a712141869f84167a29b92b97489001ce205148 /libopie2
parent9202a4007eb3866acf07264d234da59b310f0a8c (diff)
downloadopie-0821e9018b0a3b1ea11ff5a4454db2e047d94d88.zip
opie-0821e9018b0a3b1ea11ff5a4454db2e047d94d88.tar.gz
opie-0821e9018b0a3b1ea11ff5a4454db2e047d94d88.tar.bz2
Fix key events.
On true hardware events Shift/Ctrl/Alt are not equal with the ButtonState On virtual keyboard events no key() is sent...
Diffstat (limited to 'libopie2') (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
@@ -495,46 +495,83 @@ void OKeyConfigManager::load() {
*/
void OKeyConfigManager::save() {
m_conf->setGroup( m_group );
/*
* Write each item
*/
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() );
}
}
/**
* This is function uses a QMap internally but you can have the same keycode
* with different modifier key. The behaviour is undefined if you add a OKeyConfigItem
* 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;
}
}
return item;
}
/**
* Return the associated id of the item or -1 if no item
* matched the key