New config option: taskbar sort by LRU/MRU (no config GUI yet) (issue #532)

This commit is contained in:
o9000 2015-12-05 11:07:23 +01:00
parent 3f84d5d14c
commit ea82926b3f
6 changed files with 26 additions and 0 deletions

View file

@ -2,6 +2,7 @@
- Enhancements:
- Support for NETWM viewports (as in Compiz) (issue #94)
- New plugin: executor
- New taskbar sort order: least-recently-used (lru), most-recently-used (mru)
2015-11-12 0.12.3
- Enhancements:
- Battery: Multiple batteries are now supported under Linux (issue #139;

View file

@ -749,6 +749,10 @@ void add_entry(char *key, char *value)
taskbar_sort_method = TASKBAR_SORT_CENTER;
} else if (strcmp(value, "title") == 0) {
taskbar_sort_method = TASKBAR_SORT_TITLE;
} else if (strcmp(value, "lru") == 0) {
taskbar_sort_method = TASKBAR_SORT_LRU;
} else if (strcmp(value, "mru") == 0) {
taskbar_sort_method = TASKBAR_SORT_MRU;
} else {
taskbar_sort_method = TASKBAR_NOSORT;
}

View file

@ -552,6 +552,20 @@ void set_task_state(Task *task, TaskState state)
if (!task || state < 0 || state >= TASK_STATE_COUNT)
return;
if (state == TASK_ACTIVE && task->current_state != state) {
clock_gettime(CLOCK_MONOTONIC, &task->last_activation_time);
if (taskbar_sort_method == TASKBAR_SORT_LRU || taskbar_sort_method == TASKBAR_SORT_MRU) {
GPtrArray *task_group = task_get_tasks(task->win);
if (task_group) {
for (int i = 0; i < task_group->len; ++i) {
Task *task1 = g_ptr_array_index(task_group, i);
Taskbar *taskbar = (Taskbar *)task1->area.parent;
sort_tasks(taskbar);
}
}
}
}
if (task->current_state != state || hide_task_diff_monitor) {
GPtrArray *task_group = task_get_tasks(task->win);
if (task_group) {

View file

@ -74,6 +74,7 @@ typedef struct Task {
int win_y;
int win_w;
int win_h;
struct timespec last_activation_time;
} Task;
Task *add_task(Window win);

View file

@ -522,6 +522,10 @@ gint compare_tasks(Task *a, Task *b, Taskbar *taskbar)
return compare_task_centers(a, b, taskbar);
} else if (taskbar_sort_method == TASKBAR_SORT_TITLE) {
return compare_task_titles(a, b, taskbar);
} else if (taskbar_sort_method == TASKBAR_SORT_LRU) {
return compare_timespecs(&a->last_activation_time, &b->last_activation_time);
} else if (taskbar_sort_method == TASKBAR_SORT_MRU) {
return -compare_timespecs(&a->last_activation_time, &b->last_activation_time);
}
return 0;
}

View file

@ -21,6 +21,8 @@ typedef enum TaskbarSortMethod {
TASKBAR_NOSORT = 0,
TASKBAR_SORT_CENTER,
TASKBAR_SORT_TITLE,
TASKBAR_SORT_LRU,
TASKBAR_SORT_MRU,
} TaskbarSortMethod;
extern GHashTable *win_to_task;