#include <pango/pangocairo.h>
#include "server.h"
+#include "config.h"
#include "window.h"
#include "task.h"
#include "panel.h"
int panel_position;
int panel_horizontal;
int panel_refresh;
+int task_dragged=0;
int panel_autohide = 0;
int panel_autohide_show_timeout = 0;
cleanup_taskbar();
for (i=0 ; i < nb_panel ; i++) {
+ autohide_show(&panel1[i]);
free_area(&panel1[i].area);
if (panel1[i].temp_pmap) {
XFreePixmap(server.dsp, panel1[i].temp_pmap);
if (i >= old_nb_panel) {
// new panel : catch some events
- long event_mask = ExposureMask|ButtonPressMask|ButtonReleaseMask;
- if (g_tooltip.enabled)
- event_mask |= PointerMotionMask|LeaveWindowMask;
- if (panel_autohide)
- event_mask |= LeaveWindowMask|EnterWindowMask;
- XSetWindowAttributes att = { .event_mask=event_mask, .colormap=server.colormap, .background_pixel=0, .border_pixel=0 };
+ XSetWindowAttributes att = { .colormap=server.colormap, .background_pixel=0, .border_pixel=0 };
unsigned long mask = CWEventMask|CWColormap|CWBackPixel|CWBorderPixel;
p->main_win = XCreateWindow(server.dsp, server.root_win, p->posx, p->posy, p->area.width, p->area.height, 0, server.depth, InputOutput, server.visual, mask, &att);
}
XMoveResizeWindow(server.dsp, p->main_win, p->posx, p->posy, p->area.width, p->area.height);
}
+ long event_mask = ExposureMask|ButtonPressMask|ButtonReleaseMask|ButtonMotionMask;
+ if (g_tooltip.enabled)
+ event_mask |= PointerMotionMask|LeaveWindowMask;
+ if (panel_autohide)
+ event_mask |= LeaveWindowMask|EnterWindowMask;
+ XChangeWindowAttributes(server.dsp, p->main_win, CWEventMask, &(XSetWindowAttributes){.event_mask=event_mask});
+
if (!server.gc) {
XGCValues gcv;
server.gc = XCreateGC(server.dsp, p->main_win, 0, &gcv);
//printf("panel %d : %d, %d, %d, %d\n", i, p->posx, p->posy, p->area.width, p->area.height);
set_panel_properties(p);
set_panel_background(p);
- if (i >= old_nb_panel) {
- // map new panel
+ if (i >= old_nb_panel && snapshot_path == 0) {
+ // if we are not in 'snapshot' mode then map new panel
XMapWindow (server.dsp, p->main_win);
}
pango_font_description_free(panel_config.g_task.font_desc);
panel_config.g_task.font_desc = 0;
}
+
+ if (backgrounds) {
+ g_array_free(backgrounds, 1);
+ backgrounds = 0;
+ }
}
void update_strut(Panel* p)
{
+ if (panel_strut_policy == STRUT_NONE) {
+ XDeleteProperty(server.dsp, p->main_win, server.atom._NET_WM_STRUT);
+ XDeleteProperty(server.dsp, p->main_win, server.atom._NET_WM_STRUT_PARTIAL);
+ return;
+ }
+
// Reserved space
unsigned int d1, screen_width, screen_height;
Window d2;
if (p->area.pix) XFreePixmap (server.dsp, p->area.pix);
p->area.pix = XCreatePixmap (server.dsp, server.root_win, p->area.width, p->area.height, server.depth);
+ int xoff=0, yoff=0;
+ if (panel_horizontal && panel_position & BOTTOM)
+ yoff = p->area.height-p->hidden_height;
+ else if (!panel_horizontal && panel_position & RIGHT)
+ xoff = p->area.width-p->hidden_width;
+
if (real_transparency) {
clear_pixmap(p->area.pix, 0, 0, p->area.width, p->area.height);
}
Window dummy;
int x, y;
XTranslateCoordinates(server.dsp, p->main_win, server.root_win, 0, 0, &x, &y, &dummy);
- XSetTSOrigin(server.dsp, server.gc, -x, -y) ;
+ if (panel_autohide && p->is_hidden) {
+ x -= xoff;
+ y -= yoff;
+ }
+ XSetTSOrigin(server.dsp, server.gc, -x, -y);
XFillRectangle(server.dsp, p->area.pix, server.gc, 0, 0, p->area.width, p->area.height);
}
if (panel_autohide) {
if (p->hidden_pixmap) XFreePixmap(server.dsp, p->hidden_pixmap);
p->hidden_pixmap = XCreatePixmap(server.dsp, server.root_win, p->hidden_width, p->hidden_height, server.depth);
- int xoff=0, yoff=0;
- if (panel_horizontal && panel_position & BOTTOM)
- yoff = p->area.height-p->hidden_height;
- else if (!panel_horizontal && panel_position & RIGHT)
- xoff = p->area.width-p->hidden_width;
XCopyArea(server.dsp, p->area.pix, p->hidden_pixmap, server.gc, xoff, yoff, p->hidden_width, p->hidden_height, 0, 0);
}
a = l0->data;
set_redraw(a);
}
+ // reset task 'state_pix'
+ int i;
+ Taskbar *tskbar;
+ for (i=0 ; i < p->nb_desktop ; i++) {
+ tskbar = &p->taskbar[i];
+ for (l0 = tskbar->area.list; l0 ; l0 = l0->next) {
+ set_task_redraw((Task *)l0->data);
+ }
+ }
}
if (panel_strut_policy == STRUT_FOLLOW_SIZE)
update_strut(p);
- XMapSubwindows(server.dsp, panel->main_win);
+ XMapSubwindows(server.dsp, panel->main_win); // systray windows
if (panel_horizontal) {
if (panel_position & TOP)
XResizeWindow(server.dsp, panel->main_win, panel->area.width, panel->area.height);
else
XMoveResizeWindow(server.dsp, panel->main_win, panel->posx, panel->posy, panel->area.width, panel->area.height);
}
+ refresh_systray = 1; // ugly hack, because we actually only need to call XSetBackgroundPixmap
panel_refresh = 1;
}
if (panel_strut_policy == STRUT_FOLLOW_SIZE)
update_strut(p);
- XUnmapSubwindows(server.dsp, panel->main_win);
+ XUnmapSubwindows(server.dsp, panel->main_win); // systray windows
int diff = (panel_horizontal ? panel->area.height : panel->area.width) - panel_autohide_height;
if (panel_horizontal) {
if (panel_position & TOP)