DELTA 4313 12652 1924
SVN  q¾ p©0 …8  m…7« `†   Y†t€D G €W Jˆ €ŠO G  Zš|€ƒ F‹|€U G € Jˆ €†7 G €	 Jˆ €‡ G  ‚2“,€^ G  Zš| ‚-™_® G €O Jˆ €ƒ_#include <time.h>

#include <gdk/gdkkeysymsivclient.h"
#include "climisc.h"#include "pages.h"

struct genlist *history_list;
int history_pos;

****
  Helper function to determine if a given client input line is intended as
  a "plain" public message. Note that messages prefixed with : are a
  special case (explicit public messages), and will return FALSE.
/
static bool is_plain_public_message(const char *s)
{
  /* FIXME: These prefix definitions are duplicated in the server. */
  const char ALLIES_CHAT_PREFIX = '.';
  const char SERVER_COMMAND_PREFIX = '/';
  const char MESSAGE_PREFIX = ':';

  const char *p;

  /* If it is a server command or an explicit ally
   * message, then it is not a public message. */
  if (s[0] == SERVER_COMMAND_PREFIX || s[0] == ALLIES_CHAT_PREFIX) {
    return FALSE;
  }

  /* It might be a private message of the form
   *   'player name with spaces':the message
   * or with ". So skip past the player name part. */
  if (s[0] == '\'' || s[0] == '"') {
    p = strchr(s + 1, s[0]);
  } else {
    p = s;
  }

  /* Now we just need to check that it is not a private
   * message. If we encounter a space then the preceeding
   * text could not have been a user/player name (the
   * quote check above eliminated names with spaces) so
   * it must be a public message. Otherwise if we encounter
   * the message prefix : then the text parsed up until now
   * was a player/user name and the line is intended as
   * a private message (or explicit public message if the
   * first character is :). */
  while (p != NULL && *p != '\0') {
    if (my_isspace(*p)) {
      return TRUE;
    } else if (*p == MESSAGE_PREFIX) {
      return FALSE;
    }
    p++;
  }
  return TRUE;
}


inputline_return(GtkEntry *w, gpointer data)
{
  const char *theinput;

  theinput = gtk_entry_get_text(w);
  
  if (*theinput) {
    if (client_state() == C_S_RUNNING && allied_chat_only
        && is_plain_public_message(theinput)) {
      char buf[MAX_LEN_MSG];
      my_snprintf(buf, sizeof(buf), ". %s", theinput);
      send_chat(buf);
    } else {
      send_chat(theinput);
    }

    if (genlist_size( = genlist_get(history_list, -1);
      genlist_unlink(history_list, data);
      free(data);
    }

    genlist_prepend(history_list, mystrdup(theinput));
    history_pos=-1;
  }

  gtk_entry_set_text(w, "");
}

****
  Scroll a textview so that the given mark is visible, but only if the
  scroll window containing the textview is very close to the bottom. The
  text mark 'scroll_target' should probably be the first character of the
  last line in the text buffer.
/
static void scroll_if_necessary(GtkTextView *textview,
                                GtkTextMark *scroll_target)
{
  GtkWidget *sw;
  GtkAdjustment *vadj;
  gdouble val, max, upper, page_size;

  g_return_if_fail(textview != NULL);
  g_return_if_fail(scroll_target != NULL);

  sw = gtk_widget_get_parent(GTK_WIDGET(textview));
  g_return_if_fail(sw != NULL);
  g_return_if_fail(GTK_IS_SCROLLED_WINDOW(sw));

  vadj = gtk_scrolled_window_get_vadjustment(GTK_SCROLLED_WINDOW(sw));
  val = gtk_adjustment_get_value(GTK_ADJUSTMENT(vadj));
  g_object_get(G_OBJECT(vadj), "upper", &upper,
               "page-size", &page_size, NULL);
  max = upper - page_size;
  if (max - val < 10.0) {
    gtk_text_view_scroll_to_mark(GTK_TEXT_VIEW(textview), scroll_target,
                                 0.0, TRUE, 1.0, 0.0);
  }
}

****
  Appends the string to the chat output window.  The string should be
  inserted on its own line, although it will have no newline.
/
void real_append_output_window(const char *astring, int conn_id)
{
  GtkTextBuffer *buf;
  GtkTextIter iter;
  GtkTextMark *mark;

  buf = message_buffer;
  gtk_text_buffer_get_end_iter(buf, &iter);
  gtk_text_buffer_insert(buf, &iter, "\n", -1);
  mark = gtk_text_buffer_create_mark(buf, NULL, &iter, TRUE);

  if (show_chat_message_time) {
    char timebuf[64];
    time_t now;
    struct tm *now_tm;

    now = time(NULL);
    now_tm = localtime(&now);
    strftime(timebuf, sizeof(timebuf), "[%H:%M:%S] ", now_tm);
    gtk_text_buffer_insert(buf, &iter, timebuf, -1);
  }

  gtk_text_buffer_insert(buf, &iter, astring, -1);

  if (main_message_area) {
    scroll_if_necessary(GTK_TEXT_VIEW(main_message_area), mark);
  }
  if (start_message_area) {
    scroll_if_necessary(GTK_TEXT_VIEW(start_message_area), mark);
  }
  gtk_text_buffer_delete_mark(buf, mark);

  append_network_statusbar(astring, FALSE);
}


  GtkTextIter start, end;
  gchar *txt;

  gtk_text_buffer_get_bounds(message_buffer, &start, &end);
  txt = gtk_text_buffer_get_text(message_buffer, &start, &end, TRUE);

  write_chatline_content(txt);
  g_free(txt);
}

buffer_set_text(message_buffer, text, -1);
}

****
  Scrolls the pregame and in-game chat windows all the way to the bottom.
/
void chatline_scroll_to_bottom(void)
{
  GtkTextIter end;

  if (!message_buffer) {
    return;
  }
  gtk_text_buffer_get_end_iter(message_buffer, &end);

  if (main_message_area) {
    gtk_text_view_scroll_to_iter(GTK_TEXT_VIEW(main_message_area),
                                 &end, 0.0, TRUE, 1.0, 0.0);
  }
  if (start_message_area) {
    gtk_text_view_scroll_to_iter(GTK_TEXT_VIEW(start_message_area),
                                 &end, 0.0, TRUE, 1.0, 0.0);
  }
}
ENDREP
DELTA 10570 0 10980
SVN  ƒ˜K„–…=¬s ‡u ª O‡q‡ *‰1Ž xŠJˆ ƒ‹3ƒ „/Ž'€V 	’S€I ‚2“\ 0–– ƒx—S€ Œ3›H€— ƒ§q… sª_« 2¬P¡ „n®€G ‚²m€  Mñ  ‰¶h€j FÂ@€o ‚åb ‚¿o€p S‚Š  ˆLÃ€) _‚õ}„ FÂ@ NËE G €r FÂ@€0 Q‚¾?½ FÂ@€ V‚¾:€W FÂ@€ƒ4 U‚¾:„ FÂ@€™G ƒØ€ˆ `Øª FÂ@€‡p `‚õ} µ3í6€- Hƒ ´ FÂ@ „i¤}§ +ª€ ˆ`«,€y ¥#´
 ‰GÛT€` …|æz¯ JìqŠ 9î@Š ƒ=ï~€A ‚ó€F ‚Aôz€p =÷6€‚u ƒù2„ rü]€n ƒlþL€z ?‚ƒ€ƒq ƒG‚„S G €, FÂ@€ Q‚Š €C FÂ@º Q‚Š º FÂ@€M Oñ ” FÂ@€‚  ‚k‚‰[€* ™#‚Œ=€f &‚¥}† X‚§"€‚ {‚ª%¦ FÂ@— Q‚¾? 3‚¬ €“c ‚¶1€‹| a‚º$€ƒP \‚½>Œ |‚¾ …‚Ï{¥ Š_‚Õ€„  _‚õ}„ FÂ@ ƒe‚ç@ ‚
‚ñ³ ‡x‚ó6µ FÂ@€l R‚Š „ FÂ@… A°@ Š(‚ü>­ FÂ@€ S‚Š €r FÂ@€C G‚Š  ‚2ƒ†f J‚¾: Ž`ƒ‰k G €A FÂ@€‚k Q‚Š €r FÂ@€‚G S‚Š € FÂ@€ƒB V‚¾:³ FÂ@€@fdef GGZ_GTK
#  include <ggz-gtk.h>
#endifunitlisnectdlg_commongzclientextbool show_chat_message_time = FALSE;
bool split_bottom_notebook = FALSE;
bool new_messages_go_to_top = FALSE;
bool show_message_window_buttons = TRUE;
bool metaserver_tab_first = FALSE;
bool allied_chat_only = FALS, *right_notebook;
GtkWidget *map_widget;
static GtkWidget *bottom_hpanedGC *selectionTreeStore *conn_model;static void split_bottom_notebook_callback(struct client_option *op);
static void allied_chat_only_callback(struct client_option *op),
  GEN_BOOL_OPTION(show_chat_message_time,
                  N_("Show time for each chat message"),
                  N_("If this option is enabled then all chat messages "
                     "will be prefixed by a time string of the form "
                     "[hour:minute:second]."),
                  COC_INTERFACE),
  GEN_BOOL_OPTION_CB(split_bottom_notebook,
                     N_("Split bottom notebook area"),
                     N_("Enabling this option will split the bottom "
                        "notebook into a left and right notebook so that "
                        "two tabs may be viewed at once."),
                     COC_INTERFACE, split_bottom_notebook_callback),
  GEN_BOOL_OPTION(new_messages_go_to_top,
                  N_("New message events go to top of list"),
                  N_("If this option is enabled, new events in the "
                     "message window will appear at the top of the list, "
                     "rather than being appended at the bottom."),
                  COC_INTERFACE),
  GEN_BOOL_OPTION(show_message_window_buttons,
                  N_("Show extra message window buttons"),
                  N_("If this option is enabled, there will be two "
                     "buttons displayed in the message window for "
                     "inspecting a city and going to a location. If this "
                     "option is disabled, these buttons will not appear "
                     "(you can still double-click with the left mouse "
                     "button or right-click on a row to inspect or goto "
                     "respectively). This option will only take effect "
                     "once the message window is closed and reopened."),
                  COC_INTERFACE),
  GEN_BOOL_OPTION(metaserver_tab_first,
                  N_("Metaserver tab first in network page"),
                  N_("If this option is enabled, the metaserver tab will "
                     "be the first notebook tab in the network page. This "
                     "option requires a restart in order to take effect."),
                  COC_NETWORK),
  GEN_BOOL_OPTION_CB(allied_chat_only,
                     N_("Plain chat messages are sent to allies only"),
                     N_("If this option is enabled, then plain messages "
                        "typed into the chat entry while the game is "
                        "running will only be sent to your allies. "
                        "Otherwise plain messages will be sent as "
                        "public chat messages. To send a public chat "
                        "message with this option enabled, prefix the "
                        "message with a single colon ':'. This option "
                        "can also be set using a toggle button beside "
                        "the chat entry (only visible in multiplayer "
                        "games)."),
                     COC_NETWORK, allied_chat_only_top;static GtkWidget *allied_chat_toggle_button, ggz_input_id;
gint cur_x, cur_ystatic gboolean mouse_scroll_mapcanvas(GtkWidget *w, GdkEventScroll *evboolean quit_dialog_callback(void);

static void allied_chat_button_toggled(GtkToggleButton *button,
                                       gpointer user_data);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 = gThis client has no special command line options\n\n"));

  fc_fprintf(stderr, _("Report bugs at %s.\n"), BUG_URLmap_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);...

****
  Idle callback for scrolling down the chatline.
  NB: Only to be used by queue_chatline_scroll_to_bottom().
****/
static gboolean chatline_scroll_callback(gpointer data)
{
  guint *pid = data;
  chatline_scroll_to_bottom();
  *pid = 0;
  return FALSE; /* Remove this idle function. */ Adds an idle callback to scroll the chatline to the bottom.
****/
static void queue_chatline_scroll_to_bottom(void)
{
  static guint id = 0;
  if (id == 0) {
    id = g_idle_add(chatline_scroll_callback, &id) 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) {
    queue_chatline_scroll_to_bottom();
    old_width = allocation->width;
    old_height = allocation->height...
****/
static gboolean keyboard_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;
  }

  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;
  };
(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.
     */
    gtk_notebook_set_current_page(GTK_NOTEBOOK(bottom_notebook), 0);
    gtk_widget_grab_focus(inputline);
    return TRUE;

  default:
    break;
  };

  if (GTK_WIDGET_HAS_FOCUS(map_canvas)) {
    return keyboard_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));
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.
hpaned, *sw, *text;
  GtkWidget *button
  /* stop mouse wheel notebook page switching. */
  g_signal_connect(notebook, "scroll_event",
		   G_CALLBACK(gtk_true), NULL);
#ifdef GGZ_GTK
  gtk_notebook_append_page(GTK_NOTEBOOK(notebook),
			   ggz_gtk_create_main_area(toplevel), NULL);
#endifmap_widget = gtk_table_new(2, 2, FALSE);

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

  frame = gtk_frame_new(NULL);
  gtk_table_attach(GTK_TABLE(map_widget
                                   |GDK_SCROLLmap_widgetmap_widgettoplevel, "enter_notify_event",
                   G_CALLBACK(leamap_canvas, "scroll_event",
                   G_CALLBACK(mouse_scrollhpaned = gtk_hpaned_new();
  gtk_box_pack_start(GTK_BOX(avbox), hpaned, TRUE, TRUE, 0);
  bottom_hpaned = hpanedpaned_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);
  if (split_bottom_notebook) {
    gtk_paned_pack2(GTK_PANED(hpaned), right_notebook, TRUE, TRUE);
  }(_("  g_signal_connect(text, "size-allocate",
                   G_CALLBACK(main_message_area_size_allocate), NULLhbox = gtk_hbox_new(FALSE, 4);
  gtk_box_pack_start(GTK_BOX(vbox), hbox, FALSE, FALSE, 3);

  inputline = gtk_entry_new();  gtk_box_pack_start(GTK_BOX(hbox), inputline, TRUE, TRUE, 0);

  button = gtk_toggle_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),
                               allied_chat_only);
  g_signal_connect(button, "toggled",
                   G_CALLBACK(allied_chat_button_toggled), NULL);
  gtk_box_pack_start(GTK_BOX(hbox), button, FALSE, FALSE, 2);
  allied_chat_toggle_button = button#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_begin(**
  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
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_setlocale(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#endifinit_mapcanvas_and_overview();

  tileset_use_prefered_theme(tileset);

  gtk_widget_show(toplevel);

  /* assumes toplevel showing */
  set_client_state(C_S_PREPARING);
  
  /* assumes client_state is set */
  timer_id = g_timeout_add(TIMER_INTERVAL, timer_callback, NULL Do any necessary UI-specific cleanup
****/
void ui_exit()
{
[player_count()];

  if (game.player_ptr) {
    char *text;

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

      players_iterate(pplayer) {
	if (!pplayer->ai.control && !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"));
  }

  /* Observers and detached connections cannot start game. */
  gtk_widget_set_sensitive(ready_button,
                           (!aconnection.observer && game.player_ptr));

  if (!game.player_ptr) {
    gtk_stockbutton_set_label(nation_button, _("_Take Player"));
    gtk_widget_set_sensitive(nation_button, TRUE);
  } else {
    gtk_stockbutton_set_label(nation_button, _("Pick _Nation"));
    /* Sensitive iff client can select nation. */
    gtk_widget_set_sensitive(nation_button,
                             game.info.is_new_game && !aconnection.observer);
  }

  if (aconnection.player || !aconnection.observer) {
    gtk_stockbutton_set_label(take_button, _("_Observe"));
  } else {
    gtk_stockbutton_set_label(take_button, _("Do not _observe"));
  }

  gtk_tree_view_column_set_visible(record_col, (with_ggz || in_ggz));
  gtk_tree_view_column_set_visible(rating_col, (with_ggz || in_ggz));

  if (C_S_RUNNING != client_state()) {
    bool is_ready;
    const char *nation, *leader, *team;
    char name[MAX_LEN_NAME + 4], rating_text[128], record_text[128];
    int rating, wins, losses, ties, forfeits;

    gtk_tree_store_clear(conn_model);
    players_iterate(pplayer) {
      enum cmdlevel_id access_level = ALLOW_NONE;
      int conn_id = -1;

      conn_list_iterate(pplayer->connections, pconn) {
        access_level = MAX(pconn->access_level, access_level);
      } conn_list_iterate_end;

      if (pplayer->ai.control) {
	sz_strlcpy(name, _("<AI>"));
	switch (pplayer->ai.skill_level) {
	case 2:
	  sz_strlcpy(name, _("<Novice AI>"));
	  break;
	case 3:
	  sz_strlcpy(name, _("<Easy AI>"));
	  break;
	case 5:
	  sz_strlcpy(name, _("<Normal AI>"));
	  break;
	case 7:
	  sz_strlcpy(name, _("<Hard AI>"));
	  break;
	}
      } else if (access_level <= ALLOW_INFO) {
	sz_strlcpy(name, pplayer->username);
      } else {
        my_snprintf(name, sizeof(name), "%s*", pplayer->username)        if (pplayer->was_created) {
          leader = player_name(pplayer);
        } else {
          leader = "";
        }
      } else {
	nation = nation_adjective_for_player(pplayer);
	leader = player_name(pplayer);
      }
      team = pplayer->team ? team_get_name(pplayer->team) : "";

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

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

      conn_list_iterate(game.est_connections, pconn) {
	if (pconn->player == pplayer && !pconn->observer) {
	  assert(conn_id == -1);
	  conn_id = pconn->id;
	}
      } conn_list_iterate_end;

      gtk_tree_store_append(conn_model, &it[player_index(pplayer)], NULL);
      gtk_tree_store_set(conn_model, &it[player_index(pplayer)],
			 0, player_number(pplayer),
			 1, name,
			 2, is_ready,
			 3, leader,
			 4, nation,
			 5, team,
			 6, record_text,
			 7, rating_text,
			 8, conn_idGtkTreeIter conn_it, *parent;

      if (pconn->player && !pconn->observer) {
	continue; /* Already listed above. */
      }
      sz_strlcpy(name, pconn->username);
      is_ready = TRUE;
      nation = "";
      leader = "";
      team = pconn->observer ? _("Observer") : _("Detached");
      parent = pconn->player ? &it[player_index(pconn->player)] : NULL;

      gtk_tree_store_append(conn_model, &conn_it, parent);
      gtk_tree_store_set(conn_model, &conn_8, pconn->id  unit_id_top = punit ? punit->id : 0{
    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 (punit && unit_owner(punit) == game.player_ptr) {
    /* Unit shouldn't be NULL but may be owned by an ally. */
    set_unit_focus(punit);
  }
...
		   "GtkLabel::label", get_info_label_text_popup()  Callback for when the GGZ socket has data pending.
****/
static void get_ggz_input(gpointer data, gint fid, GdkInputCondition condition)
{
  input_from_ggz(fid...
****/**********
  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_idclient_exit()
******
  Option callback for the 'split_bottom_notebook' option.
******/
static void split_bottom_notebook_callback(struct client_option *op)
{
  popdown_meswin_dialog();
  if (*op->p_bool_value) {
    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 'allied_chat_only' option. This updates the state
  of the associated toggle button.
******/
static void allied_chat_only_callback(struct client_option *op)
{
  GtkWidget *button;

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

  gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(button),
                               *op->p_bool_value 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;
  g_return_if_fail(button != NULL);
  g_return_if_fail(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),
                                 allied_chat_only) Handle a toggle of the "Allies Only" chat button.
****/
static void allied_chat_button_toggled(GtkToggleButton *button,
                                       gpointer user_data)
{
  allied_chat_only = gtk_toggle_button_get_active(button);
}
ENDREP
DELTA 15524 830 1391
SVN  š0›t ‰ €[ T‰&™ >˜rshow_message_window_buttons;
extern bool metaserver_tab_first;
extern bool allied_chat_onlyvoid refresh_chat_buttonsENDREP
DELTA 14851 0 30291
SVN  …‚X…ŸU‚/·T  €M ‚+	€P b£ Pß@ ´/‘G€† Kƒ¿}€ƒ |Ì1• Uâ€‚} Rß> ÐV€ƒi aå6 ‚Ö… oØ €s Ùn´ Uâ€‚S Q‚‘@£ Nâ ¾à~€l Uâ€… Xõ ³ aŽ|‡ f„Ý0€„4 t£)€h Q‚‘@† b©~ …¦€
 w®'€‚K „F°o€‚e „0¶w€‚P „I»x€‚e ƒ%Â€- Åd€X NÇm´ ˜Ê€„; H„ï> g¹8² /„­rœ ÄmãwŠ í\‚¨c€{ Žxƒ–kš •9ƒ¥a— ˆ„»o€t ‚w„Ä¸ »a„ÆwListStore *server_playerlist_store;
static GtkWidget *server_playerlist_view;meta_scan_timer, lan_scan_timer;
static struct server_scan *meta_scan, *lan_scanstatic GtkWidget *start_page_entry;enum server_scan_type sstype,
                               const struct server_list *list)
{
  GtkTreeSelection *sel = NULL;
  GtkTreeView *view;
  GtkTreeIter it;
  GtkListStore *store;
  const gchar *host, *portstr;
  int port;

  switch (sstype) {
  case SERVER_SCAN_LOCAL:
    sel = lan_selection;
    break;
  case SERVER_SCAN_GLOBAL:
    sel = meta_selection;
    break;
  default:
    break;
  }

  if (!sel) {
    return;
  }

  view = gtk_tree_selection_get_tree_view(sel);
  store = GTK_LIST_STORE(gtk_tree_view_get_model(view));
  gtk_list_store_clear(store);

  if (!list) {
    return;
  }

  host = gtk_entry_get_text(GTK_ENTRY(network_host));
  portstr = gtk_entry_get_text(GTK_ENTRY(network_port));
  port = atoi(portstr);

  server_list_iterate(list, pserver) {                       0, pserver->host,
                       1, pserver->port,
                       2, pserver->version,
                       3, _(pserver->state),
                       4, pserver->nplayers,
                       5, pserver->message,
                       -1);
    if (strcmp(host, pserver->host) == 0 && port == pserver->port) {
      gtk_tree_selection_select_iter(selFree the server scansvoid destroy_server_scans(void)
{
  if (meta_scan) {
    server_scan_finish(meta_scan);
    meta_scan = NULL;
  }
  if (meta_scan_timer != 0) {
    g_source_remove(meta_scan_timer);
    meta_scan_timer = 0;
  }
  if (lan_scan) {
    server_scan_finish(lan_scan);
    lan_scan = NULL;
  }
  if (lan_scan_timer != 0) {
    g_source_remove(lan_scan_timer);
    lan_scan_timer = 0;
  }Tcheck_server_scan(gpointer data)
{
  struct server_scan *scan = data;
  const struct server_list *servers;
  enum server_scan_status stat;

  if (!scan) {
    return FALSE;
  }

  stat = server_scan_poll(scan);
  if (stat >= SCAN_STATUS_PARTIAL) {
    enum server_scan_type type;
    type = server_scan_get_type(scan);
    servers = server_scan_get_list(scan);
    update_server_list(type, servers);
  }

  if (stat == SCAN_STATUS_ERROR || stat == SCAN_STATUS_DONE) {
    return FALSE;
  }ERROR_scan);
    lan_scan = NULL;
    break;
  case SERVER_SCAN_GLOBAL:
    server_scan_finish(meta_scan);
    meta_scanStop and restart the metaserver and lan server scansvoid update_network_lists(void)
{
  destroy_server_scans();

  meta_scan = server_scan_begin(SERVER_SCAN_GLOBAL, server_scan_error);
  meta_scan_timer = g_timeout_add(200, check_server_scan, meta_scan);

  lan_scan = server_scan_begin(SERVER_SCAN_LOCAL, server_scan_error);
  lan_scan_timer = g_timeout_add(500, check_server_scan, lan_scan
  network connection state definesFills the server player list with the players in the given server, or
  clears it if there is no player datavoid update_server_playerlist(const struct server *pserver)
{
  GtkListStore *store;
  GtkTreeIter iter;
  int n, i;

  store = server_playerlist_store;
  g_return_if_fail(store != NULL);

  gtk_list_store_clear(store);
  if (!pserver || !pserver->players) {
    return;
  }

  n = pserver->nplayers;
  for (i = 0; i < n; i++) {
    gtk_list_store_append(store, &iter);
    gtk_list_store_set(store, &iter,
                       0, pserver->players[i].name,
                       1, pserver->players[i].type,
                       2, pserver->players[i].host,
                       3, pserver->players[i].nation,
                       -1Sets the host, port and player list of the selectednetworkonst char *host;
  int port;
  char portstr[32];
  const struct server *pserver = NULL;

  if (!gtk_tree_selection_get_selected(select, &model, &it)) {
    return;
  }

  if (select == meta_selection) {
    GtkTreePath *path;
    const struct server_list *servers;

    servers = server_scan_get_list(meta_scan);
    path = gtk_tree_model_get_path(model, &it);
    if (servers && path) {
      gint pos = gtk_tree_path_get_indices(path)[0];
      pserver = server_list_get(servers, pos);
    }
    gtk_tree_path_free(path);
  }
  update_server_playerlist(pserver);my_snprintf(portstr, sizeof(portstr), "%d", port);
  gtk_entry_set_text(GTK_ENTRY(network_port), portstr
  updbox, *sbox, *bbox, *hbox, *notebook;
  GtkWidget *button, *label, *view, *sw, *table;
  GtkTreeSelection *selection;
  GtkListStore *store/* host */
                                 G_TYPE_INT,       /* port */
                                 G_TYPE_STRING,    /* version */
                                 G_TYPE_STRING,    /* state */
                                 G_TYPE_INT,       /* nplayers */
                                 G_TYPE_STRING);   /* message */add_treeview_column(view, _("Server Name"), G_TYPE_STRING, 0);
  add_treeview_column(view, _("Port"), G_TYPE_INT, 1);
  add_treeview_column(view, _("Version"), G_TYPE_STRING, 2);
  add_treeview_column(view, _("Status"), G_TYPE_STRING, 3);
  add_treeview_column(view, _("Players"), G_TYPE_INT, 4);
  add_treeview_column(view, _("Comment"), G_TYPE_STRING, 5);/* host */
                                  G_TYPE_INT,       /* port */
                                  G_TYPE_STRING,    /* version */
                                  G_TYPE_STRING,    /* state */
                                  G_TYPE_INT,       /* nplayers */
                                  G_TYPE_STRING);   /* message */add_treeview_column(view, _("Server Name"), G_TYPE_STRING, 0);
  add_treeview_column(view, _("Port"), G_TYPE_INT, 1);
  add_treeview_column(view, _("Version"), G_TYPE_STRING, 2);
  add_treeview_column(view, _("Status"), G_TYPE_STRING, 3);
  add_treeview_column(view, _("Players"), G_TYPE_INT, 4);
  add_treeview_column(view, _("Comment"), G_TYPE_STRING, 5);if (metaserver_tab_first) {
    gtk_notebook_prepend_page(GTK_NOTEBOOK(notebook), sw, label);
  } else {
    gtk_notebook_append_page(GTK_NOTEBOOK(notebook), sw, label);
  }hbox = gtk_hbox_new(FALSE, 12);
  gtk_box_pack_start(GTK_BOX(sbox), hbox, FALSE, FALSE, box_pack_start(GTK_BOX(hbox), table, FALSE, FALSE, 0  /* Server player list. */
  store = gtk_list_store_new(4, G_TYPE_STRING,
                             G_TYPE_STRING,
                             G_TYPE_STRING,
                             G_TYPE_STRING);
  server_playerlist_store = store;

  view = gtk_tree_view_new_with_model(GTK_TREE_MODEL(store));
  add_treeview_column(view, _("Name"), G_TYPE_STRING, 0);
  add_treeview_column(view, _("Type"), G_TYPE_STRING, 1);
  add_treeview_column(view, _("Host"), G_TYPE_STRING, 2);
  add_treeview_column(view, _("Nation"), G_TYPE_STRING, 3);
  server_playerlist_view = viewbox_pack_start(GTK_BOX(hbox), sw, TRUE, TRUE, 0);
sbox), bbox, FALSE, FALSE, 0
				 "%s"                                              -1, Q_("?player:Leader"),
                                              rend,  start_page_entry = entrydestroy_server_scans();  break;
  case PAGE_START:
    gtk_widget_grab_focus(start_page_entry);
    chatline_scroll_to_bottom();
    break;chatline_scroll_to_bottom();
    refresh_chat_buttons();ENDREP
id: 10k.59e.r15560/35965
type: file
pred: 10k.59e.r15526/1284
count: 192
text: 15560 5449 22848 68479 720c42352998b135eec7030a4705080e
props: 11057 38870 112 0 ec3aa248409009be6c82cab2c7e95ef5
cpath: /branches/S2_1/client/gui-gtk-2.0/gui_main.c
copyroot: 11448 /branches/S2_1

id: 10l.59e.r15560/36242
type: file
pred: 10l.59e.r15526/1555
count: 34
text: 15560 28324 144 3480 e7b3f2e8a6bd6a80618db6b85aafa713
props: 10096 14654 111 0 1912998302effd94f7d1c131050552ad
cpath: /branches/S2_1/client/gui-gtk-2.0/gui_main.h
copyroot: 11448 /branches/S2_1

id: 2pi.59e.r15560/36516
type: file
pred: 2pi.59e.r15548/52
count: 72
text: 15560 28496 7442 85973 176f72d8c43b5f986479bc3f5be1d24b
props: 11100 16432 111 0 622f1432038f91cce287c1d90e4f7964
cpath: /branches/S2_1/client/gui-gtk-2.0/pages.c
copyroot: 11448 /branches/S2_1

id: zw.59e.r15560/36787
type: file
pred: zw.59e.r15541/164
count: 16
text: 15560 0 5420 7936 43908ec90ff5c5461a2b4670dd9a405c
props: 9577 108867 111 0 d4514082fc7e52be026d3360dec4dcb0
cpath: /branches/S2_1/client/gui-gtk-2.0/chatline.c
copyroot: 11448 /branches/S2_1

PLAIN
K 11
Makefile.am
V 24
file zu.59e.r13237/16499
K 8
canvas.c
V 23
file 2y6.0.r10518/13194
K 8
canvas.h
V 23
file 2y7.0.r10096/14437
K 16
caravan_dialog.c
V 27
file 376.59e.r14210/2264067
K 10
chatline.c
V 24
file zw.59e.r15560/36787
K 10
chatline.h
V 23
file zx.59e.r15512/4966
K 15
choice_dialog.c
V 25
file 377.59e.r13482/23652
K 15
choice_dialog.h
V 25
file 378.59e.r12671/29728
K 9
citydlg.c
V 26
file zy.59e.r14210/2262946
K 9
citydlg.h
V 20
file zz.0.r5493/6351
K 9
cityrep.c
V 24
file 100.59e.r15536/3135
K 9
cityrep.h
V 22
file 101.0.r9098/11480
K 8
cma_fe.c
V 21
file 102.0.r11163/712
K 8
cma_fe.h
V 23
file 103.0.r10181/13675
K 8
colors.c
V 22
file 104.0.r10458/4290
K 8
colors.h
V 22
file 105.0.r10458/4652
K 12
connectdlg.c
V 22
file 106.0.r10804/2737
K 12
connectdlg.h
V 21
file 107.0.r7580/6878
K 9
dialogs.c
V 25
file 108.59e.r15267/37332
K 9
dialogs.h
V 22
file 109.0.r11212/7101
K 10
diplodlg.c
V 27
file 10a.59e.r14210/2265474
K 10
diplodlg.h
V 23
file 10b.0.r9577/108261
K 17
diplomat_dialog.c
V 27
file 36n.59e.r14210/2265186
K 9
finddlg.c
V 27
file 10c.59e.r14210/2266032
K 9
finddlg.h
V 22
file 2d0.0.r5989/22356
K 10
gamedlgs.c
V 24
file 10d.59e.r14224/9995
K 9
gotodlg.c
V 23
file 10e.59e.r15238/131
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 22
file 10i.0.r10800/1239
K 12
gtkpixcomm.h
V 22
file 10j.0.r10800/1606
K 10
gui_main.c
V 25
file 10k.59e.r15560/35965
K 10
gui_main.h
V 25
file 10l.59e.r15560/36242
K 11
gui_stuff.c
V 25
file 10m.59e.r15504/13691
K 11
gui_stuff.h
V 25
file 10n.59e.r15504/14235
K 11
happiness.c
V 27
file 10o.59e.r14245/1007948
K 11
happiness.h
V 23
file 10p.0.r9577/106064
K 9
helpdlg.c
V 25
file 10q.59e.r14257/27285
K 9
helpdlg.h
V 23
file 10r.0.r4313/267882
K 10
inputdlg.c
V 20
file 10s.0.r8860/225
K 10
inputdlg.h
V 21
file 10t.0.r7580/3991
K 10
inteldlg.c
V 25
file 10u.59e.r14257/27010
K 10
inteldlg.h
V 23
file 2d1.0.r9577/108626
K 9
mapctrl.c
V 25
file 10v.59e.r15508/19154
K 9
mapctrl.h
V 25
file 10w.59e.r14151/14206
K 9
mapview.c
V 24
file 10x.59e.r15496/1989
K 9
mapview.h
V 23
file 10y.0.r11337/79174
K 6
menu.c
V 25
file 10z.59e.r15538/10964
K 6
menu.h
V 22
file 110.0.r4315/16581
K 12
messagedlg.c
V 22
file 111.0.r10731/6465
K 12
messagedlg.h
V 22
file 2d2.0.r5989/22693
K 12
messagewin.c
V 24
file 112.59e.r15542/3686
K 12
messagewin.h
V 23
file 113.0.r10108/19424
K 11
optiondlg.h
V 23
file 114.0.r4313/264106
K 7
pages.c
V 25
file 2pi.59e.r15560/36516
K 7
pages.h
V 25
file 2pj.59e.r11864/10321
K 8
plrdlg.c
V 24
file 115.59e.r14856/3161
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 24
file 118.59e.r15415/6790
K 10
repodlgs.h
V 21
file 119.0.r9098/9312
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 27
file 11c.59e.r14210/2266584
K 14
spaceshipdlg.h
V 23
file 11d.0.r9577/110090
K 8
sprite.c
V 23
file 2y8.0.r10141/28169
K 8
sprite.h
V 23
file 2y9.0.r10141/29270
K 11
theme_dlg.c
V 25
file 47e.59e.r13971/65944
K 8
themes.c
V 25
file 34x.59e.r13237/15684
K 13
tileset_dlg.c
V 25
file 45l.59e.r13971/66261
K 7
wldlg.c
V 24
file 11e.59e.r14978/9744
K 7
wldlg.h
V 21
file 11f.0.r7682/2202
END
ENDREP
id: zs.59e.r15560/40404
type: dir
pred: zs.59e.r15548/3659
count: 1052
text: 15560 37055 3336 3336 7f2144a92bbe23c4668327ecd2d72d04
props: 11108 11912 79 0 480bb3268560e84c2d6c8376c422c65e
cpath: /branches/S2_1/client/gui-gtk-2.0
copyroot: 11448 /branches/S2_1

PLAIN
K 11
Makefile.am
V 23
file 5f.59e.r13533/3400
K 6
agents
V 23
dir zf.59e.r15267/36264
K 11
attribute.c
V 24
file xh.59e.r13069/22716
K 11
attribute.h
V 19
file xi.0.r4715/844
K 7
audio.c
V 26
file 139.59e.r14019/355442
K 7
audio.h
V 22
file 13a.0.r10416/6162
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.59e.r13353/153791
K 11
audio_sdl.h
V 22
file 13g.0.r4452/26570
K 17
chatline_common.c
V 23
file 14q.0.r9577/151065
K 17
chatline_common.h
V 23
file 14r.0.r9577/151422
K 16
citydlg_common.c
V 24
file z4.59e.r15267/36519
K 16
citydlg_common.h
V 24
file z5.59e.r13911/39085
K 13
cityrepdata.c
V 23
file mb.59e.r15518/2949
K 13
cityrepdata.h
V 21
file mc.0.r9153/21475
K 11
civclient.c
V 22
file 2f.59e.r14567/206
K 11
civclient.h
V 24
file hz.59e.r14152/15223
K 8
climap.c
V 23
file 197.0.r11057/48047
K 8
climap.h
V 25
file 198.59e.r13916/11829
K 9
climisc.c
V 23
file d5.59e.r15502/5707
K 9
climisc.h
V 23
file i0.59e.r15502/5967
K 8
clinet.c
V 24
file hc.59e.r14161/24174
K 8
clinet.h
V 24
file i1.59e.r12485/13819
K 15
colors_common.c
V 27
file 33a.59e.r13033/1319887
K 15
colors_common.h
V 24
file 33b.59e.r13016/9994
K 19
connectdlg_common.c
V 23
file 2fw.59e.r15441/970
K 19
connectdlg_common.h
V 27
file 2fx.59e.r14210/2301973
K 9
control.c
V 24
file gz.59e.r15538/10707
K 9
control.h
V 24
file i2.59e.r15538/14844
K 11
ggzclient.c
V 25
file 394.59e.r12671/53764
K 11
ggzclient.h
V 25
file 395.59e.r12671/54072
K 6
goto.c
V 23
file vu.59e.r15516/7720
K 6
goto.h
V 24
file vv.59e.r15508/23547
K 8
gui-ftwl
V 23
dir 2k2.59e.r14470/8322
K 11
gui-gtk-2.0
V 23
dir zs.59e.r15560/40404
K 7
gui-mui
V 22
dir km.59e.r14357/8973
K 7
gui-sdl
V 24
dir 16t.59e.r15504/30216
K 8
gui-stub
V 25
dir mh.59e.r14210/2305109
K 9
gui-win32
V 23
dir np.59e.r15504/24765
K 7
gui-xaw
V 22
dir 9o.59e.r15545/3617
K 10
helpdata.c
V 24
file h1.59e.r15415/10674
K 10
helpdata.h
V 26
file i3.59e.r14233/1635572
K 7
include
V 23
dir b8.59e.r13744/70723
K 16
mapctrl_common.c
V 25
file 15m.59e.r15508/24065
K 16
mapctrl_common.h
V 23
file 15n.0.r11378/41712
K 16
mapview_common.c
V 24
file z2.59e.r15508/24334
K 16
mapview_common.h
V 24
file z3.59e.r15508/24604
K 19
messagewin_common.c
V 23
file 14s.0.r11057/47330
K 19
messagewin_common.h
V 23
file 14t.0.r8387/154818
K 9
options.c
V 24
file dc.59e.r15532/16411
K 9
options.h
V 24
file i4.59e.r15532/15894
K 17
overview_common.c
V 26
file 2yk.59e.r13925/192137
K 17
overview_common.h
V 21
file 2yl.0.r10927/997
K 10
packhand.c
V 23
file n.59e.r15532/16150
K 10
packhand.h
V 22
file i5.0.r10865/39236
K 14
packhand_gen.c
V 25
file 2fn.59e.r13744/60709
K 14
packhand_gen.h
V 25
file 2f3.59e.r13744/60977
K 15
plrdlg_common.c
V 27
file 14u.59e.r14210/2292817
K 15
plrdlg_common.h
V 23
file 14v.0.r10581/10242
K 17
repodlgs_common.c
V 23
file 11i.59e.r15167/339
K 17
repodlgs_common.h
V 25
file 11j.59e.r14161/23904
K 9
reqtree.c
V 24
file 2ym.59e.r14069/1075
K 9
reqtree.h
V 25
file 2yn.59e.r13482/23394
K 9
servers.c
V 25
file 33x.59e.r15504/30475
K 9
servers.h
V 25
file 33y.59e.r15504/13434
K 6
text.c
V 24
file 2g3.59e.r15482/5718
K 6
text.h
V 27
file 2g4.59e.r14245/1012129
K 15
themes_common.c
V 25
file 352.59e.r13237/37501
K 15
themes_common.h
V 25
file 353.59e.r13237/37764
K 10
tilespec.c
V 24
file hl.59e.r15508/23803
K 10
tilespec.h
V 23
file i6.59e.r15232/3345
END
ENDREP
id: d.59e.r15560/44064
type: dir
pred: d.59e.r15548/7315
count: 4153
text: 15560 40666 3385 3385 592d7a8adf5946fec49cd369f958d6ac
props: 8351 6991 78 0 33732c0866155f66d4d419b596dde5d8
cpath: /branches/S2_1/client
copyroot: 11448 /branches/S2_1

PLAIN
K 9
ABOUT-NLS
V 21
file fu.0.r3960/17632
K 7
AUTHORS
V 22
file 5u.59e.r13248/152
K 7
COPYING
V 19
file 1h.0.r9643/400
K 9
ChangeLog
V 24
file 6l.59e.r15344/97190
K 7
INSTALL
V 20
file 6.59e.r14673/94
K 11
Makefile.am
V 21
file 59.59e.r14919/55
K 4
NEWS
V 22
file 6m.59e.r13823/201
K 6
README
V 20
file 7.0.r4421/96382
K 2
ai
V 21
dir 8.59e.r15397/4426
K 5
amiga
V 21
dir kd.0.r11105/71924
K 10
autogen.sh
V 23
file 12o.59e.r15553/627
K 9
bootstrap
V 24
dir 2p5.59e.r14780/13984
K 6
client
V 22
dir d.59e.r15560/44064
K 6
common
V 21
dir p.59e.r15557/4472
K 12
config.mac.h
V 20
file hb.0.r6045/5982
K 12
configure.ac
V 24
file 149.59e.r15425/2420
K 4
data
V 22
dir w.59e.r15530/10475
K 6
debian
V 22
dir 5w.59e.r13442/7411
K 12
dependencies
V 21
dir 2yu.0.r11108/3256
K 11
diff_ignore
V 23
file qq.59e.r13228/2550
K 3
doc
V 22
dir k7.59e.r14600/3039
K 4
intl
V 21
dir f4.0.r11105/23499
K 2
m4
V 23
dir 12p.59e.r15438/2236
K 6
manual
V 26
dir 2m2.59e.r14210/2260417
K 2
po
V 23
dir fs.59e.r15555/40514
K 7
scripts
V 23
dir 2yo.59e.r14811/1235
K 6
server
V 22
dir z.59e.r15484/12893
K 10
stamp-h.in
V 19
file 80.0.r1125/241
K 5
tests
V 23
dir 2g9.59e.r13446/1204
K 7
utility
V 23
dir 1c.59e.r15507/26308
K 10
version.in
V 23
file 2lo.59e.r15346/193
K 3
vms
V 21
dir u9.0.r11105/70719
K 5
win32
V 24
dir 2eu.59e.r13979/10719
END
ENDREP
id: 3.59e.r15560/45649
type: dir
pred: 3.59e.r15557/6057
count: 11518
text: 15560 44310 1326 1326 66e870b2ffa3693a91367b9206b8afb0
props: 11109 0 255 0 8cbc80e0da9c47b05b8ffee17ea9b0f1
cpath: /branches/S2_1
copyroot: 11448 /branches/S2_1

PLAIN
K 5
S1_14
V 20
dir 3.21.r15224/4547
K 4
S2_0
V 21
dir 3.10x.r15558/5273
K 4
S2_1
V 22
dir 3.59e.r15560/45649
K 11
freeciv-web
V 22
dir 3.5bl.r13594/14918
END
ENDREP
id: 1.0.r15560/46059
type: dir
pred: 1.0.r15558/5681
count: 3449
text: 15560 45888 158 158 eecb37f581ef8ea3d8ba1ba0fb27ece2
cpath: /branches
copyroot: 0 /

PLAIN
K 8
branches
V 20
dir 1.0.r15560/46059
K 4
tags
V 19
dir 2.0.r15347/4951
K 5
trunk
V 22
dir 3.5ck.r15559/17370
K 7
website
V 18
dir 3ge.0.r12388/0
END
ENDREP
id: 0.0.r15560/46379
type: dir
pred: 0.0.r15559/17757
count: 15560
text: 15560 46215 151 151 60988110b5dd9a7440d45c5ddc697d49
cpath: /
copyroot: 0 /

zw.59e.t15559-1 modify true false /branches/S2_1/client/gui-gtk-2.0/chatline.c

10k.59e.t15559-1 modify true false /branches/S2_1/client/gui-gtk-2.0/gui_main.c

10l.59e.t15559-1 modify true false /branches/S2_1/client/gui-gtk-2.0/gui_main.h

2pi.59e.t15559-1 modify true false /branches/S2_1/client/gui-gtk-2.0/pages.c


46379 46529
