SimpleText DAY 7 - テキスト読み込み機能の手直し

無事にテキストファイルを読み込んで textviewに表示できましたが、

OPENボタンをクリックするたびに、同じ内容がどんどん追加されてしまいます。

そこを修正しましょう。


callbacks.c

void
on_button_open_clicked ( GtkButton *button, gpointer user_data)
{
GtkEntry *entry = (GtkEntry *)lookup_widget((GtkWidget *)button, (gchar *)"entry");
gchar *filename = (gchar *)gtk_entry_get_text(entry);
g_print("%s\n", filename);

GError *error = NULL;
gchar *text;
gsize *size;

GIOChannel *filepointer = g_io_channel_new_file(filename, "r", error);
g_io_channel_read_to_end(filepointer, &text, size, &error);
g_io_channel_close(fp);
g_print("%s\n", text);

GtkTextIter start, iter;
GtkTextView *textview = (GtkTextView *)lookup_widget((GtkWidget *)button, (gchar *)"textview);
GtkTextBuffer *textbuffer = gtk_text_view_get_buffer(textview);
gtk_text_buffer_get_start_iter(textbuffer, &start);
gtk_text_buffer_get_end_iter(textbuffer, &iter);
gtk_text_buffer_delete(textbuffer, &start, &iter);
gtk_text_buffer_insert(textbuffer, &iter, text, strlen(text));
g_free(text);
}

TextIterを2つ用意して、textbufferの最初と最後のIterを取得した上で、
gtk_text_buffer_delete関数

  • 第1引数:テキストバッファー
  • 第2引数:消去したい範囲の開始地点のIter
  • 第3引数:消去したい範囲の終了地点のIter

を使っています。
これで、ファイルを開き直すという動作が正常にできるようになりました。
参考サイト
 昨日と同じ http://ilaliart.sourceforge.jp/tips/gtk_jp2.html


/* 保存する前に開き直したり、他のファイルを開いたりすると編集した内容が失われてしまいますが、
そこのあたりを改良するつもりはありません。 あしからず */