[BROWSEUI] Apply a hack to prevent truncating the address bar text.
authorDoug Lyons <douglyons@douglyons.com>
Sun, 22 Apr 2018 13:42:10 +0000 (15:42 +0200)
committerMark Jansen <mark.jansen@reactos.org>
Sun, 22 Apr 2018 13:42:29 +0000 (15:42 +0200)
CORE-13003

dll/win32/browseui/addressband.cpp
dll/win32/browseui/addressband.h

index c319dbd..0bc3e97 100644 (file)
@@ -43,6 +43,7 @@ CAddressBand::CAddressBand()
     fGoButton = NULL;
     fComboBox = NULL;
     fGoButtonShown = false;
+    fAdjustNeeded = 0;
 }
 
 CAddressBand::~CAddressBand()
@@ -66,7 +67,10 @@ HRESULT STDMETHODCALLTYPE CAddressBand::GetBandInfo(DWORD dwBandID, DWORD dwView
 {
     if (pdbi->dwMask & DBIM_MINSIZE)
     {
-        pdbi->ptMinSize.x = 100;
+        if (fGoButtonShown)
+            pdbi->ptMinSize.x = 100;
+        else
+            pdbi->ptMinSize.x = 150;
         pdbi->ptMinSize.y = 22;
     }
     if (pdbi->dwMask & DBIM_MAXSIZE)
@@ -81,7 +85,10 @@ HRESULT STDMETHODCALLTYPE CAddressBand::GetBandInfo(DWORD dwBandID, DWORD dwView
     }
     if (pdbi->dwMask & DBIM_ACTUAL)
     {
-        pdbi->ptActual.x = 100;
+        if (fGoButtonShown)
+            pdbi->ptActual.x = 100;
+        else
+            pdbi->ptActual.x = 150;
         pdbi->ptActual.y = 22;
     }
     if (pdbi->dwMask & DBIM_TITLE)
@@ -451,6 +458,8 @@ LRESULT CAddressBand::OnSize(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL &bHan
     long                                    newHeight;
     long                                    newWidth;
 
+    fAdjustNeeded = 1;
+
     if (fGoButtonShown == false)
     {
         bHandled = FALSE;
@@ -505,6 +514,24 @@ LRESULT CAddressBand::OnWindowPosChanging(UINT uMsg, WPARAM wParam, LPARAM lPara
     positionInfoCopy = *reinterpret_cast<WINDOWPOS *>(lParam);
     newHeight = positionInfoCopy.cy;
     newWidth = positionInfoCopy.cx;
+
+/*
+    Sometimes when we get here newWidth = 100 which comes from GetBandInfo and is less than the 200 that we need.
+    We need room for the "Address" text (50 pixels), the "GoButton" (50 pixels), the left and right borders (30 pixels)
+    the icon (20 pixels) and the ComboBox (50 pixels) for handling the text of the current directory. This is 200 pixels.
+    When newWidth = 100 the Addressband ComboBox will only have a single character because it becomes 2 pixels wide.
+    The hack below readjusts the width to the minimum required to allow seeing the whole text and prints out a debug message.
+*/
+
+    if ((newWidth < 200) && (newWidth != 0))
+    {
+        if (fAdjustNeeded == 1)
+        {
+            ERR("CORE-13003 HACK: Addressband ComboBox width readjusted from %ld to 200.\n", newWidth);
+            newWidth = 200;
+            fAdjustNeeded = 0;
+        }
+    }
     SendMessage(fGoButton, TB_GETITEMRECT, 0, reinterpret_cast<LPARAM>(&buttonBounds));
 
     buttonWidth = buttonBounds.right - buttonBounds.left;
index 5d345bc..eaba142 100644 (file)
@@ -43,6 +43,7 @@ private:
     bool                                    fGoButtonShown;
     HIMAGELIST                              m_himlNormal;
     HIMAGELIST                              m_himlHot;
+    INT                                     fAdjustNeeded;
 
 public:
     CAddressBand();