all repos — tint2 @ 5450f8961289388cd8840de1f1bbd0571a9325ac

fork of the tint2 desktop panel for my custom setup - only minimized windows across all desktops for the taskbar

Remove double pixmap caching, it is crazy (see issue #542)
o9000 mrovi9000@gmail.com
commit

5450f8961289388cd8840de1f1bbd0571a9325ac

parent

dbf065ab12e44932e5bef27a9e47d681e63c7018

M src/panel.csrc/panel.c

@@ -749,16 +749,8 @@ // reset task/taskbar 'state_pix'

Taskbar *taskbar; for (int i = 0; i < p->num_desktops; i++) { taskbar = &p->taskbar[i]; - for (int k = 0; k < TASKBAR_STATE_COUNT; ++k) { - if (taskbar->state_pix[k]) - XFreePixmap(server.display, taskbar->state_pix[k]); - taskbar->state_pix[k] = 0; - if (taskbar->bar_name.state_pix[k]) - XFreePixmap(server.display, taskbar->bar_name.state_pix[k]); - taskbar->bar_name.state_pix[k] = 0; - } - taskbar->area.pix = 0; - taskbar->bar_name.area.pix = 0; + schedule_redraw(&taskbar->area); + schedule_redraw(&taskbar->bar_name.area); GList *l = taskbar->area.children; if (taskbarname_enabled) l = l->next;
M src/taskbar/task.csrc/taskbar/task.c

@@ -80,7 +80,6 @@ // even with task_on_all_desktop and with task_on_all_panel

task_template.title = NULL; for (int k = 0; k < TASK_STATE_COUNT; ++k) { task_template.icon[k] = NULL; - task_template.state_pix[k] = 0; } get_title(&task_template); get_icon(&task_template);

@@ -116,7 +115,6 @@ for (int k = 0; k < TASK_STATE_COUNT; ++k) {

task_instance->icon[k] = task_template.icon[k]; task_instance->icon_hover[k] = task_template.icon_hover[k]; task_instance->icon_press[k] = task_template.icon_press[k]; - task_instance->state_pix[k] = 0; } task_instance->icon_width = task_template.icon_width; task_instance->icon_height = task_template.icon_height;

@@ -179,8 +177,6 @@ imlib_context_set_image(task->icon_press[k]);

imlib_free_image(); task->icon_press[k] = 0; } - if (task->state_pix[k]) - XFreePixmap(server.display, task->state_pix[k]); } GPtrArray *task_group = g_hash_table_lookup(win_to_task, &win);

