添加动态设置壁纸条件

This commit is contained in:
2025-08-11 06:25:53 +08:00
parent b2041333c1
commit 366e4a8f91

View File

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