[prev in list] [next in list] [prev in thread] [next in thread]
List: kde-commits
Subject: KDE/kdebase/kwin
From: Luboš Luňák <l.lunak () kde ! org>
Date: 2005-06-22 15:44:26
Message-ID: 1119455066.042899.6744.nullmailer () svn ! kde ! org
[Download RAW message or body]
SVN commit 427993 by lunakl:
Find out what keys are mapped to Alt and Win modifiers instead of having it hardcoded.
I fail to see why anybody would want Alt bound to anything else
than Alt keys, but oh well.
BUG: 106013
M +4 -0 events.cpp
M +51 -8 tabbox.cpp
M +1 -0 tabbox.h
--- trunk/KDE/kdebase/kwin/events.cpp #427992:427993
@@ -452,6 +452,10 @@
if( electricBorder( e ))
return true;
break;
+ case MappingNotify:
+ XRefreshKeyboardMapping( &e->xmapping );
+ tab_box->updateKeyMapping();
+ break;
default:
break;
}
--- trunk/KDE/kdebase/kwin/tabbox.cpp #427992:427993
@@ -54,6 +54,7 @@
no_tasks = i18n("*** No Windows ***");
m = DesktopMode; // init variables
+ updateKeyMapping();
reconfigure();
reset();
connect(&delayedShowTimer, SIGNAL(timeout()), this, SLOT(show()));
@@ -664,6 +665,10 @@
return bAll;
}
+static const int MAX_KEYSYMS = 4;
+static uint alt_keysyms[ MAX_KEYSYMS ];
+static uint win_keysyms[ MAX_KEYSYMS ];
+
static bool areModKeysDepressed( const KKeySequence& seq )
{
uint rgKeySyms[10];
@@ -684,17 +689,17 @@
}
if( mod & KKey::ALT )
{
- rgKeySyms[nKeySyms++] = XK_Alt_L;
- rgKeySyms[nKeySyms++] = XK_Alt_R;
+ for( int i = 0;
+ i < MAX_KEYSYMS && alt_keysyms[ i ] != NoSymbol;
+ ++i )
+ rgKeySyms[nKeySyms++] = alt_keysyms[ i ];
}
if( mod & KKey::WIN )
{
- // HACK: it would take a lot of code to determine whether the Win key
- // is associated with Super or Meta, so check for both
- rgKeySyms[nKeySyms++] = XK_Super_L;
- rgKeySyms[nKeySyms++] = XK_Super_R;
- rgKeySyms[nKeySyms++] = XK_Meta_L;
- rgKeySyms[nKeySyms++] = XK_Meta_R;
+ for( int i = 0;
+ i < MAX_KEYSYMS && win_keysyms[ i ] != NoSymbol;
+ ++i )
+ rgKeySyms[nKeySyms++] = win_keysyms[ i ];
}
return areKeySymXsDepressed( false, rgKeySyms, nKeySyms );
@@ -712,6 +717,44 @@
return false;
}
+void TabBox::updateKeyMapping()
+ {
+ const int size = 6;
+ uint keysyms[ size ] = { XK_Alt_L, XK_Alt_R, XK_Super_L, XK_Super_R, XK_Meta_L, XK_Meta_R };
+ XModifierKeymap* map = XGetModifierMapping( qt_xdisplay() );
+ int altpos = 0;
+ int winpos = 0;
+ int winmodpos = -1;
+ int winmod = KKeyNative::modX( KKey::WIN );
+ while( winmod > 0 ) // get position of the set bit in winmod
+ {
+ winmod >>= 1;
+ ++winmodpos;
+ }
+ for( int i = 0;
+ i < MAX_KEYSYMS;
+ ++i )
+ alt_keysyms[ i ] = win_keysyms[ i ] = NoSymbol;
+ for( int i = 0;
+ i < size;
+ ++i )
+ {
+ KeyCode keycode = XKeysymToKeycode( qt_xdisplay(), keysyms[ i ] );
+ for( int j = 0;
+ j < map->max_keypermod;
+ ++j )
+ {
+ if( map->modifiermap[ 3 * map->max_keypermod + j ] == keycode ) // Alt
+ if( altpos < MAX_KEYSYMS )
+ alt_keysyms[ altpos++ ] = keysyms[ i ];
+ if( winmodpos >= 0 && map->modifiermap[ winmodpos * map->max_keypermod + j ] == keycode )
+ if( winpos < MAX_KEYSYMS )
+ win_keysyms[ winpos++ ] = keysyms[ i ];
+ }
+ }
+ XFreeModifiermap( map );
+ }
+
void Workspace::slotWalkThroughWindows()
{
if ( root != qt_xrootwin() )
--- trunk/KDE/kdebase/kwin/tabbox.h #427992:427993
@@ -53,6 +53,7 @@
Workspace* workspace() const;
void reconfigure();
+ void updateKeyMapping();
protected:
void showEvent( QShowEvent* );
[prev in list] [next in list] [prev in thread] [next in thread]
Configure |
About |
News |
Add a list |
Sponsored by KoreLogic