From 30ea5428a1a0080d01247458e0b2a8fc63ef582b Mon Sep 17 00:00:00 2001 From: Thierry Lorthiois Date: Wed, 22 Sep 2010 19:33:10 +0000 Subject: [PATCH] panel_items : fixed hide/unhide of baterry and systray --- src/battery/battery.c | 12 ++++-------- src/clock/clock.c | 4 ++-- src/systray/systraybar.c | 13 ++++++------- src/util/area.c | 22 +++++++++++++++++++++- src/util/area.h | 4 ++++ 5 files changed, 37 insertions(+), 18 deletions(-) diff --git a/src/battery/battery.c b/src/battery/battery.c index 46eb539..fd4d59b 100644 --- a/src/battery/battery.c +++ b/src/battery/battery.c @@ -79,14 +79,14 @@ void update_batterys(void* arg) for (i=0 ; i < nb_panel ; i++) { if (battery_state.percentage >= percentage_hide) { if (panel1[i].battery.area.on_screen == 1) { - panel1[i].battery.area.on_screen = 0; - panel1[i].area.resize = 1; + hide(&panel1[i].battery.area); panel_refresh = 1; } } else { if (panel1[i].battery.area.on_screen == 0) { - panel1[i].battery.area.on_screen = 1; + show(&panel1[i].battery.area); + panel_refresh = 1; } } if (panel1[i].battery.area.on_screen == 1) { @@ -237,9 +237,6 @@ void init_battery_panel(void *p) battery->area._draw_foreground = draw_battery; battery->area.size_mode = SIZE_BY_CONTENT; battery->area._resize = resize_battery; - battery->area.resize = 1; - battery->area.redraw = 1; - battery->area.on_screen = 1; } @@ -462,14 +459,13 @@ int resize_battery(void *obj) } else { int new_size = bat_percentage_height + bat_time_height + (2 * (battery->area.paddingxlr + battery->area.bg->border.width)); - if (new_size != battery->area.height) { + if (new_size > battery->area.height || new_size < (battery->area.height-2)) { battery->area.height = new_size; battery->bat1_posy = ((battery->area.height - bat_percentage_height) / 2) - ((bat_time_height_ink + 2) / 2); battery->bat2_posy = battery->bat1_posy + bat_percentage_height + 2 - (bat_percentage_height - bat_percentage_height_ink)/2 - (bat_time_height - bat_time_height_ink)/2; ret = 1; } } - return ret; } diff --git a/src/clock/clock.c b/src/clock/clock.c index 55e5e45..79c4266 100644 --- a/src/clock/clock.c +++ b/src/clock/clock.c @@ -148,12 +148,11 @@ void init_clock_panel(void *p) clock->area._draw_foreground = draw_clock; clock->area.size_mode = SIZE_BY_CONTENT; clock->area._resize = resize_clock; - clock->area.resize = 1; - clock->area.redraw = 1; // check consistency if (time1_format == 0) return; + clock->area.resize = 1; clock->area.on_screen = 1; if (time_tooltip_format) { @@ -205,6 +204,7 @@ int resize_clock (void *obj) clock->area.redraw = 1; + date_height = date_width = 0; strftime(buf_time, sizeof(buf_time), time1_format, clock_gettime_for_tz(time1_timezone)); get_text_size2(time1_font_desc, &time_height_ink, &time_height, &time_width, panel->area.height, panel->area.width, buf_time, strlen(buf_time)); if (time2_format) { diff --git a/src/systray/systraybar.c b/src/systray/systraybar.c index 2d13af4..e5bb7a1 100644 --- a/src/systray/systraybar.c +++ b/src/systray/systraybar.c @@ -107,9 +107,9 @@ void init_systray_panel(void *p) count++; } if (count == 0) - systray.area.on_screen = 0; + hide(&systray.area); else - systray.area.on_screen = 1; + show(&systray.area); refresh_systray = 0; } @@ -426,7 +426,7 @@ gboolean add_icon(Window id) traywin->damage = 0; if (systray.area.on_screen == 0) - systray.area.on_screen = 1; + show(&systray.area); if (systray.sort == 3) systray.list_icons = g_slist_prepend(systray.list_icons, traywin); @@ -488,10 +488,9 @@ void remove_icon(TrayWindow *traywin) if (!((TrayWindow*)l->data)->hide) count++; } - if (count == 0) { - systray.area.on_screen = 0; - systray.area.width = 0; - } + if (count == 0) + hide(&systray.area); + // changed in systray systray.area.resize = 1; panel_refresh = 1; diff --git a/src/util/area.c b/src/util/area.c index 0320bbb..e580433 100644 --- a/src/util/area.c +++ b/src/util/area.c @@ -123,8 +123,8 @@ void size_by_content (Area *a) if (a->_resize(a)) { // 'size' changed => 'resize = 1' on the parent and redraw object ((Area*)a->parent)->resize = 1; - a->redraw = 1; } + a->redraw = 1; } } } @@ -317,6 +317,26 @@ void set_redraw (Area *a) set_redraw(l->data); } +void hide(Area *a) +{ + Area *parent = (Area*)a->parent; + + a->on_screen = 0; + parent->resize = 1; + if (panel_horizontal) + a->width = 0; + else + a->height = 0; +} + +void show(Area *a) +{ + Area *parent = (Area*)a->parent; + + a->on_screen = 1; + parent->resize = 1; + a->resize = 1; +} void draw (Area *a) { diff --git a/src/util/area.h b/src/util/area.h index a5d1434..2f8d822 100644 --- a/src/util/area.h +++ b/src/util/area.h @@ -104,6 +104,10 @@ int resize_by_layout(void *obj); // set 'redraw' on an area and childs void set_redraw (Area *a); +// hide/unhide area +void hide(Area *a); +void show(Area *a); + // draw pixmap void draw (Area *a); void draw_background (Area *a, cairo_t *c); -- 2.45.2