Skip to content

Commit cb9258e

Browse files
Merge pull request #5781 from gitbutlerapp/disallow-edit-exit-doublepress
Disallow edit exit doublepress
2 parents 1eea205 + df905a4 commit cb9258e

File tree

3 files changed

+32
-8
lines changed

3 files changed

+32
-8
lines changed

apps/desktop/src/lib/components/EditMode.svelte

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -187,6 +187,7 @@
187187
modeServiceAborting = 'loading';
188188
189189
await modeService.abortEditAndReturnToWorkspace();
190+
await modeService.awaitNotEditing();
190191
191192
modeServiceAborting = 'completed';
192193
}
@@ -195,6 +196,7 @@
195196
modeServiceSaving = 'loading';
196197
197198
await modeService.saveEditAndReturnToWorkspace();
199+
await modeService.awaitNotEditing();
198200
199201
modeServiceSaving = 'completed';
200202
}
@@ -219,6 +221,8 @@
219221
}
220222
221223
let isCommitListScrolled = $state(false);
224+
225+
const loading = $derived(modeServiceSaving === 'loading' || modeServiceAborting === 'loading');
222226
</script>
223227

224228
<div class="editmode__container">
@@ -302,9 +306,7 @@
302306
</p>
303307

304308
<div class="editmode__actions">
305-
<Button style="ghost" outline onclick={abort} disabled={modeServiceAborting === 'loading'}>
306-
Cancel
307-
</Button>
309+
<Button style="ghost" outline onclick={abort} disabled={loading} {loading}>Cancel</Button>
308310
{#if conflictedFiles.length > 0}
309311
<Button
310312
style="neutral"
@@ -323,7 +325,8 @@
323325
kind="solid"
324326
icon="tick-small"
325327
onclick={handleSave}
326-
disabled={modeServiceSaving === 'loading'}
328+
disabled={loading}
329+
{loading}
327330
>
328331
Save and exit
329332
</Button>

apps/desktop/src/lib/modes/service.ts

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -73,6 +73,17 @@ export class ModeService {
7373
return [plainToInstance(RemoteFile, entry[0]), entry[1] as ConflictEntryPresence | undefined];
7474
}) as [RemoteFile, ConflictEntryPresence | undefined][];
7575
}
76+
77+
async awaitNotEditing(): Promise<void> {
78+
return await new Promise((resolve) => {
79+
const unsubscribe = this.mode.subscribe((operatingMode) => {
80+
if (operatingMode && operatingMode?.type !== 'Edit') {
81+
resolve();
82+
unsubscribe();
83+
}
84+
});
85+
});
86+
}
7687
}
7788

7889
function subscribeToHead(projectId: string, callback: (headAndMode: HeadAndMode) => void) {

crates/gitbutler-tauri/src/modes.rs

Lines changed: 14 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,8 @@ use tauri::State;
99
use tracing::instrument;
1010

1111
use crate::error::Error;
12+
use crate::virtual_branches::commands::emit_vbranches;
13+
use crate::WindowState;
1214

1315
#[tauri::command(async)]
1416
#[instrument(skip(projects), err(Debug))]
@@ -37,25 +39,33 @@ pub fn enter_edit_mode(
3739
}
3840

3941
#[tauri::command(async)]
40-
#[instrument(skip(projects), err(Debug))]
42+
#[instrument(skip(windows, projects), err(Debug))]
4143
pub fn abort_edit_and_return_to_workspace(
44+
windows: State<'_, WindowState>,
4245
projects: State<'_, Controller>,
4346
project_id: ProjectId,
4447
) -> Result<(), Error> {
4548
let project = projects.get(project_id)?;
4649

47-
gitbutler_edit_mode::commands::abort_and_return_to_workspace(&project).map_err(Into::into)
50+
gitbutler_edit_mode::commands::abort_and_return_to_workspace(&project)?;
51+
52+
emit_vbranches(&windows, project_id);
53+
Ok(())
4854
}
4955

5056
#[tauri::command(async)]
51-
#[instrument(skip(projects), err(Debug))]
57+
#[instrument(skip(windows, projects), err(Debug))]
5258
pub fn save_edit_and_return_to_workspace(
59+
windows: State<'_, WindowState>,
5360
projects: State<'_, Controller>,
5461
project_id: ProjectId,
5562
) -> Result<(), Error> {
5663
let project = projects.get(project_id)?;
5764

58-
gitbutler_edit_mode::commands::save_and_return_to_workspace(&project).map_err(Into::into)
65+
gitbutler_edit_mode::commands::save_and_return_to_workspace(&project)?;
66+
67+
emit_vbranches(&windows, project_id);
68+
Ok(())
5969
}
6070

6171
#[tauri::command(async)]

0 commit comments

Comments
 (0)