添加动态设置壁纸条件
This commit is contained in:
18
src/main.c
18
src/main.c
@@ -24,6 +24,7 @@ static void cleanup(void);
|
|||||||
|
|
||||||
static monitor_t *monitors = NULL;
|
static monitor_t *monitors = NULL;
|
||||||
static wallpaper_config_t *wallpaper_config = NULL;
|
static wallpaper_config_t *wallpaper_config = NULL;
|
||||||
|
static GMainLoop *loop = NULL;
|
||||||
|
|
||||||
/* 调试函数,开发完成后删除 */
|
/* 调试函数,开发完成后删除 */
|
||||||
static void print_monitor_list_info(monitor_t *monitor_list) {
|
static void print_monitor_list_info(monitor_t *monitor_list) {
|
||||||
@@ -84,12 +85,10 @@ void init_monitors(void) {
|
|||||||
void init_wallpaper(void) {
|
void init_wallpaper(void) {
|
||||||
wallpaper_config = parse_wallpaper_config(wallpager_list);
|
wallpaper_config = parse_wallpaper_config(wallpager_list);
|
||||||
if (!wallpaper_config) return;
|
if (!wallpaper_config) return;
|
||||||
if (wallpaper_interval) {
|
|
||||||
g_timeout_add_seconds(wallpaper_interval, update_wallpaper,
|
|
||||||
wallpaper_config);
|
|
||||||
}
|
|
||||||
|
|
||||||
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) {
|
gboolean update_wallpaper(gpointer user_data) {
|
||||||
@@ -100,6 +99,10 @@ gboolean update_wallpaper(gpointer user_data) {
|
|||||||
set_wallpaper_by_index(index);
|
set_wallpaper_by_index(index);
|
||||||
uint32_t monitor_count = 0;
|
uint32_t monitor_count = 0;
|
||||||
for (monitor_t *m = monitors; m; m = m->next) monitor_count++;
|
for (monitor_t *m = monitors; m; m = m->next) monitor_count++;
|
||||||
|
|
||||||
|
/* 屏幕比壁纸多则不动态切换 */
|
||||||
|
if (!monitor_count || monitor_count >= wc->count) return false;
|
||||||
|
|
||||||
if (monitor_count) {
|
if (monitor_count) {
|
||||||
index += monitor_count;
|
index += monitor_count;
|
||||||
index %= wc->count;
|
index %= wc->count;
|
||||||
@@ -114,10 +117,13 @@ void set_wallpaper_by_index(uint32_t index) {
|
|||||||
rect_size_t *screen_size = get_screen_size();
|
rect_size_t *screen_size = get_screen_size();
|
||||||
uint32_t *wallpaper = generate_wallpaper(
|
uint32_t *wallpaper = generate_wallpaper(
|
||||||
wallpaper_config, monitors, index, screen_size->width, screen_size->height);
|
wallpaper_config, monitors, index, screen_size->width, screen_size->height);
|
||||||
|
|
||||||
|
if (wallpaper) {
|
||||||
set_wallpaper(wallpaper);
|
set_wallpaper(wallpaper);
|
||||||
|
free(wallpaper);
|
||||||
|
}
|
||||||
|
|
||||||
free(screen_size);
|
free(screen_size);
|
||||||
free(wallpaper);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
wallpaper_config_t *parse_wallpaper_config(const char **wallpapers) {
|
wallpaper_config_t *parse_wallpaper_config(const char **wallpapers) {
|
||||||
@@ -194,7 +200,7 @@ int main(int argc, char *argv[]) {
|
|||||||
|
|
||||||
free_window_list(window_list);
|
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);
|
g_main_loop_run(loop);
|
||||||
|
|
||||||
cleanup();
|
cleanup();
|
||||||
|
|||||||
Reference in New Issue
Block a user