* AS_CURRENT_WORKSPACE now holds a single window lock before retrieving
the current workspace. * This should fix bug #1765 as far as the app_server is concerned. * Cleanup, removed extraneous white space. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@24632 a95241bf-73f2-0310-859d-f6bbb57e9c96
This commit is contained in:
parent
b4bacb2a8a
commit
9dbce7a4e7
@ -61,7 +61,8 @@ class Desktop : public MessageLooper, public ScreenOwner {
|
|||||||
|
|
||||||
uid_t UserID() const { return fUserID; }
|
uid_t UserID() const { return fUserID; }
|
||||||
virtual port_id MessagePort() const { return fMessagePort; }
|
virtual port_id MessagePort() const { return fMessagePort; }
|
||||||
area_id SharedReadOnlyArea() const { return fSharedReadOnlyArea; }
|
area_id SharedReadOnlyArea() const
|
||||||
|
{ return fSharedReadOnlyArea; }
|
||||||
|
|
||||||
::EventDispatcher& EventDispatcher() { return fEventDispatcher; }
|
::EventDispatcher& EventDispatcher() { return fEventDispatcher; }
|
||||||
|
|
||||||
@ -121,8 +122,10 @@ class Desktop : public MessageLooper, public ScreenOwner {
|
|||||||
|
|
||||||
void MoveWindowBy(Window* window, float x, float y,
|
void MoveWindowBy(Window* window, float x, float y,
|
||||||
int32 workspace = -1);
|
int32 workspace = -1);
|
||||||
void ResizeWindowBy(Window* window, float x, float y);
|
void ResizeWindowBy(Window* window, float x,
|
||||||
bool SetWindowTabLocation(Window* window, float location);
|
float y);
|
||||||
|
bool SetWindowTabLocation(Window* window,
|
||||||
|
float location);
|
||||||
bool SetWindowDecoratorSettings(Window* window,
|
bool SetWindowDecoratorSettings(Window* window,
|
||||||
const BMessage& settings);
|
const BMessage& settings);
|
||||||
|
|
||||||
@ -140,7 +143,8 @@ class Desktop : public MessageLooper, public ScreenOwner {
|
|||||||
void SetWindowLook(Window* window, window_look look);
|
void SetWindowLook(Window* window, window_look look);
|
||||||
void SetWindowFeel(Window* window, window_feel feel);
|
void SetWindowFeel(Window* window, window_feel feel);
|
||||||
void SetWindowFlags(Window* window, uint32 flags);
|
void SetWindowFlags(Window* window, uint32 flags);
|
||||||
void SetWindowTitle(Window* window, const char* title);
|
void SetWindowTitle(Window* window,
|
||||||
|
const char* title);
|
||||||
|
|
||||||
Window* FocusWindow() const { return fFocus; }
|
Window* FocusWindow() const { return fFocus; }
|
||||||
Window* FrontWindow() const { return fFront; }
|
Window* FrontWindow() const { return fFront; }
|
||||||
@ -148,10 +152,12 @@ class Desktop : public MessageLooper, public ScreenOwner {
|
|||||||
|
|
||||||
Window* WindowAt(BPoint where);
|
Window* WindowAt(BPoint where);
|
||||||
|
|
||||||
Window* MouseEventWindow() const { return fMouseEventWindow; }
|
Window* MouseEventWindow() const
|
||||||
|
{ return fMouseEventWindow; }
|
||||||
void SetMouseEventWindow(Window* window);
|
void SetMouseEventWindow(Window* window);
|
||||||
|
|
||||||
void SetViewUnderMouse(const Window* window, int32 viewToken);
|
void SetViewUnderMouse(const Window* window,
|
||||||
|
int32 viewToken);
|
||||||
int32 ViewUnderMouse(const Window* window);
|
int32 ViewUnderMouse(const Window* window);
|
||||||
|
|
||||||
void SetFocusWindow(Window* window = NULL);
|
void SetFocusWindow(Window* window = NULL);
|
||||||
@ -161,17 +167,25 @@ class Desktop : public MessageLooper, public ScreenOwner {
|
|||||||
team_id teamID);
|
team_id teamID);
|
||||||
|
|
||||||
#if USE_MULTI_LOCKER
|
#if USE_MULTI_LOCKER
|
||||||
bool LockSingleWindow() { return fWindowLock.ReadLock(); }
|
bool LockSingleWindow()
|
||||||
void UnlockSingleWindow() { fWindowLock.ReadUnlock(); }
|
{ return fWindowLock.ReadLock(); }
|
||||||
|
void UnlockSingleWindow()
|
||||||
|
{ fWindowLock.ReadUnlock(); }
|
||||||
|
|
||||||
bool LockAllWindows() { return fWindowLock.WriteLock(); }
|
bool LockAllWindows()
|
||||||
void UnlockAllWindows() { fWindowLock.WriteUnlock(); }
|
{ return fWindowLock.WriteLock(); }
|
||||||
|
void UnlockAllWindows()
|
||||||
|
{ fWindowLock.WriteUnlock(); }
|
||||||
#else // USE_MULTI_LOCKER
|
#else // USE_MULTI_LOCKER
|
||||||
bool LockSingleWindow() { return fWindowLock.Lock(); }
|
bool LockSingleWindow()
|
||||||
void UnlockSingleWindow() { fWindowLock.Unlock(); }
|
{ return fWindowLock.Lock(); }
|
||||||
|
void UnlockSingleWindow()
|
||||||
|
{ fWindowLock.Unlock(); }
|
||||||
|
|
||||||
bool LockAllWindows() { return fWindowLock.Lock(); }
|
bool LockAllWindows()
|
||||||
void UnlockAllWindows() { fWindowLock.Unlock(); }
|
{ return fWindowLock.Lock(); }
|
||||||
|
void UnlockAllWindows()
|
||||||
|
{ fWindowLock.Unlock(); }
|
||||||
#endif // USE_MULTI_LOCKER
|
#endif // USE_MULTI_LOCKER
|
||||||
|
|
||||||
void MarkDirty(BRegion& region);
|
void MarkDirty(BRegion& region);
|
||||||
@ -211,8 +225,10 @@ class Desktop : public MessageLooper, public ScreenOwner {
|
|||||||
status_t _ActivateApp(team_id team);
|
status_t _ActivateApp(team_id team);
|
||||||
void _SendFakeMouseMoved(Window* window = NULL);
|
void _SendFakeMouseMoved(Window* window = NULL);
|
||||||
|
|
||||||
void _RebuildClippingForAllWindows(BRegion& stillAvailableOnScreen);
|
void _RebuildClippingForAllWindows(
|
||||||
void _TriggerWindowRedrawing(BRegion& newDirtyRegion);
|
BRegion& stillAvailableOnScreen);
|
||||||
|
void _TriggerWindowRedrawing(
|
||||||
|
BRegion& newDirtyRegion);
|
||||||
void _SetBackground(BRegion& background);
|
void _SetBackground(BRegion& background);
|
||||||
|
|
||||||
void _UpdateFloating(int32 previousWorkspace = -1,
|
void _UpdateFloating(int32 previousWorkspace = -1,
|
||||||
|
@ -787,8 +787,13 @@ ServerApp::_DispatchMessage(int32 code, BPrivate::LinkReceiver& link)
|
|||||||
case AS_CURRENT_WORKSPACE:
|
case AS_CURRENT_WORKSPACE:
|
||||||
STRACE(("ServerApp %s: get current workspace\n", Signature()));
|
STRACE(("ServerApp %s: get current workspace\n", Signature()));
|
||||||
|
|
||||||
|
if (fDesktop->LockSingleWindow()) {
|
||||||
fLink.StartMessage(B_OK);
|
fLink.StartMessage(B_OK);
|
||||||
fLink.Attach<int32>(fDesktop->CurrentWorkspace());
|
fLink.Attach<int32>(fDesktop->CurrentWorkspace());
|
||||||
|
fDesktop->UnlockSingleWindow();
|
||||||
|
} else
|
||||||
|
fLink.StartMessage(B_ERROR);
|
||||||
|
|
||||||
fLink.Flush();
|
fLink.Flush();
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user