[haiku-commits] haiku: hrev44543 - src/servers/app src/kits/interface headers/private/app

  • From: leavengood@xxxxxxxxx
  • To: haiku-commits@xxxxxxxxxxxxx
  • Date: Thu, 16 Aug 2012 05:46:18 +0200 (CEST)

hrev44543 adds 1 changeset to branch 'master'
old head: a4bca8119323c016607b25c3d1dcec2f0d4b0010
new head: 59347b7f1bad11b684ce8c6ed594781f5d2eb4e2

----------------------------------------------------------------------------

59347b7: Reverse the meaning of BWindow fShowLevel to match BView.
  
  This also matches the client_window_info.show_hide_level field used in Deskbar
  and other applications.
  
  While doing this, keep fShowLevel fully in sync between BWindow and 
app_server,
  use one message type for both hiding and showing, and make the decision to 
show
  and hide the window in the app_server.
  
  Lastly make minimize behave as described in the Be Book: hidden windows cannot
  be minimized, and minimized windows which get hidden become unminimized.

                                  [ Ryan Leavengood <leavengood@xxxxxxxxx> ]

----------------------------------------------------------------------------

Revision:    hrev44543
Commit:      59347b7f1bad11b684ce8c6ed594781f5d2eb4e2
URL:         http://cgit.haiku-os.org/haiku/commit/?id=59347b7
Author:      Ryan Leavengood <leavengood@xxxxxxxxx>
Date:        Tue Aug 14 05:03:35 2012 UTC

----------------------------------------------------------------------------

6 files changed, 44 insertions(+), 58 deletions(-)
headers/os/interface/Window.h             |    1 +
headers/private/app/ServerProtocol.h      |    4 +-
src/kits/interface/Window.cpp             |   50 ++++++++++++-------------
src/servers/app/ProfileMessageSupport.cpp |    4 +-
src/servers/app/ServerWindow.cpp          |   38 ++++++-------------
src/servers/app/Window.cpp                |    5 ++-

----------------------------------------------------------------------------

diff --git a/headers/os/interface/Window.h b/headers/os/interface/Window.h
index 03a63e1..f1c406f 100644
--- a/headers/os/interface/Window.h
+++ b/headers/os/interface/Window.h
@@ -352,6 +352,7 @@ private:
 
                        void                            
_GetDecoratorSize(float* _borderWidth,
                                                                        float* 
_tabHeight) const;
+                       void                            
_SendShowOrHideMessage();
 
 private:
                        char*                           fTitle;
diff --git a/headers/private/app/ServerProtocol.h 
b/headers/private/app/ServerProtocol.h
index 9953719..ca6c19a 100644
--- a/headers/private/app/ServerProtocol.h
+++ b/headers/private/app/ServerProtocol.h
@@ -87,8 +87,8 @@ enum {
        AS_GET_CURSOR_BITMAP,
 
        // Window definitions
-       AS_SHOW_WINDOW,
-       AS_HIDE_WINDOW,
+       AS_SHOW_OR_HIDE_WINDOW,
+       AS_INTERNAL_HIDE_WINDOW,
        AS_MINIMIZE_WINDOW,
        AS_QUIT_WINDOW,
        AS_SEND_BEHIND,
diff --git a/src/kits/interface/Window.cpp b/src/kits/interface/Window.cpp
index 6f86831..64ee73a 100644
--- a/src/kits/interface/Window.cpp
+++ b/src/kits/interface/Window.cpp
@@ -589,7 +589,8 @@ BWindow::ChildAt(int32 index) const
 void
 BWindow::Minimize(bool minimize)
 {
-       if (IsModal() || IsFloating() || fMinimized == minimize || !Lock())
+       if (IsModal() || IsFloating() || IsHidden() || fMinimized == minimize
+               || !Lock())
                return;
 
        fMinimized = minimize;
@@ -769,10 +770,7 @@ BWindow::MessageReceived(BMessage* msg)
                        // connect all views to the server again
                        fTopView->_CreateSelf();
 
-                       if (fShowLevel >= 1) {
-                               fLink->StartMessage(AS_SHOW_WINDOW);
-                               fLink->Flush();
-                       }
+                       _SendShowOrHideMessage();
                }
 
                return BLooper::MessageReceived(msg);
@@ -2094,10 +2092,6 @@ BWindow::IsMinimized() const
        if (!locker.IsLocked())
                return false;
 
-       // Hiding takes precendence over minimization!!!
-       if (IsHidden())
-               return false;
-
        return fMinimized;
 }
 
