[haiku-commits] haiku: hrev44520 - in src: servers/app apps/deskbar kits/interface

  • From: leavengood@xxxxxxxxx
  • To: haiku-commits@xxxxxxxxxxxxx
  • Date: Sun, 12 Aug 2012 16:42:19 +0200 (CEST)

hrev44520 adds 2 changesets to branch 'master'
old head: 15ed6a1e56f3c1a61c8aff7b310a0665f97e1c95
new head: 1a59d9dbeb966f507fa9f5899d2728821df4b010

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

96cabf5: Sync BWindow fShowLevel with the app_server.
  
  Implementing the window_info.show_hide_level in terms of this solves the
  problem of minimized windows also being considered hidden, when really they 
are
  just hidden in the app_server.
  
  window_info.show_hide_level is still defined backwards with a comment making
  that clear.
  
  Also removed sending fShowLevel in the minimize request since it is now
  maintained in the app_server.
  
  Fixes #4127.

1a59d9d: Improve Deskbar's WindowShouldBeListed utility function.
  
  It now has all the knowledge about whether a window should be shown or not.
  Since I fixed #4127, ORing with is_mini is no longer needed.

                                  [ Ryan Leavengood <leavengood@xxxxxxxxx> ]

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

7 files changed, 48 insertions(+), 24 deletions(-)
src/apps/deskbar/ExpandoMenuBar.cpp |    4 +---
src/apps/deskbar/WindowMenu.cpp     |   13 ++++++------
src/apps/deskbar/WindowMenu.h       |    3 ++-
src/kits/interface/Window.cpp       |    3 ++-
src/servers/app/ServerWindow.cpp    |   34 ++++++++++++++++++++-----------
src/servers/app/Window.cpp          |   11 ++++++++++
src/servers/app/Window.h            |    4 ++++

############################################################################

Commit:      96cabf581a611e030a1156d9569ca8a11524cb61
URL:         http://cgit.haiku-os.org/haiku/commit/?id=96cabf5
Author:      Ryan Leavengood <leavengood@xxxxxxxxx>
Date:        Sun Aug 12 14:30:10 2012 UTC

Ticket:      https://dev.haiku-os.org/ticket/4127

Sync BWindow fShowLevel with the app_server.

Implementing the window_info.show_hide_level in terms of this solves the
problem of minimized windows also being considered hidden, when really they are
just hidden in the app_server.

window_info.show_hide_level is still defined backwards with a comment making
that clear.

Also removed sending fShowLevel in the minimize request since it is now
maintained in the app_server.

Fixes #4127.

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

diff --git a/src/kits/interface/Window.cpp b/src/kits/interface/Window.cpp
index 8292e52..6f86831 100644
--- a/src/kits/interface/Window.cpp
+++ b/src/kits/interface/Window.cpp
@@ -596,7 +596,6 @@ BWindow::Minimize(bool minimize)
 
        fLink->StartMessage(AS_MINIMIZE_WINDOW);
        fLink->Attach<bool>(minimize);
-       fLink->Attach<int32>(fShowLevel);
        fLink->Flush();
 
        Unlock();
@@ -2612,6 +2611,7 @@ BWindow::Show()
 
                if (fShowLevel == 1) {
                        fLink->StartMessage(AS_SHOW_WINDOW);
+                       fLink->Attach<int32>(fShowLevel);
                        fLink->Flush();
                }
 
@@ -2645,6 +2645,7 @@ BWindow::Hide()
 
        if (fShowLevel == 0) {
                fLink->StartMessage(AS_HIDE_WINDOW);
+               fLink->Attach<int32>(fShowLevel);
                fLink->Flush();
        }
 
diff --git a/src/servers/app/ServerWindow.cpp b/src/servers/app/ServerWindow.cpp
index 8ffea24..dd93b57 100644
--- a/src/servers/app/ServerWindow.cpp
+++ b/src/servers/app/ServerWindow.cpp
@@ -481,7 +481,9 @@ ServerWindow::GetInfo(window_info& info)
        info.window_right = (int)floor(fWindow->Frame().right);
        info.window_bottom = (int)floor(fWindow->Frame().bottom);
 
