From 1b1f2a1a069edcf3db99ae07020eeedae3023f76 Mon Sep 17 00:00:00 2001 From: Thierry Lorthiois Date: Wed, 18 Nov 2009 05:13:38 +0000 Subject: [PATCH] Scrolling through tasks by schattenprinz --- src/config.c | 4 ++++ src/taskbar/task.c | 49 ++++++++++++++++++++++++++++++++++++++++++++++ src/taskbar/task.h | 3 +++ src/tint.c | 14 +++++++++++++ src/util/common.h | 2 +- 5 files changed, 71 insertions(+), 1 deletion(-) diff --git a/src/config.c b/src/config.c index 1e83404..d93d2c3 100644 --- a/src/config.c +++ b/src/config.c @@ -173,6 +173,10 @@ void get_action (char *event, int *action) *action = DESKTOP_LEFT; else if (strcmp (event, "desktop_right") == 0) *action = DESKTOP_RIGHT; + else if (strcmp (event, "next_task") == 0) + *action = NEXT_TASK; + else if (strcmp (event, "prev_task") == 0) + *action = PREV_TASK; } diff --git a/src/taskbar/task.c b/src/taskbar/task.c index 0d69e15..317cd8f 100644 --- a/src/taskbar/task.c +++ b/src/taskbar/task.c @@ -361,6 +361,55 @@ void draw_task (void *obj, cairo_t *c, int active) } +Task *next_task(Task *tsk) +{ + GSList *l0; + int i, j; + Task *tsk1; + + 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) { + tsk1 = l0->data; + if (tsk1 == tsk) { + if (l0->next == NULL) l0 = panel1[i].taskbar[j].area.list; + else l0 = l0->next; + return l0->data; + } + } + } + } + + return NULL; +} + +Task *prev_task(Task *tsk) +{ + GSList *l0; + int i, j; + Task *tsk1, *tsk2; + + for (i=0 ; i < nb_panel ; i++) { + for (j=0 ; j < panel1[i].nb_desktop ; j++) { + tsk2 = NULL; + for (l0 = panel1[i].taskbar[j].area.list; l0 ; l0 = l0->next) { + tsk1 = l0->data; + if (tsk1 == tsk) { + if (l0 == panel1[i].taskbar[j].area.list) { + l0 = g_slist_last ( l0 ); + tsk2 = l0->data; + } + return tsk2; + } + tsk2 = tsk1; + } + } + } + + return NULL; +} + + void active_task() { GSList *l0; diff --git a/src/taskbar/task.h b/src/taskbar/task.h index 994870e..6bb9ef3 100644 --- a/src/taskbar/task.h +++ b/src/taskbar/task.h @@ -70,6 +70,9 @@ void get_icon (Task *tsk); void get_title(Task *tsk); void active_task(); +Task *next_task (Task *tsk); +Task *prev_task (Task *tsk); + void add_urgent(Task *tsk); void del_urgent(Task *tsk); int is_urgent(Task *tsk); diff --git a/src/tint.c b/src/tint.c index 05d50f6..1380d65 100644 --- a/src/tint.c +++ b/src/tint.c @@ -223,6 +223,20 @@ void window_action (Task *tsk, int action) windows_set_desktop(tsk->win, desk); if (desk == server.desktop) set_active(tsk->win); + break; + case NEXT_TASK: + if (task_active) { + Task *tsk1; + tsk1 = next_task(task_active); + set_active(tsk1->win); + } + break; + case PREV_TASK: + if (task_active) { + Task *tsk1; + tsk1 = prev_task(task_active); + set_active(tsk1->win); + } } } diff --git a/src/util/common.h b/src/util/common.h index 105b73e..c7eca86 100644 --- a/src/util/common.h +++ b/src/util/common.h @@ -29,7 +29,7 @@ FXint fxmalloc(void** ptr,unsigned long size){ */ // mouse actions -enum { NONE=0, CLOSE, TOGGLE, ICONIFY, SHADE, TOGGLE_ICONIFY, MAXIMIZE_RESTORE, MAXIMIZE, RESTORE, DESKTOP_LEFT, DESKTOP_RIGHT }; +enum { NONE=0, CLOSE, TOGGLE, ICONIFY, SHADE, TOGGLE_ICONIFY, MAXIMIZE_RESTORE, MAXIMIZE, RESTORE, DESKTOP_LEFT, DESKTOP_RIGHT, NEXT_TASK, PREV_TASK }; #define ALLDESKTOP 0xFFFFFFFF -- 2.44.0