From: Nathan F. <no...@us...> - 2004-11-26 19:19:01
|
Update of /cvsroot/gnomeoutliner/outliner/src In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv23906/src Modified Files: outliner-actions.c outliner-actions.h outliner-document.c outliner-document.h outliner-file.c outliner-file.h outliner-opml.c outliner-view.c outliner-window.c Log Message: from Javier Amor GarcÃa: """My first contribution is a patch that, following the TODO, "add a modified flag in OutlinerDocument? that tiggers a "Save Changes" message box when quitting or opening a new doc". One caveat about this patch; when the user starts the outliner or makes a new doc, the outliner automatically adds a new element. This behavior may be troublesome with the new feature, because just starting the thing or making the new thing changes the doc. I haven't made a workaround because it made the code uglier. The solution may be a change in this behavior or the mentioned workaround.""" Index: outliner-actions.h =================================================================== RCS file: /cvsroot/gnomeoutliner/outliner/src/outliner-actions.h,v retrieving revision 1.2 retrieving revision 1.3 diff -u -d -r1.2 -r1.3 --- outliner-actions.h 23 Jun 2004 03:02:32 -0000 1.2 +++ outliner-actions.h 26 Nov 2004 19:18:47 -0000 1.3 @@ -36,6 +36,7 @@ void outliner_action_save (GtkAction *action, OutlinerWindow *window); void outliner_action_save_as (GtkAction *action, OutlinerWindow *window); void outliner_action_export (GtkAction *action, OutlinerWindow *window); +void outliner_action_quit (GtkAction *action, OutlinerWindow *window); void outliner_action_delete_item (GtkAction *action, OutlinerWindow *window); void outliner_action_select_all (GtkAction *action, OutlinerWindow *window); Index: outliner-document.h =================================================================== RCS file: /cvsroot/gnomeoutliner/outliner/src/outliner-document.h,v retrieving revision 1.2 retrieving revision 1.3 diff -u -d -r1.2 -r1.3 --- outliner-document.h 23 Jun 2004 03:02:32 -0000 1.2 +++ outliner-document.h 26 Nov 2004 19:18:47 -0000 1.3 @@ -35,6 +35,7 @@ struct _OutlinerDocument { GtkTreeStore parent; + gboolean changed; }; struct _OutlinerDocumentClass { Index: outliner-view.c =================================================================== RCS file: /cvsroot/gnomeoutliner/outliner/src/outliner-view.c,v retrieving revision 1.2 retrieving revision 1.3 diff -u -d -r1.2 -r1.3 --- outliner-view.c 23 Jun 2004 03:02:32 -0000 1.2 +++ outliner-view.c 26 Nov 2004 19:18:47 -0000 1.3 @@ -82,6 +82,8 @@ gtk_tree_view_set_cursor_on_cell(GTK_TREE_VIEW (view), path, gtk_tree_view_get_column(GTK_TREE_VIEW (view), 0), NULL, TRUE); gtk_tree_path_free(path); + + doc->changed = TRUE; } void @@ -119,8 +121,6 @@ } g_list_foreach(reflist, (GFunc)gtk_tree_row_reference_free, NULL); g_list_free(reflist); - - } gboolean @@ -259,6 +259,7 @@ priv->sel = gtk_tree_view_get_selection(tree); gtk_tree_selection_set_mode(priv->sel, GTK_SELECTION_MULTIPLE); + return GTK_WIDGET (view); } Index: outliner-file.c =================================================================== RCS file: /cvsroot/gnomeoutliner/outliner/src/outliner-file.c,v retrieving revision 1.1.1.1 retrieving revision 1.2 diff -u -d -r1.1.1.1 -r1.2 --- outliner-file.c 19 Jun 2004 05:45:56 -0000 1.1.1.1 +++ outliner-file.c 26 Nov 2004 19:18:47 -0000 1.2 @@ -79,6 +79,25 @@ outliner_file_save_as(window, doc); } +void +outliner_file_save_changed(OutlinerWindow *window, OutlinerDocument *doc) +{ + GtkWidget *save_file_question; + + if (doc->changed == FALSE) + return; + + save_file_question = gtk_message_dialog_new(GTK_WINDOW(window), GTK_DIALOG_DESTROY_WITH_PARENT, GTK_MESSAGE_QUESTION, GTK_BUTTONS_YES_NO, _("File changed, save file?")); + gtk_dialog_set_default_response(GTK_DIALOG (save_file_question), GTK_RESPONSE_YES); + if (gtk_dialog_run(GTK_DIALOG(save_file_question)) == GTK_RESPONSE_YES) + outliner_file_save(window, doc); + + gtk_widget_destroy(save_file_question); + +} + + + void outliner_file_open(OutlinerWindow *window, OutlinerDocument *doc) { Index: outliner-document.c =================================================================== RCS file: /cvsroot/gnomeoutliner/outliner/src/outliner-document.c,v retrieving revision 1.2 retrieving revision 1.3 diff -u -d -r1.2 -r1.3 --- outliner-document.c 23 Jun 2004 03:02:32 -0000 1.2 +++ outliner-document.c 26 Nov 2004 19:18:47 -0000 1.3 @@ -113,6 +113,8 @@ gtk_tree_model_get_iter(model, &prev, path); move_subtree (store, &cur, &prev, NULL); + + doc->changed=TRUE; } void @@ -131,6 +133,8 @@ move_subtree (store, &cur, &grandparent, &parent); else move_subtree (store, &cur, NULL, &parent); + + doc->changed=TRUE; } void @@ -148,6 +152,8 @@ /* this will fail on top-level items: waiting on gnome bug #139785 */ gtk_tree_store_swap(store, &cur, &prev); + + doc->changed=TRUE; } void @@ -164,6 +170,8 @@ /* this will fail on top-level items: waiting on gnome bug #139785 */ gtk_tree_store_swap(store, &cur, &next); + + doc->changed=TRUE; } void @@ -176,6 +184,8 @@ gtk_tree_model_get_iter(model, &cur, path); gtk_tree_store_remove(store, &cur); + + doc->changed=TRUE; } /*-------------*/ @@ -184,7 +194,7 @@ outliner_document_init (OutlinerDocument *doc) { //OutlinerDocumentPrivate *priv = OUTLINER_DOCUMENT_GET_PRIVATE (doc); - + doc->changed = FALSE; } static void Index: outliner-actions.c =================================================================== RCS file: /cvsroot/gnomeoutliner/outliner/src/outliner-actions.c,v retrieving revision 1.3 retrieving revision 1.4 diff -u -d -r1.3 -r1.4 --- outliner-actions.c 28 Jun 2004 15:48:34 -0000 1.3 +++ outliner-actions.c 26 Nov 2004 19:18:47 -0000 1.4 @@ -53,6 +53,8 @@ view = outliner_window_get_view(window); doc = outliner_view_get_document(view); + outliner_file_save_changed(window, doc); + gtk_tree_store_clear(GTK_TREE_STORE (doc)); outliner_view_add_item(view); } @@ -66,6 +68,8 @@ view = outliner_window_get_view(window); doc = outliner_view_get_document(view); + outliner_file_save_changed(window, doc); + outliner_file_open(window, doc); } @@ -78,6 +82,7 @@ view = outliner_window_get_view(window); doc = outliner_view_get_document(view); + outliner_file_save_changed(window, doc); /* TODO: open doc from location */ } @@ -117,6 +122,23 @@ /* TODO: export the doc */ } +void +outliner_action_quit (GtkAction *action, OutlinerWindow *window) +{ + OutlinerView *view; + OutlinerDocument *doc; + + view = outliner_window_get_view(window); + doc = outliner_view_get_document(view); + outliner_file_save_changed(window, doc); + if (doc->changed) + g_printf("doch changed\n"); + else + g_printf("doch NOT changed\n"); + gtk_main_quit(); + +} + /* outline actions */ void Index: outliner-window.c =================================================================== RCS file: /cvsroot/gnomeoutliner/outliner/src/outliner-window.c,v retrieving revision 1.4 retrieving revision 1.5 diff -u -d -r1.4 -r1.5 --- outliner-window.c 23 Jun 2004 21:18:26 -0000 1.4 +++ outliner-window.c 26 Nov 2004 19:18:47 -0000 1.5 @@ -85,7 +85,7 @@ N_("Show the properties of this outline"), G_CALLBACK (outliner_action_dummy) }, { "QuitAction", GTK_STOCK_QUIT, NULL, NULL, - N_("Quit Gnome Outliner"), gtk_main_quit }, + N_("Quit Gnome Outliner"), G_CALLBACK(outliner_action_quit) }, /* Edit Menu */ { "UndoAction", GTK_STOCK_UNDO, NULL, "<ctrl>Z", @@ -296,6 +296,15 @@ return FALSE; } +static gboolean +on_delete(GtkWidget *widget, gpointer data) +{ + OutlinerWindow *window = (OutlinerWindow*) widget; + outliner_action_quit(NULL, window); + +} + + static void outliner_window_init (OutlinerWindow *window) { @@ -366,6 +375,7 @@ g_signal_connect(G_OBJECT (priv->view), "key_press_event", G_CALLBACK(key_press_cb), window); + g_signal_connect(G_OBJECT (window), "delete_event", G_CALLBACK(on_delete), NULL); } static void Index: outliner-file.h =================================================================== RCS file: /cvsroot/gnomeoutliner/outliner/src/outliner-file.h,v retrieving revision 1.1.1.1 retrieving revision 1.2 diff -u -d -r1.1.1.1 -r1.2 --- outliner-file.h 19 Jun 2004 05:45:56 -0000 1.1.1.1 +++ outliner-file.h 26 Nov 2004 19:18:47 -0000 1.2 @@ -29,6 +29,7 @@ void outliner_file_save_as(OutlinerWindow *window, OutlinerDocument *doc); void outliner_file_save(OutlinerWindow *window, OutlinerDocument *doc); +void outliner_file_save_changed(OutlinerWindow *window, OutlinerDocument *doc); void outliner_file_open(OutlinerWindow *window, OutlinerDocument *doc); #endif Index: outliner-opml.c =================================================================== RCS file: /cvsroot/gnomeoutliner/outliner/src/outliner-opml.c,v retrieving revision 1.1.1.1 retrieving revision 1.2 diff -u -d -r1.1.1.1 -r1.2 --- outliner-opml.c 19 Jun 2004 05:45:56 -0000 1.1.1.1 +++ outliner-opml.c 26 Nov 2004 19:18:47 -0000 1.2 @@ -113,6 +113,8 @@ outliner->file->uri = filename; outliner_mainwindow_set_title(); */ + + doc->changed= FALSE; } } @@ -200,5 +202,6 @@ outliner->file->uri = filename; outliner_mainwindow_set_title(); */ + doc->changed = FALSE; } |