[Wine-devel] [Wine-patches] [eterhack] comctl32: Fix tab control updating (eterbug #8398)

Vitaly Lipatov lav на etersoft.ru
Сб Апр 28 01:50:11 MSK 2012


Sergey Guralnik писал 27.04.2012 19:51:
>

 From edb62c977057d2d84acf04837ae9261957b6544e Mon Sep 17 00:00:00 2001
 From: Sergey Guralnik <serhio на etersoft.ru>
Date: Fri, 27 Apr 2012 19:45:57 +0400
Subject: comctl32: Fix tab control updating (eterbug #8398)

...
>--- a/dlls/comctl32/tab.c
>+++ b/dlls/comctl32/tab.c
>@@ -2600,7 +2600,6 @@ static void TAB_InvalidateTabArea(const TAB_INFO 
> *infoPtr)
> {
>   RECT clientRect, rInvalidate, rAdjClient;
>   INT lastRow = infoPtr->uNumRows - 1;
>-  RECT rect;
Если это хак, то нужно
а) никогда не удалять код, а комментировать его, лучше всего - выключая
с помощью конструкции
#if 0
...
..
#endif


    if (lastRow < 0) return;

@@ -2610,32 +2609,17 @@ static void TAB_InvalidateTabArea(const 
TAB_INFO *infoPtr)

    TAB_AdjustRect(infoPtr, 0, &rAdjClient);

-  TAB_InternalGetItemRect(infoPtr, infoPtr->uNumItem-1 , &rect, NULL);
+  /* We should update all tab area because there might be
+     just deleted item that must be erased */
    if ((infoPtr->dwStyle & TCS_BOTTOM) && (infoPtr->dwStyle & 
TCS_VERTICAL))
-  {
      rInvalidate.left = rAdjClient.right;
-    if (infoPtr->uNumRows == 1)
-      rInvalidate.bottom = clientRect.top + rect.bottom + 2 * 
SELECTED_TAB_OFFSET;
-  }
    else if(infoPtr->dwStyle & TCS_VERTICAL)
-  {
      rInvalidate.right = rAdjClient.left;
-    if (infoPtr->uNumRows == 1)
-      rInvalidate.bottom = clientRect.top + rect.bottom + 2 * 
SELECTED_TAB_OFFSET;
-  }
    else if (infoPtr->dwStyle & TCS_BOTTOM)
-  {
      rInvalidate.top = rAdjClient.bottom;
-    if (infoPtr->uNumRows == 1)
-      rInvalidate.right = clientRect.left + rect.right + 2 * 
SELECTED_TAB_OFFSET;
-  }
    else
-  {
      rInvalidate.bottom = rAdjClient.top;
-    if (infoPtr->uNumRows == 1)
-      rInvalidate.right = clientRect.left + rect.right + 2 * 
SELECTED_TAB_OFFSET;
-  }
-


Насколько я понимаю, это не вполне решение проблемы, а скорее просто 
убирание оптимизации.


Я уже писал недавно в рассылку (не получил ответа), повторюсь:
В наших хаках не надо удалять код, он должен оставаться в файле, в 
отключенном виде
(#if 0 ... #endif)
И обязательны подробные комментарии, что и почему. С обязательной 
ссылкой на номер баги. (eterbug #9398).

Пожалейте тех, кому потому читать этот участок кода.


-- 
С уважением,
Виталий Липатов,
Etersoft


Подробная информация о списке рассылки Wine-devel