URL: http://bugs.freeciv.org/Ticket/Display.html?id=39324
[EMAIL PROTECTED] - Mi 04. Apr 2007, 21:34:31]:
-The dialogue for selling all of a certain improvement isn't destroyed
when an option is selected
- The dialogue for buying a unit isn't destroyed when buying isn't
allowed (due to a city being in disorder) until the city dialogue
itself is closed
Here's a patch for these two problems.
Index: client/gui-sdl/citydlg.c
===
--- client/gui-sdl/citydlg.c (Revision 12916)
+++ client/gui-sdl/citydlg.c (Arbeitskopie)
@@ -1071,19 +1071,21 @@
static int ok_buy_prod_city_dlg_callback(struct widget *pButton)
{
if (Main.event.button.button == SDL_BUTTON_LEFT) {
+popdown_hurry_production_dialog();
+
city_buy_production(pButton-data.city);
-if (pCityDlg)
-{
- popdown_window_group_dialog(pHurry_Prod_Dlg-pBeginWidgetList,
- pHurry_Prod_Dlg-pEndWidgetList);
- FC_FREE(pHurry_Prod_Dlg);
+if (pCityDlg) {
/* enable city dlg */
enable_city_dlg_widgets();
+
+ /* disable buy button */
set_wstate(pCityDlg-pBuy_Button, FC_WS_DISABLED);
-} else {
- popdown_hurry_production_dialog();
+ widget_redraw(pCityDlg-pBuy_Button);
+ widget_mark_dirty(pCityDlg-pBuy_Button);
+ flush_dirty();
}
+
}
return -1;
}
@@ -1109,7 +,7 @@
{
if (pHurry_Prod_Dlg) {
popdown_window_group_dialog(pHurry_Prod_Dlg-pBeginWidgetList,
- pHurry_Prod_Dlg-pEndWidgetList);
+pHurry_Prod_Dlg-pEndWidgetList);
FC_FREE(pHurry_Prod_Dlg);
flush_dirty();
}
@@ -1155,7 +1157,7 @@
}
value = city_buy_cost(pCity);
- if(!pCity-did_buy) {
+ if (city_can_buy(pCity)) {
if (game.player_ptr-economic.gold = value) {
my_snprintf(cBuf, sizeof(cBuf),
_(Buy %s for %d gold?\n
@@ -1168,8 +1170,13 @@
name, value, game.player_ptr-economic.gold);
}
} else {
-my_snprintf(cBuf, sizeof(cBuf),
- _(Sorry, You have already bought here in this turn));
+if (pCity-did_buy) {
+ my_snprintf(cBuf, sizeof(cBuf),
+ _(Sorry, You have already bought here in this turn.));
+} else {
+ my_snprintf(cBuf, sizeof(cBuf),
+ _(Sorry, You can't buy here in this turn.));
+}
}
pStr = create_str16_from_char(_(Buy It?), adj_font(12));
@@ -1207,7 +1214,7 @@
add_to_gui_list(ID_BUTTON, pBuf);
- if (!pCity-did_buy game.player_ptr-economic.gold = value) {
+ if (city_can_buy(pCity) game.player_ptr-economic.gold = value) {
pBuf = create_themeicon_button_from_chars(pTheme-OK_Icon, pWindow-dst,
_(Yes), adj_font(12), 0);
@@ -1278,7 +1285,7 @@
pBuf = pWindow-prev;
pBuf-size.y = dst.y;
- if (!pCity-did_buy game.player_ptr-economic.gold = value) {
+ if (city_can_buy(pCity) game.player_ptr-economic.gold = value) {
/* yes */
pBuf = pBuf-prev;
pBuf-size.x = area.x + (area.w - (2 * pBuf-size.w + adj_size(20))) / 2;
@@ -1512,7 +1519,7 @@
}
}
-if (pCityDlg-pCity-did_buy pCityDlg-pBuy_Button) {
+if (!city_can_buy(pCityDlg-pCity) pCityDlg-pBuy_Button) {
set_wstate(pCityDlg-pBuy_Button, FC_WS_DISABLED);
}
@@ -3237,7 +3244,7 @@
} else {
- if (!pCity-did_buy pCityDlg-pBuy_Button
+ if (city_can_buy(pCity) pCityDlg-pBuy_Button
(get_wstate(pCityDlg-pBuy_Button) == FC_WS_DISABLED)) {
set_wstate(pCityDlg-pBuy_Button, FC_WS_NORMAL);
widget_redraw(pCityDlg-pBuy_Button);
@@ -3815,7 +3822,7 @@
pBuf-size.y = area.y + area.h - pBuf-size.h - adj_size(5);
pCityDlg-pBuy_Button = pBuf;
pBuf-key = SDLK_h;
- if ((pOwner == game.player_ptr) (!pCity-did_buy)) {
+ if (city_can_buy(pCity)) {
set_wstate(pBuf, FC_WS_NORMAL);
}
add_to_gui_list(ID_CITY_DLG_PROD_BUY_BUTTON, pBuf);
Index: client/gui-sdl/repodlgs.c
===
--- client/gui-sdl/repodlgs.c (Revision 12916)
+++ client/gui-sdl/repodlgs.c (Arbeitskopie)
@@ -1414,7 +1414,7 @@
total_count = pImpr-data.cont-id1;
/* popdown sell dlg */
-del_group_of_widgets_from_gui_list(pEconomy_Sell_Dlg-pBeginWidgetList,
+popdown_window_group_dialog(pEconomy_Sell_Dlg-pBeginWidgetList,
pEconomy_Sell_Dlg-pEndWidgetList);
FC_FREE(pEconomy_Sell_Dlg);
enable_economy_dlg();
@@ -1496,12 +1496,12 @@
if(count 0) {
my_snprintf(cBuf, sizeof(cBuf),
_(We have %d of %s\n(total value is : %d)\n
- We can sell %d of them for %d gold),
+ We can sell %d of them for %d gold.),
total_count, get_improvement_name(imp),
total_count * value, count, gold);
} else {
my_snprintf(cBuf, sizeof(cBuf),
- _(We can't sell any %s in this turn), get_improvement_name(imp));
+ _(We can't