*add* more task states (normal, active, iconified, urgent), with each an own background, font and asb

*fix* two memleaks
*fix* some code beautification



git-svn-id: http://tint2.googlecode.com/svn/trunk@327 121b4492-b84c-0410-8b4c-0d4edfb3f3cc
This commit is contained in:
Andreas.Fink85
2010-01-09 00:11:01 +00:00
parent 8042047cd4
commit 739af13714
24 changed files with 518 additions and 493 deletions

View File

@@ -415,10 +415,10 @@ void event_property_notify (XEvent *e)
// redraw both taskbar
if (server.nb_desktop > old_desktop) {
// can happen if last desktop is deleted and we've been on the last desktop
panel->taskbar[old_desktop].area.is_active = 0;
panel->taskbar[old_desktop].area.bg = panel->g_taskbar.bg;
panel->taskbar[old_desktop].area.resize = 1;
}
panel->taskbar[server.desktop].area.is_active = 1;
panel->taskbar[server.desktop].area.bg = panel->g_taskbar.bg_active;
panel->taskbar[server.desktop].area.resize = 1;
panel_refresh = 1;
}
@@ -519,49 +519,40 @@ void event_property_notify (XEvent *e)
panel_refresh = 1;
}
}
// We do not check for the iconified state, since it only unsets our active window
// but in openbox a shaded window is considered iconified. So we would loose the active window
// property on unshading it again (commented 01.10.2009)
// else if (at == server.atom.WM_STATE) {
// // Iconic state
// // TODO : try to delete following code
// if (window_is_iconified (win)) {
// if (task_active) {
// if (task_active->win == tsk->win) {
// Task *tsk2;
// GSList *l0;
// for (i=0 ; i < nb_panel ; i++) {
// for (j=0 ; j < panel1[i].nb_desktop ; j++) {
// for (l0 = panel1[i].taskbar[j].area.list; l0 ; l0 = l0->next) {
// tsk2 = l0->data;
// tsk2->area.is_active = 0;
// }
// }
// }
// task_active = 0;
// }
// }
// }
// }
else if (at == server.atom.WM_STATE) {
// Iconic state
int state = task_active == tsk ? TASK_ACTIVE : TASK_NORMAL;
if (window_is_iconified(win))
state = TASK_ICONIFIED;
GSList* task_list = task_get_tasks(win);
GSList* it = task_list;
while (it) {
Task* t = it->data;
set_task_state(t, state);
it = it->next;
}
g_slist_free(task_list);
panel_refresh = 1;
}
// Window icon changed
else if (at == server.atom._NET_WM_ICON) {
get_icon(tsk);
Task *tsk2;
GSList *l0;
for (i=0 ; i < nb_panel ; i++) {
for (j=0 ; j < panel1[i].nb_desktop ; j++) {
for (l0 = panel1[i].taskbar[j].area.list; l0 ; l0 = l0->next) {
tsk2 = l0->data;
if (tsk->win == tsk2->win && tsk != tsk2) {
tsk2->icon_width = tsk->icon_width;
tsk2->icon_height = tsk->icon_height;
tsk2->icon = tsk->icon;
tsk2->icon_active = tsk->icon_active;
tsk2->area.redraw = 1;
}
}
GSList* task_list = task_get_tasks(tsk->win);
GSList *l0 = task_list;
while (l0) {
tsk2 = l0->data;
if (tsk2 != tsk) {
tsk2->icon_width = tsk->icon_width;
tsk2->icon_height = tsk->icon_height;
int k=0;
for ( ; k<TASK_STATE_COUNT; ++k)
tsk2->icon[k] = tsk->icon[k];
tsk2->area.redraw = 1;
}
l0 = l0->next;
}
g_slist_free(task_list);
panel_refresh = 1;
}
// Window desktop changed
@@ -636,12 +627,14 @@ void event_configure_notify (Window win)
add_task (win);
if (win == window_get_active ()) {
GSList* task_list = task_get_tasks(win);
while (task_list) {
Task *tsk = task_list->data;
tsk->area.is_active = 1;
GSList* it = task_list;
while (it) {
Task *tsk = it->data;
tsk->current_state = TASK_ACTIVE;
task_active = tsk;
task_list = task_list->next;
it = task_list->next;
}
g_slist_free(task_list);
}
panel_refresh = 1;
}