61d60 < int NUM_UNITS_SHOWN; 87,88c86,88 < GtkWidget **support_unit_boxes; < GtkWidget **support_unit_pixmaps; --- > GtkWidget *support_box; > GList *support_unit_boxes; > GList *support_unit_pixmaps; 91,92c91,93 < GtkWidget **present_unit_boxes; < GtkWidget **present_unit_pixmaps; --- > GtkWidget *present_box; > GList *present_unit_boxes; > GList *present_unit_pixmaps; 110c111 < int *support_unit_ids; --- > GList *support_unit_ids; 112c113 < int *present_unit_ids; --- > GList *present_unit_ids; 120a122,123 > int NUM_UNITS_SHOWN; > int initialized; 133a137,138 > static void recalculate_NUM_UNITS_SHOWN(struct city_dialog* pdialog); > 224a230,236 > city_dialogs_have_been_initialised=1; > } > > /**************************************************************** > ... > *****************************************************************/ > static void recalculate_NUM_UNITS_SHOWN(struct city_dialog* pdialog){ 226c238 < NUM_UNITS_SHOWN = CITY_DIALOG_WIDTH/UNIT_TILE_WIDTH-1; --- > pdialog->NUM_UNITS_SHOWN = (GTK_WIDGET(pdialog->shell)->allocation.width-50)/UNIT_TILE_WIDTH; 228c240 < NUM_UNITS_SHOWN = CITY_DIALOG_WIDTH/(UNIT_TILE_WIDTH + UNIT_TILE_WIDTH/2)-1; --- > pdialog->NUM_UNITS_SHOWN = (GTK_WIDGET(pdialog->shell)->allocation.width-50)/(UNIT_TILE_WIDTH + UNIT_TILE_WIDTH/2); 230,231d241 < < city_dialogs_have_been_initialised=1; 233a244 > 428a440,470 > > /**************************************************************** > ... > *****************************************************************/ > static void add_box_and_pixmap(GList* box, GList* map, GList* id, GtkWidget* hbox, gint own_city){ > box->data=(gpointer)gtk_event_box_new(); > gtk_widget_set_events((GtkWidget*)(box->data), > GDK_BUTTON_PRESS_MASK|GDK_BUTTON_RELEASE_MASK); > > gtk_box_pack_start(GTK_BOX(hbox), (GtkWidget*)(box->data), > FALSE, FALSE, 0); > > map->data=(gpointer)(gtk_pixcomm_new(root_window, UNIT_TILE_WIDTH, > NORMAL_TILE_HEIGHT+NORMAL_TILE_HEIGHT/2)); > gtk_container_add(GTK_CONTAINER((GtkWidget*)(box->data)), > (GtkWidget*)(map->data)); > > id->data=(gpointer)(-1); > > if (own_city) > gtk_widget_set_sensitive((GtkWidget*)(box->data), FALSE); > > gtk_widget_show_all((GtkWidget*)(box->data)); > > > box->next=NULL; > map->next=NULL; > id->next=NULL; > fprintf(stderr,"@"); > } > 442a485 > pdialog->initialized=0; 446,449c489,492 < pdialog->support_unit_boxes=fc_calloc(NUM_UNITS_SHOWN, sizeof(GtkWidget *)); < pdialog->support_unit_pixmaps=fc_calloc(NUM_UNITS_SHOWN, sizeof(GtkWidget *)); < pdialog->present_unit_boxes=fc_calloc(NUM_UNITS_SHOWN, sizeof(GtkWidget *)); < pdialog->present_unit_pixmaps=fc_calloc(NUM_UNITS_SHOWN, sizeof(GtkWidget *)); --- > pdialog->support_unit_boxes=NULL; > pdialog->support_unit_pixmaps=NULL; > pdialog->present_unit_boxes=NULL; > pdialog->present_unit_pixmaps=NULL; 451,452c494,495 < pdialog->support_unit_ids=fc_calloc(NUM_UNITS_SHOWN, sizeof(int)); < pdialog->present_unit_ids=fc_calloc(NUM_UNITS_SHOWN, sizeof(int)); --- > pdialog->support_unit_ids=NULL; > pdialog->present_unit_ids=NULL; 611c654 < box=gtk_hbox_new(TRUE, 1); --- > box=gtk_hbox_new(FALSE,1); 615,635d657 < for(i=0; isupport_unit_boxes[i]=gtk_event_box_new(); < gtk_widget_set_events(pdialog->support_unit_boxes[i], < GDK_BUTTON_PRESS_MASK|GDK_BUTTON_RELEASE_MASK); < < gtk_box_pack_start(GTK_BOX(box), pdialog->support_unit_boxes[i], < TRUE, FALSE, 0); < gtk_widget_show(pdialog->support_unit_boxes[i]); < < pdialog->support_unit_pixmaps[i]= < gtk_pixcomm_new(root_window, UNIT_TILE_WIDTH, < NORMAL_TILE_HEIGHT+NORMAL_TILE_HEIGHT/2); < gtk_container_add(GTK_CONTAINER(pdialog->support_unit_boxes[i]), < pdialog->support_unit_pixmaps[i]); < < pdialog->support_unit_ids[i]=-1; < < if(pcity->owner != game.player_idx) < gtk_widget_set_sensitive(pdialog->support_unit_boxes[i], FALSE); < } < 637c659 < gtk_box_pack_start(GTK_BOX(box), vbox2, TRUE, FALSE, 0); --- > gtk_box_pack_end(GTK_BOX(box), vbox2, FALSE, FALSE, 0); 646a669,674 > pdialog->support_box=gtk_hbox_new(FALSE, 1); > > gtk_widget_realize(box); > gtk_box_pack_start(GTK_BOX(box), pdialog->support_box, FALSE, FALSE, 0); > > 661c689 < box=gtk_hbox_new(TRUE, 1); --- > box=gtk_hbox_new(FALSE, 1); 665,684d692 < for(i=0; ipresent_unit_boxes[i]=gtk_event_box_new(); < gtk_widget_set_events(pdialog->present_unit_boxes[i], < GDK_BUTTON_PRESS_MASK|GDK_BUTTON_RELEASE_MASK); < < gtk_box_pack_start(GTK_BOX(box), pdialog->present_unit_boxes[i], < TRUE, FALSE, 0); < gtk_widget_show(pdialog->present_unit_boxes[i]); < < pdialog->present_unit_pixmaps[i]= < gtk_pixcomm_new(root_window, UNIT_TILE_WIDTH, UNIT_TILE_HEIGHT); < gtk_container_add(GTK_CONTAINER(pdialog->present_unit_boxes[i]), < pdialog->present_unit_pixmaps[i]); < < pdialog->present_unit_ids[i]=-1; < < if(pcity->owner != game.player_idx) < gtk_widget_set_sensitive(pdialog->present_unit_boxes[i], FALSE); < } < 686c694 < gtk_box_pack_start(GTK_BOX(box), vbox2, TRUE, FALSE, 0); --- > gtk_box_pack_end(GTK_BOX(box), vbox2, FALSE, FALSE, 0); 695a704,707 > pdialog->present_box=gtk_hbox_new(FALSE, 1); > gtk_box_pack_start(GTK_BOX(box),pdialog->present_box, FALSE, FALSE, 0); > gtk_widget_realize(pdialog->present_box); > 1621a1634,1636 > GList **support_box,**support_pixmap,**support_id,*iter,*tmp; > > recalculate_NUM_UNITS_SHOWN(pdialog); 1624,1625c1639,1640 < for(i=0; isupport_unit_ids[i]==unitid) --- > for(i=0,iter=pdialog->support_unit_ids; iNUM_UNITS_SHOWN && iter; iter=iter->next, i++) > if((gint)(iter->data)==unitid) 1627c1642 < if(i==NUM_UNITS_SHOWN) --- > if(i==pdialog->NUM_UNITS_SHOWN) 1637c1652 < size=(plist->list.nelements-1)/NUM_UNITS_SHOWN; --- > size=(plist->list.nelements-1)/pdialog->NUM_UNITS_SHOWN; 1649c1664,1669 < pdialog->support_unit_pos*NUM_UNITS_SHOWN); --- > pdialog->support_unit_pos*pdialog->NUM_UNITS_SHOWN); > > > support_box=&(pdialog->support_unit_boxes); > support_pixmap=&(pdialog->support_unit_pixmaps); > support_id=&(pdialog->support_unit_ids); 1651c1671 < for(i=0;i for(i=0;iNUM_UNITS_SHOWN&&ITERATOR_PTR(myiter); ITERATOR_NEXT(myiter),i++) { 1653c1673 < --- > 1656c1676,1683 < --- > > if (*support_box==NULL){ /*The three lists should always be syncronized*/ > *support_box=fc_malloc(sizeof(GList*)); > *support_pixmap=fc_malloc(sizeof(GList*)); > *support_id=fc_malloc(sizeof(GList*)); > add_box_and_pixmap(*support_box,*support_pixmap,*support_id,pdialog->support_box,(pdialog->pcity->owner==game.player_idx)); > } > 1658,1660c1685,1687 < gtk_pixcomm_clear(GTK_PIXCOMM(pdialog->support_unit_pixmaps[i]), FALSE); < < put_unit_gpixmap(punit, GTK_PIXCOMM(pdialog->support_unit_pixmaps[i])); --- > gtk_pixcomm_clear(GTK_PIXCOMM((GtkWidget*)((*support_pixmap)->data)), FALSE); > > put_unit_gpixmap(punit, GTK_PIXCOMM((GtkWidget*)((*support_pixmap)->data))); 1662,1676c1689 < GTK_PIXCOMM(pdialog->support_unit_pixmaps[i])); < < gtk_pixcomm_changed(GTK_PIXCOMM(pdialog->support_unit_pixmaps[i])); < < pdialog->support_unit_ids[i]=punit->id; < < gtk_signal_handlers_destroy(GTK_OBJECT(pdialog->support_unit_boxes[i])); < gtk_signal_connect(GTK_OBJECT(pdialog->support_unit_boxes[i]), < "button_press_event", < GTK_SIGNAL_FUNC(support_units_callback), (gpointer)punit->id); < gtk_signal_connect(GTK_OBJECT(pdialog->support_unit_boxes[i]), < "button_release_event", < GTK_SIGNAL_FUNC(s_units_middle_callback), (gpointer)punit->id); < gtk_widget_set_sensitive(pdialog->support_unit_boxes[i], TRUE); < } --- > GTK_PIXCOMM((GtkWidget*)((*support_pixmap)->data))); 1678,1681c1691,1707 < for(; isupport_unit_pixmaps[i]), TRUE); < pdialog->support_unit_ids[i]=0; < gtk_widget_set_sensitive(pdialog->support_unit_boxes[i], FALSE); --- > gtk_pixcomm_changed(GTK_PIXCOMM((GtkWidget*)((*support_pixmap)->data))); > > (*support_id)->data=(gpointer)(punit->id); > > gtk_signal_handlers_destroy(GTK_OBJECT((GtkWidget*)((*support_box)->data))); > gtk_signal_connect(GTK_OBJECT((GtkWidget*)((*support_box)->data)), > "button_press_event", > GTK_SIGNAL_FUNC(support_units_callback), (gpointer)punit->id); > gtk_signal_connect(GTK_OBJECT((GtkWidget*)((*support_box)->data)), > "button_release_event", > GTK_SIGNAL_FUNC(s_units_middle_callback), (gpointer)punit->id); > gtk_widget_set_sensitive((GtkWidget*)((*support_box)->data), TRUE); > > support_box=&((*support_box)->next); > support_pixmap=&((*support_pixmap)->next); > support_id=&((*support_id)->next); > 1682a1709,1726 > > for(iter=*support_box;iter;iter=tmp){ > gtk_widget_destroy((GtkWidget*)iter->data); > tmp=iter->next; > free(iter); > } > for(iter=*support_pixmap;iter;iter=tmp){ > tmp=iter->next; > free(iter); > } > for(iter=*support_id;iter;iter=tmp){ > tmp=iter->next; > free(iter); > } > *support_box=NULL; > *support_pixmap=NULL; > *support_id=NULL; > 1684a1729 > 1688c1733,1734 < static void city_dialog_update_present_units(struct city_dialog *pdialog, int unitid) --- > static void city_dialog_update_present_units(struct city_dialog *pdialog, > int unitid) 1695c1741,1746 < --- > GList **present_box,**present_pixmap,**present_id,*iter,*tmp; > > > recalculate_NUM_UNITS_SHOWN(pdialog); > > 1697,1698c1748,1749 < for(i=0; ipresent_unit_ids[i]==unitid) --- > for(i=0, iter=pdialog->present_unit_ids;iNUM_UNITS_SHOWN && iter; i++, iter=iter->next) > if ((gint)(iter->data)==unitid) 1700c1751 < if(i==NUM_UNITS_SHOWN) --- > if(i==pdialog->NUM_UNITS_SHOWN) 1710c1761 < size=(plist->list.nelements-1)/NUM_UNITS_SHOWN; --- > size=(plist->list.nelements-1)/pdialog->NUM_UNITS_SHOWN; 1712c1763 < if (size<=0 || pdialog->present_unit_pos>size) { --- > if (size==0 || pdialog->present_unit_pos>size) { 1722c1773,1774 < pdialog->present_unit_pos*NUM_UNITS_SHOWN); --- > pdialog->present_unit_pos*pdialog->NUM_UNITS_SHOWN); > 1724c1776,1780 < for(i=0; i present_box=&(pdialog->present_unit_boxes); > present_pixmap=&(pdialog->present_unit_pixmaps); > present_id=&(pdialog->present_unit_ids); > > for(i=0; iNUM_UNITS_SHOWN&&ITERATOR_PTR(myiter); ITERATOR_NEXT(myiter),i++) { 1730,1731c1786,1791 < if (flags_are_transparent) < gtk_pixcomm_clear(GTK_PIXCOMM(pdialog->present_unit_pixmaps[i]), FALSE); --- > if (*present_box==NULL){ /*The three lists should always be syncronized*/ > *present_box=fc_malloc(sizeof(GList*)); > *present_pixmap=fc_malloc(sizeof(GList*)); > *present_id=fc_malloc(sizeof(GList*)); > add_box_and_pixmap(*present_box,*present_pixmap,*present_id,pdialog->present_box,(pdialog->pcity->owner==game.player_idx)); > } 1733c1793,1794 < put_unit_gpixmap(punit, GTK_PIXCOMM(pdialog->present_unit_pixmaps[i])); --- > if (flags_are_transparent) > gtk_pixcomm_clear(GTK_PIXCOMM((GtkWidget*)((*present_pixmap)->data)), FALSE); 1735c1796 < gtk_pixcomm_changed(GTK_PIXCOMM(pdialog->present_unit_pixmaps[i])); --- > put_unit_gpixmap(punit, GTK_PIXCOMM((GtkWidget*)((*present_pixmap)->data))); 1737c1798,1813 < pdialog->present_unit_ids[i]=punit->id; --- > gtk_pixcomm_changed(GTK_PIXCOMM((GtkWidget*)((*present_pixmap)->data))); > > (*present_id)->data=(gpointer)(punit->id); > > gtk_signal_handlers_destroy(GTK_OBJECT((GtkWidget*)((*present_box)->data))); > gtk_signal_connect(GTK_OBJECT((GtkWidget*)((*present_box)->data)), > "button_press_event", > GTK_SIGNAL_FUNC(present_units_callback), (gpointer)punit->id); > gtk_signal_connect(GTK_OBJECT((GtkWidget*)((*present_box)->data)), > "button_release_event", > GTK_SIGNAL_FUNC(p_units_middle_callback), (gpointer)punit->id); > gtk_widget_set_sensitive((GtkWidget*)((*present_box)->data), TRUE); > > present_box=&((*present_box)->next); > present_pixmap=&((*present_pixmap)->next); > present_id=&((*present_id)->next); 1739,1751d1814 < gtk_signal_handlers_destroy(GTK_OBJECT(pdialog->present_unit_boxes[i])); < gtk_signal_connect(GTK_OBJECT(pdialog->present_unit_boxes[i]), < "button_press_event", < GTK_SIGNAL_FUNC(present_units_callback), (gpointer)punit->id); < gtk_signal_connect(GTK_OBJECT(pdialog->present_unit_boxes[i]), < "button_release_event", < GTK_SIGNAL_FUNC(p_units_middle_callback), (gpointer)punit->id); < gtk_widget_set_sensitive(pdialog->present_unit_boxes[i], TRUE); < } < for(; ipresent_unit_pixmaps[i]), TRUE); < pdialog->present_unit_ids[i]=0; < gtk_widget_set_sensitive(pdialog->present_unit_boxes[i], FALSE); 1752a1816,1833 > > for(iter=*present_box;iter;iter=tmp){ > gtk_widget_destroy((GtkWidget*)iter->data); > tmp=iter->next; > free(iter); > } > for(iter=*present_pixmap;iter;iter=tmp){ > tmp=iter->next; > free(iter); > } > for(iter=*present_id;iter;iter=tmp){ > tmp=iter->next; > free(iter); > } > *present_box=NULL; > *present_pixmap=NULL; > *present_id=NULL; > 1753a1835 >