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.54 by aloha, Fri Nov 24 19:31:04 2006 UTC revision 1.55 by aloha, Sun Nov 26 00:41:57 2006 UTC
# Line 335  static void delete_range_handler(GtkText Line 335  static void delete_range_handler(GtkText
335  /* タブが切り替わる時のイベントハンドリング */  /* タブが切り替わる時のイベントハンドリング */
336  static void switch_tabpage_handler(GtkNotebook *notebook, GtkNotebookPage *page, guint pagenum) {  static void switch_tabpage_handler(GtkNotebook *notebook, GtkNotebookPage *page, guint pagenum) {
337    /* タブに対応する情報が格納された構造体を切替える */    /* タブに対応する情報が格納された構造体を切替える */
338    Shiki_CURRENT_TAB_INFO = (ShikiBuffer *)g_list_nth_data(Shiki_EDITOR_TAB_INFO_LIST, pagenum);    Shiki_CURRENT_TAB_INFO = (ShikiBuffer *)g_list_nth_data(Shiki_EDITOR_BUFFER_LIST, pagenum);
339    
340    /* 現在のタブ番号を切替える */    /* 現在のタブ番号を切替える */
341    Shiki_CURRENT_TAB_NUM = pagenum;    Shiki_CURRENT_TAB_NUM = pagenum;
# Line 482  static gboolean signal_key_press_handler Line 482  static gboolean signal_key_press_handler
482    return FALSE;    return FALSE;
483  }  }
484    
485    ScmClass *ShikiBufferClass;
486    static gint compBuffer(gconstpointer a, gconstpointer b) {
487      return ((ShikiBuffer *)a)->text_buffer == b ? 0 : 1;
488    }
489    
490    static void buffer_print(ScmObj obj, ScmPort *out, ScmWriteContext *ctx) {
491      GtkTextBuffer *b = SHIKI_BUFFER_UNBOX(obj);
492      GList *l  = g_list_find_custom(Shiki_EDITOR_BUFFER_LIST, b, compBuffer);
493        if(l)
494          Scm_Printf(out, "#<buffer: %s>", ((ShikiBuffer *)(l->data))->name);
495        else
496          Scm_Printf(out, "#<deleted buffer: %p>", b);
497    }
498    
499    static void buffer_cleanup(ScmObj obj)
500    {
501      g_object_unref(SHIKI_BUFFER_UNBOX(obj));
502    }
503    
504  /* ノートブックにタブとページ (バッファ) を追加 */  /* ノートブックにタブとページ (バッファ) を追加 */
505  static void get_buffer_create(gchar *filename) {  static void get_buffer_create(gchar *filename) {
506    /*-------------------- 新しいタブを作る ----------------------------------*/    /*-------------------- 新しいタブを作る ----------------------------------*/
# Line 493  static void get_buffer_create(gchar *fil Line 512  static void get_buffer_create(gchar *fil
512    tabinfo->name      = g_path_get_basename(filename);    tabinfo->name      = g_path_get_basename(filename);
513    tabinfo->tabpage_label = g_strndup(tabinfo->name, 7);    tabinfo->tabpage_label = g_strndup(tabinfo->name, 7);
514    tabinfo->env           = Scm_MakeModule(NULL, FALSE);    tabinfo->env           = Scm_MakeModule(NULL, FALSE);
515      
516      ShikiBufferClass = Scm_MakeForeignPointerClass(SCM_MODULE(tabinfo->env),
517                             "<buffer>", buffer_print, buffer_cleanup,
518                             SCM_FOREIGN_POINTER_KEEP_IDENTITY
519                             |
520                             SCM_FOREIGN_POINTER_MAP_NULL);
521    
522    /* xyzzy lisp 関数を登録 */    /* xyzzy lisp 関数を登録 */
523    Scm_Init_xyzzylisp(SCM_MODULE(tabinfo->env));    Scm_Init_xyzzylisp(SCM_MODULE(tabinfo->env));
# Line 533  static void get_buffer_create(gchar *fil Line 558  static void get_buffer_create(gchar *fil
558    /* タブをノートブックに登録する */    /* タブをノートブックに登録する */
559    gtk_notebook_append_page(Shiki_EDITOR_NOTEBOOK, GTK_WIDGET(tabinfo->tabpage), gtk_label_new(tabinfo->tabpage_label));    gtk_notebook_append_page(Shiki_EDITOR_NOTEBOOK, GTK_WIDGET(tabinfo->tabpage), gtk_label_new(tabinfo->tabpage_label));
560    /* 対応するタブ情報を大域テーブルに保存しておく */    /* 対応するタブ情報を大域テーブルに保存しておく */
561    Shiki_EDITOR_TAB_INFO_LIST = g_list_append(Shiki_EDITOR_TAB_INFO_LIST, tabinfo);    Shiki_EDITOR_BUFFER_LIST = g_list_append(Shiki_EDITOR_BUFFER_LIST, tabinfo);
562    
563    gtk_widget_show_all(GTK_WIDGET(Shiki_EDITOR_NOTEBOOK));      gtk_widget_show_all(GTK_WIDGET(Shiki_EDITOR_NOTEBOOK));  
564    /* 開いたページに移動する */    /* 開いたページに移動する */
565    gtk_notebook_set_current_page(Shiki_EDITOR_NOTEBOOK, g_list_length(Shiki_EDITOR_TAB_INFO_LIST) - 1);    gtk_notebook_set_current_page(Shiki_EDITOR_NOTEBOOK, g_list_length(Shiki_EDITOR_BUFFER_LIST) - 1);
566  }  }
567    
568  static void append_default_tabpage_handler() {  static void append_default_tabpage_handler() {
# Line 547  static void append_default_tabpage_handl Line 572  static void append_default_tabpage_handl
572  /* ノートブックからタブとページ (バッファ) を削除 */  /* ノートブックからタブとページ (バッファ) を削除 */
573  static void remove_tabpage() {  static void remove_tabpage() {
574    /* タブが 1 つしか残っていなかったら消させない */    /* タブが 1 つしか残っていなかったら消させない */
575    if(g_list_length(Shiki_EDITOR_TAB_INFO_LIST) == 1)    if(g_list_length(Shiki_EDITOR_BUFFER_LIST) == 1)
576      return;      return;
577    if(!not_yet_save_changes_really_quit(Shiki_CURRENT_TEXT_BUFFER)) {    if(!not_yet_save_changes_really_quit(Shiki_CURRENT_TEXT_BUFFER)) {
578      /* デリートハンドラをエディタトップレベルのウィジットから取り除く */      /* デリートハンドラをエディタトップレベルのウィジットから取り除く */
# Line 558  static void remove_tabpage() { Line 583  static void remove_tabpage() {
583      g_free(Shiki_CURRENT_TAB_TITLE);      g_free(Shiki_CURRENT_TAB_TITLE);
584      g_free(Shiki_CURRENT_BASENAME);      g_free(Shiki_CURRENT_BASENAME);
585      g_free(Shiki_CURRENT_FILENAME);      g_free(Shiki_CURRENT_FILENAME);
586      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_BUFFER_LIST = g_list_delete_link(Shiki_EDITOR_BUFFER_LIST, g_list_nth(Shiki_EDITOR_BUFFER_LIST, Shiki_CURRENT_TAB_NUM));
587      g_free(Shiki_CURRENT_TAB_INFO);      g_free(Shiki_CURRENT_TAB_INFO);
588    
589      /* カレントのタブ情報を更新 */      /* カレントのタブ情報を更新 */
590      Shiki_CURRENT_TAB_INFO = g_list_nth_data(Shiki_EDITOR_TAB_INFO_LIST, Shiki_CURRENT_TAB_NUM);      Shiki_CURRENT_TAB_INFO = g_list_nth_data(Shiki_EDITOR_BUFFER_LIST, Shiki_CURRENT_TAB_NUM);
591      gtk_notebook_remove_page(Shiki_EDITOR_NOTEBOOK, Shiki_CURRENT_TAB_NUM);      gtk_notebook_remove_page(Shiki_EDITOR_NOTEBOOK, Shiki_CURRENT_TAB_NUM);
592      /* ウィジットを強制的に再描画 */      /* ウィジットを強制的に再描画 */
593      gtk_widget_queue_draw(GTK_WIDGET(Shiki_EDITOR_NOTEBOOK));      gtk_widget_queue_draw(GTK_WIDGET(Shiki_EDITOR_NOTEBOOK));

Legend:
Removed from v.1.54  
changed lines
  Added in v.1.55

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