-       info.show_hide_level = fWindow->IsHidden() ? 1 : 0; // ???
+       // 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.is_mini = fWindow->IsMinimized();
 }
 
@@ -595,32 +597,40 @@ ServerWindow::_DispatchMessage(int32 code, 
BPrivate::LinkReceiver& link)
 {
        switch (code) {
                case AS_SHOW_WINDOW:
+               {
                        DTRACE(("ServerWindow %s: Message AS_SHOW_WINDOW\n", 
Title()));
                        _Show();
+
+                       int32 showLevel;
+                       if (link.Read<int32>(&showLevel) == B_OK) {
+                               fWindow->SetShowLevel(showLevel);
+                       }
                        break;
 
+               }
                case AS_HIDE_WINDOW:
+               {
                        DTRACE(("ServerWindow %s: Message AS_HIDE_WINDOW\n", 
Title()));
                        _Hide();
-                       break;
 
+                       int32 showLevel;
+                       if (link.Read<int32>(&showLevel) == B_OK) {
+                               fWindow->SetShowLevel(showLevel);
+                       }
+                       break;
+               }
                case AS_MINIMIZE_WINDOW:
                {
-                       int32 showLevel;
                        bool minimize;
 
-                       link.Read<bool>(&minimize);
-                       if (link.Read<int32>(&showLevel) == B_OK) {
+                       if (link.Read<bool>(&minimize) == B_OK) {
                                DTRACE(("ServerWindow %s: Message 
AS_MINIMIZE_WINDOW, "
-                                       "showLevel: %ld, minimize: %d\n", 
Title(), showLevel,
-                                       minimize));
+                                       "minimize: %d\n", Title(), minimize));
 
-                               if (showLevel <= 0) {
-                                       // window is currently hidden - ignore 
the minimize request
+                               if (fWindow->ShowLevel() <= 0) {
+                                       // Window is currently hidden - ignore 
the minimize
+                                       // request, but keep the state in sync.
                                        fWindow->SetMinimized(minimize);
-                                               // TODO: commenting this out 
makes BWindow::fMinimized
-                                               // and Window::fMinimized go 
out of sync. However, not
-                                               // doing it currently causes 
#4127.
                                        break;
                                }
 
diff --git a/src/servers/app/Window.cpp b/src/servers/app/Window.cpp
index ffc7556..3cbb520 100644
--- a/src/servers/app/Window.cpp
+++ b/src/servers/app/Window.cpp
@@ -104,6 +104,7 @@ Window::Window(const BRect& frame, const char *name,
 
        // windows start hidden
        fHidden(true),
+       fShowLevel(0),
        fMinimized(false),
        fIsFocus(false),
 
@@ -1080,6 +1081,16 @@ Window::SetHidden(bool hidden)
 
 
 void
+Window::SetShowLevel(int32 showLevel)
+{
+       if (showLevel == fShowLevel)
+               return;
+
+       fShowLevel = showLevel;
+}
+
+
+void
 Window::SetMinimized(bool minimized)
 {
        if (minimized == fMinimized)
diff --git a/src/servers/app/Window.h b/src/servers/app/Window.h
index 887f2d8..6817df2 100644
--- a/src/servers/app/Window.h
+++ b/src/servers/app/Window.h
@@ -210,6 +210,9 @@ public:
                        void                            SetHidden(bool hidden);
        inline  bool                            IsHidden() const { return 
fHidden; }
 
+                       void                            SetShowLevel(int32 
showLevel);
+       inline  int32                           ShowLevel() const { return 
fShowLevel; }
+
                        void                            SetMinimized(bool 
minimized);
        inline  bool                            IsMinimized() const { return 
fMinimized; }
 
@@ -410,6 +413,7 @@ protected:
                        bool                            fUpdatesEnabled : 1;
 
                        bool                            fHidden : 1;
+                       int32                           fShowLevel;
                        bool                            fMinimized : 1;
                        bool                            fIsFocus : 1;
 

############################################################################

Revision:    hrev44520
Commit:      1a59d9dbeb966f507fa9f5899d2728821df4b010
URL:         http://cgit.haiku-os.org/haiku/commit/?id=1a59d9d
Author:      Ryan Leavengood <leavengood@xxxxxxxxx>
Date:        Sun Aug 12 14:37:00 2012 UTC

Ticket:      https://dev.haiku-os.org/ticket/4127

Improve Deskbar's WindowShouldBeListed utility function.

It now has all the knowledge about whether a window should be shown or not.
Since I fixed #4127, ORing with is_mini is no longer needed.

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

diff --git a/src/apps/deskbar/ExpandoMenuBar.cpp 
b/src/apps/deskbar/ExpandoMenuBar.cpp
index a13d2c3..15d724f 100644
--- a/src/apps/deskbar/ExpandoMenuBar.cpp
+++ b/src/apps/deskbar/ExpandoMenuBar.cpp
@@ -859,9 +859,7 @@ TExpandoMenuBar::monitor_team_windows(void* arg)
                                                        if (wInfo == NULL)
                                                                continue;
 
-                                                       if 
(TWindowMenu::WindowShouldBeListed(wInfo->feel)
-                                                               && 
(wInfo->show_hide_level <= 0
-                                                                       || 
wInfo->is_mini)) {
+                                                       if 
(TWindowMenu::WindowShouldBeListed(wInfo)) {
                                                                // Check if we 
have a matching window item...
                                                                item = 
teamItem->ExpandedWindowItem(
                                                                        
wInfo->server_token);
diff --git a/src/apps/deskbar/WindowMenu.cpp b/src/apps/deskbar/WindowMenu.cpp
index 65d98f2..dbde4ac 100644
--- a/src/apps/deskbar/WindowMenu.cpp
+++ b/src/apps/deskbar/WindowMenu.cpp
@@ -67,12 +67,12 @@ const int32 kSystemFloater = 6;
 #define B_TRANSLATION_CONTEXT "WindowMenu"
 
 bool
-TWindowMenu::WindowShouldBeListed(uint32 behavior)
+TWindowMenu::WindowShouldBeListed(client_window_info* info)
 {
-       if (behavior == kNormalWindow || behavior == kWindowScreen)
-               return true;
-
-       return false;
+       return ((info->feel == kNormalWindow || info->feel == kWindowScreen)
+                       // Window has the right feel
+               && info->show_hide_level <= 0);
+                       // Window is not hidden
 }
 
 
@@ -129,8 +129,7 @@ TWindowMenu::AttachedToWindow()
                        if (wInfo == NULL)
                                continue;
 
-                       if (WindowShouldBeListed(wInfo->feel)
-                               && (wInfo->show_hide_level <= 0 || 
wInfo->is_mini)) {
+                       if (WindowShouldBeListed(wInfo)) {
                                // Don't add new items if we're expanded. We've 
already done
                                // this, they've just been moved.
                                int32 numItems = CountItems();
diff --git a/src/apps/deskbar/WindowMenu.h b/src/apps/deskbar/WindowMenu.h
index d479453..c75dfff 100644
--- a/src/apps/deskbar/WindowMenu.h
+++ b/src/apps/deskbar/WindowMenu.h
@@ -43,6 +43,7 @@ All rights reserved.
 
 #include <Menu.h>
 #include <String.h>
+#include <WindowInfo.h>
 
 
 class TWindowMenu : public BMenu {
@@ -54,7 +55,7 @@ class TWindowMenu : public BMenu {
 
                BPoint                  ScreenLocation();
                void                    SetExpanded(bool status, int 
addAtIndex);
-               static bool             WindowShouldBeListed(uint32 behavior);
+               static bool             
WindowShouldBeListed(client_window_info* info);
 
        private:
                const BList             *fTeam;


Other related posts:

  • » [haiku-commits] haiku: hrev44520 - in src: servers/app apps/deskbar kits/interface - leavengood