[gparted] Document how the GUI works and the lifetimes of important data (#750168)
- From: Curtis Gedak <gedakc src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gparted] Document how the GUI works and the lifetimes of important data (#750168)
- Date: Sat, 13 Jun 2015 16:11:28 +0000 (UTC)
commit 1143917d342cf701f524b0779fa06f20634f921a
Author: Mike Fleetwood <mike fleetwood googlemail com>
Date: Tue May 19 20:25:07 2015 +0100
Document how the GUI works and the lifetimes of important data (#750168)
Document how GParted displays partitions in the GUI and manages the
lifetime and ownership of that data.
Bug 750168 - Reduce the amount of copying of partition objects
src/Win_GParted.cc | 82 ++++++++++++++++++++++++++++++++++++++++++++++++++++
1 files changed, 82 insertions(+), 0 deletions(-)
---
diff --git a/src/Win_GParted.cc b/src/Win_GParted.cc
index fd80038..6b9bd0d 100644
--- a/src/Win_GParted.cc
+++ b/src/Win_GParted.cc
@@ -818,6 +818,88 @@ bool Win_GParted::Merge_Operations( unsigned int first, unsigned int second )
void Win_GParted::Refresh_Visual()
{
+ // How GParted displays partitions in the GUI and manages the lifetime and
+ // ownership of that data:
+ //
+ // (1) Queries the devices and partitions on disk and refreshes the model.
+ //
+ // Data owner: std::vector<Devices> Win_GParted::devices
+ // Lifetime: Valid until the next call to Refresh_Visual()
+ // Call chain:
+ //
+ // Win_GParted::menu_gparted_refresh_devices()
+ // gparted_core.set_devices( devices )
+ // GParted_Core::set_devices_thread( devices )
+ // devices.clear()
+ // etc.
+ //
+ // (2) Takes a copy of the partitions for the device currently being shown in the
+ // GUI and visually applies pending operations.
+ //
+ // Data owner: std::vector<Partition> Win_GParted::display_partitions
+ // Lifetime: Valid until the next call to Refresh_Visual().
+ // Function: Refresh_Visual()
+ //
+ // (3) Loads the disk graphic and partition list with partitions to be shown in
+ // the GUI. Both classes store pointers pointing back to each partition
+ // object in the vector of display partitions.
+ //
+ // Aliases: Win_GParted::display_partitions[]
+ // Call chain:
+ //
+ // Win_GParted::Refresh_Visual()
+ // drawingarea_visualdisk.load_partitions( display_partitions, device_sectors )
+ // DrawingAreaVisualDisk::set_static_data( ... )
+ // treeview_detail.load_partitions( display_partitions )
+ // TreeView_Detail::create_row()
+ // TreeView_Detail::load_partitions()
+ // TreeView_Detail::create_row()
+ //
+ // (4) Selecting a partition in the disk graphic or in the partition list fires
+ // the callback which passes a pointer to the selected partition stored in
+ // step (3). The callback saves the selected partition and calls the opposite
+ // class to update it's selection.
+ //
+ // Data owner: const Partition * Win_GParted::selected_partition_ptr
+ // Aliases: Win_GParted::display_partitions[]
+ // Lifetime: Valid until the next call to Refresh_Visual().
+ // Call chain: (example clicking on a partition in the disk graphic)
+ //
+ // DrawingAreaVisualDisk::on_button_press_event()
+ // DawingAreaVisualDisk::set_selected( visual_partitions, x, y )
+ // signal_partition_selected.emit( ..., false )
+ // Win_GParted::on_partition_selected( partition_ptr, src_is_treeview )
+ // treeview_detail.set_selected( treestore_detail->children(), partition_ptr )
+ // TreeView::set_selected( rows, partition_ptr, inside_extended )
+ // set_cursor()
+ // TreeView::set_selected( rows, partition_ptr, true )
+ // set_cursor()
+ //
+ // (5) Each new operation is added to the vector of pending operations.
+ // Eventually Refresh_Visual() is call to update the GUI. This goes to step
+ // (2) which visually reapplies all pending operations again, including the
+ // newly added operation.
+ //
+ // Data owner: std::vector<Operation *> Win_GParted::operations
+ // Lifetime: Valid until operations have been applied by
+ // GParted_Core::apply_operation_to_disk(). Specifically longer
+ // than the next call call to Refresh_Visual().
+ // Call chain: (example setting a file system label)
+ //
+ // Win_GParted::activate_label_filesystem()
+ // Win_GParted::Add_Operation( operation )
+ // Win_GParted::Merge_Operations( ... )
+ // Win_GParted::show_operationslist()
+ // Win_GParted::Refresh_Visual()
+ //
+ // (6) Selecting a partition as a copy source makes a copy of that partition
+ // object.
+ //
+ // Data owner: Partition Win_GParted::copied_partition
+ // Lifetime: Valid until GParted closed or the device is removed.
+ // Specifically longer than the next call to Refresh_Visual().
+ // Function: Win_GParted::activate_copy()
+
display_partitions = devices[current_device].partitions;
//make all operations visible
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]