diff --git a/doc/architecture/decisions/0002-implement-graphics-object-store.md b/doc/architecture/decisions/0002-implement-graphics-object-store.md
index f29c3e2..c6154c7 100644
--- a/doc/architecture/decisions/0002-implement-graphics-object-store.md
+++ b/doc/architecture/decisions/0002-implement-graphics-object-store.md
@@ -43,7 +43,8 @@ the following fields:
GromitDeviceData *selected; // NULL, or which user selected the item
guint32 capabilities; // bit mask with capabilities (see below)
BoundingBox extent; // the objects rectangular extent
- void (*exec)(GfxObject *, action, void *); // object-specific methods
+ void (*exec)(GromitData *, GfxObjectBase *,
+ GfxAction, void *); // object-specific methods
} GfxObjectBase;
This basic set of fields is extended by object-specific fields, which
@@ -104,10 +105,10 @@ implemented in the `do_action` function.
move | object can be moved |
- isotropic_scale | object can be scaled isotropically |
+ scale_isotropic | object can be scaled isotropically |
- anisotropic_scale | object can be scaled anisotropically,
+ | scale_anisotropic | object can be scaled anisotropically,
i.e. differently in X and Y direction isotropic_scale also must be set |
@@ -162,7 +163,7 @@ When calling `exec`, the `action` argument selects the task to be performed.
- update_bbox | update the bounding box of the base object;
+ | update_bounding_box | update the bounding box of the base object;
trigger recalculation of the bounding box |
@@ -197,12 +198,17 @@ Each object that is added or transformed receives a new unique
Maintaining a per-user (i.e. per device) undo system is complicated by
the fact that an object can be "taken over" by another user by
manipulating it. This is necessary to enable a truly collaborative
-workflow. At the same time, a user should only undo his/her own
+workflow. At the same time, a user should only undo their own
operations.
To solve this conflict, I propose the following system:
-- each device (i.e. user) contains an `GList` with `undo` and `redo` records.
+- for each device, the `GdkSeat` is determined, since it links pointer
+ and keyboard devices that belong together.
+
+- for each `GdkSeat`, a `GromitSeat` which contains a `GList` of
+ `undo` and `redo` records. The `GromitSeat`s are stored in a hash
+ table in `GromitData` that associates the device with the seat.
- `GromitData` is extended with an undo object store (`undo_objects`).