all repos — tint2 @ 1b545f6bbe71b6e7a360d6605fe91583f2d2e528

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

src/panel.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
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
/**************************************************************************
* Copyright (C) 2008 Pål Staurland (staura@gmail.com)
* Modified (C) 2008/2009 thierry lorthiois (lorthiois@bbsoft.fr)
*
* panel :
* - draw panel and all objects according to panel_layout
*
*
**************************************************************************/

#ifndef PANEL_H
#define PANEL_H

#include <pango/pangocairo.h>
#include <sys/time.h>

#include "common.h"
#include "clock.h"
#include "task.h"
#include "taskbar.h"
#include "systraybar.h"
#include "launcher.h"
#include "freespace.h"
#include "execplugin.h"

#ifdef ENABLE_BATTERY
#include "battery.h"
#endif

extern int signal_pending;
// --------------------------------------------------
// mouse events
extern MouseAction mouse_left;
extern MouseAction mouse_middle;
extern MouseAction mouse_right;
extern MouseAction mouse_scroll_up;
extern MouseAction mouse_scroll_down;
extern MouseAction mouse_tilt_left;
extern MouseAction mouse_tilt_right;

// panel mode
typedef enum TaskbarMode {
	SINGLE_DESKTOP = 0,
	MULTI_DESKTOP,
} TaskbarMode;

typedef enum Layer {
	BOTTOM_LAYER,
	NORMAL_LAYER,
	TOP_LAYER,
} Layer;

// panel position
typedef enum PanelPosition {
	LEFT = 0x01,
	RIGHT = 0x02,
	CENTER = 0X04,
	TOP = 0X08,
	BOTTOM = 0x10,
} PanelPosition;

typedef enum Strut {
	STRUT_MINIMUM,
	STRUT_FOLLOW_SIZE,
	STRUT_NONE,
} Strut;

extern TaskbarMode taskbar_mode;
extern gboolean wm_menu;
extern gboolean panel_dock;
extern Layer panel_layer;
extern char *panel_window_name;
extern PanelPosition panel_position;
extern gboolean panel_horizontal;
extern gboolean panel_refresh;
extern gboolean task_dragged;
extern gboolean panel_autohide;
extern int panel_autohide_show_timeout;
extern int panel_autohide_hide_timeout;
extern int panel_autohide_height; // for vertical panels this is of course the width
extern Strut panel_strut_policy;
extern char *panel_items_order;
extern int max_tick_urgent;
extern GArray *backgrounds;
extern Imlib_Image default_icon;
// TODO maybe this should be a config option
#define DEFAULT_FONT "sans 10"

typedef struct Panel {
	Area area;

	Window main_win;
	Pixmap temp_pmap;

	// position relative to root window
	int posx, posy;
	int marginx, marginy;
	int fractional_width, fractional_height;
	int monitor;
	int font_shadow;
	gboolean mouse_effects;
	// Mouse effects for icons
	int mouse_over_alpha;
	int mouse_over_saturation;
	int mouse_over_brightness;
	int mouse_pressed_alpha;
	int mouse_pressed_saturation;
	int mouse_pressed_brightness;

	// Per-panel parameters and states for Taskbar and Task
	GlobalTaskbar g_taskbar;
	GlobalTask g_task;

	// Array of Taskbar, with num_desktops items
	Taskbar *taskbar;
	int num_desktops;
	PangoFontDescription *taskbarname_font_desc;

	Clock clock;

#ifdef ENABLE_BATTERY
	Battery battery;
#endif

	Launcher launcher;
	FreeSpace freespace;
	GList *execp_list;

	// Autohide
	gboolean is_hidden;
	int hidden_width, hidden_height;
	Pixmap hidden_pixmap;
	timeout *autohide_timeout;
} Panel;

extern Panel panel_config;
extern Panel *panels;
extern int num_panels;

// default global data
void default_panel();

// freed memory
void cleanup_panel();

// realloc panels according to number of monitor
// use panel_config as default value
void init_panel();

void init_panel_size_and_position(Panel *panel);
gboolean resize_panel(void *obj);
void render_panel(Panel *panel);

void set_panel_items_order(Panel *p);
void set_panel_properties(Panel *p);

// draw background panel
void set_panel_background(Panel *p);

// detect witch panel
Panel *get_panel(Window win);

Taskbar *click_taskbar(Panel *panel, int x, int y);
Task *click_task(Panel *panel, int x, int y);
Launcher *click_launcher(Panel *panel, int x, int y);
LauncherIcon *click_launcher_icon(Panel *panel, int x, int y);
gboolean click_padding(Panel *panel, int x, int y);
gboolean click_clock(Panel *panel, int x, int y);

#ifdef ENABLE_BATTERY
gboolean click_battery(Panel *panel, int x, int y);
#endif

Area *click_area(Panel *panel, int x, int y);
Execp *click_execp(Panel *panel, int x, int y);

void autohide_show(void *p);
void autohide_hide(void *p);
void autohide_trigger_show(Panel *p);
void autohide_trigger_hide(Panel *p);

#endif