Develop and Download Open Source Software

Browse CVS Repository

Diff of /shiki/shiki/shiki.c

Parent Directory Parent Directory | Revision Log Revision Log | View Revision Graph Revision Graph | View Patch Patch

revision 1.17 by aloha, Sat Nov 11 16:27:27 2006 UTC revision 1.18 by aloha, Sun Nov 12 07:21:49 2006 UTC
# Line 85  static void save_file_as_handler(GtkWidg Line 85  static void save_file_as_handler(GtkWidg
85  static void really_quit_dialog_yes(GtkWidget *widget, gboolean *flag);  static void really_quit_dialog_yes(GtkWidget *widget, gboolean *flag);
86  static void really_quit_dialog_no(GtkWidget *widget, gint *flag);  static void really_quit_dialog_no(GtkWidget *widget, gint *flag);
87  static gboolean not_yet_save_changes_really_quit(GtkTextBuffer *buffer);  static gboolean not_yet_save_changes_really_quit(GtkTextBuffer *buffer);
88  static gboolean delete_event_handler(GtkWidget *widget, GdkEvent *event);  static gboolean delete_event_handler(GtkWidget *widget, GdkEvent *event, GtkWidget *buffer);
89  static void prepend_tabpage(GtkNotebook *notebook, gchar *filename);  static void append_tabpage(GtkNotebook *notebook, gchar *filename);
90  static GtkWidget *new_scrolled_text_buffer(ShikiTabInfo **tabinfo);  static GtkWidget *new_scrolled_text_buffer(ShikiTabInfo **tabinfo);
91  static void open_file_from_notebook(GtkNotebook *notebook);  static void open_file_from_notebook(GtkNotebook *notebook);
92  static void open_file_handler(GtkWidget *widget, GtkWidget *notebook);  static void open_file_handler(GtkWidget *widget, GtkWidget *notebook);
# Line 96  static gboolean is_kakko_or_kokka(gunich Line 96  static gboolean is_kakko_or_kokka(gunich
96  static gboolean is_kokka(gunichar ch, gpointer);  static gboolean is_kokka(gunichar ch, gpointer);
97  static gboolean search_sexp_string(GtkTextIter *start);  static gboolean search_sexp_string(GtkTextIter *start);
98  static gint get_parent_nest_level_at_cursor(GtkTextBuffer *buffer);  static gint get_parent_nest_level_at_cursor(GtkTextBuffer *buffer);
99  static void switch_page(GtkNotebook *notebook, GtkNotebookPage *page, guint pagenum) ;  static void switch_tabpage_handler(GtkNotebook *notebook, GtkNotebookPage *page, guint pagenum) ;
100  static void tabsborder_on_off(GtkButton *button, GtkNotebook *notebook);  static void tabsborder_on_off(GtkButton *button, GtkNotebook *notebook);
101  static void remove_tabpage(GtkNotebook *notebook);  static void remove_tabpage(GtkNotebook *notebook);
102  static void remove_tabpage_handler(GtkButton *button, GtkWidget *notebook);  static void remove_tabpage_handler(GtkButton *button, GtkWidget *notebook);
103  static void prepend_tabpage_handler(GtkButton *button, GtkNotebook *notebook);  static void append_tabpage_handler(GtkButton *button, GtkNotebook *notebook);
104  static void rotate_tab_position(GtkButton   *button, GtkNotebook *notebook);  static void rotate_tab_position(GtkButton   *button, GtkNotebook *notebook);
105  static void forward_current_buffer();  static void forward_current_buffer();
106  static void backward_current_buffer();  static void backward_current_buffer();
# Line 363  static gboolean not_yet_save_changes_rea Line 363  static gboolean not_yet_save_changes_rea
363  }  }
364    
365  /* バッファがまだ保存されていないのに本当に終了するのかを尋ねる */  /* バッファがまだ保存されていないのに本当に終了するのかを尋ねる */
366  static gboolean delete_event_handler(GtkWidget *widget, GdkEvent *event){  static gboolean delete_event_handler(GtkWidget *widget, GdkEvent *event, GtkWidget *buffer){
367    return not_yet_save_changes_really_quit(Shiki_CURRENT_TEXT_BUFFER);    return not_yet_save_changes_really_quit(GTK_TEXT_BUFFER(buffer));
368  }  }
369    
370  /* 新しいタブを作る */  /* 新しいタブを作る */
# Line 383  static GtkWidget *new_scrolled_text_buff Line 383  static GtkWidget *new_scrolled_text_buff
383    gtk_container_add(GTK_CONTAINER((*tabinfo)->tabpage), GTK_WIDGET((*tabinfo)->text_view));    gtk_container_add(GTK_CONTAINER((*tabinfo)->tabpage), GTK_WIDGET((*tabinfo)->text_view));
384    gtk_widget_set_size_request(GTK_WIDGET((*tabinfo)->text_view), 500, 600);    gtk_widget_set_size_request(GTK_WIDGET((*tabinfo)->text_view), 500, 600);
385    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);
386    g_signal_connect((*tabinfo)->tabpage, "destroy", G_CALLBACK(delete_event_handler), NULL);    g_signal_connect(Shiki_EDITOR_WINDOW, "delete_event", G_CALLBACK(delete_event_handler), (*tabinfo)->text_buffer);
387    /* 様々な初期化処理 */    /* 様々な初期化処理 */
388    /* 括弧の強調表示のためのタグを作る */    /* 括弧の強調表示のためのタグを作る */
389    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);
# Line 404  static void open_file_from_notebook(GtkN Line 404  static void open_file_from_notebook(GtkN
404      GtkTextIter p;      GtkTextIter p;
405    
406      /* 新しいバッファを開く */      /* 新しいバッファを開く */
407      prepend_tabpage(notebook, g_strdup(filename));      append_tabpage(notebook, g_strdup(filename));
408    
409      if(!(text = g_locale_to_utf8(contents, -1, &br, &bw, &err)))      if(!(text = g_locale_to_utf8(contents, -1, &br, &bw, &err)))
410        gtk_text_buffer_set_text(Shiki_CURRENT_TEXT_BUFFER, contents, len);        gtk_text_buffer_set_text(Shiki_CURRENT_TEXT_BUFFER, contents, len);
# Line 525  static gint get_parent_nest_level_at_cur Line 525  static gint get_parent_nest_level_at_cur
525  }  }
526    
527  /* タブが切り替わる時のイベントハンドリング */  /* タブが切り替わる時のイベントハンドリング */
528  static void switch_page(GtkNotebook *notebook, GtkNotebookPage *page, guint pagenum) {  static void switch_tabpage_handler(GtkNotebook *notebook, GtkNotebookPage *page, guint pagenum) {
529    /* タブに対応する情報が格納された構造体を切替える */    /* タブに対応する情報が格納された構造体を切替える */
530    Shiki_CURRENT_TAB_INFO = (ShikiTabInfo *)g_list_nth_data(Shiki_EDITOR_TAB_INFO_LIST, pagenum);    Shiki_CURRENT_TAB_INFO = (ShikiTabInfo *)g_list_nth_data(Shiki_EDITOR_TAB_INFO_LIST, pagenum);
531    /* 現在のタブ番号を切替える */    /* 現在のタブ番号を切替える */
# Line 554  static void tabsborder_on_off(GtkButton Line 554  static void tabsborder_on_off(GtkButton
554  /* ノートブックからページを削除 */  /* ノートブックからページを削除 */
555  static void remove_tabpage(GtkNotebook *notebook) {  static void remove_tabpage(GtkNotebook *notebook) {
556    if(!not_yet_save_changes_really_quit(Shiki_CURRENT_TEXT_BUFFER)) {    if(!not_yet_save_changes_really_quit(Shiki_CURRENT_TEXT_BUFFER)) {
557      /* 対応するタブ情報を削除 */      /* タブに対応するタブ情報を削除 */
558      /* XXX : 必要 ??? g_free(Shiki_CURRENT_TAB_TITLE);      g_free(Shiki_CURRENT_TAB_TITLE);
559                        g_free(Shiki_CURRENT_FILENAME); */      g_free(Shiki_CURRENT_FILENAME);
560      Shiki_EDITOR_TAB_INFO_LIST = g_list_delete_link(Shiki_EDITOR_TAB_INFO_LIST, g_list_nth(Shiki_EDITOR_TAB_INFO_LIST, Shiki_CURRENT_TAB_NUM));      Shiki_EDITOR_TAB_INFO_LIST = g_list_delete_link(Shiki_EDITOR_TAB_INFO_LIST, g_list_nth(Shiki_EDITOR_TAB_INFO_LIST, Shiki_CURRENT_TAB_NUM));
561    
562        /* カレントのタブ情報を更新 */
563        Shiki_CURRENT_TAB_INFO = g_list_nth_data(Shiki_EDITOR_TAB_INFO_LIST, Shiki_CURRENT_TAB_NUM);
564      gtk_notebook_remove_page(notebook, Shiki_CURRENT_TAB_NUM);      gtk_notebook_remove_page(notebook, Shiki_CURRENT_TAB_NUM);
565      /* ウィジットを強制的に再描画 */      /* ウィジットを強制的に再描画 */
566      gtk_widget_queue_draw(GTK_WIDGET(notebook));      gtk_widget_queue_draw(GTK_WIDGET(notebook));
# Line 569  static void remove_tabpage_handler(GtkBu Line 572  static void remove_tabpage_handler(GtkBu
572  }  }
573    
574  /* ノートブックにページを追加 */  /* ノートブックにページを追加 */
575  static void prepend_tabpage(GtkNotebook *notebook, gchar *filename) {  static void append_tabpage(GtkNotebook *notebook, gchar *filename) {
576    ShikiTabInfo *tabinfo;    ShikiTabInfo *tabinfo;
577    GtkWidget *tabpage = new_scrolled_text_buffer(&tabinfo);    GtkWidget *tabpage = new_scrolled_text_buffer(&tabinfo);
578    tabinfo->filename = filename;    tabinfo->filename = filename;
579    tabinfo->tabpage_label = g_path_get_basename(filename);    tabinfo->tabpage_label = g_path_get_basename(filename);
580    gtk_notebook_prepend_page(notebook, tabpage, gtk_label_new(tabinfo->tabpage_label));    gtk_notebook_append_page(notebook, tabpage, gtk_label_new(tabinfo->tabpage_label));
581    Shiki_EDITOR_TAB_INFO_LIST = g_list_prepend(Shiki_EDITOR_TAB_INFO_LIST, tabinfo);    Shiki_EDITOR_TAB_INFO_LIST = g_list_append(Shiki_EDITOR_TAB_INFO_LIST, tabinfo);
582    Shiki_CURRENT_TAB_INFO = tabinfo;    gtk_notebook_set_current_page(notebook, g_list_length(Shiki_EDITOR_TAB_INFO_LIST) - 1);
583    gtk_widget_show_all(GTK_WIDGET(notebook));    gtk_widget_show_all(GTK_WIDGET(notebook));
584  }  }
585    
586  static void prepend_tabpage_handler(GtkButton *button, GtkNotebook *notebook) {  static void append_tabpage_handler(GtkButton *button, GtkNotebook *notebook) {
587    prepend_tabpage(notebook, g_strdup("*scratch*"));    append_tabpage(notebook, g_strdup("*scratch*"));
588  }  }
589    
590  /* タブの位置を調整 */  /* タブの位置を調整 */
# Line 664  static gboolean signal_key_press_handler Line 667  static gboolean signal_key_press_handler
667          break;          break;
668    
669        case GDK_t : /* Ctrl + t : タブを開く */        case GDK_t : /* Ctrl + t : タブを開く */
670          prepend_tabpage(GTK_NOTEBOOK(notebook), g_strdup("*scratch*"));          append_tabpage(GTK_NOTEBOOK(notebook), g_strdup("*scratch*"));
671          break;          break;
672    
673        case GDK_k : /* Ctrl + k : タブを閉じる */        case GDK_k : /* Ctrl + k : タブを閉じる */
# Line 776  static void shiki_editor_window_init() { Line 779  static void shiki_editor_window_init() {
779    gtk_box_pack_start(GTK_BOX(vbox), toolbar, FALSE, FALSE, 0);    gtk_box_pack_start(GTK_BOX(vbox), toolbar, FALSE, FALSE, 0);
780    
781    notebook = gtk_notebook_new();    notebook = gtk_notebook_new();
782    g_signal_connect(G_OBJECT(notebook), "switch-page", GTK_SIGNAL_FUNC(switch_page), NULL);    g_signal_connect(G_OBJECT(notebook), "switch-page", GTK_SIGNAL_FUNC(switch_tabpage_handler), NULL);
783    
784    /* ツールバーに付けるアイコンの設定 */    /* ツールバーに付けるアイコンの設定 */
785    gtk_toolbar_set_style(GTK_TOOLBAR (toolbar), GTK_TOOLBAR_ICONS);    gtk_toolbar_set_style(GTK_TOOLBAR (toolbar), GTK_TOOLBAR_ICONS);
# Line 830  static void shiki_editor_window_init() { Line 833  static void shiki_editor_window_init() {
833    gtk_tool_item_set_tooltip(icon, toolbar_tips, "タブ位置の設定", "");    gtk_tool_item_set_tooltip(icon, toolbar_tips, "タブ位置の設定", "");
834    
835    icon = gtk_tool_button_new(gtk_image_new_from_stock ("gtk-add", iconsize), "");    icon = gtk_tool_button_new(gtk_image_new_from_stock ("gtk-add", iconsize), "");
836    g_signal_connect(G_OBJECT(icon), "clicked", G_CALLBACK(prepend_tabpage_handler), G_OBJECT(notebook));    g_signal_connect(G_OBJECT(icon), "clicked", G_CALLBACK(append_tabpage_handler), G_OBJECT(notebook));
837    gtk_container_add(GTK_CONTAINER (toolbar), GTK_WIDGET(icon));    gtk_container_add(GTK_CONTAINER (toolbar), GTK_WIDGET(icon));
838    gtk_tool_item_set_tooltip(icon, toolbar_tips, "新規バッファを開きます", "");    gtk_tool_item_set_tooltip(icon, toolbar_tips, "新規バッファを開きます", "");
839    
# Line 851  static void shiki_editor_window_init() { Line 854  static void shiki_editor_window_init() {
854    gtk_container_add(GTK_CONTAINER (toolbar), GTK_WIDGET(icon));    gtk_container_add(GTK_CONTAINER (toolbar), GTK_WIDGET(icon));
855    gtk_tool_item_set_tooltip(icon, toolbar_tips, "フォントの変更", "");    gtk_tool_item_set_tooltip(icon, toolbar_tips, "フォントの変更", "");
856    
857      icon = gtk_tool_button_new(gtk_image_new_from_stock ("gtk-connect", iconsize), "");    icon = gtk_tool_button_new(gtk_image_new_from_stock ("gtk-connect", iconsize), "");
858    g_signal_connect(G_OBJECT(icon), "clicked", G_CALLBACK(load_scheme_file_by_gauche), G_OBJECT(notebook));    g_signal_connect(G_OBJECT(icon), "clicked", G_CALLBACK(load_scheme_file_by_gauche), G_OBJECT(notebook));
859    gtk_container_add(GTK_CONTAINER (toolbar), GTK_WIDGET(icon));    gtk_container_add(GTK_CONTAINER (toolbar), GTK_WIDGET(icon));
860    gtk_tool_item_set_tooltip(icon, toolbar_tips, "Scheme ファイルをロード", "");    gtk_tool_item_set_tooltip(icon, toolbar_tips, "Scheme ファイルをロード", "");
# Line 878  static void shiki_editor_window_init() { Line 881  static void shiki_editor_window_init() {
881    g_signal_connect(G_OBJECT(notebook), "key-release-event", G_CALLBACK (signal_key_release_handler), GINT_TO_POINTER(contextid));    g_signal_connect(G_OBJECT(notebook), "key-release-event", G_CALLBACK (signal_key_release_handler), GINT_TO_POINTER(contextid));
882    
883    /* デフォルトのページを追加 */    /* デフォルトのページを追加 */
884    prepend_tabpage(GTK_NOTEBOOK(notebook), g_strdup("*scratch*"));    append_tabpage(GTK_NOTEBOOK(notebook), g_strdup("*scratch*"));
885    
886    gtk_widget_grab_focus(notebook);    gtk_widget_grab_focus(notebook);
887    gtk_widget_show_all(Shiki_EDITOR_WINDOW);    gtk_widget_show_all(Shiki_EDITOR_WINDOW);

Legend:
Removed from v.1.17  
changed lines
  Added in v.1.18

Back to OSDN">Back to OSDN
ViewVC Help
Powered by ViewVC 1.1.26