fun with actions
This commit is contained in:
parent
3940392f2d
commit
2e0a0ef40f
3 changed files with 63 additions and 26 deletions
|
@ -130,8 +130,7 @@ template $AudreyUiPlaybar: Adw.Bin {
|
||||||
Button {
|
Button {
|
||||||
icon-name: "media-seek-backward";
|
icon-name: "media-seek-backward";
|
||||||
valign: center;
|
valign: center;
|
||||||
sensitive: bind template.idle-active inverted;
|
action-name: "app.seek-backward";
|
||||||
clicked => $seek_backward() swapped;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
Button {
|
Button {
|
||||||
|
@ -144,8 +143,7 @@ template $AudreyUiPlaybar: Adw.Bin {
|
||||||
Button {
|
Button {
|
||||||
icon-name: "media-seek-forward";
|
icon-name: "media-seek-forward";
|
||||||
valign: center;
|
valign: center;
|
||||||
sensitive: bind template.idle-active inverted;
|
action-name: "app.seek-forward";
|
||||||
clicked => $seek_forward() swapped;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
Button {
|
Button {
|
||||||
|
|
|
@ -111,28 +111,6 @@ mod imp {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
#[template_callback]
|
|
||||||
fn seek_backward(&self) {
|
|
||||||
// 10 seconds
|
|
||||||
let mut new_position = self.window().time_pos() - 10.0;
|
|
||||||
if new_position < 0.0 {
|
|
||||||
new_position = 0.0;
|
|
||||||
}
|
|
||||||
self.window().seek(new_position);
|
|
||||||
}
|
|
||||||
|
|
||||||
#[template_callback]
|
|
||||||
fn seek_forward(&self) {
|
|
||||||
// 10 seconds
|
|
||||||
let new_position = self.window().time_pos() + 10.0;
|
|
||||||
if new_position > self.window().duration() {
|
|
||||||
// just seek to the next track
|
|
||||||
self.on_skip_forward_clicked();
|
|
||||||
} else {
|
|
||||||
self.window().seek(new_position);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
#[template_callback]
|
#[template_callback]
|
||||||
fn on_play_pause_clicked(&self, _button: >k::Button) {
|
fn on_play_pause_clicked(&self, _button: >k::Button) {
|
||||||
if self.window().idle_active() {
|
if self.window().idle_active() {
|
||||||
|
|
|
@ -170,6 +170,66 @@ mod imp {
|
||||||
fn constructed(&self) {
|
fn constructed(&self) {
|
||||||
self.parent_constructed();
|
self.parent_constructed();
|
||||||
|
|
||||||
|
use gio::ActionEntry;
|
||||||
|
|
||||||
|
let action_seek_backward = ActionEntry::builder("seek-backward")
|
||||||
|
.activate(glib::clone!(
|
||||||
|
#[weak(rename_to = window)]
|
||||||
|
self.obj(),
|
||||||
|
move |_, _, _| {
|
||||||
|
let new_position = window.time_pos() - 10.0;
|
||||||
|
if new_position < 0.0 {
|
||||||
|
window.seek(0.0);
|
||||||
|
} else {
|
||||||
|
window.seek(new_position);
|
||||||
|
}
|
||||||
|
},
|
||||||
|
))
|
||||||
|
.build();
|
||||||
|
|
||||||
|
let action_seek_forward = ActionEntry::builder("seek-forward")
|
||||||
|
.activate(glib::clone!(
|
||||||
|
#[weak(rename_to = window)]
|
||||||
|
self.obj(),
|
||||||
|
move |_, _, _| {
|
||||||
|
let new_position = window.time_pos() + 10.0;
|
||||||
|
if new_position > window.duration() {
|
||||||
|
// just seek to the next track
|
||||||
|
if window.playlist_pos() + 1 < window.playlist_count() {
|
||||||
|
window.playlist_next();
|
||||||
|
} else {
|
||||||
|
window.playlist_play_index(None);
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
window.seek(new_position);
|
||||||
|
}
|
||||||
|
},
|
||||||
|
))
|
||||||
|
.build();
|
||||||
|
|
||||||
|
let actions = gio::SimpleActionGroup::new();
|
||||||
|
actions.add_action_entries([action_seek_backward, action_seek_forward]);
|
||||||
|
self.obj().insert_action_group("app", Some(&actions));
|
||||||
|
|
||||||
|
let playlist_not_empty = gtk::ClosureExpression::with_callback(
|
||||||
|
[gtk::ObjectExpression::new(self.obj().as_ref())
|
||||||
|
.chain_property::<super::Window>("playlist-count")],
|
||||||
|
|values| {
|
||||||
|
let playlist_count: i64 = values[1].get().unwrap();
|
||||||
|
playlist_count > 0
|
||||||
|
},
|
||||||
|
);
|
||||||
|
playlist_not_empty.bind(
|
||||||
|
&actions.lookup_action("seek-backward").unwrap(),
|
||||||
|
"enabled",
|
||||||
|
None::<&glib::Object>,
|
||||||
|
);
|
||||||
|
playlist_not_empty.bind(
|
||||||
|
&actions.lookup_action("seek-forward").unwrap(),
|
||||||
|
"enabled",
|
||||||
|
None::<&glib::Object>,
|
||||||
|
);
|
||||||
|
|
||||||
let settings = gio::Settings::new(crate::APP_ID);
|
let settings = gio::Settings::new(crate::APP_ID);
|
||||||
settings.bind("mute", self.obj().as_ref(), "mute").build();
|
settings.bind("mute", self.obj().as_ref(), "mute").build();
|
||||||
settings
|
settings
|
||||||
|
@ -650,6 +710,7 @@ mod imp {
|
||||||
}
|
}
|
||||||
self.state.set(State::Seeking);
|
self.state.set(State::Seeking);
|
||||||
|
|
||||||
|
self.obj().notify("time-pos");
|
||||||
self.buffering_start();
|
self.buffering_start();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue