summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorManos Pitsidianakis <el13635@mail.ntua.gr>2020-11-24 02:02:03 +0200
committerManos Pitsidianakis <el13635@mail.ntua.gr>2020-11-24 02:23:07 +0200
commitf69f623818f21bbba97be70dad9dcf309296c5ef (patch)
tree44361188a8f51b83786b18436e80b85edb6b7b14 /src
parent2ef2add67f435977804672a1c4301d08cb714fd4 (diff)
Fix some invalid area calculations
Diffstat (limited to 'src')
-rw-r--r--src/components/mail/compose.rs43
-rw-r--r--src/components/utilities/widgets.rs21
2 files changed, 39 insertions, 25 deletions
diff --git a/src/components/mail/compose.rs b/src/components/mail/compose.rs
index 46b1e4e1..f3b88eae 100644
--- a/src/components/mail/compose.rs
+++ b/src/components/mail/compose.rs
@@ -716,8 +716,14 @@ impl Component for Composer {
);
let body_area = (
- pos_inc(upper_left, (mid, header_height + 1)),
- pos_dec(bottom_right, (mid, 5 + attachments_no)),
+ (
+ get_x(upper_left!(header_area)),
+ get_y(bottom_right!(header_area)) + 1,
+ ),
+ (
+ get_x(bottom_right!(header_area)),
+ get_y(upper_left!(attachment_area)) - 1,
+ ),
);
let (x, y) = write_string_to_grid(
@@ -1274,7 +1280,7 @@ impl Component for Composer {
context
.replies
.push_back(UIEvent::ChangeMode(UIMode::Normal));
- self.dirty = true;
+ self.set_dirty(true);
}
UIEvent::EmbedInput((ref k, ref b)) => {
use std::io::Write;
@@ -1318,10 +1324,11 @@ impl Component for Composer {
self.has_changes = true;
}
}
- self.initialized = false;
}
self.embed = None;
+ self.initialized = false;
self.mode = ViewMode::Edit;
+ self.set_dirty(true);
context
.replies
.push_back(UIEvent::ChangeMode(UIMode::Normal));
@@ -1341,7 +1348,7 @@ impl Component for Composer {
context
.replies
.push_back(UIEvent::ChangeMode(UIMode::Normal));
- self.dirty = true;
+ self.set_dirty(true);
return true;
}
Ok(WaitStatus::Stopped(_, _)) => {
@@ -1357,7 +1364,7 @@ impl Component for Composer {
context
.replies
.push_back(UIEvent::ChangeMode(UIMode::Normal));
- self.dirty = true;
+ self.set_dirty(true);
return true;
}
Ok(WaitStatus::Continued(_)) | Ok(WaitStatus::StillAlive) => {
@@ -1375,6 +1382,7 @@ impl Component for Composer {
melib::error::ErrorKind::External,
)),
));
+ self.initialized = false;
self.embed = None;
self.mode = ViewMode::Edit;
context
@@ -1390,6 +1398,7 @@ impl Component for Composer {
)),
));
drop(embed_guard);
+ self.initialized = false;
self.embed = None;
self.mode = ViewMode::Edit;
context
@@ -1553,7 +1562,7 @@ impl Component for Composer {
.unwrap(),
f,
));
- self.dirty = true;
+ self.set_dirty(true);
context
.replies
.push_back(UIEvent::ChangeMode(UIMode::Embed));
@@ -1620,7 +1629,7 @@ impl Component for Composer {
}
}
self.initialized = false;
- self.dirty = true;
+ self.set_dirty(true);
return true;
}
UIEvent::Action(ref a) => match a {
@@ -1661,13 +1670,13 @@ impl Component for Composer {
melib::error::ErrorKind::None,
)),
));
- self.dirty = true;
+ self.set_dirty(true);
return true;
}
};
self.draft.attachments_mut().push(attachment);
self.has_changes = true;
- self.dirty = true;
+ self.set_dirty(true);
return true;
}
Err(err) => {
@@ -1689,13 +1698,13 @@ impl Component for Composer {
err.to_string(),
Some(NotificationType::Error(melib::error::ErrorKind::None)),
));
- self.dirty = true;
+ self.set_dirty(true);
return true;
}
};
self.draft.attachments_mut().push(attachment);
self.has_changes = true;
- self.dirty = true;
+ self.set_dirty(true);
return true;
}
Action::Compose(ComposeAction::AddAttachmentFilePicker(ref command)) => {
@@ -1766,7 +1775,7 @@ impl Component for Composer {
}
}
context.replies.push_back(UIEvent::Fork(ForkType::Finished));
- self.dirty = true;
+ self.set_dirty(true);
return true;
}
Action::Compose(ComposeAction::RemoveAttachment(idx)) => {
@@ -1776,7 +1785,7 @@ impl Component for Composer {
"attachment with given index does not exist".to_string(),
),
));
- self.dirty = true;
+ self.set_dirty(true);
return true;
}
self.draft.attachments_mut().remove(*idx);
@@ -1785,7 +1794,7 @@ impl Component for Composer {
.push_back(UIEvent::StatusEvent(StatusEvent::DisplayMessage(
"attachment removed".to_string(),
)));
- self.dirty = true;
+ self.set_dirty(true);
return true;
}
Action::Compose(ComposeAction::SaveDraft) => {
@@ -1802,14 +1811,14 @@ impl Component for Composer {
Action::Compose(ComposeAction::ToggleSign) => {
let is_true = self.gpg_state.sign_mail.is_true();
self.gpg_state.sign_mail = ToggleFlag::from(!is_true);
- self.dirty = true;
+ self.set_dirty(true);
return true;
}
#[cfg(feature = "gpgme")]
Action::Compose(ComposeAction::ToggleEncrypt) => {
let is_true = self.gpg_state.encrypt_mail.is_true();
self.gpg_state.encrypt_mail = ToggleFlag::from(!is_true);
- self.dirty = true;
+ self.set_dirty(true);
return true;
}
_ => {}
diff --git a/src/components/utilities/widgets.rs b/src/components/utilities/widgets.rs
index 3d8fc436..91ef7457 100644
--- a/src/components/utilities/widgets.rs
+++ b/src/components/utilities/widgets.rs
@@ -530,14 +530,13 @@ impl<T: 'static + std::fmt::Debug + Copy + Default + Send + Sync> Component for
context,
);
}
- clear_area(
- grid,
- (
- set_y(upper_left, length + 4 + get_y(upper_left)),
- bottom_right,
- ),
- theme_default,
- );
+ if length + 4 < height!(area) {
+ clear_area(
+ grid,
+ (pos_inc(upper_left, (0, length + 4)), bottom_right),
+ theme_default,
+ );
+ }
self.set_dirty(false);
context.dirty_areas.push_back(area);
}
@@ -1073,6 +1072,9 @@ impl ScrollBar {
upper_left = pos_inc(upper_left, (0, scrollbar_offset));
for _ in 0..scrollbar_height {
+ if get_y(upper_left) >= get_y(bottom_right) {
+ break;
+ }
grid[upper_left].set_bg(crate::conf::value(context, "widgets.options.highlighted").bg);
upper_left = pos_inc(upper_left, (0, 1));
}
@@ -1118,6 +1120,9 @@ impl ScrollBar {
upper_left = pos_inc(upper_left, (scrollbar_offset, 0));
for _ in 0..scrollbar_width {
+ if get_x(upper_left) >= get_x(bottom_right) {
+ break;
+ }
grid[upper_left]
.set_ch(if ascii_drawing { 'H' } else { '█' })
.set_fg(crate::conf::value(context, "widgets.options.highlighted").bg);