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 |
/************************************************************************** * 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_STATE_COUNT, } TaskState; extern timeout *urgent_timeout; extern GSList *urgent_list; typedef struct GlobalTask { Area area; gboolean text; gboolean 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]; int config_background_mask; // starting position for text ~ task_padding + task_border + icon_size double text_posx, text_height; PangoFontDescription *font_desc; Color font[TASK_STATE_COUNT]; int config_font_mask; gboolean tooltip_enabled; } GlobalTask; // Stores information about a task. // Warning: any dynamically allocated members are shared between the Task instances created for the same window // (for example, if the task appears on all desktops, there will be a different instance on each desktop's taskbar). typedef struct Task { // always start with area Area area; // TODO: group task with list of windows here 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]; Pixmap state_pix[TASK_STATE_COUNT]; unsigned int icon_width; unsigned int icon_height; char *title; int urgent_tick; // These may not be up-to-date int win_x; int win_y; int win_w; int win_h; } Task; 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 get_icon(Task *task); gboolean get_title(Task *task); void reset_active_task(); void set_task_state(Task *task, TaskState state); void set_task_redraw(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 |