@@ -464,6 +464,20 @@ fn set_single_wallpaper( |
| 464 | 464 | |
| 465 | 465 | /// Advance to the next image in the playlist |
| 466 | 466 | fn cmd_next() -> Result<()> { |
| 467 | + use garbg::ipc::{is_daemon_running, send_command_blocking}; |
| 468 | + |
| 469 | + // If daemon is running, delegate to it (preserves pixmap lifetime) |
| 470 | + if is_daemon_running() { |
| 471 | + let response = send_command_blocking(&Command::Next { monitor: None })?; |
| 472 | + if response.success { |
| 473 | + // Daemon handles logging |
| 474 | + return Ok(()); |
| 475 | + } else if let Some(err) = response.error { |
| 476 | + anyhow::bail!("Daemon error: {}", err); |
| 477 | + } |
| 478 | + } |
| 479 | + |
| 480 | + // Fallback: no daemon running, set directly (pixmap will be freed on exit) |
| 467 | 481 | let mut state = PlaylistState::load()? |
| 468 | 482 | .ok_or_else(|| anyhow::anyhow!("No active playlist. Use 'garbg set <directory>' first."))?; |
| 469 | 483 | |
@@ -485,6 +499,20 @@ fn cmd_next() -> Result<()> { |
| 485 | 499 | |
| 486 | 500 | /// Go back to the previous image in the playlist |
| 487 | 501 | fn cmd_prev() -> Result<()> { |
| 502 | + use garbg::ipc::{is_daemon_running, send_command_blocking}; |
| 503 | + |
| 504 | + // If daemon is running, delegate to it (preserves pixmap lifetime) |
| 505 | + if is_daemon_running() { |
| 506 | + let response = send_command_blocking(&Command::Prev { monitor: None })?; |
| 507 | + if response.success { |
| 508 | + // Daemon handles logging |
| 509 | + return Ok(()); |
| 510 | + } else if let Some(err) = response.error { |
| 511 | + anyhow::bail!("Daemon error: {}", err); |
| 512 | + } |
| 513 | + } |
| 514 | + |
| 515 | + // Fallback: no daemon running, set directly (pixmap will be freed on exit) |
| 488 | 516 | let mut state = PlaylistState::load()? |
| 489 | 517 | .ok_or_else(|| anyhow::anyhow!("No active playlist. Use 'garbg set <directory>' first."))?; |
| 490 | 518 | |