From 4251c0e4657d12ba9a0cc4e5b626c2574fd39aed Mon Sep 17 00:00:00 2001 From: Adi Oanca Date: Sun, 4 Apr 2004 20:28:14 +0000 Subject: [PATCH] added a memeber to know the WinBorder wich received the mouse down event used that memeber to move the window arroud - with the help of the mouse git-svn-id: file:///srv/svn/repos/haiku/trunk/current@7161 a95241bf-73f2-0310-859d-f6bbb57e9c96 --- src/servers/app/server/Desktop.cpp | 30 ++++++++++++++++++++++-------- src/servers/app/server/Desktop.h | 1 + 2 files changed, 23 insertions(+), 8 deletions(-) diff --git a/src/servers/app/server/Desktop.cpp b/src/servers/app/server/Desktop.cpp index 0e36122c66..8c01171d1b 100644 --- a/src/servers/app/server/Desktop.cpp +++ b/src/servers/app/server/Desktop.cpp @@ -59,6 +59,7 @@ Desktop::Desktop(void) fActiveRootLayer = NULL; fFrontWinBorder = NULL; fFocusWinBorder = NULL; + fMouseTarget = NULL; fActiveScreen = NULL; fScreenShotIndex = 1; } @@ -395,6 +396,7 @@ void Desktop::MouseEventHandler(PortMessage *msg) ws->SearchAndSetNewFront(target); ws->SetFocusLayer(target); + fMouseTarget = target; target->MouseDown(pt,buttons,mod); rl->fMainLock.Unlock(); @@ -419,9 +421,15 @@ void Desktop::MouseEventHandler(PortMessage *msg) msg->Read(&pt.y); msg->Read(&mod); - WinBorder *target=ActiveRootLayer()->ActiveWorkspace()->SearchWinBorder(pt); - if(target) - target->MouseUp(pt,mod); + if (fMouseTarget){ + fMouseTarget->MouseUp(pt, mod); + fMouseTarget = NULL; + } + else{ + WinBorder *target = ActiveRootLayer()->ActiveWorkspace()->SearchWinBorder(pt); + if(target) + target->MouseUp(pt, mod); + } // printf("MOUSE UP: at (%f, %f)\n", pt.x, pt.y); @@ -443,14 +451,20 @@ void Desktop::MouseEventHandler(PortMessage *msg) msg->Read(&y); msg->Read(&buttons); + BPoint pt(x, y); + if (fMouseTarget){ + fMouseTarget->MouseMoved(pt, buttons); + } + else{ + WinBorder *target = ActiveRootLayer()->ActiveWorkspace()->SearchWinBorder(pt); + if(target) + target->MouseMoved(pt, buttons); + } + // We need this so that we can see the cursor on the screen if(fActiveScreen) fActiveScreen->DDriver()->MoveCursorTo(x,y); - - BPoint pt; - WinBorder *target=ActiveRootLayer()->ActiveWorkspace()->SearchWinBorder(pt); - if(target) - target->MouseMoved(pt,buttons); + break; } case B_MOUSE_WHEEL_CHANGED: diff --git a/src/servers/app/server/Desktop.h b/src/servers/app/server/Desktop.h index 6d6fc2120f..722bc32512 100644 --- a/src/servers/app/server/Desktop.h +++ b/src/servers/app/server/Desktop.h @@ -115,6 +115,7 @@ private: RootLayer* fActiveRootLayer; WinBorder* fFrontWinBorder; WinBorder* fFocusWinBorder; + WinBorder* fMouseTarget; BList fScreenList;