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();