+int click_clock(Panel *panel, XEvent *e)
+{
+ Clock clk = panel->clock;
+ if (panel_horizontal) {
+ if (clk.area.on_screen && e->xbutton.x >= clk.area.posx && e->xbutton.x <= (clk.area.posx + clk.area.width))
+ return TRUE;
+ } else {
+ if (clk.area.on_screen && e->xbutton.y >= clk.area.posy && e->xbutton.y <= (clk.area.posy + clk.area.height))
+ return TRUE;
+ }
+ return FALSE;
+}
+
+
+void window_action (Task *tsk, int action)
+{
+ if (!tsk) return;
+ int desk;
+ switch (action) {
+ case CLOSE:
+ set_close (tsk->win);
+ break;
+ case TOGGLE:
+ set_active(tsk->win);
+ break;
+ case ICONIFY:
+ XIconifyWindow (server.dsp, tsk->win, server.screen);
+ break;
+ case TOGGLE_ICONIFY:
+ if (tsk == task_active) XIconifyWindow (server.dsp, tsk->win, server.screen);
+ else set_active (tsk->win);
+ break;
+ case SHADE:
+ window_toggle_shade (tsk->win);
+ break;
+ case MAXIMIZE_RESTORE:
+ window_maximize_restore (tsk->win);
+ break;
+ case MAXIMIZE:
+ window_maximize_restore (tsk->win);
+ break;
+ case RESTORE:
+ window_maximize_restore (tsk->win);
+ break;
+ case DESKTOP_LEFT:
+ if ( desk == 0 ) break;
+ desk = tsk->desktop - 1;
+ windows_set_desktop(tsk->win, desk);
+ if (desk == server.desktop)
+ set_active(tsk->win);
+ break;
+ case DESKTOP_RIGHT:
+ if (desk == server.nb_desktop ) break;
+ desk = tsk->desktop + 1;
+ windows_set_desktop(tsk->win, desk);
+ if (desk == server.desktop)
+ set_active(tsk->win);
+ }
+}
+
+
+void event_button_press (XEvent *e)
+{
+ Panel *panel = get_panel(e->xany.window);
+ if (!panel) return;
+
+ if (panel_mode == MULTI_DESKTOP)
+ task_drag = click_task(panel, e);
+
+ if (wm_menu && !task_drag && !click_clock(panel, e) && (e->xbutton.button != 1) ) {
+ // forward the click to the desktop window (thanks conky)
+ XUngrabPointer(server.dsp, e->xbutton.time);
+ e->xbutton.window = server.root_win;
+ // icewm doesn't open under the mouse.
+ // and xfce doesn't open at all.
+ //e->xbutton.x = e->xbutton.x_root;
+ //e->xbutton.y = e->xbutton.y_root;
+ //printf("**** %d, %d\n", e->xbutton.x, e->xbutton.y);
+ XSetInputFocus(server.dsp, e->xbutton.window, RevertToParent, e->xbutton.time);
+ XSendEvent(server.dsp, e->xbutton.window, False, ButtonPressMask, e);
+ return;