Skip to content

Commit

Permalink
fix(gtk): Only show battery message when a battery is detected
Browse files Browse the repository at this point in the history
Closes #23
  • Loading branch information
mmstick committed Aug 13, 2019
1 parent 2f400dd commit 3ff90e9
Show file tree
Hide file tree
Showing 6 changed files with 50 additions and 15 deletions.
12 changes: 12 additions & 0 deletions Cargo.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

1 change: 1 addition & 0 deletions gtk/Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,7 @@ slotmap = "0.3"
html2runes = "1.0"
firmware-manager = { path = "../" }
gdk = "0.11.0"
upower_dbus = "0.1.0"

[target.'cfg(all(not(feature = "fwupd"), feature = "system76"))'.dependencies]
firmware-manager = { path = "../", features = [ "system76" ] }
Expand Down
16 changes: 13 additions & 3 deletions gtk/src/dialogs/fwupd.rs
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,12 @@ pub(crate) struct FwupdDialogData {
pub shared: DialogData,
}

pub(crate) fn fwupd_dialog(data: &FwupdDialogData, upgradeable: bool, upgrade_button: bool) {
pub(crate) fn fwupd_dialog(
data: &FwupdDialogData,
upgradeable: bool,
has_battery: bool,
upgrade_button: bool,
) {
let &FwupdDialogData { entity, device, releases, shared } = &data;
let &DialogData { sender, stack, progress, info } = &shared;

Expand All @@ -22,8 +27,13 @@ pub(crate) fn fwupd_dialog(data: &FwupdDialogData, upgradeable: bool, upgrade_bu
.rev()
.map(|release| (release.version.as_ref(), release.description.as_ref()));

let dialog =
FirmwareUpdateDialog::new(latest, log_entries, upgradeable, device.needs_reboot());
let dialog = FirmwareUpdateDialog::new(
latest,
log_entries,
upgradeable,
device.needs_reboot(),
has_battery,
);

let response = dialog.run();
dialog.destroy();
Expand Down
4 changes: 2 additions & 2 deletions gtk/src/dialogs/system76.rs
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@ pub(crate) struct System76DialogData {
}

#[cfg(feature = "system76")]
pub(crate) fn s76_system_dialog(data: &System76DialogData, upgradeable: bool) {
pub(crate) fn s76_system_dialog(data: &System76DialogData, upgradeable: bool, has_battery: bool) {
let &System76DialogData { entity, digest, changelog, shared } = &data;
let &DialogData { sender, stack, progress, info } = &shared;
let &FirmwareInfo { latest, .. } = &info;
Expand All @@ -20,7 +20,7 @@ pub(crate) fn s76_system_dialog(data: &System76DialogData, upgradeable: bool) {
(version.bios.as_ref(), version.description.as_ref().map_or("", |desc| desc.as_ref()))
});

let dialog = FirmwareUpdateDialog::new(latest, log_entries, upgradeable, true);
let dialog = FirmwareUpdateDialog::new(latest, log_entries, upgradeable, true, has_battery);

if gtk::ResponseType::Accept == dialog.run() {
// Exchange the button for a progress bar.
Expand Down
19 changes: 11 additions & 8 deletions gtk/src/dialogs/update.rs
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@ impl FirmwareUpdateDialog {
changelog: I,
upgradeable: bool,
needs_reboot: bool,
has_battery: bool,
) -> Self {
let changelog_entries = crate::changelog::generate_widget(changelog, false);

Expand Down Expand Up @@ -54,7 +55,7 @@ impl FirmwareUpdateDialog {
};

cascade! {
dialog.get_content_area();
content: dialog.get_content_area();
..set_orientation(gtk::Orientation::Horizontal);
..set_border_width(12);
..set_spacing(12);
Expand Down Expand Up @@ -82,13 +83,15 @@ impl FirmwareUpdateDialog {
.build();
..add(&changelog_entries);
});
..add(
&gtk::LabelBuilder::new()
.label("If you're on a laptop, <b>plug into power</b> before you begin.")
.use_markup(true)
.xalign(0.0)
.build()
);
| if has_battery {
content.add(
&gtk::LabelBuilder::new()
.label("If you're on a laptop, <b>plug into power</b> before you begin.")
.use_markup(true)
.xalign(0.0)
.build()
);
};
});
};

Expand Down
13 changes: 11 additions & 2 deletions gtk/src/state.rs
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,8 @@ pub(crate) struct State {
pub(crate) components: Components,
/// All devices will be created as an entity here
pub(crate) entities: Entities,
/// If this system has a battery.
pub(crate) has_battery: bool,
/// Sends events to the progress signal
pub(crate) progress_sender: Sender<ActivateEvent>,
/// A sender to send firmware requests to the background thread
Expand Down Expand Up @@ -68,6 +70,9 @@ impl State {
Self {
entities: Entities::default(),
components: Components::default(),
has_battery: upower_dbus::UPower::new(-1)
.map(|upower| upower.on_battery().is_ok())
.unwrap_or(false),
progress_sender,
sender,
#[cfg(feature = "system76")]
Expand Down Expand Up @@ -124,6 +129,7 @@ impl State {
pub fn fwupd(&mut self, signal: FwupdSignal) {
let FwupdSignal { info, device, upgradeable, releases } = signal;
let entity = self.entities.create();
let has_battery = self.has_battery;

let widget = if device.needs_reboot() {
self.entities.associate_system(entity);
Expand All @@ -149,7 +155,9 @@ impl State {
if upgradeable.get() {
let data = Rc::clone(&data);
let upgradeable = Rc::clone(&upgradeable);
widget.connect_upgrade_clicked(move || fwupd_dialog(&data, upgradeable.get(), true));
widget.connect_upgrade_clicked(move || {
fwupd_dialog(&data, upgradeable.get(), has_battery, true)
});
} else {
widget.stack.set_visible(false);
}
Expand Down Expand Up @@ -186,6 +194,7 @@ impl State {
let entity = self.entities.create();
self.entities.associate_system(entity);
let upgradeable = info.current != info.latest;
let has_battery = self.has_battery;

let data = Rc::new(System76DialogData {
entity,
Expand All @@ -205,7 +214,7 @@ impl State {
let data = Rc::clone(&data);
let upgradeable = Rc::clone(&upgradeable);
widget.connect_upgrade_clicked(move || {
s76_system_dialog(&data, upgradeable.get());
s76_system_dialog(&data, upgradeable.get(), has_battery);
});
} else {
widget.stack.set_visible(false);
Expand Down

0 comments on commit 3ff90e9

Please sign in to comment.