From c6d0fa508011281569f5985a0bcbc6b0d4428711 Mon Sep 17 00:00:00 2001 From: David Date: Fri, 9 Aug 2024 21:41:18 +0200 Subject: [PATCH] Fix file dialog memory leak --- .github/workflows/docs.yml | 4 ++-- .swiftlint.yml | 1 + Sources/Adwaita/Model/Data Flow/Binding.swift | 2 ++ Sources/Adwaita/Model/Data Flow/State.swift | 1 + Sources/Adwaita/Model/Extensions/Array.swift | 5 +++++ Sources/Adwaita/Model/Extensions/Bool.swift | 1 + Sources/Adwaita/Model/Extensions/Int.swift | 1 + Sources/Adwaita/Model/Extensions/OpaquePointer.swift | 1 + Sources/Adwaita/Model/Extensions/Set.swift | 1 + Sources/Adwaita/Model/Extensions/String.swift | 1 + Sources/Adwaita/Model/Extensions/UInt.swift | 1 + Sources/Adwaita/Model/Extensions/UnsafeMutablePointer.swift | 1 + .../Adwaita/Model/Extensions/UnsafeMutableRawPointer.swift | 1 + Sources/Adwaita/Model/User Interface/App/App.swift | 1 + Sources/Adwaita/Model/User Interface/Menu/MenuItem.swift | 1 + .../Adwaita/Model/User Interface/Menu/MenuItemGroup.swift | 1 + Sources/Adwaita/Model/User Interface/View/View.swift | 6 ++++++ Sources/Adwaita/Model/User Interface/View/Widget.swift | 1 + .../Adwaita/Model/User Interface/Window/WindowScene.swift | 1 + .../Model/User Interface/Window/WindowSceneGroup.swift | 1 + Sources/Adwaita/View/Menu+.swift | 1 + Sources/CAdw/shim.h | 3 ++- 22 files changed, 34 insertions(+), 3 deletions(-) diff --git a/.github/workflows/docs.yml b/.github/workflows/docs.yml index 4390761..238ae16 100644 --- a/.github/workflows/docs.yml +++ b/.github/workflows/docs.yml @@ -46,8 +46,8 @@ jobs: - name: Modify Docs run: | echo "" > docs/index.html; - sed -i '' 's/#06f/#ea3358/g' docs/css/documentation-topic~topic~tutorials-overview.d6f5411c.css - sed -i '' 's/,2px/,10px/g' docs/css/index.038e887c.css + sed -i '' 's/#06f/#ea3358/g' docs/css/documentation-topic~topic~tutorials-overview.*.css + sed -i '' 's/,2px/,10px/g' docs/css/index.*.css - name: Upload Artifact uses: actions/upload-pages-artifact@v3 with: diff --git a/.swiftlint.yml b/.swiftlint.yml index 4a37d11..17bee73 100644 --- a/.swiftlint.yml +++ b/.swiftlint.yml @@ -164,3 +164,4 @@ type_contents_order: excluded: - Sources/Adwaita/View/Generated/ - Sources/Adwaita/Adwaita.docc/ + - .build/ \ No newline at end of file diff --git a/Sources/Adwaita/Model/Data Flow/Binding.swift b/Sources/Adwaita/Model/Data Flow/Binding.swift index e05d1ac..4b3e298 100644 --- a/Sources/Adwaita/Model/Data Flow/Binding.swift +++ b/Sources/Adwaita/Model/Data Flow/Binding.swift @@ -112,6 +112,7 @@ public struct Binding { } +/// An extension extension Binding where Value: MutableCollection { /// Get a child at a certain index of the array as a binding. @@ -134,6 +135,7 @@ extension Binding where Value: MutableCollection { } +/// An extension extension Binding where Value: MutableCollection, Value.Element: Identifiable { /// Get a child of the array with a certain id as a binding. diff --git a/Sources/Adwaita/Model/Data Flow/State.swift b/Sources/Adwaita/Model/Data Flow/State.swift index 842b9b2..afcd276 100644 --- a/Sources/Adwaita/Model/Data Flow/State.swift +++ b/Sources/Adwaita/Model/Data Flow/State.swift @@ -185,6 +185,7 @@ public struct State: StateProtocol { } +/// An extension extension State where Value: Codable { /// Initialize a property representing a state in the view. diff --git a/Sources/Adwaita/Model/Extensions/Array.swift b/Sources/Adwaita/Model/Extensions/Array.swift index e819577..5bf7aae 100644 --- a/Sources/Adwaita/Model/Extensions/Array.swift +++ b/Sources/Adwaita/Model/Extensions/Array.swift @@ -7,6 +7,7 @@ import Foundation +// An extension extension Array: View where Element == View { /// The array's view body is the array itself. @@ -46,6 +47,7 @@ extension Array: View where Element == View { } +// An extension extension Array where Element == WindowSceneGroup { /// Get the content of an array of window scene groups. @@ -56,6 +58,7 @@ extension Array where Element == WindowSceneGroup { } +// An extension extension Array where Element == String { /// Get the C version of the array. @@ -78,6 +81,7 @@ extension Array where Element == String { } +// An extension extension Array { /// Accesses the element at the specified position safely. @@ -105,6 +109,7 @@ extension Array { } +// An extension extension Array where Element: Identifiable { /// Accesses the element with a certain id safely. diff --git a/Sources/Adwaita/Model/Extensions/Bool.swift b/Sources/Adwaita/Model/Extensions/Bool.swift index ea35d6f..f33d303 100644 --- a/Sources/Adwaita/Model/Extensions/Bool.swift +++ b/Sources/Adwaita/Model/Extensions/Bool.swift @@ -5,6 +5,7 @@ // Created by david-swift on 15.01.24. // +// An extension extension Bool { /// Get the gboolean for C. diff --git a/Sources/Adwaita/Model/Extensions/Int.swift b/Sources/Adwaita/Model/Extensions/Int.swift index 580036b..4c8f25f 100644 --- a/Sources/Adwaita/Model/Extensions/Int.swift +++ b/Sources/Adwaita/Model/Extensions/Int.swift @@ -5,6 +5,7 @@ // Created by david-swift on 15.01.24. // +// An extension extension Int: Identifiable { /// Get the integer itself as the identifier. diff --git a/Sources/Adwaita/Model/Extensions/OpaquePointer.swift b/Sources/Adwaita/Model/Extensions/OpaquePointer.swift index b594bfd..0eb4c32 100644 --- a/Sources/Adwaita/Model/Extensions/OpaquePointer.swift +++ b/Sources/Adwaita/Model/Extensions/OpaquePointer.swift @@ -5,6 +5,7 @@ // Created by david-swift on 15.01.23. // +// An extension extension OpaquePointer { /// Convert an opaque pointer into an unsafe mutable pointer with a defined type. diff --git a/Sources/Adwaita/Model/Extensions/Set.swift b/Sources/Adwaita/Model/Extensions/Set.swift index 7df5c9c..ef3fccf 100644 --- a/Sources/Adwaita/Model/Extensions/Set.swift +++ b/Sources/Adwaita/Model/Extensions/Set.swift @@ -5,6 +5,7 @@ // Created by david-swift on 21.01.24. // +// An extension extension Set where Element == Edge { /// Horizontal and vertical edges. diff --git a/Sources/Adwaita/Model/Extensions/String.swift b/Sources/Adwaita/Model/Extensions/String.swift index 1f76efe..4d2bda5 100644 --- a/Sources/Adwaita/Model/Extensions/String.swift +++ b/Sources/Adwaita/Model/Extensions/String.swift @@ -5,6 +5,7 @@ // Created by david-swift on 09.09.23. // +// An extension extension String { /// A label for main content in a view storage. diff --git a/Sources/Adwaita/Model/Extensions/UInt.swift b/Sources/Adwaita/Model/Extensions/UInt.swift index e417c3d..a41f938 100644 --- a/Sources/Adwaita/Model/Extensions/UInt.swift +++ b/Sources/Adwaita/Model/Extensions/UInt.swift @@ -5,6 +5,7 @@ // Created by david-swift on 19.01.24. // +// An extension extension UInt { /// Convert an unsigned integer into the C form. diff --git a/Sources/Adwaita/Model/Extensions/UnsafeMutablePointer.swift b/Sources/Adwaita/Model/Extensions/UnsafeMutablePointer.swift index 52475a2..9bb2b92 100644 --- a/Sources/Adwaita/Model/Extensions/UnsafeMutablePointer.swift +++ b/Sources/Adwaita/Model/Extensions/UnsafeMutablePointer.swift @@ -5,6 +5,7 @@ // Created by david-swift on 15.01.24. // +// An extension extension UnsafeMutablePointer { /// Convert into an opaque pointer. diff --git a/Sources/Adwaita/Model/Extensions/UnsafeMutableRawPointer.swift b/Sources/Adwaita/Model/Extensions/UnsafeMutableRawPointer.swift index 2ab2fdb..889570b 100644 --- a/Sources/Adwaita/Model/Extensions/UnsafeMutableRawPointer.swift +++ b/Sources/Adwaita/Model/Extensions/UnsafeMutableRawPointer.swift @@ -5,6 +5,7 @@ // Created by david-swift on 15.01.24. // +// An extension extension UnsafeMutableRawPointer { /// Convert into an unsafe mutable pointer of a certain type. diff --git a/Sources/Adwaita/Model/User Interface/App/App.swift b/Sources/Adwaita/Model/User Interface/App/App.swift index 208d503..f1cec75 100644 --- a/Sources/Adwaita/Model/User Interface/App/App.swift +++ b/Sources/Adwaita/Model/User Interface/App/App.swift @@ -38,6 +38,7 @@ public protocol App { } +/// An extension extension App { /// The application's entry point. diff --git a/Sources/Adwaita/Model/User Interface/Menu/MenuItem.swift b/Sources/Adwaita/Model/User Interface/Menu/MenuItem.swift index 06e44ee..4f3986e 100644 --- a/Sources/Adwaita/Model/User Interface/Menu/MenuItem.swift +++ b/Sources/Adwaita/Model/User Interface/Menu/MenuItem.swift @@ -19,6 +19,7 @@ public protocol MenuItem: MenuItemGroup { } +/// An extension extension MenuItem { /// The menu item's content is itself. diff --git a/Sources/Adwaita/Model/User Interface/Menu/MenuItemGroup.swift b/Sources/Adwaita/Model/User Interface/Menu/MenuItemGroup.swift index 8125e1d..7ab8945 100644 --- a/Sources/Adwaita/Model/User Interface/Menu/MenuItemGroup.swift +++ b/Sources/Adwaita/Model/User Interface/Menu/MenuItemGroup.swift @@ -15,6 +15,7 @@ public protocol MenuItemGroup { } +/// An extension extension MenuItemGroup { /// Add the menu items described by the group to a menu. diff --git a/Sources/Adwaita/Model/User Interface/View/View.swift b/Sources/Adwaita/Model/User Interface/View/View.swift index cf117f4..18d9226 100644 --- a/Sources/Adwaita/Model/User Interface/View/View.swift +++ b/Sources/Adwaita/Model/User Interface/View/View.swift @@ -25,6 +25,7 @@ public protocol View { } +/// An extension extension View { /// Wrap the view into a widget. @@ -54,6 +55,8 @@ extension View { } } + /// Get the state. + /// - Returns: The state. func getState() -> [String: StateProtocol] { var state: [String: StateProtocol] = [:] for property in Mirror(reflecting: self).children { @@ -71,6 +74,9 @@ extension View { widget(modifiers: modifiers).container(modifiers: modifiers) } + /// Get the modified view. + /// - Parameter modifiers: The modifiers. + /// - Returns: The modified view. func getModified(modifiers: [(View) -> View]) -> View { var modified: View = self for modifier in modifiers { diff --git a/Sources/Adwaita/Model/User Interface/View/Widget.swift b/Sources/Adwaita/Model/User Interface/View/Widget.swift index a631658..4b6c873 100644 --- a/Sources/Adwaita/Model/User Interface/View/Widget.swift +++ b/Sources/Adwaita/Model/User Interface/View/Widget.swift @@ -20,6 +20,7 @@ public protocol Widget: View { } +/// An extension extension Widget { /// A widget's view is empty. diff --git a/Sources/Adwaita/Model/User Interface/Window/WindowScene.swift b/Sources/Adwaita/Model/User Interface/Window/WindowScene.swift index aa329a1..9d888fe 100644 --- a/Sources/Adwaita/Model/User Interface/Window/WindowScene.swift +++ b/Sources/Adwaita/Model/User Interface/Window/WindowScene.swift @@ -29,6 +29,7 @@ public protocol WindowScene: WindowSceneGroup { } +/// An extension extension WindowScene { /// The window scene's body is itself. diff --git a/Sources/Adwaita/Model/User Interface/Window/WindowSceneGroup.swift b/Sources/Adwaita/Model/User Interface/Window/WindowSceneGroup.swift index 209af7d..a7a71ff 100644 --- a/Sources/Adwaita/Model/User Interface/Window/WindowSceneGroup.swift +++ b/Sources/Adwaita/Model/User Interface/Window/WindowSceneGroup.swift @@ -13,6 +13,7 @@ public protocol WindowSceneGroup { } +/// An extension extension WindowSceneGroup { /// Get the windows described by the group. diff --git a/Sources/Adwaita/View/Menu+.swift b/Sources/Adwaita/View/Menu+.swift index 1b06e64..142aff2 100644 --- a/Sources/Adwaita/View/Menu+.swift +++ b/Sources/Adwaita/View/Menu+.swift @@ -7,6 +7,7 @@ import CAdw +// An extension extension Menu { // swiftlint:disable function_default_parameter_at_end diff --git a/Sources/CAdw/shim.h b/Sources/CAdw/shim.h index 33f2be2..4a08ff1 100644 --- a/Sources/CAdw/shim.h +++ b/Sources/CAdw/shim.h @@ -27,7 +27,8 @@ static void gtui_filedialog_open_finish (uint64_t dialog, uint64_t result, uint64_t data) { GFile *file = gtk_file_dialog_open_finish (dialog, result, NULL); - const char *path = g_file_get_path (file); + const char *path = g_file_peek_path (file); + g_object_unref (file); filedialog_on_open_cb (dialog, path, data); }