diff --git a/headers/private/interface/ToolTip.h b/headers/private/interface/ToolTip.h index f49faeab65..f29f29c08f 100644 --- a/headers/private/interface/ToolTip.h +++ b/headers/private/interface/ToolTip.h @@ -34,6 +34,13 @@ public: virtual void SetAlignment(BAlignment alignment); BAlignment Alignment() const; + virtual void AttachedToWindow(); + virtual void DetachedFromWindow(); + +protected: + bool Lock(); + void Unlock(); + private: BToolTip(const BToolTip& other); BToolTip& operator=(const BToolTip &other); @@ -41,6 +48,7 @@ private: void _InitData(); private: + bool fLockedLooper; bool fIsSticky; BPoint fRelativeLocation; BAlignment fAlignment; diff --git a/src/kits/interface/ToolTip.cpp b/src/kits/interface/ToolTip.cpp index 1e40a4b481..e68748c2e8 100644 --- a/src/kits/interface/ToolTip.cpp +++ b/src/kits/interface/ToolTip.cpp @@ -91,6 +91,50 @@ BToolTip::Alignment() const } +void +BToolTip::AttachedToWindow() +{ +} + + +void +BToolTip::DetachedFromWindow() +{ +} + + +bool +BToolTip::Lock() +{ + bool lockedLooper; + while (true) { + lockedLooper = View()->LockLooper(); + if (!lockedLooper) { + BToolTipManager::Lock(); + + if (View()->Window() != NULL) { + BToolTipManager::Unlock(); + continue; + } + } + break; + } + + fLockedLooper = lockedLooper; + return true; +} + + +void +BToolTip::Unlock() +{ + if (fLockedLooper) + View()->UnlockLooper(); + else + BToolTipManager::Unlock(); +} + + void BToolTip::_InitData() { @@ -158,26 +202,12 @@ BTextToolTip::Text() const void BTextToolTip::SetText(const char* text) { - bool lockedLooper; - while (true) { - lockedLooper = fTextView->LockLooper(); - if (!lockedLooper) { - BToolTipManager::Lock(); - - if (fTextView->Window() != NULL) { - BToolTipManager::Unlock(); - continue; - } - } - break; - } + if (!Lock()) + return; fTextView->SetText(text); - if (lockedLooper) - fTextView->UnlockLooper(); - else - BToolTipManager::Unlock(); + Unlock(); } diff --git a/src/kits/interface/ToolTipManager.cpp b/src/kits/interface/ToolTipManager.cpp index 0a7c419284..755a34c2d0 100644 --- a/src/kits/interface/ToolTipManager.cpp +++ b/src/kits/interface/ToolTipManager.cpp @@ -52,6 +52,7 @@ public: virtual void AttachedToWindow() { SetEventMask(B_POINTER_EVENTS, 0); + fToolTip->AttachedToWindow(); } virtual void DetachedFromWindow() @@ -60,6 +61,7 @@ public: RemoveChild(fToolTip->View()); // don't delete this one! + fToolTip->DetachedFromWindow(); BToolTipManager::Unlock(); }