1
0
Fork 0
mirror of https://github.com/Zedfrigg/ironbar.git synced 2025-08-16 22:31:03 +02:00

refactor: make icon overrides bar-level and apply to focused module

This commit is contained in:
BowDown097 2025-01-16 21:39:06 -08:00
parent 87c680122b
commit d1b4af4710
7 changed files with 24 additions and 12 deletions

View file

@ -309,6 +309,7 @@ The following table lists each of the bar-level bar config options:
| `exclusive_zone` | `boolean` | `true` unless `start_hidden` is enabled. | Whether the bar should reserve an exclusive zone around it. | | `exclusive_zone` | `boolean` | `true` unless `start_hidden` is enabled. | Whether the bar should reserve an exclusive zone around it. |
| `popup_gap` | `integer` | `5` | The gap between the bar and popup window. | | `popup_gap` | `integer` | `5` | The gap between the bar and popup window. |
| `icon_theme` | `string` | `null` | Name of the GTK icon theme to use. Leave blank to use default. | | `icon_theme` | `string` | `null` | Name of the GTK icon theme to use. Leave blank to use default. |
| `icon_overrides` | `map<string, string>` | `null` | Map of app IDs (or classes) to icon names, overriding the app's default icon. |
| `start_hidden` | `boolean` | `false`, or `true` if `autohide` set | Whether the bar should be hidden when the application starts. Enabled by default when `autohide` is set. | | `start_hidden` | `boolean` | `false`, or `true` if `autohide` set | Whether the bar should be hidden when the application starts. Enabled by default when `autohide` is set. |
| `autohide` | `integer` | `null` | The duration in milliseconds before the bar is hidden after the cursor leaves. Leave unset to disable auto-hide behaviour. | | `autohide` | `integer` | `null` | The duration in milliseconds before the bar is hidden after the cursor leaves. Leave unset to disable auto-hide behaviour. |
| `start` | `Module[]` | `[]` | Array of left or top modules. | | `start` | `Module[]` | `[]` | Array of left or top modules. |
@ -353,4 +354,4 @@ For information on the `Script` type, and embedding scripts in strings, see [her
| `name` | `string` | `null` | Sets the unique widget name, allowing you to style it using `#name`. | | `name` | `string` | `null` | Sets the unique widget name, allowing you to style it using `#name`. |
| `class` | `string` | `null` | Sets one or more CSS classes, allowing you to style it using `.class`. | | `class` | `string` | `null` | Sets one or more CSS classes, allowing you to style it using `.class`. |
For more information on styling, please see the [styling guide](styling-guide). For more information on styling, please see the [styling guide](styling-guide).

View file

@ -16,7 +16,6 @@ Optionally displays a launchable set of favourites.
| | Type | Default | Description | | | Type | Default | Description |
|-----------------------------|---------------------------------------------|----------|--------------------------------------------------------------------------------------------------------------------------| |-----------------------------|---------------------------------------------|----------|--------------------------------------------------------------------------------------------------------------------------|
| `favorites` | `string[]` | `[]` | List of app IDs (or classes) to always show at the start of the launcher. | | `favorites` | `string[]` | `[]` | List of app IDs (or classes) to always show at the start of the launcher. |
| `icon_overrides` | `map<string, string>` | `{}` | Map of app IDs (or classes) to icon names, overriding the app's default icon. |
| `show_names` | `boolean` | `false` | Whether to show app names on the button label. Names will still show on tooltips when set to false. | | `show_names` | `boolean` | `false` | Whether to show app names on the button label. Names will still show on tooltips when set to false. |
| `show_icons` | `boolean` | `true` | Whether to show app icons on the button. | | `show_icons` | `boolean` | `true` | Whether to show app icons on the button. |
| `icon_size` | `integer` | `32` | Size to render icon at (image icons only). | | `icon_size` | `integer` | `32` | Size to render icon at (image icons only). |

View file

@ -268,6 +268,7 @@ impl Bar {
output_name: &self.monitor_name, output_name: &self.monitor_name,
location: $location, location: $location,
icon_theme: &icon_theme, icon_theme: &icon_theme,
icon_overrides: &config.icon_overrides,
} }
}; };
} }

View file

