| 33 |
|
|
| 34 |
/* タブごとの情報を管理する構造体 */ |
/* タブごとの情報を管理する構造体 */ |
| 35 |
typedef struct { |
typedef struct { |
| 36 |
GtkScrolledWindow *tabpage; /* タブ */ |
GtkScrolledWindow *tabpage; /* タブ */ |
| 37 |
gchar *tabpage_label; /* ベース (ファイル名) のみ */ |
gchar *tabpage_label; /* ベース (ファイル名) のみ */ |
| 38 |
GtkTextView *text_view; /* タブの表示 */ |
GtkTextView *text_view; /* タブの表示 */ |
| 39 |
GtkTextBuffer *text_buffer; /* タブのテキストバッファ */ |
GtkTextBuffer *text_buffer; /* タブのテキストバッファ */ |
| 40 |
gchar *filename; /* ファイル名のフルパス */ |
gchar *filename; /* ファイル名のフルパス */ |
| 41 |
ScmObj env; /* タブごとに独立した Scheme 環境 */ |
ScmObj env; /* タブごとに独立した Scheme 環境 */ |
| 42 |
|
guint delete_handler_id; /* トップレベルに登録したハンドラ ID */ |
| 43 |
} ShikiTabInfo; |
} ShikiTabInfo; |
| 44 |
|
|
| 45 |
/* エディタ全体に関する情報と,現在表示されているタブ情報へのキャッシュを管理する構造体 */ |
/* エディタ全体に関する情報と,現在表示されているタブ情報へのキャッシュを管理する構造体 */ |
| 384 |
gtk_container_add(GTK_CONTAINER((*tabinfo)->tabpage), GTK_WIDGET((*tabinfo)->text_view)); |
gtk_container_add(GTK_CONTAINER((*tabinfo)->tabpage), GTK_WIDGET((*tabinfo)->text_view)); |
| 385 |
gtk_widget_set_size_request(GTK_WIDGET((*tabinfo)->text_view), 500, 600); |
gtk_widget_set_size_request(GTK_WIDGET((*tabinfo)->text_view), 500, 600); |
| 386 |
g_signal_connect((*tabinfo)->text_buffer, "mark_set", G_CALLBACK(text_buffer_cursor_moved_handler), (*tabinfo)->text_view); |
g_signal_connect((*tabinfo)->text_buffer, "mark_set", G_CALLBACK(text_buffer_cursor_moved_handler), (*tabinfo)->text_view); |
| 387 |
g_signal_connect(Shiki_EDITOR_WINDOW, "delete_event", G_CALLBACK(delete_event_handler), (*tabinfo)->text_buffer); |
/* タブを削除する際,デリートハンドラを削除しておかないと警告が出るから */ |
| 388 |
|
(*tabinfo)->delete_handler_id = g_signal_connect(Shiki_EDITOR_WINDOW, "delete_event", G_CALLBACK(delete_event_handler), (*tabinfo)->text_buffer); |
| 389 |
/* 様々な初期化処理 */ |
/* 様々な初期化処理 */ |
| 390 |
/* 括弧の強調表示のためのタグを作る */ |
/* 括弧の強調表示のためのタグを作る */ |
| 391 |
gtk_text_buffer_create_tag ((*tabinfo)->text_buffer, "parent_emphasis_background", "background", "green", NULL); |
gtk_text_buffer_create_tag ((*tabinfo)->text_buffer, "parent_emphasis_background", "background", "green", NULL); |
| 555 |
|
|
| 556 |
/* ノートブックからページを削除 */ |
/* ノートブックからページを削除 */ |
| 557 |
static void remove_tabpage(GtkNotebook *notebook) { |
static void remove_tabpage(GtkNotebook *notebook) { |
| 558 |
|
/* タブが 1 つしか残っていなかったら消させない */ |
| 559 |
|
if(g_list_length(Shiki_EDITOR_TAB_INFO_LIST) == 1) |
| 560 |
|
return; |
| 561 |
if(!not_yet_save_changes_really_quit(Shiki_CURRENT_TEXT_BUFFER)) { |
if(!not_yet_save_changes_really_quit(Shiki_CURRENT_TEXT_BUFFER)) { |
| 562 |
|
/* デリートハンドラをエディタトップレベルのウィジットから取り除く */ |
| 563 |
|
g_signal_handler_disconnect(Shiki_EDITOR_WINDOW, (Shiki_CURRENT_TAB_INFO)->delete_handler_id); |
| 564 |
|
/* タブの中身を削除 */ |
| 565 |
|
gtk_widget_destroy(GTK_WIDGET(Shiki_CURRENT_TEXT_VIEW)); |
| 566 |
/* タブに対応するタブ情報を削除 */ |
/* タブに対応するタブ情報を削除 */ |
| 567 |
g_free(Shiki_CURRENT_TAB_TITLE); |
g_free(Shiki_CURRENT_TAB_TITLE); |
| 568 |
g_free(Shiki_CURRENT_FILENAME); |
g_free(Shiki_CURRENT_FILENAME); |