Fix options view disappearing when clicking create button in share view controller
authorClaudio Cambra <claudio.cambra@nextcloud.com>
Tue, 19 Mar 2024 12:08:14 +0000 (20:08 +0800)
committerClaudio Cambra <claudio.cambra@nextcloud.com>
Wed, 17 Apr 2024 08:39:02 +0000 (16:39 +0800)
Signed-off-by: Claudio Cambra <claudio.cambra@nextcloud.com>
shell_integration/MacOSX/NextcloudIntegration/FileProviderUIExt/ShareOptionsView.swift
shell_integration/MacOSX/NextcloudIntegration/FileProviderUIExt/ShareTableViewDataSource.swift
shell_integration/MacOSX/NextcloudIntegration/FileProviderUIExt/ShareViewController.swift
shell_integration/MacOSX/NextcloudIntegration/FileProviderUIExt/ShareViewDataSourceUIDelegate.swift

index 4b64d2e08fdeda6ab2f8a5796bd702a566208957..d8231de288f0bbbbd256fbcf259c523449215ceb 100644 (file)
@@ -274,7 +274,7 @@ class ShareOptionsView: NSView {
                     dataSource.uiDelegate?.showError("Error creating: \(error.errorDescription)")
                     setAllFields(enabled: true)
                 } else {
-                    dataSource.uiDelegate?.hideOptions()
+                    dataSource.uiDelegate?.hideOptions(self)
                     await dataSource.reload()
                 }
                 return
@@ -306,7 +306,7 @@ class ShareOptionsView: NSView {
                 dataSource?.uiDelegate?.showError("Error updating share: \(error.errorDescription)")
                 setAllFields(enabled: true)
             } else {
-                dataSource?.uiDelegate?.hideOptions()
+                dataSource?.uiDelegate?.hideOptions(self)
                 await dataSource?.reload()
             }
         }
@@ -315,7 +315,7 @@ class ShareOptionsView: NSView {
     @IBAction func delete(_ sender: Any) {
         Task { @MainActor in
             guard !createMode else {
-                dataSource?.uiDelegate?.hideOptions()
+                dataSource?.uiDelegate?.hideOptions(self)
                 reset()
                 return
             }
index a4184e18028fe45e3882ab1f96de6b4c5d8f5207..312e59cf1fc9bf3f4956382213fbd8804ce47d58 100644 (file)
@@ -238,7 +238,7 @@ class ShareTableViewDataSource: NSObject, NSTableViewDataSource, NSTableViewDele
 
     @objc func tableViewSelectionDidChange(_ notification: Notification) {
         guard let selectedRow = sharesTableView?.selectedRow, selectedRow >= 0 else {
-            Task { @MainActor in uiDelegate?.hideOptions() }
+            Task { @MainActor in uiDelegate?.hideOptions(self) }
             return
         }
         let share = shares[selectedRow]
index dd57050f5e88b0f03351212395cd512871f818e8..d104e3360899d2c21bd50d0f6772d21be8cab9b1 100644 (file)
@@ -57,7 +57,7 @@ class ShareViewController: NSViewController, ShareViewDataSourceUIDelegate {
 
     override func viewDidLoad() {
         dismissError(self)
-        hideOptions()
+        hideOptions(self)
     }
 
     @IBAction func closeAction(_ sender: Any) {
@@ -111,10 +111,12 @@ class ShareViewController: NSViewController, ShareViewDataSourceUIDelegate {
     }
 
     @IBAction func createShare(_ sender: Any) {
-        tableView.deselectAll(self)
         optionsView.createMode = true
-        splitView.addArrangedSubview(optionsView)
-        optionsView.isHidden = false
+        tableView.deselectAll(self)
+        if !splitView.arrangedSubviews.contains(optionsView) {
+            splitView.addArrangedSubview(optionsView)
+            optionsView.isHidden = false
+        }
     }
 
     func fetchStarted() {
@@ -127,16 +129,24 @@ class ShareViewController: NSViewController, ShareViewDataSourceUIDelegate {
         loadingIndicator.stopAnimation(self)
     }
 
-    func hideOptions() {
+    func hideOptions(_ sender: Any) {
+        if sender as? ShareTableViewDataSource == shareDataSource, optionsView.createMode {
+            // Do not hide options if the table view has had everything deselected when we set the
+            // options view to be in create mode
+            return
+        }
         splitView.removeArrangedSubview(optionsView)
         optionsView.isHidden = true
+
     }
 
     func showOptions(share: NKShare) {
         guard let kit = shareDataSource.kit else { return }
         optionsView.controller = ShareController(share: share, kit: kit)
-        splitView.addArrangedSubview(optionsView)
-        optionsView.isHidden = false
+        if !splitView.arrangedSubviews.contains(optionsView) {
+            splitView.addArrangedSubview(optionsView)
+            optionsView.isHidden = false
+        }
     }
 
     func showError(_ errorString: String) {
index 615de16b4f7a3b806278736cce19a46ad32186e8..09bd3f7e4945b3354409c585af2883ca638b0a40 100644 (file)
@@ -11,7 +11,7 @@ import NextcloudKit
 protocol ShareViewDataSourceUIDelegate {
     func fetchStarted()
     func fetchFinished()
-    func hideOptions()
+    func hideOptions(_ sender: Any)
     func showOptions(share: NKShare)
     func showError(_ errorString: String)
 }