]> Dogcows Code - chaz/tint2/blobdiff - src/taskbar/taskbar.c
Fix segfault when a task state has no background in config
[chaz/tint2] / src / taskbar / taskbar.c
index d2ad54281d3627ad20c13b32437e67ce6db77b9e..da850a7932f24df7e4d4fe6e2f43dbaac284a3cc 100644 (file)
@@ -193,6 +193,8 @@ void init_taskbar_panel(void *p)
        }
 
        for (j=0; j<TASK_STATE_COUNT; ++j) {
+               if (panel->g_task.background[j] == 0)
+                       panel->g_task.background[j] = &g_array_index(backgrounds, Background, 0);
                if (panel->g_task.background[j]->border.rounded > panel->g_task.area.height/2) {
                        printf("task%sbackground_id has a too large rounded value. Please fix your tint2rc\n", j==0 ? "_" : j==1 ? "_active_" : j==2 ? "_iconified_" : "_urgent_");
                        g_array_append_val(backgrounds, *panel->g_task.background[j]);
@@ -228,16 +230,6 @@ void init_taskbar_panel(void *p)
                        tskbar->area.bg = panel->g_taskbar.background[TASKBAR_ACTIVE];
                else
                        tskbar->area.bg = panel->g_taskbar.background[TASKBAR_NORMAL];
-               
-               if (taskbarname_enabled) {
-                       memcpy(&tskbar->bar_name.area, &panel->g_taskbar.area_name, sizeof(Area));
-                       tskbar->bar_name.area.parent = tskbar;
-                       if (j == server.desktop)
-                               tskbar->bar_name.area.bg = panel->g_taskbar.background_name[TASKBAR_ACTIVE];
-                       else
-                               tskbar->bar_name.area.bg = panel->g_taskbar.background_name[TASKBAR_NORMAL];
-                       tskbar->area.list = g_slist_append(tskbar->area.list, &tskbar->bar_name);
-               }
        }
        init_taskbarname_panel(panel);
 }
@@ -352,6 +344,10 @@ void set_taskbar_state(Taskbar *tskbar, int state)
 {
        tskbar->area.bg = panel1[0].g_taskbar.background[state];
        tskbar->area.pix = tskbar->state_pix[state];
+       if (taskbarname_enabled) {
+               tskbar->bar_name.area.bg = panel1[0].g_taskbar.background_name[state];
+               tskbar->bar_name.area.pix = tskbar->bar_name.state_pix[state];
+       }
        if (panel_mode != MULTI_DESKTOP) { 
                if (state == TASKBAR_NORMAL)
                        tskbar->area.on_screen = 0;
@@ -361,6 +357,8 @@ void set_taskbar_state(Taskbar *tskbar, int state)
        if (tskbar->area.on_screen == 1) {
                if (tskbar->state_pix[state] == 0)
                        tskbar->area.redraw = 1;
+               if (taskbarname_enabled && tskbar->bar_name.state_pix[state] == 0)
+                       tskbar->bar_name.area.redraw = 1;
                if (panel_mode == MULTI_DESKTOP && panel1[0].g_taskbar.background[TASKBAR_NORMAL] != panel1[0].g_taskbar.background[TASKBAR_ACTIVE]) {
                        GSList *l = tskbar->area.list;
                        if (taskbarname_enabled) l = l->next;
This page took 0.023148 seconds and 4 git commands to generate.