]> Dogcows Code - chaz/tint2/blobdiff - src/taskbar/task.c
*fix* segfault when cycling through tasks and taskbarname is enabled
[chaz/tint2] / src / taskbar / task.c
index 7a5212e794fe9191e8b240c93a11d80f07f2bf99..4d717ac5b858710ba8d91bee87e4acf327e1eb10 100644 (file)
@@ -3,7 +3,7 @@
 * Tint2 : task
 *
 * Copyright (C) 2007 Pål Staurland (staura@gmail.com)
-* Modified (C) 2008 thierry lorthiois (lorthiois@bbsoft.fr)
+* Modified (C) 2008 thierry lorthiois (lorthiois@bbsoft.fr) from Omega distribution
 *
 * This program is free software; you can redistribute it and/or
 * modify it under the terms of the GNU General Public License version 2
@@ -96,7 +96,8 @@ Task *add_task (Window win)
                        new_tsk2->area.on_screen = 0;
                }
                new_tsk2->title = new_tsk.title;
-               new_tsk2->area._get_tooltip_text = task_get_tooltip;
+               if (panel1[monitor].g_task.tooltip_enabled)
+                       new_tsk2->area._get_tooltip_text = task_get_tooltip;
                for (k=0; k<TASK_STATE_COUNT; ++k) {
                        new_tsk2->icon[k] = new_tsk.icon[k];
                        new_tsk2->state_pix[k] = 0;
@@ -159,12 +160,12 @@ void remove_task (Task *tsk)
 }
 
 
-void get_title(Task *tsk)
+int get_title(Task *tsk)
 {
        Panel *panel = tsk->area.panel;
        char *title, *name;
 
-       if (!panel->g_task.text && !g_tooltip.enabled) return;
+       if (!panel->g_task.text && !panel->g_task.tooltip_enabled) return 0;
 
        name = server_get_property (tsk->win, server.atom._NET_WM_VISIBLE_NAME, server.atom.UTF8_STRING, 0);
        if (!name || !strlen(name)) {
@@ -184,9 +185,16 @@ void get_title(Task *tsk)
        else title[0] = 0;
        strcat(title, name);
        if (name) XFree (name);
-
-       if (tsk->title)
-               free(tsk->title);
+       
+       if (tsk->title) {
+               // check unecessary title change
+               if (strcmp(tsk->title, title) == 0) {
+                       free(title);
+                       return 0;
+               }
+               else
+                       free(tsk->title);
+       } 
 
        tsk->title = title;
        GPtrArray* task_group = task_get_tasks(tsk->win);
@@ -198,7 +206,7 @@ void get_title(Task *tsk)
                        set_task_redraw(tsk2);
                }
        }
-       set_task_redraw(tsk);
+       return 1;
 }
 
 
@@ -303,7 +311,6 @@ void get_icon (Task *tsk)
                        set_task_redraw(tsk2);
                }
        }
-       set_task_redraw(tsk);
 }
 
 
@@ -404,14 +411,17 @@ Task *next_task(Task *tsk)
        if (tsk == 0)
                return 0;
 
-       GSList *l0;
+       GSList *l0, *lfirst_tsk;
        Task *tsk1;
        Taskbar* tskbar = tsk->area.parent;
 
-       for (l0 = tskbar->area.list; l0 ; l0 = l0->next) {
+       l0 = tskbar->area.list;
+       if (taskbarname_enabled) l0 = l0->next;
+       lfirst_tsk = l0;
+       for (; l0 ; l0 = l0->next) {
                tsk1 = l0->data;
                if (tsk1 == tsk) {
-                       if (l0->next == 0) l0 = tskbar->area.list;
+                       if (l0->next == 0) l0 = lfirst_tsk;
                        else l0 = l0->next;
                        return l0->data;
                }
@@ -425,15 +435,18 @@ Task *prev_task(Task *tsk)
        if (tsk == 0)
                return 0;
 
-       GSList *l0;
+       GSList *l0, *lfirst_tsk;
        Task *tsk1, *tsk2;
        Taskbar* tskbar = tsk->area.parent;
 
        tsk2 = 0;
-       for (l0 = tskbar->area.list; l0 ; l0 = l0->next) {
+       l0 = tskbar->area.list;
+       if (taskbarname_enabled) l0 = l0->next;
+       lfirst_tsk = l0;
+       for (; l0 ; l0 = l0->next) {
                tsk1 = l0->data;
                if (tsk1 == tsk) {
-                       if (l0 == tskbar->area.list) {
+                       if (l0 == lfirst_tsk) {
                                l0 = g_slist_last ( l0 );
                                tsk2 = l0->data;
                        }
This page took 0.026504 seconds and 4 git commands to generate.