[PATCH 2/2] comctl32/combo: Merge theming logic

Nikolay Sivov nsivov at codeweavers.com
Tue Feb 13 01:56:37 CST 2018


Signed-off-by: Nikolay Sivov <nsivov at codeweavers.com>
---
 dlls/comctl32/Makefile.in   |   1 -
 dlls/comctl32/combo.c       | 173 +++++++++++++++++-------
 dlls/comctl32/theme_combo.c | 319 --------------------------------------------
 dlls/comctl32/theming.c     |   5 -
 4 files changed, 126 insertions(+), 372 deletions(-)
 delete mode 100644 dlls/comctl32/theme_combo.c

diff --git a/dlls/comctl32/Makefile.in b/dlls/comctl32/Makefile.in
index 080f78c3fe..4adca3c93e 100644
--- a/dlls/comctl32/Makefile.in
+++ b/dlls/comctl32/Makefile.in
@@ -35,7 +35,6 @@ C_SRCS = \
 	syslink.c \
 	tab.c \
 	taskdialog.c \
-	theme_combo.c \
 	theme_dialog.c \
 	theme_listbox.c \
 	theme_scrollbar.c \
diff --git a/dlls/comctl32/combo.c b/dlls/comctl32/combo.c
index b478bfca6c..0acb7318a6 100644
--- a/dlls/comctl32/combo.c
+++ b/dlls/comctl32/combo.c
@@ -2,6 +2,7 @@
  * Combo controls
  *
  * Copyright 1997 Alex Korobka
+ * Copyright (c) 2005 by Frank Richter
  *
  * This library is free software; you can redistribute it and/or
  * modify it under the terms of the GNU Lesser General Public
@@ -32,6 +33,8 @@
 #include "winbase.h"
 #include "wingdi.h"
 #include "winuser.h"
+#include "uxtheme.h"
+#include "vssym32.h"
 #include "commctrl.h"
 #include "wine/unicode.h"
 #include "wine/debug.h"
@@ -87,6 +90,7 @@ static UINT	CBitHeight, CBitWidth;
 #define CBF_NOTIFY              0x0100
 #define CBF_NOREDRAW            0x0200
 #define CBF_SELCHANGE           0x0400
+#define CBF_HOT                 0x0800
 #define CBF_NOEDITNOTIFY        0x1000
 #define CBF_NOLBSELECT          0x2000  /* do not change current selection */
 #define CBF_BEENFOCUSED         0x4000  /* has it ever had focus           */
