Merge branch 'master' into bulgarian
This commit is contained in:
commit
055befb30a
272 changed files with 4273 additions and 4972 deletions
|
|
@ -1,6 +1,6 @@
|
|||
[package]
|
||||
name = "cosmic-applet-workspaces"
|
||||
version = "0.1.1"
|
||||
version = "1.0.2"
|
||||
authors = ["Ashley Wulber <ashley@system76.com>"]
|
||||
edition = "2024"
|
||||
license = "GPL-3.0-only"
|
||||
|
|
|
|||
|
|
@ -11,6 +11,7 @@ Name[nl]=Genummerde werkbladen
|
|||
Name[sk]=Číslované pracovné plochy
|
||||
Name[sv]=Numrerade arbetsytor
|
||||
Name[es]=Espacios de trabajo numerados
|
||||
Name[it]=Spazi di lavoro numerati
|
||||
Type=Application
|
||||
Exec=cosmic-applet-workspaces
|
||||
Terminal=false
|
||||
|
|
|
|||
|
|
@ -1 +1 @@
|
|||
cosmic-applet-workspaces = COSMIC Spásanna Oibre
|
||||
cosmic-applet-workspaces = COSMIC spásanna oibre
|
||||
|
|
|
|||
|
|
@ -0,0 +1 @@
|
|||
cosmic-applet-workspaces = COSMIC жұмыс орындары
|
||||
|
|
@ -1 +1 @@
|
|||
cosmic-applet-workspaces = 코스믹 작업공간
|
||||
cosmic-applet-workspaces = COSMIC 작업 공간
|
||||
|
|
|
|||
|
|
@ -0,0 +1 @@
|
|||
cosmic-applet-workspaces = COSMIC Workspaces
|
||||
|
|
@ -21,6 +21,7 @@ use cosmic::{
|
|||
widget::{button, column, row},
|
||||
},
|
||||
iced_core::{Background, Border},
|
||||
scroll::DiscreteScrollState,
|
||||
surface,
|
||||
widget::{Id, autosize, container, horizontal_space, vertical_space},
|
||||
};
|
||||
|
|
@ -31,14 +32,12 @@ use crate::{
|
|||
wayland_subscription::{WorkspacesUpdate, workspaces},
|
||||
};
|
||||
|
||||
use std::{
|
||||
process::Command as ShellCommand,
|
||||
sync::LazyLock,
|
||||
time::{Duration, Instant},
|
||||
};
|
||||
use std::{process::Command as ShellCommand, sync::LazyLock, time::Duration};
|
||||
|
||||
static AUTOSIZE_MAIN_ID: LazyLock<Id> = LazyLock::new(|| Id::new("autosize-main"));
|
||||
|
||||
const SCROLL_RATE_LIMIT: Duration = Duration::from_millis(200);
|
||||
|
||||
pub fn run() -> cosmic::iced::Result {
|
||||
cosmic::applet::run::<IcedWorkspacesApplet>(())
|
||||
}
|
||||
|
|
@ -54,9 +53,7 @@ struct IcedWorkspacesApplet {
|
|||
workspaces: Vec<Workspace>,
|
||||
workspace_tx: Option<SyncSender<WorkspaceEvent>>,
|
||||
layout: Layout,
|
||||
scroll: f64,
|
||||
next_scroll: Option<Instant>,
|
||||
last_scroll: Instant,
|
||||
scroll: DiscreteScrollState,
|
||||
}
|
||||
|
||||
impl IcedWorkspacesApplet {
|
||||
|
|
@ -74,7 +71,7 @@ impl IcedWorkspacesApplet {
|
|||
return index;
|
||||
};
|
||||
let button_total_size = self.core.applet.suggested_size(true).0
|
||||
+ self.core.applet.suggested_padding(true) * 2
|
||||
+ self.core.applet.suggested_padding(true).1 * 2
|
||||
+ 4;
|
||||
let btn_count = max_major_axis_len / button_total_size as u32;
|
||||
if btn_count >= self.workspaces.len() as u32 {
|
||||
|
|
@ -111,9 +108,7 @@ impl cosmic::Application for IcedWorkspacesApplet {
|
|||
core,
|
||||
workspaces: Vec::new(),
|
||||
workspace_tx: Option::default(),
|
||||
scroll: 0.0,
|
||||
next_scroll: None,
|
||||
last_scroll: Instant::now(),
|
||||
scroll: DiscreteScrollState::default().rate_limit(Some(SCROLL_RATE_LIMIT)),
|
||||
},
|
||||
Task::none(),
|
||||
)
|
||||
|
|
@ -148,53 +143,21 @@ impl cosmic::Application for IcedWorkspacesApplet {
|
|||
}
|
||||
}
|
||||
Message::WheelScrolled(delta) => {
|
||||
let (delta, debounce) = match delta {
|
||||
ScrollDelta::Lines { x, y } => ((x + y) as f64, false),
|
||||
ScrollDelta::Pixels { x, y } => ((x + y) as f64, true),
|
||||
};
|
||||
let discrete_delta = self.scroll.update(delta);
|
||||
if discrete_delta.y != 0 {
|
||||
if let Some(w_i) = self
|
||||
.workspaces
|
||||
.iter()
|
||||
.position(|w| w.state.contains(ext_workspace_handle_v1::State::Active))
|
||||
{
|
||||
let d_i = (w_i as isize - discrete_delta.y)
|
||||
.rem_euclid(self.workspaces.len() as isize)
|
||||
as usize;
|
||||
|
||||
let dur = if debounce {
|
||||
Duration::from_millis(350)
|
||||
} else {
|
||||
Duration::from_millis(200)
|
||||
};
|
||||
if self.last_scroll.elapsed() > Duration::from_millis(100)
|
||||
|| self.scroll * delta < 0.0
|
||||
{
|
||||
self.next_scroll = None;
|
||||
self.scroll = 0.0;
|
||||
}
|
||||
self.last_scroll = Instant::now();
|
||||
|
||||
self.scroll += delta;
|
||||
if let Some(next) = self.next_scroll {
|
||||
if next > Instant::now() {
|
||||
return cosmic::iced::Task::none();
|
||||
}
|
||||
self.next_scroll = None;
|
||||
}
|
||||
|
||||
if self.scroll.abs() < 1.0 {
|
||||
return cosmic::iced::Task::none();
|
||||
}
|
||||
self.next_scroll = Some(Instant::now() + dur);
|
||||
if let Some(w_i) = self
|
||||
.workspaces
|
||||
.iter()
|
||||
.position(|w| w.state.contains(ext_workspace_handle_v1::State::Active))
|
||||
{
|
||||
let max_w = self.workspaces.len().wrapping_sub(1);
|
||||
let d_i = if self.scroll > 0.0 {
|
||||
if w_i == 0 { max_w } else { w_i.wrapping_sub(1) }
|
||||
} else if w_i == max_w {
|
||||
0
|
||||
} else {
|
||||
w_i.wrapping_add(1)
|
||||
};
|
||||
self.scroll = 0.0;
|
||||
if let Some(w) = self.workspaces.get(d_i) {
|
||||
if let Some(tx) = self.workspace_tx.as_mut() {
|
||||
let _ = tx.try_send(WorkspaceEvent::Activate(w.handle.clone()));
|
||||
let _ = tx.try_send(WorkspaceEvent::Activate(
|
||||
self.workspaces[d_i].handle.clone(),
|
||||
));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -219,8 +182,8 @@ impl cosmic::Application for IcedWorkspacesApplet {
|
|||
self.core.applet.anchor,
|
||||
PanelAnchor::Top | PanelAnchor::Bottom
|
||||
);
|
||||
let suggested_total =
|
||||
self.core.applet.suggested_size(true).0 + self.core.applet.suggested_padding(true) * 2;
|
||||
let suggested_total = self.core.applet.suggested_size(true).0
|
||||
+ self.core.applet.suggested_padding(true).1 * 2;
|
||||
let suggested_window_size = self.core.applet.suggested_window_size();
|
||||
let popup_index = self.popup_index().unwrap_or(self.workspaces.len());
|
||||
|
||||
|
|
@ -245,9 +208,9 @@ impl cosmic::Application for IcedWorkspacesApplet {
|
|||
.align_y(Alignment::Center),
|
||||
)
|
||||
.padding(if horizontal {
|
||||
[0, self.core.applet.suggested_padding(true)]
|
||||
[0, self.core.applet.suggested_padding(true).1]
|
||||
} else {
|
||||
[self.core.applet.suggested_padding(true), 0]
|
||||
[self.core.applet.suggested_padding(true).1, 0]
|
||||
})
|
||||
.on_press(
|
||||
if w.state.contains(ext_workspace_handle_v1::State::Active) {
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue