[dia/zbrown/object-change: 1/16] change: move DiaChange to lib




commit b0b09bc152177e1ee50afd1d158c8e521127c01b
Author: Zander Brown <zbrown gnome org>
Date:   Wed Sep 30 21:19:20 2020 +0100

    change: move DiaChange to lib
    
    The plan here is to rationalise undo information a bit and avoid things
    like DiaObjectChangeChange

 app/commands.c                      |  12 +-
 app/connectionpoint_ops.c           |   2 +-
 app/create_object.c                 |   2 +-
 app/diagram.c                       |  16 +-
 app/disp_callbacks.c                |   4 +-
 app/layer-editor/dia-layer-widget.c |   2 +-
 app/layer-editor/layer_dialog.c     |  53 ++--
 app/meson.build                     |   2 -
 app/modify_tool.c                   |   2 +-
 app/object_ops.c                    |   2 +-
 app/undo.c                          | 497 ++++++++++++++++++++----------------
 docs/dia-app/dia-app-docs.xml       |   1 -
 docs/dia/dia-docs.xml               |   1 +
 {app => lib}/dia-change.c           |  22 +-
 {app => lib}/dia-change.h           |  38 +--
 lib/meson.build                     |   2 +
 lib/object.c                        |   4 +-
 lib/prop_pixbuf.c                   |   2 +
 18 files changed, 361 insertions(+), 303 deletions(-)
---
diff --git a/app/commands.c b/app/commands.c
index 4a96de2f1..9136bc131 100644
--- a/app/commands.c
+++ b/app/commands.c
@@ -662,7 +662,7 @@ edit_cut_callback (GtkAction *action)
     cnp_store_objects (object_copy_list (cut_list), 0);
 
     change = dia_delete_objects_change_new_with_children (ddisp->diagram, cut_list);
-    dia_change_apply (change, ddisp->diagram);
+    dia_change_apply (change, DIA_DIAGRAM_DATA (ddisp->diagram));
 
     ddisplay_do_update_menu_sensitivity (ddisp);
     diagram_flush (ddisp->diagram);
@@ -720,7 +720,7 @@ edit_paste_callback (GtkAction *action)
     }
 
     change = dia_insert_objects_change_new (ddisp->diagram, paste_list, 0);
-    dia_change_apply (change, ddisp->diagram);
+    dia_change_apply (change, DIA_DIAGRAM_DATA (ddisp->diagram));
 
     diagram_modified (ddisp->diagram);
     undo_set_transactionpoint (ddisp->diagram->undo);
@@ -763,7 +763,7 @@ edit_duplicate_callback (GtkAction *action)
   object_list_move_delta (duplicate_list, &delta);
 
   change = dia_insert_objects_change_new (ddisp->diagram, duplicate_list, 0);
-  dia_change_apply (change, ddisp->diagram);
+  dia_change_apply (change, DIA_DIAGRAM_DATA (ddisp->diagram));
 
   diagram_modified (ddisp->diagram);
   undo_set_transactionpoint (ddisp->diagram->undo);
@@ -790,7 +790,7 @@ objects_move_up_layer (GtkAction *action)
 
   change = dia_move_object_to_layer_change_new (ddisp->diagram, selected_list, TRUE);
 
-  dia_change_apply (change, ddisp->diagram);
+  dia_change_apply (change, DIA_DIAGRAM_DATA (ddisp->diagram));
 
   diagram_modified (ddisp->diagram);
   undo_set_transactionpoint (ddisp->diagram->undo);
@@ -816,7 +816,7 @@ objects_move_down_layer (GtkAction *action)
 
   change = dia_move_object_to_layer_change_new (ddisp->diagram, selected_list, FALSE);
 
-  dia_change_apply (change, ddisp->diagram);
+  dia_change_apply (change, DIA_DIAGRAM_DATA (ddisp->diagram));
 
   diagram_modified (ddisp->diagram);
   undo_set_transactionpoint (ddisp->diagram->undo);
@@ -969,7 +969,7 @@ edit_delete_callback (GtkAction *action)
     delete_list = diagram_get_sorted_selected (ddisp->diagram);
     change = dia_delete_objects_change_new_with_children (ddisp->diagram, delete_list);
     g_list_free (delete_list);
-    dia_change_apply (change, ddisp->diagram);
+    dia_change_apply (change, DIA_DIAGRAM_DATA (ddisp->diagram));
   }
   diagram_modified (ddisp->diagram);
   diagram_update_extents (ddisp->diagram);
diff --git a/app/connectionpoint_ops.c b/app/connectionpoint_ops.c
index 35286ed4c..fa406cd39 100644
--- a/app/connectionpoint_ops.c
+++ b/app/connectionpoint_ops.c
@@ -218,7 +218,7 @@ diagram_unconnect_selected(Diagram *dia)
           /* don't do this if type is HANDLE_CONNECTABLE_BREAK */
         if (!diagram_is_selected(dia, handle->connected_to->object)) {
           DiaChange *change = dia_unconnect_change_new (dia, selected_obj, handle);
-          dia_change_apply (change, dia);
+          dia_change_apply (change, DIA_DIAGRAM_DATA (dia));
         }
       }
     }
diff --git a/app/create_object.c b/app/create_object.c
index 5974ef948..1738d2069 100644
--- a/app/create_object.c
+++ b/app/create_object.c
@@ -159,7 +159,7 @@ create_object_button_release(CreateObjectTool *tool, GdkEventButton *event,
     if (obj != parent_obj
         && object_within_parent (obj, parent_obj)) {
       DiaChange *change = dia_parenting_change_new (ddisp->diagram, parent_obj, obj, TRUE);
-      dia_change_apply (change, ddisp->diagram);
+      dia_change_apply (change, DIA_DIAGRAM_DATA (ddisp->diagram));
       break;
     /*
     obj->parent = parent_obj;
diff --git a/app/diagram.c b/app/diagram.c
index 5e0e294aa..9eba776a2 100644
--- a/app/diagram.c
+++ b/app/diagram.c
@@ -795,7 +795,7 @@ diagram_selected_break_external (Diagram *dia)
       if (g_list_find (dia->data->selected, other_obj) == NULL) {
         /* other_obj is not selected, break connection */
         DiaChange *change = dia_unconnect_change_new (dia, obj, obj->handles[i]);
-        dia_change_apply (change, dia);
+        dia_change_apply (change, DIA_DIAGRAM_DATA (dia));
         object_add_updates (obj, dia);
       }
     }
@@ -819,7 +819,7 @@ diagram_selected_break_external (Diagram *dia)
               DiaChange *change;
               connected_list = g_list_previous (connected_list);
               change = dia_unconnect_change_new (dia, other_obj, other_obj->handles[j]);
-              dia_change_apply (change, dia);
+              dia_change_apply (change, DIA_DIAGRAM_DATA (dia));
               if (connected_list == NULL)
                 connected_list = obj->connections[i]->connected;
             }
@@ -1162,7 +1162,7 @@ strip_connections(DiaObject *obj, GList *not_strip_list, Diagram *dia)
     if ((handle->connected_to != NULL) &&
         (g_list_find(not_strip_list, handle->connected_to->object)==NULL)) {
       change = dia_unconnect_change_new (dia, obj, handle);
-      dia_change_apply (change, dia);
+      dia_change_apply (change, DIA_DIAGRAM_DATA (dia));
     }
   }
 }
@@ -1227,7 +1227,7 @@ void diagram_parent_selected(Diagram *dia)
       {
         DiaChange *change;
         change = dia_parenting_change_new (dia, oe2->object, oe1->object, TRUE);
-        dia_change_apply (change, dia);
+        dia_change_apply (change, DIA_DIAGRAM_DATA (dia));
         any_parented = TRUE;
         /*
               oe1->object->parent = oe2->object;
@@ -1262,7 +1262,7 @@ void diagram_unparent_selected(Diagram *dia)
       continue;
 
     change = dia_parenting_change_new (dia, parent, obj, FALSE);
-    dia_change_apply (change, dia);
+    dia_change_apply (change, DIA_DIAGRAM_DATA (dia));
     any_unparented = TRUE;
     /*
     parent->children = g_list_remove(parent->children, obj);
@@ -1298,7 +1298,7 @@ void diagram_unparent_children_selected(Diagram *dia)
       child = (DiaObject *) obj->children->data;
       change = dia_parenting_change_new (dia, obj, child, FALSE);
       /* This will remove one item from the list, so the while terminates. */
-      dia_change_apply (change, dia);
+      dia_change_apply (change, DIA_DIAGRAM_DATA (dia));
     }
     if (obj->children != NULL)
       printf("Obj still has %d children\n",
@@ -1357,7 +1357,7 @@ diagram_group_selected (Diagram *dia)
 
   group = group_create (group_list);
   change = dia_group_objects_change_new (dia, group_list, group, orig_list);
-  dia_change_apply (change, dia);
+  dia_change_apply (change, DIA_DIAGRAM_DATA (dia));
 
   /* Select the created group */
   diagram_select (dia, group);
@@ -1397,7 +1397,7 @@ void diagram_ungroup_selected(Diagram *dia)
       group_index = dia_layer_object_get_index (dia_diagram_data_get_active_layer (DIA_DIAGRAM_DATA (dia)), 
group);
 
       change = dia_ungroup_objects_change_new (dia, group_list, group, group_index);
-      dia_change_apply (change, dia);
+      dia_change_apply (change, DIA_DIAGRAM_DATA (dia));
 
       diagram_select_list(dia, group_list);
       any_groups = 1;
diff --git a/app/disp_callbacks.c b/app/disp_callbacks.c
index ff273b61f..945179c19 100644
--- a/app/disp_callbacks.c
+++ b/app/disp_callbacks.c
@@ -241,7 +241,7 @@ _combine_to_path_callback (GtkAction *action, gpointer data)
   if (obj) {
     /* remove the objects just combined */
     DiaChange *change = dia_delete_objects_change_new_with_children (dia, cut_list);
-    dia_change_apply (change, dia);
+    dia_change_apply (change, DIA_DIAGRAM_DATA (dia));
     /* add the new object with undo */
     dia_insert_objects_change_new (dia, g_list_prepend (NULL, obj), 1);
     diagram_add_object (dia, obj);
@@ -251,7 +251,7 @@ _combine_to_path_callback (GtkAction *action, gpointer data)
   } else {
     /* path combination result is empty, this is just a delete */
     DiaChange *change = dia_delete_objects_change_new_with_children (ddisp->diagram, cut_list);
-    dia_change_apply (change, ddisp->diagram);
+    dia_change_apply (change, DIA_DIAGRAM_DATA (ddisp->diagram));
     undo_set_transactionpoint (ddisp->diagram->undo);
   }
   ddisplay_do_update_menu_sensitivity(ddisp);
diff --git a/app/layer-editor/dia-layer-widget.c b/app/layer-editor/dia-layer-widget.c
index cebaec2e3..53f13f1c9 100644
--- a/app/layer-editor/dia-layer-widget.c
+++ b/app/layer-editor/dia-layer-widget.c
@@ -507,7 +507,7 @@ visible_toggled (GtkToggleButton *widget,
     Diagram *dia = DIA_DIAGRAM (dia_layer_get_parent_diagram (priv->layer));
     change = dia_layer_visibility_change_new (dia, priv->layer, priv->shifted);
     /** This apply kills 'lw', thus we have to hold onto 'lw->dia' */
-    dia_change_apply (change, dia);
+    dia_change_apply (change, DIA_DIAGRAM_DATA (dia));
     undo_set_transactionpoint (dia->undo);
   }
 }
diff --git a/app/layer-editor/layer_dialog.c b/app/layer-editor/layer_dialog.c
index dcd811827..17854c42d 100644
--- a/app/layer-editor/layer_dialog.c
+++ b/app/layer-editor/layer_dialog.c
@@ -153,55 +153,55 @@ DIA_DEFINE_CHANGE (DiaLayerChange, dia_layer_change)
 
 
 static void
-dia_layer_change_apply (DiaChange *self, Diagram *dia)
+dia_layer_change_apply (DiaChange *self, DiagramData *dia)
 {
   DiaLayerChange *change = DIA_LAYER_CHANGE (self);
   change->applied = 1;
 
   switch (change->type) {
     case TYPE_DELETE_LAYER:
-      data_remove_layer (dia->data, change->layer);
+      data_remove_layer (dia, change->layer);
       break;
     case TYPE_ADD_LAYER:
-      data_add_layer_at (dia->data, change->layer, change->index);
+      data_add_layer_at (dia, change->layer, change->index);
       break;
     case TYPE_RAISE_LAYER:
-      data_raise_layer (dia->data, change->layer);
+      data_raise_layer (dia, change->layer);
       break;
     case TYPE_LOWER_LAYER:
-      data_lower_layer (dia->data, change->layer);
+      data_lower_layer (dia, change->layer);
       break;
     default:
       g_return_if_reached ();
   }
 
-  diagram_add_update_all(dia);
+  diagram_add_update_all (DIA_DIAGRAM (dia));
 }
 
 
 static void
-dia_layer_change_revert (DiaChange *self, Diagram *dia)
+dia_layer_change_revert (DiaChange *self, DiagramData *dia)
 {
   DiaLayerChange *change = DIA_LAYER_CHANGE (self);
 
   switch (change->type) {
     case TYPE_DELETE_LAYER:
-      data_add_layer_at (dia->data, change->layer, change->index);
+      data_add_layer_at (dia, change->layer, change->index);
       break;
     case TYPE_ADD_LAYER:
-      data_remove_layer (dia->data, change->layer);
+      data_remove_layer (dia, change->layer);
       break;
     case TYPE_RAISE_LAYER:
-      data_lower_layer (dia->data, change->layer);
+      data_lower_layer (dia, change->layer);
       break;
     case TYPE_LOWER_LAYER:
-      data_raise_layer (dia->data, change->layer);
+      data_raise_layer (dia, change->layer);
       break;
     default:
       g_return_if_reached ();
   }
 
-  diagram_add_update_all(dia);
+  diagram_add_update_all (DIA_DIAGRAM (dia));
 
   change->applied = 0;
 }
@@ -217,7 +217,10 @@ dia_layer_change_free (DiaChange *self)
 
 
 DiaChange *