@ -290,6 +290,12 @@ pub struct BarConfig {
/// **Default**: `null` /// **Default**: `null`
pub icon_theme: Option<String>, pub icon_theme: Option<String>,
/// Map of app IDs (or classes) to icon names,
/// overriding the app's default icon.
///
/// **Default**; `null`
pub icon_overrides: Option<HashMap<String, String>>,
/// An array of modules to append to the start of the bar. /// An array of modules to append to the start of the bar.
/// Depending on the orientation, this is either the top of the left edge. /// Depending on the orientation, this is either the top of the left edge.
/// ///
@ -338,6 +344,7 @@ impl Default for BarConfig {
start_hidden: None, start_hidden: None,
autohide: None, autohide: None,
icon_theme: None, icon_theme: None,
icon_overrides: None,
start: Some(vec![ModuleConfig::Label( start: Some(vec![ModuleConfig::Label(
LabelModule::new(" Using default config".to_string()).into(), LabelModule::new(" Using default config".to_string()).into(),
)]), )]),

View file

@ -133,6 +133,7 @@ impl Module<gtk::Box> for FocusedModule {
info: &ModuleInfo, info: &ModuleInfo,
) -> Result<ModuleParts<gtk::Box>> { ) -> Result<ModuleParts<gtk::Box>> {
let icon_theme = info.icon_theme; let icon_theme = info.icon_theme;
let icon_overrides = info.icon_overrides;
let container = gtk::Box::new(info.bar_position.orientation(), 5); let container = gtk::Box::new(info.bar_position.orientation(), 5);
@ -153,9 +154,17 @@ impl Module<gtk::Box> for FocusedModule {
{ {
let icon_theme = icon_theme.clone(); let icon_theme = icon_theme.clone();
let icon_overrides = icon_overrides.clone();
glib_recv!(context.subscribe(), data => { glib_recv!(context.subscribe(), data => {
if let Some((name, id)) = data { if let Some((name, mut id)) = data {
if self.show_icon { if self.show_icon {
if let Some(ref overrides) = icon_overrides {
if let Some(icon) = overrides.get(&id) {
id = icon.clone();
}
}
match ImageProvider::parse(&id, &icon_theme, true, self.icon_size) match ImageProvider::parse(&id, &icon_theme, true, self.icon_size)
.map(|image| image.load_into_image(&icon)) .map(|image| image.load_into_image(&icon))
{ {

View file

@ -15,7 +15,6 @@ use gtk::prelude::*;
use gtk::{Button, Orientation}; use gtk::{Button, Orientation};
use indexmap::IndexMap; use indexmap::IndexMap;
use serde::Deserialize; use serde::Deserialize;
use std::collections::HashMap;
use std::process::{Command, Stdio}; use std::process::{Command, Stdio};
use std::sync::Arc; use std::sync::Arc;
use tokio::sync::{broadcast, mpsc}; use tokio::sync::{broadcast, mpsc};
@ -30,12 +29,6 @@ pub struct LauncherModule {
/// **Default**: `null` /// **Default**: `null`
favorites: Option<Vec<String>>, favorites: Option<Vec<String>>,
/// Map of app IDs (or classes) to icon names,
/// overriding the app's default icon.
///
/// **Default**; `null`
icon_overrides: Option<HashMap<String, String>>,
/// Whether to show application names on the bar. /// Whether to show application names on the bar.
/// ///
/// **Default**: `false` /// **Default**: `false`
@ -156,7 +149,7 @@ impl Module<gtk::Box> for LauncherModule {
favorites favorites
.iter() .iter()
.map(|app_id| { .map(|app_id| {
let icon_override = self let icon_override = _info
.icon_overrides .icon_overrides
.as_ref() .as_ref()
.and_then(|overrides| overrides.get(app_id)) .and_then(|overrides| overrides.get(app_id))
@ -173,7 +166,7 @@ impl Module<gtk::Box> for LauncherModule {
let items = arc_mut!(items); let items = arc_mut!(items);
let items2 = Arc::clone(&items); let items2 = Arc::clone(&items);
let icon_overrides = arc_mut!(self.icon_overrides.clone()); let icon_overrides = arc_mut!(_info.icon_overrides.clone());
let icon_overrides2 = Arc::clone(&icon_overrides); let icon_overrides2 = Arc::clone(&icon_overrides);
let tx = context.tx.clone(); let tx = context.tx.clone();

View file

@ -1,3 +1,4 @@
use std::collections::HashMap;
use std::fmt::Debug; use std::fmt::Debug;
use std::rc::Rc; use std::rc::Rc;
use std::sync::Arc; use std::sync::Arc;
@ -71,6 +72,7 @@ pub struct ModuleInfo<'a> {
pub monitor: &'a Monitor, pub monitor: &'a Monitor,
pub output_name: &'a str, pub output_name: &'a str,
pub icon_theme: &'a IconTheme, pub icon_theme: &'a IconTheme,
pub icon_overrides: &'a Option<HashMap<String, String>>,
} }
#[derive(Debug, Clone)] #[derive(Debug, Clone)]