DELTA 17122 3639 114
SVN  163 	  O  +real_update_conn_list_dialog(void)
{
  /* PORTME */ENDREP
DELTA 16059 4914 727
SVN  /孒乕   俰乂real_void gui_update_font(const char *font_name, const char *font_value);

extern const char *client_string;

/* Actually defined in update_queue.c */
void update_conn_list_dialog(void);

#endif  /* FC__GUI_MAIN_G_H */
ENDREP
DELTA 16999 1273 2652
SVN  鑥c, 咼 乨 汼 o = .! ! - R  J滰奛 T? J滰 V= J滰 V= J滰$ R  J滰ocommon */
#include "city.h"
#include "player.h"

/* include */
#include "citydlg_g.h"
#include "cityrep_g.h"
#include "gui_main_g.h"
#include "menu_g.h"

#include "update_queue.h"


#define Q_CALLBACK(fn) ((queue_callback_t) fn)Q_CALLBACK(hash_iter_get_key(iter)started_waiting_queueQ_CALLBACK(hash_iter_get_key(iter)Q_CALLBACK(Update cities gui.
**/
static void cities_update_callback(void *data)
{
#ifdef DEBUG
#define NEED_UPDATE(city_update, action)                                    \
  if (city_update & need_update) {                                          \
    action;                                                                 \
    need_update &= ~city_update;                                            \
  }
#else
#define NEED_UPDATE(city_update, action)                                    \
  if (city_update & need_update) {                                          \
    action;                                                                 \
  }
#endif /* DEBUG */

  cities_iterate(pcity) {
    enum city_updates need_update = pcity->client.need_updates;

    if (CU_NO_UPDATE == need_update) {
      continue;
    }

    /* Clear all updates. */
    pcity->client.need_updates = CU_NO_UPDATE;

    NEED_UPDATE(CU_UPDATE_REPORT, real_city_report_update_city(pcity));
    NEED_UPDATE(CU_UPDATE_DIALOG, real_city_dialog_refresh(pcity));
    NEED_UPDATE(CU_POPUP_DIALOG, real_city_dialog_popup(pcity));

#ifdef DEBUG
    if (CU_NO_UPDATE != need_update) {
      log_error("Some city updates not handled "
                "for city %s (id %d): %d left.",
                city_name(pcity), pcity->id, need_update);
    }
#endif /* DEBUG */
  } cities_iterate_end;
#undef NEED_UPDATERequest the city dialog to be popped up for the city.
**/
void popup_city_dialog(struct city *pcity)
{
  pcity->client.need_updates |= CU_POPUP_DIALOG;
  update_queue_add(cities_update_callback, NULLRequest the city dialog to be updated for the city.
**/
void refresh_city_dialog(struct city *pcity)
{
  pcity->client.need_updates |= CU_UPDATE_DIALOG;
  update_queue_add(cities_update_callback, NULLRequest the city to be updated in the city report.
**/
void city_report_dialog_update_city(struct city *pcity)
{
  pcity->client.need_updates |= CU_UPDATE_REPORT;
  update_queue_add(cities_update_callback, NULL);
}
Update the connection list in the start page.
**/
void update_conn_list_dialog(void)
{
  update_queue_add(Q_CALLBACK(real_update_conn_list_dialog), NULL);
}
ENDREP
DELTA 16630 867 69
SVN  肎肔
 .  .real_ENDREP
DELTA 16578 289272 1402
SVN  倹h倽I<   󹳕E "& 潁亷Y 晇伂X 伮N 硈佭{ N y倣< 噝倱nfc_strdup("-*-*-*-*-*-*-14-*");

    city_productions_font_name = fc_fc_assert_ret(i >= 0 && i < fcreal_
  fc_assert_ret(idx >= -1 && idx < popdown_all(void)
{ENDREP
DELTA 17839 166926 2089
SVN  啝 啝  赪  Q値? 吥>%  update_conn_list_dialog(啝 5蜶  d坴 蚽GENDREP
DELTA 16929 35977 569
SVN  佨`佪=,丳 " =   匸)   琗亪 伌n
                                  | WF_RESTORE_BACKGROUND);
  pCloseButton->info_label = create_str16_from_char(_("Close Dialog (Esc)"),
                                                   fc_destroyfcreal_fcENDREP
DELTA 4313 129329 12835
SVN  倴W勀-嘫兇S 8  4,員 G9乵 	峝z 丟/ 0 6 乮4俇 乫$D 
c %渦乗 亃2 z/1 r5 M佖@s A 4 P佖> A 乧 Q佖>j A ( `侘7 丗 S佖< 僯 A 俤 `侘7乆 A < P佖> A 並 R佖=僋 A 2 8侘7檂 8侘7? `侘7D A - `侘7 A  R佖= A 侹 S佖<@ A z b侘5 乊蟫乽 ~褼俷 Q佖> <諰% 丅9並 A 唅 亶咼 k仈.嘨 S佖<D A = S佖< A  Q佖>乹 A $ `侘7 '込;  乣鞩 q駌 V亯9 丣驛 }鴌 ;亰!/ +仛倄 仜? x仠 仢U 9仦g h仩% G , A  Q佖<丆 A  T佖9 A R O佖@ A 侸 S佖< A L S佖< 伋@乬 '伕Y俶 t伝q怺 刋伻 S佖< A  Q佖> A  R佖= A 3 
佖>5 ]佭; S佖< .佮x* Q佖> 丠佸[ ;佺' R佖= 丠佸[ Q佖= A c 侖] y倎 V 倐d 凴倖o A q R佖< A 僺 <倫| :倱PD S佖< A  S佖<r A H G佖<c @ ! E佖>H @  G佖< @ : M佖@B A  P佖=% A 丷 Q佖<F A 倁 Q佖<{ A 侹 Q佖< A 乻 R佖; A  R佖; A 乼 R佖;s A  Q佖> A 僌 Q佖> A 丯
#ifdef HAVE_CONFIG_H
#include <config.h>
#endif

#ifdef AUDIO_SDL
#include "SDL.h"
#endif

#ifdef HAVE_LOCALE_H
#include <locale.h>
#endif
#include <stdarg.h>fdef GGZ_GTK
#  include <ggz-gtk.h>
#endif

/* utility */
#include "fciconv.h"
#include "fcintl.h"
#include "log.h"
#include "mem.h"
#include "shared.h"
#include "support.h"

/* common */
#include "dataio.h"
#include "featured_text.h"
#include "game.h"
#include "government.h"
#include "map.h"
#include "unitlist.h"
#include "version.h"

/* client */
#include "client_main.h"
#include "climisc.h"
#include "clinet.h"
#include "colors.h"
#include "connectdlg_common.h"
#include "control.h"
#include "editor.h"
#include "ggzclient.h"
#include "options.h"
#include "text.h"
#include "tilespec.h"

/* gui-gtk-2.0 */
#include "chatline.h"
#include "connectdlg.h"
#include "cma_fe.h"
#include "dialogs.h"
#include "diplodlg.h"
#include "editgui.h"
#include "gotodlg.h"
#include "graphics.h"
#include "gui_stuff.h"
#include "happiness.h"
#include "inteldlg.h"messagewin.h"
#include "optiondlg.h"
#include "pages.h"
#include "plrdlg.h"
#include "spaceshipdlg.h"
#include "repodlgs.h"
#include "resources.h"
#include "voteinfo_bar.h"

#include "gui_main.h"

const char *client_string = "gui-gtk-2.0
GtkWidget *overview_canvas;             /* GtkDrawingArea */
GtkWidget *overview_scrolled_window;    /* GtkScrolledWindow128;
int overview_canvas_store_height = 2 * 92;

GtkWidget *toplevel;
GdkWindow *root_window;
GtkWidget *toplevel_tabs;
GtkWidget *top_vbox;
GtkWidget *top_notebook, *bottom_notebook, *right_notebook;
GtkWidget *map_widget;
static GtkWidget *bottom_hpaned;

int city_names_font_size = 0, city_productions_font_size = 0;
GtkStyle *city_names_style = NULL;
GtkStyle *city_productions_style = NULL;
GtkStyle *reqtree_text_style = NULLGC *border_line_gc;
GdkGC *selectionavbox, *ahbox, *vbox, *conn_box;
GtkWidget* scroll_panel;

GtkTreeStore *connection_list_store;
GtkTreeView *connection_list_viewbox;
GtkWidget *unit_info_frame;

GtkTooltips *main_tips;
GtkWidget *econ_ebox;
GtkWidget *bulb_ebox;
GtkWidget *sun_ebox;
GtkWidget *flake_ebox;
GtkWidget *government_ebox;

const char * const gui_character_encoding = "UTF-8";
const bool gui_use_transliteration = FALSE;

static GtkWidget *main_menubar;
static GtkWidget *unit_pixmap_table;static GtkWidget *more_arrow_pixmap_button;

static int unit_id_top;View *main_message_area;
GtkTextBuffer *message_buffer;
static GtkWidget *allied_chat_toggle_buttonuint input_id, ggz_input_id;
gint cur_x, cur_y;


static gboolean show_info_button_release(GtkWidget *w, GdkEventButton *ev, gpointer data);
static gboolean show_info_popup(GtkWidget *w, GdkEventButton *ev, gpointer databoolboolean toplevel_key_press_handler(GtkWidget *w, GdkEventKey *ev, gpointer data);
static gboolean toplevel_key_release_handler(GtkWidget *w, GdkEventKey *ev, gpointer data);
static gboolean mouse_scroll_mapcanvas(GtkWidget *w, GdkEventScroll *ev);

static void tearoff_callback(GtkWidget *b, gpointer datagboolean select_unit_pixmap_callback(GtkWidget *w, GdkEvent *ev,
                                            gpointer data);
static gboolean select_more_arrow_pixmap_callback(GtkWidget *w, GdkEvent *ev,
                                                  gpointer data);
static gboolean quit_dialog_callback(void);

static void allied_chat_button_toggled(GtkToggleButton *button,
                                       gpointer user_data);**
  Called by the tileset code to set the font size that should be used to
  draw the city names and productions.
***********/
void set_city_names_font_sizes(int my_city_names_font_size,
			       int my_city_productions_font_size)
{
  /* This function may be called before the fonts are allocated.  So we
   * save the values for later. */
  city_names_font_size = my_city_names_font_size;
  city_productions_font_size = my_city_productions_font_size;
  if (city_names_style) {
    pango_font_description_set_size(city_names_style->font_desc,
                                    PANGO_SCALE * city_names_font_size);
  }
  if (city_productions_style) {
    pango_font_description_set_size(city_productions_style->font_desc,
                                    PANGO_SCALE * city_productions_font_size);
  }...
*********/
static void log_callback_utf8(enum log_level level, const char *message,
                              bool file_too)
{
  if (!file_too || level <= LOG_FATAL) {
    fc_fprintf(stderr, "%d: %s\n", level, message);
  }Called while in gtk_main() (which is all of the time)
 TIMER_INTERVAL is now set by real_timer_callback()
*********/
static gboolean timer_callback(gpointer data)
{
  double seconds = real_timer_callback();

  timer_id = g_timeout_add(seconds * 1000, timer_callback, NULL);
c_fprintf(stderr, _("This client has no special command line options\n\n"));

  /* TRANS: No full stop after the URL, could cause confusion. */
  fc_fprintf(stderr, _("Report bugs at %s\n"), BUG_URL...
*********/
static gboolean toplevel_focus(GtkWidget *w, GtkDirectionType arg)
{
  switch (arg) {
    case GTK_DIR_TAB_FORWARD:
    case GTK_DIR_TAB_BACKWARD:
      
      if (!GTK_WIDGET_CAN_FOCUS(w)) {
	return FALSE;
      }

      if (!gtk_widget_is_focus(w)) {
	gtk_widget_grab_focus(w);
	return TRUE;
      }
      break;

    default:
      break;
  }  When the chatline text view is resized, scroll it to the bottom. This
  prevents users from accidentally missing messages when the chatline
  gets scrolled up a small amount and stops scrolling down automatically.
*********/
static void main_message_area_size_allocate(GtkWidget *widget,
                                            GtkAllocation *allocation,
                                            gpointer data)
{
  static int old_width = 0, old_height = 0;
  if (allocation->width != old_width
      || allocation->height != old_height) {
    chatline_scroll_to_bottom(TRUE);
    old_width = allocation->width;
    old_height = allocation->height;
  }...
*********/
gboolean map_canvas_focus(void)
{
  gtk_window_present(GTK_WINDOW(toplevel));
  gtk_notebook_set_current_page(GTK_NOTEBOOK(top_notebook), 0);
  gtk_widget_grab_focus(map_canvas);
  return TRUE In GTK+ keyboard events are recursively propagated from the hierarchy
  parent down to its children. Sometimes this is not what we want.
  E.g. The inputline is active, the user presses the 's' key, we want it
  to be sent to the inputline, but because the main menu is further up
  the hierarchy, it wins and the inputline never gets anything!
  This function ensures an entry widget (like the inputline) always gets
  first dibs at handling a keyboard event.
*********/
static gboolean toplevel_handler(GtkWidget *w, GdkEventKey *ev, gpointer data)
{
  GtkWidget *focus;

  focus = gtk_window_get_focus(GTK_WINDOW(toplevel));
  if (focus) {
    if (GTK_IS_ENTRY(focus)
        || (GTK_IS_TEXT_VIEW(focus)
            && gtk_text_view_get_editable(GTK_TEXT_VIEW(focus)))) {
      /* Propagate event to currently focused entry widget. */
      if (gtk_widget_event(focus, (GdkEvent *) ev)) {
	/* Do not propagate event to our children. */
	return TRUE;
      }
    }
  }

  /* Continue propagating event to our children. */boolean key_press_map_canvas(GtkWidget *w, GdkEventKey *ev,
                                     gpointer data)
{
  if ((ev->state & GDK_SHIFT_MASK)) {
    switch (ev->keyval) {

    case GDK_Left:
      scroll_mapview(DIR8_WEST);
      return TRUE;

    case GDK_Right:
      scroll_mapview(DIR8_EAST);
      return TRUE;

    case GDK_Up:
      scroll_mapview(DIR8_NORTH);
      return TRUE;

    case GDK_Down:
      scroll_mapview(DIR8_SOUTH);
      return TRUE;

    case GDK_Home:
      key_center_capital();
      return TRUE;

    case GDK_Page_Up:
      g_signal_emit_by_name(main_message_area, "move_cursor",
	                          GTK_MOVEMENT_PAGES, -1, FALSE);
      return TRUE;

    case GDK_Page_Down:
      g_signal_emit_by_name(main_message_area, "move_cursor",
	                          GTK_MOVEMENT_PAGES, 1, FALSE);
      return TRUE;

    default:
      break;
    };
  }

  /* Return here if observer */
  if (client_is_observer()) {
    return FALSE;
  }

  fc_assert(MAX_NUM_BATTLEGROUPS == 4);

  if ((ev->state & GDK_CONTROL_MASK)) {
    switch (ev->keyval) {

    case GDK_F1:
      key_unit_assign_battlegroup(0, (ev->state & GDK_SHIFT_MASK));
      return TRUE;

    case GDK_F2:
      key_unit_assign_battlegroup(1, (ev->state & GDK_SHIFT_MASK));
      return TRUE;

    case GDK_F3:
      key_unit_assign_battlegroup(2, (ev->state & GDK_SHIFT_MASK));
      return TRUE;

    case GDK_F4:
      key_unit_assign_battlegroup(3, (ev->state & GDK_SHIFT_MASK));
      return TRUE;

    default:
      break;
    };
  } else if ((ev->state & GDK_SHIFT_MASK)) {
    switch (ev->keyval) {

    case GDK_F1:
      key_unit_select_battlegroup(0, FALSE);
      return TRUE;

    case GDK_F2:
      key_unit_select_battlegroup(1, FALSE);
      return TRUE;

    case GDK_F3:
      key_unit_select_battlegroup(2, FALSE);
      return TRUE;

    case GDK_F4:
      key_unit_select_battlegroup(3, FALSE);
      return TRUE;

    default:
      break;
    };
  }

  switch (ev->keyval) {

  case GDK_KP_Up:
  case GDK_KP_8:
  case GDK_Up:
  case GDK_8:
    key_unit_move(DIR8_NORTH);
    return TRUE;

  case GDK_KP_Page_Up:
  case GDK_KP_9:
  case GDK_Page_Up:
  case GDK_9:
    key_unit_move(DIR8_NORTHEAST);
    return TRUE;

  case GDK_KP_Right:
  case GDK_KP_6:
  case GDK_Right:
  case GDK_6:
    key_unit_move(DIR8_EAST);
    return TRUE;

  case GDK_KP_Page_Down:
  case GDK_KP_3:
  case GDK_Page_Down:
  case GDK_3:
    key_unit_move(DIR8_SOUTHEAST);
    return TRUE;

  case GDK_KP_Down:
  case GDK_KP_2:
  case GDK_Down:
  case GDK_2:
    key_unit_move(DIR8_SOUTH);
    return TRUE;

  case GDK_KP_End:
  case GDK_KP_1:
  case GDK_End:
  case GDK_1:
    key_unit_move(DIR8_SOUTHWEST);
    return TRUE;

  case GDK_KP_Left:
  case GDK_KP_4:
  case GDK_Left:
  case GDK_4:
    key_unit_move(DIR8_WEST);
    return TRUE;

  case GDK_KP_Home:
  case GDK_KP_7:
  case GDK_Home:
  case GDK_7:
    key_unit_move(DIR8_NORTHWEST);
    return TRUE;

  case GDK_KP_Begin:
  case GDK_KP_5: 
  case GDK_5:
    key_recall_previous_focus_unit(); 
    return TRUE;

  case GDK_Escape:
    key_cancel_action();
    return TRUE;

  case GDK_b:
    if (tiles_hilited_cities) {
      buy_production_in_selected_cities();
      return TRUE;
    }
    break;

  default:
    break;
  };
boolean toplevel_key_release_handler(GtkWidget *w, GdkEventKey *ev,
                                             gpointer data)
{
  /* inputline history code */
  if (!GTK_WIDGET_MAPPED(top_vbox) || inputline_has_focus()) {
    return FALSE;
  }

  if (editor_is_active()) {
    return handle_edit_key_release(ev);
  }
  Handle a keyboard key press made in the client's toplevel window.
*********/
static gboolean toplevel_key_press_handler(GtkWidget *w, GdkEventKey *ev,
                                           gpointer data)
{
  /* inputline history code */
  if (!GTK_WIDGET_MAPPED(top_vbox) || inputline_has_focus()) {
    return FALSE;
  }

  if (editor_is_active()) {
    return handle_edit_key_press(ev);
  }

  if ((ev->state & GDK_SHIFT_MASK)) {
    switch (ev->keyval) {

    case GDK_Return:
    case GDK_KP_Enter:
      key_end_turn();
      return TRUE;

    default:
      break;
    };
  } else {
  }

  switch (ev->keyval) {

  case GDK_apostrophe:
    /* FIXME: should find the correct window, even when detached, from any
     * other window; should scroll to the bottom automatically showing the
     * latest text from other players; MUST NOT make spurious text windows
     * at the bottom of other dialogs.
     */
    if (gui_gtk2_merge_notebooks) {
      gtk_notebook_set_current_page(GTK_NOTEBOOK(top_notebook), 1);
    } else {
      gtk_notebook_set_current_page(GTK_NOTEBOOK(bottom_notebook), 0);
    }
    inputline_grab_focus();
    return TRUE;

  default:
    break;
  };

  if (0 == gtk_notebook_get_current_page(GTK_NOTEBOOK(top_notebook))) {
    /* 0 means the map view is focused. */
    return key_press_map_canvas(w, ev, data);
  }

#if 0
  /* We are focused some other dialog, tab, or widget. */
  if ((ev->state & GDK_CONTROL_MASK)) {
  } else if ((ev->state & GDK_SHIFT_MASK)) {
  } else {
    switch (ev->keyval) {

    case GDK_F4:
      map_canvas_focus();
      return TRUE;

    default:
      break;
    };
  }
#endif
Mouse/touchpad scrolling over the mapview
*********/
static gboolean mouse_scroll_mapcanvas(GtkWidget *w, GdkEventScroll *ev)
{
  int scroll_x, scroll_y, xstep, ystep;

  if (!can_client_change_view()) {
    return FALSE;
  }

  get_mapview_scroll_pos(&scroll_x, &scroll_y);
  get_mapview_scroll_step(&xstep, &ystep);

  switch (ev->direction) {
    case GDK_SCROLL_UP:
      scroll_y -= ystep*2;
      break;
    case GDK_SCROLL_DOWN:
      scroll_y += ystep*2;
      break;
    case GDK_SCROLL_RIGHT:
      scroll_x += xstep*2;
      break;
    case GDK_SCROLL_LEFT:
      scroll_x -= xstep*2;
      break;
    default:
      return FALSE;
  };

  set_mapview_scroll_pos(scroll_x, scroll_y);

  // Emulating mouse move now
  if (!GTK_WIDGET_HAS_FOCUS(map_canvas)) {
    gtk_widget_grab_focus(map_canvas);
  }

  update_line(cur_x, cur_y);
  update_rect_at_mouse_pos();

  if (keyboardless_goto_button_down && hover_state == HOVER_NONE) {
    maybe_activate_keyboardless_goto(cur_x, cur_y);
  }

  control_mouse_cursor(canvas_pos_to_tile(cur_x, cur_y));

  return TRUEreattaches the detached widget when the user destroys it.
*********/
static void tearoff_destroy(GtkWidget *w, gpointer data)
{
  GtkWidget *p, *b, *box;

  box = GTK_WIDGET(data);
  p = g_object_get_data(G_OBJECT(w), "parent");
  b = g_object_get_data(G_OBJECT(w), "toggle");
  gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(b), FALSE);

  gtk_widget_hide(w);
  gtk_widget_reparent(box, ppropagates a keypress in a tearoff back to the toplevel window.
*********/
static gboolean propagate_keypress(GtkWidget *w, GdkEventKey *ev)
{
  gtk_widget_event(toplevel, (GdkEvent *)ev, gpointer data)
{
  GtkWidget *box = GTK_WIDGET(data);
  GtkWidget *w;

  if (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(b))) {
    w = gtk_window_new(GTK_WINDOW_TOPLEVEL);
    setup_dialog(w, toplevel);
    gtk_widget_set_name(w, "Freeciv"_signal_connect(w, "destroy", G_CALLBACK(tearoff_destroy), box);
    g_signal_connect(w, "key_press_event",
	G_CALLBACK(propagate_keypress), NULL);


    g_object_set_data(G_OBJECT(w), "parent", box->parent);
    g_object_set_data(G_OBJECT(w), "toggle", b);
    gtk_widget_reparent(box, w);
    gtk_widget_show(w);
  } else {
    gtk_widget_destroy(box->parent);
  }avbox;

  b = gtk_toggle_button_new();
  gtk_box_pack_start(GTK_BOX(ahbox), b, FALSE, FALSE, 0);
  g_signal_connect(b, "toggled", G_CALLBACK(tearoff_callback), ahbox Called to build the unit_below pixmap table.  This is the table on the
  left of the screen that shows all of the inactive units in the current
  tile.

  It may be called again if the tileset changes.
*********/
static void populate_unit_pixmap_table(void)
{
  int i, width;
  GtkWidget *table = unit_pixmap_table;

  /* get width of the overview window */
  width = (overview_canvas_store_width > GUI_GTK_OVERVIEW_MIN_XSIZE) ? overview_canvas_store_width
                                               : GUI_GTK_OVERVIEW_MIN_XSIZE;

  num_units_below = width / (int) tileset_tile_width(tileset);
  num_units_below = CLIP(1, num_units_below, MAX_NUM_UNITS_BELOW);

  gtk_table_resize(GTK_TABLE(table), 2, num_units_below);

  /* Note, we ref this and other widgets here so that we can unref them
   * in reset_unit_table. */
  unit_pixmap = gtk_pixcomm_new(tileset_unit_width(tileset), tileset_unit_height(tileset));
  gtk_widget_ref(unit_pixmap);
  gtk_pixcomm_clear(GTK_PIXCOMM(unit_pixmap));
  unit_pixmap_button = gtk_event_box_new();
  gtk_widget_ref(unit_pixmap_button_signal_connect(unit_pixmap_button, "button_press_event",
		   G_CALLBACK(select_unit_pixmap_callback), 
		   GINT_TO_POINTER(-1));

  if (!gui_gtk2_small_display_layout) {
    for (i = 0; i < num_units_below; i++) {
      unit_below_pixmap[i] = gtk_pixcomm_new(tileset_unit_width(tileset),
                                             tileset_unit_height(tileset));
      gtk_widget_ref(unit_below_pixmap[i]);
      unit_below_pixmap_button[i] = gtk_event_box_new();
      gtk_widget_ref(unit_below_pixmap_button[i]);
      gtk_container_add(GTK_CONTAINER(unit_below_pixmap_button[i]),
                        unit_below_pixmap[i]);
      g_signal_connect(unit_below_pixmap_button[i],
                       "button_press_event",
                       G_CALLBACK(select_unit_pixmap_callback),
                       GINT_TO_POINTER(i));

    i, i + 1, 1, 2);
      gtk_pixcomm_clear(GTK_PIXCOMM(unit_below_pixmap[i]));
    }
  }

  /* create arrow (popup for all units on the selected tile) */
  more_arrow_pixmap = gtk_image_new_from_pixbuf(
          sprite_get_pixbuf(get_arrow_sprite(tileset, ARROW_RIGHT)));
  gtk_widget_ref(more_arrow_pixmap);
  more_arrow_pixmap_button = gtk_event_box_new();
  gtk_widget_ref(more_arrow_pixmap_button);
  gtk_container_add(GTK_CONTAINER(more_arrow_pixmap_button),
                    more_arrow_pixmap);
  g_signal_connect(more_arrow_pixmap_button,
                   "button_press_event",
                   G_CALLBACK(select_more_arrow_pixmap_callback), NULL);

  if (!gui_gtk2_small_display_layout) {
    gtk_table_attach_defaults(GTK_TABLE(table), more_arrow_pixmap_button,
                              4, 5, 1, 2);
  } else {
    gtk_table_attach_defaults(GTK_TABLE(table), more_arrow_pixmap_button,
                              4, 5, 0, 1);
  }

  gtk_widget_show_all(table Called when the tileset is changed to reset the unit pixmap table.
*********/
void reset_unit_table(void)
{
  int i;

  if (unit_pixmap_button) {
    /* Unreference all of the widgets that we're about to reallocate, thus
     * avoiding a memory leak. Remove them from the container first, just
     * to be safe. Note, the widgets are ref'd in
     * populatate_unit_pixmap_table. */
    gtk_container_remove(GTK_CONTAINER(unit_pixmap_table),
                         unit_pixmap_button);
    gtk_widget_unref(unit_pixmap);
    gtk_widget_unref(unit_pixmap_button);
    if (!gui_gtk2_small_display_layout) {
      for (i = 0; i < num_units_below; i++) {
        gtk_container_remove(GTK_CONTAINER(unit_pixmap_table),
                             unit_below_pixmap_button[i]);
        gtk_widget_unref(unit_below_pixmap[i]);
        gtk_widget_unref(unit_below_pixmap_button[i]);
      }
    }
    gtk_container_remove(GTK_CONTAINER(unit_pixmap_table),
                         more_arrow_pixmap_button);
    gtk_widget_unref(more_arrow_pixmap);
    gtk_widget_unref(more_arrow_pixmap_button);
  }

  populate_unit_pixmap_table();

  /* We have to force a redraw of the units.  And we explicitly have
   * to force a redraw of the focus unit, which is normally only
   * redrawn when the focus changes. We also have to force the 'more'
   * arrow to go away, both by expicitly hiding it and telling it to
   * do so (this will be reset immediately afterwards if necessary,
   * but we have to make the *internal* state consistent). */
  gtk_widget_hide(more_arrow_pixmap_button);
  set_unit_icons_more_arrow(FALSE);
  if (get_num_units_in_focus() == 1) {
    set_unit_icon(-1, head_of_units_in_focus());
  } else {
    set_unit_icon(-1, NULL);
  }
  update_unit_pix_label(get_units_in_focus() Enable/Disable the game page menu bar.
*********/
void enable_menus(bool enable)
{
  if (enable) {
    main_menubar = setup_menus(toplevel);
    gtk_box_pack_start(GTK_BOX(top_vbox), main_menubar, FALSE, FALSE, 0);
    menus_init();
    gtk_widget_show_all(main_menubar);
  } else {
    gtk_widget_destroy(main_menubar);
  } Workaround for a crash that occurs when a button release event is
  emitted for a notebook with no pages. See PR#40743.
  FIXME: Remove this hack once gtk_notebook_button_release() in
  gtk/gtknotebook.c checks for NULL notebook->cur_page.
*********/
static gboolean right_notebook_button_release(GtkWidget *widget,
                                              GdkEventButton *event)
{
  if (event->type != GDK_BUTTON_RELEASE) {
    return FALSE;
  }

  if (!GTK_IS_NOTEBOOK(widget)
      || -1 == gtk_notebook_get_current_page(GTK_NOTEBOOK(widget))) {
    /* Make sure the default gtk handler
     * does NOT get called in this case. */
    return TRUE;
  }
page, *box, *ebox, *hbox, *sbox, *align, *label;
  GtkWidget *frame, *table, *table2, *paned, *hpaned, *sw, *text;
  GtkWidget *button, *view;
  int i;
  char buf[256];
  struct sprite *sprite;

  GtkWidget *notebook, *statusbar;

  message_buffer = gtk_text_buffer_new(NULL);


  notebook = gtk_notebook_new();

  /* stop mouse wheel notebook page switching. */
  g_signal_connect(notebook, "scroll_event",
		   G_CALLBACK(gtk_true), NULL);

  toplevel_tabs = notebook;
  gtk_notebook_set_show_tabs(GTK_NOTEBOOK(notebook), FALSE);
  gtk_notebook_set_show_border(GTK_NOTEBOOK(notebook), FALSE);
  box = gtk_vbox_new(FALSE, 4);
  gtk_container_add(GTK_CONTAINER(toplevel), box);
  gtk_box_pack_start(GTK_BOX(box), notebook, TRUE, TRUE, 0);
  statusbar = create_statusbar();
  gtk_box_pack_start(GTK_BOX(box), statusbar, FALSE, FALSE, 0);

  gtk_notebook_append_page(GTK_NOTEBOOK(notebook),
      create_main_page(), NULL);
  gtk_notebook_append_page(GTK_NOTEBOOK(notebook),
      create_start_page(), NULL);
  gtk_notebook_append_page(GTK_NOTEBOOK(notebook),
      create_scenario_page(), NULL);
  gtk_notebook_append_page(GTK_NOTEBOOK(notebook),
      create_load_page(), NULL);
  gtk_notebook_append_page(GTK_NOTEBOOK(notebook),
      create_network_page(), NULL);

  main_tips = gtk_tooltips_new();

  editgui_create_widgets();

  /* *** everything in the top *** */

  page = gtk_scrolled_window_new(NULL, NULL);
  gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(page),
                                 GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC);
  gtk_scrolled_window_set_shadow_type(GTK_SCROLLED_WINDOW(page),
                                      GTK_SHADOW_ETCHED_IN);
  gtk_notebook_append_page(GTK_NOTEBOOK(notebook), page, NULL);

  top_vbox = gtk_vbox_new(FALSE, 5);
  hbox = gtk_hbox_new(FALSE, 0);

  if (gui_gtk2_small_display_layout) {
    /* The window is divided into two horizontal panels: overview +
     * civinfo + unitinfo, main view + message window. */
    paned = gtk_hpaned_new();
    gtk_scrolled_window_add_with_viewport(GTK_SCROLLED_WINDOW(page),
                                          top_vbox);
    gtk_box_pack_end(GTK_BOX(top_vbox), hbox, TRUE, TRUE, 0);
    gtk_box_pack_end(GTK_BOX(hbox), paned, TRUE, TRUE, 0);
  } else {
    /* The window is divided into two vertical panes: overview +
     * + civinfo + unitinfo + main view, message window. */
    paned = gtk_vpaned_new();
    gtk_scrolled_window_add_with_viewport(GTK_SCROLLED_WINDOW(page), paned);
    gtk_paned_pack1(GTK_PANED(paned), top_vbox, TRUE, FALSE);
    gtk_box_pack_end(GTK_BOX(top_vbox), hbox, TRUE, TRUE, 0);
  }

#ifdef GGZ_GTK
  gtk_notebook_append_page(GTK_NOTEBOOK(notebook),
			   ggz_gtk_create_main_area(toplevel), NULL);
#endif  /* overview canvas */
  ahbox = detached_widget_new();
  gtk_box_pack_start(GTK_BOX(vbox), ahbox, FALSE, FALSE, 0);
  avbox = detached_widget_fill(ahbox);

  align = gtk_alignment_new(0.5, 0.5, 0.0, 0.0);

  overview_scrolled_window = gtk_scrolled_window_new(NULL, NULL);
  gtk_container_set_border_width(GTK_CONTAINER (overview_scrolled_window), 1);
  gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW (overview_scrolled_window),
                                    GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC);

  overview_canvas = gtk_drawing_area_new();
  gtk_widget_set_size_request(overview_canvas, overview_canvas_store_width,
		              overview_canvas_store_height);
  gtk_widget_set_size_request(overview_scrolled_window, overview_canvas_store_width,
		              overview_canvas_store_height);

  gtk_widget_add_events(overview_canvas, GDK_EXPOSURE_MASK
        			        |GDK_BUTTON_PRESS_MASK
				        |GDK_POINTER_MOTION_MASK);
  gtk_box_pack_start(GTK_BOX(avbox), overview_scrolled_window, FALSE, FALSE, 0);

  gtk_scrolled_window_add_with_viewport (
                      GTK_SCROLLED_WINDOW (overview_scrolled_window), 
                      align);
  gtk_container_add(GTK_CONTAINER(align), overview_canvas);
 
  g_signal_connect(overview_canvas, "expose_event",
        	   G_CALLBACK(overview_canvas_expose), NULL);

  g_signal_connect(overview_canvas, "motion_notify_event",
        	   G_CALLBACK(move_overviewcanvas), NULL);

  g_signal_connect(overview_canvas, "button_press_event",
        	   G_CALLBACK(butt_down_overviewcanvas), NULL);

  /* The rest */

  ahbox = detached_widget_new();
  gtk_box_pack_start(GTK_BOX(vbox), ahbox, TRUE, TRUE, 0);
  avbox = detached_widget_fill(ahbox);

  /* Info on player's civilization, when game is running. */
  frame = gtk_frame_new(""add_events(ebox, GDK_BUTTON_PRESS_MASK);
  g_signal_connect(ebox, "button_press_event",
                   G_CALLBACK(show_info_popup), NULL);
  gtk_box_pack_start(GTK_BOX(vbox), ebox, FALSE, FALSE, 0);

  label = gtk_label_new(NULL);
  gtk_misc_set_alignment(GTK_MISC(label), 0.0, 0.5);
  gtk_misc_set_padding(GTK_MISC(label), 2, 2);
  gtk_container_add(GTK_CONTAINER(ebox), label);
  main_label_info = label3, 10, TRUebox = gtk_event_box_new();
  gtk_table_attach_defaults(GTK_TABLE(table), ebox, 0, 10, 0, 1);
  econ_ebox = ebox;
  
  table2 = gtk_table_new(1, 10, TRUE);
  gtk_table_set_row_spacing(GTK_TABLE(table2), 0, 0);
  gtk_table_set_col_spacing(GTK_TABLE(table2), 0, 0);
  gtk_container_add(GTK_CONTAINER(ebox), table2);
  
  for (i = 0; i < 10; i++) {
    ebox = gtk_event_box_new();
    gtk_widget_add_events(ebox, GDK_BUTTON_PRESS_MASK);

    gtk_table_attach_defaults(GTK_TABLE(table2), ebox, i, i + 1, 0, 1);

    g_signal_connect(ebox, "button_press_event",
                     G_CALLBACK(taxrates_callback), GINT_TO_POINTER(i));

    sprite = i < 5 ? get_tax_sprite(tileset, O_SCIENCE) : get_tax_sprite(tileset, O_GOLD);
    econ_label[i] = gtk_image_new_from_pixbuf(sprite_get_pixbuf(sprite)
    = gtk_image_new_from_pixbuf(sprite_get_pixbuf(client_research_sprite()));
  sun_label
    = gtk_image_new_from_pixbuf(sprite_get_pixbuf(client_warming_sprite()));
  flake_label
    = gtk_image_new_from_pixbuf(sprite_get_pixbuf(client_cooling_sprite()));
  government_label
    = gtk_image_new_from_pixbuf(sprite_get_pixbuf
				(client_government_sprite()));

  for (i = 0; i < 4; i++) {
    GtkWidget *w;
    
    ebox = gtk_event_box_new();

    switch (i) {
    case 0:
      w = bulb_label;
      bulb_ebox = ebox;
      break;
    case 1:
      w = sun_label;
      sun_ebox = ebox;
      break;
    case 2:
      w = flake_label;
      flake_ebox = ebox; 
      break;
    default:
    case 3:
      w = government_label;
      government_ebox = ebox;
      break;
    }

    gtk_misc_set_alignment(GTK_MISC(w), 0.0, 0.0);
    gtk_misc_set_padding(GTK_MISC(w), 0, 0);
    gtk_container_add(GTK_CONTAINER(ebox), w);
    gtk_table_attach_defaults(GTK_TABLE(table), ebox, i, i + 1, 1, 2);
  }

  timeout_label = gtk_label_new("");

  frame = gtk_frame_new(NULL);
  gtk_table_attach_defaults(GTK_TABLE(table), frame, 4, 10, 1, 2);
  gtk_container_add(GTK_CONTAINER(frame), timeout_label);


  /* turn done */
  turn_done_button = gtk_button_new_with_label(_("Turn Done"));

  gtk_table_attach_defaults(GTK_TABLE(table), turn_done_button, 0, 10, 2, 3);

  g_signal_connect(turn_done_button, "clicked",
                   G_CALLBACK(end_turn_callback), NULL);

  fc_snprintf(buf, sizeof(buf), "%s:\n%s",
              _("Turn Done"), _("Shift+Return"));
  gtk_tooltips_set_tip(main_tips, turn_done_button, buf, "");

  /* Selected unit status */

  unit_info_box = gtk_vbox_new(FALSE, 0);
  gtk_box_pack_start(GTK_BOX(avbox), unit_info_box, FALSE, FALSE, 0);

  /* In edit mode the unit_info_box widget is replaced by the
   * editinfobox, so we need to add a ref here so that it is
   * not destroyed when removed from its container.
   * See editinfobox_refresh(). */
  g_object_ref(unit_info_box);

  unit_info_frame = gtk_frame_new("");
  gtk_box_pack_start(GTK_BOX(unit_info_box), unit_info_frame, FALSE, FALSE, 0);

  sw = gtk_scrolled_window_new(NULL, NULL);
  gtk_scrolled_window_set_shadow_type(GTK_SCROLLED_WINDOW(sw),
                                      GTK_SHADOW_OUT);
  gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(sw),
                                 GTK_POLICY_AUTOMATIC, GTK_POLICY_NEVER);
  gtk_container_add(GTK_CONTAINER(unit_info_frame), sw);

  label = gtk_label_new(NULL);
  gtk_misc_set_alignment(GTK_MISC(label), 0.0, 0.5);
  gtk_misc_set_padding(GTK_MISC(label), 2, 2);
  gtk_scrolled_window_add_with_viewport(GTK_SCROLLED_WINDOW(sw), label);
  unit_info_label = label;

  box = gtk_hbox_new(FALSE,0);
  gtk_box_pack_start(GTK_BOX(unit_info_box), box, FALSE, FALSE, 0);

  table = gtk_table_new(0, 0_table = table;

  /* Map canvas, editor toolbar, and scrollbars */

  /* The top notebook containing the map view and dialogs. */

  top_notebook = gtk_notebook_new();  
  gtk_notebook_set_tab_pos(GTK_NOTEBOOK(top_notebook), GTK_POS_BOTTOM);
  gtk_notebook_set_scrollable(GTK_NOTEBOOK(top_notebook), TRUE);

  if (gui_gtk2_small_display_layout) {
    gtk_paned_pack1(GTK_PANED(paned), top_notebook, TRUE, TRUE);
  } else {
    gtk_box_pack_start(GTK_BOX(hbox), top_notebook, TRUE, TRUE, 0);
  }

  map_widget = gtk_table_new(2, 2, FALSE);

  vbox = gtk_vbox_new(FALSE, 0);
  gtk_box_pack_start(GTK_BOX(vbox), map_widget, TRUE, TRUE, 0);

  gtk_box_pack_start(GTK_BOX(vbox),
                     editgui_get_editbar()->widget,
                     FALSE, FALSE, 4);

  label = gtk_label_new(_("View"));
  gtk_notebook_append_page(GTK_NOTEBOOK(top_notebook), vbox, label);

  frame = gtk_frame_new(NULL);
  gtk_table_attach(GTK_TABLE(map_widget  gtk_widget_set_size_request(map_canvas, 300, 300);
  GTK_WIDGET_SET_FLAGS(map_canvas, GTK_CAN_FOCUS);

  for (i = 0; i < 5; i++) {
    gtk_widget_modify_bg(GTK_WIDGET(overview_canvas), i,
			 &get_color(tileset, COLOR_OVERVIEW_UNKNOWN)->color);
    gtk_widget_modify_bg(GTK_WIDGET(map_canvas), i,
			 &get_color(tileset, COLOR_MAPVIEW_UNKNOWN)->color);
  }

  gtk_widget_addBUTTON_RELEASE
                                   |GDK_SCROLL_MASK);
map_widgetmap_widget_signal_connect(map_canvas, "expose_event",
                   G_CALLBACK(map_canvas_expose), NULL);

  g_signal_connect(map_canvas, "configure_event",
                   G_CALLBACK(map_canvas_configure), NULL);

  g_signal_connect(map_canvas, "motion_notify_event",
                   G_CALLBACK(move_mapcanvas), NULL);

  g_signal_connect(toplevel, "enter_notify_event",
                   G_CALLBACK(leave_mapcanvas), NULL);

  g_signal_connect(map_canvas, "button_press_event",
                   G_CALLBACK(butt_down_mapcanvas), NULL);

  g_signal_connect(map_canvas, "button_release_event",
                   G_CALLBACK(butt_release_mapcanvas), NULL);

  g_signal_connect(map_canvas, "scroll_event",
                   G_CALLBACK(mouse_scroll_mapcanvas), NULL);

  g_signal_connect(toplevel, "key_press_event",
                   G_CALLBACK(toplevel_key_press_handler), NULL);

  g_signal_connect(toplevel, "key_release_event",
                   G_CALLBACK(toplevel_key_release_handler), NULL);

  /* *** The message window -- this is a detachable widget *** */

  if (gui_gtk2_merge_notebooks) {
    bottom_hpaned = hpaned = paned;
    bottom_notebook = top_notebook;
  } else {
    sbox = detached_widget_new();
    gtk_paned_pack2(GTK_PANED(paned), sbox, TRUE, TRUE);
    avbox = detached_widget_fill(sbox);

    vbox = gtk_vbox_new(FALSE, 0);
    if (ingame_votebar == NULL) {
      ingame_votebar = voteinfo_bar_new();
    }
    gtk_box_pack_start(GTK_BOX(vbox), ingame_votebar, FALSE, FALSE, 2);
    gtk_box_pack_start(GTK_BOX(avbox), vbox, TRUE, TRUE, 0);

    if (gui_gtk2_small_display_layout) {
      hpaned = gtk_vpaned_new();
    } else {
      hpaned = gtk_hpaned_new();
    }
    gtk_box_pack_start(GTK_BOX(vbox), hpaned, TRUE, TRUE, 4);
    bottom_hpaned = hpaned;

    bottom_notebook = gtk_notebook_new();
    gtk_notebook_set_tab_pos(GTK_NOTEBOOK(bottom_notebook), GTK_POS_TOP);
    gtk_notebook_set_scrollable(GTK_NOTEBOOK(bottom_notebook), TRUE);
    gtk_paned_pack1(GTK_PANED(hpaned), bottom_notebook, TRUE, TRUE);
  }

  right_notebook = gtk_notebook_new();
  g_object_ref(right_notebook);
  gtk_notebook_set_tab_pos(GTK_NOTEBOOK(right_notebook), GTK_POS_TOP);
  gtk_notebook_set_scrollable(GTK_NOTEBOOK(right_notebook), TRUE);
  g_signal_connect(right_notebook, "button-release-event",
                   G_CALLBACK(right_notebook_button_release), NULL);
  if (gui_gtk2_split_bottom_notebook) {
    gtk_paned_pack2(GTK_PANED(hpaned), right_notebook, TRUE, TRUE);
  }

  vbox = gtk_vbox_new(FALSE, 0);

  sw = gtk_scrolled_window_new(NULL, NULL);
  gtk_scrolled_window_set_shadow_type(GTK_SCROLLED_WINDOW(sw),
				      GTK_SHADOW_ETCHED_IN);
  gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(sw), GTK_POLICY_AUTOMATIC,
  				 GTK_POLICY_ALWAYS);
  gtk_box_pack_start(GTK_BOX(vbox), sw, TRUE, TRUE, 0);

  label = gtk_label_new(_("Chat"));
  gtk_notebook_append_page(GTK_NOTEBOOK(bottom_notebook), vbox, label);

  text = gtk_text_view_new_with_buffer(message_buffer);
  set_message_buffer_view_link_handlers(text);
  gtk_text_view_set_editable(GTK_TEXT_VIEW(text), FALSE);
  gtk_container_add(GTK_CONTAINER(sw), text);
  g_signal_connect(text, "size-allocate",
                   G_CALLBACK(main_message_area_size_allocate), NULL);

  gtk_widget_set_name(text, "chatline");

  gtk_text_view_set_wrap_mode(GTK_TEXT_VIEW(text), GTK_WRAP_WORD);
  gtk_widget_realize(text);
  gtk_text_view_set_left_margin(GTK_TEXT_VIEW(text), 5);

  main_message_area = GTK_TEXT_VIEW(text);

  chat_welcome_message();

  /* the chat line */
  view = inputline_toolkit_view_new();
  gtk_box_pack_start(GTK_BOX(vbox), view, FALSE, FALSE, 3);

  button = gtk_check_button_new_with_label(_("Allies Only"));
  gtk_button_set_focus_on_click(GTK_BUTTON(button), FALSE);
  gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(button),
                               gui_gtk2_allied_chat_only);
  g_signal_connect(button, "toggled",
                   G_CALLBACK(allied_chat_button_toggled), NULL);
  inputline_toolkit_view_append_button(view, button);
  allied_chat_toggle_button = button;

  button = gtk_button_new_with_label(_("Clear links"));
  g_signal_connect(button, "clicked",
                   G_CALLBACK(link_marks_clear_all), NULL);
  inputline_toolkit_view_append_button(view, button);

  /* Other things to take care of */

  gtk_widget_show_all(gtk_bin_get_child(GTK_BIN(toplevel)));

  if (gui_gtk2_enable_tabs) {
    popup_meswin_dialog(FALSE);
  }

  gtk_notebook_set_current_page(GTK_NOTEBOOK(top_notebook), 0);
  gtk_notebook_set_current_page(GTK_NOTEBOOK(bottom_notebook), 0);

  if (!gui_gtk2_map_scrollbars) {
    gtk_widget_hide(map_horizontal_scrollbar);
    gtk_widget_hide(map_vertical_scrollbar);
  }
}

#ifdef GGZ_GTK
******
  Callback function that's called by the library when a connection is
  established (or lost) to the GGZ server.  The server parameter gives
  the server (or NULL).
***********/
static void ggz_connected(GGZServer *server)
{
  in_ggz = (server != NULL);
  set_client_page(in_ggz ? PAGE_GGZ : PAGE_MAIN**
  Callback function that's called by the library when we launch a game.  This
  means we now have a connection to a freeciv server so handling can be given
  back to the regular freeciv code.
***********/
static void ggz_game_launched(void)
{
  ggz_beg**
  Callback function that's invoked when GGZ is exited.
***********/
static void ggz_closed(void)
{
  set_client_page(PAGE_MAIN);
}
#endifcalled from main().
*********/
void ui_init(void)
{
#ifdef GGZ_GTK
  /* Engine and version match what is provided in civclient.dsc.in and
   * civserver.dsc.in. */
  ggz_gtk_initialize(FALSE,
		     ggz_connected, ggz_game_launched, ggz_closed,
		     "Freeciv", NETWORK_CAPSTRING_MANDATORY, "Pubserver");
#endif

  log_set_callback(log_callback_utf8 Entry point for whole freeciv client program.
*********/
int main(int argc, char **argv)
{
  return client_main(argc, argv Called from client_const gchar *home;
  guint sig;

  parse_options(argc, argv);

  /* the locale has already been set in init_nls() and the Win32-specific
   * locale logic in gtk_init() causes problems with zh_CN (see PR#39475) */
  gtk_disable_set = g_get_home_dir();
  if (home) {
    gchar *str;

    str = g_build_filename(home, ".freeciv.rc-2.0", NULL);
    gtk_rc_parse(str);
    g_free(str);
  }

  toplevel = gtk_window_new(GTK_WINDOW_TOPLEVEL);
  g_signal_connect(toplevel, "key_press_event",
                   G_CALLBACK(toplevel_handler), NULL);

  gtk_window_set_role(GTK_WINDOW(toplevel), "toplevel"if (fullscreen_mode) {
    gtk_window_fullscreen(GTK_WINDOW(toplevel));
  }
  
  gtk_window_set_title(GTK_WINDOW (toplevel), _("Freeciv"));

  g_signal_connect(toplevel, "delete_event",
      G_CALLBACK(quit_dialog_callback), NULL);

  /* Disable GTK+ cursor key focus movement */
  sig = g_signal_lookup("focus", GTK_TYPE_WIDGET);
  g_signal_handlers_disconnect_matched(toplevel, G_SIGNAL_MATCH_ID, sig,
				       0, 0, 0, 0);
  g_signal_connect(toplevel, "focus", G_CALLBACK(toplevel_focus), NULL);


  display_color_type = get_visual();

  civ_gc = gdk_gc_new(root_window);

  options_iterate(client_optset, poption) {
    if (OT_FONT == option_type(poption)) {
      /* Force to call the appropriated callback. */
      option_changed(poption);
    }
  } options_iterate_end;

  if (NULL == city_names_style) {
    city_names_style = gtk_style_new();
    log_error("city_names_style should have been set by options.");
  }
  if (NULL == city_productions_style) {
    city_productions_style = gtk_style_new();
    log_error("city_productions_style should have been set by options.");
  }
  if (NULL == reqtree_text_style) {
    reqtree_text_style = gtk_style_new();
    log_error("reqtree_text_style should have been set by options.");
  }

  set_city_names_font_sizes(city_names_font_size, city_productions_font_size);

  fill_bg_gc = gdk_gc_new(root_window);

  /* for isometric view. always create. the tileset can change at run time. */
  thin_line_gc = gdk_gc_new(root_window);
  thick_line_gc = gdk_gc_new(root_window);
  border_line_gc = gdk_gc_new(root_window);
  gdk_gc_set_line_attributes(thin_line_gc, 1,
			     GDK_LINE_SOLID,
			     GDK_CAP_NOT_LAST,
			     GDK_JOIN_MITER);
  gdk_gc_set_line_attributes(thick_line_gc, 2,
			     GDK_LINE_SOLID,
			     GDK_CAP_NOT_LAST,
			     GDK_JOIN_MITER);
  gdk_gc_set_line_attributes(border_line_gc, BORDER_WIDTH,
			     GDK_LINE_ON_OFF_DASH,
			     GDK_CAP_NOT_LAST,
			     GDK_JOIN_MITER);

  fill_tile_gc = gdk_gc_new(root_window);
  gdk_gc_set_fill(fill_tile_gc, GDK_STIPPLED);

  {
    char d1[] = {0x03, 0x0c, 0x03, 0x0c};
    char d2[] = {0x08, 0x02, 0x08, 0x02};
   selection_gc = gdk_gc_new(root_window);
  gdk_gc_set_function(selection_gc, GDK_XOR);

  tileset_init(tileset);
  tileset_load_tiles(tileset);

  /* keep the icon of the executable on Windows (see PR#36491) */
#ifndef WIN32_NATIVE
  /* Only call this after tileset_load_tiles is called. */
  gtk_window_set_icon(GTK_WINDOW(toplevel),
		sprite_get_pixbuf(get_icon_sprite(tileset, ICON_FREECIV)));
#endif

  setup_widgets();
  load_cursors();
  cma_fe_init();
  diplomacy_dialog_init();
  happiness_dialog_init();
  intel_dialog_init();
  spaceship_dialog_init();
  chatline_init();
  init_mapcanvas_and_overview();

  tileset_use_prefered_theme(tileset);

  gtk_widget_show(toplevel);

  /* assumes toplevel showing */
  set_client_state(C_S_DISCONNECTED);
  
  /* assumes client_state is set */
  timer_id = g_timeout_add(TIMER_INTERVAL, timer_callback, NULL);

  gtk_main();

  spaceship_dialog_done();
  intel_dialog_done();
  happiness_dialog_done();
  diplomacy_dialog_done();
  cma_fe_done();
  tileset_free_tiles(tileset Do any necessary UI-specific cleanup
*********/
void ui_exit()
{
 Return our GUI type
*********/
enum gui_type get_gui_type(void)
{
  return GUI_GTK2Update the connected users list at pregame state.
*********/
void real_update_conn_list_dialog(void)
{
  if (client_has_player()) {
    char *text;

    if (client_player()->is_ready) {
      text = _("Not _ready");
    } else {
      int num_unready = 0;

      players_iterate(pplayer) {
        if (!pplayer->ai_controlled && !pplayer->is_ready) {
	  num_unready++;
	}
      } players_iterate_end;

      if (num_unready > 1) {
	text = _("_Ready");
      } else {
	/* We are the last unready player so clicking here will
	 * immediately start the game. */
	text = _("_Start");
      }
    }

    gtk_stockbutton_set_label(ready_button, text);
  } else {
    gtk_stockbutton_set_label(ready_button, _("_Start"));
  }

  /* Sensitive only if client can control player */
  gtk_widget_set_sensitive(ready_button, can_client_control());

  if (!client_has_player()) {
    /* Nation button will attach to player */
    gtk_stockbutton_set_label(nation_button, _("_Take Player"));
    gtk_widget_set_sensitive(nation_button, TRUE);
  } else {
    /* Nation button will go to Nation selection */
    gtk_stockbutton_set_label(nation_button, _("Pick _Nation"));

    /* Sensitive iff client is controlling a player. */
    gtk_widget_set_sensitive(nation_button, game.info.is_new_game
                             && can_client_control());
  }

  if (!client_is_observer()) {
    gtk_stockbutton_set_label(take_button, _("_Observe"));
  } else {
    gtk_stockbutton_set_label(take_button, _("Do not _observe"));
  }

  if (connection_list_view != NULL) {
    GObject *view;
    GtkTreeViewColumn *col;
    bool visible;

    view = G_OBJECT(connection_list_view);
    visible = (with_ggz || in_ggz);

    col = g_object_get_data(view, "record_col");
    if (col != NULL) {
      gtk_tree_view_column_set_visible(col, visible);
    }
    col = g_object_get_data(view, "rating_col");
    if (col != NULL) {
      gtk_tree_view_column_set_visible(col, visible);
    }
  }

  if (client_state() == C_S_PREPARING
      && get_client_page() == PAGE_START
      && connection_list_store != NULL) {
    GtkTreeStore *store;
    GtkTreeIter iter, parent;
    GdkPixbuf *pixbuf;
    bool is_ready;
    const char *nation, *plr_name, *team;
    char user_name[MAX_LEN_NAME + 8], rating_text[128], record_text[128];
    int rating, wins, losses, ties, forfeits;
    enum cmdlevel_id access_level;
    int conn_id;

    /* Clear the old list. */
    store = connection_list_store;
    gtk_tree_store_clear(store);

    /* Insert players into the connection list. */
    players_iterate(pplayer) {
      conn_id = -1;
      access_level = ALLOW_NONE;
      pixbuf = pplayer->nation ? get_flag(pplayer->nation) : NULL;;

      conn_list_iterate(pplayer->connections, pconn) {
        if (pconn->playing == pplayer && !pconn->observer) {
          conn_id = pconn->id;
          access_level = pconn->access_level;
          break;
        }
      } conn_list_iterate_end;

      if (pplayer->ai_controlled && !pplayer->was_created
          && !pplayer->is_connected) {
        /* TRANS: "<Novice AI>" */
        fc_snprintf(user_name, sizeof(user_name), _("<%s AI>"),
                    ai_level_name(pplayer->ai_common.skill_level));
      } else {
        sz_strlcpy(user_name, pplayer->username);
        if (access_level > ALLOW_BASIC) {
          sz_strlcat(user_name, "*");
        }
      }

      is_ready = pplayer->ai_controlled ? TRUE : pplayer->is_ready;

      if (pplayer->nation == NO_NATION_SELECTED) {
	nation = _("Random");
        if (pplayer->was_created) {
          plr_name = player_name(pplayer);
        } else {
          plr_name = "";
        }
      } else {
	nation = nation_adjective_for_player(pplayer);
	plr_name = player_name(pplayer);
      }

      team = pplayer->team ? team_name_translation(pplayer->team) : "";

      rating_text[0] = '\0';
      if ((in_ggz || with_ggz)
          && !pplayer->ai_controlled
          && user_get_rating(pplayer->username, &rating)) {
        fc_snprintf(rating_text, sizeof(rating_text), "%d", rating);
      }

      record_text[0] = '\0';
      if ((in_ggz || with_ggz)
          && !pplayer->ai_controlled
          && user_get_record(pplayer->username,
                             &wins, &losses, &ties, &forfeits)) {
        if (forfeits == 0 && ties == 0) {
          fc_snprintf(record_text, sizeof(record_text), "%d-%d",
                      wins, losses);
        } else if (forfeits == 0) {
          fc_snprintf(record_text, sizeof(record_text), "%d-%d-%d",
                      wins, losses, ties);
        } else {
          fc_snprintf(record_text, sizeof(record_text), "%d-%d-%d-%d",
                      wins, losses, ties, forfeits);
        }
      }

      gtk_tree_store_append(store, &iter, NULL);
      gtk_tree_store_set(store, &iter, 
                         CL_COL_PLAYER_NUMBER, player_number(pplayer),
                         CL_COL_USER_NAME, user_name,
                         CL_COL_READY_STATE, is_ready,
                         CL_COL_PLAYER_NAME, plr_name,
			 CL_COL_FLAG, pixbuf,
                         CL_COL_NATION, nation,
                         CL_COL_TEAM, team,
                         CL_COL_GGZ_RECORD, record_text,
                         CL_COL_GGZ_RATING, rating_text,
                         CL_COL_CONN_ID, conn_id, -1);
      parent = iter;

      /* Insert observers of this player as child nodes. */
      conn_list_iterate(pplayer->connections, pconn) {
        if (pconn->id == conn_id) {
          continue;
        }
        gtk_tree_store_append(store, &iter, &parent);
        gtk_tree_store_set(store, &iter,
                           CL_COL_PLAYER_NUMBER, -1,
                           CL_COL_USER_NAME, pconn->username,
                           CL_COL_TEAM, _("Observer"),
                           CL_COL_CONN_ID, pconn->id, -1);
      } conn_list_iterate_end;

      if (pixbuf) {
	g_object_unref(pixbuf);
      }
    } players_iterate_end;

    /* Finally, insert global observers and detached connections. */
    conn_list_iterate(game.est_connections, pconn) {
      if (pconn->playing != NULL) {
	continue; /* Already listed above. */
      }
      team = pconn->observer ? _("Observer") : _("Detached");
      gtk_tree_store_append(store, &iter, NULL);
      gtk_tree_store_set(store, &iter,
			 CL_COL_PLAYER_NUMBER, -1,
			 CL_COL_USER_NAME, pconn->username,
			 CL_COL_TEAM, team,
			 CL_COL_CONN_ID, pconn->id, -1);
    } conn_list_iterate_end;

    if (connection_list_view != NULL) {
      GtkTreeView *view = connection_list_view;
      gtk_tree_view_expand_all(view);
    }
  }
  fc_assert_ret(idx >= -1 && idx < num_units_below);

  if (idx == -1) {
    w = unit_pixmap;
    unit_id_top = punit ? punit->id : 0;
  } else {
    w = unit_below_pixmap[idx];
    unit_ids[idx] = punit ? punit->id : 0;
  }

  if (!w) {
    return;
  }

  gtk_pixcomm_freeze(GTK_PIXCOMM(w));

  if (punit) {);
  }
  
  gtk_pixcomm_thaw(GTK_PIXCOMM(w)bool onoff)
{
  static bool showing = FALSE;

  if (!more_arrow_pixmap_button) {
    return;
  }

  if (onoff && !showing) {
    gtk_widget_show(more_arrow_pixmap_button);
    showing = TRUE;
  }
  else if(!onoff && showing) {
    gtk_widget_hide(more_arrow_pixmap_button);
    showing = FALSE;
  }gboolean{
    punit = game_find_unit_by_number(unit_id_top);
    if (punit && unit_is_in_focus(punit)) {
      /* Clicking on the currently selected unit will center it. */
      center_tile_mapcanvas(punit->tile);
    }
    return TRUE;
  }

  if (unit_ids[i] == 0) /* no unit displayed at this place */
    return TRUE;

  punit = game_find_unit_by_number(unit_ids[i]);
  if (NULL != punit && unit_owner(punit) == client.conn.playing) {
    /* Unit shouldn't be NULL but may be owned by an ally. */
    set_unit_focus(punit);
  }

  return TRUEgboolean select_more_arrow_pixmap_callback(GtkWidget *w, GdkEvent *ev,
                                                  gpointer data)
{
  struct unit *punit = game_find_unit_by_number(unit_id_top);

  if (punit) {
    popup_unit_select_dialog(punit->tile);
  }

  return TRUE...
*********/
static gboolean show_info_button_release(GtkWidget *w, GdkEventButton *ev, gpointer databoolean show_info_popup(GtkWidget *w, GdkEventButton *ev, gpointer data)
{
  if(ev->button == 1) {
    GtkWidget *p;

    p = gtk_window_new(GTK_WINDOW_POPUP);
    gtk_widget_set_app_paintable(p, TRUE);
    gtk_container_set_border_width(GTK_CONTAINER(p), 4);
    gtk_window_set_position(GTK_WINDOW(p), GTK_WIN_POS_MOUSE);

    gtk_widget_new(GTK_TYPE_LABEL, "GtkWidget::parent", p,
		   "GtkLabel::label", get_info_label_text_popup(),
				   "GtkWidget::visible", TRUE,
        			   NULL);
    gtk_widget_show(p);
_signal_connect_after(p, "button_release_event",
                           G_CALLBACK  Callback for when the GGZ socket has data pending.
*********/
static void get_ggz_input(gpointer data, gint fid, GdkInputCondition condition)
{
  input_from_ggz(fid...
*********/
static void set_wait_for_writable_socket(struct connection *pc,
					 bool socket_writable)
{
  static bool previous_state = FALSE;

  fc_assert_ret(pc == &client.conn);

  if (previous_state == socket_writable)
    return;

  log_debug("set_wait_for_writable_socket(%d)", socket_writable);
  gtk_input_remove(input_id);
  input_id = gtk_input_add_full(client.conn.sock, GDK_INPUT_READ
				| (socket_writable ? GDK_INPUT_WRITE : 0)
				| GDK_INPUT_EXCEPTION,
				get_net_input, NULL, NULLinput_id = gtk_input_add_full(sock, GDK_INPUT_READ | GDK_INPUT_EXCEPTION,
				get_net_input, NULL, NULL, NULL);
  client.contk_input_remove(input_id);
  gdk_window_set_cursor(root_window, NULL Called to monitor a GGZ socket.
*********/
void add_ggz_input(int sock)
{
  ggz_input_id = gtk_input_add_full(sock, GDK_INPUT_READ, get_ggz_input,
				    NULL, NULL, NULL Called on disconnection to remove monitoring on the GGZ socket.  Only
  call this if we're actually in GGZ mode.
*********/
void remove_ggz_input(void)
{
  gtk_input_remove(ggz_input_id
  This is the response callback for the dialog with the message:
  Are you sure you want to quit?
/
static void quit_dialog_response(GtkWidget *dialog, gint response)
{
  gtk_widget_destroy(dialog);
  if (response == GTK_RESPONSE_YES) {
    client_exit();
  }
  Popups the dialog with the message:
  Are you sure you want to quit?
/
void popup_quit_dialog(void)
{
  static GtkWidget *dialog;

  if (!dialog) {
    dialog = gtk_message_dialog_new(NULL,
	0,
	GTK_MESSAGE_WARNING,
	GTK_BUTTONS_YES_NO,
	_("Are you sure you want to quit?"));
    setup_dialog(dialog, toplevel);

    gtk_window_set_position(GTK_WINDOW(dialog), GTK_WIN_POS_MOUSE);

    g_signal_connect(dialog, "response", 
	G_CALLBACK(quit_dialog_response), NULL);
    g_signal_connect(dialog, "destroy",
	G_CALLBACK(gtk_widget_destroyed), &dialog);
  }

  gtk_window_present(GTK_WINDOW(dialog)
  Popups the quit dialog.
/
static gboolean quit_dialog_callback(void)
{
  popup_quit_dialog();
  /* Stop emission of event. */
  return TRUE;
}

struct callback {
  void (*callback)(void *data);
  void *data;
};**
  A wrapper for the callback called through add_idle_callback.
***********/
static gint idle_callback_wrapper(gpointer data)
{
  struct callback *cb = data;

  (cb->callback)(cb->data);
  free(cb);
  return 0**
  Enqueue a callback to be called during an idle moment.  The 'callback'
  function should be called sometimes soon, and passed the 'data' pointer
  as its data.
***********/
void add_idle_callback(void (callback)(void *), void *data)
{
  struct callback *cb = fc_malloc(sizeof(*cb));

  cb->callback = callback;
  cb->data = data;
  gtk_idle_add(idle_callback_wrapper, cb**
  Option callback for the 'gui_gtk2_split_bottom_notebook' option.
***********/
static void split_bottom_notebook_callback(struct option *poption)
{
  popdown_meswin_dialog();
  if (option_bool_get(poption)) {
    gtk_paned_pack2(GTK_PANED(bottom_hpaned), right_notebook, TRUE, TRUE);
    gtk_widget_show_all(right_notebook);
  } else {
    gtk_container_remove(GTK_CONTAINER(bottom_hpaned), right_notebook);
  }
  popup_meswin_dialog(FALSE**
  Option callback for the 'gui_gtk2_allied_chat_only' option.
  This updates the state of the associated toggle button.
***********/
static void allied_chat_only_callback(struct option *poption)
{
  GtkWidget *button;

  button = allied_chat_toggle_button;
  fc_assert_ret(button != NULL);
  fc_assert_ret(GTK_IS_TOGGLE_BUTTON(button));

  gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(button),
                               option_bool_get(poption)**
  Change the city names font.
***********/
static void apply_city_names_font(struct option *poption)
{
  gui_update_font_full(option_font_target(poption),
                       option_font_get(poption),
                       &city_names_style);
  update_city_descriptions**
  Change the city productions font.
***********/
static void apply_city_productions_font(struct option *poption)
{
  gui_update_font_full(option_font_target(poption),
                       option_font_get(poption),
                       &city_productions_style);
  update_city_descriptions**
  Change the city productions font.
***********/
static void apply_reqtree_text_font(struct option *poption)
{
  gui_update_font_full(option_font_target(poption),
                       option_font_get(poption),
                       &reqtree_text_style);
  science_dialog_update**
  Extra initializers for client options.  Here we make set the callback
  for the specific gui-gtk-2.0 options.
***********/
void gui_options_extra_init(void)
{

  struct option *poption;

#define option_var_set_callback(var, callback)                              \
  if ((poption = optset_option_by_name(client_optset, #var))) {             \
    option_set_changed_callback(poption, callback);                         \
  } else {                                                                  \
    log_error("Didn't find option %s!", #var);                              \
  }

  option_var_set_callback(gui_gtk2_allied_chat_only,
                          allied_chat_only_callback);
  option_var_set_callback(gui_gtk2_split_bottom_notebook,
                          split_bottom_notebook_callback);

  option_var_set_callback(gui_gtk2_font_city_names,
                          apply_city_names_font);
  option_var_set_callback(gui_gtk2_font_city_productions,
                          apply_city_productions_font);
  option_var_set_callback(gui_gtk2_font_reqtree_text,
                          apply_reqtree_text_font);
#undef option_var_set_callback Set the chatline buttons to reflect the state of the game and current
  client options. This function should be called on game start.
*********/
void refresh_chat_buttons(void)
{
  GtkWidget *button;

  button = allied_chat_toggle_button;
  fc_assert_ret(button != NULL);
  fc_assert_ret(GTK_IS_TOGGLE_BUTTON(button));

  /* Hide the "Allies Only" button for local games. */
  if (is_server_running()) {
    gtk_widget_hide(button);
  } else {
    gtk_widget_show(button);
    gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(button),
                                 gui_gtk2_allied_chat_only);
  } Handle a toggle of the "Allies Only" chat button.
*********/
static void allied_chat_button_toggled(GtkToggleButton *button,
                                       gpointer user_data)
{
  gui_gtk2_allied_chat_only = gtk_toggle_button_get_active(button);
}
ENDREP
DELTA 17042 58285 121
SVN  佖w佖| 伔;  <伔;real_ENDREP
id: 10k.5ck.r17849/60688
type: file
pred: 10k.5ck.r17814/368
count: 256
text: 17849 3706 56892 74285 9af6982b172e16f43229f38da187e535
props: 11057 38870 112 0 ec3aa248409009be6c82cab2c7e95ef5
cpath: /trunk/client/gui-gtk-2.0/gui_main.c
copyroot: 15280 /trunk

PLAIN
K 11
Makefile.am
V 24
file zu.5ck.r17430/16398
K 8
canvas.c
V 25
file 2y6.5ck.r16281/14174
K 8
canvas.h
V 23
file 2y7.0.r10096/14437
K 16
caravan_dialog.c
V 26
file 376.5ck.r17122/359334
K 10
chatline.c
V 23
file zw.5ck.r17826/6208
K 10
chatline.h
V 24
file zx.5ck.r16063/47311
K 15
choice_dialog.c
V 26
file 377.5ck.r17122/362877
K 15
choice_dialog.h
V 23
file 378.0.r12670/99360
K 9
citydlg.c
V 24
file zy.5ck.r17793/20510
K 9
citydlg.h
V 20
file zz.0.r5493/6351
K 9
cityrep.c
V 24
file 100.5ck.r17486/3196
K 9
cityrep.h
V 22
file 101.0.r9098/11480
K 8
cma_fe.c
V 22
file 102.5ck.r17403/53
K 8
cma_fe.h
V 25
file 103.5ck.r15813/67548
K 8
colors.c
V 26
file 104.5ck.r17122/362357
K 8
colors.h
V 24
file 105.5ck.r16180/3087
K 12
connectdlg.c
V 26
file 106.5ck.r15410/343701
K 12
connectdlg.h
V 21
file 107.0.r7580/6878
K 9
dialogs.c
V 25
file 108.5ck.r17563/67944
K 9
dialogs.h
V 22
file 109.0.r11212/7101
K 10
diplodlg.c
V 24
file 10a.5ck.r17838/8447
K 10
diplodlg.h
V 23
file 10b.0.r9577/108261
K 17
diplomat_dialog.c
V 25
file 36n.5ck.r17846/20731
K 9
editgui.c
V 25
file 4ej.5ck.r17617/68081
K 9
editgui.h
V 25
file 4ek.5ck.r15355/70937
K 10
editprop.c
V 25
file 4el.5ck.r17617/69055
K 10
editprop.h
V 24
file 3bj.5cl.r15704/4438
K 10
embedggz.c
V 26
file 4gq.5ck.r17122/363137
K 9
finddlg.c
V 25
file 10c.5ck.r16015/48885
K 9
finddlg.h
V 22
file 2d0.0.r5989/22356
K 10
gamedlgs.c
V 26
file 10d.5ck.r17122/363800
K 9
gotodlg.c
V 23
file 10e.5ck.r17380/155
K 9
gotodlg.h
V 23
file 10f.0.r4313/263426
K 10
graphics.c
V 23
file 10g.0.r11337/79662
K 10
graphics.h
V 23
file 10h.0.r11337/80150
K 12
gtkpixcomm.c
V 25
file 10i.5ck.r16973/10277
K 12
gtkpixcomm.h
V 22
file 10j.0.r10800/1606
K 10
gui_main.c
V 25
file 10k.5ck.r17849/60688
K 10
gui_main.h
V 25
file 10l.5ck.r17735/13565
K 11
gui_stuff.c
V 23
file 10m.5ck.r17844/433
K 11
gui_stuff.h
V 25
file 10n.5ck.r16281/15466
K 11
happiness.c
V 23
file 10o.5ck.r17522/118
K 11
happiness.h
V 23
file 10p.0.r9577/106064
K 9
helpdlg.c
V 25
file 10q.5ck.r17430/16140
K 9
helpdlg.h
V 23
file 10r.0.r4313/267882
K 10
inputdlg.c
V 25
file 10s.5ck.r16015/49143
K 10
inputdlg.h
V 21
file 10t.0.r7580/3991
K 10
inteldlg.c
V 26
file 10u.5ck.r17839/189137
K 10
inteldlg.h
V 23
file 2d1.0.r9577/108626
K 9
mapctrl.c
V 26
file 10v.5ck.r16929/319486
K 9
mapctrl.h
V 25
file 10w.5bk.r14157/11089
K 9
mapview.c
V 25
file 10x.5ck.r17735/13048
K 9
mapview.h
V 24
file 10y.5ck.r17351/2736
K 6
menu.c
V 22
file 10z.5ck.r17469/94
K 6
menu.h
V 25
file 110.5ck.r16067/65085
K 12
messagedlg.c
V 23
file 111.0.r11771/10924
K 12
messagedlg.h
V 22
file 2d2.0.r5989/22693
K 12
messagewin.c
V 24
file 112.5ck.r16973/9506
K 12
messagewin.h
V 23
file 113.0.r10108/19424
K 11
optiondlg.c
V 24
file 4js.5ck.r17385/1988
K 11
optiondlg.h
V 25
file 114.5ck.r17037/29773
K 7
pages.c
V 25
file 2pi.5ck.r17765/44965
K 7
pages.h
V 25
file 2pj.5ck.r16532/16664
K 8
plrdlg.c
V 26
file 115.5ck.r17620/120116
K 8
plrdlg.h
V 22
file 116.0.r10803/7069
K 10
ratesdlg.h
V 22
file 2d3.0.r5989/22018
K 4
rc2c
V 23
file 117.0.r4313/274431
K 10
repodlgs.c
V 26
file 118.5ck.r17839/188878
K 10
repodlgs.h
V 24
file 119.5ck.r17115/7471
K 11
resources.c
V 23
file 11a.0.r5390/112550
K 11
resources.h
V 23
file 11b.0.r4313/267539
K 14
spaceshipdlg.c
V 26
file 11c.5ck.r17042/129784
K 14
spaceshipdlg.h
V 23
file 11d.0.r9577/110090
K 8
sprite.c
V 26
file 2y8.5ck.r16578/445568
K 8
sprite.h
V 23
file 2y9.0.r10141/29270
K 11
theme_dlg.c
V 26
file 47d.5ck.r17122/361837
K 8
themes.c
V 26
file 34x.5ck.r17122/358813
K 13
tileset_dlg.c
V 25
file 45i.5bk.r13968/60424
K 14
voteinfo_bar.c
V 24
file 4h8.5ck.r17786/1363
K 14
voteinfo_bar.h
V 25
file 4h9.5ck.r16063/46876
K 7
wldlg.c
V 26
file 11e.5ck.r16929/320462
K 7
wldlg.h
V 25
file 11f.5ck.r16285/86707
END
ENDREP
id: zs.5ck.r17849/64708
type: dir
pred: zs.5ck.r17846/24753
count: 1368
text: 17849 60948 3747 3747 740efd100e164586dc531b0e21fa3680
props: 11108 11912 79 0 480bb3268560e84c2d6c8376c422c65e
cpath: /trunk/client/gui-gtk-2.0
copyroot: 15280 /trunk

id: bm.5ck.r17849/64955
type: file
pred: bm.5ck.r17122/369877
count: 156
text: 17849 3044 233 36553 71738a5d20c3f36835bff8860a55c425
props: 10925 3549 112 0 177404f64081975a31585790400154e7
cpath: /trunk/client/gui-xaw/gui_main.c
copyroot: 15280 /trunk

PLAIN
K 11
Makefile.am
V 24
file bq.5ck.r17430/21163
K 9
actions.c
V 24
file nt.5ck.r17218/12618
K 9
actions.h
V 21
file nu.0.r1888/21779
K 4
ad2c
V 22
file 9q.0.r1186/243967
K 8
canvas.c
V 21
file 9r.0.r3959/87925
K 8
canvas.h
V 20
file 9s.0.r4034/9073
K 9
canvasp.h
V 20
file 9t.0.r4034/8365
K 10
chatline.c
V 25
file 9u.5ck.r17122/373441
K 10
chatline.h
V 21
file 9v.0.r2187/10435
K 9
citydlg.c
V 24
file 9w.5ck.r17793/25039
K 9
citydlg.h
V 20
file 9x.0.r2187/8309
K 9
cityrep.c
V 25
file 9y.5ck.r17122/370887
K 9
cityrep.h
V 20
file g1.0.r5489/4916
K 8
cma_fe.c
V 23
file 2ei.5ck.r17713/119
K 8
cma_fe.h
V 21
file 2ej.0.r6908/4433
K 8
colors.c
V 25
file a2.5ck.r16578/453349
K 8
colors.h
V 21
file a3.0.r10532/9312
K 12
connectdlg.c
V 25
file a4.5ck.r17122/373693
K 12
connectdlg.h
V 21
file a5.0.r2187/12228
K 9
dialogs.c
V 24
file a6.5ck.r17406/87397
K 9
dialogs.h
V 21
file a7.0.r10882/3191
K 10
diplodlg.c
V 25
file a8.5ck.r17627/118010
K 10
diplodlg.h
V 20
file a9.0.r2187/7955
K 17
diplomat_dialog.c
V 25
file 37p.5ck.r17846/24999
K 9
finddlg.c
V 25
file aa.5ck.r17122/372680
K 9
finddlg.h
V 22
file 2dk.0.r5989/31562
K 9
gotodlg.c
V 25
file ab.5ck.r17122/369111
K 9
gotodlg.h
V 21
file ac.0.r1888/21069
K 10
graphics.c
V 25
file ad.5ck.r17122/371918
K 10
graphics.h
V 21
file ae.0.r10789/6338
K 10
gui_main.c
V 24
file bm.5ck.r17849/64955
K 10
gui_main.h
V 22
file bn.0.r11408/10219
K 11
gui_stuff.c
V 24
file bo.5ck.r17127/30848
K 11
gui_stuff.h
V 21
file bp.0.r4964/56392
K 9
helpdlg.c
V 24
file af.5ck.r17430/20911
K 9
helpdlg.h
V 21
file g2.0.r1888/23188
K 10
inputdlg.c
V 20
file ag.0.r7586/1961
K 10
inputdlg.h
V 20
file ah.0.r7586/2315
K 10
inteldlg.c
V 25
file ai.5ck.r17839/193907
K 10
inteldlg.h
V 23
file 2dl.0.r10108/22972
K 9
mapctrl.c
V 25
file aj.5ck.r16929/327222
K 9
mapctrl.h
V 21
file ak.0.r10532/9667
K 9
mapview.c
V 24
file al.5ck.r17735/17831
K 9
mapview.h
V 24
file am.5bk.r13912/46304
K 6
menu.c
V 25
file an.5ck.r17122/370385
K 6
menu.h
V 24
file ao.5ck.r16824/42452
K 12
messagedlg.c
V 25
file ap.5bk.r14427/290582
K 12
messagedlg.h
V 22
file 2dm.0.r5989/31896
K 12
messagewin.c
V 25
file aq.5bk.r14427/286529
K 12
messagewin.h
V 20
file g3.0.r5489/3851
K 11
optiondlg.c
V 24
file ar.5ck.r17378/72813
K 11
optiondlg.h
V 24
file as.5ck.r16998/79026
K 7
pages.c
V 26
file 2qm.5ck.r17627/117758
K 7
pages.h
V 22
file 2qn.0.r10536/7909
K 9
pixcomm.c
V 21
file at.0.r3145/18494
K 9
pixcomm.h
V 20
file au.0.r4034/9777
K 10
pixcommp.h
V 20
file av.0.r4034/8719
K 8
plrdlg.c
V 25
file aw.5ck.r17627/118264
K 8
plrdlg.h
V 20
file g4.0.r5489/3140
K 10
ratesdlg.c
V 25
file ax.5ck.r17122/372425
K 10
ratesdlg.h
V 22
file 2dn.0.r5989/31227
K 10
repodlgs.c
V 25
file ay.5ck.r17839/193651
K 10
repodlgs.h
V 24
file az.5ck.r17218/13124
K 11
resources.c
V 20
file b0.0.r9310/2224
K 11
resources.h
V 21
file b1.0.r3145/14204
K 14
spaceshipdlg.c
V 25
file b2.5ck.r17042/135081
K 14
spaceshipdlg.h
V 21
file b3.0.r2187/11152
K 8
themes.c
V 23
file 350.0.r10945/14451
K 14
voteinfo_bar.c
V 25
file 4hg.5ck.r16063/52010
K 14
voteinfo_bar.h
V 25
file 4hh.5ck.r16063/52179
K 7
wldlg.c
V 25
file o5.5ck.r16929/327729
K 7
wldlg.h
V 24
file o6.5ck.r16285/91411
END
ENDREP
id: 9o.5ck.r17849/68393
type: dir
pred: 9o.5ck.r17846/28445
count: 944
text: 17849 65209 3171 3171 ec99766e61a0dc5105f0c402ce91551f
props: 11108 12237 78 0 a27c61ac5fddbd709df8c1876129f940
cpath: /trunk/client/gui-xaw
copyroot: 15280 /trunk

id: ev.5ck.r17849/68635
type: file
pred: ev.5ck.r16248/25056
count: 18
text: 17849 104 244 1608 8e9d93231663d45daabdbc91d4a5c60e
props: 9809 14306 111 0 5396249b3009eb64cd90e5da0b7a56fa
cpath: /trunk/client/include/gui_main_g.h
copyroot: 15280 /trunk

PLAIN
K 11
Makefile.am
V 24
file dt.5ck.r16998/83619
K 10
canvas_g.h
V 25
file 2y4.5bk.r15074/16002
K 12
chatline_g.h
V 24
file en.5ck.r15990/65213
K 11
citydlg_g.h
V 24
file eo.5ck.r17079/28614
K 11
cityrep_g.h
V 24
file g5.5ck.r17079/28365
K 10
colors_g.h
V 21
file in.0.r10458/8958
K 14
connectdlg_g.h
V 21
file eq.0.r10804/9790
K 11
dialogs_g.h
V 24
file er.5ck.r15934/34534
K 12
diplodlg_g.h
V 21
file es.0.r7930/21998
K 11
editgui_g.h
V 25
file 3bj.5cm.r16630/10713
K 11
finddlg_g.h
V 22
file 2do.0.r5989/36572
K 7
ggz_g.h
V 25
file 4gr.5ck.r15814/24021
K 11
gotodlg_g.h
V 21
file et.0.r1432/33793
K 12
graphics_g.h
V 21
file eu.0.r10095/7747
K 12
gui_main_g.h
V 24
file ev.5ck.r17849/68635
K 11
helpdlg_g.h
V 23
file g6.5ck.r17061/1365
K 12
inteldlg_g.h
V 25
file 2dp.5ck.r17617/77185
K 11
mapctrl_g.h
V 21
file ew.0.r8119/34823
K 11
mapview_g.h
V 24
file ex.5ck.r17735/21509
K 8
menu_g.h
V 24
file ey.5ck.r16999/15812
K 14
messagedlg_g.h
V 22
file 2dq.0.r5989/35559
K 14
messagewin_g.h
V 21
file g7.0.r9098/20426
K 13
optiondlg_g.h
V 25
file 4jv.5ck.r17037/38492
K 9
pages_g.h
V 25
file 2pk.5ck.r16999/15561
K 10
plrdlg_g.h
V 21
file g8.0.r9098/20071
K 12
ratesdlg_g.h
V 22
file 2dr.0.r5989/36235
K 12
repodlgs_g.h
V 24
file ez.5ck.r16998/83871
K 16
spaceshipdlg_g.h
V 21
file f0.0.r8119/33388
K 10
sprite_g.h
V 23
file 2y5.0.r10141/41098
K 10
themes_g.h
V 23
file 351.0.r10945/18328
K 16
voteinfo_bar_g.h
V 25
file 4hi.5ck.r16063/56509
K 9
wldlg_g.h
V 21
file o7.0.r1939/66425
END
ENDREP
id: b8.5ck.r17849/70384
type: dir
pred: b8.5ck.r17735/23256
count: 238
text: 17849 68887 1484 1484 60816e40264e09cd4d50b637b9a22615
props: 4431 36493 46 0 e473fc4bd409d833d90929dfcb3a14b8
cpath: /trunk/client/include
copyroot: 15280 /trunk

id: y3.5ck.r17849/70625
type: file
pred: y3.5ck.r17042/138767
count: 79
text: 17849 60629 30 27772 712d56bbae70d93f10944589c1bb1cb2
props: 10519 872 111 0 910e8d1010fade384d0a5659f339617e
cpath: /trunk/client/gui-win32/gui_main.c
copyroot: 15280 /trunk

PLAIN
K 11
Makefile.am
V 24
file nr.5ck.r16063/58955
K 8
canvas.c
V 26
file 2ya.5ck.r16578/457273
K 8
canvas.h
V 22
file 2yb.0.r10131/2132
K 10
chatline.c
V 25
file xk.5ck.r16199/132896
K 10
chatline.h
V 20
file xl.0.r5785/7678
K 9
citydlg.c
V 25
file xm.5ck.r17293/102888
K 9
citydlg.h
V 19
file xn.0.r5671/865
K 9
cityrep.c
V 25
file xo.5ck.r17122/378926
K 9
cityrep.h
V 22
file xp.0.r3745/159022
K 8
cma_fe.c
V 25
file 2fu.5ck.r17296/31864
K 8
cma_fe.h
V 20
file 2fv.0.r7442/210
K 8
colors.c
V 21
file xq.0.r10461/1484
K 8
colors.h
V 21
file xr.0.r10461/1841
K 12
connectdlg.c
V 25
file xs.5ck.r17627/122454
K 12
connectdlg.h
V 20
file xt.0.r8331/7783
K 9
dialogs.c
V 24
file xu.5ck.r17846/28688
K 9
dialogs.h
V 21
file xv.0.r10883/4520
K 10
diplodlg.c
V 25
file xw.5ck.r17627/121946
K 10
diplodlg.h
V 22
file xx.0.r13481/26989
K 9
finddlg.c
V 23
file xy.5ck.r16025/7544
K 9
finddlg.h
V 22
file 2dg.0.r5989/39776
K 9
gotodlg.c
V 23
file xz.5ck.r16025/6031
K 9
gotodlg.h
V 20
file y0.0.r3786/3776
K 10
graphics.c
V 25
file y1.5ck.r17042/139532
K 10
graphics.h
V 21
file y2.0.r10294/2998
K 10
gui_main.c
V 24
file y3.5ck.r17849/70625
K 10
gui_main.h
V 24
file y4.5ck.r16059/40327
K 11
gui_stuff.c
V 23
file y5.5ck.r16025/6536
K 11
gui_stuff.h
V 22
file y6.0.r13328/10851
K 11
happiness.c
V 23
file 137.5bk.r14335/341
K 11
happiness.h
V 23
file 138.0.r13481/26751
K 9
helpdlg.c
V 24
file y7.5ck.r16992/33296
K 9
helpdlg.h
V 22
file y8.0.r3745/150873
K 10
inputdlg.c
V 19
file y9.0.r8895/460
K 10
inputdlg.h
V 22
file ya.0.r3745/153242
K 10
inteldlg.c
V 25
file yb.5ck.r17839/197848
K 10
inteldlg.h
V 22
file 2dh.0.r5989/39102
K 9
mapctrl.c
V 25
file yc.5ck.r15410/360029
K 9
mapctrl.h
V 21
file yd.0.r6430/14685
K 9
mapview.c
V 24
file ye.5ck.r17735/23497
K 9
mapview.h
V 22
file yf.0.r13412/11359
K 6
menu.c
V 25
file yg.5ck.r17122/378417
K 6
menu.h
V 20
file yh.0.r5785/9458
K 12
messagedlg.c
V 25
file yi.5bk.r14427/299083
K 12
messagedlg.h
V 22
file 2di.0.r5989/40112
K 12
messagewin.c
V 25
file yj.5bk.r14427/295548
K 12
messagewin.h
V 22
file yk.0.r3745/155966
K 11
optiondlg.c
V 25
file yl.5ck.r17122/377390
K 11
optiondlg.h
V 21
file ym.0.r3959/96575
K 7
pages.c
V 25
file 2qk.5ck.r16063/58356
K 7
pages.h
V 22
file 2ql.0.r8639/12634
K 8
plrdlg.c
V 25
file yn.5ck.r17627/122200
K 8
plrdlg.h
V 20
file yo.0.r3847/6164
K 10
ratesdlg.c
V 25
file yp.5ck.r17122/379957
K 10
ratesdlg.h
V 22
file 2dj.0.r5989/39439
K 10
repodlgs.c
V 25
file yq.5ck.r17839/197591
K 10
repodlgs.h
V 22
file yr.0.r3745/151547
K 14
spaceshipdlg.c
V 25
file yt.5ck.r17042/139786
K 14
spaceshipdlg.h
V 20
file yu.0.r3778/5068
K 8
sprite.c
V 25
file 2yc.5ck.r16059/39575
K 8
sprite.h
V 23
file 2yd.0.r10141/44406
K 8
themes.c
V 23
file 34z.0.r10945/20562
K 14
voteinfo_bar.c
V 25
file 4he.5ck.r16063/58606
K 14
voteinfo_bar.h
V 25
file 4hf.5ck.r16063/58781
K 7
wldlg.c
V 25
file yv.5ck.r17122/380467
K 7
wldlg.h
V 24
file yw.5ck.r16285/95572
END
ENDREP
id: np.5ck.r17849/73809
type: dir
pred: np.5ck.r17846/31874
count: 708
text: 17849 70879 2917 2917 4590ec31c4f428e220716b6be6ba7d02
props: 11108 12557 68 0 fbaef5f6348d6ae4b0cc177104ca4ad2
cpath: /trunk/client/gui-win32
copyroot: 15280 /trunk

id: n.5ck.r17849/74053
type: file
pred: n.5ck.r17839/201280
count: 749
text: 17849 3308 72 112466 c3cdd657017247d01aadc44c09a0367c
props: 11088 14698 112 0 2c9d3e41a2f20488aa9cdb8d740d094e
cpath: /trunk/client/packhand.c
copyroot: 15280 /trunk

id: 16y.5ck.r17849/74298
type: file
pred: 16y.5ck.r17146/89176
count: 60
text: 17849 3411 266 28349 ac74870c8fd34213a1212b6f8abbf8a4
props: 9030 114052 111 0 2a5912525b098cb46a1301ee940f7617
cpath: /trunk/client/gui-sdl/chatline.c
copyroot: 15280 /trunk

PLAIN
K 11
Makefile.am
V 25
file 16u.5ck.r17230/40948
K 14
SDL_rotozoom.c
V 24
file 3jy.0.r12670/115301
K 14
SDL_rotozoom.h
V 24
file 3jz.0.r12670/115888
K 9
SDL_ttf.c
V 24
file 2dz.5bk.r13597/7386
K 9
SDL_ttf.h
V 24
file 2e0.5bk.r13597/7647
K 11
alphablit.c
V 23
file 3be.0.r13354/59832
K 8
canvas.c
V 25
file 39i.5bk.r15074/21186
K 8
canvas.h
V 23
file 39j.0.r13354/56918
K 16
caravan_dialog.c
V 26
file 3bp.5ck.r17122/386217
K 10
chatline.c
V 25
file 16y.5ck.r17849/74298
K 10
chatline.h
V 26
file 16z.5ck.r16199/137581
K 9
citydlg.c
V 26
file 170.5ck.r17293/106571
K 9
citydlg.h
V 23
file 171.0.r13354/55222
K 9
cityrep.c
V 22
file 172.5ck.r17347/65
K 9
cityrep.h
V 22
file 173.0.r12769/2941
K 8
cma_fe.c
V 25
file 174.5ck.r17296/35295
K 8
cma_fe.h
V 23
file 175.0.r11361/43495
K 8
colors.c
V 23
file 176.0.r13354/62500
K 8
colors.h
V 24
file 177.5bk.r14076/4693
K 12
connectdlg.c
V 24
file 178.5ck.r17139/2270
K 12
connectdlg.h
V 23
file 179.0.r12349/45319
K 9
dialogs.c
V 25
file 17a.5ck.r17563/72704
K 9
dialogs.h
V 25
file 17b.5ck.r17357/12486
K 10
diplodlg.c
V 26
file 17c.5ck.r17627/126137
K 10
diplodlg.h
V 22
file 17d.0.r11584/2869
K 17
diplomat_dialog.c
V 25
file 3bn.5ck.r17846/32119
K 9
finddlg.c
V 25
file 17e.5ck.r17146/88408
K 9
finddlg.h
V 20
file 2d8.0.r5991/702
K 9
gotodlg.c
V 23
file 17f.5ck.r17629/683
K 9
gotodlg.h
V 22
file 17g.0.r6515/58208
K 10
graphics.c
V 26
file 17h.5ck.r16929/334736
K 10
graphics.h
V 23
file 17i.0.r12611/13939
K 11
gui_iconv.c
V 26
file 17l.5ck.r16578/465566
K 11
gui_iconv.h
V 23
file 17m.0.r13354/66657
K 8
gui_id.h
V 25
file 17n.5ck.r17230/40092
K 10
gui_main.c
V 25
file 17o.5ck.r17283/74559
K 10
gui_main.h
V 25
file 17p.5ck.r17169/47828
K 11
gui_mouse.c
V 25
file 3ca.5ck.r17169/47579
K 11
gui_mouse.h
V 24
file 3cb.0.r12670/112397
K 12
gui_string.c
V 26
file 17r.5ck.r17392/130460
K 12
gui_string.h
V 23
file 17s.0.r13481/30445
K 14
gui_tilespec.c
V 26
file 191.5ck.r16929/332661
K 14
gui_tilespec.h
V 25
file 192.5bk.r13912/53929
K 11
happiness.c
V 23
file 17x.0.r11361/41144
K 11
happiness.h
V 23
file 17y.0.r11361/41867
K 9
helpdlg.c
V 25
file 17z.5ck.r17146/88664
K 9
helpdlg.h
V 23
file 180.0.r11361/47416
K 10
inputdlg.c
V 23
file 181.0.r11361/47897
K 10
inputdlg.h
V 23
file 182.0.r5500/260641
K 10
inteldlg.c
V 26
file 183.5ck.r17839/202044
K 10
inteldlg.h
V 22
file 2d9.0.r11409/2687
K 9
mapctrl.c
V 25
file 184.5ck.r17146/87894
K 9
mapctrl.h
V 23
file 185.0.r13354/63700
K 9
mapview.c
V 26
file 186.5ck.r17839/201527
K 9
mapview.h
V 23
file 187.0.r13354/56676
K 6
menu.c
V 25
file 188.5ck.r17563/72453
K 6
menu.h
V 25
file 189.5bk.r13856/57405
K 12
messagedlg.c
V 26
file 18a.5ck.r16578/465051
K 12
messagedlg.h
V 22
file 2da.0.r5989/48394
K 12
messagewin.c
V 24
file 18b.5ck.r15883/3836
K 12
messagewin.h
V 23
file 18c.0.r6286/140236
K 5
mmx.h
V 23
file 2e1.0.r6286/134429
K 11
optiondlg.c
V 24
file 18d.5ck.r17386/1232
K 11
optiondlg.h
V 25
file 18e.5ck.r17169/46811
K 7
pages.c
V 25
file 2qg.5ck.r17169/48078
K 7
pages.h
V 22
file 2qh.0.r8639/16416
K 8
plrdlg.c
V 26
file 18f.5ck.r17627/126396
K 8
plrdlg.h
V 22
file 18g.0.r6387/81301
K 10
ratesdlg.h
V 22
file 2db.0.r5989/47726
K 10
repodlgs.c
V 26
file 18i.5ck.r17839/201784
K 10
repodlgs.h
V 23
file 18j.0.r13354/58129
K 14
spaceshipdlg.c
V 25
file 18m.5ck.r17146/89433
K 14
spaceshipdlg.h
V 23
file 18n.0.r5500/263363
K 8
sprite.c
V 26
file 39k.5ck.r16578/462217
K 8
sprite.h
V 24
file 39l.0.r12670/108062
K 18
themebackgrounds.c
V 26
file 3ff.5ck.r16929/333181
K 18
themebackgrounds.h
V 25
file 3fg.5bk.r13794/17440
K 13
themecolors.c
V 26
file 392.5ck.r16929/334218
K 13
themecolors.h
V 24
file 393.0.r12670/114433
K 8
themes.c
V 26
file 38p.5ck.r17122/385702
K 11
themespec.c
V 26
file 390.5ck.r17392/130205
K 11
themespec.h
V 26
file 391.5ck.r16578/464018
K 11
unistring.c
V 23
file 18o.0.r13354/57401
K 11
unistring.h
V 23
file 18p.0.r13481/30205
K 14
voteinfo_bar.c
V 25
file 4ha.5ck.r16063/62859
K 14
voteinfo_bar.h
V 25
file 4hb.5ck.r16063/63032
K 8
widget.c
V 25
file 3fu.5ck.r17230/39584
K 8
widget.h
V 25
file 3fv.5ck.r17230/39838
K 15
widget_button.c
V 25
file 3fh.5ck.r17146/86344
K 15
widget_button.h
V 24
file 3g7.0.r12670/113556
K 17
widget_checkbox.c
V 24
file 3fi.5bk.r14076/6064
K 17
widget_checkbox.h
V 24
file 3g8.0.r12670/106620
K 14
widget_combo.c
V 25
file 4k3.5ck.r17230/40601
K 14
widget_combo.h
V 25
file 4k4.5ck.r17230/40775
K 13
widget_core.c
V 25
file 3fj.5ck.r17230/40344
K 13
widget_edit.c
V 23
file 3fk.0.r13354/64909
K 13
widget_edit.h
V 24
file 3g9.0.r12670/115595
K 13
widget_icon.c
V 23
file 3fl.0.r13354/59104
K 13
widget_icon.h
V 24
file 3ga.0.r12670/112107
K 14
widget_label.c
V 24
file 3fm.5bk.r13597/6851
K 14
widget_label.h
V 24
file 3gb.0.r12670/110079
K 10
widget_p.h
V 24
file 3fn.0.r12670/107197
K 18
widget_scrollbar.c
V 26
file 3fo.5df.r17392/130722
K 18
widget_scrollbar.h
V 24
file 3gc.0.r12670/116811
K 15
widget_window.c
V 25
file 3fp.5ck.r17357/11971
K 15
widget_window.h
V 23
file 3gd.0.r12699/32533
K 7
wldlg.c
V 23
file 18q.5ck.r17225/474
K 7
wldlg.h
V 26
file 18r.5ck.r16285/100508
END
ENDREP
id: 16t.5ck.r17849/79629
type: dir
pred: 16t.5ck.r17846/37456
count: 623
text: 17849 74553 5063 5063 f49ae268d573c27a84af3148b8ae5117
props: 11108 12869 78 0 a27c61ac5fddbd709df8c1876129f940
cpath: /trunk/client/gui-sdl
copyroot: 15280 /trunk

id: 2kr.5ck.r17849/79873
type: file
pred: 2kr.5ck.r17122/396612
count: 35
text: 17849 0 76 13494 8cee20d46582694f0a8b8c51472e2c1c
props: 10130 8501 111 0 d4514082fc7e52be026d3360dec4dcb0
cpath: /trunk/client/gui-ftwl/gui_main.c
copyroot: 15280 /trunk

PLAIN
K 11
Makefile.am
V 25
file 2k4.5ck.r16063/69242
K 8
canvas.c
V 26
file 2ye.5ck.r16578/471809
K 8
canvas.h
V 23
file 2yf.0.r10109/10676
K 6
chat.c
V 26
file 2k5.5ck.r16578/472321
K 6
chat.h
V 22
file 2k6.0.r7939/79684
K 10
chatline.c
V 25
file 2k7.5ck.r15990/78271
K 10
chatline.h
V 22
file 2k8.0.r7939/74301
K 9
citydlg.c
V 26
file 2k9.5ck.r16578/471040
K 9
citydlg.h
V 22
file 2ka.0.r7939/67918
K 9
cityrep.c
V 22
file 2kb.0.r7939/78333
K 9
cityrep.h
V 22
file 2kc.0.r7939/80015
K 8
colors.c
V 22
file 2kd.0.r11941/5347
K 8
colors.h
V 22
file 2ke.0.r11941/5582
K 12
connectdlg.c
V 26
file 2kf.5ck.r17122/396868
K 12
connectdlg.h
V 22
file 2kg.0.r7939/80350
K 9
dialogs.c
V 25
file 2kh.5ck.r17377/57521
K 9
dialogs.h
V 22
file 2ki.0.r7939/80688
K 10
diplodlg.c
V 22
file 2kj.0.r7939/64892
K 10
diplodlg.h
V 22
file 2kk.0.r7939/67247
K 9
finddlg.c
V 22
file 2kl.0.r7939/69930
K 9
finddlg.h
V 22
file 2km.0.r7939/70941
K 9
gotodlg.c
V 26
file 2kn.5ck.r15410/377451
K 9
gotodlg.h
V 22
file 2ko.0.r7939/67583
K 10
graphics.c
V 23
file 2kp.0.r10141/54754
K 10
graphics.h
V 22
file 2kq.0.r7939/68252
K 10
gui_main.c
V 25
file 2kr.5ck.r17849/79873
K 10
gui_main.h
V 22
file 2ks.0.r11943/1292
K 10
gui_text.c
V 26
file 2mr.5ck.r17122/397384
K 10
gui_text.h
V 22
file 2ms.0.r11941/8598
K 9
helpdlg.c
V 22
file 2kt.0.r7939/71611
K 9
helpdlg.h
V 22
file 2ku.0.r7939/72285
K 10
inteldlg.c
V 25
file 2kv.5ck.r17617/88423
K 10
inteldlg.h
V 22
file 2kw.0.r7939/69594
K 9
mapctrl.c
V 26
file 2kx.5ck.r16578/471296
K 9
mapctrl.h
V 22
file 2ky.0.r7939/69259
K 9
mapview.c
V 25
file 2kz.5ck.r17735/32501
K 9
mapview.h
V 21
file 2l0.0.r11943/817
K 6
menu.c
V 25
file 2l1.5ck.r16226/38585
K 6
menu.h
V 22
file 2l2.0.r7939/76324
K 12
messagedlg.c
V 22
file 2l3.0.r7939/76990
K 12
messagedlg.h
V 22
file 2l4.0.r7939/79008
K 12
messagewin.c
V 23
file 2l5.0.r9577/142349
K 12
messagewin.h
V 22
file 2l6.0.r7939/75986
K 7
pages.c
V 26
file 2qc.5ck.r16199/143286
K 7
pages.h
V 22
file 2qd.0.r8639/25123
K 8
plrdlg.c
V 23
file 2l7.0.r9577/141628
K 8
plrdlg.h
V 22
file 2l8.0.r7939/73967
K 10
ratesdlg.c
V 22
file 2l9.0.r7939/68588
K 10
ratesdlg.h
V 22
file 2la.0.r7939/70605
K 10
repodlgs.c
V 22
file 2lb.0.r7939/71947
K 10
repodlgs.h
V 22
file 2lc.0.r7939/72955
K 14
spaceshipdlg.c
V 22
file 2ld.0.r7939/75645
K 14
spaceshipdlg.h
V 22
file 2le.0.r7939/77329
K 8
sprite.c
V 23
file 2yg.0.r11958/37010
K 8
sprite.h
V 23
file 2yh.0.r10141/56198
K 8
themes.c
V 24
file 3cc.0.r12670/122700
K 14
voteinfo_bar.c
V 25
file 4h6.5ck.r16063/68895
K 14
voteinfo_bar.h
V 25
file 4h7.5ck.r16063/69069
K 7
wldlg.c
V 22
file 2lf.0.r7939/76656
K 7
wldlg.h
V 22
file 2lg.0.r7939/77669
END
ENDREP
id: 2k2.5ck.r17849/82782
type: dir
pred: 2k2.5ck.r17735/35414
count: 135
text: 17849 80125 2644 2644 3ac9d0c8ae67116a99eeb1e4bc0ee3af
props: 11108 13191 78 0 667fe0aa2722f6798d567486294a1d2e
cpath: /trunk/client/gui-ftwl
copyroot: 15280 /trunk

id: 4jw.5ck.r17849/83027
type: file
pred: 4jw.5ck.r17079/36327
count: 2
text: 17849 376 2587 13429 7f503cfd63474deefa72dca3dba33c5a
cpath: /trunk/client/update_queue.c
copyroot: 15280 /trunk

id: n4.5ck.r17849/83219
type: file
pred: n4.5ck.r16630/24721
count: 35
text: 17849 2992 26 8652 2a99d2b3aca1a4e5ac8ec050e7ce8c3a
props: 10144 10256 111 0 4b4193808cb95e702a5e5065e4345324
cpath: /trunk/client/gui-stub/gui_main.c
copyroot: 15280 /trunk

PLAIN
K 11
Makefile.am
V 24
file mj.5ck.r16998/92932
K 8
canvas.c
V 25
file 2y0.5bk.r15074/29613
K 8
canvas.h
V 23
file 2y1.0.r10095/12720
K 10
chatline.c
V 24
file ml.5ck.r15990/83099
K 10
chatline.h
V 21
file mm.0.r5491/41569
K 9
citydlg.c
V 24
file mn.5ck.r17079/36521
K 9
citydlg.h
V 21
file mo.0.r5491/35843
K 9
cityrep.c
V 24
file mp.5ck.r17079/36775
K 9
cityrep.h
V 21
file mq.0.r5491/46587
K 8
colors.c
V 22
file mr.0.r10458/11165
K 8
colors.h
V 22
file ms.0.r10458/11524
K 12
connectdlg.c
V 25
file mt.5ck.r16929/344729
K 12
connectdlg.h
V 21
file mu.0.r5491/46943
K 9
dialogs.c
V 25
file mv.5ck.r16397/116369
K 9
dialogs.h
V 20
file mw.0.r8956/1107
K 10
diplodlg.c
V 21
file mx.0.r10144/8226
K 10
diplodlg.h
V 21
file my.0.r5491/35128
K 9
finddlg.c
V 21
file mz.0.r5491/37629
K 9
finddlg.h
V 22
file 2dc.0.r5989/44093
K 9
gotodlg.c
V 25
file n0.5ck.r15410/383554
K 9
gotodlg.h
V 21
file n1.0.r5491/35486
K 10
graphics.c
V 22
file n2.0.r10141/65831
K 10
graphics.h
V 21
file n3.0.r5491/36199
K 10
gui_main.c
V 24
file n4.5ck.r17849/83219
K 10
gui_main.h
V 21
file n5.0.r5491/41925
K 9
helpdlg.c
V 21
file n6.0.r10144/9660
K 9
helpdlg.h
V 21
file n7.0.r5491/39423
K 10
inteldlg.c
V 24
file n8.5ck.r17617/91578
K 10
inteldlg.h
V 22
file 2dd.0.r5989/43421
K 9
mapctrl.c
V 21
file n9.0.r7018/49625
K 9
mapctrl.h
V 21
file na.0.r5491/37272
K 9
mapview.c
V 24
file nb.5ck.r17735/35659
K 9
mapview.h
V 21
file nc.0.r5491/38349
K 6
menu.c
V 24
file nd.5ck.r16999/24332
K 6
menu.h
V 21
file ne.0.r5491/43723
K 12
messagedlg.c
V 21
file nf.0.r5491/44434
K 12
messagedlg.h
V 22
file 2de.0.r5989/44428
K 12
messagewin.c
V 21
file ng.0.r9098/29017
K 12
messagewin.h
V 21
file nh.0.r5491/43363
K 11
optiondlg.c
V 25
file 4jt.5ck.r17037/45888
K 11
optiondlg.h
V 25
file 4ju.5ck.r16998/92511
K 7
pages.c
V 25
file 2qi.5ck.r16999/24085
K 7
pages.h
V 22
file 2qj.0.r8639/28697
K 8
plrdlg.c
V 21
file ni.0.r9098/28662
K 8
plrdlg.h
V 21
file nj.0.r5491/41213
K 10
ratesdlg.c
V 21
file nk.0.r5491/36557
K 10
ratesdlg.h
V 22
file 2df.0.r5989/43757
K 10
repodlgs.c
V 24
file nl.5ck.r16998/92681
K 10
repodlgs.h
V 21
file nm.0.r5491/40138
K 14
spaceshipdlg.c
V 21
file nn.0.r5491/42999
K 14
spaceshipdlg.h
V 21
file no.0.r5491/44796
K 8
sprite.c
V 22
file 2y2.0.r11749/1632
K 8
sprite.h
V 23
file 2y3.0.r10095/12384
K 8
themes.c
V 23
file 34y.0.r10945/24922
K 14
voteinfo_bar.c
V 25
file 4hc.5ck.r16063/72831
K 14
voteinfo_bar.h
V 25
file 4hd.5ck.r16063/73005
K 7
wldlg.c
V 21
file qj.0.r5491/44077
K 7
wldlg.h
V 21
file qk.0.r5491/45158
END
ENDREP
id: mh.5ck.r17849/86005
type: dir
pred: mh.5ck.r17735/38447
count: 174
text: 17849 83471 2521 2521 536958ddf3b47b41aeac0a38da5a48fa
props: 11108 13796 68 0 fbaef5f6348d6ae4b0cc177104ca4ad2
cpath: /trunk/client/gui-stub
copyroot: 15280 /trunk

PLAIN
K 11
Makefile.am
V 24
file 5f.5ck.r16999/27621
K 6
agents
V 23
dir zf.5ck.r17297/23586
K 11
attribute.c
V 24
file xh.5ck.r17034/13614
K 11
attribute.h
V 19
file xi.0.r4715/844
K 7
audio.c
V 26
file 139.5ck.r17122/401512
K 7
audio.h
V 25
file 13a.5ck.r16165/81556
K 12
audio_none.c
V 23
file 13d.0.r6129/145164
K 12
audio_none.h
V 22
file 13e.0.r4452/27228
K 11
audio_sdl.c
V 26
file 13f.5ck.r16578/477644
K 11
audio_sdl.h
V 22
file 13g.0.r4452/26570
K 17
chatline_common.c
V 25
file 14q.5ck.r17603/57206
K 17
chatline_common.h
V 25
file 14r.5ck.r16888/19266
K 16
citydlg_common.c
V 23
file z4.5ck.r17527/6810
K 16
citydlg_common.h
V 24
file z5.5ck.r17166/64267
K 13
cityrepdata.c
V 24
file mb.5ck.r17194/12858
K 13
cityrepdata.h
V 21
file mc.0.r9153/21475
K 11
civclient.c
V 23
file 4f2.5ck.r15408/695
K 13
client_main.c
V 23
file 2f.5cp.r17832/1121
K 13
client_main.h
V 23
file hz.5cq.r16632/1773
K 8
climap.c
V 25
file 197.5ck.r16888/19519
K 8
climap.h
V 25
file 198.5ck.r16888/20012
K 9
climisc.c
V 25
file d5.5ck.r17839/207623
K 9
climisc.h
V 24
file i0.5ck.r17563/78771
K 8
clinet.c
V 24
file hc.5ck.r17707/12022
K 8
clinet.h
V 25
file i1.5bk.r14427/324634
K 15
colors_common.c
V 25
file 33a.5ck.r17618/25002
K 15
colors_common.h
V 25
file 33b.5ck.r16397/92170
K 19
connectdlg_common.c
V 26
file 2fw.5ck.r17122/400799
K 19
connectdlg_common.h
V 25
file 2fx.5ck.r16532/38983
K 9
control.c
V 25
file gz.5ck.r17627/112472
K 9
control.h
V 22
file i2.5ck.r17128/896
K 7
dummy.c
V 23
file 4f9.5ck.r15641/551
K 8
editor.c
V 25
file 3bg.5ck.r17617/94607
K 8
editor.h
V 25
file 3bh.5ck.r15761/13075
K 11
ggzclient.c
V 25
file 394.5ck.r15814/34717
K 11
ggzclient.h
V 24
file 395.0.r12670/122419
K 17
global_worklist.c
V 25
file 4i6.5ck.r17509/30059
K 17
global_worklist.h
V 26
file 4i7.5ck.r16319/100206
K 6
goto.c
V 25
file vu.5ck.r17392/129962
K 6
goto.h
V 24
file vv.5ck.r15509/18108
K 8
gui-ftwl
V 24
dir 2k2.5ck.r17849/82782
K 11
gui-gtk-2.0
V 23
dir zs.5ck.r17849/64708
K 7
gui-sdl
V 24
dir 16t.5ck.r17849/79629
K 8
gui-stub
V 23
dir mh.5ck.r17849/86005
K 9
gui-win32
V 23
dir np.5ck.r17849/73809
K 7
gui-xaw
V 23
dir 9o.5ck.r17849/68393
K 10
helpdata.c
V 24
file h1.5ck.r17513/11962
K 10
helpdata.h
V 25
file i3.5bk.r14417/261925
K 7
include
V 23
dir b8.5ck.r17849/70384
K 16
mapctrl_common.c
V 26
file 15m.5ck.r17627/132485
K 16
mapctrl_common.h
V 23
file 15n.0.r11378/41712
K 16
mapview_common.c
V 25
file z2.5ck.r17122/405287
K 16
mapview_common.h
V 25
file z3.5ck.r16578/482844
K 19
messagewin_common.c
V 26
file 14s.5ck.r17627/132228
K 19
messagewin_common.h
V 25
file 14t.5ck.r15909/37338
K 9
options.c
V 24
file dc.5ck.r17826/10470
K 9
options.h
V 23
file i4.5ck.r17826/5970
K 17
overview_common.c
V 25
file 2yk.5ck.r17735/12797
K 17
overview_common.h
V 25
file 2yl.5ck.r16930/40516
K 10
packhand.c
V 23
file n.5ck.r17849/74053
K 10
packhand.h
V 24
file i5.5bk.r14422/90154
K 15
plrdlg_common.c
V 25
file 14u.5ck.r17838/12706
K 15
plrdlg_common.h
V 26
file 14v.5bk.r14417/257761
K 17
repodlgs_common.c
V 26
file 11i.5ck.r17122/368346
K 17
repodlgs_common.h
V 25
file 11j.5ck.r16971/56809
K 9
reqtree.c
V 26
file 2ym.5ck.r17839/188629
K 9
reqtree.h
V 23
file 2yn.0.r13481/22674
K 9
servers.c
V 26
file 33x.5ck.r17122/406310
K 9
servers.h
V 25
file 33y.5ck.r15505/14398
K 6
text.c
V 26
file 2g3.5ck.r17839/193406
K 6
text.h
V 24
file 2g4.5ck.r17475/5221
K 15
themes_common.c
V 25
file 352.5ck.r16930/48921
K 15
themes_common.h
V 25
file 353.5ck.r16930/49172
K 10
tilespec.c
V 24
file hl.5ck.r17703/14750
K 10
tilespec.h
V 24
file i6.5ck.r16930/49667
K 14
update_queue.c
V 25
file 4jw.5ck.r17849/83027
K 14
update_queue.h
V 25
file 4jx.5ck.r16999/23921
K 10
voteinfo.c
V 23
file 4fe.5ck.r17708/187
K 10
voteinfo.h
V 25
file 4ff.5ck.r16201/17543
END
ENDREP
id: d.5ck.r17849/90016
type: dir
pred: d.5ck.r17846/41470
count: 4902
text: 17849 86248 3755 3755 907f20405b7a464b9dfce8328a40b83c
props: 17175 1380 160 0 7b3e01f16aae8514c8fa39e5f80a327d
cpath: /trunk/client
copyroot: 15280 /trunk

PLAIN
K 9
ABOUT-NLS
V 22
file fu.0.r13215/85704
K 7
AUTHORS
V 19
file 5u.0.r12982/94
K 7
COPYING
V 19
file 1h.0.r9643/400
K 9
ChangeLog
V 26
file 6l.5ck.r15924/3800068
K 7
INSTALL
V 22
file 6.5ck.r17486/2711
K 11
Makefile.am
V 24
file 59.5ck.r17690/10482
K 4
NEWS
V 23
file 6m.5ck.r16839/2057
K 6
README
V 20
file 7.0.r4421/96382
K 2
ai
V 22
dir 8.5ck.r17847/40798
K 10
autogen.sh
V 24
file 12o.5ck.r16223/7590
K 9
bootstrap
V 24
dir 2p5.5ck.r17613/37512
K 6
client
V 22
dir d.5ck.r17849/90016
K 6
common
V 23
dir p.5ck.r17839/185816
K 12
config.mac.h
V 20
file hb.0.r6045/5982
K 12
configure.ac
V 24
file 149.5ck.r17838/7952
K 4
data
V 22
dir w.5ck.r17846/20500
K 6
debian
V 22
dir 5w.5ck.r17748/2019
K 12
dependencies
V 23
dir 2yu.5ck.r17343/1868
K 11
diff_ignore
V 21
file qq.5ck.r17605/92
K 3
doc
V 22
dir k7.5ck.r17779/2661
K 10
fc_version
V 25
file 2lo.5en.r17784/12614
K 2
m4
V 23
dir 12p.5ck.r17653/2245
K 6
manual
V 23
dir 2m2.5ck.r17686/4876
K 7
modinst
V 23
dir 4pj.5ck.r17820/1928
K 2
po
V 23
dir fs.5ck.r17840/58175
K 7
scripts
V 23
dir 2yo.5bk.r14810/1300
K 6
server
V 22
dir z.5ck.r17847/38711
K 10
stamp-h.in
V 19
file 80.0.r1125/241
K 5
tests
V 22
dir 2g9.5ck.r15661/767
K 7
utility
V 22
dir 1c.5ck.r17838/7721
K 3
vms
V 21
dir u9.0.r11105/70719
K 5
win32
V 24
dir 2eu.5bk.r13732/30345
END
ENDREP
id: 3.5ck.r17849/91563
type: dir
pred: 3.5ck.r17847/42342
count: 13338
text: 17849 90249 1301 1301 303ee70c5012a3f1ac947d9f78a3de7f
props: 17175 3052 264 0 91336f1f63d2f606e65376614b5c72e4
cpath: /trunk
copyroot: 15280 /trunk

PLAIN
K 8
branches
V 19
dir 1.0.r17848/7575
K 4
tags
V 21
dir 2.0.r17599/826191
K 5
trunk
V 22
dir 3.5ck.r17849/91563
K 7
website
V 18
dir 3ge.0.r12388/0
END
ENDREP
id: 0.0.r17849/91955
type: dir
pred: 0.0.r17848/7895
count: 17849
text: 17849 91790 152 152 19b8229c3fe55fd49da925b0e89d1267
cpath: /
copyroot: 0 /

2kr.5ck.t17847-1 modify true false /trunk/client/gui-ftwl/gui_main.c

ev.5ck.t17847-1 modify true false /trunk/client/include/gui_main_g.h

4jw.5ck.t17847-1 modify true false /trunk/client/update_queue.c

n4.5ck.t17847-1 modify true false /trunk/client/gui-stub/gui_main.c

bm.5ck.t17847-1 modify true false /trunk/client/gui-xaw/gui_main.c

n.5ck.t17847-1 modify true false /trunk/client/packhand.c

16y.5ck.t17847-1 modify true false /trunk/client/gui-sdl/chatline.c

10k.5ck.t17847-1 modify true false /trunk/client/gui-gtk-2.0/gui_main.c

y3.5ck.t17847-1 modify true false /trunk/client/gui-win32/gui_main.c


91955 92104
