From 366e4a8f915f9ce4251751b5b5b6017c2692471e Mon Sep 17 00:00:00 2001 From: Zedhugh Chen Date: Mon, 11 Aug 2025 06:25:53 +0800 Subject: [PATCH] =?UTF-8?q?=E6=B7=BB=E5=8A=A0=E5=8A=A8=E6=80=81=E8=AE=BE?= =?UTF-8?q?=E7=BD=AE=E5=A3=81=E7=BA=B8=E6=9D=A1=E4=BB=B6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main.c | 20 +++++++++++++------- 1 file changed, 13 insertions(+), 7 deletions(-) diff --git a/src/main.c b/src/main.c index 7c3ebe9..adf41e3 100644 --- a/src/main.c +++ b/src/main.c @@ -24,6 +24,7 @@ static void cleanup(void); static monitor_t *monitors = NULL; static wallpaper_config_t *wallpaper_config = NULL; +static GMainLoop *loop = NULL; /* 调试函数,开发完成后删除 */ static void print_monitor_list_info(monitor_t *monitor_list) { @@ -84,12 +85,10 @@ 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); - } update_wallpaper(wallpaper_config); + if (!wallpaper_interval) return; + g_timeout_add_seconds(wallpaper_interval, update_wallpaper, wallpaper_config); } gboolean update_wallpaper(gpointer user_data) { @@ -100,6 +99,10 @@ gboolean update_wallpaper(gpointer user_data) { set_wallpaper_by_index(index); uint32_t monitor_count = 0; for (monitor_t *m = monitors; m; m = m->next) monitor_count++; + + /* 屏幕比壁纸多则不动态切换 */ + if (!monitor_count || monitor_count >= wc->count) return false; + if (monitor_count) { index += monitor_count; index %= wc->count; @@ -114,10 +117,13 @@ void set_wallpaper_by_index(uint32_t index) { rect_size_t *screen_size = get_screen_size(); uint32_t *wallpaper = generate_wallpaper( wallpaper_config, monitors, index, screen_size->width, screen_size->height); - set_wallpaper(wallpaper); + + if (wallpaper) { + set_wallpaper(wallpaper); + free(wallpaper); + } free(screen_size); - free(wallpaper); } wallpaper_config_t *parse_wallpaper_config(const char **wallpapers) { @@ -194,7 +200,7 @@ int main(int argc, char *argv[]) { free_window_list(window_list); - GMainLoop *loop = g_main_loop_new(NULL, FALSE); + loop = g_main_loop_new(NULL, FALSE); g_main_loop_run(loop); cleanup();