$OpenBSD: patch-win_Qt_qt_win_cpp,v 1.4 2004/02/13 07:17:23 brad Exp $
--- win/Qt/qt_win.cpp.orig	2003-02-23 09:43:45.000000000 -0500
+++ win/Qt/qt_win.cpp	2004-01-19 20:39:22.000000000 -0500
@@ -57,6 +57,7 @@ extern "C" {
 #include "dlb.h"
 #include "patchlevel.h"
 #include "tile2x11.h"
+#undef Invisible
 #undef Warning
 #undef red
 #undef green
@@ -69,6 +70,7 @@ extern "C" {
 #undef max
 #undef alloc
 #undef lock
+#undef yn
 
 }
 
@@ -103,7 +105,7 @@ extern "C" {
 #ifdef Q_WS_MACX
 #  include <sys/malloc.h>
 #else
-#  include <malloc.h>
+#  include <stdlib.h>
 #endif
 
 #ifdef _WS_X11_
@@ -976,7 +978,7 @@ public:
 };
 
 NetHackQtPlayerSelector::NetHackQtPlayerSelector(NetHackQtKeyBuffer& ks) :
-    QDialog(0,"plsel",TRUE),
+    QDialog(qApp->mainWidget(),"plsel",TRUE),
     keysource(ks),
     fully_specified_role(TRUE)
 {
@@ -1145,7 +1147,7 @@ NetHackQtPlayerSelector::NetHackQtPlayer
 	a = rn2(ROLE_ALIGNS);
     }
     alignment[a]->setChecked(TRUE);
-    selectAlignment(g);
+    selectAlignment(a);
 
     QListViewItem* li;
 
@@ -1156,6 +1158,9 @@ NetHackQtPlayerSelector::NetHackQtPlayer
     li = race->firstChild();
     while (ra--) li=li->nextSibling();
     race->setSelected(li,TRUE);
+
+    flags.initrace = race->selectedItemNumber();
+    flags.initrole = role->selectedItemNumber();
 }
 
 
@@ -1326,7 +1331,7 @@ bool NetHackQtPlayerSelector::Choose()
 
 
 NetHackQtStringRequestor::NetHackQtStringRequestor(NetHackQtKeyBuffer& ks, const char* p, const char* cancelstr) :
-    QDialog(0,"string",FALSE),
+    QDialog(qApp->mainWidget(),"string",FALSE),
     prompt(p,this,"prompt"),
     input(this,"input"),
     keysource(ks)
