diff --git a/src/servers/app/RootLayer.cpp b/src/servers/app/RootLayer.cpp index 4082032e8f..8e7c00ffed 100644 --- a/src/servers/app/RootLayer.cpp +++ b/src/servers/app/RootLayer.cpp @@ -1747,7 +1747,34 @@ void RootLayer::KeyboardEventHandler(int32 code, BPortLink& msg) } } -void RootLayer::SetDragMessage(BMessage* msg) +bool +RootLayer::SetEventMaskLayer(Layer *lay, uint32 mask, uint32 options) +{ + if (!lay) + return false; + + bool returnValue = true; + + Lock(); + + if (fEventMaskLayer && fEventMaskLayer != lay) + { + fprintf(stderr, "WARNING: fEventMaskLayer already set and different than the required one!\n"); + returnValue = false; + } + else + { + fEventMaskLayer = lay; + // TODO: use this mask and options! + } + + Unlock(); + + return returnValue; +} + +void +RootLayer::SetDragMessage(BMessage* msg) { if (fDragMessage) { diff --git a/src/servers/app/RootLayer.h b/src/servers/app/RootLayer.h index 9365ed3a0e..d10aa41c67 100644 --- a/src/servers/app/RootLayer.h +++ b/src/servers/app/RootLayer.h @@ -107,6 +107,8 @@ public: void SetDragMessage(BMessage *msg); BMessage* DragMessage(void) const; + bool SetEventMaskLayer(Layer *lay, uint32 mask, uint32 options); + static int32 WorkingThread(void *data); CursorManager& GetCursorManager() { return fCursorManager; } diff --git a/src/servers/app/ServerWindow.cpp b/src/servers/app/ServerWindow.cpp index 0e7daf6202..c76262e76e 100644 --- a/src/servers/app/ServerWindow.cpp +++ b/src/servers/app/ServerWindow.cpp @@ -600,6 +600,20 @@ void ServerWindow::DispatchMessage(int32 code, LinkMsgReader &link) break; } + case AS_LAYER_SET_MOUSE_EVENT_MASK: + { + STRACE(("ServerWindow %s: Message AS_LAYER_SET_MOUSE_EVENT_MASK: Layer name: %s\n", fName, cl->fName->String())); + + uint32 mask; + uint32 options; + + link.Read(&mask); + link.Read(&options); + + myRootLayer->SetEventMaskLayer(cl, mask, options); + + break; + } case AS_LAYER_MOVETO: { STRACE(("ServerWindow %s: Message AS_LAYER_MOVETO: Layer name: %s\n", fName, cl->fName->String()));