1
0
Fork 0
mirror of https://github.com/Zedfrigg/ironbar.git synced 2025-07-01 10:41:03 +02:00

Merge pull request #81 from JakeStanger/fix/dynamic-string-ordering

Fix dynamic string ordering
This commit is contained in:
Jake Stanger 2023-03-01 23:20:41 +00:00 committed by GitHub
commit 711644e190
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23

View file

@ -1,7 +1,6 @@
use crate::script::{OutputStream, Script}; use crate::script::{OutputStream, Script};
use crate::{lock, send}; use crate::{lock, send};
use gtk::prelude::*; use gtk::prelude::*;
use indexmap::IndexMap;
use std::sync::{Arc, Mutex}; use std::sync::{Arc, Mutex};
use tokio::spawn; use tokio::spawn;
@ -60,31 +59,30 @@ impl DynamicString {
chars.drain(..skip); chars.drain(..skip);
} }
let label_parts = Arc::new(Mutex::new(IndexMap::new())); let label_parts = Arc::new(Mutex::new(Vec::new()));
let (tx, rx) = glib::MainContext::channel(glib::PRIORITY_DEFAULT); let (tx, rx) = glib::MainContext::channel(glib::PRIORITY_DEFAULT);
for (i, segment) in segments.into_iter().enumerate() { for (i, segment) in segments.into_iter().enumerate() {
match segment { match segment {
DynamicStringSegment::Static(str) => { DynamicStringSegment::Static(str) => {
lock!(label_parts).insert(i, str); lock!(label_parts).push(str);
} }
DynamicStringSegment::Dynamic(script) => { DynamicStringSegment::Dynamic(script) => {
let tx = tx.clone(); let tx = tx.clone();
let label_parts = label_parts.clone(); let label_parts = label_parts.clone();
// insert blank value to preserve segment order
lock!(label_parts).push(String::new());
spawn(async move { spawn(async move {
script script
.run(|(out, _)| { .run(|(out, _)| {
if let OutputStream::Stdout(out) = out { if let OutputStream::Stdout(out) = out {
let mut label_parts = lock!(label_parts); let mut label_parts = lock!(label_parts);
label_parts.insert(i, out); let _ = std::mem::replace(&mut label_parts[i], out);
let string = label_parts
.iter()
.map(|(_, part)| part.as_str())
.collect::<String>();
let string = label_parts.join("");
send!(tx, string); send!(tx, string);
} }
}) })
@ -96,11 +94,7 @@ impl DynamicString {
// initialize // initialize
{ {
let label_parts = lock!(label_parts) let label_parts = lock!(label_parts).join("");
.iter()
.map(|(_, part)| part.as_str())
.collect::<String>();
send!(tx, label_parts); send!(tx, label_parts);
} }