@@ -406,9 +402,6 @@ {

Task *task = (Task *)obj; Panel *panel = (Panel *)task->area.panel; - if (!panel_config.mouse_effects) - task->state_pix[task->current_state] = task->area.pix; - int text_width = 0; if (panel->g_task.text) { PangoLayout *layout = pango_cairo_create_layout(c);

@@ -573,14 +566,7 @@ for (int i = 0; i < task_group->len; ++i) {

Task *task1 = g_ptr_array_index(task_group, i); task1->current_state = state; task1->area.bg = panels[0].g_task.background[state]; - if (!panel_config.mouse_effects) { - task1->area.pix = task1->state_pix[state]; - if (!task1->area.pix) - schedule_redraw(&task1->area); - panel_refresh = TRUE; - } else { - schedule_redraw(&task1->area); - } + schedule_redraw(&task1->area); if (state == TASK_ACTIVE && g_slist_find(urgent_list, task1)) del_urgent(task1); gboolean hide = FALSE;

@@ -615,12 +601,6 @@ }

void set_task_redraw(Task *task) { - for (int k = 0; k < TASK_STATE_COUNT; ++k) { - if (task->state_pix[k]) - XFreePixmap(server.display, task->state_pix[k]); - task->state_pix[k] = 0; - } - task->area.pix = 0; schedule_redraw(&task->area); }
M src/taskbar/task.hsrc/taskbar/task.h

@@ -66,7 +66,6 @@ TaskState current_state;

Imlib_Image icon[TASK_STATE_COUNT]; Imlib_Image icon_hover[TASK_STATE_COUNT]; Imlib_Image icon_press[TASK_STATE_COUNT]; - Pixmap state_pix[TASK_STATE_COUNT]; unsigned int icon_width; unsigned int icon_height; char *title;
M src/taskbar/taskbar.csrc/taskbar/taskbar.c

@@ -99,11 +99,6 @@ for (int i = 0; i < num_panels; i++) {

Panel *panel = &panels[i]; for (int j = 0; j < panel->num_desktops; j++) { Taskbar *taskbar = &panel->taskbar[j]; - for (int k = 0; k < TASKBAR_STATE_COUNT; ++k) { - if (taskbar->state_pix[k]) - XFreePixmap(server.display, taskbar->state_pix[k]); - taskbar->state_pix[k] = 0; - } free_area(&taskbar->area); // remove taskbar from the panel remove_area((Area *)taskbar);

@@ -164,7 +159,6 @@ panel->g_taskbar.area.panel = panel;

panel->g_taskbar.area.size_mode = LAYOUT_DYNAMIC; panel->g_taskbar.area.alignment = taskbar_alignment; panel->g_taskbar.area._resize = resize_taskbar; - panel->g_taskbar.area._draw_foreground = draw_taskbar; panel->g_taskbar.area._on_change_layout = on_change_taskbar; panel->g_taskbar.area.resize_needed = 1; panel->g_taskbar.area.on_screen = TRUE;

@@ -380,14 +374,6 @@

XFree(win); } -void draw_taskbar(void *obj, cairo_t *c) -{ - Taskbar *taskbar = (Taskbar *)obj; - int state = (taskbar->desktop == server.desktop) ? TASKBAR_ACTIVE : TASKBAR_NORMAL; - - taskbar->state_pix[state] = taskbar->area.pix; -} - gboolean resize_taskbar(void *obj) { Taskbar *taskbar = (Taskbar *)obj;

@@ -421,26 +407,14 @@

void on_change_taskbar(void *obj) { Taskbar *taskbar = (Taskbar *)obj; - - // reset Pixmap when position/size changed - for (int k = 0; k < TASKBAR_STATE_COUNT; ++k) { - if (taskbar->state_pix[k]) - XFreePixmap(server.display, taskbar->state_pix[k]); - taskbar->state_pix[k] = 0; - } - taskbar->area.pix = 0; schedule_redraw(&taskbar->area); } void set_taskbar_state(Taskbar *taskbar, TaskbarState state) { taskbar->area.bg = panels[0].g_taskbar.background[state]; - taskbar->area.pix = taskbar->state_pix[state]; if (taskbarname_enabled) { taskbar->bar_name.area.bg = panels[0].g_taskbar.background_name[state]; - if (!panel_config.mouse_effects) { - taskbar->bar_name.area.pix = taskbar->bar_name.state_pix[state]; - } } if (taskbar_mode != MULTI_DESKTOP) { if (state == TASKBAR_NORMAL)

@@ -449,15 +423,9 @@ else

taskbar->area.on_screen = TRUE; } if (taskbar->area.on_screen) { - if (!taskbar->state_pix[state]) - schedule_redraw(&taskbar->area); + schedule_redraw(&taskbar->area); if (taskbarname_enabled) { - if (!panel_config.mouse_effects) { - if (!taskbar->bar_name.state_pix[state]) - schedule_redraw(&taskbar->bar_name.area); - } else { - schedule_redraw(&taskbar->bar_name.area); - } + schedule_redraw(&taskbar->bar_name.area); } if (taskbar_mode == MULTI_DESKTOP && panels[0].g_taskbar.background[TASKBAR_NORMAL] != panels[0].g_taskbar.background[TASKBAR_ACTIVE]) {
M src/taskbar/taskbar.hsrc/taskbar/taskbar.h

@@ -37,15 +37,12 @@ extern Alignment taskbar_alignment;

typedef struct { Area area; - Pixmap state_pix[TASKBAR_STATE_COUNT]; - gchar *name; int posy; } Taskbarname; typedef struct { Area area; - Pixmap state_pix[TASKBAR_STATE_COUNT]; int desktop; Taskbarname bar_name; int text_width;

@@ -68,7 +65,6 @@

void init_taskbar(); void init_taskbar_panel(void *p); -void draw_taskbar(void *obj, cairo_t *c); void taskbar_remove_task(gpointer key, gpointer value, gpointer user_data); Task *task_get_task(Window win); GPtrArray *task_get_tasks(Window win);
M src/taskbar/taskbarname.csrc/taskbar/taskbarname.c

@@ -114,7 +114,7 @@ }

void cleanup_taskbarname() { - int i, j, k; + int i, j; Panel *panel; Taskbar *taskbar;

@@ -125,11 +125,6 @@ taskbar = &panel->taskbar[j];

g_free(taskbar->bar_name.name); taskbar->bar_name.name = NULL; free_area(&taskbar->bar_name.area); - for (k = 0; k < TASKBAR_STATE_COUNT; ++k) { - if (taskbar->bar_name.state_pix[k]) - XFreePixmap(server.display, taskbar->bar_name.state_pix[k]); - taskbar->bar_name.state_pix[k] = 0; - } remove_area((Area *)&taskbar->bar_name); } }

@@ -179,10 +174,6 @@ Taskbarname *taskbar_name = obj;

Taskbar *taskbar = taskbar_name->area.parent; PangoLayout *layout; Color *config_text = (taskbar->desktop == server.desktop) ? &taskbarname_active_font : &taskbarname_font; - - int state = (taskbar->desktop == server.desktop) ? TASKBAR_ACTIVE : TASKBAR_NORMAL; - if (!panel_config.mouse_effects) - taskbar_name->state_pix[state] = taskbar_name->area.pix; // draw content layout = pango_cairo_create_layout(c);