[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