From a1bcb09b45a7175b1d179da139ef4850d22b7b74 Mon Sep 17 00:00:00 2001 From: Stefano Ceccherini Date: Mon, 17 Aug 2009 11:53:50 +0000 Subject: [PATCH] Added a ServerWindow::ScreenChanged() hook, which takes care of resizing an eventual offscreen directwindow and sends the direct window notifications (not yet, though, since a BDirectWindow on a non-visible workspace would get the B_DIRECT_START notification and start drawing on a different workspace). git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@32455 a95241bf-73f2-0310-859d-f6bbb57e9c96 --- src/servers/app/Desktop.cpp | 1 + src/servers/app/ServerWindow.cpp | 22 +++++++++++++++++++++- src/servers/app/ServerWindow.h | 1 + 3 files changed, 23 insertions(+), 1 deletion(-) diff --git a/src/servers/app/Desktop.cpp b/src/servers/app/Desktop.cpp index 73cda3b367..0fd51c3d3f 100644 --- a/src/servers/app/Desktop.cpp +++ b/src/servers/app/Desktop.cpp @@ -1147,6 +1147,7 @@ Desktop::ScreenChanged(Screen* screen, bool makeDefault) // TODO: currently ignores the screen argument! for (Window* window = fAllWindows.FirstWindow(); window != NULL; window = window->NextWindow(kAllWindowList)) { + window->ServerWindow()->ScreenChanged(&update); window->ServerWindow()->SendMessageToClient(&update); } diff --git a/src/servers/app/ServerWindow.cpp b/src/servers/app/ServerWindow.cpp index 0db7cb6617..e225f6ba31 100644 --- a/src/servers/app/ServerWindow.cpp +++ b/src/servers/app/ServerWindow.cpp @@ -153,7 +153,7 @@ public: BRect old_window_frame; direct_buffer_info *buffer_info; - + bool full_screen; private: sem_id fSem; sem_id fAcknowledgeSem; @@ -165,6 +165,7 @@ private: DirectWindowData::DirectWindowData() : buffer_info(NULL), + full_screen(false), fSem(-1), fAcknowledgeSem(-1), fBufferArea(-1), @@ -3537,6 +3538,24 @@ ServerWindow::_MessageLooper() } +void +ServerWindow::ScreenChanged(const BMessage *message) +{ + // TODO: execute the stop notification earlier + //HandleDirectConnection(B_DIRECT_STOP); + SendMessageToClient(message); + if (fDirectWindowData != NULL && fDirectWindowData->full_screen) { + BRect screenFrame = fDesktop->ActiveScreen()->Frame(); + fDesktop->ResizeWindowBy(fWindow, + screenFrame.Width() - fWindow->Frame().Width(), + screenFrame.Height() - fWindow->Frame().Height()); + } + + //HandleDirectConnection(B_DIRECT_START | B_BUFFER_RESET, + //B_SCREEN_CHANGED); +} + + status_t ServerWindow::SendMessageToClient(const BMessage* msg, int32 target) const { @@ -3788,6 +3807,7 @@ ServerWindow::_DirectWindowSetFullScreen(bool enable) fDesktop->HWInterface()->SetCursorVisible(true); } + fDirectWindowData->full_screen = enable; fDesktop->SetWindowFeel(fWindow, enable ? kWindowScreenFeel : fDirectWindowFeel); } diff --git a/src/servers/app/ServerWindow.h b/src/servers/app/ServerWindow.h index 50a16993e3..db16a0b368 100644 --- a/src/servers/app/ServerWindow.h +++ b/src/servers/app/ServerWindow.h @@ -72,6 +72,7 @@ public: const BMessenger& HandlerMessenger() const { return fHandlerMessenger; } + void ScreenChanged(const BMessage *screenChangedMessage); status_t SendMessageToClient(const BMessage* msg, int32 target = B_NULL_TOKEN) const;