From ee1240b38e467ed21187739e5a7185cef57cd7ea Mon Sep 17 00:00:00 2001 From: DarkWyrm Date: Sat, 5 Feb 2005 21:39:39 +0000 Subject: [PATCH] RootLayer now tracks which mouse buttons are down Implemented ServerWindow code for GetMouse git-svn-id: file:///srv/svn/repos/haiku/trunk/current@11265 a95241bf-73f2-0310-859d-f6bbb57e9c96 --- src/servers/app/server/RootLayer.cpp | 13 +++++++++++++ src/servers/app/server/RootLayer.h | 2 ++ src/servers/app/server/ServerWindow.cpp | 11 +++++++---- 3 files changed, 22 insertions(+), 4 deletions(-) diff --git a/src/servers/app/server/RootLayer.cpp b/src/servers/app/server/RootLayer.cpp index a18c9ffefa..0a5a525fb3 100644 --- a/src/servers/app/server/RootLayer.cpp +++ b/src/servers/app/server/RootLayer.cpp @@ -879,6 +879,15 @@ void RootLayer::SetBGColor(const RGBColor &col) fLayerData->viewcolor = col; } +int32 RootLayer::Buttons(void) +{ + Lock(); + int32 value=fButtons; + Unlock(); + + return value; +} + RGBColor RootLayer::BGColor(void) const { return fLayerData->viewcolor; @@ -920,6 +929,10 @@ void RootLayer::MouseEventHandler(int32 code, BPortLink& msg) msg.Read(&evt.buttons); msg.Read(&evt.clicks); + // We'll need this so that GetMouse can query for which buttons + // are down. + fButtons=evt.buttons; + // printf("MOUSE DOWN: at (%f, %f)\n", evt.where.x, evt.where.y); WinBorder *target=NULL; diff --git a/src/servers/app/server/RootLayer.h b/src/servers/app/server/RootLayer.h index 244a6f9e18..01d636677e 100644 --- a/src/servers/app/server/RootLayer.h +++ b/src/servers/app/server/RootLayer.h @@ -96,6 +96,7 @@ public: void SetBGColor(const RGBColor &col); RGBColor BGColor(void) const; + int32 Buttons(void); virtual bool HasClient(void) { return false; } void AddWinBorderToWorkspaces(WinBorder *winBorder, uint32 wks); @@ -157,6 +158,7 @@ private: int32 fScreenXResolution; int32 fScreenYResolution; uint32 fColorSpace; + int32 fButtons; BList fWorkspaceList; Workspace *fActiveWorkspace; diff --git a/src/servers/app/server/ServerWindow.cpp b/src/servers/app/server/ServerWindow.cpp index 3da24a6df7..fc6216b415 100644 --- a/src/servers/app/server/ServerWindow.cpp +++ b/src/servers/app/server/ServerWindow.cpp @@ -2128,9 +2128,8 @@ void ServerWindow::DispatchMessage(int32 code, LinkMsgReader &link) } case AS_LAYER_GET_MOUSE_COORDS: { - // TODO: Implement AS_LAYER_MOUSE_COORDS - STRACE(("ServerWindow %s: Message AS_GET_MOUSE_COORDS unimplemented\n",fTitle.String())); - DTRACE(("ServerWindow %s: Message AS_GET_MOUSE_COORDS unimplemented\n",fTitle.String())); + DTRACE(("ServerWindow %s: Message AS_GET_MOUSE_COORDS\n",fTitle.String())); + // Attached Data: // 1) port_id reply port @@ -2144,8 +2143,12 @@ void ServerWindow::DispatchMessage(int32 code, LinkMsgReader &link) port_id replyport; link.Read(&replyport); + int32 buttons=desktop->ActiveRootLayer()->Buttons(); + BPortLink replylink(replyport); - replylink.StartMessage(SERVER_FALSE); + replylink.StartMessage(SERVER_TRUE); + replylink.Attach(desktop->GetDisplayDriver()->GetCursorPosition()); + replylink.Attach(buttons); replylink.Flush(); break; }