+2003-01-04 Jordi Mallach <jordi@sindominio.net>
+
+ * Big patch from Dani Carbonell, who saved our day and fixes most of
+ the pending issues in 0.5.0.
+
+ * src/commands.c: add stock icons to the toolbar. Needs better
+ icons, still.
+ (about_command): update author list.
+
+ * src/dialogs.c (teamdialog_button): convert the team name to iso
+ text before sending to the server.
+ (connectdialog_button): likewise, for team, nick and server names.
+ (connectdialog_new): convert nick and team names to UTF-8 before
+ displaying.
+ * src/fields.c (fields_setlabel): likewise.
+ (fields_gmsginputadd): convert field messages to UTF-8 before
+ displaying.
+ (fields_gmsginputback): get previous char in UTF-8.
+ * src/misc.c (textbox_addtext): replace g_utf8_normalize with
+ g_locale_to_utf8.
+ (nocolor): remove stripping of high characters, as we're doing UTF-8.
+ * src/partyline.c (partyline_namelabel): convert nick and team names
+ to UTF-8.
+ (partyline_playerlist): likewise.
+ (textentry): convert input from UTF-8 to ISO-8859-1.
+ (entrykey): likewise.
+ * src/tetrinet.c (tetrinet_key): convert messages to iso text before
+ sending them to the server.
+
+ * dialogs.c (prefdialog_drawkeys): port keys CList to GtkTreeView.
+ (prefdialog_clistupdate): new function, replaces
+ prefdialog_clistselect and prefdialog_clistunselect.
+ (prefdialog_changekey): reworked for GtkTreeView changes.
+ (prefdialog_themeselect): port themes GTK_CList to GtkTreeView.
+ (prefdialog_themelist): port to GtkTreeView.
+ (prefdialog_new): port to GtkTreeView.
+ * src/partyline.c (partyline_page_new): port playerlist CList to
+ GtkTreeView.
+ Stop unsetting GTK_CAN_FOCUS flag for partyline's gtk_text_view, and
+ disable set_editable and set_cursor_visible.
+ (partyline_playerlist): port playerlist CList to GtkTreeViewa
+ * src/winlist.c (winlist_clear): port winlist to GtkTreeView.
+ (winlist_additem): likewise.
+
+ * src/gtetrinet.c (main): assign a window icon.
+
+ * src/misc.c (textbox_setup): don't set a background color. Doesn't
+ appear to be useful at all, and makes text scrolling faster.
+
2003-01-04 Jordi Mallach <jordi@sindominio.net>
* src/tetrinet.c: correct colours for several messages.
};
GnomeUIInfo toolbar[] = {
- GNOMEUIINFO_ITEM(N_("Connect"), NULL, connect_command, NULL),
- GNOMEUIINFO_ITEM(N_("Disconnect"), NULL, disconnect_command, NULL),
+ GNOMEUIINFO_ITEM_STOCK(N_("Connect"), N_("Connect"), connect_command, "gtk-execute"),
+ GNOMEUIINFO_ITEM_STOCK(N_("Disconnect"), N_("Disconnect"), disconnect_command, "gtk-quit"),
GNOMEUIINFO_SEPARATOR,
- GNOMEUIINFO_ITEM(N_("Start game"), NULL, start_command, NULL),
- GNOMEUIINFO_ITEM(N_("Pause game"), NULL, pause_command, NULL),
- GNOMEUIINFO_ITEM(N_("End game"), NULL, end_command, NULL),
+ GNOMEUIINFO_ITEM_STOCK(N_("Start game"), N_("Start game"), start_command, "gtk-go-forward"),
+ GNOMEUIINFO_ITEM_STOCK(N_("Pause game"), N_("Pause game"), pause_command, "gtk-dialog-warning"),
+ GNOMEUIINFO_ITEM_STOCK(N_("End game"), N_("End game"), end_command, "gtk-stop"),
GNOMEUIINFO_SEPARATOR,
- GNOMEUIINFO_ITEM(N_("Change team"), NULL, team_command, NULL),
+ GNOMEUIINFO_ITEM_STOCK(N_("Change team"), N_("Change team"), team_command, "gtk-jump-to"),
#ifdef ENABLE_DETACH
GNOMEUIINFO_SEPARATOR,
GNOMEUIINFO_ITEM(N_("Detach page"), NULL, detach_command, NULL),
const char *authors[] = {N_("Ka-shu Wong <kswong@zip.com.au>"),
N_("James Antill <james@and.org>"),
+ N_("Jordi Mallach <jordi@sindominio.net"),
+ N_("Dani Carbonell <bocata@panete.net>"),
NULL};
- const char *documenters[] = {N_("Ka-shu Wong <kswong@zip.com.au>"),
- N_("Jordi Mallach <jordi@sindominio.net>"),
+ const char *documenters[] = {N_("Jordi Mallach <jordi@sindominio.net>"),
NULL};
/* Translators: translate as your names & emails */
const char *translators = _("translator_credits");
void teamdialog_button (GnomeDialog *dialog, gint button, gpointer data)
{
GtkWidget *entry = GTK_WIDGET(data);
+ gchar *aux;
switch (button) {
case 0:
- tetrinet_changeteam (gtk_entry_get_text(GTK_ENTRY(gnome_entry_gtk_entry(GNOME_ENTRY(entry)))));
+ aux = g_locale_from_utf8 (gtk_entry_get_text(GTK_ENTRY(gnome_entry_gtk_entry(GNOME_ENTRY(entry)))), -1, NULL, NULL, NULL);
+ tetrinet_changeteam (aux);
gtk_widget_destroy (GTK_WIDGET(dialog));
+ g_free (aux);
break;
case 1:
gtk_widget_destroy (GTK_WIDGET(dialog));
void connectdialog_button (GnomeDialog *dialog, gint button, gpointer data)
{
+ gchar *team_utf8, *nick; /* intermediate buffer for recoding purposes */
switch (button) {
case 0:
/* connect now */
spectating = GTK_TOGGLE_BUTTON(spectatorcheck)->active ? TRUE : FALSE;
GTET_O_STRCPY (specpassword, gtk_entry_get_text (GTK_ENTRY(passwordentry)));
- GTET_O_STRCPY (team, gtk_entry_get_text (GTK_ENTRY(gnome_entry_gtk_entry(GNOME_ENTRY(teamnameentry)))));
- client_init (gtk_entry_get_text(GTK_ENTRY(gnome_entry_gtk_entry(GNOME_ENTRY(serveraddressentry)))),
- gtk_entry_get_text(GTK_ENTRY(gnome_entry_gtk_entry(GNOME_ENTRY(nicknameentry)))));
+ team_utf8 = g_locale_from_utf8 (gtk_entry_get_text (GTK_ENTRY(gnome_entry_gtk_entry(GNOME_ENTRY(teamnameentry)))),
+ -1, NULL, NULL, NULL);
+ GTET_O_STRCPY (team, team_utf8);
+ nick = g_locale_from_utf8 (gtk_entry_get_text (GTK_ENTRY (gnome_entry_gtk_entry (GNOME_ENTRY (nicknameentry)))),
+ -1, NULL, NULL, NULL);
+ client_init (gtk_entry_get_text (GTK_ENTRY (gnome_entry_gtk_entry (GNOME_ENTRY (serveraddressentry)))), nick);
+ g_free (team_utf8);
+ g_free (nick);
break;
case 1:
gamemode = oldgamemode;
void connectdialog_new (void)
{
GtkWidget *widget, *table1, *table2, *frame;
+ gchar *aux;
/* check if dialog is already displayed */
if (connecting) return;
connecting = TRUE;
gtk_table_attach (GTK_TABLE(table2), widget, 0, 1, 0, 1,
GTK_FILL | GTK_EXPAND, 0, 0, 0);
nicknameentry = gnome_entry_new ("Nickname");
+ aux = g_locale_to_utf8 (nick, -1, NULL, NULL, NULL);
gtk_entry_set_text (GTK_ENTRY(gnome_entry_gtk_entry(GNOME_ENTRY(nicknameentry))),
- nick);
+ aux);
+ g_free (aux);
gtk_widget_show (nicknameentry);
gtk_table_attach (GTK_TABLE(table2), nicknameentry, 1, 2, 0, 1,
GTK_FILL | GTK_EXPAND, 0, 0, 0);
gtk_table_attach (GTK_TABLE(table2), teamnamelabel, 0, 1, 1, 2,
GTK_FILL | GTK_EXPAND, 0, 0, 0);
teamnameentry = gnome_entry_new ("Teamname");
+ aux = g_locale_to_utf8 (team, -1, NULL, NULL, NULL);
gtk_entry_set_text (GTK_ENTRY(gnome_entry_gtk_entry(GNOME_ENTRY(teamnameentry))),
- team);
+ aux);
+ g_free (aux);
gtk_widget_show (teamnameentry);
gtk_table_attach (GTK_TABLE(table2), teamnameentry, 1, 2, 1, 2,
GTK_FILL | GTK_EXPAND, 0, 0, 0);
};
gint newkeys[K_NUM];
-int pk_row;
struct themelistentry {
char dir[1024];
{
char *array[2];
int i;
+ GtkTreeIter iter;
+ GtkListStore *keys_store = GTK_LIST_STORE (gtk_tree_view_get_model (GTK_TREE_VIEW (keyclist)));
actions[0] = _("Move right");
actions[1] = _("Move left");
for (i = 0; i < K_NUM; i ++) {
array[0] = actions[i];
array[1] = keystr (newkeys[actionid[i]]);
- gtk_clist_append (GTK_CLIST(keyclist), array);
+ gtk_list_store_append (keys_store, &iter);
+ gtk_list_store_set (keys_store, &iter,
+ 0, actions[i],
+ 1, keystr (newkeys[actionid[i]]),
+ 2, i, -1);
}
}
-void prefdialog_clistupdate (int row)
+void prefdialog_clistupdate ()
{
- gtk_clist_set_text (GTK_CLIST(keyclist), row, 1,
- keystr (newkeys[actionid[row]]));
+ GtkTreeIter iter;
+ GtkListStore *keys_store = GTK_LIST_STORE (gtk_tree_view_get_model (GTK_TREE_VIEW (keyclist)));
+ gboolean valid;
+ gint row = 0;
+
+ valid = gtk_tree_model_get_iter_first (GTK_TREE_MODEL (keys_store), &iter);
+ while (valid)
+ {
+ gtk_list_store_set (keys_store, &iter, 1, keystr (newkeys[actionid[row]]), -1);
+ valid = gtk_tree_model_iter_next (GTK_TREE_MODEL (keys_store), &iter);
+ row ++;
+ }
}
void prefdialog_restorekeys (GtkWidget *widget, gpointer data)
{
int i;
+
for (i = 0; i < K_NUM; i ++) newkeys[i] = defaultkeys[i];
- for (i = 0; i < K_NUM; i ++) prefdialog_clistupdate (i);
+ prefdialog_clistupdate ();
gnome_property_box_changed (GNOME_PROPERTY_BOX(prefdialog));
}
-void prefdialog_clistselect (GtkWidget *widget, gint row, gint column,
- GdkEventButton *event, gpointer data)
-{
- pk_row = row;
-}
-
-void prefdialog_clistunselect (GtkWidget *widget, gint row, gint column,
- gpointer data)
-{
- pk_row = -1;
-}
-
void prefdialog_changekey (GtkWidget *widget, gpointer data)
{
- char buf[256];
- gint k;
+ gchar buf[256], *key;
+ gint k, row = 0;
+ GtkListStore *keys_store = GTK_LIST_STORE (gtk_tree_view_get_model (GTK_TREE_VIEW (keyclist)));
+ GtkTreeSelection *selection = gtk_tree_view_get_selection (GTK_TREE_VIEW (keyclist));
+ GtkTreeIter pk_row;
- if (pk_row == -1) return;
+ if (!gtk_tree_selection_get_selected (selection, NULL, &pk_row)) return;
- g_snprintf (buf, sizeof(buf), _("Press new key for \"%s\""),
- actions[pk_row]);
+ gtk_tree_model_get (GTK_TREE_MODEL (keys_store), &pk_row,
+ 0, &key, 2, &row, -1);
+ g_snprintf (buf, sizeof(buf), _("Press new key for \"%s\""), key);
k = key_dialog (buf);
if (k) {
- newkeys[actionid[pk_row]] = k;
- prefdialog_clistupdate (pk_row);
+ newkeys[actionid[row]] = k;
+ prefdialog_clistupdate ();
gnome_property_box_changed (GNOME_PROPERTY_BOX(prefdialog));
}
}
leftlabel_set (desclabel, desc);
}
-void prefdialog_themeselect (GtkWidget *widget, gint row, gint column,
- GdkEventButton *event, gpointer data)
-{
- theme_select = row;
- themechanged = TRUE;
- prefdialog_themelistselect (row);
- gnome_property_box_changed (GNOME_PROPERTY_BOX(prefdialog));
+void prefdialog_themeselect (GtkTreeSelection *treeselection,
+ gpointer data)
+{
+ GtkListStore *model;
+ GtkTreeIter iter;
+ gint row;
+
+ if (gtk_tree_selection_get_selected (treeselection, NULL, &iter))
+ {
+ model = GTK_LIST_STORE (gtk_tree_view_get_model (gtk_tree_selection_get_tree_view (treeselection)));
+ gtk_tree_model_get (GTK_TREE_MODEL(model), &iter, 1, &row, -1);
+ theme_select = row;
+ themechanged = TRUE;
+ prefdialog_themelistselect (row);
+ gnome_property_box_changed (GNOME_PROPERTY_BOX(prefdialog));
+ }
}
static int themelistcomp (const void *a1, const void *b1)
char buf[1024], str[1024], dir[1024];
int i;
char *basedir[2];
+ GtkListStore *theme_store = GTK_LIST_STORE (gtk_tree_view_get_model (GTK_TREE_VIEW (themelist)));
+ GtkTreeSelection *theme_selection = gtk_tree_view_get_selection (GTK_TREE_VIEW (themelist));
+ GtkTreeIter iter, iter_selected;
GTET_O_STRCPY (dir, getenv ("HOME"));
GTET_O_STRCAT (dir, "/.gtetrinet/themes");
qsort (themes, themecount, sizeof(struct themelistentry), themelistcomp);
theme_select = 0;
- gtk_clist_clear (GTK_CLIST(themelist));
+ gtk_list_store_clear (theme_store);
for (i = 0; i < themecount; i ++) {
char *text[2];
text[0] = themes[i].name;
text[1] = 0;
- gtk_clist_append (GTK_CLIST(themelist), text);
+ gtk_list_store_append (theme_store, &iter);
+ gtk_list_store_set (theme_store, &iter, 0, themes[i].name, 1, i, -1);
if (strcmp(themes[i].dir, currenttheme) == 0)
+ {
+ iter_selected = iter;
theme_select = i;
+ }
}
- gtk_clist_select_row (GTK_CLIST(themelist), theme_select, 0);
+ gtk_tree_selection_select_iter (theme_selection, &iter_selected);
prefdialog_themelistselect (theme_select);
}
void prefdialog_new (void)
{
GtkWidget *label, *table, *frame, *button, *button1, *widget, *table1, *divider;
- char *keytitles[2];
+ GtkListStore *theme_store = gtk_list_store_new (2, G_TYPE_STRING, G_TYPE_INT);
+ GtkListStore *keys_store = gtk_list_store_new (3, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_INT);
+ GtkCellRenderer *renderer = gtk_cell_renderer_text_new ();
+ GtkTreeSelection *theme_selection, *keys_selection;
int i;
- keytitles[0] = _("Action");
- keytitles[1] = _("Key");
-
prefdialog = gnome_property_box_new();
gtk_window_set_title(GTK_WINDOW(prefdialog), _("GTetrinet Preferences"));
/* themes */
- themelist = gtk_clist_new (1);
- gtk_clist_set_column_width (GTK_CLIST(themelist), 0, 160);
- gtk_clist_set_selection_mode (GTK_CLIST(themelist), GTK_SELECTION_SINGLE);
+ themelist = gtk_tree_view_new_with_model (GTK_TREE_MODEL (theme_store));
+ theme_selection = gtk_tree_view_get_selection (GTK_TREE_VIEW (themelist));
+ gtk_tree_view_set_headers_visible (GTK_TREE_VIEW (themelist), FALSE);
+ gtk_widget_set_usize (themelist, 160, 0);
+ gtk_tree_view_insert_column_with_attributes (GTK_TREE_VIEW (themelist), -1, _("Theme"), renderer,
+ "text", 0, NULL);
gtk_widget_show (themelist);
label = leftlabel_new (_("Select a theme from the list.\n"
frame, label);
/* keyboard */
- keyclist = gtk_clist_new_with_titles (2, keytitles);
- gtk_clist_set_column_width (GTK_CLIST(keyclist), 0, 100);
- gtk_clist_set_column_width (GTK_CLIST(keyclist), 1, 80);
- gtk_clist_set_selection_mode (GTK_CLIST(keyclist), GTK_SELECTION_SINGLE);
- gtk_clist_column_titles_passive (GTK_CLIST(keyclist));
- gtk_signal_connect (GTK_OBJECT(keyclist), "select_row",
- GTK_SIGNAL_FUNC (prefdialog_clistselect), NULL);
- gtk_signal_connect (GTK_OBJECT(keyclist), "unselect_row",
- GTK_SIGNAL_FUNC (prefdialog_clistunselect), NULL);
+ keyclist = GTK_WIDGET (gtk_tree_view_new_with_model (GTK_TREE_MODEL(keys_store)));
+ gtk_tree_view_insert_column_with_attributes (GTK_TREE_VIEW (keyclist), -1, _("Action"), renderer,
+ "text", 0, NULL);
+ gtk_tree_view_insert_column_with_attributes (GTK_TREE_VIEW (keyclist), -1, _("Key"), renderer,
+ "text", 1, NULL);
+
+ gtk_widget_set_usize (keyclist, 180, 0);
gtk_widget_show (keyclist);
label = gtk_label_new (_("Select an action from the list and press Change "
gtk_widget_set_sensitive (soundcheck, FALSE);
#endif
- pk_row = -1;
themechanged = midichanged = FALSE;
- gtk_signal_connect (GTK_OBJECT(soundcheck), "toggled",
- GTK_SIGNAL_FUNC(prefdialog_soundtoggle), NULL);
- gtk_signal_connect (GTK_OBJECT(midicheck), "toggled",
- GTK_SIGNAL_FUNC(prefdialog_miditoggle), NULL);
- gtk_signal_connect (GTK_OBJECT(gnome_entry_gtk_entry(GNOME_ENTRY(midientry))),
- "changed", GTK_SIGNAL_FUNC(prefdialog_midichanged), NULL);
- gtk_signal_connect (GTK_OBJECT(themelist), "select_row",
- GTK_SIGNAL_FUNC (prefdialog_themeselect), NULL);
- gtk_signal_connect (GTK_OBJECT(prefdialog), "apply",
- GTK_SIGNAL_FUNC(prefdialog_apply), NULL);
- gtk_signal_connect (GTK_OBJECT(GNOME_PROPERTY_BOX(prefdialog)->ok_button), "clicked",
- GTK_SIGNAL_FUNC(prefdialog_check), NULL);
- gtk_signal_connect (GTK_OBJECT(GNOME_PROPERTY_BOX(prefdialog)->apply_button), "clicked",
- GTK_SIGNAL_FUNC(prefdialog_check), NULL);
+ g_signal_connect (G_OBJECT(soundcheck), "toggled",
+ GTK_SIGNAL_FUNC(prefdialog_soundtoggle), NULL);
+ g_signal_connect (G_OBJECT(midicheck), "toggled",
+ GTK_SIGNAL_FUNC(prefdialog_miditoggle), NULL);
+ g_signal_connect (G_OBJECT(gnome_entry_gtk_entry(GNOME_ENTRY(midientry))),
+ "changed", GTK_SIGNAL_FUNC(prefdialog_midichanged), NULL);
+ g_signal_connect (G_OBJECT(theme_selection), "changed",
+ GTK_SIGNAL_FUNC (prefdialog_themeselect), NULL);
+ g_signal_connect (G_OBJECT(prefdialog), "apply",
+ GTK_SIGNAL_FUNC(prefdialog_apply), NULL);
+ g_signal_connect (G_OBJECT(GNOME_PROPERTY_BOX(prefdialog)->ok_button), "clicked",
+ GTK_SIGNAL_FUNC(prefdialog_check), NULL);
+ g_signal_connect (G_OBJECT(GNOME_PROPERTY_BOX(prefdialog)->apply_button), "clicked",
+ GTK_SIGNAL_FUNC(prefdialog_check), NULL);
gtk_widget_show (prefdialog);
}
void fields_setlabel (int field, char *name, char *team, int num)
{
char buf[11];
+ gchar *name_utf8, *team_utf8;
g_snprintf (buf, sizeof(buf), "%d", num);
gtk_label_set (GTK_LABEL(fieldlabels[field][5]), "");
}
else {
+ name_utf8 = g_locale_to_utf8 (name, -1, NULL, NULL, NULL);
gtk_widget_show (fieldlabels[field][0]);
gtk_widget_show (fieldlabels[field][1]);
gtk_widget_show (fieldlabels[field][2]);
gtk_widget_hide (fieldlabels[field][3]);
gtk_label_set (GTK_LABEL(fieldlabels[field][0]), buf);
- gtk_label_set (GTK_LABEL(fieldlabels[field][2]), nocolor(name));
+ gtk_label_set (GTK_LABEL(fieldlabels[field][2]), nocolor(name_utf8));
gtk_label_set (GTK_LABEL(fieldlabels[field][3]), "");
if (team == NULL || team[0] == 0) {
gtk_widget_hide (fieldlabels[field][4]);
gtk_label_set (GTK_LABEL(fieldlabels[field][5]), "");
}
else {
+ team_utf8 = g_locale_to_utf8 (team, -1, NULL, NULL, NULL);
gtk_widget_show (fieldlabels[field][4]);
gtk_widget_show (fieldlabels[field][5]);
- gtk_label_set (GTK_LABEL(fieldlabels[field][5]), nocolor(team));
+ gtk_label_set (GTK_LABEL(fieldlabels[field][5]), nocolor(team_utf8));
+ g_free (team_utf8);
}
+ g_free (name_utf8);
}
}
void fields_gmsginputadd (char *c)
{
- gtk_entry_append_text (GTK_ENTRY(gmsginput), c);
+ gchar *utf8_c = g_locale_to_utf8 (c, -1, NULL, NULL, NULL);
+ gtk_entry_append_text (GTK_ENTRY(gmsginput), utf8_c);
gtk_entry_set_position (GTK_ENTRY(gmsginput),
strlen(gtk_entry_get_text(GTK_ENTRY(gmsginput))));
+ g_free (utf8_c);
}
void fields_gmsginputback (void)
{
char buf[256];
+ gchar *prev;
+
GTET_O_STRCPY (buf, gtk_entry_get_text(GTK_ENTRY(gmsginput)));
if (strlen(buf) == 0) return;
- buf[strlen(buf)-1] = 0;
+ prev = g_utf8_prev_char (&buf[strlen(buf)]);
+ *prev = 0;
gtk_entry_set_text (GTK_ENTRY(gmsginput), buf);
gtk_entry_set_position (GTK_ENTRY(gmsginput), strlen(buf));
}
{NULL, 0, 0, NULL, 0, NULL, NULL}
};
+
int main (int argc, char *argv[])
{
GtkWidget *page, *label, *box;
- char buf[1024];
+ char buf[1024], *logo;
+ GdkPixbuf *icon_pixbuf;
GTET_STRCPY(buf, "", 4);
g_assert(strlen(buf) == 0);
gtk_widget_set_events (app, GDK_KEY_PRESS_MASK | GDK_KEY_RELEASE_MASK);
gtk_window_set_policy (GTK_WINDOW(app), FALSE, FALSE, TRUE);
+
+ /* create and set the window icon */
+ icon_pixbuf = gdk_pixbuf_new_from_file (PIXMAPSDIR "/gtetrinet.png", NULL);
+ if (icon_pixbuf)
+ {
+ gtk_window_set_icon (GTK_WINDOW (app), icon_pixbuf);
+ gdk_pixbuf_unref (icon_pixbuf);
+ }
/* create the notebook */
notebook = gtk_notebook_new ();
gtet_text_tags[n].t_c = gtk_text_buffer_create_tag (buffer, NULL,
"foreground-gdk",
>et_text_tags[n].c,
- "background",
- "white",
+// "background",
+// "white",
NULL);
t_bold = gtk_text_buffer_create_tag (buffer, NULL,
if (gtk_text_buffer_get_char_count (textbox->buffer)) /* not first line */
gtk_text_buffer_insert (textbox->buffer, &iter, "\n", 1);
+
for (i = 0; text[i]; i ++) {
if (text[i] == TETRI_TB_RESET) {
lastcolor = color = gtet_text_tags[0].t_c;
}
else
{
- char *out = g_utf8_normalize(&text[i], 1, G_NORMALIZE_ALL);
+ gchar *out = g_locale_to_utf8 (&text[i], 1, NULL, NULL, NULL);
if (out)
{
if (0)
g_string_assign(ret, str);
p = scan = ret->str;
- while (*scan)
- {
- if ((signed char)*scan > 0x1F) /* high characters are ok,
- * but only if it's UTF-8 --
- * just kill them for now */
- *p++ = *scan;
- ++scan;
- }
if (scan != p)
g_string_truncate(ret, len - (scan - p));
GtkWidget *partyline_page_new (void)
{
GtkWidget *widget, *box; /* generic temp variables */
+ GtkListStore *playerlist_model = gtk_list_store_new (3, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_STRING);
+ GtkCellRenderer *renderer = gtk_cell_renderer_text_new ();
char *listtitles[3];
- /* Initialise the array for the player list */
- listtitles[0] = "";
- listtitles[1] = _("Name");
- listtitles[2] = _("Team");
-
/* left box */
leftbox = gtk_vbox_new (FALSE, 4);
/* chat thingy */
/* textbox with scrollbars */
textbox = gtk_text_view_new_with_buffer(gtk_text_buffer_new(tag_table));
gtk_text_view_set_wrap_mode (GTK_TEXT_VIEW(textbox), GTK_WRAP_WORD);
- GTK_WIDGET_UNSET_FLAGS(textbox, GTK_CAN_FOCUS);
- gtk_signal_connect (GTK_OBJECT(textbox), "button_press_event",
- GTK_SIGNAL_FUNC(partyline_entryfocus), NULL);
+ gtk_text_view_set_editable (GTK_TEXT_VIEW (textbox), FALSE);
+ gtk_text_view_set_cursor_visible (GTK_TEXT_VIEW (textbox), FALSE);
gtk_widget_show (textbox);
textboxscroll = gtk_scrolled_window_new (NULL, NULL);
gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(textboxscroll),
gtk_widget_show (leftbox);
/* player list */
- playerlist = gtk_clist_new_with_titles (3, listtitles);
- gtk_clist_set_column_width (GTK_CLIST(playerlist), 0, 10);
- gtk_clist_set_column_width (GTK_CLIST(playerlist), 1, 60);
- gtk_clist_column_titles_passive (GTK_CLIST(playerlist));
+ playerlist = GTK_WIDGET (gtk_tree_view_new_with_model (GTK_TREE_MODEL (playerlist_model)));
+ gtk_tree_view_insert_column_with_attributes (GTK_TREE_VIEW (playerlist), -1, "", renderer,
+ "text", 0, NULL);
+ gtk_tree_view_insert_column_with_attributes (GTK_TREE_VIEW (playerlist), -1, _("Name"), renderer,
+ "text", 1, NULL);
+ gtk_tree_view_insert_column_with_attributes (GTK_TREE_VIEW (playerlist), -1, _("Team"), renderer,
+ "text", 2, NULL);
gtk_widget_set_usize (playerlist, 150, 200);
gtk_widget_show (playerlist);
void partyline_namelabel (char *nick, char *team)
{
- if (nick) gtk_label_set (GTK_LABEL(namelabel), nocolor(nick));
+ gchar *nick_utf8, *team_utf8;
+
+ if (nick)
+ {
+ nick_utf8 = g_locale_to_utf8 (nick, -1, NULL, NULL, NULL);
+ gtk_label_set (GTK_LABEL(namelabel), nocolor(nick_utf8));
+ g_free (nick_utf8);
+ }
else gtk_label_set (GTK_LABEL(namelabel), "");
- if (team) gtk_label_set (GTK_LABEL(teamlabel), nocolor(team));
+ if (team)
+ {
+ team_utf8 = g_locale_to_utf8 (team, -1, NULL, NULL, NULL);
+ gtk_label_set (GTK_LABEL(teamlabel), nocolor(team_utf8));
+ g_free (team_utf8);
+ }
else gtk_label_set (GTK_LABEL(teamlabel), "");
}
int i;
char buf0[16], buf1[128], buf2[128];
char *item[3] = {buf0, buf1, buf2};
+ GtkListStore *playerlist_model = GTK_LIST_STORE (gtk_tree_view_get_model (GTK_TREE_VIEW (playerlist)));
+ GtkTreeIter iter;
+ gchar *aux1, *aux2; /* for recoding purposes */
/* update the playerlist so that it contains only the given names */
- gtk_clist_freeze (GTK_CLIST(playerlist));
- gtk_clist_clear (GTK_CLIST(playerlist));
+ gtk_list_store_clear (playerlist_model);
+
for (i = 0; i < n; i ++) {
g_snprintf (buf0, sizeof(buf0), "%d", numbers[i]);
GTET_O_STRCPY (buf1, nocolor(names[i]));
GTET_O_STRCPY (buf2, nocolor(teams[i]));
- gtk_clist_append (GTK_CLIST(playerlist), item);
+ /* we only need to recode buf1 and buf2, buf0 is just a character */
+ aux1 = g_locale_to_utf8 (buf1, -1, NULL, NULL, NULL);
+ aux2 = g_locale_to_utf8 (buf2, -1, NULL, NULL, NULL);
+ gtk_list_store_append (playerlist_model, &iter);
+ gtk_list_store_set (playerlist_model, &iter,
+ 0, buf0, 1, aux1, 2, aux2, -1);
+ g_free (aux1);
+ g_free (aux2);
}
+
buf0[0] = buf1[0] = buf2[0] = 0;
- gtk_clist_append (GTK_CLIST(playerlist), item);
+ gtk_list_store_append (playerlist_model, &iter);
+ gtk_list_store_set (playerlist_model, &iter,
+ 0, buf0, 1, buf1, 2, buf2, -1);
+
for (i = 0; i < sn; i ++) {
GTET_O_STRCPY (buf0, "S");
GTET_O_STRCPY (buf1, nocolor(specs[i]));
GTET_O_STRCPY (buf2, "");
- gtk_clist_append (GTK_CLIST(playerlist), item);
+ /* we only need to recode buf1 and buf2, buf0 is just a character */
+ aux1 = g_locale_to_utf8 (buf1, -1, NULL, NULL, NULL);
+ aux2 = g_locale_to_utf8 (buf2, -1, NULL, NULL, NULL);
+ gtk_list_store_append (playerlist_model, &iter);
+ gtk_list_store_set (playerlist_model, &iter,
+ 0, buf0, 1, buf1, 2, buf2, -1);
+ g_free (aux1);
+ g_free (aux2);
}
- gtk_clist_thaw (GTK_CLIST(playerlist));
}
void partyline_entryfocus (void)
void textentry (GtkWidget *widget, gpointer data)
{
const char *text;
+ gchar *iso_text;
text = gtk_entry_get_text (GTK_ENTRY(widget));
if (strlen(text) == 0) return;
+
+ /* convert from UTF-8 to the current locale, will work with ISO8859-1 locales */
+ iso_text = g_locale_from_utf8 (text, -1, NULL, NULL, NULL);
- tetrinet_playerline (text);
- GTET_O_STRCPY (plhistory[plh_end], text);
+ tetrinet_playerline (iso_text);
+ GTET_O_STRCPY (plhistory[plh_end], iso_text);
gtk_entry_set_text (GTK_ENTRY(widget), "");
plh_end ++;
if (plh_start == PLHSIZE) plh_start = 0;
plh_cur = plh_end;
plhistory[plh_cur][0] = 0;
+
+ g_free (iso_text);
}
static gint entrykey (GtkWidget *widget, GdkEventKey *key)
{
int keyval = key->keyval;
+ gchar *text;
if (keyval == GDK_Up || keyval == GDK_Down) {
if (plh_cur == plh_end) {
- const char *text;
- text = gtk_entry_get_text (GTK_ENTRY(widget));
+ text = g_locale_from_utf8 (gtk_entry_get_text (GTK_ENTRY(widget)), -1, NULL, NULL, NULL);
GTET_O_STRCPY (plhistory[plh_end], text);
+ g_free (text);
}
switch (keyval) {
case GDK_Up:
if (plh_cur == PLHSIZE) plh_cur = 0;
break;
}
- gtk_entry_set_text (GTK_ENTRY(widget), plhistory[plh_cur]);
+ text = g_locale_to_utf8 (plhistory[plh_cur], -1, NULL, NULL, NULL);
+ gtk_entry_set_text (GTK_ENTRY(widget), text);
+ gtk_editable_set_position (GTK_EDITABLE (widget), -1);
+ g_free (text);
#ifdef DEBUG
printf ("history: %d %d %d %s\n", plh_start, plh_end, plh_cur,
plhistory[plh_cur]);
{
char buf[256];
const char *s;
+ gchar *locale_s;
s = fields_gmsginputtext ();
if (strlen(s) > 0) {
if (strncmp("/me ", s, 4) == 0) {
/* post /me thingy */
g_snprintf (buf, sizeof(buf), "* %s %s", nick, s+4);
- client_outmessage (OUT_GMSG, buf);
+ locale_s = g_locale_from_utf8 (buf, -1, NULL, NULL, NULL);
+ client_outmessage (OUT_GMSG, locale_s);
}
else {
/* post message */
g_snprintf (buf, sizeof(buf), "<%s> %s", nick, s);
- client_outmessage (OUT_GMSG, buf);
+ locale_s = g_locale_from_utf8 (buf, -1, NULL, NULL, NULL);
+ client_outmessage (OUT_GMSG, locale_s);
}
+ g_free (locale_s);
}
/* hide input area */
fields_gmsginput (FALSE);
GtkWidget *winlist_page_new (void)
{
- char *winlisttitles[3];
GtkWidget *align;
+ GtkCellRenderer *renderer = gtk_cell_renderer_text_new ();
+ GtkListStore *winlist_store = gtk_list_store_new (3, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_STRING);
- winlisttitles [0] = _("T");
- winlisttitles [1] = _("Name");
- winlisttitles [2] = _("Score");
+ winlist = gtk_tree_view_new_with_model (GTK_TREE_MODEL (winlist_store));
- winlist = gtk_clist_new_with_titles (3, winlisttitles);
+ gtk_tree_view_insert_column_with_attributes (GTK_TREE_VIEW (winlist), -1, _("T"), renderer,
+ "text", 0, NULL);
+ gtk_tree_view_insert_column_with_attributes (GTK_TREE_VIEW (winlist), -1, _("Name"), renderer,
+ "text", 1, NULL);
+ gtk_tree_view_insert_column_with_attributes (GTK_TREE_VIEW (winlist), -1, _("Score"), renderer,
+ "text", 2, NULL);
- gtk_clist_set_column_width (GTK_CLIST(winlist), 0, 8);
- gtk_clist_set_column_width (GTK_CLIST(winlist), 1, 120);
gtk_widget_set_usize (winlist, 240, 0);
- gtk_clist_column_titles_passive (GTK_CLIST(winlist));
-
gtk_widget_show (winlist);
align = gtk_alignment_new (0.5, 0.5, 0.0, 0.8);
gtk_container_add (GTK_CONTAINER(align), winlist);
void winlist_clear (void)
{
- gtk_clist_clear (GTK_CLIST(winlist));
+ GtkListStore *winlist_model = GTK_LIST_STORE (gtk_tree_view_get_model (GTK_TREE_VIEW (winlist)));
+
+ gtk_list_store_clear (winlist_model);
}
void winlist_additem (int team, char *name, int score)
{
+ GtkListStore *winlist_model = GTK_LIST_STORE (gtk_tree_view_get_model (GTK_TREE_VIEW (winlist)));
+ GtkTreeIter iter;
char buf[16], *item[3];
+
if (team) item[0] = "T";
else item[0] = "";
item[1] = nocolor (name);
g_snprintf (buf, sizeof(buf), "%d", score);
item[2] = buf;
- gtk_clist_append (GTK_CLIST(winlist), item);
+ gtk_list_store_append (winlist_model, &iter);
+ gtk_list_store_set (winlist_model, &iter,
+ 0, item[0],
+ 1, item[1],
+ 2, item[2],
+ -1);
}