wrc bug with CBS_DROPDOWN style

Eric Frias efrias at syncad.com
Wed Sep 17 10:44:38 CDT 2003

We just discovered a bug in the resource compiler: it will not allow you to
create a combo box with the style CBS_DROPDOWN.

The problem is this: the three mutually-exclusive types of combo boxes are
CBS_SIMPLE = 1, CBS_DROPDOWN = 2, and CBS_DROPDOWNLIST = 3.  The resource
compiler sets up the default style to CBS_SIMPLE (which is correct), but
when you specify CBS_DROPDOWN, it gets ored with the default value, which
turns it into 3, CBS_DROPDOWNLIST.

The patch below works, but might offend someone's sensibilities about what
'defaultstyle' means.  I couldn't find a simple way to handle this with the
way the code was structured.  It might be more correct to just remove the
CT_COMBOBOX case completely, and then at the end of the function, after the
NOT mask is applied, do:
     if (!(ctrl->style->or_mask & (CBS_SIMPLE | CBS_DROPDOWN |
          ctrl->style->or_mask |= CBS_SIMPLE;

Here's the patch:

diff -u -r1.38 parser.y
--- parser.y    9 Jul 2003 21:55:45 -0000       1.38
+++ parser.y    17 Sep 2003 14:01:56 -0000
@@ -1978,7 +1978,8 @@
                defaultstyle |= LBS_NOTIFY | WS_BORDER;
        case CT_COMBOBOX:
-               defaultstyle |= CBS_SIMPLE;
+               if (!(ctrl->style->or_mask & (CBS_SIMPLE | CBS_DROPDOWN |
+                       defaultstyle |= CBS_SIMPLE;
        case CT_STATIC:
                if(special_style == SS_CENTER || special_style == SS_LEFT ||
special_style == SS_RIGHT)


More information about the wine-patches mailing list