* Imported Modifier() and KeyForModifier() from the Keymap class in the
keyboard input server add-on. We should really have a common source for this somewhere... * Used that functionality to change the modifiers when using the mouse, too. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@29756 a95241bf-73f2-0310-859d-f6bbb57e9c96
This commit is contained in:
@@ -133,6 +133,13 @@ KeyboardLayoutView::MouseDown(BPoint point)
|
|||||||
Key* key = _KeyAt(point);
|
Key* key = _KeyAt(point);
|
||||||
if (key != NULL) {
|
if (key != NULL) {
|
||||||
fKeyState[key->code / 8] |= (1 << (7 - (key->code & 7)));
|
fKeyState[key->code / 8] |= (1 << (7 - (key->code & 7)));
|
||||||
|
|
||||||
|
if (fKeymap != NULL && fKeymap->IsModifierKey(key->code)) {
|
||||||
|
fModifiers |= fKeymap->Modifier(key->code);
|
||||||
|
Invalidate();
|
||||||
|
|
||||||
|
// TODO: if possible, we could handle the lock keys for real
|
||||||
|
} else
|
||||||
_InvalidateKey(key);
|
_InvalidateKey(key);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -148,6 +155,13 @@ KeyboardLayoutView::MouseUp(BPoint point)
|
|||||||
if (_HandleDeadKey(key->code, fModifiers) && fDeadKey != 0)
|
if (_HandleDeadKey(key->code, fModifiers) && fDeadKey != 0)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
|
if (fKeymap != NULL && fKeymap->IsModifierKey(key->code)) {
|
||||||
|
int32 newModifiers = modifiers();
|
||||||
|
if (fModifiers != newModifiers) {
|
||||||
|
fModifiers = modifiers();
|
||||||
|
Invalidate();
|
||||||
|
}
|
||||||
|
} else
|
||||||
_InvalidateKey(key);
|
_InvalidateKey(key);
|
||||||
|
|
||||||
if (fDragKey == NULL && fKeymap != NULL) {
|
if (fDragKey == NULL && fKeymap != NULL) {
|
||||||
|
|||||||
@@ -240,6 +240,71 @@ Keymap::IsModifierKey(uint32 keyCode)
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
//! We need to know a modifier for a key
|
||||||
|
uint32
|
||||||
|
Keymap::Modifier(uint32 keyCode)
|
||||||
|
{
|
||||||
|
if (keyCode == fKeys.caps_key)
|
||||||
|
return B_CAPS_LOCK;
|
||||||
|
if (keyCode == fKeys.num_key)
|
||||||
|
return B_NUM_LOCK;
|
||||||
|
if (keyCode == fKeys.scroll_key)
|
||||||
|
return B_SCROLL_LOCK;
|
||||||
|
if (keyCode == fKeys.left_shift_key)
|
||||||
|
return B_LEFT_SHIFT_KEY | B_SHIFT_KEY;
|
||||||
|
if (keyCode == fKeys.right_shift_key)
|
||||||
|
return B_RIGHT_SHIFT_KEY | B_SHIFT_KEY;
|
||||||
|
if (keyCode == fKeys.left_command_key)
|
||||||
|
return B_LEFT_COMMAND_KEY | B_COMMAND_KEY;
|
||||||
|
if (keyCode == fKeys.right_command_key)
|
||||||
|
return B_RIGHT_COMMAND_KEY | B_COMMAND_KEY;
|
||||||
|
if (keyCode == fKeys.left_control_key)
|
||||||
|
return B_LEFT_CONTROL_KEY | B_CONTROL_KEY;
|
||||||
|
if (keyCode == fKeys.right_control_key)
|
||||||
|
return B_RIGHT_CONTROL_KEY | B_CONTROL_KEY;
|
||||||
|
if (keyCode == fKeys.left_option_key)
|
||||||
|
return B_LEFT_OPTION_KEY | B_OPTION_KEY;
|
||||||
|
if (keyCode == fKeys.right_option_key)
|
||||||
|
return B_RIGHT_OPTION_KEY | B_OPTION_KEY;
|
||||||
|
if (keyCode == fKeys.menu_key)
|
||||||
|
return B_MENU_KEY;
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
uint32
|
||||||
|
Keymap::KeyForModifier(uint32 modifier)
|
||||||
|
{
|
||||||
|
if (modifier == B_CAPS_LOCK)
|
||||||
|
return fKeys.caps_key;
|
||||||
|
if (modifier == B_NUM_LOCK)
|
||||||
|
return fKeys.num_key;
|
||||||
|
if (modifier == B_SCROLL_LOCK)
|
||||||
|
return fKeys.scroll_key;
|
||||||
|
if (modifier == B_LEFT_SHIFT_KEY || modifier == B_SHIFT_KEY)
|
||||||
|
return fKeys.left_shift_key;
|
||||||
|
if (modifier == B_RIGHT_SHIFT_KEY)
|
||||||
|
return fKeys.right_shift_key;
|
||||||
|
if (modifier == B_LEFT_COMMAND_KEY || modifier == B_COMMAND_KEY)
|
||||||
|
return fKeys.left_command_key;
|
||||||
|
if (modifier == B_RIGHT_COMMAND_KEY)
|
||||||
|
return fKeys.right_command_key;
|
||||||
|
if (modifier == B_LEFT_CONTROL_KEY || modifier == B_CONTROL_KEY)
|
||||||
|
return fKeys.left_control_key;
|
||||||
|
if (modifier == B_RIGHT_CONTROL_KEY)
|
||||||
|
return fKeys.right_control_key;
|
||||||
|
if (modifier == B_LEFT_OPTION_KEY || modifier == B_OPTION_KEY)
|
||||||
|
return fKeys.left_option_key;
|
||||||
|
if (modifier == B_RIGHT_OPTION_KEY)
|
||||||
|
return fKeys.right_option_key;
|
||||||
|
if (modifier == B_MENU_KEY)
|
||||||
|
return fKeys.menu_key;
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
//! Checks whether a key is a dead key.
|
//! Checks whether a key is a dead key.
|
||||||
uint8
|
uint8
|
||||||
Keymap::IsDeadKey(uint32 keyCode, uint32 modifiers)
|
Keymap::IsDeadKey(uint32 keyCode, uint32 modifiers)
|
||||||
|
|||||||
@@ -27,7 +27,11 @@ public:
|
|||||||
status_t Save(entry_ref& ref);
|
status_t Save(entry_ref& ref);
|
||||||
|
|
||||||
void DumpKeymap();
|
void DumpKeymap();
|
||||||
|
|
||||||
bool IsModifierKey(uint32 keyCode);
|
bool IsModifierKey(uint32 keyCode);
|
||||||
|
uint32 Modifier(uint32 keyCode);
|
||||||
|
uint32 KeyForModifier(uint32 modifier);
|
||||||
|
|
||||||
uint8 IsDeadKey(uint32 keyCode, uint32 modifiers);
|
uint8 IsDeadKey(uint32 keyCode, uint32 modifiers);
|
||||||
bool IsDeadSecondKey(uint32 keyCode, uint32 modifiers,
|
bool IsDeadSecondKey(uint32 keyCode, uint32 modifiers,
|
||||||
uint8 activeDeadKey);
|
uint8 activeDeadKey);
|
||||||
|
|||||||
Reference in New Issue
Block a user