[Xfce4-commits] <mousepad:master> * 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.
Nick Schermer
noreply at xfce.org
Sat May 5 21:30:10 CEST 2012
Updating branch refs/heads/master
to cab0d1a984369283d99376e364e216e7fff04bc3 (commit)
from 8a1670c4888db706b49b21c32d78786bf9ed2780 (commit)
commit cab0d1a984369283d99376e364e216e7fff04bc3
Author: Nick Schermer <nick at 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 <nick at 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 <nick at 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)
{
More information about the Xfce4-commits
mailing list