-dia_layer_change_new (Diagram *dia, DiaLayer *layer, enum LayerChangeType type, int index)
+dia_layer_change_new (Diagram              *dia,
+                      DiaLayer             *layer,
+                      enum LayerChangeType  type,
+                      int                   index)
 {
   DiaLayerChange *change = dia_change_new (DIA_TYPE_LAYER_CHANGE);
 
@@ -246,8 +249,8 @@ DIA_DEFINE_CHANGE (DiaLayerVisibilityChange, dia_layer_visibility_change)
 
 
 void
-dia_layer_visibility_change_apply (DiaChange *self,
-                                   Diagram   *dia)
+dia_layer_visibility_change_apply (DiaChange   *self,
+                                   DiagramData *dia)
 {
   DiaLayerVisibilityChange *change = DIA_LAYER_VISIBILITY_CHANGE (self);
   DiaLayer *layer = change->layer;
@@ -256,14 +259,14 @@ dia_layer_visibility_change_apply (DiaChange *self,
   if (change->is_exclusive) {
     /*  First determine if _any_ other layer widgets are set to visible.
      *  If there is, exclusive switching turns all off.  */
-    DIA_FOR_LAYER_IN_DIAGRAM (DIA_DIAGRAM_DATA (dia), temp_layer, i, {
+    DIA_FOR_LAYER_IN_DIAGRAM (dia, temp_layer, i, {
       if (temp_layer != layer) {
         visible |= dia_layer_is_visible (temp_layer);
       }
     });
 
     /*  Now, toggle the visibility for all layers except the specified one  */
-    DIA_FOR_LAYER_IN_DIAGRAM (DIA_DIAGRAM_DATA (dia), temp_layer, i, {
+    DIA_FOR_LAYER_IN_DIAGRAM (dia, temp_layer, i, {
       if (temp_layer == layer) {
         dia_layer_set_visible (temp_layer, TRUE);
       } else {
@@ -274,7 +277,7 @@ dia_layer_visibility_change_apply (DiaChange *self,
     dia_layer_set_visible (layer, !dia_layer_is_visible (layer));
   }
 
-  diagram_add_update_all (dia);
+  diagram_add_update_all (DIA_DIAGRAM (dia));
 }
 
 
@@ -282,25 +285,25 @@ dia_layer_visibility_change_apply (DiaChange *self,
  * Revert to the visibility before this change was applied.
  */
 static void
-dia_layer_visibility_change_revert (DiaChange *self,
-                                    Diagram   *dia)
+dia_layer_visibility_change_revert (DiaChange   *self,
+                                    DiagramData *dia)
 {
   DiaLayerVisibilityChange *change = DIA_LAYER_VISIBILITY_CHANGE (self);
   GList *vis = change->original_visibility;
   int i;
 
-  for (i = 0; vis != NULL && i < data_layer_count (DIA_DIAGRAM_DATA (dia)); vis = g_list_next (vis), i++) {
-    DiaLayer *layer = data_layer_get_nth (DIA_DIAGRAM_DATA (dia), i);
+  for (i = 0; vis != NULL && i < data_layer_count (dia); vis = g_list_next (vis), i++) {
+    DiaLayer *layer = data_layer_get_nth (dia, i);
     dia_layer_set_visible (layer, GPOINTER_TO_INT (vis->data));
   }
 
-  if (vis != NULL || i < data_layer_count (DIA_DIAGRAM_DATA (dia))) {
+  if (vis != NULL || i < data_layer_count (dia)) {
     g_critical ("Internal error: visibility undo has %d visibilities, but %d layers\n",
                 g_list_length (change->original_visibility),
-                data_layer_count (DIA_DIAGRAM_DATA (dia)));
+                data_layer_count (dia));
   }
 
-  diagram_add_update_all(dia);
+  diagram_add_update_all (DIA_DIAGRAM (dia));
 }
 
 
diff --git a/app/meson.build b/app/meson.build
index 625616430..694bc6425 100644
--- a/app/meson.build
+++ b/app/meson.build
@@ -7,8 +7,6 @@ dia_sources = [
     'properties-dialog.c',
     'defaults.c',
     'undo.c',
-    'dia-change.c',
-    'dia-change.h',
     'object_ops.c',
 
     'dia-builder.c',
diff --git a/app/modify_tool.c b/app/modify_tool.c
index 5d1dfd250..6a32c1a5d 100644
--- a/app/modify_tool.c
+++ b/app/modify_tool.c
@@ -611,7 +611,7 @@ modify_motion (ModifyTool     *tool,
                                                       tool->object,
                                                       tool->handle);
 
-        dia_change_apply (change, ddisp->diagram);
+        dia_change_apply (change, DIA_DIAGRAM_DATA (ddisp->diagram));
       }
     }
 
diff --git a/app/object_ops.c b/app/object_ops.c
index 897f73fcd..8826f240d 100644
--- a/app/object_ops.c
+++ b/app/object_ops.c
@@ -141,7 +141,7 @@ object_connect_display(DDisplay *ddisp, DiaObject *obj, Handle *handle,
                                                   obj,
                                                   handle,
                                                   connectionpoint);
-      dia_change_apply (change, ddisp->diagram);
+      dia_change_apply (change, DIA_DIAGRAM_DATA (ddisp->diagram));
     }
   }
 }
diff --git a/app/undo.c b/app/undo.c
index 10780bb5c..d70273b8e 100644
--- a/app/undo.c
+++ b/app/undo.c
@@ -46,13 +46,13 @@ DIA_DEFINE_CHANGE (DiaTransactionPointChange, dia_transaction_point_change)
 
 
 static void
-dia_transaction_point_change_apply (DiaChange *self, Diagram *dia)
+dia_transaction_point_change_apply (DiaChange *self, DiagramData *dia)
 {
 }
 
 
 static void
-dia_transaction_point_change_revert (DiaChange *self, Diagram *dia)
+dia_transaction_point_change_revert (DiaChange *self, DiagramData *dia)
 {
 }
 
@@ -71,13 +71,13 @@ dia_transaction_point_change_new (void)
 
 
 UndoStack *
-new_undo_stack(Diagram *dia)
+new_undo_stack (Diagram *dia)
 {
   UndoStack *stack;
   DiaChange *transaction;
 
-  stack = g_new(UndoStack, 1);
-  if (stack!=NULL){
+  stack = g_new (UndoStack, 1);
+  if (stack != NULL){
     stack->dia = dia;
     transaction = dia_transaction_point_change_new ();
     transaction->next = transaction->prev = NULL;
@@ -91,16 +91,16 @@ new_undo_stack(Diagram *dia)
 
 
 void
-undo_destroy(UndoStack *stack)
+undo_destroy (UndoStack *stack)
 {
-  undo_clear(stack);
+  undo_clear (stack);
 
   g_free (stack);
 }
 
 
 static void
-undo_remove_redo_info(UndoStack *stack)
+undo_remove_redo_info (UndoStack *stack)
 {
   DiaChange *change;
   DiaChange *next_change;
@@ -116,14 +116,16 @@ undo_remove_redo_info(UndoStack *stack)
     dia_change_unref (change);
     change = next_change;
   }
-  undo_update_menus(stack);
+  undo_update_menus (stack);
 }
 
+
 void
 undo_push_change (UndoStack *stack, DiaChange *change)
 {
-  if (stack->current_change != stack->last_change)
+  if (stack->current_change != stack->last_change) {
     undo_remove_redo_info (stack);
+  }
 
   g_debug ("Push %s at %d", DIA_CHANGE_TYPE_NAME (change), stack->depth);
 
@@ -137,8 +139,9 @@ undo_push_change (UndoStack *stack, DiaChange *change)
   undo_update_menus (stack);
 }
 
+
 static void
-undo_delete_lowest_transaction(UndoStack *stack)
+undo_delete_lowest_transaction (UndoStack *stack)
 {
   DiaChange *change;
   DiaChange *next_change;
@@ -154,8 +157,9 @@ undo_delete_lowest_transaction(UndoStack *stack)
    * Stop if we reach current_change or NULL.
    */
   do {
-    if ( (change == NULL) || (change == stack->current_change))
+    if ((change == NULL) || (change == stack->current_change)) {
       break;
+    }
 
     next_change = change->next;
     g_debug ("freeing one change from the bottom.");
@@ -167,80 +171,91 @@ undo_delete_lowest_transaction(UndoStack *stack)
     stack->depth--;
     g_debug ("Decreasing stack depth to: %d", stack->depth);
   }
-  if (change) /* play safe */
+
+  if (change) {
+    /* play safe */
     change->prev = NULL;
+  }
 }
 
+
 void
-undo_set_transactionpoint(UndoStack *stack)
+undo_set_transactionpoint (UndoStack *stack)
 {
   DiaChange *transaction;
 
-  if (DIA_IS_TRANSACTION_POINT_CHANGE(stack->current_change))
+  if (DIA_IS_TRANSACTION_POINT_CHANGE (stack->current_change)) {
     return;
+  }
 
   transaction = dia_transaction_point_change_new ();
 
-  undo_push_change(stack, transaction);
+  undo_push_change (stack, transaction);
   stack->depth++;
   g_debug ("Increasing stack depth to: %d", stack->depth);
 
   if (prefs.undo_depth > 0) {
-    while (stack->depth > prefs.undo_depth){
-      undo_delete_lowest_transaction(stack);
+    while (stack->depth > prefs.undo_depth) {
+      undo_delete_lowest_transaction (stack);
     }
   }
 }
 
+
 void
-undo_revert_to_last_tp(UndoStack *stack)
+undo_revert_to_last_tp (UndoStack *stack)
 {
   DiaChange *change;
   DiaChange *prev_change;
 
-  if (stack->current_change->prev == NULL)
+  if (stack->current_change->prev == NULL) {
     return; /* Can't revert first transactionpoint */
+  }
 
   change = stack->current_change;
   do {
     prev_change = change->prev;
-    dia_change_revert (change, stack->dia);
+    dia_change_revert (change, DIA_DIAGRAM_DATA (stack->dia));
     change = prev_change;
-  } while (!DIA_IS_TRANSACTION_POINT_CHANGE(change));
+  } while (!DIA_IS_TRANSACTION_POINT_CHANGE (change));
   stack->current_change  = change;
   stack->depth--;
-  undo_update_menus(stack);
+  undo_update_menus (stack);
   g_debug ("Decreasing stack depth to: %d", stack->depth);
 }
 
+
 void
-undo_apply_to_next_tp(UndoStack *stack)
+undo_apply_to_next_tp (UndoStack *stack)
 {
   DiaChange *change;
   DiaChange *next_change;
 
   change = stack->current_change;
 
-  if (change->next == NULL)
+  if (change->next == NULL) {
     return /* Already at top. */;
+  }
 
   do {
     next_change = change->next;
-    dia_change_apply (change, stack->dia);
+    dia_change_apply (change, DIA_DIAGRAM_DATA (stack->dia));
     change = next_change;
-  } while ( (change != NULL) &&
-           (!DIA_IS_TRANSACTION_POINT_CHANGE(change)) );
-  if (change == NULL)
+  } while ((change != NULL) && (!DIA_IS_TRANSACTION_POINT_CHANGE (change)));
+
+  if (change == NULL) {
     change = stack->last_change;
+  }
+
   stack->current_change = change;
   stack->depth++;
-  undo_update_menus(stack);
+  undo_update_menus (stack);
   g_debug ("Increasing stack depth to: %d", stack->depth);
 }
 
 
 void
-undo_clear(UndoStack *stack)
+undo_clear (UndoStack *stack)
 {
   DiaChange *change;
 
@@ -254,8 +269,8 @@ undo_clear(UndoStack *stack)
 
   stack->current_change = change;
   stack->depth = 0;
-  undo_remove_redo_info(stack);
-  undo_update_menus(stack);
+  undo_remove_redo_info (stack);
+  undo_update_menus (stack);
 }
 
 
@@ -326,6 +341,7 @@ undo_available (UndoStack *stack, gboolean undo)
   }
 }
 
+
 /**
  * undo_remove_to:
  * @stack: The undo stack to remove items from.
@@ -340,11 +356,13 @@ undo_available (UndoStack *stack, gboolean undo)
  * or %NULL otherwise.  In the latter case, the undo stack will be empty.
  */
 DiaChange *
-undo_remove_to(UndoStack *stack, GType type)
+undo_remove_to (UndoStack *stack, GType type)
 {
   DiaChange *current_change = stack->current_change;
-  if (current_change == NULL)
+
+  if (current_change == NULL) {
     return NULL;
+  }
 
   while (current_change &&
          !g_type_is_a (DIA_CHANGE_TYPE (current_change), type)) {
@@ -353,10 +371,10 @@ undo_remove_to(UndoStack *stack, GType type)
 
   if (current_change != NULL) {
     stack->current_change = current_change;
-    undo_remove_redo_info(stack);
+    undo_remove_redo_info (stack);
     return current_change;
   } else {
-    undo_clear(stack);
+    undo_clear (stack);
     return NULL;
   }
 }
@@ -384,68 +402,70 @@ DIA_DEFINE_CHANGE (DiaMoveObjectsChange, dia_move_objects_change)
 
 
 static void
-dia_move_objects_change_apply (DiaChange *self, Diagram *dia)
+dia_move_objects_change_apply (DiaChange *self, DiagramData *dia)
 {
   DiaMoveObjectsChange *change = DIA_MOVE_OBJECTS_CHANGE (self);
   GList *list;
   int i;
   DiaObject *obj;
 
-  object_add_updates_list(change->obj_list, dia);
+  object_add_updates_list (change->obj_list, DIA_DIAGRAM (dia));
 
   list = change->obj_list;
-  i=0;
+  i = 0;
   while (list != NULL) {
-    obj = (DiaObject *)  list->data;
+    obj = DIA_OBJECT (list->data);
 
     dia_object_move (obj, &change->dest_pos[i]);
 
-    list = g_list_next(list); i++;
+    list = g_list_next (list);
+    i++;
   }
 
   list = change->obj_list;
-  while (list!=NULL) {
-    obj = (DiaObject *) list->data;
+  while (list != NULL) {
+    obj = DIA_OBJECT (list->data);
 
-    diagram_update_connections_object(dia, obj, TRUE);
+    diagram_update_connections_object (DIA_DIAGRAM (dia), obj, TRUE);
 
-    list = g_list_next(list);
+    list = g_list_next (list);
   }
 
-  object_add_updates_list(change->obj_list, dia);
+  object_add_updates_list (change->obj_list, DIA_DIAGRAM (dia));
 }
 
 
 static void
-dia_move_objects_change_revert (DiaChange *self, Diagram *dia)
+dia_move_objects_change_revert (DiaChange *self, DiagramData *dia)
 {
   DiaMoveObjectsChange *change = DIA_MOVE_OBJECTS_CHANGE (self);
   GList *list;
   int i;
   DiaObject *obj;
 
-  object_add_updates_list(change->obj_list, dia);
+  object_add_updates_list (change->obj_list, DIA_DIAGRAM (dia));
 
   list = change->obj_list;
-  i=0;
+  i = 0;
   while (list != NULL) {
-    obj = (DiaObject *)  list->data;
+    obj = DIA_OBJECT (list->data);
 
-    dia_object_move(obj, &change->orig_pos[i]);
+    dia_object_move (obj, &change->orig_pos[i]);
 
-    list = g_list_next(list); i++;
+    list = g_list_next (list);
+    i++;
   }
 
   list = change->obj_list;
-  while (list!=NULL) {
-    obj = (DiaObject *) list->data;
+  while (list != NULL) {
+    obj = DIA_OBJECT (list->data);
 
-    diagram_update_connections_object(dia, obj, TRUE);
+    diagram_update_connections_object (DIA_DIAGRAM (dia), obj, TRUE);
 
-    list = g_list_next(list);
+    list = g_list_next (list);
   }
 
-  object_add_updates_list(change->obj_list, dia);
+  object_add_updates_list (change->obj_list, DIA_DIAGRAM (dia));
 }
 
 
@@ -496,33 +516,39 @@ DIA_DEFINE_CHANGE (DiaMoveHandleChange, dia_move_handle_change)
 
 
 static void
-dia_move_handle_change_apply (DiaChange *self, Diagram *dia)
+dia_move_handle_change_apply (DiaChange *self, DiagramData *dia)
 {
   DiaMoveHandleChange *change = DIA_MOVE_HANDLE_CHANGE (self);
 
-  object_add_updates (change->obj, dia);
+  object_add_updates (change->obj, DIA_DIAGRAM (dia));
   dia_object_move_handle (change->obj,
                           change->handle,
-                               &change->dest_pos, NULL,
-                               HANDLE_MOVE_USER_FINAL, change->modifiers);
-  object_add_updates(change->obj, dia);
-  diagram_update_connections_object(dia, change->obj, TRUE);
+                          &change->dest_pos,
+                          NULL,
+                          HANDLE_MOVE_USER_FINAL,
+                          change->modifiers);
+  object_add_updates (change->obj, DIA_DIAGRAM (dia));
+  diagram_update_connections_object (DIA_DIAGRAM (dia), change->obj, TRUE);
 }
 
+
 static void
-dia_move_handle_change_revert (DiaChange *self, Diagram *dia)
+dia_move_handle_change_revert (DiaChange *self, DiagramData *dia)
 {
   DiaMoveHandleChange *change = DIA_MOVE_HANDLE_CHANGE (self);
 
-  object_add_updates (change->obj, dia);
+  object_add_updates (change->obj, DIA_DIAGRAM (dia));
   dia_object_move_handle (change->obj,
                           change->handle,
-                               &change->orig_pos, NULL,
-                               HANDLE_MOVE_USER_FINAL, change->modifiers);
-  object_add_updates(change->obj, dia);
-  diagram_update_connections_object(dia, change->obj, TRUE);
+                          &change->orig_pos,
+                          NULL,
+                          HANDLE_MOVE_USER_FINAL,
+                          change->modifiers);
+  object_add_updates (change->obj, DIA_DIAGRAM (dia));
+  diagram_update_connections_object (DIA_DIAGRAM (dia), change->obj, TRUE);
 }
 
+
 static void
 dia_move_handle_change_free (DiaChange *self)
 {
@@ -566,37 +592,40 @@ DIA_DEFINE_CHANGE (DiaConnectChange, dia_connect_change)
 
 
 static void
-dia_connect_change_apply (DiaChange *self, Diagram *dia)
+dia_connect_change_apply (DiaChange *self, DiagramData *dia)
 {
   DiaConnectChange *change = DIA_CONNECT_CHANGE (self);
 
-  object_connect(change->obj, change->handle, change->connectionpoint);
+  object_connect (change->obj, change->handle, change->connectionpoint);
 
-  object_add_updates (change->obj, dia);
+  object_add_updates (change->obj, DIA_DIAGRAM (dia));
   dia_object_move_handle (change->obj,
                           change->handle,
-                               &change->connectionpoint->pos,
-                               change->connectionpoint,
-                               HANDLE_MOVE_CONNECTED, 0);
+                          &change->connectionpoint->pos,
+                          change->connectionpoint,
+                          HANDLE_MOVE_CONNECTED,
+                          0);
 
-  object_add_updates(change->obj, dia);
+  object_add_updates (change->obj, DIA_DIAGRAM (dia));
 }
 
 
 static void
-dia_connect_change_revert (DiaChange *self, Diagram *dia)
+dia_connect_change_revert (DiaChange *self, DiagramData *dia)
 {
   DiaConnectChange *change = DIA_CONNECT_CHANGE (self);
 
-  object_unconnect(change->obj, change->handle);
+  object_unconnect (change->obj, change->handle);
 
-  object_add_updates (change->obj, dia);
+  object_add_updates (change->obj, DIA_DIAGRAM (dia));
   dia_object_move_handle (change->obj,
                           change->handle,
-                               &change->handle_pos, NULL,
-                               HANDLE_MOVE_CONNECTED, 0);
+                          &change->handle_pos,
+                          NULL,
+                          HANDLE_MOVE_CONNECTED,
+                          0);
 
-  object_add_updates(change->obj, dia);
+  object_add_updates (change->obj, DIA_DIAGRAM (dia));
 }
 
 
@@ -640,24 +669,24 @@ DIA_DEFINE_CHANGE (DiaUnconnectChange, dia_unconnect_change)
 
 
 static void
-dia_unconnect_change_apply (DiaChange *self, Diagram *dia)
+dia_unconnect_change_apply (DiaChange *self, DiagramData *dia)
 {
   DiaUnconnectChange *change = DIA_UNCONNECT_CHANGE (self);
 
-  object_unconnect(change->obj, change->handle);
+  object_unconnect (change->obj, change->handle);
 
-  object_add_updates(change->obj, dia);
+  object_add_updates (change->obj, DIA_DIAGRAM (dia));
 }
 
 
 static void
-dia_unconnect_change_revert (DiaChange *self, Diagram *dia)
+dia_unconnect_change_revert (DiaChange *self, DiagramData *dia)
 {
   DiaUnconnectChange *change = DIA_UNCONNECT_CHANGE (self);
 
-  object_connect(change->obj, change->handle, change->connectionpoint);
+  object_connect (change->obj, change->handle, change->connectionpoint);
 
-  object_add_updates(change->obj, dia);
+  object_add_updates (change->obj, DIA_DIAGRAM (dia));
 }
 
 
@@ -698,34 +727,37 @@ DIA_DEFINE_CHANGE (DiaDeleteObjectsChange, dia_delete_objects_change)
 
 
 static void
-dia_delete_objects_change_apply (DiaChange *self, Diagram *dia)
+dia_delete_objects_change_apply (DiaChange *self, DiagramData *dia)
 {
   DiaDeleteObjectsChange *change = DIA_DELETE_OBJECTS_CHANGE (self);
   GList *list;
 
   g_debug ("delete_objects_apply()");
   change->applied = 1;
-  diagram_unselect_objects (dia, change->obj_list);
+  diagram_unselect_objects (DIA_DIAGRAM (dia), change->obj_list);
   dia_layer_remove_objects (change->layer, change->obj_list);
-  object_add_updates_list (change->obj_list, dia);
+  object_add_updates_list (change->obj_list, DIA_DIAGRAM (dia));
 
   list = change->obj_list;
   while (list != NULL) {
-    DiaObject *obj = (DiaObject *)list->data;
+    DiaObject *obj = DIA_OBJECT (list->data);
 
-  /* Have to hide any open properties dialog
-     if it contains some object in cut_list */
-    properties_hide_if_shown(dia, obj);
+    /* Have to hide any open properties dialog
+       if it contains some object in cut_list */
+    properties_hide_if_shown (DIA_DIAGRAM (dia), obj);
 
-    if (obj->parent) /* Lose references to deleted object */
-      obj->parent->children = g_list_remove(obj->parent->children, obj);
+    if (obj->parent) {
+      /* Lose references to deleted object */
+      obj->parent->children = g_list_remove (obj->parent->children, obj);
+    }
 
-    list = g_list_next(list);
+    list = g_list_next (list);
   }
 }
 
+
 static void
-dia_delete_objects_change_revert (DiaChange *self, Diagram *dia)
+dia_delete_objects_change_revert (DiaChange *self, DiagramData *dia)
 {
   DiaDeleteObjectsChange *change = DIA_DELETE_OBJECTS_CHANGE (self);
   GList *list;
@@ -734,15 +766,18 @@ dia_delete_objects_change_revert (DiaChange *self, Diagram *dia)
   change->applied = 0;
   dia_layer_set_object_list (change->layer,
                              g_list_copy (change->original_objects));
-  object_add_updates_list (change->obj_list, dia);
+  object_add_updates_list (change->obj_list, DIA_DIAGRAM (dia));
 
   list = change->obj_list;
   while (list) {
-    DiaObject *obj = (DiaObject *) list->data;
-    if (obj->parent) /* Restore child references */
-      obj->parent->children = g_list_append(obj->parent->children, obj);
+    DiaObject *obj = DIA_OBJECT (list->data);
+    if (obj->parent) {
+
+      /* Restore child references */
+      obj->parent->children = g_list_append (obj->parent->children, obj);
+    }
     /* no need to emit object_add signal, already done by layer_set_object_list */
-    list = g_list_next(list);
+    list = g_list_next (list);
   }
 }
 
@@ -753,11 +788,12 @@ dia_delete_objects_change_free (DiaChange *self)
   DiaDeleteObjectsChange *change = DIA_DELETE_OBJECTS_CHANGE (self);
 
   g_debug ("delete_objects_free()");
-  if (change->applied)
-    destroy_object_list(change->obj_list);
-  else
-    g_list_free(change->obj_list);
-  g_list_free(change->original_objects);
+  if (change->applied) {
+    destroy_object_list (change->obj_list);
+  } else {
+    g_list_free (change->obj_list);
+  }
+  g_list_free (change->original_objects);
 }
 
 
@@ -804,50 +840,53 @@ DIA_DEFINE_CHANGE (DiaInsertObjectsChange, dia_insert_objects_change)
 
 
 static void
-dia_insert_objects_change_apply (DiaChange *self, Diagram *dia)
+dia_insert_objects_change_apply (DiaChange *self, DiagramData *dia)
 {
   DiaInsertObjectsChange *change = DIA_INSERT_OBJECTS_CHANGE (self);
 
   g_debug ("insert_objects_apply()");
   change->applied = 1;
   dia_layer_add_objects (change->layer, g_list_copy (change->obj_list));
-  object_add_updates_list (change->obj_list, dia);
+  object_add_updates_list (change->obj_list, DIA_DIAGRAM (dia));
 }
 
+
 static void
-dia_insert_objects_change_revert (DiaChange *self, Diagram *dia)
+dia_insert_objects_change_revert (DiaChange *self, DiagramData *dia)
 {
   DiaInsertObjectsChange *change = DIA_INSERT_OBJECTS_CHANGE (self);
   GList *list;
 
   g_debug ("insert_objects_revert()");
   change->applied = 0;
-  diagram_unselect_objects (dia, change->obj_list);
+  diagram_unselect_objects (DIA_DIAGRAM (dia), change->obj_list);
   dia_layer_remove_objects (change->layer, change->obj_list);
-  object_add_updates_list (change->obj_list, dia);
+  object_add_updates_list (change->obj_list, DIA_DIAGRAM (dia));
 
   list = change->obj_list;
   while (list != NULL) {
-    DiaObject *obj = (DiaObject *)list->data;
+    DiaObject *obj = DIA_OBJECT (list->data);
 
-  /* Have to hide any open properties dialog
-     if it contains some object in cut_list */
-    properties_hide_if_shown(dia, obj);
+    /* Have to hide any open properties dialog
+       if it contains some object in cut_list */
+    properties_hide_if_shown (DIA_DIAGRAM (dia), obj);
 
-    list = g_list_next(list);
+    list = g_list_next (list);
   }
 }
 
+
 static void
 dia_insert_objects_change_free (DiaChange *self)
 {
   DiaInsertObjectsChange *change = DIA_INSERT_OBJECTS_CHANGE (self);
 
   g_debug ("insert_objects_free()");
-  if (!change->applied)
-    destroy_object_list(change->obj_list);
-  else
-    g_list_free(change->obj_list);
+  if (!change->applied) {
+    destroy_object_list (change->obj_list);
+  } else {
+    g_list_free (change->obj_list);
+  }
 }
 
 
@@ -882,26 +921,26 @@ DIA_DEFINE_CHANGE (DiaReorderObjectsChange, dia_reorder_objects_change)
 
 
 static void
-dia_reorder_objects_change_apply (DiaChange *self, Diagram *dia)
+dia_reorder_objects_change_apply (DiaChange *self, DiagramData *dia)
 {
   DiaReorderObjectsChange *change = DIA_REORDER_OBJECTS_CHANGE (self);
 
   g_debug ("reorder_objects_apply()");
   dia_layer_set_object_list (change->layer,
                              g_list_copy (change->reordered_objects));
-  object_add_updates_list (change->changed_list, dia);
+  object_add_updates_list (change->changed_list, DIA_DIAGRAM (dia));
 }
 
 
 static void
-dia_reorder_objects_change_revert (DiaChange *self, Diagram *dia)
+dia_reorder_objects_change_revert (DiaChange *self, DiagramData *dia)
 {
   DiaReorderObjectsChange *change = DIA_REORDER_OBJECTS_CHANGE (self);
 
   g_debug ("reorder_objects_revert()");
   dia_layer_set_object_list (change->layer,
-                             g_list_copy(change->original_objects));
-  object_add_updates_list (change->changed_list, dia);
+                             g_list_copy (change->original_objects));
+  object_add_updates_list (change->changed_list, DIA_DIAGRAM (dia));
 }
 
 
@@ -911,9 +950,9 @@ dia_reorder_objects_change_free (DiaChange *self)
   DiaReorderObjectsChange *change = DIA_REORDER_OBJECTS_CHANGE (self);
 
   g_debug ("reorder_objects_free()");
-  g_list_free(change->changed_list);
-  g_list_free(change->original_objects);
-  g_list_free(change->reordered_objects);
+  g_list_free (change->changed_list);
+  g_list_free (change->original_objects);
+  g_list_free (change->reordered_objects);
 }
 
 
@@ -950,61 +989,67 @@ static void
 _connections_update_func (gpointer data, gpointer user_data)
 {
   DiaObject *obj = data;
-  Diagram   *dia = (Diagram *)user_data;
+  DiagramData *dia = DIA_DIAGRAM_DATA (user_data);
 
-  diagram_update_connections_object(dia, obj, TRUE);
+  diagram_update_connections_object (DIA_DIAGRAM (dia), obj, TRUE);
 }
 
 
 static void
-dia_object_change_change_apply (DiaChange *self,
-                                Diagram   *dia)
+dia_object_change_change_apply (DiaChange   *self,
+                                DiagramData *dia)
 {
   DiaObjectChangeChange *change = DIA_OBJECT_CHANGE_CHANGE (self);
 
-  if (change->obj)
-    object_add_updates(change->obj, dia);
+  if (change->obj) {
+    object_add_updates (change->obj, DIA_DIAGRAM (dia));
+  }
 
-  change->obj_change->apply(change->obj_change, change->obj);
+  change->obj_change->apply (change->obj_change, change->obj);
 
   if (change->obj) {
     /* Make sure object updates its data: */
     Point p = change->obj->position;
     dia_object_move (change->obj, &p);
 
-    object_add_updates(change->obj, dia);
-    diagram_update_connections_object(dia, change->obj, TRUE);
-    properties_update_if_shown(dia, change->obj);
+    object_add_updates (change->obj, DIA_DIAGRAM (dia));
+    diagram_update_connections_object (DIA_DIAGRAM (dia), change->obj, TRUE);
+    properties_update_if_shown (DIA_DIAGRAM (dia), change->obj);
   } else {
     /* pretty big hammer - update all connections */
-    data_foreach_object (DIA_DIAGRAM_DATA (dia), _connections_update_func, dia);
-    diagram_add_update_all(dia);
+    data_foreach_object (DIA_DIAGRAM_DATA (dia),
+                         _connections_update_func,
+                         DIA_DIAGRAM (dia));
+    diagram_add_update_all (DIA_DIAGRAM (dia));
   }
 }
 
 
 static void
-dia_object_change_change_revert (DiaChange *self,
-                                 Diagram   *dia)
+dia_object_change_change_revert (DiaChange   *self,
+                                 DiagramData *dia)
 {
   DiaObjectChangeChange *change = DIA_OBJECT_CHANGE_CHANGE (self);
 
-  if (change->obj)
-    object_add_updates(change->obj, dia);
+  if (change->obj) {
+    object_add_updates (change->obj, DIA_DIAGRAM (dia));
+  }
 
-  change->obj_change->revert(change->obj_change, change->obj);
+  change->obj_change->revert (change->obj_change, change->obj);
 
   if (change->obj) {
     /* Make sure object updates its data: */
     Point p = change->obj->position;
     dia_object_move (change->obj, &p);
 
-    object_add_updates(change->obj, dia);
-    diagram_update_connections_object(dia, change->obj, TRUE);
-    properties_update_if_shown(dia, change->obj);
+    object_add_updates(change->obj, DIA_DIAGRAM (dia));
+    diagram_update_connections_object (DIA_DIAGRAM (dia), change->obj, TRUE);
+    properties_update_if_shown (DIA_DIAGRAM (dia), change->obj);
   } else {
-    data_foreach_object (DIA_DIAGRAM_DATA (dia), _connections_update_func, dia);
-    diagram_add_update_all(dia);
+    data_foreach_object (DIA_DIAGRAM_DATA (dia),
+                         _connections_update_func,
+                         DIA_DIAGRAM (dia));
+    diagram_add_update_all (DIA_DIAGRAM (dia));
   }
 }
 
@@ -1066,7 +1111,7 @@ DIA_DEFINE_CHANGE (DiaGroupObjectsChange, dia_group_objects_change)
 
 
 static void
-dia_group_objects_change_apply (DiaChange *self, Diagram *dia)
+dia_group_objects_change_apply (DiaChange *self, DiagramData *dia)
 {
   DiaGroupObjectsChange *change = DIA_GROUP_OBJECTS_CHANGE (self);
 
@@ -1076,42 +1121,42 @@ dia_group_objects_change_apply (DiaChange *self, Diagram *dia)
 
   change->applied = 1;
 
-  diagram_unselect_objects (dia, change->obj_list);
+  diagram_unselect_objects (DIA_DIAGRAM (dia), change->obj_list);
   dia_layer_remove_objects (change->layer, change->obj_list);
   dia_layer_add_object (change->layer, change->group);
-  object_add_updates (change->group, dia);
+  object_add_updates (change->group, DIA_DIAGRAM (dia));
 
   list = change->obj_list;
   while (list != NULL) {
-    DiaObject *obj = (DiaObject *)list->data;
+    DiaObject *obj = DIA_OBJECT (list->data);
 
-  /* Have to hide any open properties dialog
-     if it contains some object in cut_list */
-    properties_hide_if_shown(dia, obj);
+    /* Have to hide any open properties dialog
+       if it contains some object in cut_list */
+    properties_hide_if_shown (DIA_DIAGRAM (dia), obj);
 
-    object_add_updates(obj, dia);
+    object_add_updates (obj, DIA_DIAGRAM (dia));
 
-    list = g_list_next(list);
+    list = g_list_next (list);
   }
 }
 
 
 static void
-dia_group_objects_change_revert (DiaChange *self, Diagram *dia)
+dia_group_objects_change_revert (DiaChange *self, DiagramData *dia)
 {
   DiaGroupObjectsChange *change = DIA_GROUP_OBJECTS_CHANGE (self);
 
   g_debug ("group_objects_revert()");
   change->applied = 0;
 
-  diagram_unselect_object (dia, change->group);
-  object_add_updates (change->group, dia);
+  diagram_unselect_object (DIA_DIAGRAM (dia), change->group);
+  object_add_updates (change->group, DIA_DIAGRAM (dia));
 
   dia_layer_set_object_list (change->layer, g_list_copy (change->orig_list));
 
-  object_add_updates_list (change->obj_list, dia);
+  object_add_updates_list (change->obj_list, DIA_DIAGRAM (dia));
 
-  properties_hide_if_shown (dia, change->group);
+  properties_hide_if_shown (DIA_DIAGRAM (dia), change->group);
 }
 
 
@@ -1122,12 +1167,12 @@ dia_group_objects_change_free (DiaChange *self)
 
   g_debug ("group_objects_free()");
   if (!change->applied) {
-    group_destroy_shallow(change->group);
+    group_destroy_shallow (change->group);
     change->group = NULL;
     change->obj_list = NULL;
     /** Leak here? */
   }
-  g_list_free(change->orig_list);
+  g_list_free (change->orig_list);
 }
 
 
@@ -1167,7 +1212,7 @@ DIA_DEFINE_CHANGE (DiaUngroupObjectsChange, dia_ungroup_objects_change)
 
 
 static void
-dia_ungroup_objects_change_apply (DiaChange *self, Diagram *dia)
+dia_ungroup_objects_change_apply (DiaChange *self, DiagramData *dia)
 {
   DiaUngroupObjectsChange *change = DIA_UNGROUP_OBJECTS_CHANGE (self);
 
@@ -1175,19 +1220,19 @@ dia_ungroup_objects_change_apply (DiaChange *self, Diagram *dia)
 
   change->applied = 1;
 
-  diagram_unselect_object (dia, change->group);
-  object_add_updates (change->group, dia);
+  diagram_unselect_object (DIA_DIAGRAM (dia), change->group);
+  object_add_updates (change->group, DIA_DIAGRAM (dia));
   dia_layer_replace_object_with_list (change->layer,
                                       change->group,
-                                      g_list_copy(change->obj_list));
-  object_add_updates_list (change->obj_list, dia);
+                                      g_list_copy (change->obj_list));
+  object_add_updates_list (change->obj_list, DIA_DIAGRAM (dia));
 
-  properties_hide_if_shown (dia, change->group);
+  properties_hide_if_shown (DIA_DIAGRAM (dia), change->group);
 }
 
 
 static void
-dia_ungroup_objects_change_revert (DiaChange *self, Diagram *dia)
+dia_ungroup_objects_change_revert (DiaChange *self, DiagramData *dia)
 {
   DiaUngroupObjectsChange *change = DIA_UNGROUP_OBJECTS_CHANGE (self);
   GList *list;
@@ -1196,20 +1241,20 @@ dia_ungroup_objects_change_revert (DiaChange *self, Diagram *dia)
   change->applied = 0;
 
 
-  diagram_unselect_objects( dia, change->obj_list);
+  diagram_unselect_objects (DIA_DIAGRAM (dia), change->obj_list);
   dia_layer_remove_objects (change->layer, change->obj_list);
   dia_layer_add_object_at (change->layer, change->group, change->group_index);
-  object_add_updates (change->group, dia);
+  object_add_updates (change->group, DIA_DIAGRAM (dia));
 
   list = change->obj_list;
   while (list != NULL) {
-    DiaObject *obj = (DiaObject *)list->data;
+    DiaObject *obj = DIA_OBJECT (list->data);
 
-  /* Have to hide any open properties dialog
-     if it contains some object in cut_list */
-    properties_hide_if_shown(dia, obj);
+    /* Have to hide any open properties dialog
+       if it contains some object in cut_list */
+    properties_hide_if_shown (DIA_DIAGRAM (dia), obj);
 
-    list = g_list_next(list);
+    list = g_list_next (list);
   }
 }
 
@@ -1222,7 +1267,7 @@ dia_ungroup_objects_change_free (DiaChange *self)
   g_debug ("ungroup_objects_free()");
 
   if (change->applied) {
-    group_destroy_shallow(change->group);
+    group_destroy_shallow (change->group);
     change->group = NULL;
     change->obj_list = NULL;
   }
@@ -1265,26 +1310,26 @@ DIA_DEFINE_CHANGE (DiaParentingChange, dia_parenting_change)
 /** Performs the actual parenting of a child to a parent.
  * Since no display changes arise from this, we need call no update. */
 static void
-parent_object(Diagram *dia, DiaObject *parent, DiaObject *child)
+parent_object (DiagramData *dia, DiaObject *parent, DiaObject *child)
 {
   child->parent = parent;
-  parent->children = g_list_prepend(parent->children, child);
+  parent->children = g_list_prepend (parent->children, child);
 }
 
 
 /** Performs the actual removal of a child from a parent.
  * Since no display changes arise from this, we need call no update. */
 static void
-unparent_object(Diagram *dia, DiaObject *parent, DiaObject *child)
+unparent_object (DiagramData *dia, DiaObject *parent, DiaObject *child)
 {
   child->parent = NULL;
-  parent->children = g_list_remove(parent->children, child);
+  parent->children = g_list_remove (parent->children, child);
 }
 
 
 /** Applies the given ParentChange */
 static void
-dia_parenting_change_apply (DiaChange *change, Diagram *dia)
+dia_parenting_change_apply (DiaChange *change, DiagramData *dia)
 {
   DiaParentingChange *parentchange = DIA_PARENTING_CHANGE (change);
 
@@ -1298,7 +1343,7 @@ dia_parenting_change_apply (DiaChange *change, Diagram *dia)
 
 /** Reverts the given ParentChange */
 static void
-dia_parenting_change_revert (DiaChange *change, Diagram *dia)
+dia_parenting_change_revert (DiaChange *change, DiagramData *dia)
 {
   DiaParentingChange *parentchange = DIA_PARENTING_CHANGE (change);
 
@@ -1368,31 +1413,31 @@ DIA_DEFINE_CHANGE (DiaMoveObjectToLayerChange, dia_move_object_to_layer_change)
  * better make it listen to object-add signal?
  */
 static void
-move_object_layer_relative (Diagram *dia, GList *objects, gint dist)
+move_object_layer_relative (DiagramData *dia, GList *objects, gint dist)
 {
   /* from the active layer to above or below */
   DiaLayer *active, *target;
   guint pos;
 
-  g_return_if_fail (data_layer_count (DIA_DIAGRAM_DATA (dia)) != 0);
+  g_return_if_fail (data_layer_count (dia) != 0);
 
-  active = dia_diagram_data_get_active_layer (DIA_DIAGRAM_DATA (dia));
+  active = dia_diagram_data_get_active_layer (dia);
 
   g_return_if_fail (active);
 
-  pos = data_layer_get_index (DIA_DIAGRAM_DATA (dia), active);
+  pos = data_layer_get_index (dia, active);
 
-  pos = (pos + data_layer_count (DIA_DIAGRAM_DATA (dia)) + dist) % data_layer_count (DIA_DIAGRAM_DATA (dia));
-  target = data_layer_get_nth (DIA_DIAGRAM_DATA (dia), pos);
-  object_add_updates_list (objects, dia);
+  pos = (pos + data_layer_count (dia) + dist) % data_layer_count (dia);
+  target = data_layer_get_nth (dia, pos);
+  object_add_updates_list (objects, DIA_DIAGRAM (dia));
   dia_layer_remove_objects (active, objects);
   dia_layer_add_objects (target, g_list_copy (objects));
-  data_set_active_layer (dia->data, target);
+  data_set_active_layer (dia, target);
 }
 
 
 static void
-dia_move_object_to_layer_change_apply (DiaChange *self, Diagram *dia)
+dia_move_object_to_layer_change_apply (DiaChange *self, DiagramData *dia)
 {
   DiaMoveObjectToLayerChange *change = DIA_MOVE_OBJECT_TO_LAYER_CHANGE (self);
 
@@ -1405,18 +1450,18 @@ dia_move_object_to_layer_change_apply (DiaChange *self, Diagram *dia)
 
 
 static void
-dia_move_object_to_layer_change_revert (DiaChange *self, Diagram *dia)
+dia_move_object_to_layer_change_revert (DiaChange *self, DiagramData *dia)
 {
   DiaMoveObjectToLayerChange *change = DIA_MOVE_OBJECT_TO_LAYER_CHANGE (self);
 
   if (change->moving_up) {
     move_object_layer_relative (dia, change->objects, -1);
   } else {
-    diagram_unselect_objects (dia, change->objects);
+    diagram_unselect_objects (DIA_DIAGRAM (dia), change->objects);
     move_object_layer_relative (dia, change->objects, 1);
     /* overwriting the 'unsorted' list of objects to the order it had before */
     dia_layer_set_object_list (change->orig_layer, g_list_copy (change->orig_list));
-    object_add_updates_list (change->orig_list, dia);
+    object_add_updates_list (change->orig_list, DIA_DIAGRAM (dia));
   }
 }
 
@@ -1465,50 +1510,56 @@ DIA_DEFINE_CHANGE (DiaImportChange, dia_import_change)
 
 
 static void
-dia_import_change_apply (DiaChange *self,
-                         Diagram   *dia)
+dia_import_change_apply (DiaChange   *self,
+                         DiagramData *dia)
 {
   DiaImportChange *change = DIA_IMPORT_CHANGE (self);
   GList *list;
-  DiaLayer *layer = dia_diagram_data_get_active_layer (DIA_DIAGRAM_DATA (dia));
+  DiaLayer *layer = dia_diagram_data_get_active_layer (dia);
 
   /* add all objects and layers added from the diagram */
   for (list = change->layers; list != NULL; list = list->next) {
     layer = DIA_LAYER (list->data);
     data_add_layer (DIA_DIAGRAM_DATA (change->dia), layer);
   }
+
   for (list = change->objects; list != NULL; list = list->next) {
-    DiaObject *obj = (DiaObject *)list->data;
-     /* ToDo: layer assignment wont be triggered for removed objects.
-      *   Maybe we need to store all the layers with the objects ourself?
-      */
-    if (dia_object_get_parent_layer (obj))
+    DiaObject *obj = DIA_OBJECT (list->data);
+    /* TODO: layer assignment wont be triggered for removed objects.
+     * Maybe we need to store all the layers with the objects ourself?
+     */
+    if (dia_object_get_parent_layer (obj)) {
       layer = dia_object_get_parent_layer (obj);
+    }
+
     dia_layer_add_object (layer, obj);
   }
-  diagram_update_extents (change->dia);
+
+  diagram_update_extents (DIA_DIAGRAM (change->dia));
 }
 
 
 static void
-dia_import_change_revert (DiaChange *self,
-                          Diagram   *diagram)
+dia_import_change_revert (DiaChange   *self,
+                          DiagramData *diagram)
 {
   DiaImportChange *change = DIA_IMPORT_CHANGE (self);
   GList *list;
 
   /* otherwise we might end up with an empty selection */
-  diagram_unselect_objects (change->dia, change->objects);
+  diagram_unselect_objects (DIA_DIAGRAM (change->dia), change->objects);
   /* remove all objects and layers added from the diagram */
   for (list = change->objects; list != NULL; list = list->next) {
     DiaObject *obj = DIA_OBJECT (list->data);
     DiaLayer *layer = dia_object_get_parent_layer (obj);
     dia_layer_remove_object (layer, obj);
   }
+
   for (list = change->layers; list != NULL; list = list->next) {
     DiaLayer *layer = DIA_LAYER (list->data);
     data_remove_layer (DIA_DIAGRAM_DATA (change->dia), layer);
   }
+
   diagram_update_extents (change->dia);
 }
 
@@ -1593,6 +1644,7 @@ dia_import_change_done (Diagram *dia, DiaChange *chg)
     undo_push_change (dia->undo, chg);
     return TRUE;
   }
+
   return FALSE;
 }
 
@@ -1610,7 +1662,7 @@ DIA_DEFINE_CHANGE (DiaMemSwapChange, dia_mem_swap_change)
 
 
 static void
-_swap_mem (DiaMemSwapChange *change, Diagram *dia)
+_swap_mem (DiaMemSwapChange *change, DiagramData *dia)
 {
   gsize  i;
 
@@ -1619,22 +1671,23 @@ _swap_mem (DiaMemSwapChange *change, Diagram *dia)
     change->mem[i] = change->dest[i];
     change->dest[i] = tmp;
   }
-  diagram_add_update_all (dia);
-  diagram_flush (dia);
+
+  diagram_add_update_all (DIA_DIAGRAM (dia));
+  diagram_flush (DIA_DIAGRAM (dia));
 }
 
 
 static void
-dia_mem_swap_change_apply (DiaChange *change,
-                           Diagram   *diagram)
+dia_mem_swap_change_apply (DiaChange   *change,
+                           DiagramData *diagram)
 {
   _swap_mem (DIA_MEM_SWAP_CHANGE (change), diagram);
 }
 
 
 static void
-dia_mem_swap_change_revert (DiaChange *change,
-                            Diagram   *diagram)
+dia_mem_swap_change_revert (DiaChange   *change,
+                            DiagramData *diagram)
 {
   _swap_mem (DIA_MEM_SWAP_CHANGE (change), diagram);
 }
diff --git a/docs/dia-app/dia-app-docs.xml b/docs/dia-app/dia-app-docs.xml
index 550c38f26..335213947 100644
--- a/docs/dia-app/dia-app-docs.xml
+++ b/docs/dia-app/dia-app-docs.xml
@@ -96,7 +96,6 @@
 
     <chapter id="undo-api">
       <title>Undo</title>
-      <xi:include href="xml/dia-change.xml" />
       <xi:include href="xml/undo.xml" />
     </chapter>
   </part>
diff --git a/docs/dia/dia-docs.xml b/docs/dia/dia-docs.xml
index 9872afa82..7c89ac316 100644
--- a/docs/dia/dia-docs.xml
+++ b/docs/dia/dia-docs.xml
@@ -70,6 +70,7 @@
     <xi:include href="xml/connpoint_line.xml"/>
     <xi:include href="xml/dia_svg.xml"/>
     <xi:include href="xml/objchange.xml"/>
+    <xi:include href="xml/dia-change.xml" />
     <xi:include href="xml/object-alias.xml"/>
     <xi:include href="xml/create.xml"/>
     <xi:include href="xml/diatransform.xml"/>
diff --git a/app/dia-change.c b/lib/dia-change.c
similarity index 93%
rename from app/dia-change.c
rename to lib/dia-change.c
index 3b523204f..b216a7074 100644
--- a/app/dia-change.c
+++ b/lib/dia-change.c
@@ -24,19 +24,19 @@
 #include <gobject/gvaluecollector.h>
 
 #include "dia-change.h"
-#include "diagram.h"
+#include "diagramdata.h"
 
 static void
-dia_change_real_apply (DiaChange *self,
-                       Diagram   *diagram)
+dia_change_real_apply (DiaChange   *self,
+                       DiagramData *diagram)
 {
   g_critical ("%s doesn't implement apply", DIA_CHANGE_TYPE_NAME (self));
 }
 
 
 static void
-dia_change_real_revert (DiaChange *self,
-                        Diagram   *diagram)
+dia_change_real_revert (DiaChange   *self,
+                        DiagramData *diagram)
 {
   g_critical ("%s doesn't implement revert", DIA_CHANGE_TYPE_NAME (self));
 }
@@ -267,22 +267,22 @@ dia_change_new (GType type)
 
 
 void
-dia_change_apply (DiaChange *self,
-                  Diagram   *diagram)
+dia_change_apply (DiaChange   *self,
+                  DiagramData *diagram)
 {
   g_return_if_fail (self && DIA_IS_CHANGE (self));
-  g_return_if_fail (diagram && DIA_IS_DIAGRAM (diagram));
+  g_return_if_fail (diagram && DIA_IS_DIAGRAM_DATA (diagram));
 
   DIA_CHANGE_GET_CLASS (self)->apply (self, diagram);
 }
 
 
 void
-dia_change_revert (DiaChange *self,
-                   Diagram   *diagram)
+dia_change_revert (DiaChange   *self,
+                   DiagramData *diagram)
 {
   g_return_if_fail (self && DIA_IS_CHANGE (self));
-  g_return_if_fail (diagram && DIA_IS_DIAGRAM (diagram));
+  g_return_if_fail (diagram && DIA_IS_DIAGRAM_DATA (diagram));
 
   DIA_CHANGE_GET_CLASS (self)->revert (self, diagram);
 }
diff --git a/app/dia-change.h b/lib/dia-change.h
similarity index 83%
rename from app/dia-change.h
rename to lib/dia-change.h
index 3646a1fff..fa8c6f494 100644
--- a/app/dia-change.h
+++ b/lib/dia-change.h
@@ -26,7 +26,7 @@
 
 #ifndef __GTK_DOC_IGNORE__
 // TODO: Fix the diagram.h cycle
-typedef struct _Diagram Diagram;
+typedef struct _DiagramData DiagramData;
 #endif
 
 G_BEGIN_DECLS
@@ -63,14 +63,14 @@ typedef struct _DiaChangeClass DiaChangeClass;
  * DIA_DEFINE_CHANGE (SomeChange, some_change)
  *
  * static void
- * some_change_apply (DiaChange *change,
- *                    Diagram   *diagram)
+ * some_change_apply (DiaChange   *change,
+ *                    DiagramData *diagram)
  * {
  * }
  *
  * static void
- * some_change_revert (DiaChange *change,
- *                     Diagram   *diagram)
+ * some_change_revert (DiaChange   *change,
+ *                     DiagramData *diagram)
  * {
  * }
  *
@@ -86,9 +86,9 @@ typedef struct _DiaChangeClass DiaChangeClass;
   G_DEFINE_TYPE (TypeName, type_name, DIA_TYPE_CHANGE)                       \
                                                                              \
   static void type_name##_apply             (DiaChange        *change,       \
-                                             Diagram          *diagram);     \
+                                             DiagramData      *diagram);     \
   static void type_name##_revert            (DiaChange        *change,       \
