Now checks all calls to Lock() - this should fix buggy apps like Globe in bug #499.

git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@17227 a95241bf-73f2-0310-859d-f6bbb57e9c96
This commit is contained in:
Axel Dörfler 2006-04-24 23:08:45 +00:00
parent 490fa01c09
commit 29a92e4f53
1 changed files with 50 additions and 37 deletions

View File

@ -475,11 +475,9 @@ BWindow::ChildAt(int32 index) const
void
BWindow::Minimize(bool minimize)
{
if (IsModal() || IsFloating() || fMinimized == minimize)
if (IsModal() || IsFloating() || fMinimized == minimize || !Lock())
return;
Lock();
fMinimized = minimize;
fLink->StartMessage(AS_MINIMIZE_WINDOW);
@ -494,10 +492,9 @@ BWindow::Minimize(bool minimize)
status_t
BWindow::SendBehind(const BWindow *window)
{
if (!window)
if (!window || !Lock())
return B_ERROR;
Lock();
fLink->StartMessage(AS_SEND_BEHIND);
fLink->Attach<int32>(_get_object_token_(window));
fLink->Attach<team_id>(Team());
@ -514,16 +511,19 @@ BWindow::SendBehind(const BWindow *window)
void
BWindow::Flush() const
{
const_cast<BWindow *>(this)->Lock();
fLink->Flush();
const_cast<BWindow *>(this)->Unlock();
if (const_cast<BWindow *>(this)->Lock()) {
fLink->Flush();
const_cast<BWindow *>(this)->Unlock();
}
}
void
BWindow::Sync() const
{
const_cast<BWindow*>(this)->Lock();
if (!const_cast<BWindow*>(this)->Lock())
return;
fLink->StartMessage(AS_SYNC);
// waiting for the reply is the actual syncing
@ -1398,9 +1398,9 @@ BWindow::SetDefaultButton(BButton *button)
bool
BWindow::NeedsUpdate() const
{
// TODO: What about locking?!?
if (!const_cast<BWindow *>(this)->Lock())
return false;
const_cast<BWindow *>(this)->Lock();
fLink->StartMessage(AS_NEEDS_UPDATE);
int32 code = B_ERROR;
@ -1477,14 +1477,15 @@ BView *BWindow::CurrentFocus() const
void
BWindow::Activate(bool active)
{
// TODO: What about locking?!?
if (IsHidden())
if (!Lock())
return;
Lock();
fLink->StartMessage(AS_ACTIVATE_WINDOW);
fLink->Attach<bool>(active);
fLink->Flush();
if (!IsHidden()) {
fLink->StartMessage(AS_ACTIVATE_WINDOW);
fLink->Attach<bool>(active);
fLink->Flush();
}
Unlock();
}
@ -1673,7 +1674,8 @@ BWindow::AddToSubset(BWindow *window)
&& fFeel != B_FLOATING_SUBSET_WINDOW_FEEL))
return B_BAD_VALUE;
Lock();
if (!Lock())
return B_ERROR;
status_t status = B_ERROR;
fLink->StartMessage(AS_ADD_TO_SUBSET);
@ -1694,7 +1696,8 @@ BWindow::RemoveFromSubset(BWindow *window)
&& fFeel != B_FLOATING_SUBSET_WINDOW_FEEL))
return B_BAD_VALUE;
Lock();
if (!Lock())
return B_ERROR;
status_t status = B_ERROR;
fLink->StartMessage(AS_REMOVE_FROM_SUBSET);
@ -1822,7 +1825,9 @@ BWindow::SetWindowAlignment(window_alignment mode,
// TODO: test if hOffset = 0 and set it to 1 if true.
Lock();
if (!Lock())
return B_ERROR;
fLink->StartMessage(AS_SET_ALIGNMENT);
fLink->Attach<int32>((int32)mode);
fLink->Attach<int32>(h);
@ -1848,10 +1853,12 @@ BWindow::GetWindowAlignment(window_alignment *mode,
int32 *h, int32 *hOffset, int32 *width, int32 *widthOffset,
int32 *v, int32 *vOffset, int32 *height, int32 *heightOffset) const
{
const_cast<BWindow *>(this)->Lock();
if (!const_cast<BWindow *>(this)->Lock())
return B_ERROR;
fLink->StartMessage(AS_GET_ALIGNMENT);
status_t status = B_ERROR;
status_t status;
if (fLink->FlushWithReply(status) == B_OK && status == B_OK) {
fLink->Read<int32>((int32 *)mode);
fLink->Read<int32>(h);
@ -1872,9 +1879,11 @@ BWindow::GetWindowAlignment(window_alignment *mode,
uint32
BWindow::Workspaces() const
{
if (!const_cast<BWindow *>(this)->Lock())
return 0;
uint32 workspaces = 0;
const_cast<BWindow *>(this)->Lock();
fLink->StartMessage(AS_GET_WORKSPACES);
status_t status;
@ -1893,11 +1902,12 @@ BWindow::SetWorkspaces(uint32 workspaces)
if (fFeel != B_NORMAL_WINDOW_FEEL)
return;
Lock();
fLink->StartMessage(AS_SET_WORKSPACES);
fLink->Attach<uint32>(workspaces);
fLink->Flush();
Unlock();
if (Lock()) {
fLink->StartMessage(AS_SET_WORKSPACES);
fLink->Attach<uint32>(workspaces);
fLink->Flush();
Unlock();
}
}
@ -1911,11 +1921,9 @@ BWindow::LastMouseMovedView() const
void
BWindow::MoveBy(float dx, float dy)
{
if (dx == 0.0 && dy == 0.0)
if ((dx == 0.0 && dy == 0.0) || !Lock())
return;
Lock();
fLink->StartMessage(AS_WINDOW_MOVE);
fLink->Attach<float>(dx);
fLink->Attach<float>(dy);
@ -1931,7 +1939,8 @@ BWindow::MoveBy(float dx, float dy)
void
BWindow::MoveTo(BPoint point)
{
Lock();
if (!Lock())
return;
point.x = roundf(point.x);
point.y = roundf(point.y);
@ -1957,7 +1966,8 @@ BWindow::MoveTo(float x, float y)
void
BWindow::ResizeBy(float dx, float dy)
{
Lock();
if (!Lock())
return;
dx = roundf(dx);
dy = roundf(dy);
@ -1990,9 +2000,10 @@ BWindow::ResizeBy(float dx, float dy)
void
BWindow::ResizeTo(float width, float height)
{
Lock();
ResizeBy(width - fFrame.Width(), height - fFrame.Height());
Unlock();
if (Lock()) {
ResizeBy(width - fFrame.Width(), height - fFrame.Height());
Unlock();
}
}
@ -2337,7 +2348,9 @@ BWindow::task_looper()
fLastMessage = fQueue->NextMessage();
// Lock the looper
Lock();
if (!Lock())
break;
if (!fLastMessage) {
// No more messages: Unlock the looper and terminate the
// dispatch loop.