Skip to content

Commit fb75bdf

Browse files
tisorlawanStephan Dilly
authored and
Stephan Dilly
committed
introduce EventState enum (#666)
1 parent 2ab4523 commit fb75bdf

29 files changed

+270
-207
lines changed

src/app.rs

+3-1
Original file line numberDiff line numberDiff line change
@@ -245,7 +245,9 @@ impl App {
245245

246246
let mut flags = NeedsUpdate::empty();
247247

248-
if event_pump(ev, self.components_mut().as_mut_slice())? {
248+
if event_pump(ev, self.components_mut().as_mut_slice())?
249+
.is_consumed()
250+
{
249251
flags.insert(NeedsUpdate::COMMANDS);
250252
} else if let Event::Key(k) = ev {
251253
let new_flags = if k == self.key_config.tab_toggle {

src/components/blame_file.rs

+6-6
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
use super::{
22
utils, visibility_blocking, CommandBlocking, CommandInfo,
3-
Component, DrawableComponent,
3+
Component, DrawableComponent, EventState,
44
};
55
use crate::{
66
components::{utils::string_width_align, ScrollType},
@@ -182,7 +182,7 @@ impl Component for BlameFileComponent {
182182
fn event(
183183
&mut self,
184184
event: crossterm::event::Event,
185-
) -> Result<bool> {
185+
) -> Result<EventState> {
186186
if self.is_visible() {
187187
if let Event::Key(key) = event {
188188
if key == self.key_config.exit_popup {
@@ -207,23 +207,23 @@ impl Component for BlameFileComponent {
207207
self.hide();
208208

209209
return self.selected_commit().map_or(
210-
Ok(false),
210+
Ok(EventState::NotConsumed),
211211
|id| {
212212
self.queue.borrow_mut().push_back(
213213
InternalEvent::InspectCommit(
214214
id, None,
215215
),
216216
);
217-
Ok(true)
217+
Ok(EventState::Consumed)
218218
},
219219
);
220220
}
221221

222-
return Ok(true);
222+
return Ok(EventState::Consumed);
223223
}
224224
}
225225

226-
Ok(false)
226+
Ok(EventState::NotConsumed)
227227
}
228228

229229
fn is_visible(&self) -> bool {

src/components/branchlist.rs

+16-8
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
use super::{
22
visibility_blocking, CommandBlocking, CommandInfo, Component,
3-
DrawableComponent,
3+
DrawableComponent, EventState,
44
};
55
use crate::{
66
components::ScrollType,
@@ -161,19 +161,27 @@ impl Component for BranchListComponent {
161161
visibility_blocking(self)
162162
}
163163

164-
fn event(&mut self, ev: Event) -> Result<bool> {
164+
fn event(&mut self, ev: Event) -> Result<EventState> {
165165
if self.visible {
166166
if let Event::Key(e) = ev {
167167
if e == self.key_config.exit_popup {
168168
self.hide()
169169
} else if e == self.key_config.move_down {
170-
return self.move_selection(ScrollType::Up);
170+
return self
171+
.move_selection(ScrollType::Up)
172+
.map(Into::into);
171173
} else if e == self.key_config.move_up {
172-
return self.move_selection(ScrollType::Down);
174+
return self
175+
.move_selection(ScrollType::Down)
176+
.map(Into::into);
173177
} else if e == self.key_config.page_down {
174-
return self.move_selection(ScrollType::PageDown);
178+
return self
179+
.move_selection(ScrollType::PageDown)
180+
.map(Into::into);
175181
} else if e == self.key_config.page_up {
176-
return self.move_selection(ScrollType::PageUp);
182+
return self
183+
.move_selection(ScrollType::PageUp)
184+
.map(Into::into);
177185
} else if e == self.key_config.enter {
178186
try_or_popup!(
179187
self,
@@ -220,9 +228,9 @@ impl Component for BranchListComponent {
220228
}
221229
}
222230

223-
Ok(true)
231+
Ok(EventState::Consumed)
224232
} else {
225-
Ok(false)
233+
Ok(EventState::NotConsumed)
226234
}
227235
}
228236

src/components/changes.rs

+11-11
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ use super::{
44
CommandBlocking, DrawableComponent,
55
};
66
use crate::{
7-
components::{CommandInfo, Component},
7+
components::{CommandInfo, Component, EventState},
88
keys::SharedKeyConfig,
99
queue::{Action, InternalEvent, NeedsUpdate, Queue, ResetItem},
1010
strings, try_or_popup,
@@ -236,9 +236,9 @@ impl Component for ChangesComponent {
236236
CommandBlocking::PassingOn
237237
}
238238

239-
fn event(&mut self, ev: Event) -> Result<bool> {
240-
if self.files.event(ev)? {
241-
return Ok(true);
239+
fn event(&mut self, ev: Event) -> Result<EventState> {
240+
if self.files.event(ev)?.is_consumed() {
241+
return Ok(EventState::Consumed);
242242
}
243243

244244
if self.focused() {
@@ -250,7 +250,7 @@ impl Component for ChangesComponent {
250250
self.queue
251251
.borrow_mut()
252252
.push_back(InternalEvent::OpenCommit);
253-
Ok(true)
253+
Ok(EventState::Consumed)
254254
} else if e == self.key_config.enter {
255255
try_or_popup!(
256256
self,
@@ -261,7 +261,7 @@ impl Component for ChangesComponent {
261261
self.queue.borrow_mut().push_back(
262262
InternalEvent::Update(NeedsUpdate::ALL),
263263
);
264-
Ok(true)
264+
Ok(EventState::Consumed)
265265
} else if e == self.key_config.status_stage_all
266266
&& !self.is_empty()
267267
{
@@ -274,23 +274,23 @@ impl Component for ChangesComponent {
274274
} else {
275275
self.stage_remove_all()?;
276276
}
277-
Ok(true)
277+
Ok(EventState::Consumed)
278278
} else if e == self.key_config.status_reset_item
279279
&& self.is_working_dir
280280
{
281-
Ok(self.dispatch_reset_workdir())
281+
Ok(self.dispatch_reset_workdir().into())
282282
} else if e == self.key_config.status_ignore_file
283283
&& self.is_working_dir
284284
&& !self.is_empty()
285285
{
286-
Ok(self.add_to_ignore())
286+
Ok(self.add_to_ignore().into())
287287
} else {
288-
Ok(false)
288+
Ok(EventState::NotConsumed)
289289
};
290290
}
291291
}
292292

293-
Ok(false)
293+
Ok(EventState::NotConsumed)
294294
}
295295

296296
fn focused(&self) -> bool {

src/components/commit.rs

+6-6
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
use super::{
22
textinput::TextInputComponent, visibility_blocking,
33
CommandBlocking, CommandInfo, Component, DrawableComponent,
4-
ExternalEditorComponent,
4+
EventState, ExternalEditorComponent,
55
};
66
use crate::{
77
get_app_config_path,
@@ -85,10 +85,10 @@ impl Component for CommitComponent {
8585
visibility_blocking(self)
8686
}
8787

88-
fn event(&mut self, ev: Event) -> Result<bool> {
88+
fn event(&mut self, ev: Event) -> Result<EventState> {
8989
if self.is_visible() {
90-
if self.input.event(ev)? {
91-
return Ok(true);
90+
if self.input.event(ev)?.is_consumed() {
91+
return Ok(EventState::Consumed);
9292
}
9393

9494
if let Event::Key(e) = ev {
@@ -106,11 +106,11 @@ impl Component for CommitComponent {
106106
} else {
107107
}
108108
// stop key event propagation
109-
return Ok(true);
109+
return Ok(EventState::Consumed);
110110
}
111111
}
112112

113-
Ok(false)
113+
Ok(EventState::NotConsumed)
114114
}
115115

116116
fn is_visible(&self) -> bool {

src/components/commit_details/details.rs

+9-8
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,8 @@
11
use crate::{
22
components::{
33
dialog_paragraph, utils::time_to_string, CommandBlocking,
4-
CommandInfo, Component, DrawableComponent, ScrollType,
4+
CommandInfo, Component, DrawableComponent, EventState,
5+
ScrollType,
56
},
67
keys::SharedKeyConfig,
78
strings::{self, order},
@@ -409,28 +410,28 @@ impl Component for DetailsComponent {
409410
CommandBlocking::PassingOn
410411
}
411412

412-
fn event(&mut self, event: Event) -> Result<bool> {
413+
fn event(&mut self, event: Event) -> Result<EventState> {
413414
if self.focused {
414415
if let Event::Key(e) = event {
415416
return Ok(if e == self.key_config.move_up {
416-
self.move_scroll_top(ScrollType::Up)
417+
self.move_scroll_top(ScrollType::Up).into()
417418
} else if e == self.key_config.move_down {
418-
self.move_scroll_top(ScrollType::Down)
419+
self.move_scroll_top(ScrollType::Down).into()
419420
} else if e == self.key_config.home
420421
|| e == self.key_config.shift_up
421422
{
422-
self.move_scroll_top(ScrollType::Home)
423+
self.move_scroll_top(ScrollType::Home).into()
423424
} else if e == self.key_config.end
424425
|| e == self.key_config.shift_down
425426
{
426-
self.move_scroll_top(ScrollType::End)
427+
self.move_scroll_top(ScrollType::End).into()
427428
} else {
428-
false
429+
EventState::NotConsumed
429430
});
430431
}
431432
}
432433

433-
Ok(false)
434+
Ok(EventState::NotConsumed)
434435
}
435436

436437
fn focused(&self) -> bool {

src/components/commit_details/mod.rs

+10-8
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@ mod details;
22

33
use super::{
44
command_pump, event_pump, CommandBlocking, CommandInfo,
5-
Component, DrawableComponent, FileTreeComponent,
5+
Component, DrawableComponent, EventState, FileTreeComponent,
66
};
77
use crate::{
88
accessors, keys::SharedKeyConfig, queue::Queue, strings,
@@ -158,9 +158,11 @@ impl Component for CommitDetailsComponent {
158158
CommandBlocking::PassingOn
159159
}
160160

161-
fn event(&mut self, ev: Event) -> Result<bool> {
162-
if event_pump(ev, self.components_mut().as_mut_slice())? {
163-
return Ok(true);
161+
fn event(&mut self, ev: Event) -> Result<EventState> {
162+
if event_pump(ev, self.components_mut().as_mut_slice())?
163+
.is_consumed()
164+
{
165+
return Ok(EventState::Consumed);
164166
}
165167

166168
if self.focused() {
@@ -170,20 +172,20 @@ impl Component for CommitDetailsComponent {
170172
{
171173
self.details.focus(false);
172174
self.file_tree.focus(true);
173-
Ok(true)
175+
Ok(EventState::Consumed)
174176
} else if e == self.key_config.focus_above
175177
&& self.file_tree.focused()
176178
{
177179
self.file_tree.focus(false);
178180
self.details.focus(true);
179-
Ok(true)
181+
Ok(EventState::Consumed)
180182
} else {
181-
Ok(false)
183+
Ok(EventState::NotConsumed)
182184
};
183185
}
184186
}
185187

186-
Ok(false)
188+
Ok(EventState::NotConsumed)
187189
}
188190

189191
fn is_visible(&self) -> bool {

src/components/commitlist.rs

+4-4
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@ use super::utils::logitems::{ItemBatch, LogEntry};
22
use crate::{
33
components::{
44
utils::string_width_align, CommandBlocking, CommandInfo,
5-
Component, DrawableComponent, ScrollType,
5+
Component, DrawableComponent, EventState, ScrollType,
66
},
77
keys::SharedKeyConfig,
88
strings,
@@ -341,7 +341,7 @@ impl DrawableComponent for CommitList {
341341
}
342342

343343
impl Component for CommitList {
344-
fn event(&mut self, ev: Event) -> Result<bool> {
344+
fn event(&mut self, ev: Event) -> Result<EventState> {
345345
if let Event::Key(k) = ev {
346346
let selection_changed = if k == self.key_config.move_up {
347347
self.move_selection(ScrollType::Up)?
@@ -362,10 +362,10 @@ impl Component for CommitList {
362362
} else {
363363
false
364364
};
365-
return Ok(selection_changed);
365+
return Ok(selection_changed.into());
366366
}
367367

368-
Ok(false)
368+
Ok(EventState::NotConsumed)
369369
}
370370

371371
fn commands(

src/components/create_branch.rs

+6-5
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
use super::{
22
textinput::TextInputComponent, visibility_blocking,
33
CommandBlocking, CommandInfo, Component, DrawableComponent,
4+
EventState,
45
};
56
use crate::{
67
keys::SharedKeyConfig,
@@ -52,21 +53,21 @@ impl Component for CreateBranchComponent {
5253
visibility_blocking(self)
5354
}
5455

55-
fn event(&mut self, ev: Event) -> Result<bool> {
56+
fn event(&mut self, ev: Event) -> Result<EventState> {
5657
if self.is_visible() {
57-
if self.input.event(ev)? {
58-
return Ok(true);
58+
if self.input.event(ev)?.is_consumed() {
59+
return Ok(EventState::Consumed);
5960
}
6061

6162
if let Event::Key(e) = ev {
6263
if e == self.key_config.enter {
6364
self.create_branch();
6465
}
6566

66-
return Ok(true);
67+
return Ok(EventState::Consumed);
6768
}
6869
}
69-
Ok(false)
70+
Ok(EventState::NotConsumed)
7071
}
7172

7273
fn is_visible(&self) -> bool {

0 commit comments

Comments
 (0)