all repos — tint2 @ d82d782541f8f05156a5980576d576d07f4d75be

fork of the tint2 desktop panel for my custom setup - only minimized windows across all desktops for the taskbar

src/taskbar/task.h (raw)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
/**************************************************************************
* task :
* -
*
**************************************************************************/

#ifndef TASK_H
#define TASK_H

#include <X11/Xlib.h>
#include <pango/pangocairo.h>
#include <Imlib2.h>

#include "common.h"
#include "timer.h"

typedef enum TaskState {
    TASK_NORMAL = 0,
    TASK_ACTIVE,
    TASK_ICONIFIED,
    TASK_URGENT,
    TASK_UNDEFINED,
    TASK_STATE_COUNT,
} TaskState;

typedef struct GlobalTask {
    Area area;
    gboolean has_text;
    gboolean has_icon;
    gboolean centered;
    int icon_posy;
    int icon_size1;
    int maximum_width;
    int maximum_height;
    int alpha[TASK_STATE_COUNT];
    int saturation[TASK_STATE_COUNT];
    int brightness[TASK_STATE_COUNT];
    int config_asb_mask;
    Background *background[TASK_STATE_COUNT];
    GList *gradient[TASK_STATE_COUNT];
    int config_background_mask;
    // starting position for text ~ task_padding + task_border + icon_size
    double text_posx, text_height;
    gboolean has_font;
    gboolean has_content_tint;
    PangoFontDescription *font_desc;
    Color font[TASK_STATE_COUNT];
    int config_font_mask;
    gboolean tooltip_enabled;
    gboolean thumbnail_enabled;
    int thumbnail_width;
} GlobalTask;

// Stores information about a task.
// Warning: any dynamically allocated members are shared between the Task instances created for the same window
// (if the task appears on all desktops, there will be a different instance on each desktop's taskbar).
typedef struct Task {
    Area area;
    Window win;
    int desktop;
    TaskState current_state;
    Imlib_Image icon[TASK_STATE_COUNT];
    Imlib_Image icon_hover[TASK_STATE_COUNT];
    Imlib_Image icon_press[TASK_STATE_COUNT];
    unsigned int icon_width;
    unsigned int icon_height;
    Color icon_color[TASK_STATE_COUNT];
    Color icon_color_hover[TASK_STATE_COUNT];
    Color icon_color_press[TASK_STATE_COUNT];
    char *title;
    int urgent_tick;
    // These may not be up-to-date
    int win_x;
    int win_y;
    int win_w;
    int win_h;
    struct timespec last_activation_time;
    int _text_width;
    int _text_height;
    double _text_posy;
    int _icon_x;
    int _icon_y;
    cairo_surface_t *thumbnail;
    double thumbnail_last_update;
} Task;

extern timeout *urgent_timeout;
extern GSList *urgent_list;

Task *add_task(Window win);
void remove_task(Task *task);

void draw_task(void *obj, cairo_t *c);
void on_change_task(void *obj);

void task_update_icon(Task *task);
void task_update_desktop(Task *task);
gboolean task_update_title(Task *task);
void reset_active_task();
void set_task_state(Task *task, TaskState state);
void task_handle_mouse_event(Task *task, MouseAction action);
void task_refresh_thumbnail(Task *task);

// Given a pointer to the task that is currently under the mouse (current_task),
// returns a pointer to the Task for the active window on the same taskbar.
// If not found, returns the current task.
Task *find_active_task(Task *current_task);

Task *next_task(Task *task);
Task *prev_task(Task *task);

void add_urgent(Task *task);
void del_urgent(Task *task);

#endif