diff --git a/src/servers/app/Layer.cpp b/src/servers/app/Layer.cpp index 52cbfe8197..b1df80bbb0 100644 --- a/src/servers/app/Layer.cpp +++ b/src/servers/app/Layer.cpp @@ -1166,6 +1166,46 @@ Layer::MouseWheelChanged(const PointerEvent& evt) } } +void +Layer::KeyDown(const BMessage& msg) +{ + if (Window() && !IsTopLayer()) { + Window()->SendMessageToClient(&msg, B_NULL_TOKEN, true); + } +} + +void +Layer::KeyUp(const BMessage& msg) +{ + if (Window() && !IsTopLayer()) { + Window()->SendMessageToClient(&msg, B_NULL_TOKEN, true); + } +} + +void +Layer::UnmappedKeyDown(const BMessage& msg) +{ + if (Window() && !IsTopLayer()) { + Window()->SendMessageToClient(&msg, B_NULL_TOKEN, true); + } +} + +void +Layer::UnmappedKeyUp(const BMessage& msg) +{ + if (Window() && !IsTopLayer()) { + Window()->SendMessageToClient(&msg, B_NULL_TOKEN, true); + } +} + +void +Layer::ModifiersChanged(const BMessage& msg) +{ + if (Window() && !IsTopLayer()) { + Window()->SendMessageToClient(&msg, B_NULL_TOKEN, true); + } +} + void Layer::WorkspaceActivated(int32 index, bool active) { diff --git a/src/servers/app/Layer.h b/src/servers/app/Layer.h index 54ede89dd3..10f29f38de 100644 --- a/src/servers/app/Layer.h +++ b/src/servers/app/Layer.h @@ -162,6 +162,13 @@ class Layer { virtual void MouseUp(const PointerEvent& evt); virtual void MouseMoved(const PointerEvent& evt, uint32 transit); virtual void MouseWheelChanged(const PointerEvent& evt); + + virtual void KeyDown(const BMessage& msg); + virtual void KeyUp(const BMessage& msg); + virtual void UnmappedKeyDown(const BMessage& msg); + virtual void UnmappedKeyUp(const BMessage& msg); + virtual void ModifiersChanged(const BMessage& msg); + virtual void WorkspaceActivated(int32 index, bool active); virtual void WorkspacesChanged(uint32 oldWorkspaces, uint32 newWorkspaces); diff --git a/src/servers/app/RootLayer.cpp b/src/servers/app/RootLayer.cpp index 8ec3de5365..42940f89cd 100644 --- a/src/servers/app/RootLayer.cpp +++ b/src/servers/app/RootLayer.cpp @@ -1276,26 +1276,23 @@ RootLayer::KeyboardEventHandler(int32 code, BPrivate::PortLink& msg) // window. if (Focus()) { - ServerWindow *win = Focus()->Window(); - if (win) { - BMessage keymsg(B_KEY_DOWN); - keymsg.AddInt64("when", time); - keymsg.AddInt32("key", scancode); + BMessage keymsg(B_KEY_DOWN); + keymsg.AddInt64("when", time); + keymsg.AddInt32("key", scancode); - if (repeatcount > 1) - keymsg.AddInt32("be:key_repeat", repeatcount); + if (repeatcount > 1) + keymsg.AddInt32("be:key_repeat", repeatcount); - keymsg.AddInt32("modifiers", modifiers); - keymsg.AddData("states", B_UINT8_TYPE, keystates, sizeof(int8) * 16); + keymsg.AddInt32("modifiers", modifiers); + keymsg.AddData("states", B_UINT8_TYPE, keystates, sizeof(int8) * 16); - for (uint8 i = 0; i < 3; i++) - keymsg.AddInt8("byte", utf[i]); + for (uint8 i = 0; i < 3; i++) + keymsg.AddInt8("byte", utf[i]); - keymsg.AddString("bytes", string); - keymsg.AddInt32("raw_char", raw_char); + keymsg.AddString("bytes", string); + keymsg.AddInt32("raw_char", raw_char); - win->SendMessageToClient(&keymsg, B_NULL_TOKEN, true); - } + Focus()->KeyDown(keymsg); } free(string); @@ -1357,23 +1354,19 @@ RootLayer::KeyboardEventHandler(int32 code, BPrivate::PortLink& msg) // window. if (Focus()) { - ServerWindow *win = Focus()->Window(); - if (win) { - BMessage keymsg(B_KEY_UP); - keymsg.AddInt64("when", time); - keymsg.AddInt32("key", scancode); - keymsg.AddInt32("modifiers", modifiers); - keymsg.AddData("states", B_UINT8_TYPE, keystates, sizeof(int8) * 16); + BMessage keymsg(B_KEY_UP); + keymsg.AddInt64("when", time); + keymsg.AddInt32("key", scancode); + keymsg.AddInt32("modifiers", modifiers); + keymsg.AddData("states", B_UINT8_TYPE, keystates, sizeof(int8) * 16); - for (uint8 i = 0; i < 3; i++) { - keymsg.AddInt8("byte", utf[i]); - } + for (uint8 i = 0; i < 3; i++) + keymsg.AddInt8("byte", utf[i]); - keymsg.AddString("bytes", string); - keymsg.AddInt32("raw_char", raw_char); + keymsg.AddString("bytes", string); + keymsg.AddInt32("raw_char", raw_char); - win->SendMessageToClient(&keymsg, B_NULL_TOKEN, true); - } + Focus()->KeyUp(keymsg); } free(string); @@ -1399,19 +1392,14 @@ RootLayer::KeyboardEventHandler(int32 code, BPrivate::PortLink& msg) STRACE(("Unmapped Key Down: 0x%lx\n",scancode)); - if(Focus()) - { - ServerWindow *win = Focus()->Window(); - if(win) - { - BMessage keymsg(B_UNMAPPED_KEY_DOWN); - keymsg.AddInt64("when", time); - keymsg.AddInt32("key", scancode); - keymsg.AddInt32("modifiers", modifiers); - keymsg.AddData("states", B_UINT8_TYPE, keystates, sizeof(int8) * 16); + if(Focus()) { + BMessage keymsg(B_UNMAPPED_KEY_DOWN); + keymsg.AddInt64("when", time); + keymsg.AddInt32("key", scancode); + keymsg.AddInt32("modifiers", modifiers); + keymsg.AddData("states", B_UINT8_TYPE, keystates, sizeof(int8) * 16); - win->SendMessageToClient(&keymsg, B_NULL_TOKEN, true); - } + Focus()->UnmappedKeyDown(keymsg); } break; @@ -1435,19 +1423,14 @@ RootLayer::KeyboardEventHandler(int32 code, BPrivate::PortLink& msg) STRACE(("Unmapped Key Up: 0x%lx\n",scancode)); - if(Focus()) - { - ServerWindow *win = Focus()->Window(); - if(win) - { - BMessage keymsg(B_UNMAPPED_KEY_UP); - keymsg.AddInt64("when", time); - keymsg.AddInt32("key", scancode); - keymsg.AddInt32("modifiers", modifiers); - keymsg.AddData("states", B_UINT8_TYPE, keystates, sizeof(int8) * 16); + if(Focus()) { + BMessage keymsg(B_UNMAPPED_KEY_UP); + keymsg.AddInt64("when", time); + keymsg.AddInt32("key", scancode); + keymsg.AddInt32("modifiers", modifiers); + keymsg.AddData("states", B_UINT8_TYPE, keystates, sizeof(int8) * 16); - win->SendMessageToClient(&keymsg, B_NULL_TOKEN, true); - } + Focus()->UnmappedKeyUp(keymsg); } break; @@ -1469,19 +1452,14 @@ RootLayer::KeyboardEventHandler(int32 code, BPrivate::PortLink& msg) msg.Read(&oldmodifiers); msg.Read(keystates,sizeof(int8)*16); - if(Focus()) - { - ServerWindow *win = Focus()->Window(); - if(win) - { - BMessage keymsg(B_MODIFIERS_CHANGED); - keymsg.AddInt64("when", time); - keymsg.AddInt32("modifiers", modifiers); - keymsg.AddInt32("be:old_modifiers", oldmodifiers); - keymsg.AddData("states", B_UINT8_TYPE, keystates, sizeof(int8) * 16); + if(Focus()) { + BMessage keymsg(B_MODIFIERS_CHANGED); + keymsg.AddInt64("when", time); + keymsg.AddInt32("modifiers", modifiers); + keymsg.AddInt32("be:old_modifiers", oldmodifiers); + keymsg.AddData("states", B_UINT8_TYPE, keystates, sizeof(int8) * 16); - win->SendMessageToClient(&keymsg, B_NULL_TOKEN, true); - } + Focus()->ModifiersChanged(keymsg); } break;