cosmic-applets/cosmic-app-list/src/config.rs

55 lines
1.5 KiB
Rust
Raw Normal View History

2024-05-06 15:39:04 +02:00
// Copyright 2023 System76 <info@system76.com>
// SPDX-License-Identifier: GPL-3.0-only
use cosmic::cosmic_config::cosmic_config_derive::CosmicConfigEntry;
2023-11-16 17:36:55 +00:00
use cosmic::cosmic_config::{self, Config, CosmicConfigEntry};
2022-12-15 14:35:31 -05:00
use serde::{Deserialize, Serialize};
2022-07-19 23:39:19 -04:00
use std::fmt::Debug;
pub const APP_ID: &str = "com.system76.CosmicAppList";
#[derive(Debug, Clone, Deserialize, Serialize, Default, PartialEq, Eq)]
2022-07-19 11:33:19 -04:00
pub enum TopLevelFilter {
#[default]
2022-07-19 11:33:19 -04:00
ActiveWorkspace,
ConfiguredOutput,
}
2024-05-17 12:39:12 -04:00
#[derive(Debug, Clone, Deserialize, Serialize, PartialEq, Eq, CosmicConfigEntry)]
#[version = 1]
2022-07-19 11:33:19 -04:00
pub struct AppListConfig {
pub filter_top_levels: Option<TopLevelFilter>,
pub favorites: Vec<String>,
2024-05-17 12:39:12 -04:00
pub enable_drag_source: bool,
}
impl Default for AppListConfig {
fn default() -> Self {
Self {
filter_top_levels: None,
favorites: Vec::new(),
enable_drag_source: true,
}
}
2022-07-19 11:33:19 -04:00
}
impl AppListConfig {
pub fn add_favorite(&mut self, id: String, config: &Config) {
if !self.favorites.contains(&id) {
self.favorites.push(id);
2023-11-16 17:27:47 +00:00
let _ = self.write_entry(config);
}
}
pub fn remove_favorite(&mut self, id: String, config: &Config) {
if let Some(pos) = self.favorites.iter().position(|e| e == &id) {
self.favorites.remove(pos);
2023-11-16 17:27:47 +00:00
let _ = self.write_entry(config);
}
}
pub fn update_favorites(&mut self, favorites: Vec<String>, config: &Config) {
self.favorites = favorites;
2023-11-16 17:27:47 +00:00
let _ = self.write_entry(config);
}
2022-07-19 23:39:19 -04:00
}