Updating branch refs/heads/master to cab0d1a984369283d99376e364e216e7fff04bc3 (commit) from 8a1670c4888db706b49b21c32d78786bf9ed2780 (commit)
commit cab0d1a984369283d99376e364e216e7fff04bc3 Author: Nick Schermer <n...@xfce.org> Date: Sat Mar 3 13:26:35 2007 +0000 * mousepad/mousepad-dialogs.{c,h}: Add response actions for Mousepad so it's easier to understand what happens. * mousepad/mousepad-window.c, * mousepad/mousepad-screen.{c,h}: Basic support for document reloading. (Old svn revision: 25072) ChangeLog | 7 +++ mousepad/mousepad-dialogs.c | 81 +++++++++++++++++++++++++++----------- mousepad/mousepad-dialogs.h | 15 ++++++- mousepad/mousepad-private.h | 3 + mousepad/mousepad-screen.c | 32 +++++++++++++++ mousepad/mousepad-screen.h | 3 + mousepad/mousepad-window-ui.xml | 2 + mousepad/mousepad-window.c | 84 ++++++++++++++++++++++++++++++++++----- 8 files changed, 193 insertions(+), 34 deletions(-) diff --git a/ChangeLog b/ChangeLog index 940a971..ab7c9cd 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,5 +1,12 @@ 2007-03-03 Nick Schermer <n...@xfce.org> + * mousepad/mousepad-dialogs.{c,h}: Add response actions for Mousepad so it's + easier to understand what happens. + * mousepad/mousepad-window.c, * mousepad/mousepad-screen.{c,h}: Basic + support for document reloading. + +2007-03-03 Nick Schermer <n...@xfce.org> + * configure.in.in, mousepad/Makefile.am: Remove the PCRE dependency. I should have removed this earier after some testing. diff --git a/mousepad/mousepad-dialogs.c b/mousepad/mousepad-dialogs.c index dbd9f5c..a26a478 100644 --- a/mousepad/mousepad-dialogs.c +++ b/mousepad/mousepad-dialogs.c @@ -22,6 +22,7 @@ #endif #include <mousepad/mousepad-private.h> +#include <mousepad/mousepad-dialogs.h> #include <mousepad/mousepad-file.h> @@ -117,8 +118,8 @@ mousepad_dialogs_jump_to (GtkWindow *parent, dialog = gtk_dialog_new_with_buttons (_("Jump To"), parent, GTK_DIALOG_MODAL | GTK_DIALOG_DESTROY_WITH_PARENT | GTK_DIALOG_NO_SEPARATOR, - GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL, - GTK_STOCK_JUMP_TO, GTK_RESPONSE_OK, + GTK_STOCK_CANCEL, MOUSEPAD_RESPONSE_CANCEL, + GTK_STOCK_JUMP_TO, MOUSEPAD_RESPONSE_JUMP_TO, NULL); gtk_dialog_set_default_response (GTK_DIALOG (dialog), GTK_RESPONSE_OK); gtk_window_set_resizable (GTK_WINDOW (dialog), FALSE); @@ -146,7 +147,7 @@ mousepad_dialogs_jump_to (GtkWindow *parent, gtk_widget_show (button); /* run the dialog */ - if (gtk_dialog_run (GTK_DIALOG (dialog)) == GTK_RESPONSE_OK) + if (gtk_dialog_run (GTK_DIALOG (dialog)) == MOUSEPAD_RESPONSE_JUMP_TO) line_number = gtk_spin_button_get_value_as_int (GTK_SPIN_BUTTON (button)); /* destroy the dialog */ @@ -174,13 +175,13 @@ mousepad_dialogs_clear_recent (GtkWindow *parent) "history owned by Mousepad.")); gtk_dialog_add_buttons (GTK_DIALOG (dialog), - GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL, - GTK_STOCK_CLEAR, GTK_RESPONSE_OK, + GTK_STOCK_CANCEL, MOUSEPAD_RESPONSE_CANCEL, + GTK_STOCK_CLEAR, MOUSEPAD_RESPONSE_CLEAR, NULL); - gtk_dialog_set_default_response (GTK_DIALOG (dialog), GTK_RESPONSE_CANCEL); + gtk_dialog_set_default_response (GTK_DIALOG (dialog), MOUSEPAD_RESPONSE_CANCEL); /* popup the dialog */ - if (gtk_dialog_run (GTK_DIALOG (dialog)) == GTK_RESPONSE_OK) + if (gtk_dialog_run (GTK_DIALOG (dialog)) == MOUSEPAD_RESPONSE_CLEAR) succeed = TRUE; /* destroy the dialog */ @@ -191,7 +192,7 @@ mousepad_dialogs_clear_recent (GtkWindow *parent) -gboolean +gint mousepad_dialogs_save_changes (GtkWindow *parent) { GtkWidget *dialog; @@ -209,12 +210,12 @@ mousepad_dialogs_save_changes (GtkWindow *parent) gtk_dialog_add_action_widget (GTK_DIALOG (dialog), mousepad_dialogs_image_button (GTK_STOCK_DELETE, _("_Don't Save")), - GTK_RESPONSE_REJECT); + MOUSEPAD_RESPONSE_DONT_SAVE); gtk_dialog_add_buttons (GTK_DIALOG (dialog), - GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL, - GTK_STOCK_SAVE, GTK_RESPONSE_OK, + GTK_STOCK_CANCEL, MOUSEPAD_RESPONSE_CANCEL, + GTK_STOCK_SAVE, MOUSEPAD_RESPONSE_SAVE, NULL); - gtk_dialog_set_default_response (GTK_DIALOG (dialog), GTK_RESPONSE_OK); + gtk_dialog_set_default_response (GTK_DIALOG (dialog), MOUSEPAD_RESPONSE_SAVE); /* run the dialog and wait for a response */ response = gtk_dialog_run (GTK_DIALOG (dialog)); @@ -297,16 +298,15 @@ mousepad_dialogs_save_as (GtkWindow *parent, -gboolean +gint mousepad_dialogs_ask_overwrite (GtkWindow *parent, const gchar *filename) { GtkWidget *dialog; - gboolean overwrite = FALSE; + gint response; dialog = gtk_message_dialog_new (parent, - GTK_DIALOG_MODAL - | GTK_DIALOG_DESTROY_WITH_PARENT, + GTK_DIALOG_MODAL | GTK_DIALOG_DESTROY_WITH_PARENT, GTK_MESSAGE_QUESTION, GTK_BUTTONS_NONE, _("The file has been externally modified. Are you sure " @@ -315,19 +315,54 @@ mousepad_dialogs_ask_overwrite (GtkWindow *parent, _("If you save the file, the external changes " "to \"%s\" will be lost."), filename); - gtk_dialog_add_button (GTK_DIALOG (dialog), GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL); + gtk_dialog_add_button (GTK_DIALOG (dialog), GTK_STOCK_CANCEL, MOUSEPAD_RESPONSE_CANCEL); gtk_dialog_add_action_widget (GTK_DIALOG (dialog), mousepad_dialogs_image_button (GTK_STOCK_SAVE, _("_Overwrite")), - GTK_RESPONSE_OK); + MOUSEPAD_RESPONSE_OVERWRITE); gtk_dialog_add_action_widget (GTK_DIALOG (dialog), mousepad_dialogs_image_button (GTK_STOCK_REFRESH, _("_Reload")), - GTK_RESPONSE_REJECT); - gtk_dialog_set_default_response (GTK_DIALOG (dialog), GTK_RESPONSE_CANCEL); + MOUSEPAD_RESPONSE_RELOAD); + gtk_dialog_set_default_response (GTK_DIALOG (dialog), MOUSEPAD_RESPONSE_CANCEL); + + /* run the dialog */ + response = gtk_dialog_run (GTK_DIALOG (dialog)); + + /* destroy the dialog */ + gtk_widget_destroy (dialog); + + return response; +} + - if (gtk_dialog_run (GTK_DIALOG (dialog)) == GTK_RESPONSE_OK) - overwrite = TRUE; +gint +mousepad_dialogs_ask_reload (GtkWindow *parent) +{ + GtkWidget *dialog; + gint response; + + dialog = gtk_message_dialog_new (parent, + GTK_DIALOG_MODAL | GTK_DIALOG_DESTROY_WITH_PARENT, + GTK_MESSAGE_QUESTION, + GTK_BUTTONS_NONE, + _("Do you want to save your changes before reloading?")); + gtk_message_dialog_format_secondary_text (GTK_MESSAGE_DIALOG (dialog), + _("If you reload the file, you changes will be lost.")); + + gtk_dialog_add_buttons (GTK_DIALOG (dialog), + GTK_STOCK_CANCEL, MOUSEPAD_RESPONSE_CANCEL, + GTK_STOCK_SAVE_AS, MOUSEPAD_RESPONSE_SAVE_AS, + NULL); + gtk_dialog_add_action_widget (GTK_DIALOG (dialog), + mousepad_dialogs_image_button (GTK_STOCK_REFRESH, _("_Reload")), + MOUSEPAD_RESPONSE_RELOAD); + gtk_dialog_set_default_response (GTK_DIALOG (dialog), MOUSEPAD_RESPONSE_CANCEL); + + /* run the dialog */ + response = gtk_dialog_run (GTK_DIALOG (dialog)); + + /* destroy the dialog */ gtk_widget_destroy (dialog); - return overwrite; + return response; } diff --git a/mousepad/mousepad-dialogs.h b/mousepad/mousepad-dialogs.h index b6f0310..f884fb9 100644 --- a/mousepad/mousepad-dialogs.h +++ b/mousepad/mousepad-dialogs.h @@ -22,6 +22,17 @@ G_BEGIN_DECLS +enum { + MOUSEPAD_RESPONSE_CANCEL, + MOUSEPAD_RESPONSE_CLEAR, + MOUSEPAD_RESPONSE_DONT_SAVE, + MOUSEPAD_RESPONSE_JUMP_TO, + MOUSEPAD_RESPONSE_OVERWRITE, + MOUSEPAD_RESPONSE_RELOAD, + MOUSEPAD_RESPONSE_SAVE, + MOUSEPAD_RESPONSE_SAVE_AS, +}; + void mousepad_dialogs_show_about (GtkWindow *parent); @@ -40,9 +51,11 @@ gint mousepad_dialogs_save_changes (GtkWindow *parent); gchar *mousepad_dialogs_save_as (GtkWindow *parent, const gchar *filename); -gboolean mousepad_dialogs_ask_overwrite (GtkWindow *parent, +gint mousepad_dialogs_ask_overwrite (GtkWindow *parent, const gchar *filename); +gint mousepad_dialogs_ask_reload (GtkWindow *parent); + G_END_DECLS #endif /* !__MOUSEPAD_DIALOGS_H__ */ diff --git a/mousepad/mousepad-private.h b/mousepad/mousepad-private.h index 7ed596e..9c4aa14 100644 --- a/mousepad/mousepad-private.h +++ b/mousepad/mousepad-private.h @@ -25,6 +25,9 @@ G_BEGIN_DECLS +#define DEBUG_LINE g_print ("%d\n", __LINE__); + + /* support macros for debugging */ #ifndef NDEBUG #define _mousepad_assert(expr) g_assert (expr) diff --git a/mousepad/mousepad-screen.c b/mousepad/mousepad-screen.c index 1ac53a3..348a6a5 100644 --- a/mousepad/mousepad-screen.c +++ b/mousepad/mousepad-screen.c @@ -525,6 +525,38 @@ mousepad_screen_save_file (MousepadScreen *screen, +gboolean +mousepad_screen_reload (MousepadScreen *screen, + GError **error) +{ + GtkTextBuffer *buffer; + GtkTextIter start, end; + gchar *filename; + gboolean succeed = FALSE; + + _mousepad_return_val_if_fail (error == NULL || *error == NULL, FALSE); + + /* get the buffer */ + buffer = mousepad_screen_get_text_buffer (screen); + + /* remove the content of the textview */ + gtk_text_buffer_get_bounds (buffer, &start, &end); + gtk_text_buffer_delete (buffer, &start, &end); + + /* we have to copy the filename, because mousepad_screen_open_file (resets) the name */ + filename = g_strdup (screen->filename); + + /* reload the document */ + succeed = mousepad_screen_open_file (screen, filename, error); + + /* cleanup */ + g_free (filename); + + return succeed; +} + + + const gchar * mousepad_screen_get_title (MousepadScreen *screen, gboolean show_full_path) diff --git a/mousepad/mousepad-screen.h b/mousepad/mousepad-screen.h index c7274bc..f7a69d2 100644 --- a/mousepad/mousepad-screen.h +++ b/mousepad/mousepad-screen.h @@ -49,6 +49,9 @@ gboolean mousepad_screen_save_file (MousepadScreen *scree const gchar *filename, GError **error); +gboolean mousepad_screen_reload (MousepadScreen *screen, + GError **error); + const gchar *mousepad_screen_get_title (MousepadScreen *screen, gboolean show_full_path); diff --git a/mousepad/mousepad-window-ui.xml b/mousepad/mousepad-window-ui.xml index 77b6c72..9c2e2d0 100644 --- a/mousepad/mousepad-window-ui.xml +++ b/mousepad/mousepad-window-ui.xml @@ -23,6 +23,8 @@ <menuitem action="save-file" /> <menuitem action="save-file-as" /> <separator /> + <menuitem action="reload" /> + <separator /> <menuitem action="close-tab" /> <menuitem action="close-window" /> <menuitem action="close-all-windows" /> diff --git a/mousepad/mousepad-window.c b/mousepad/mousepad-window.c index b5bf592..9debbd7 100644 --- a/mousepad/mousepad-window.c +++ b/mousepad/mousepad-window.c @@ -130,6 +130,8 @@ static void mousepad_window_action_save_file (GtkAction MousepadWindow *window); static void mousepad_window_action_save_file_as (GtkAction *action, MousepadWindow *window); +static void mousepad_window_action_reload (GtkAction *action, + MousepadWindow *window); static void mousepad_window_action_close_tab (GtkAction *action, MousepadWindow *window); static void mousepad_window_action_close (GtkAction *action, @@ -216,6 +218,7 @@ static const GtkActionEntry action_entries[] = { "clear-recent", GTK_STOCK_CLEAR, N_("Clear _History"), NULL, N_("Clear the recently used files history"), G_CALLBACK (mousepad_window_action_clear_recent), }, { "save-file", GTK_STOCK_SAVE, N_("_Save"), NULL, N_("Save the current file"), G_CALLBACK (mousepad_window_action_save_file), }, { "save-file-as", GTK_STOCK_SAVE_AS, N_("Save _As"), NULL, N_("Save current document as another file"), G_CALLBACK (mousepad_window_action_save_file_as), }, + { "reload", GTK_STOCK_REFRESH, N_("Re_load"), NULL, N_("Reload this document."), G_CALLBACK (mousepad_window_action_reload), }, { "close-tab", GTK_STOCK_CLOSE, N_("C_lose Tab"), "<control>W", N_("Close the current file"), G_CALLBACK (mousepad_window_action_close_tab), }, { "close-window", GTK_STOCK_QUIT, N_("_Close Window"), "<control>Q", N_("Quit the program"), G_CALLBACK (mousepad_window_action_close), }, { "close-all-windows", NULL, N_("Close _All Windows"), "<control><shift>W", N_("Close all Mousepad windows"), G_CALLBACK (mousepad_window_action_close_all_windows), }, @@ -790,6 +793,7 @@ mousepad_window_save (MousepadWindow *window, GError *error = NULL; const gchar *message; gint mtime; + gint action = MOUSEPAD_RESPONSE_OVERWRITE; /* get the current filename */ filename = mousepad_screen_get_filename (screen); @@ -826,15 +830,31 @@ mousepad_window_save (MousepadWindow *window, mtime = mousepad_screen_get_mtime (screen); /* check if the file has been modified externally, if so ask the user if - * he or she wants to overwrite the file */ - if (mousepad_file_get_externally_modified (filename, mtime) == FALSE || - mousepad_dialogs_ask_overwrite (GTK_WINDOW (window), filename) == TRUE) + * he or she wants to overwrite/reload or cancel the action */ + if (G_UNLIKELY (mousepad_file_get_externally_modified (filename, mtime))) + action = mousepad_dialogs_ask_overwrite (GTK_WINDOW (window), filename); + + switch (action) { - /* save the file */ - succeed = mousepad_screen_save_file (screen, filename, &error); + case MOUSEPAD_RESPONSE_OVERWRITE: + /* save the file */ + succeed = mousepad_screen_save_file (screen, filename, &error); + + /* the warning message for save */ + message = _("Failed to save the document"); + break; + + case MOUSEPAD_RESPONSE_RELOAD: + /* reload the document */ + succeed = mousepad_screen_reload (screen, &error); - /* the warning message for save */ - message = _("Failed to save the document"); + /* the warning message for save */ + message = _("Failed to reload the document"); + break; + + case MOUSEPAD_RESPONSE_CANCEL: + /* do nothing */ + break; } } @@ -942,14 +962,14 @@ mousepad_window_close_screen (MousepadWindow *window, switch (response) { - case GTK_RESPONSE_REJECT: + case MOUSEPAD_RESPONSE_DONT_SAVE: /* don't save, only destroy the screen */ succeed = TRUE; break; - case GTK_RESPONSE_CANCEL: + case MOUSEPAD_RESPONSE_CANCEL: /* we do nothing */ break; - case GTK_RESPONSE_OK: + case MOUSEPAD_RESPONSE_SAVE: succeed = mousepad_window_save (window, screen, FALSE); break; } @@ -1655,6 +1675,50 @@ mousepad_window_action_save_file_as (GtkAction *action, static void +mousepad_window_action_reload (GtkAction *action, + MousepadWindow *window) +{ + MousepadScreen *screen; + GError *error = NULL; + const gchar *message; + gint response = MOUSEPAD_RESPONSE_RELOAD; + + screen = mousepad_window_get_active (window); + if (G_LIKELY (screen != NULL)) + { + /* ask what to do when the document still has modifications */ + if (mousepad_screen_get_modified (screen)) + response = mousepad_dialogs_ask_reload (GTK_WINDOW (window)); + + switch (response) + { + case MOUSEPAD_RESPONSE_CANCEL: + /* do nothing */ + break; + + case MOUSEPAD_RESPONSE_SAVE_AS: + /* try to save the document, break when this went wrong, else + * fall-though and try to reload the document */ + if (!mousepad_window_save (window, screen, TRUE)) + break; + + case MOUSEPAD_RESPONSE_RELOAD: + if (!mousepad_screen_reload (screen, &error)) + message = _("Failed to reload the document"); + break; + } + } + + if (G_UNLIKELY (error != NULL)) + { + mousepad_dialogs_show_error (GTK_WINDOW (window), error, message); + g_error_free (error); + } +} + + + +static void mousepad_window_action_close_tab (GtkAction *action, MousepadWindow *window) { _______________________________________________ Xfce4-commits mailing list Xfce4-commits@xfce.org https://mail.xfce.org/mailman/listinfo/xfce4-commits