diff --git a/src/servers/app/Layer.cpp b/src/servers/app/Layer.cpp index 1bf3ef39b6..b207db0275 100644 --- a/src/servers/app/Layer.cpp +++ b/src/servers/app/Layer.cpp @@ -358,26 +358,14 @@ Layer::FindLayer(const int32 token) \return The layer containing the point or NULL if no layer found */ Layer* -Layer::LayerAt(const BPoint &pt, bool recursive) +Layer::LayerAt(BPoint where) { - //printf("%p:%s:LayerAt(x = %g, y = %g)\n", this, Name(), pt.x, pt.y); - if (!recursive) { - if (VisibleRegion().Contains(pt)) - return this; - - for (Layer* child = LastChild(); child; child = PreviousChild()) - if (child->FullVisible().Contains(pt)) - return child; - - return NULL; - } - - if (fVisible.Contains(pt)) + if (fVisible.Contains(where)) return this; - if (fFullVisible.Contains(pt)) { + if (fFullVisible.Contains(where)) { for (Layer* child = LastChild(); child; child = PreviousChild()) { - if (Layer* layer = child->LayerAt(pt)) + if (Layer* layer = child->LayerAt(where)) return layer; } } diff --git a/src/servers/app/Layer.h b/src/servers/app/Layer.h index 76c7cc7ac8..373ceab1e4 100644 --- a/src/servers/app/Layer.h +++ b/src/servers/app/Layer.h @@ -83,7 +83,7 @@ class Layer { uint32 CountChildren() const; Layer* FindLayer(const int32 token); - Layer* LayerAt(const BPoint &pt, bool recursive = true); + Layer* LayerAt(BPoint where); virtual Layer* FirstChild() const; virtual Layer* NextChild() const; diff --git a/src/servers/app/RootLayer.cpp b/src/servers/app/RootLayer.cpp index 85bd2f5e12..3541a5e890 100644 --- a/src/servers/app/RootLayer.cpp +++ b/src/servers/app/RootLayer.cpp @@ -694,8 +694,7 @@ RootLayer::RevealNewWMState(Workspace::State &oldWMState) // check to see if window count changed over states if (oldWMState.WindowList.CountItems() != fWMState.WindowList.CountItems()) { invalidate = true; - } - else if (memcmp(oldWMState.WindowList.Items(), fWMState.WindowList.Items(), + } else if (memcmp(oldWMState.WindowList.Items(), fWMState.WindowList.Items(), fWMState.WindowList.CountItems()*sizeof(void*)) != 0) { invalidate = true; } @@ -794,6 +793,7 @@ GetDrawingEngine()->ConstrainClippingRegion(NULL); } } + bool RootLayer::SetActive(WinBorder* newActive, bool activate) { @@ -840,6 +840,21 @@ RootLayer::SetActive(WinBorder* newActive, bool activate) } +Layer* +RootLayer::_ChildAt(BPoint where) +{ + if (VisibleRegion().Contains(where)) + return NULL; + + for (Layer* child = LastChild(); child; child = PreviousChild()) { + if (child->FullVisible().Contains(where)) + return child; + } + + return NULL; +} + + // #pragma mark - Input related methods @@ -852,7 +867,7 @@ RootLayer::MouseEventHandler(BMessage *event) Layer* layer = fMouseEventLayer; if (layer == NULL) { - layer = LayerAt(where, false); + layer = _ChildAt(where); if (layer == NULL) return; } diff --git a/src/servers/app/RootLayer.h b/src/servers/app/RootLayer.h index 208b49a559..30d96f6bc1 100644 --- a/src/servers/app/RootLayer.h +++ b/src/servers/app/RootLayer.h @@ -133,6 +133,7 @@ friend class Desktop; void change_winBorder_feel(WinBorder *winBorder, int32 newFeel); void MouseEventHandler(BMessage *msg); + Layer* _ChildAt(BPoint where); Desktop* fDesktop; BMessage* fDragMessage;