-                                             Diagram          *diagram);     \
+                                             DiagramData      *diagram);     \
   static void type_name##_free              (DiaChange        *change);      \
                                                                              \
   static void                                                                \
@@ -118,20 +118,20 @@ struct _DiaChange {
 struct _DiaChangeClass {
   GTypeClass parent;
 
-  void (*apply)  (DiaChange *change,
-                  Diagram   *dia);
-  void (*revert) (DiaChange *change,
-                  Diagram   *dia);
-  void (*free)   (DiaChange *change);
+  void (*apply)  (DiaChange   *change,
+                  DiagramData *dia);
+  void (*revert) (DiaChange   *change,
+                  DiagramData *dia);
+  void (*free)   (DiaChange   *change);
 };
 
-void     dia_change_unref  (gpointer   self);
-gpointer dia_change_ref    (gpointer   self);
-gpointer dia_change_new    (GType      type);
-void     dia_change_apply  (DiaChange *self,
-                            Diagram   *diagram);
-void     dia_change_revert (DiaChange *self,
-                            Diagram   *diagram);
+void     dia_change_unref  (gpointer     self);
+gpointer dia_change_ref    (gpointer     self);
+gpointer dia_change_new    (GType        type);
+void     dia_change_apply  (DiaChange   *self,
+                            DiagramData *diagram);
+void     dia_change_revert (DiaChange   *self,
+                            DiagramData *diagram);
 
 G_DEFINE_AUTOPTR_CLEANUP_FUNC (DiaChange, dia_change_unref)
 
diff --git a/lib/meson.build b/lib/meson.build
index 66148aaef..1aa23e788 100644
--- a/lib/meson.build
+++ b/lib/meson.build
@@ -89,6 +89,8 @@ libdia_sources = stdprop_sources + [
     'beziershape.h',
     'objchange.c',
     'objchange.h',
+    'dia-change.c',
+    'dia-change.h',
     'dialogs.c',
     'dialogs.h',
     'widgets.c',
diff --git a/lib/object.c b/lib/object.c
index 8db4b3f61..f8a037949 100644
--- a/lib/object.c
+++ b/lib/object.c
@@ -1587,7 +1587,7 @@ dia_object_get_editor (DiaObject *self,
  * The widget parameter is the one created by
  * the get_properties function.
  *
- * Returns: a #Change that can be used for undo/redo, The returned change is
+ * Returns: a #ObjectChange that can be used for undo/redo, The returned change is
  *          already applied.
  *
  * Stability: Stable
@@ -1719,7 +1719,7 @@ dia_object_set_properties (DiaObject *self,
  * is different from SetPropsFunc since this is used to implement
  * undo/redo.
  *
- * Returns: a #Change for undo/redo
+ * Returns: a #ObjectChange for undo/redo
  *
  * Stability: Stable
  *
diff --git a/lib/prop_pixbuf.c b/lib/prop_pixbuf.c
index ee8fd1d82..5ddd865ce 100644
--- a/lib/prop_pixbuf.c
+++ b/lib/prop_pixbuf.c
@@ -220,6 +220,8 @@ _make_pixbuf_type_name (const char *p)
 
 /**
  * pixbuf_encode_base64:
+ * @pixbuf: the #GdkPixbuf to encode
+ * @prefix: mime type
  *
  * Reusable variant of pixbuf to base64 string conversion
  */


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]