[gtksourceview/wip/undo-redo: 3/3] UndoManager: another batch of code clean-up
- From: Sébastien Wilmet <swilmet src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gtksourceview/wip/undo-redo: 3/3] UndoManager: another batch of code clean-up
- Date: Fri, 22 Aug 2014 17:04:04 +0000 (UTC)
commit 22f8c84817b50d71a6ab18cbc4df6527f430a01c
Author: Sébastien Wilmet <swilmet gnome org>
Date: Fri Aug 22 19:03:08 2014 +0200
UndoManager: another batch of code clean-up
gtksourceview/gtksourceundomanagerdefault.c | 61 ++++++++++++++++++---------
1 files changed, 41 insertions(+), 20 deletions(-)
---
diff --git a/gtksourceview/gtksourceundomanagerdefault.c b/gtksourceview/gtksourceundomanagerdefault.c
index 90d3f31..f386b84 100644
--- a/gtksourceview/gtksourceundomanagerdefault.c
+++ b/gtksourceview/gtksourceundomanagerdefault.c
@@ -27,11 +27,8 @@
#endif
#include "gtksourceundomanagerdefault.h"
-
#include <string.h>
-
#include "gtksourceundomanager.h"
-#include "gtksourceview-i18n.h"
#define DEFAULT_MAX_UNDO_LEVELS -1
@@ -103,13 +100,6 @@ struct _GtkSourceUndoAction
guint modified : 1;
};
-enum
-{
- PROP_0,
- PROP_BUFFER,
- PROP_MAX_UNDO_LEVELS
-};
-
struct _GtkSourceUndoManagerDefaultPrivate
{
/* Weak ref to the buffer. */
@@ -150,6 +140,13 @@ struct _GtkSourceUndoManagerDefaultPrivate
GtkSourceUndoAction *modified_action;
};
+enum
+{
+ PROP_0,
+ PROP_BUFFER,
+ PROP_MAX_UNDO_LEVELS
+};
+
static void gtk_source_undo_manager_iface_init (GtkSourceUndoManagerIface *iface);
G_DEFINE_TYPE_WITH_CODE (GtkSourceUndoManagerDefault, gtk_source_undo_manager_default, G_TYPE_OBJECT,
@@ -236,10 +233,14 @@ static GtkSourceUndoAction *
action_list_nth_data (GPtrArray *array,
gint n)
{
- if (n < 0 || n >= (gint)array->len)
+ if (n < 0 || (gint)array->len <= n)
+ {
return NULL;
+ }
else
+ {
return array->pdata[array->len - 1 - n];
+ }
}
static void
@@ -459,17 +460,24 @@ merge_action (GtkSourceUndoManagerDefault *um,
}
static void
+remove_redo_actions (GtkSourceUndoManagerDefault *manager)
+{
+ if (manager->priv->next_redo >= 0)
+ {
+ free_first_n_actions (manager, manager->priv->next_redo + 1);
+ }
+
+ manager->priv->next_redo = -1;
+ update_can_undo_can_redo (manager);
+}
+
+static void
add_action (GtkSourceUndoManagerDefault *um,
const GtkSourceUndoAction *undo_action)
{
GtkSourceUndoAction* action;
- if (um->priv->next_redo >= 0)
- {
- free_first_n_actions (um, um->priv->next_redo + 1);
- }
-
- um->priv->next_redo = -1;
+ remove_redo_actions (um);
if (!merge_action (um, undo_action))
{
@@ -477,9 +485,14 @@ add_action (GtkSourceUndoManagerDefault *um,
*action = *undo_action;
if (action->action_type == GTK_SOURCE_UNDO_ACTION_INSERT)
- action->action.insert.text = g_strndup (undo_action->action.insert.text,
undo_action->action.insert.length);
+ {
+ action->action.insert.text = g_strndup (undo_action->action.insert.text,
+ undo_action->action.insert.length);
+ }
else if (action->action_type == GTK_SOURCE_UNDO_ACTION_DELETE)
+ {
action->action.delete.text = g_strdup (undo_action->action.delete.text);
+ }
else
{
g_free (action);
@@ -490,7 +503,9 @@ add_action (GtkSourceUndoManagerDefault *um,
action->order_in_group = um->priv->actions_in_current_group;
if (action->order_in_group == 1)
+ {
++um->priv->num_of_groups;
+ }
action_list_prepend (um->priv->actions, action);
}
@@ -519,7 +534,9 @@ set_max_undo_levels (GtkSourceUndoManagerDefault *manager,
manager->priv->max_undo_levels = max_undo_levels;
if (max_undo_levels < 1)
+ {
return;
+ }
if (old_levels > max_undo_levels)
{
@@ -986,15 +1003,20 @@ modified_changed_cb (GtkTextBuffer *buffer,
gint idx;
if (manager->priv->actions->len == 0)
+ {
return;
+ }
idx = manager->priv->next_redo + 1;
action = action_list_nth_data (manager->priv->actions, idx);
- if (gtk_text_buffer_get_modified (buffer) == FALSE)
+ /* The buffer has been saved. */
+ if (!gtk_text_buffer_get_modified (buffer))
{
if (action != NULL)
+ {
action->mergeable = FALSE;
+ }
if (manager->priv->modified_action != NULL)
{
@@ -1008,7 +1030,6 @@ modified_changed_cb (GtkTextBuffer *buffer,
if (action == NULL)
{
g_return_if_fail (manager->priv->running_not_undoable_actions > 0);
-
return;
}
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]