From 386f2fec6d8d7c3ebe1e2192f4632ed0b12f0df1 Mon Sep 17 00:00:00 2001 From: Thierry Lorthiois Date: Sat, 31 Oct 2009 11:58:45 +0000 Subject: [PATCH] fixed bug in taskbar drawing --- src/config.c | 6 ++++++ src/taskbar/taskbar.c | 36 ++++++++++++++++-------------------- src/tint.c | 6 +++--- src/tooltip/tooltip.c | 2 +- 4 files changed, 26 insertions(+), 24 deletions(-) diff --git a/src/config.c b/src/config.c index efbcd5c..5a62704 100644 --- a/src/config.c +++ b/src/config.c @@ -32,6 +32,7 @@ #include #include #include +#include #include #include "common.h" @@ -88,6 +89,11 @@ void init_config() // window manager's menu default value == false wm_menu = 0; max_tick_urgent = 7; + + // flush pango cache if possible + //pango_xft_shutdown_display(server.dsp, server.screen); + //PangoFontMap *font_map = pango_xft_get_font_map(server.dsp, server.screen); + //pango_fc_font_map_shutdown(font_map); } diff --git a/src/taskbar/taskbar.c b/src/taskbar/taskbar.c index 1c02988..e175644 100644 --- a/src/taskbar/taskbar.c +++ b/src/taskbar/taskbar.c @@ -222,12 +222,16 @@ void resize_taskbar(void *obj) Panel *panel = (Panel*)taskbar->area.panel; Task *tsk; GSList *l; - int task_count; + int task_count, border_width; //printf("resize_taskbar : posx et width des taches\n"); - taskbar->area.redraw = 1; + if (taskbar->area.is_active && taskbar->area.use_active) + border_width = taskbar->area.pix_active.border.width; + else + border_width = taskbar->area.pix.border.width; + if (panel_horizontal) { int pixel_width, modulo_width=0; int x, taskbar_width; @@ -236,7 +240,7 @@ void resize_taskbar(void *obj) task_count = g_slist_length(taskbar->area.list); if (!task_count) pixel_width = panel->g_task.maximum_width; else { - taskbar_width = taskbar->area.width - (2 * panel->g_taskbar.pix.border.width) - (2 * panel->g_taskbar.paddingxlr); + taskbar_width = taskbar->area.width - (2 * border_width) - (2 * panel->g_taskbar.paddingxlr); if (task_count>1) taskbar_width -= ((task_count-1) * panel->g_taskbar.paddingx); pixel_width = taskbar_width / task_count; @@ -246,16 +250,12 @@ void resize_taskbar(void *obj) modulo_width = taskbar_width % task_count; } - if ((taskbar->task_width == pixel_width) && (taskbar->task_modulo == modulo_width)) { - } - else { - taskbar->task_width = pixel_width; - taskbar->task_modulo = modulo_width; - taskbar->text_width = pixel_width - panel->g_task.text_posx - panel->g_task.area.pix.border.width - panel->g_task.area.paddingx; - } + taskbar->task_width = pixel_width; + taskbar->task_modulo = modulo_width; + taskbar->text_width = pixel_width - panel->g_task.text_posx - panel->g_task.area.pix.border.width - panel->g_task.area.paddingx; // change pos_x and width for all tasks - x = taskbar->area.posx + taskbar->area.pix.border.width + taskbar->area.paddingxlr; + x = taskbar->area.posx + border_width + taskbar->area.paddingxlr; for (l = taskbar->area.list; l ; l = l->next) { tsk = l->data; if (!tsk->area.on_screen) continue; @@ -277,7 +277,7 @@ void resize_taskbar(void *obj) task_count = g_slist_length(taskbar->area.list); if (!task_count) pixel_height = panel->g_task.maximum_height; else { - taskbar_height = taskbar->area.height - (2 * panel->g_taskbar.pix.border.width) - (2 * panel->g_taskbar.paddingxlr); + taskbar_height = taskbar->area.height - (2 * border_width) - (2 * panel->g_taskbar.paddingxlr); if (task_count>1) taskbar_height -= ((task_count-1) * panel->g_taskbar.paddingx); pixel_height = taskbar_height / task_count; @@ -287,16 +287,12 @@ void resize_taskbar(void *obj) modulo_height = taskbar_height % task_count; } - if ((taskbar->task_width == pixel_height) && (taskbar->task_modulo == modulo_height)) { - } - else { - taskbar->task_width = pixel_height; - taskbar->task_modulo = modulo_height; - taskbar->text_width = taskbar->area.width - (2 * panel->g_taskbar.paddingy) - panel->g_task.text_posx - panel->g_task.area.pix.border.width - panel->g_task.area.paddingx; - } + taskbar->task_width = pixel_height; + taskbar->task_modulo = modulo_height; + taskbar->text_width = taskbar->area.width - (2 * panel->g_taskbar.paddingy) - panel->g_task.text_posx - panel->g_task.area.pix.border.width - panel->g_task.area.paddingx; // change pos_y and height for all tasks - y = taskbar->area.posy + taskbar->area.pix.border.width + taskbar->area.paddingxlr; + y = taskbar->area.posy + border_width + taskbar->area.paddingxlr; for (l = taskbar->area.list; l ; l = l->next) { tsk = l->data; if (!tsk->area.on_screen) continue; diff --git a/src/tint.c b/src/tint.c index f8a4a52..3696911 100644 --- a/src/tint.c +++ b/src/tint.c @@ -402,9 +402,9 @@ void event_property_notify (XEvent *e) if (panel_mode == MULTI_DESKTOP && panel->g_taskbar.use_active) { // redraw both taskbar panel->taskbar[old_desktop].area.is_active = 0; - panel->taskbar[old_desktop].area.redraw = 1; + panel->taskbar[old_desktop].area.resize = 1; panel->taskbar[server.desktop].area.is_active = 1; - panel->taskbar[server.desktop].area.redraw = 1; + panel->taskbar[server.desktop].area.resize = 1; panel_refresh = 1; } // check ALLDESKTOP task => resize taskbar @@ -780,7 +780,7 @@ int main (int argc, char *argv[]) break; case ReparentNotify: - if (!systray.area.on_screen) + if (!systray_enabled) break; panel = (Panel*)systray.area.panel; if (e.xany.window == panel->main_win) // reparented to us diff --git a/src/tooltip/tooltip.c b/src/tooltip/tooltip.c index ca6a5a2..5d8b90f 100644 --- a/src/tooltip/tooltip.c +++ b/src/tooltip/tooltip.c @@ -61,11 +61,11 @@ void init_tooltip() void cleanup_tooltip() { + alarm(0); tooltip_hide(); g_tooltip.enabled = False; g_tooltip.current_state = TOOLTIP_ABOUT_TO_HIDE; if (g_tooltip.task) { - alarm(0); g_tooltip.task = 0; } if (g_tooltip.window) { -- 2.45.2