@@ -472,6 +476,7 @@ static LRESULT COMBO_Create( HWND hwnd, LPHEADCOMBO lphc, HWND hwndParent, LONG
   static const WCHAR clbName[] = {'C','o','m','b','o','L','B','o','x',0};
   static const WCHAR editName[] = {'E','d','i','t',0};
 
+  OpenThemeData( hwnd, WC_COMBOBOXW );
   if( !CB_GETTYPE(lphc) ) lphc->dwStyle |= CBS_SIMPLE;
   if( CB_GETTYPE(lphc) != CBS_DROPDOWNLIST ) lphc->wState |= CBF_EDIT;
 
@@ -684,9 +689,7 @@ static HBRUSH COMBO_PrepareColors(
  *
  * Paint CBS_DROPDOWNLIST text field / update edit control contents.
  */
-static void CBPaintText(
-  LPHEADCOMBO lphc,
-  HDC         hdc_paint)
+static void CBPaintText(HEADCOMBO *lphc, HDC hdc_paint)
 {
    RECT rectEdit = lphc->textRect;
    INT	id, size = 0;
@@ -828,64 +831,86 @@ static void CBPaintBorder(
   DrawEdge(hdc, &clientRect, EDGE_SUNKEN, BF_RECT);
 }
 
-/***********************************************************************
- *           COMBO_Paint
- */
-static LRESULT COMBO_Paint(LPHEADCOMBO lphc, HDC hParamDC)
+static LRESULT COMBO_ThemedPaint(HTHEME theme, HEADCOMBO *lphc, HDC hdc)
 {
-  PAINTSTRUCT ps;
-  HDC 	hDC;
+    int button_state;
+    RECT frame;
 
-  hDC = (hParamDC) ? hParamDC
-		   : BeginPaint( lphc->self, &ps);
+    /* paint border */
+    if (CB_GETTYPE(lphc) != CBS_SIMPLE)
+        GetClientRect(lphc->self, &frame);
+    else
+    {
+        frame = lphc->textRect;
+        InflateRect(&frame, EDIT_CONTROL_PADDING(), EDIT_CONTROL_PADDING());
+        InflateRect(&frame, COMBO_XBORDERSIZE(), COMBO_YBORDERSIZE());
+    }
 
-  TRACE("hdc=%p\n", hDC);
+    DrawThemeBackground(theme, hdc, 0, IsWindowEnabled(lphc->self) ? CBXS_NORMAL : CBXS_DISABLED, &frame, NULL);
 
-  if( hDC && !(lphc->wState & CBF_NOREDRAW) )
-  {
-      HBRUSH	hPrevBrush, hBkgBrush;
+    /* Paint button */
+    if (!IsRectEmpty(&lphc->buttonRect))
+    {
+        if (!IsWindowEnabled(lphc->self))
+            button_state = CBXS_DISABLED;
+        else if (lphc->wState & CBF_BUTTONDOWN)
+            button_state = CBXS_PRESSED;
+        else if (lphc->wState & CBF_HOT)
+            button_state = CBXS_HOT;
+        else
+            button_state = CBXS_NORMAL;
+        DrawThemeBackground(theme, hdc, CP_DROPDOWNBUTTON, button_state, &lphc->buttonRect, NULL);
+    }
 
-      /*
-       * Retrieve the background brush and select it in the
-       * DC.
-       */
-      hBkgBrush = COMBO_PrepareColors(lphc, hDC);
+    if ((lphc->dwStyle & CBS_DROPDOWNLIST) == CBS_DROPDOWNLIST)
+        CBPaintText(lphc, hdc);
+
+    return 0;
+}
 
-      hPrevBrush = SelectObject( hDC, hBkgBrush );
-      if (!(lphc->wState & CBF_EDIT))
-        FillRect(hDC, &lphc->textRect, hBkgBrush);
+/***********************************************************************
+ *           COMBO_Paint
+ */
+static LRESULT COMBO_Paint(HEADCOMBO *lphc, HDC hdc)
+{
+    HBRUSH hPrevBrush, hBkgBrush;
 
-      /*
-       * In non 3.1 look, there is a sunken border on the combobox
-       */
-      CBPaintBorder(lphc->self, lphc, hDC);
+    TRACE("hdc=%p\n", hdc);
 
-      if( !IsRectEmpty(&lphc->buttonRect) )
-      {
-	CBPaintButton(lphc, hDC, lphc->buttonRect);
-      }
+    /*
+     * Retrieve the background brush and select it in the
+     * DC.
+     */
+    hBkgBrush = COMBO_PrepareColors(lphc, hdc);
+    hPrevBrush = SelectObject(hdc, hBkgBrush);
+    if (!(lphc->wState & CBF_EDIT))
+        FillRect(hdc, &lphc->textRect, hBkgBrush);
 
-      /* paint the edit control padding area */
-      if (CB_GETTYPE(lphc) != CBS_DROPDOWNLIST)
-      {
-          RECT rPadEdit = lphc->textRect;
+    /*
+     * In non 3.1 look, there is a sunken border on the combobox
+     */
+    CBPaintBorder(lphc->self, lphc, hdc);
 
-          InflateRect(&rPadEdit, EDIT_CONTROL_PADDING(), EDIT_CONTROL_PADDING());
+    if (!IsRectEmpty(&lphc->buttonRect))
+        CBPaintButton(lphc, hdc, lphc->buttonRect);
 
-          FrameRect( hDC, &rPadEdit, GetSysColorBrush(COLOR_WINDOW) );
-      }
+    /* paint the edit control padding area */
+    if (CB_GETTYPE(lphc) != CBS_DROPDOWNLIST)
+    {
+        RECT rPadEdit = lphc->textRect;
 
-      if( !(lphc->wState & CBF_EDIT) )
-	CBPaintText( lphc, hDC );
+        InflateRect(&rPadEdit, EDIT_CONTROL_PADDING(), EDIT_CONTROL_PADDING());
 
-      if( hPrevBrush )
-	SelectObject( hDC, hPrevBrush );
-  }
+        FrameRect(hdc, &rPadEdit, GetSysColorBrush(COLOR_WINDOW));
+    }
+
+    if (!(lphc->wState & CBF_EDIT))
+        CBPaintText( lphc, hdc );
 
-  if( !hParamDC )
-    EndPaint(lphc->self, &ps);
+    if (hPrevBrush)
+        SelectObject( hdc, hPrevBrush );
 
-  return 0;
+    return 0;
 }
 
 /***********************************************************************
@@ -1727,6 +1752,7 @@ static LRESULT COMBO_GetComboBoxInfo(const HEADCOMBO *lphc, COMBOBOXINFO *pcbi)
 LRESULT CALLBACK COMBO_WindowProc( HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam )
 {
     HEADCOMBO *lphc = (HEADCOMBO *)GetWindowLongPtrW( hwnd, 0 );
+    HTHEME theme;
 
     TRACE("[%p]: msg %#x wp %08lx lp %08lx\n", hwnd, message, wParam, lParam );
 
@@ -1755,10 +1781,41 @@ LRESULT CALLBACK COMBO_WindowProc( HWND hwnd, UINT message, WPARAM wParam, LPARA
         return COMBO_Create(hwnd, lphc, hwndParent, style);
     }
 
+    case WM_DESTROY:
+        theme = GetWindowTheme( hwnd );
+        CloseThemeData( theme );
+        break;
+
+    case WM_THEMECHANGED:
+        theme = GetWindowTheme( hwnd );
+        CloseThemeData( theme );
+        OpenThemeData( hwnd, WC_COMBOBOXW );
+        break;
+
     case WM_PRINTCLIENT:
     case WM_PAINT:
-        return  COMBO_Paint(lphc, (HDC)wParam);
+    {
+        LRESULT ret = 0;
+        PAINTSTRUCT ps;
+        HDC hdc;
+
+        hdc = wParam ? (HDC)wParam : BeginPaint(hwnd, &ps);
+
+        if (hdc && !(lphc->wState & CBF_NOREDRAW))
+        {
+            HTHEME theme = GetWindowTheme(hwnd);
+
+            if (theme)
+                ret = COMBO_ThemedPaint(theme, lphc, hdc);
+            else
+                ret = COMBO_Paint(lphc, hdc);
+        }
 
+        if (!wParam)
+            EndPaint(hwnd, &ps);
+
+        return ret;
+    }
     case WM_ERASEBKGND:
         /* do all painting in WM_PAINT like Windows does */
         return 1;
@@ -1912,6 +1969,28 @@ LRESULT CALLBACK COMBO_WindowProc( HWND hwnd, UINT message, WPARAM wParam, LPARA
         return  TRUE;
 
     case WM_MOUSEMOVE:
+        if (!IsRectEmpty(&lphc->buttonRect))
+        {
+            POINT pt;
+
+            pt.x = (short)LOWORD(lParam);
+            pt.y = (short)HIWORD(lParam);
+
+            if (PtInRect(&lphc->buttonRect, pt))
+            {
+                if (!(lphc->wState & CBF_HOT))
+                {
+                    lphc->wState |= CBF_HOT;
+                    RedrawWindow(hwnd, &lphc->buttonRect, 0, RDW_INVALIDATE | RDW_UPDATENOW);
+                }
+            }
+            else if (lphc->wState & CBF_HOT)
+            {
+                lphc->wState &= ~CBF_HOT;
+                RedrawWindow(hwnd, &lphc->buttonRect, 0, RDW_INVALIDATE | RDW_UPDATENOW);
+            }
+        }
+
         if ( lphc->wState & CBF_CAPTURE )
             COMBO_MouseMove( lphc, wParam, lParam );
         return  TRUE;
diff --git a/dlls/comctl32/theme_combo.c b/dlls/comctl32/theme_combo.c
deleted file mode 100644
index 3ee1d92277..0000000000
--- a/dlls/comctl32/theme_combo.c
+++ /dev/null
@@ -1,319 +0,0 @@
-/*
- * Theming - Combo box control
- *
- * Copyright (c) 2005 by Frank Richter
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2.1 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
- *
- */
-
-#include <stdarg.h>
-#include <string.h>
-#include <stdlib.h>
-
-#include "windef.h"
-#include "winbase.h"
-#include "wingdi.h"
-#include "winuser.h"
-#include "uxtheme.h"
-#include "vssym32.h"
-#include "comctl32.h"
-#include "wine/debug.h"
-
-WINE_DEFAULT_DEBUG_CHANNEL(themingcombo);
-
-/* Subclass-private state flags */
-#define STATE_NOREDRAW         1
-#define STATE_HOT              2
-
-/* some constants for metrics, same as in user32 */
-#define COMBO_XBORDERSIZE      2
-#define COMBO_YBORDERSIZE      2
-#define COMBO_EDITBUTTONSPACE  0
-#define EDIT_CONTROL_PADDING   1
-
-/* paint text of combobox, needed for read-only drop downs. */
-static void paint_text (HWND hwnd, HDC hdc, DWORD dwStyle, const COMBOBOXINFO *cbi)
-{
-    INT  id, size = 0;
-    LPWSTR pText = NULL;
-    UINT itemState = ODS_COMBOBOXEDIT;
-    HFONT font = (HFONT)SendMessageW (hwnd, WM_GETFONT, 0, 0);
-    HFONT hPrevFont = (font) ? SelectObject(hdc, font) : 0;
-    RECT rectEdit;
-    BOOL focused = GetFocus () == hwnd;
-    BOOL dropped = cbi->stateButton == STATE_SYSTEM_PRESSED;
-
-    TRACE("\n");
-
-    /* follow Windows combobox that sends a bunch of text
-     * inquiries to its listbox while processing WM_PAINT. */
-
-    if( (id = SendMessageW (cbi->hwndList, LB_GETCURSEL, 0, 0) ) != LB_ERR )
-    {
-        size = SendMessageW (cbi->hwndList, LB_GETTEXTLEN, id, 0);
-        if (size == LB_ERR)
-          FIXME("LB_ERR probably not handled yet\n");
-        if( (pText = HeapAlloc( GetProcessHeap(), 0, (size + 1) * sizeof(WCHAR))) )
-        {
-            /* size from LB_GETTEXTLEN may be too large, from LB_GETTEXT is accurate */
-            size = SendMessageW (cbi->hwndList, LB_GETTEXT, id, (LPARAM)pText);
-            pText[size] = '\0'; /* just in case */
-        } else return;
-    }
-    else
-       if( !(dwStyle & (CBS_OWNERDRAWFIXED | CBS_OWNERDRAWVARIABLE)) )
-           return;
-
-    /*
-     * Give ourselves some space.
-     */
-    rectEdit = cbi->rcItem;
-    InflateRect( &rectEdit, -1, -1 );
-     
-    if(dwStyle & (CBS_OWNERDRAWFIXED | CBS_OWNERDRAWVARIABLE))
-    {
-       DRAWITEMSTRUCT dis;
-       HRGN           clipRegion;
-       UINT ctlid = (UINT)GetWindowLongPtrW( hwnd, GWLP_ID );
-
-       /* setup state for DRAWITEM message. Owner will highlight */
-       if ( focused && !dropped )
-           itemState |= ODS_SELECTED | ODS_FOCUS;
-
-       /*
-        * Save the current clip region.
-        * To retrieve the clip region, we need to create one "dummy"
-        * clip region.
-        */
-       clipRegion = CreateRectRgnIndirect(&rectEdit);
-
-       if (GetClipRgn(hdc, clipRegion)!=1)
-       {
-         DeleteObject(clipRegion);
-         clipRegion=NULL;
-       }
-
-       if (!IsWindowEnabled(hwnd)) itemState |= ODS_DISABLED;
-
-       dis.CtlType      = ODT_COMBOBOX;
-       dis.CtlID        = ctlid;
-       dis.hwndItem     = hwnd;
-       dis.itemAction   = ODA_DRAWENTIRE;
-       dis.itemID       = id;
-       dis.itemState    = itemState;
-       dis.hDC          = hdc;
-       dis.rcItem       = rectEdit;
-       dis.itemData     = SendMessageW(cbi->hwndList, LB_GETITEMDATA, id, 0);
-
-       /*
-        * Clip the DC and have the parent draw the item.
-        */
-       IntersectClipRect(hdc,
-                         rectEdit.left,  rectEdit.top,
-                         rectEdit.right, rectEdit.bottom);
-
-       SendMessageW(GetParent (hwnd), WM_DRAWITEM, ctlid, (LPARAM)&dis );
-
-       /*
-        * Reset the clipping region.
-        */
-       SelectClipRgn(hdc, clipRegion);
-    }
-    else
-    {
-       static const WCHAR empty_stringW[] = { 0 };
-
-       if ( focused && !dropped ) {
-
-           /* highlight */
-           FillRect( hdc, &rectEdit, GetSysColorBrush(COLOR_HIGHLIGHT) );
-           SetBkColor( hdc, GetSysColor( COLOR_HIGHLIGHT ) );
-           SetTextColor( hdc, GetSysColor( COLOR_HIGHLIGHTTEXT ) );
-      }
-
-      ExtTextOutW( hdc,
-                   rectEdit.left + 1,
-                   rectEdit.top + 1,
-                   ETO_OPAQUE | ETO_CLIPPED,
-                   &rectEdit,
-                   pText ? pText : empty_stringW , size, NULL );
-
-      if ( focused && !dropped )
-        DrawFocusRect( hdc, &rectEdit );
-    }
-
-    if( hPrevFont )
-      SelectObject(hdc, hPrevFont );
-   
-    HeapFree( GetProcessHeap(), 0, pText );
-}
-
-/* paint the combobox */
-static LRESULT paint (HTHEME theme, HWND hwnd, HDC hParamDC, ULONG state)
-{
-  PAINTSTRUCT ps;
-  HDC   hDC;
-  COMBOBOXINFO cbi;
-  DWORD dwStyle = GetWindowLongW (hwnd, GWL_STYLE);
-
-  hDC = (hParamDC) ? hParamDC
-                   : BeginPaint( hwnd, &ps);
-
-  TRACE("hdc=%p\n", hDC);
-
-  if( hDC && !(state & STATE_NOREDRAW) )
-  {
-      RECT frameRect;
-      int buttonState;
-  
-      cbi.cbSize = sizeof (cbi);
-      SendMessageW (hwnd, CB_GETCOMBOBOXINFO, 0, (LPARAM)&cbi);
-      
-      /* paint border */
-      if ((dwStyle & CBS_DROPDOWNLIST) != CBS_SIMPLE)
-          GetClientRect (hwnd, &frameRect);
-      else
-      {
-          frameRect = cbi.rcItem;
-          InflateRect(&frameRect, 
-              EDIT_CONTROL_PADDING + COMBO_XBORDERSIZE, 
-              EDIT_CONTROL_PADDING + COMBO_YBORDERSIZE);
-      }
-      
-      DrawThemeBackground (theme, hDC, 0, 
-          IsWindowEnabled (hwnd) ? CBXS_NORMAL : CBXS_DISABLED, &frameRect, NULL);
-      
-      /* paint button */
-      if (cbi.stateButton != STATE_SYSTEM_INVISIBLE)
-      {
-          if (!IsWindowEnabled (hwnd))
-              buttonState = CBXS_DISABLED;
-          else if (cbi.stateButton == STATE_SYSTEM_PRESSED)
-              buttonState = CBXS_PRESSED;
-          else if (state & STATE_HOT)
-              buttonState = CBXS_HOT;
-          else
-              buttonState = CBXS_NORMAL;
-          DrawThemeBackground (theme, hDC, CP_DROPDOWNBUTTON, buttonState, 
-              &cbi.rcButton, NULL);
-      }
-
-      /* paint text, if we need to */
-      if ((dwStyle & CBS_DROPDOWNLIST) == CBS_DROPDOWNLIST)
-          paint_text (hwnd, hDC, dwStyle, &cbi);
-  }
-
-  if( !hParamDC )
-    EndPaint(hwnd, &ps);
-
-  return 0;
-}
-
-
-/**********************************************************************
- * The combo control subclass window proc.
- */
-LRESULT CALLBACK THEMING_ComboSubclassProc (HWND hwnd, UINT msg, 
-                                            WPARAM wParam, LPARAM lParam, 
-                                            ULONG_PTR dwRefData)
-{
-    const WCHAR* themeClass = WC_COMBOBOXW;
-    HTHEME theme;
-    LRESULT result;
-      
-    switch (msg)
-    {
-    case WM_CREATE:
-        result = THEMING_CallOriginalClass  (hwnd, msg, wParam, lParam);
-        OpenThemeData( hwnd, themeClass );
-        return result;
-    
-    case WM_DESTROY:
-        theme = GetWindowTheme( hwnd );
-        CloseThemeData ( theme );
-        return THEMING_CallOriginalClass (hwnd, msg, wParam, lParam);
-
-    case WM_THEMECHANGED:
-        theme = GetWindowTheme( hwnd );
-        CloseThemeData ( theme );
-        OpenThemeData( hwnd, themeClass );
-        break;
-        
-    case WM_SYSCOLORCHANGE:
-        theme = GetWindowTheme( hwnd );
-	if (!theme) return THEMING_CallOriginalClass (hwnd, msg, wParam, lParam);
-        /* Do nothing. When themed, a WM_THEMECHANGED will be received, too,
-   	 * which will do the repaint. */
-        break;
-        
-    case WM_PAINT:
-        theme = GetWindowTheme( hwnd );
-        if (!theme) return THEMING_CallOriginalClass (hwnd, msg, wParam, lParam);
-        return paint (theme, hwnd, (HDC)wParam, dwRefData);
-
-    case WM_SETREDRAW:
-        /* Since there doesn't seem to be WM_GETREDRAW, do redraw tracking in 
-         * the subclass as well. */
-        if( wParam )
-            dwRefData &= ~STATE_NOREDRAW;
-        else
-            dwRefData |= STATE_NOREDRAW;
-        THEMING_SetSubclassData (hwnd, dwRefData);
-        return THEMING_CallOriginalClass (hwnd, msg, wParam, lParam);
-        
-    case WM_MOUSEMOVE:
-        {
-            /* Dropdown button hot-tracking */
-            COMBOBOXINFO cbi;
-            POINT pt;
-
-            pt.x = (short)LOWORD(lParam);
-            pt.y = (short)HIWORD(lParam);
-            cbi.cbSize = sizeof (cbi);
-            SendMessageW (hwnd, CB_GETCOMBOBOXINFO, 0, (LPARAM)&cbi);
-            
-            if (cbi.stateButton != STATE_SYSTEM_INVISIBLE)
-            {
-                if (PtInRect (&cbi.rcButton, pt))
-                {
-                    if (!(dwRefData & STATE_HOT))
-                    {
-                        dwRefData |= STATE_HOT;
-                        THEMING_SetSubclassData (hwnd, dwRefData);
-                        RedrawWindow (hwnd, &cbi.rcButton, 0, 
-                            RDW_INVALIDATE | RDW_UPDATENOW);
-                    }
-                }
-                else
-                {
-                    if (dwRefData & STATE_HOT)
-                    {
-                        dwRefData &= ~STATE_HOT;
-                        THEMING_SetSubclassData (hwnd, dwRefData);
-                        RedrawWindow (hwnd, &cbi.rcButton, 0, 
-                            RDW_INVALIDATE | RDW_UPDATENOW);
-                    }
-                }
-            }
-        }
-        return THEMING_CallOriginalClass (hwnd, msg, wParam, lParam);
-    
-    default: 
-	/* Call old proc */
-	return THEMING_CallOriginalClass (hwnd, msg, wParam, lParam);
-    }
-    return 0;
-}
diff --git a/dlls/comctl32/theming.c b/dlls/comctl32/theming.c
index 06bdf81d41..0d47489dd5 100644
--- a/dlls/comctl32/theming.c
+++ b/dlls/comctl32/theming.c
@@ -34,8 +34,6 @@ WINE_DEFAULT_DEBUG_CHANNEL(theming);
 typedef LRESULT (CALLBACK* THEMING_SUBCLASSPROC)(HWND, UINT, WPARAM, LPARAM,
     ULONG_PTR);
 
-extern LRESULT CALLBACK THEMING_ComboSubclassProc (HWND, UINT, WPARAM, LPARAM,
-                                                   ULONG_PTR) DECLSPEC_HIDDEN;
 extern LRESULT CALLBACK THEMING_DialogSubclassProc (HWND, UINT, WPARAM, LPARAM,
                                                     ULONG_PTR) DECLSPEC_HIDDEN;
 extern LRESULT CALLBACK THEMING_ListBoxSubclassProc (HWND, UINT, WPARAM, LPARAM,
@@ -53,7 +51,6 @@ static const struct ThemingSubclass
 } subclasses[] = {
     /* Note: list must be sorted by class name */
     {dialogClass,          THEMING_DialogSubclassProc},
-    {WC_COMBOBOXW,         THEMING_ComboSubclassProc},
     {comboLboxClass,       THEMING_ListBoxSubclassProc},
     {WC_LISTBOXW,          THEMING_ListBoxSubclassProc},
     {WC_SCROLLBARW,        THEMING_ScrollbarSubclassProc}
@@ -90,14 +87,12 @@ MAKE_SUBCLASS_PROC(0)
 MAKE_SUBCLASS_PROC(1)
 MAKE_SUBCLASS_PROC(2)
 MAKE_SUBCLASS_PROC(3)
-MAKE_SUBCLASS_PROC(4)
 
 static const WNDPROC subclassProcs[NUM_SUBCLASSES] = {
     subclass_proc0,
     subclass_proc1,
     subclass_proc2,
     subclass_proc3,
-    subclass_proc4,
 };
 
 /***********************************************************************
-- 
2.15.1




More information about the wine-devel mailing list