mirror of
https://github.com/imgurbot12/rmenu.git
synced 2025-01-28 22:05:03 +01:00
Merge pull request #14 from LordGrimmauld/desktop_spec
fix: xdg desktop spec compliance
This commit is contained in:
commit
dea0609ffc
2 changed files with 17 additions and 3 deletions
|
@ -2,11 +2,11 @@
|
||||||
"nodes": {
|
"nodes": {
|
||||||
"nixpkgs": {
|
"nixpkgs": {
|
||||||
"locked": {
|
"locked": {
|
||||||
"lastModified": 1711655175,
|
"lastModified": 1714245158,
|
||||||
"narHash": "sha256-1xiaYhC3ul4y+i3eicYxeERk8ZkrNjLkrFSb/UW36Zw=",
|
"narHash": "sha256-9P2M0+tf1TE7Z5PwDVwhheuD2mFf6/phPr0Jvl7cxcc=",
|
||||||
"owner": "NixOS",
|
"owner": "NixOS",
|
||||||
"repo": "nixpkgs",
|
"repo": "nixpkgs",
|
||||||
"rev": "64c81edb4b97a51c5bbc54c191763ac71a6517ee",
|
"rev": "2b1f64b358f2cab62617f26b3870fd0ee375d848",
|
||||||
"type": "github"
|
"type": "github"
|
||||||
},
|
},
|
||||||
"original": {
|
"original": {
|
||||||
|
|
|
@ -11,6 +11,7 @@ mod icons;
|
||||||
static XDG_HOME_ENV: &'static str = "XDG_DATA_HOME";
|
static XDG_HOME_ENV: &'static str = "XDG_DATA_HOME";
|
||||||
static XDG_DATA_ENV: &'static str = "XDG_DATA_DIRS";
|
static XDG_DATA_ENV: &'static str = "XDG_DATA_DIRS";
|
||||||
static XDG_CONFIG_ENV: &'static str = "XDG_CONFIG_HOME";
|
static XDG_CONFIG_ENV: &'static str = "XDG_CONFIG_HOME";
|
||||||
|
static XDG_CURRENT_DESKTOP_ENV: &'static str = "XDG_CURRENT_DESKTOP";
|
||||||
|
|
||||||
static XDG_HOME_DEFAULT: &'static str = "~/.local/share";
|
static XDG_HOME_DEFAULT: &'static str = "~/.local/share";
|
||||||
static XDG_DATA_DEFAULT: &'static str = "/usr/share:/usr/local/share";
|
static XDG_DATA_DEFAULT: &'static str = "/usr/share:/usr/local/share";
|
||||||
|
@ -49,6 +50,19 @@ fn fix_exec(exec: &str) -> String {
|
||||||
fn parse_desktop(path: &PathBuf, locale: Option<&str>) -> Option<Entry> {
|
fn parse_desktop(path: &PathBuf, locale: Option<&str>) -> Option<Entry> {
|
||||||
let bytes = read_to_string(path).ok()?;
|
let bytes = read_to_string(path).ok()?;
|
||||||
let entry = DesktopEntry::decode(&path, &bytes).ok()?;
|
let entry = DesktopEntry::decode(&path, &bytes).ok()?;
|
||||||
|
|
||||||
|
// no-display entries should not be shown
|
||||||
|
if entry.no_display() {
|
||||||
|
return None;
|
||||||
|
}
|
||||||
|
|
||||||
|
// if an entry only is shown on a specific desktop, check whether desktop is set and matches,
|
||||||
|
// otherwise return None
|
||||||
|
let de = std::env::var(XDG_CURRENT_DESKTOP_ENV);
|
||||||
|
if entry.only_show_in().is_some_and(|e| !(de.is_ok() && de.unwrap() == e.to_string())){
|
||||||
|
return None;
|
||||||
|
}
|
||||||
|
|
||||||
let name = entry.name(locale)?.to_string();
|
let name = entry.name(locale)?.to_string();
|
||||||
let icon = entry.icon().map(|i| i.to_string());
|
let icon = entry.icon().map(|i| i.to_string());
|
||||||
let comment = entry.comment(locale).map(|s| s.to_string());
|
let comment = entry.comment(locale).map(|s| s.to_string());
|
||||||
|
|
Loading…
Reference in a new issue