[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: Tue, 26 Aug 2014 21:49:22 +0000 (UTC)
commit 838d25a31a99cce000d8be64a33edf3372171b5b
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 | 96 +++++++++++++++++++--------
1 files changed, 67 insertions(+), 29 deletions(-)
---
diff --git a/gtksourceview/gtksourceundomanagerdefault.c b/gtksourceview/gtksourceundomanagerdefault.c
index 79d9a16..5935b16 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. */
@@ -151,6 +141,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,
@@ -237,10 +234,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
@@ -297,6 +298,32 @@ free_first_n_actions (GtkSourceUndoManagerDefault *um,
}
}
+static GtkSourceUndoAction *
+get_next_undo_action (GtkSourceUndoManagerDefault *manager)
+{
+ return action_list_nth_data (manager->priv->actions,
+ manager->priv->next_redo + 1);
+}
+
+static GtkSourceUndoAction *
+get_next_redo_action (GtkSourceUndoManagerDefault *manager)
+{
+ return action_list_nth_data (manager->priv->actions,
+ manager->priv->next_redo);
+}
+
+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
check_list_size (GtkSourceUndoManagerDefault *um)
{
@@ -465,12 +492,7 @@ add_action (GtkSourceUndoManagerDefault *um,
{
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))
{
@@ -478,9 +500,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);
@@ -491,7 +518,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);
}
@@ -520,7 +549,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)
{
@@ -726,8 +757,7 @@ gtk_source_undo_manager_undo_impl (GtkSourceUndoManager *manager)
do
{
- undo_action = action_list_nth_data (manager_default->priv->actions,
- manager_default->priv->next_redo + 1);
+ undo_action = get_next_undo_action (manager_default);
g_return_if_fail (undo_action != NULL);
@@ -815,8 +845,7 @@ gtk_source_undo_manager_redo_impl (GtkSourceUndoManager *manager)
&selection_insert,
&selection_bound);
- undo_action = action_list_nth_data (manager_default->priv->actions,
- manager_default->priv->next_redo);
+ undo_action = get_next_redo_action (manager_default);
g_return_if_fail (undo_action != NULL);
gtk_source_undo_manager_begin_not_undoable_action (manager);
@@ -862,10 +891,13 @@ gtk_source_undo_manager_redo_impl (GtkSourceUndoManager *manager)
}
if (manager_default->priv->next_redo < 0)
+ {
undo_action = NULL;
+ }
else
- undo_action = action_list_nth_data (manager_default->priv->actions,
- manager_default->priv->next_redo);
+ {
+ undo_action = get_next_redo_action (manager_default);
+ }
} while ((undo_action != NULL) && (undo_action->order_in_group > 1));
@@ -987,15 +1019,19 @@ 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);
+ action = get_next_undo_action (manager);
- 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)
{
@@ -1009,7 +1045,6 @@ modified_changed_cb (GtkTextBuffer *buffer,
if (action == NULL)
{
g_return_if_fail (manager->priv->running_not_undoable_actions > 0);
-
return;
}
@@ -1020,8 +1055,11 @@ modified_changed_cb (GtkTextBuffer *buffer,
}
if (action->order_in_group > 1)
- manager->priv->modified_undoing_group = TRUE;
+ {
+ manager->priv->modified_undoing_group = TRUE;
+ }
+ idx = manager->priv->next_redo + 1;
while (action->order_in_group > 1)
{
action = action_list_nth_data (manager->priv->actions, ++idx);
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]