From 714a69f25862ea6d9ec915365866dd75d6ee6e54 Mon Sep 17 00:00:00 2001 From: Zedhugh Chen Date: Mon, 11 Aug 2025 05:00:07 +0800 Subject: [PATCH] =?UTF-8?q?=E6=B7=BB=E5=8A=A0=E5=A3=81=E7=BA=B8=E5=8A=A8?= =?UTF-8?q?=E6=80=81=E5=88=87=E6=8D=A2=E5=8A=9F=E8=83=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/config.c | 3 +++ src/include/config.h | 3 +++ src/main.c | 24 +++++++++++++++++++++++- 3 files changed, 29 insertions(+), 1 deletion(-) diff --git a/src/config.c b/src/config.c index d0b18c2..be3def9 100644 --- a/src/config.c +++ b/src/config.c @@ -1,6 +1,9 @@ #include "config.h" +#include #include /* 壁纸列表,支持通配符和 shell 环境变量拼接,最后以 NULL 结尾 */ const char *wallpager_list[] = {NULL}; +/* 壁纸切换间隔(单位:秒),0 表示不切换 */ +const uint32_t wallpaper_interval = 0; diff --git a/src/include/config.h b/src/include/config.h index 0375e13..02cc801 100644 --- a/src/include/config.h +++ b/src/include/config.h @@ -1,3 +1,6 @@ #pragma once +#include + extern const char *wallpager_list[]; +extern const uint32_t wallpaper_interval; diff --git a/src/main.c b/src/main.c index 9d5ce4f..7c3ebe9 100644 --- a/src/main.c +++ b/src/main.c @@ -1,5 +1,6 @@ #include #include +#include #include #include #include @@ -15,6 +16,7 @@ static void init_monitors(void); static void init_wallpaper(void); +static gboolean update_wallpaper(gpointer user_data); static void set_wallpaper_by_index(uint32_t index); static wallpaper_config_t *parse_wallpaper_config(const char **wallpapers); static void free_wallpaper_config(wallpaper_config_t *wallpaper_config); @@ -82,8 +84,28 @@ void init_monitors(void) { void init_wallpaper(void) { wallpaper_config = parse_wallpaper_config(wallpager_list); if (!wallpaper_config) return; + if (wallpaper_interval) { + g_timeout_add_seconds(wallpaper_interval, update_wallpaper, + wallpaper_config); + } - set_wallpaper_by_index(0); + update_wallpaper(wallpaper_config); +} + +gboolean update_wallpaper(gpointer user_data) { + wallpaper_config_t *wc = user_data; + if (!wc) return false; + + static uint32_t index = 0; + set_wallpaper_by_index(index); + uint32_t monitor_count = 0; + for (monitor_t *m = monitors; m; m = m->next) monitor_count++; + if (monitor_count) { + index += monitor_count; + index %= wc->count; + } + + return true; } void set_wallpaper_by_index(uint32_t index) {