1 /**************************************************************************
2 * Copyright (C) 2008 Pål Staurland (staura@gmail.com)
3 * Modified (C) 2008/2009 thierry lorthiois (lorthiois@bbsoft.fr)
6 * - draw panel and all objects according to panel_layout
9 **************************************************************************/
14 #include <pango/pangocairo.h>
21 #include "systraybar.h"
23 #include "freespace.h"
24 #include "execplugin.h"
25 #include "separator.h"
32 // --------------------------------------------------
34 extern MouseAction mouse_left
;
35 extern MouseAction mouse_middle
;
36 extern MouseAction mouse_right
;
37 extern MouseAction mouse_scroll_up
;
38 extern MouseAction mouse_scroll_down
;
39 extern MouseAction mouse_tilt_left
;
40 extern MouseAction mouse_tilt_right
;
42 typedef enum TaskbarMode
{
54 typedef enum PanelPosition
{
63 typedef enum StrutPolicy
{
85 typedef long StrutType
;
87 extern TaskbarMode taskbar_mode
;
88 extern gboolean wm_menu
;
89 extern gboolean panel_dock
;
90 extern gboolean panel_pivot_struts
;
91 extern Layer panel_layer
;
92 extern char *panel_window_name
;
93 extern PanelPosition panel_position
;
94 extern gboolean panel_horizontal
;
95 extern gboolean panel_redraw
;
96 extern gboolean task_dragged
;
97 extern gboolean panel_autohide
;
98 extern int panel_autohide_show_timeout
;
99 extern int panel_autohide_hide_timeout
;
100 extern int panel_autohide_height
; // for vertical panels this is, of course, the width
101 extern gboolean panel_shrink
;
102 extern StrutPolicy panel_strut_policy
;
103 extern char *panel_items_order
;
104 extern int max_tick_urgent
;
105 extern GArray
*backgrounds
;
106 extern GArray
*gradients
;
107 extern Imlib_Image default_icon
;
108 #define DEFAULT_FONT "sans 10"
109 extern char *default_font
;
110 extern XSettingsClient
*xsettings_client
;
111 extern gboolean startup_notifications
;
112 extern gboolean debug_geometry
;
113 extern gboolean debug_fps
;
114 extern double tracing_fps_threshold
;
115 extern gboolean debug_frames
;
116 extern gboolean debug_thumbnails
;
117 extern double ui_scale_dpi_ref
;
118 extern double ui_scale_monitor_size_ref
;
119 extern gboolean thumb_use_shm
;
120 extern gboolean debug_blink
;
122 typedef struct Panel
{
128 // position relative to root window
130 int marginx
, marginy
;
131 gboolean fractional_width
, fractional_height
;
134 gboolean font_shadow
;
135 gboolean mouse_effects
;
137 // Mouse effects for icons
138 int mouse_over_alpha
;
139 int mouse_over_saturation
;
140 int mouse_over_brightness
;
141 int mouse_pressed_alpha
;
142 int mouse_pressed_saturation
;
143 int mouse_pressed_brightness
;
146 // Per-panel parameters and states for Taskbar and Task
147 GlobalTaskbar g_taskbar
;
150 // Array of Taskbar, with num_desktops items
153 gboolean taskbarname_has_font
;
154 PangoFontDescription
*taskbarname_font_desc
;
158 #ifdef ENABLE_BATTERY
163 GList
*freespace_list
;
164 GList
*separator_list
;
170 int hidden_width
, hidden_height
;
171 Pixmap hidden_pixmap
;
172 Timer autohide_timer
;
175 extern Panel panel_config
;
176 extern Panel
*panels
;
177 extern int num_panels
;
179 void default_panel(); // default global data
180 void cleanup_panel(); // freed memory
183 // realloc panels according to number of monitor
184 // use panel_config as default value
186 void init_panel_geometry(Panel
*panel
);
187 gboolean
resize_panel(void *obj
);
188 void render_panel(Panel
*panel
);
189 void shrink_panel(Panel
*panel
);
190 void _schedule_panel_redraw(const char *file
, const char *function
, const int line
);
191 #define schedule_panel_redraw() _schedule_panel_redraw(__FILE__, __func__, __LINE__)
193 void set_panel_items_order(Panel
*p
);
194 void place_panel_all_desktops(Panel
*p
);
195 void replace_panel_all_desktops(Panel
*p
);
196 void set_panel_properties(Panel
*p
);
197 void set_panel_window_geometry(Panel
*panel
);
198 void set_panel_layer(Panel
*p
, Layer layer
);
200 void set_panel_background(Panel
*p
);
201 // draw background panel
203 Panel
*get_panel(Window win
);
204 // detect witch panel
206 Taskbar
*click_taskbar(Panel
*panel
, int x
, int y
);
207 Task
*click_task(Panel
*panel
, int x
, int y
);
208 Launcher
*click_launcher(Panel
*panel
, int x
, int y
);
209 LauncherIcon
*click_launcher_icon(Panel
*panel
, int x
, int y
);
210 Clock
*click_clock(Panel
*panel
, int x
, int y
);
212 #ifdef ENABLE_BATTERY
213 Battery
*click_battery(Panel
*panel
, int x
, int y
);
216 Area
*click_area(Panel
*panel
, int x
, int y
);
217 Execp
*click_execp(Panel
*panel
, int x
, int y
);
218 Button
*click_button(Panel
*panel
, int x
, int y
);
220 void autohide_show(void *p
);
221 void autohide_hide(void *p
);
222 void autohide_trigger_show(Panel
*p
, bool forced
);
223 void autohide_trigger_hide(Panel
*p
, bool forced
);
225 const char *get_default_font();
227 void default_icon_theme_changed();
228 void default_font_changed();
230 void free_icon(Imlib_Image icon
);
231 Imlib_Image
scale_adjust_icon( Imlib_Image original
, int icon_size
);
233 void save_screenshot(const char *path
);
234 void save_panel_screenshot(const Panel
*panel
, const char *path
);
236 /// Helper shortcut macroses
238 #define BUTTON_CASE(i,c) case i: command = c; \
239 cmd_sink = c ## _sink; \
242 #define lower_if_bottom(p) \
243 if (panel_layer == BOTTOM_LAYER) \
244 XLowerWindow(server.display, (p)->main_win);