Author: nick
Date: 2007-03-03 13:26:35 +0000 (Sat, 03 Mar 2007)
New Revision: 25072
Modified:
mousepad/branches/nick_0_3/ChangeLog
mousepad/branches/nick_0_3/mousepad/mousepad-dialogs.c
mousepad/branches/nick_0_3/mousepad/mousepad-dialogs.h
mousepad/branches/nick_0_3/mousepad/mousepad-private.h
mousepad/branches/nick_0_3/mousepad/mousepad-screen.c
mousepad/branches/nick_0_3/mousepad/mousepad-screen.h
mousepad/branches/nick_0_3/mousepad/mousepad-window-ui.xml
mousepad/branches/nick_0_3/mousepad/mousepad-window.c
Log:
* 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.
Modified: mousepad/branches/nick_0_3/ChangeLog
===================================================================
--- mousepad/branches/nick_0_3/ChangeLog 2007-03-03 13:23:34 UTC (rev
25071)
+++ mousepad/branches/nick_0_3/ChangeLog 2007-03-03 13:26:35 UTC (rev
25072)
@@ -1,5 +1,12 @@
2007-03-03 Nick Schermer <[EMAIL PROTECTED]>
+ * 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 <[EMAIL PROTECTED]>
+
* configure.in.in, mousepad/Makefile.am: Remove the PCRE dependency.
I should have removed this earier after some testing.
Modified: mousepad/branches/nick_0_3/mousepad/mousepad-dialogs.c
===================================================================
--- mousepad/branches/nick_0_3/mousepad/mousepad-dialogs.c 2007-03-03
13:23:34 UTC (rev 25071)
+++ mousepad/branches/nick_0_3/mousepad/mousepad-dialogs.c 2007-03-03
13:26:35 UTC (rev 25072)
@@ -22,6 +22,7 @@
#endif
#include <mousepad/mousepad-private.h>
+#include <mousepad/mousepad-dialogs.h>
#include <mousepad/mousepad-file.h>
@@ -117,8 +118,8 @@
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 @@
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 @@
"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 @@
-gboolean
+gint
mousepad_dialogs_save_changes (GtkWindow *parent)
{
GtkWidget *dialog;
@@ -209,12 +210,12 @@
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 @@
-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 @@
_("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);
- if (gtk_dialog_run (GTK_DIALOG (dialog)) == GTK_RESPONSE_OK)
- overwrite = TRUE;
+ /* run the dialog */
+ response = gtk_dialog_run (GTK_DIALOG (dialog));
+ /* destroy the dialog */
gtk_widget_destroy (dialog);
- return overwrite;
+ return response;
}
+
+
+
+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 response;
+}
Modified: mousepad/branches/nick_0_3/mousepad/mousepad-dialogs.h
===================================================================
--- mousepad/branches/nick_0_3/mousepad/mousepad-dialogs.h 2007-03-03
13:23:34 UTC (rev 25071)
+++ mousepad/branches/nick_0_3/mousepad/mousepad-dialogs.h 2007-03-03
13:26:35 UTC (rev 25072)
@@ -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 @@
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__ */
Modified: mousepad/branches/nick_0_3/mousepad/mousepad-private.h
===================================================================
--- mousepad/branches/nick_0_3/mousepad/mousepad-private.h 2007-03-03
13:23:34 UTC (rev 25071)
+++ mousepad/branches/nick_0_3/mousepad/mousepad-private.h 2007-03-03
13:26:35 UTC (rev 25072)
@@ -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)
Modified: mousepad/branches/nick_0_3/mousepad/mousepad-screen.c
===================================================================
--- mousepad/branches/nick_0_3/mousepad/mousepad-screen.c 2007-03-03
13:23:34 UTC (rev 25071)
+++ mousepad/branches/nick_0_3/mousepad/mousepad-screen.c 2007-03-03
13:26:35 UTC (rev 25072)
@@ -525,6 +525,38 @@
+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)
Modified: mousepad/branches/nick_0_3/mousepad/mousepad-screen.h
===================================================================
--- mousepad/branches/nick_0_3/mousepad/mousepad-screen.h 2007-03-03
13:23:34 UTC (rev 25071)
+++ mousepad/branches/nick_0_3/mousepad/mousepad-screen.h 2007-03-03
13:26:35 UTC (rev 25072)
@@ -49,6 +49,9 @@
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);
Modified: mousepad/branches/nick_0_3/mousepad/mousepad-window-ui.xml
===================================================================
--- mousepad/branches/nick_0_3/mousepad/mousepad-window-ui.xml 2007-03-03
13:23:34 UTC (rev 25071)
+++ mousepad/branches/nick_0_3/mousepad/mousepad-window-ui.xml 2007-03-03
13:26:35 UTC (rev 25072)
@@ -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" />
Modified: mousepad/branches/nick_0_3/mousepad/mousepad-window.c
===================================================================
--- mousepad/branches/nick_0_3/mousepad/mousepad-window.c 2007-03-03
13:23:34 UTC (rev 25071)
+++ mousepad/branches/nick_0_3/mousepad/mousepad-window.c 2007-03-03
13:26:35 UTC (rev 25072)
@@ -130,6 +130,8 @@
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 @@
{ "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 @@
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 @@
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");
+ /* 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 reload the document");
+ break;
+
+ case MOUSEPAD_RESPONSE_CANCEL:
+ /* do nothing */
+ break;
}
}
@@ -942,14 +962,14 @@
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 @@
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
[email protected]
http://foo-projects.org/mailman/listinfo/xfce4-commits