diff --git a/src/servers/app/RootLayer.cpp b/src/servers/app/RootLayer.cpp index 6a0f59ca6b..0edc858f8d 100644 --- a/src/servers/app/RootLayer.cpp +++ b/src/servers/app/RootLayer.cpp @@ -1179,13 +1179,8 @@ RootLayer::KeyboardEventHandler(BMessage *msg) // F1-F12 if (scancode > 0x01 && scancode < 0x0e) { // Check for workspace change or safe video mode -#if !TEST_MODE if (scancode == 0x0d && (modifiers & (B_LEFT_COMMAND_KEY | B_LEFT_CONTROL_KEY | B_LEFT_SHIFT_KEY)) != 0) -#else - if (scancode == 0x0d && (modifiers & (B_LEFT_CONTROL_KEY - | B_LEFT_SHIFT_KEY | B_LEFT_OPTION_KEY)) != 0) -#endif { // TODO: Set to Safe Mode in KeyboardEventHandler:B_KEY_DOWN. (DrawingEngine API change) STRACE(("Safe Video Mode invoked - code unimplemented\n")); @@ -1193,9 +1188,9 @@ RootLayer::KeyboardEventHandler(BMessage *msg) } #if !TEST_MODE - if (modifiers & B_CONTROL_KEY) + if (modifiers & B_COMMAND_KEY) #else - if (modifiers & (B_LEFT_SHIFT_KEY | B_LEFT_CONTROL_KEY)) + if (modifiers & B_CONTROL_KEY) #endif { STRACE(("Set Workspace %ld\n",scancode-1)); @@ -1212,12 +1207,7 @@ RootLayer::KeyboardEventHandler(BMessage *msg) } // Tab key -#if !TEST_MODE - if (scancode == 0x26 && (modifiers & B_CONTROL_KEY)) -#else - if (scancode == 0x26 && (modifiers & B_SHIFT_KEY)) -#endif - { + if (scancode == 0x26 && (modifiers & B_CONTROL_KEY)) { STRACE(("Twitcher\n")); //ServerApp *deskbar = app_server->FindApp("application/x-vnd.Be-TSKB"); //if(deskbar) @@ -1228,14 +1218,8 @@ RootLayer::KeyboardEventHandler(BMessage *msg) //} } -#if !TEST_MODE // PrintScreen - if (scancode == 0xe) -#else - // Pause/Break - if (scancode == 0x7f) -#endif - { + if (scancode == 0xe) { if (GetDrawingEngine()) { char filename[128]; BEntry entry; @@ -1269,10 +1253,8 @@ RootLayer::KeyboardEventHandler(BMessage *msg) msg->FindInt32("key", &scancode); msg->FindInt32("modifiers", &modifiers); -#if !TEST_MODE // Tab key - if(scancode==0x26 && (modifiers & B_CONTROL_KEY)) - { + if (scancode == 0x26 && (modifiers & B_CONTROL_KEY)) { //ServerApp *deskbar=app_server->FindApp("application/x-vnd.Be-TSKB"); //if(deskbar) //{ @@ -1280,53 +1262,36 @@ RootLayer::KeyboardEventHandler(BMessage *msg) break; //} } -#else // TEST_MODE - if(scancode==0x26 && (modifiers & B_LEFT_SHIFT_KEY)) - { - //ServerApp *deskbar=app_server->FindApp("application/x-vnd.Be-TSKB"); - //if(deskbar) - //{ - printf("Send Twitcher message key to Deskbar - unimplmemented\n"); - break; - //} - } -#endif // We got this far, so apparently it's safe to pass to the active // window. if (Focus()) Focus()->KeyUp(msg); - break; } case B_UNMAPPED_KEY_DOWN: - { - if(Focus()) + if (Focus()) Focus()->UnmappedKeyDown(msg); - break; - } - case B_UNMAPPED_KEY_UP: - { - if(Focus()) - Focus()->UnmappedKeyUp(msg); - - break; - } - case B_MODIFIERS_CHANGED: - { - if(Focus()) - Focus()->ModifiersChanged(msg); + case B_UNMAPPED_KEY_UP: + if (Focus()) + Focus()->UnmappedKeyUp(msg); break; - } + + case B_MODIFIERS_CHANGED: + if (Focus()) + Focus()->ModifiersChanged(msg); + break; + default: break; } } + bool RootLayer::AddToInputNotificationLists(Layer *lay, uint32 mask, uint32 options) { diff --git a/src/servers/app/drawing/ViewHWInterface.cpp b/src/servers/app/drawing/ViewHWInterface.cpp index 5d97ed3a5c..b076013a36 100644 --- a/src/servers/app/drawing/ViewHWInterface.cpp +++ b/src/servers/app/drawing/ViewHWInterface.cpp @@ -1,15 +1,13 @@ -//------------------------------------------------------------------------------ -// -// Copyright 2002-2005, Haiku, Inc. -// Distributed under the terms of the MIT License. -// -// -// File Name: ViewHWInterface.cpp -// Authors: DarkWyrm -// Stephan Aßmus -// Description: BView/BWindow combination HWInterface implementation -// -//------------------------------------------------------------------------------ +/* + * Copyright 2001-2005, Haiku. + * Distributed under the terms of the MIT License. + * + * Authors: + * DarkWyrm + * Stephan Aßmus + */ + +/** BView/BWindow combination HWInterface implementation */ #include #include @@ -19,6 +17,7 @@ #include #include #include +#include #include #include #include @@ -112,19 +111,15 @@ class CardView : public BView { virtual void AttachedToWindow(); virtual void Draw(BRect updateRect); - virtual void MouseDown(BPoint where); - virtual void MouseMoved(BPoint where, uint32 transit, - const BMessage* dragMessage); - virtual void MouseUp(BPoint where); virtual void MessageReceived(BMessage* message); // CardView void SetBitmap(const BBitmap* bimtap); - void ForwardMessage(); + void ForwardMessage(BMessage* message = NULL); private: - port_id fInputPort; + port_id fInputPort; const BBitmap* fBitmap; }; @@ -147,8 +142,18 @@ class CardWindow : public BWindow { BLocker fUpdateLock; }; +class CardMessageFilter : public BMessageFilter { + public: + CardMessageFilter(CardView* view); + + virtual filter_result Filter(BMessage *message, BHandler **_target); + + private: + CardView* fView; +}; + +// #pragma mark - -//extern RGBColor workspace_default_color; CardView::CardView(BRect bounds) : BView(bounds, "graphics card view", B_FOLLOW_ALL, B_WILL_DRAW), @@ -162,12 +167,17 @@ CardView::CardView(BRect bounds) fInputPort = create_port(100, "ViewInputDevice"); #endif +#ifdef ENABLE_INPUT_SERVER_EMULATION + AddFilter(new CardMessageFilter(this)); +#endif } + CardView::~CardView() { } + // AttachedToWindow void CardView::AttachedToWindow() @@ -188,64 +198,32 @@ CardView::Draw(BRect updateRect) // to do anything else. void -CardView::ForwardMessage() +CardView::ForwardMessage(BMessage* message) { - BMessage *message = Window()->CurrentMessage(); + if (message == NULL) + message = Window()->CurrentMessage(); + if (message == NULL) + return; + size_t length = message->FlattenedSize(); char stream[length]; - if ( message->Flatten(stream, length) == B_OK) { + if (message->Flatten(stream, length) == B_OK) write_port(fInputPort, 0, stream, length); - } } -// MouseDown -void -CardView::MouseDown(BPoint pt) -{ -#ifdef ENABLE_INPUT_SERVER_EMULATION - ForwardMessage(); -#endif -} - -// MouseMoved -void -CardView::MouseMoved(BPoint pt, uint32 transit, const BMessage* dragMessage) -{ - if (!Bounds().Contains(pt)) - return; - - // A bug in R5 prevents this call from having an effect if - // called elsewhere, and calling it here works, if we're lucky :-) - BCursor cursor(kEmptyCursor); - SetViewCursor(&cursor, true); - -#ifdef ENABLE_INPUT_SERVER_EMULATION - ForwardMessage(); -#endif -} - -// MouseUp -void -CardView::MouseUp(BPoint pt) -{ -#ifdef ENABLE_INPUT_SERVER_EMULATION - ForwardMessage(); -#endif -} - -// MessageReceived void CardView::MessageReceived(BMessage* message) { - switch(message->what) { + switch (message->what) { default: BView::MessageReceived(message); break; } } + // SetBitmap void CardView::SetBitmap(const BBitmap* bitmap) @@ -258,7 +236,53 @@ CardView::SetBitmap(const BBitmap* bitmap) } } -// constructor + +// #pragma mark - + + +CardMessageFilter::CardMessageFilter(CardView* view) + : BMessageFilter(B_ANY_DELIVERY, B_ANY_SOURCE), + fView(view) +{ +} + + +filter_result +CardMessageFilter::Filter(BMessage *message, BHandler **target) +{ + switch (message->what) { + case B_KEY_DOWN: + case B_UNMAPPED_KEY_DOWN: + case B_KEY_UP: + case B_UNMAPPED_KEY_UP: + case B_MOUSE_DOWN: + case B_MOUSE_UP: + case B_MOUSE_WHEEL_CHANGED: + fView->ForwardMessage(message); + return B_SKIP_MESSAGE; + + case B_MOUSE_MOVED: + { + int32 transit; + if (message->FindInt32("be:transit", &transit) == B_OK + && transit == B_ENTERED_VIEW) { + // A bug in R5 prevents this call from having an effect if + // called elsewhere, and calling it here works, if we're lucky :-) + BCursor cursor(kEmptyCursor); + fView->SetViewCursor(&cursor, true); + } + fView->ForwardMessage(message); + return B_SKIP_MESSAGE; + } + } + + return B_DISPATCH_MESSAGE; +} + + +// #pragma mark - + + CardWindow::CardWindow(BRect frame) : BWindow(frame, "Haiku App Server", B_TITLED_WINDOW, B_NOT_ZOOMABLE | B_NOT_RESIZABLE), @@ -268,20 +292,24 @@ CardWindow::CardWindow(BRect frame) { fView = new CardView(Bounds()); AddChild(fView); + fView->MakeFocus(); + // make it receive key events } -// destructor + CardWindow::~CardWindow() { delete fUpdateRunner; } -void CardWindow::MessageReceived(BMessage *msg) + +void +CardWindow::MessageReceived(BMessage *msg) { -STRACE("CardWindow::MessageReceived()\n"); + STRACE("CardWindow::MessageReceived()\n"); switch (msg->what) { case MSG_UPDATE: -STRACE("MSG_UPDATE\n"); + STRACE("MSG_UPDATE\n"); // invalidate all areas in the view that need redrawing if (fUpdateLock.LockWithTimeout(2000LL) >= B_OK) { /* int32 count = fUpdateRegion.CountRects(); @@ -300,15 +328,13 @@ STRACE("MSG_UPDATE\n"); } break; default: -#ifdef ENABLE_INPUT_SERVER_EMULATION - fView->ForwardMessage(); -#endif - BWindow::MessageReceived(msg); + BWindow::MessageReceived(msg); break; } -STRACE("CardWindow::MessageReceived() - exit\n"); + STRACE("CardWindow::MessageReceived() - exit\n"); } + // QuitRequested bool CardWindow::QuitRequested() @@ -348,7 +374,9 @@ CardWindow::Invalidate(const BRect& frame) } -// constructor +// #pragma mark - + + ViewHWInterface::ViewHWInterface() : HWInterface(), fBackBuffer(NULL), @@ -360,7 +388,7 @@ ViewHWInterface::ViewHWInterface() fDisplayMode.space = B_RGBA32; } -// destructor + ViewHWInterface::~ViewHWInterface() { if (fWindow) {