Task *task_active;
Task *task_drag;
-Task *task_urgent;
-int tick_urgent;
+GSList *urgent_list;
int max_tick_urgent;
// panel's initial config
int i, old_nb_panel;
Panel *new_panel, *p;
+ init_tooltip();
+ init_systray();
+ init_clock();
+#ifdef ENABLE_BATTERY
+ init_battery();
+#endif
+
cleanup_taskbar();
for (i=0 ; i < nb_panel ; i++) {
free_area(&panel1[i].area);
init_panel_size_and_position(p);
// add childs
- if (p->clock.area.on_screen) {
+ if (clock_enabled) {
init_clock_panel(p);
p->area.list = g_slist_append(p->area.list, &p->clock);
}
#ifdef ENABLE_BATTERY
- if (p->battery.area.on_screen) {
+ if (battery_enabled) {
init_battery_panel(p);
p->area.list = g_slist_append(p->area.list, &p->battery);
}
if (g_tooltip.enabled)
event_mask |= PointerMotionMask|LeaveWindowMask;
XSetWindowAttributes att = { ParentRelative, 0L, 0, 0L, 0, 0, Always, 0L, 0L, False, event_mask, NoEventMask, False, 0, 0 };
- if (p->main_win) XDestroyWindow(server.dsp, p->main_win);
p->main_win = XCreateWindow(server.dsp, server.root_win, p->posx, p->posy, p->area.width, p->area.height, 0, server.depth, InputOutput, CopyFromParent, CWEventMask, &att);
}
else {
task_active = 0;
task_drag = 0;
- task_urgent = 0;
- cleanup_taskbar();
-
- // font allocated once
- if (panel1[0].g_task.font_desc) {
- pango_font_description_free(panel1[0].g_task.font_desc);
- panel1[0].g_task.font_desc = 0;
+ while (urgent_list) {
+ Task_urgent* t = urgent_list->data;
+ urgent_list = g_slist_remove(urgent_list, urgent_list->data);
+ free(t);
}
+ cleanup_taskbar();
+
int i;
Panel *p;
for (i=0 ; i < nb_panel ; i++) {
if (panel1) free(panel1);
panel1 = 0;
+
+ if (panel_config.g_task.font_desc) {
+ pango_font_description_free(panel_config.g_task.font_desc);
+ panel_config.g_task.font_desc = 0;
+ }
}
return 0;
}
+
+Taskbar *click_taskbar (Panel *panel, int x, int y)
+{
+ Taskbar *tskbar;
+ int i;
+
+ if (panel_horizontal) {
+ for (i=0; i < panel->nb_desktop ; i++) {
+ tskbar = &panel->taskbar[i];
+ if (tskbar->area.on_screen && x >= tskbar->area.posx && x <= (tskbar->area.posx + tskbar->area.width))
+ return tskbar;
+ }
+ }
+ else {
+ for (i=0; i < panel->nb_desktop ; i++) {
+ tskbar = &panel->taskbar[i];
+ if (tskbar->area.on_screen && y >= tskbar->area.posy && y <= (tskbar->area.posy + tskbar->area.height))
+ return tskbar;
+ }
+ }
+ return NULL;
+}
+
+
+Task *click_task (Panel *panel, int x, int y)
+{
+ GSList *l0;
+ Taskbar *tskbar;
+
+ if ( (tskbar = click_taskbar(panel, x, y)) ) {
+ if (panel_horizontal) {
+ Task *tsk;
+ for (l0 = tskbar->area.list; l0 ; l0 = l0->next) {
+ tsk = l0->data;
+ if (tsk->area.on_screen && x >= tsk->area.posx && x <= (tsk->area.posx + tsk->area.width)) {
+ return tsk;
+ }
+ }
+ }
+ else {
+ Task *tsk;
+ for (l0 = tskbar->area.list; l0 ; l0 = l0->next) {
+ tsk = l0->data;
+ if (tsk->area.on_screen && y >= tsk->area.posy && y <= (tsk->area.posy + tsk->area.height)) {
+ return tsk;
+ }
+ }
+ }
+ }
+ return NULL;
+}
+
+
+int click_padding(Panel *panel, int x, int y)
+{
+ if (panel_horizontal) {
+ if (x < panel->area.paddingxlr || x > panel->area.width-panel->area.paddingxlr)
+ return 1;
+ }
+ else {
+ if (y < panel->area.paddingxlr || y > panel->area.height-panel->area.paddingxlr)
+ return 1;
+ }
+ return 0;
+}
+
+
+int click_clock(Panel *panel, int x, int y)
+{
+ Clock clk = panel->clock;
+ if (panel_horizontal) {
+ if (clk.area.on_screen && x >= clk.area.posx && x <= (clk.area.posx + clk.area.width))
+ return TRUE;
+ } else {
+ if (clk.area.on_screen && y >= clk.area.posy && y <= (clk.area.posy + clk.area.height))
+ return TRUE;
+ }
+ return FALSE;
+}
+
+
+Area* click_area(Panel *panel, int x, int y)
+{
+ Area* result = &panel->area;
+ Area* new_result = result;
+ do {
+ result = new_result;
+ GSList* it = result->list;
+ while (it) {
+ Area* a = it->data;
+ if (panel_horizontal) {
+ if (a->on_screen && x >= a->posx && x <= (a->posx + a->width)) {
+ new_result = a;
+ break;
+ }
+ } else {
+ if (a->on_screen && y >= a->posy && y <= (a->posy + a->height)) {
+ new_result = a;
+ break;
+ }
+ }
+ it = it->next;
+ }
+ } while (new_result != result);
+ return result;
+}