@@ -1637,8 +1642,6 @@ void NetHackQtMapWindow::paintEvent(QPai
 	painter.setClipRect( event->rect() ); // (normally we don't clip)
 	painter.fillRect( event->rect(), black );
 
-	int offset;
-
 	if ( !rogue_font ) {
 	    // Find font...
 	    int pts = 5;
@@ -1826,10 +1829,10 @@ public:
     int uncleared;
 
     NetHackQtScrollText(int maxlength) :
+	uncleared(0),
 	maxitems(maxlength),
 	first(0),
 	count(0),
-	uncleared(0),
 	item_cycle(maxlength)
     {
 	setNumCols(1);
@@ -2027,21 +2030,21 @@ void NetHackQtMessageWindow::PutStr(int 
 
 NetHackQtLabelledIcon::NetHackQtLabelledIcon(QWidget* parent, const char* l) :
     QWidget(parent),
+    low_is_good(FALSE),
+    prev_value(-123),
     turn_count(-1),
     label(new QLabel(l,this)),
-    icon(0),
-    low_is_good(FALSE),
-    prev_value(-123)
+    icon(0)
 {
     initHighlight();
 }
 NetHackQtLabelledIcon::NetHackQtLabelledIcon(QWidget* parent, const char* l, const QPixmap& i) :
     QWidget(parent),
     low_is_good(FALSE),
+    prev_value(-123),
     turn_count(-1),
     label(new QLabel(l,this)),
-    icon(new QLabel(this)),
-    prev_value(-123)
+    icon(new QLabel(this))
 {
     setIcon(i);
     initHighlight();
@@ -2174,7 +2177,7 @@ tryload(QPixmap& pm, const char* fn)
     if (!pm.load(fn)) {
 	QString msg;
 	msg.sprintf("Cannot load \"%s\"", fn);
-	QMessageBox::warning(0, "IO Error", msg);
+	QMessageBox::warning(qApp->mainWidget(), "IO Error", msg);
     }
 }
 
@@ -2183,14 +2186,14 @@ NetHackQtStatusWindow::NetHackQtStatusWi
     //  Alignment needs -2 init value, because -1 is an alignment.
     //  Armor Class is an schar, so 256 is out of range.
     //  Blank value is 0 and should never change.
+    name(this,"(name)"),
+    dlevel(this,"(dlevel)"),
     str(this,"STR"),
     dex(this,"DEX"),
     con(this,"CON"),
     intel(this,"INT"),
     wis(this,"WIS"),
     cha(this,"CHA"),
-    name(this,"(name)"),
-    dlevel(this,"(dlevel)"),
     gold(this,"Gold"),
     hp(this,"Hit Points"),
     power(this,"Power"),
@@ -2337,7 +2340,6 @@ void NetHackQtStatusWindow::resizeEvent(
 
     int h=height();
     int x=0,y=0;
-    double space=1.0;
 
     int iw; // Width of an item across line
     int lh; // Height of a line of values
@@ -2535,7 +2537,7 @@ void NetHackQtStatusWindow::updateStats(
     name.setLabel(buf,NetHackQtLabelledIcon::NoNum,u.ulevel);
 
     if (describe_level(buf)) {
-	dlevel.setLabel(buf,TRUE);
+	dlevel.setLabel(buf,(bool)TRUE);
     } else {
 	Sprintf(buf, "%s, level ", dungeons[u.uz.dnum].dname);
 	dlevel.setLabel(buf,(long)depth(&u.uz));
@@ -2638,7 +2640,7 @@ void NetHackQtStatusWindow::checkTurnEve
 
 
 NetHackQtMenuDialog::NetHackQtMenuDialog() :
-    QDialog(0,0,FALSE)
+    QDialog(qApp->mainWidget(),0,FALSE)
 {
 }
 
@@ -2681,8 +2683,8 @@ NetHackQtMenuWindow::NetHackQtMenuWindow
     QTableView(),
     keysource(ks),
     dialog(new NetHackQtMenuDialog()),
-    pressed(-1),
-    prompt(0)
+    prompt(0),
+    pressed(-1)
 {
     setNumCols(4);
     setCellHeight(QMAX(qt_settings->glyphs().height()+1,fontMetrics().height()));
@@ -2690,8 +2692,6 @@ NetHackQtMenuWindow::NetHackQtMenuWindow
     setFrameStyle(Panel|Sunken);
     setLineWidth(2);
 
-    int x=0;
-
     ok=new QPushButton("Ok",dialog);
     connect(ok,SIGNAL(clicked()),dialog,SLOT(accept()));
 
@@ -2789,7 +2789,7 @@ void NetHackQtMenuWindow::AddMenu(int gl
 	}
     }
 
-    if (item.size()<itemcount+1) {
+    if ((int)item.size() < itemcount+1) {
 	item.resize(itemcount*4+10);
     }
     item[itemcount].glyph=glyph;
@@ -3091,7 +3091,7 @@ void NetHackQtMenuWindow::mousePressEven
 	    if (item[row].count>0)
 		Sprintf(buf,"%d", item[row].count);
 	    else
-		Sprintf(buf,"");
+		Strcpy(buf, "");
 
 	    requestor.SetDefault(buf);
 	    if (requestor.Get(buf)) {
@@ -3215,7 +3215,7 @@ void NetHackQtRIP::paintEvent(QPaintEven
 }
 
 NetHackQtTextWindow::NetHackQtTextWindow(NetHackQtKeyBuffer& ks) :
-    QDialog(0,0,FALSE),
+    QDialog(qApp->mainWidget(),0,FALSE),
     keysource(ks),
     use_rip(FALSE),
     str_fixed(FALSE),
@@ -3417,7 +3417,7 @@ void NetHackQtTextWindow::Search()
     requestor.SetDefault(line);
     if (requestor.Get(line)) {
 	int current=lines->currentItem();
-	for (int i=1; i<lines->count(); i++) {
+	for (uint i=1; i<lines->count(); i++) {
 	    int lnum=(i+current)%lines->count();
 	    QString str=lines->text(lnum);
 	    if (str.contains(line)) {
@@ -3584,7 +3584,7 @@ NetHackQtMainWindow::NetHackQtMainWindow
 	{ game,		"Options\tShift+O",           "O", 3},
 	{ game,		"Explore mode\tShift+X",      "X", 3},
 	{ game,		0, 0, 3},
-	{ game,		"Save\tShift+S",              "Sy", 3},
+	{ game,		"Save\tSy",              "Sy", 3},
 	{ game,		"Quit\tAlt+Q",                "\361", 3},
 
 	{ apparel,	"Apparel off\tShift+A",       "A", 2},
@@ -3625,10 +3625,11 @@ NetHackQtMainWindow::NetHackQtMainWindow
 	{ act2,	"Search\ts",            "s", 3},
 	{ act2,	"Sit\tAlt+S",             "\363", 3},
 	{ act2,	"Throw\tt",             "t", 2},
+	{ act2,	"Untrap\t#u",             "#u", 3},
 	{ act2,	"Up\t<",                "<", 3},
 	{ act2,	"Wipe face\tAlt+W",       "\367", 3},
 
-	{ magic,	"Quaff potion\tq",      "q?", 3},
+	{ magic,	"Quaff potion\tq?",     "q?", 3},
 	{ magic,	"Read scroll/book\tr?", "r?", 3},
 	{ magic,	"Zap wand\tz?",         "z?", 3},
 	{ magic,	"Zap spell\tShift+Z",        "Z", 3},
@@ -3647,7 +3648,7 @@ NetHackQtMainWindow::NetHackQtMainWindow
 	{ help,		0, 0, 3},
 	{ help,		"What is here\t:",      ":", 3},
 	{ help,		"What is there\t;",      ";", 3},
-	{ help,		"What is...\t/",        "/y", 2},
+	{ help,		"What is...\t/y",        "/y", 2},
 	{ help,		0, 0, 1},
 
 	{ info,		"Inventory\ti",         "i", 3},
@@ -4075,9 +4076,9 @@ void NetHackQtMainWindow::ShowIfReady()
 
 
 NetHackQtYnDialog::NetHackQtYnDialog(NetHackQtKeyBuffer& keysrc,const char* q,const char* ch,char df) :
-    QDialog(0,0,FALSE),
-    keysource(keysrc),
-    question(q), choices(ch), def(df)
+    QDialog(qApp->mainWidget(),0,FALSE),
+    question(q), choices(ch), def(df),
+    keysource(keysrc)
 {
     setCaption("NetHack: Question");
 }
@@ -4164,7 +4165,6 @@ char NetHackQtYnDialog::Exec()
 	const int margin=8;
 	const int gutter=8;
 	const int extra=fontMetrics().height(); // Extra for group
-	int row=0;
 	int x=margin, y=extra+margin;
 	int butsize=fontMetrics().height()*2+5;
 
@@ -4202,7 +4202,7 @@ char NetHackQtYnDialog::Exec()
 	show();
 	char choice=0;
 	char ch_esc=0;
-	for (int i=0; i<ch.length(); i++) {
+	for (uint i=0; i<ch.length(); i++) {
 	    if (ch[i].latin1()=='q') ch_esc='q';
 	    else if (!ch_esc && ch[i].latin1()=='n') ch_esc='n';
 	}
@@ -4211,7 +4211,7 @@ char NetHackQtYnDialog::Exec()
 	    if (!keysource.Empty()) {
 		char k=keysource.GetAscii();
 		char ch_esc=0;
-		for (int i=0; i<ch.length(); i++)
+		for (uint i=0; i<ch.length(); i++)
 		    if (ch[i].latin1()==k)
 			choice=k;
 		if (!choice) {
@@ -4298,7 +4298,7 @@ NetHackQtGlyphs::NetHackQtGlyphs()
     } else {
 	tiles_per_row = 40;
     }
-    int rows = ((total_tiles_used+tiles_per_row-1) / tiles_per_row);
+
     if ( iflags.wc_tile_width )
 	tilefile_tile_W = iflags.wc_tile_width;
     else
@@ -4371,8 +4371,8 @@ void NetHackQtGlyphs::setSize(int w, int
 
 
 NetHackQtMenuOrTextWindow::NetHackQtMenuOrTextWindow(NetHackQtKeyBuffer& ks) :
-    keysource(ks),
-    actual(0)
+    actual(0),
+    keysource(ks)
 {
 }
 
@@ -4546,7 +4546,7 @@ void NetHackQtBind::qt_player_selection(
 }
 
 NetHackQtSavedGameSelector::NetHackQtSavedGameSelector(const char** saved) :
-    QDialog(0,"sgsel",TRUE)
+    QDialog(qApp->mainWidget(),"sgsel",TRUE)
 {
     QVBoxLayout *vbl = new QVBoxLayout(this,6);
     QHBox* hb;
@@ -4664,11 +4664,11 @@ static QArray<NetHackQtWindow*> id_to_wi
 winid NetHackQtBind::qt_create_nhwindow(int type)
 {
     winid id;
-    for (id = 0; id < id_to_window.size(); id++) {
+    for (id = 0; id < (winid) id_to_window.size(); id++) {
 	if ( !id_to_window[id] )
 	    break;
     }
-    if ( id == id_to_window.size() )
+    if ( id == (winid) id_to_window.size() )
 	id_to_window.resize(id+1);
 
     NetHackQtWindow* window=0;
@@ -4998,7 +4998,7 @@ void NetHackQtBind::qt_getlin(const char
 }
 
 NetHackQtExtCmdRequestor::NetHackQtExtCmdRequestor(NetHackQtKeyBuffer& ks) :
-    QDialog(0, "ext-cmd", FALSE),
+    QDialog(qApp->mainWidget(), "ext-cmd", FALSE),
     keysource(ks)
 {
     int marg=4;
@@ -5152,8 +5152,12 @@ bool NetHackQtBind::notify(QObject *rece
 		}
 	    }
 	    char ch=key_event->ascii();
+	    if ( !ch && (key_event->state() & Qt::ControlButton) ) {
+		// On Mac, ascii control codes are not sent, force them.
+		if ( k>=Qt::Key_A && k<=Qt::Key_Z )
+		    ch = k - Qt::Key_A + 1;
+	    }
 	    if (!macro && ch) {
-		int k = key_event->key();
 		bool alt = (key_event->state()&AltButton) ||
 		   (k >= Key_0 && k <= Key_9 && (key_event->state()&ControlButton));
 		keybuffer.Put(key_event->key(),ch + (alt ? 128 : 0),
