[PATCH] windres (ungarbled): (1) default dialog styles

Gunnar Degnbol gunnar@danbbs.dk
Tue Mar 19 15:20:00 GMT 2002


windres adds WS_POPUP | WS_SYSMENU | WS_BORDER to all 
dialogs. MS rc.exe sets these styles only if no STYLE 
statement is present. 

This is a problem because dialogs used as controls in other 
dialogs (e.g. open/save dialog extensions) should not have 
the WS_POPUP style. It can be worked around by adding the 
style NOT WS_POPUP. 

The patch initializes style to 0 when initializing dialog, 
instead of setting it to dialog.style when the STYLE 
statement is parsed. It is still assigned to dialog.style 
when a STYLE statement is present. If a FONT statement is 
present it sets the DS_SETFONT style of both style and 
dialog.style, so it is independent of the order. 

Incomplete fixes for this was posted by Bernd Herd:
http://sources.redhat.com/ml/binutils/2002-02/msg00021.html 
and Eric Kohl: 
http://sources.redhat.com/ml/binutils/2002-01/msg00130.html 
They were combined with fixes for other bugs. 

I will post 4 simple fixes from Bernd's patch, one at a time, 
and also fixes for the 7 other bugs I found while 
investigating this one. I will look some more at Bernd's last 
fix (for CONTROL initialization parameters) and at Eric's 
other fix (for the FONT statement). 

There are no dependencies between these patches.

ChangeLog:

2002-03-19 Gunnar Degnbol <degnbol@danbbs.dk>

	* rcparse.y: Don't add default dialog style when 
	explicit style specified

defstyle.rc:

101 DIALOG 0, 0, 186, 95
STYLE 0
BEGIN
    DEFPUSHBUTTON "OK",1,129,7,50,14
END

before patch (I have removed the generated comments):

$ /bin/windres.exe -i defstyle.rc 
LANGUAGE 0, 0

101 DIALOG MOVEABLE DISCARDABLE 0, 0, 186, 95
STYLE 0x80880000
BEGIN
  DEFPUSHBUTTON "OK", 1, 129, 7, 50, 14, 0x50010001
END

After patch:

$ /usr/local/bin/windres -i defstyle.rc
LANGUAGE 0, 0

101 DIALOG MOVEABLE DISCARDABLE 0, 0, 186, 95
BEGIN
  DEFPUSHBUTTON "OK", 1, 129, 7, 50, 14, 0x50010001
END


defstyle.patch:
--- binutils/rcparse.y	Wed Sep 19 07:33:16 2001
+++ binutils.new/rcparse.y	Sun Mar 17 14:41:50 2002
@@ -340,6 +340,7 @@
 	      dialog.ex = NULL;
 	      dialog.controls = NULL;
 	      sub_res_info = $3;
+	      style = 0;
 	    }
 	    styles BEG controls END
 	  {
@@ -363,6 +364,7 @@
 	      memset (dialog.ex, 0, sizeof (struct dialog_ex));
 	      dialog.controls = NULL;
 	      sub_res_info = $3;
+	      style = 0;
 	    }
 	    styles BEG controls END
 	  {
@@ -387,6 +389,7 @@
 	      dialog.ex->help = $9;
 	      dialog.controls = NULL;
 	      sub_res_info = $3;
+	      style = 0;
 	    }
 	    styles BEG controls END
 	  {
@@ -416,7 +419,6 @@
 	    dialog.class = $3;
 	  }
 	| styles STYLE
-	    { style = dialog.style; }
 	    styleexpr
 	  {
 	    dialog.style = style;
@@ -428,12 +430,14 @@
 	| styles FONT numexpr ',' QUOTEDSTRING
 	  {
 	    dialog.style |= DS_SETFONT;
+	    style |= DS_SETFONT;
 	    dialog.pointsize = $3;
 	    unicode_from_ascii ((int *) NULL, &dialog.font, $5);
 	  }
 	| styles FONT numexpr ',' QUOTEDSTRING cnumexpr cnumexpr
 	  {
 	    dialog.style |= DS_SETFONT;
+	    style |= DS_SETFONT;
 	    dialog.pointsize = $3;
 	    unicode_from_ascii ((int *) NULL, &dialog.font, $5);
 	    if (dialog.ex == NULL)



More information about the Binutils mailing list