From febd6d0d4313634b59dd3b8b5cb9c2b0a3ed2c83 Mon Sep 17 00:00:00 2001 From: Carsten Haitzler Date: Sat, 17 Nov 2001 02:45:43 +0000 Subject: [PATCH] bacgkroudns of views now watch for the background file to change... if it does.. the background changes - hand for setting your own root bg.. just use ebony.. save it and: cp file.bg.db ~/.e.desktop/default/.e_background.bg.db SVN revision: 5708 --- src/background.c | 1 + src/iconbar.c | 13 +++++--- src/view.c | 84 +++++++++++++++++++++++++++++++++++++++++------- src/view.h | 2 ++ 4 files changed, 84 insertions(+), 16 deletions(-) diff --git a/src/background.c b/src/background.c index afccb2a16..1792338ed 100644 --- a/src/background.c +++ b/src/background.c @@ -112,6 +112,7 @@ e_background_load(char *file) sprintf(buf, "/layers/%i/bg.b", i); e_db_int_get(db, buf, &(bl->bg.b)); sprintf(buf, "/layers/%i/bg.a", i); e_db_int_get(db, buf, &(bl->bg.a)); } + e_db_close(db); D_RETURN_(bg); } diff --git a/src/iconbar.c b/src/iconbar.c index 9325ef6d5..bbaedc5f1 100644 --- a/src/iconbar.c +++ b/src/iconbar.c @@ -134,11 +134,14 @@ e_iconbar_new(E_View *v) ib = e_config_load(buf, "", cf_iconbar); /* flush image cache */ { - int size; - - size = imlib_get_cache_size(); - imlib_set_cache_size(0); - imlib_set_cache_size(size); + if (v->evas) + { + int size; + + size = evas_get_image_cache(v->evas); + evas_set_image_cache(v->evas, 0); + evas_set_image_cache(v->evas, size); + } } /* flush edb cached handled */ e_db_flush(); diff --git a/src/view.c b/src/view.c index 3a5c6078a..932874d56 100644 --- a/src/view.c +++ b/src/view.c @@ -42,6 +42,7 @@ static void e_view_geometry_record_timeout(int val, void *data); static void e_view_scrollbar_v_change_cb(void *_data, E_Scrollbar *sb, double val); static void e_view_scrollbar_h_change_cb(void *_data, E_Scrollbar *sb, double val); static void e_view_write_icon_xy_timeout(int val, void *data); +static void e_view_bg_reload_timeout(int val, void *data); static void e_view_write_icon_xy_timeout(int val, void *data) @@ -864,10 +865,7 @@ e_configure(Ecore_Event * ev) ecore_window_set_background_pixmap(v->win.main, v->pmap); ecore_window_clear(v->win.main); } - if (v->bg) - { - e_background_set_size(v->bg, v->size.w, v->size.h); - } + if (v->bg) e_background_set_size(v->bg, v->size.w, v->size.h); D("evas_set_output_viewpor(%p)\n", v->evas); evas_set_output_viewport(v->evas, 0, 0, v->size.w, v->size.h); evas_set_output_size(v->evas, v->size.w, v->size.h); @@ -1574,8 +1572,10 @@ e_view_file_changed(int id, char *file) if (!file) D_RETURN; if (file[0] == '/') D_RETURN; v = e_view_find_by_monitor_id(id); - e_iconbar_file_change(v, file); if (!v) D_RETURN; + + e_iconbar_file_change(v, file); + e_view_bg_change(v, file); { E_Icon *ic; @@ -2216,12 +2216,15 @@ e_view_handle_fs(EfsdEvent *ev) struct stat st; if (stat(efsd_metadata_get_str(ev), &st) != -1 ) { - D("Attempted to set background for: %s\n", v->dir); - v->bg = e_background_load(efsd_metadata_get_str(ev)); - e_background_realize(v->bg, v->evas); - e_background_set_size(v->bg, v->size.w, v->size.h); - } - } + D("Attempted to set background for: %s\n", v->dir); + v->bg = e_background_load(efsd_metadata_get_str(ev)); + if ((v->bg) && (v->evas)) + { + e_background_realize(v->bg, v->evas); + e_background_set_size(v->bg, v->size.w, v->size.h); + } + } + } } } if (ok) @@ -2269,6 +2272,65 @@ e_view_handle_fs(EfsdEvent *ev) D_RETURN; } +static void +e_view_bg_reload_timeout(int val, void *data) +{ + E_View *v; + E_Background *bg; + char buf[PATH_MAX]; + + D_ENTER; + + v = data; + sprintf(buf, "%s/.e_background.bg.db", v->dir); + if (v->bg) + { + int size; + + e_object_unref(E_OBJECT(v->bg)); + v->bg = NULL; + if (v->evas) + { + size = evas_get_image_cache(v->evas); + evas_set_image_cache(v->evas, 0); + evas_set_image_cache(v->evas, size); + } + e_db_flush(); + } + bg = e_background_load(buf); + if (!bg) + { + sprintf(buf, "%s/default.bg.db", e_config_get("backgrounds")); + bg = e_background_load(buf); + } + if (bg) + { + v->bg = bg; + if (v->evas) + { + e_background_realize(v->bg, v->evas); + e_background_set_scroll(v->bg, v->scroll.x, v->scroll.y); + e_background_set_size(v->bg, v->size.w, v->size.h); + } + } + + D_RETURN; +} + +void +e_view_bg_change(E_View *v, char *file) +{ + char buf[PATH_MAX]; + + D_ENTER; + + if (!(!strcmp(file, ".e_background.bg.db"))) return; + sprintf(buf, "background_reload:%s", v->dir); + ecore_add_event_timer(buf, 0.5, e_view_bg_reload_timeout, 0, v); + + D_RETURN; +} + void e_view_init(void) { diff --git a/src/view.h b/src/view.h index 0235334d2..08390bb6f 100644 --- a/src/view.h +++ b/src/view.h @@ -222,4 +222,6 @@ void e_view_realize(E_View *v); void e_view_update(E_View *v); +void e_view_bg_change(E_View *v, char *file); + #endif