@@ -2607,13 +2601,9 @@ BWindow::Show()
 {
        bool runCalled = true;
        if (Lock()) {
-               fShowLevel++;
+               fShowLevel--;
 
-               if (fShowLevel == 1) {
-                       fLink->StartMessage(AS_SHOW_WINDOW);
-                       fLink->Attach<int32>(fShowLevel);
-                       fLink->Flush();
-               }
+               _SendShowOrHideMessage();
 
                runCalled = fRunCalled;
 
@@ -2638,25 +2628,24 @@ BWindow::Show()
 void
 BWindow::Hide()
 {
-       if (!Lock())
-               return;
+       if (Lock()) {
+               // If we are minimized and are about to be hidden, unminimize
+               if (IsMinimized() && fShowLevel == 0)
+                       Minimize(false);
+
+               fShowLevel++;
 
-       fShowLevel--;
+               _SendShowOrHideMessage();
 
-       if (fShowLevel == 0) {
-               fLink->StartMessage(AS_HIDE_WINDOW);
-               fLink->Attach<int32>(fShowLevel);
-               fLink->Flush();
+               Unlock();
        }
-
-       Unlock();
 }
 
 
 bool
 BWindow::IsHidden() const
 {
-       return fShowLevel <= 0;
+       return fShowLevel > 0;
 }
 
 
@@ -2793,7 +2782,7 @@ BWindow::_InitData(BRect frame, const char* title, 
window_look look,
        fInTransaction = bitmapToken >= 0;
        fUpdateRequested = false;
        fActive = false;
-       fShowLevel = 0;
+       fShowLevel = 1;
 
        fTopView = NULL;
        fFocus = NULL;
@@ -4061,6 +4050,15 @@ BWindow::_GetDecoratorSize(float* _borderWidth, float* 
_tabHeight) const
 }
 
 
+void
+BWindow::_SendShowOrHideMessage()
+{
+       fLink->StartMessage(AS_SHOW_OR_HIDE_WINDOW);
+       fLink->Attach<int32>(fShowLevel);
+       fLink->Flush();
+}
+
+
 //     #pragma mark - C++ binary compatibility kludge
 
 
diff --git a/src/servers/app/ProfileMessageSupport.cpp 
b/src/servers/app/ProfileMessageSupport.cpp
index 5472f04..519ebbf 100644
--- a/src/servers/app/ProfileMessageSupport.cpp
+++ b/src/servers/app/ProfileMessageSupport.cpp
@@ -66,8 +66,8 @@ string_for_message_code(uint32 code, BString& string)
                CODE(AS_GET_CURSOR_BITMAP);
 
                // Window definitions
-               CODE(AS_SHOW_WINDOW);
-               CODE(AS_HIDE_WINDOW);
+               CODE(AS_SHOW_OR_HIDE_WINDOW);
+               CODE(AS_INTERNAL_HIDE_WINDOW);
                CODE(AS_MINIMIZE_WINDOW);
                CODE(AS_QUIT_WINDOW);
                CODE(AS_SEND_BEHIND);
diff --git a/src/servers/app/ServerWindow.cpp b/src/servers/app/ServerWindow.cpp
index dd93b57..04c5a46 100644
--- a/src/servers/app/ServerWindow.cpp
+++ b/src/servers/app/ServerWindow.cpp
@@ -315,7 +315,7 @@ ServerWindow::_PrepareQuit()
                _Hide();
                fDesktop->UnlockSingleWindow();
        } else if (fThread >= B_OK)
-               PostMessage(AS_HIDE_WINDOW);
+               PostMessage(AS_INTERNAL_HIDE_WINDOW);
 }
 
 
@@ -481,9 +481,7 @@ ServerWindow::GetInfo(window_info& info)
        info.window_right = (int)floor(fWindow->Frame().right);
        info.window_bottom = (int)floor(fWindow->Frame().bottom);
 
-       // This is essentially opposite of the ShowLevel, meaning a window is
-       // hidden if it is 1 or more, and shown if it is 0 or less.
-       info.show_hide_level = fWindow->ShowLevel() <= 0 ? 1 : 0;
+       info.show_hide_level = fWindow->ShowLevel();
        info.is_mini = fWindow->IsMinimized();
 }
 
@@ -596,44 +594,32 @@ void
 ServerWindow::_DispatchMessage(int32 code, BPrivate::LinkReceiver& link)
 {
        switch (code) {
-               case AS_SHOW_WINDOW:
+               case AS_SHOW_OR_HIDE_WINDOW:
                {
-                       DTRACE(("ServerWindow %s: Message AS_SHOW_WINDOW\n", 
Title()));
-                       _Show();
-
                        int32 showLevel;
                        if (link.Read<int32>(&showLevel) == B_OK) {
+                               DTRACE(("ServerWindow %s: Message 
AS_SHOW_OR_HIDE_WINDOW, "
+                                       "show level: %d\n", Title(), 
showLevel));
+
                                fWindow->SetShowLevel(showLevel);
+                               if (showLevel <= 0)
+                                       _Show();
+                               else
+                                       _Hide();
                        }
                        break;
-
                }
-               case AS_HIDE_WINDOW:
-               {
-                       DTRACE(("ServerWindow %s: Message AS_HIDE_WINDOW\n", 
Title()));
+               // Only for internal use within this class
+               case AS_INTERNAL_HIDE_WINDOW:
                        _Hide();
-
-                       int32 showLevel;
-                       if (link.Read<int32>(&showLevel) == B_OK) {
-                               fWindow->SetShowLevel(showLevel);
-                       }
                        break;
-               }
                case AS_MINIMIZE_WINDOW:
                {
                        bool minimize;
-
                        if (link.Read<bool>(&minimize) == B_OK) {
                                DTRACE(("ServerWindow %s: Message 
AS_MINIMIZE_WINDOW, "
                                        "minimize: %d\n", Title(), minimize));
 
-                               if (fWindow->ShowLevel() <= 0) {
-                                       // Window is currently hidden - ignore 
the minimize
-                                       // request, but keep the state in sync.
-                                       fWindow->SetMinimized(minimize);
-                                       break;
-                               }
-
                                fDesktop->UnlockSingleWindow();
                                fDesktop->MinimizeWindow(fWindow, minimize);
                                fDesktop->LockSingleWindow();
diff --git a/src/servers/app/Window.cpp b/src/servers/app/Window.cpp
index 3cbb520..117e67a 100644
--- a/src/servers/app/Window.cpp
+++ b/src/servers/app/Window.cpp
@@ -102,9 +102,10 @@ Window::Window(const BRect& frame, const char *name,
        fInUpdate(false),
        fUpdatesEnabled(true),
 
-       // windows start hidden
+       // Windows start hidden
        fHidden(true),
-       fShowLevel(0),
+       // Hidden is 1 or more
+       fShowLevel(1),
        fMinimized(false),
        fIsFocus(false),
 


Other related posts: