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.42 by aloha, Sun Nov 19 12:11:25 2006 UTC revision 1.43 by aloha, Sun Nov 19 12:44:21 2006 UTC
# Line 137  static void update_modeline_label(); Line 137  static void update_modeline_label();
137  static void text_buffer_cursor_moved_handler();  static void text_buffer_cursor_moved_handler();
138    
139  /* 確認 */  /* 確認 */
 static void really_quit_dialog_yes(GtkWidget *widget, gboolean *flag);  
 static void really_quit_dialog_no(GtkWidget *widget, gint *flag);  
140  static gboolean not_yet_save_changes_really_quit(GtkTextBuffer *buffer);  static gboolean not_yet_save_changes_really_quit(GtkTextBuffer *buffer);
141  static gboolean delete_event_handler(GtkWidget *widget, GdkEvent *event, GtkTextBuffer *buffer);  static gboolean delete_event_handler(GtkWidget *widget, GdkEvent *event, GtkTextBuffer *buffer);
142    
# Line 666  static gboolean save_text_buffer(const g Line 664  static gboolean save_text_buffer(const g
664  static gchar *get_filename_from_dialog(const gchar *msg) {  static gchar *get_filename_from_dialog(const gchar *msg) {
665    
666    GtkWidget *dialog = gtk_file_selection_new(msg);    GtkWidget *dialog = gtk_file_selection_new(msg);
667    int resp = gtk_dialog_run(GTK_DIALOG(dialog));    gint resp = gtk_dialog_run(GTK_DIALOG(dialog));
668    gchar *filename = NULL;    gchar *filename = NULL;
669    
670    /* gtk_file_selection_get_filename が返す文字列定数は静的に確保されたバッファを指しているので,コピーしなければならない */    /* gtk_file_selection_get_filename が返す文字列定数は静的に確保されたバッファを指しているので,コピーしなければならない */
# Line 711  static void save_file_as() { Line 709  static void save_file_as() {
709    g_free(filename);    g_free(filename);
710  }  }
711    
 /* YES ボタン,NO ボタンそれぞれで呼ばれる callback */  
 static void really_quit_dialog_yes(GtkWidget *widget, gboolean *flag){*flag = FALSE;}  
 static void really_quit_dialog_no(GtkWidget *widget, gint *flag){*flag = TRUE;}  
   
712  /* 本当に終了してもよろしいですか ? */  /* 本当に終了してもよろしいですか ? */
713  static gboolean not_yet_save_changes_really_quit(GtkTextBuffer *buffer) {  static gboolean not_yet_save_changes_really_quit(GtkTextBuffer *buffer) {
714    GtkWidget *yes_button, *no_button;    GtkWidget *dialog;
715    static GtkWidget *dialog_window = NULL;    gint resp;
716    
717    /* 変更が無ければそのまま終了 */    /* 変更が無ければそのまま終了 */
718    if(!gtk_text_buffer_get_modified(buffer)) return FALSE;    if(!gtk_text_buffer_get_modified(buffer)) return FALSE;
719    
720    if(dialog_window == NULL) {    dialog = gtk_message_dialog_new(GTK_WINDOW(Shiki_EDITOR_WINDOW),
721      gboolean flag = TRUE;                 GTK_DIALOG_DESTROY_WITH_PARENT, GTK_MESSAGE_WARNING,
722      dialog_window = gtk_dialog_new ();                 GTK_BUTTONS_YES_NO, "バッファが変更されています.\nセーブしないで終了しますか ?");;
723      
724      /* 本当に終了してもよろしいですか ? ダイアログの初期化 */    resp = gtk_dialog_run(GTK_DIALOG(dialog));
725      g_signal_connect(G_OBJECT(dialog_window), "delete_event", G_CALLBACK(gtk_false), NULL);    gtk_widget_destroy(dialog);
726      g_signal_connect(G_OBJECT(dialog_window), "destroy", G_CALLBACK(gtk_main_quit), NULL);    /* "delete_event" の返り値が FALSE ならば"destory" が発行され,window は破壊される */
727      gtk_box_pack_start (GTK_BOX (GTK_DIALOG (dialog_window)->vbox),    if(GTK_RESPONSE_YES == resp)
728          gtk_label_new("バッファが変更されています.\nセーブしないで終了しますか ?"), TRUE, TRUE, 0);      return FALSE;
     gtk_window_set_title(GTK_WINDOW (dialog_window), "Really Quit ?");  
     /* YES のボタン */  
     yes_button = gtk_button_new_with_mnemonic("はい (_Y)");  
     g_signal_connect(GTK_OBJECT(yes_button), "clicked", G_CALLBACK(really_quit_dialog_yes), &flag);  
     g_signal_connect_swapped(GTK_OBJECT(yes_button), "clicked", G_CALLBACK(gtk_widget_destroy), G_OBJECT(dialog_window));  
     gtk_box_pack_start(GTK_BOX(GTK_DIALOG(dialog_window)->action_area),  yes_button, TRUE, TRUE, 0);  
   
     /* NO のボタン */  
     no_button = gtk_button_new_with_mnemonic("いいえ (_N)");  
     g_signal_connect(GTK_OBJECT(no_button), "clicked", G_CALLBACK(really_quit_dialog_no), &flag);  
     g_signal_connect_swapped(GTK_OBJECT(no_button), "clicked", G_CALLBACK(gtk_widget_destroy), G_OBJECT(dialog_window));  
     gtk_box_pack_start(GTK_BOX(GTK_DIALOG(dialog_window)->action_area),  no_button, TRUE, TRUE, 0);  
   
     gtk_window_set_modal(GTK_WINDOW(dialog_window), TRUE);  
     gtk_window_set_transient_for(GTK_WINDOW(dialog_window), GTK_WINDOW (Shiki_EDITOR_WINDOW));  
   
     gtk_widget_show_all(dialog_window);  
     gtk_main ();  
     dialog_window = NULL;  
   
     /* "delete_event" の返り値が FALSE ならば"destory" が発行され,window は破壊される */  
     return flag;  
   }  
729    return TRUE;    return TRUE;
730  }  }
731      
732  /* バッファがまだ保存されていないのに本当に終了するのかを尋ねる */  /* バッファがまだ保存されていないのに本当に終了するのかを尋ねる */
733  static gboolean delete_event_handler(GtkWidget *widget, GdkEvent *event, GtkTextBuffer *buffer){  static gboolean delete_event_handler(GtkWidget *widget, GdkEvent *event, GtkTextBuffer *buffer){
734    return not_yet_save_changes_really_quit(buffer);    return not_yet_save_changes_really_quit(buffer);

Legend:
Removed from v.1.42  
changed lines
  Added in v.1.43

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