diff --git a/Cargo.lock b/Cargo.lock index ae8bf35..d981825 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -3200,7 +3200,7 @@ dependencies = [ "dbusmenu-gtk3-sys", "gtk", "serde", - "thiserror 2.0.0", + "thiserror 2.0.3", "tokio", "tracing", "zbus", @@ -3230,11 +3230,11 @@ dependencies = [ [[package]] name = "thiserror" -version = "2.0.0" +version = "2.0.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "15291287e9bff1bc6f9ff3409ed9af665bec7a5fc8ac079ea96be07bca0e2668" +checksum = "c006c85c7651b3cf2ada4584faa36773bd07bac24acfb39f3c431b36d7e667aa" dependencies = [ - "thiserror-impl 2.0.0", + "thiserror-impl 2.0.3", ] [[package]] @@ -3250,9 +3250,9 @@ dependencies = [ [[package]] name = "thiserror-impl" -version = "2.0.0" +version = "2.0.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "22efd00f33f93fa62848a7cab956c3d38c8d43095efda1decfc2b3a5dc0b8972" +checksum = "f077553d607adc1caf65430528a576c757a71ed73944b66ebb58ef2bbd243568" dependencies = [ "proc-macro2", "quote 1.0.35", @@ -3681,9 +3681,9 @@ checksum = "711b9620af191e0cdc7468a8d14e709c3dcdb115b36f838e601583af800a370a" [[package]] name = "uuid" -version = "1.8.0" +version = "1.11.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a183cf7feeba97b4dd1c0d46788634f6221d87fa961b305bed08c851829efcc0" +checksum = "f8c5f0a0af699448548ad1a2fbf920fb4bee257eae39953ba95cb84891a0446a" dependencies = [ "getrandom", ] diff --git a/src/config/truncate.rs b/src/config/truncate.rs index 14222ad..69fde92 100644 --- a/src/config/truncate.rs +++ b/src/config/truncate.rs @@ -1,5 +1,4 @@ use gtk::pango::EllipsizeMode as GtkEllipsizeMode; -use gtk::prelude::*; use serde::Deserialize; #[derive(Debug, Deserialize, Clone, Copy)] @@ -102,35 +101,27 @@ pub enum TruncateMode { } impl TruncateMode { - const fn mode(&self) -> EllipsizeMode { - match self { - Self::Length { mode, .. } | Self::Auto(mode) => *mode, - } - } - - const fn length(&self) -> Option { + pub const fn length(&self) -> Option { match self { Self::Auto(_) | Self::Off => None, Self::Length { length, .. } => *length, } } - const fn max_length(&self) -> Option { + pub const fn max_length(&self) -> Option { match self { Self::Auto(_) | Self::Off => None, Self::Length { max_length, .. } => *max_length, } } +} - pub fn truncate_label(&self, label: >k::Label) { - label.set_ellipsize(self.mode().into()); - - if let Some(length) = self.length() { - label.set_width_chars(length); - } - - if let Some(length) = self.max_length() { - label.set_max_width_chars(length); - } +impl From for GtkEllipsizeMode { + fn from(value: TruncateMode) -> Self { + let mode = match value { + TruncateMode::Off => EllipsizeMode::None, + TruncateMode::Length { mode, .. } | TruncateMode::Auto(mode) => mode, + }; + mode.into() } } diff --git a/src/gtk_helpers.rs b/src/gtk_helpers.rs index 628ac3a..1b5052b 100644 --- a/src/gtk_helpers.rs +++ b/src/gtk_helpers.rs @@ -1,6 +1,8 @@ +use crate::config::TruncateMode; use glib::{markup_escape_text, IsA}; +use gtk::pango::EllipsizeMode; use gtk::prelude::*; -use gtk::{Orientation, Widget}; +use gtk::{Label, Orientation, Widget}; /// Represents a widget's size /// and location relative to the bar's start edge. @@ -83,9 +85,11 @@ pub trait IronbarLabelExt { /// the text is escaped to avoid issues with special characters (ie `&`). /// Otherwise, the text is used verbatim, and it is up to the user to escape. fn set_label_escaped(&self, label: &str); + + fn truncate(&self, mode: TruncateMode); } -impl IronbarLabelExt for gtk::Label { +impl IronbarLabelExt for Label { fn set_label_escaped(&self, label: &str) { if !label.contains(">::into(mode)); + + if let Some(length) = mode.length() { + self.set_width_chars(length); + } + + if let Some(length) = mode.max_length() { + self.set_max_width_chars(length); + } + } } diff --git a/src/modules/clipboard.rs b/src/modules/clipboard.rs index aea0c32..9dbd68c 100644 --- a/src/modules/clipboard.rs +++ b/src/modules/clipboard.rs @@ -1,6 +1,7 @@ use crate::clients::clipboard::{self, ClipboardEvent}; use crate::clients::wayland::{ClipboardItem, ClipboardValue}; use crate::config::{CommonConfig, TruncateMode}; +use crate::gtk_helpers::IronbarLabelExt; use crate::image::new_icon_button; use crate::modules::{ Module, ModuleInfo, ModuleParts, ModulePopup, ModuleUpdateEvent, PopupButton, WidgetContext, @@ -195,7 +196,7 @@ impl Module