From 0ade529e3c99cdb5c85fd30ced3551758b85f256 Mon Sep 17 00:00:00 2001 From: Andreas Fink Date: Sun, 17 Jan 2010 20:02:56 +0000 Subject: [PATCH] reverted my last checkin, because I forgot that XCopyArea only works if src.depth == dest.depth minor bugfix if in hidden mode a new tray icon appears --- src/panel.c | 1 + src/systray/systraybar.c | 14 ++++++++------ src/tint.c | 1 - 3 files changed, 9 insertions(+), 7 deletions(-) diff --git a/src/panel.c b/src/panel.c index eb83902..0c5c383 100644 --- a/src/panel.c +++ b/src/panel.c @@ -748,6 +748,7 @@ void autohide_show(void* p) 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; } diff --git a/src/systray/systraybar.c b/src/systray/systraybar.c index c07ae74..b369183 100644 --- a/src/systray/systraybar.c +++ b/src/systray/systraybar.c @@ -434,10 +434,10 @@ gboolean add_icon(Window id) } // show the window - if (!traywin->hide) { + if (!traywin->hide) XMapRaised(server.dsp, traywin->tray_id); + if (!traywin->hide && !panel->is_hidden) XMapRaised(server.dsp, traywin->id); - } // changed in systray force resize on panel panel->area.resize = 1; @@ -553,7 +553,6 @@ void systray_render_icon(TrayWindow* traywin) void refresh_systray_icon() { - Panel* panel = systray.area.panel; TrayWindow *traywin; GSList *l; for (l = systray.list_icons; l ; l = l->next) { @@ -562,10 +561,13 @@ void refresh_systray_icon() if (real_transparency || systray.alpha != 100 || systray.brightness != 0 || systray.saturation != 0) systray_render_icon(traywin); else { - Pixmap pix = XCreatePixmap(server.dsp, server.root_win, traywin->width, traywin->height, server.depth); - XCopyArea(server.dsp, panel->temp_pmap, pix, server.gc, traywin->x, traywin->y, traywin->width, traywin->height, 0, 0); + // comment by andreas: I'm still not sure, what exactly we need to do here... Somehow trayicons which do not + // offer the same depth as tint2 does, need to draw a background pixmap, but this cannot be done with + // XCopyArea... So we actually need XRenderComposite??? +// Pixmap pix = XCreatePixmap(server.dsp, server.root_win, traywin->width, traywin->height, server.depth); +// XCopyArea(server.dsp, panel->temp_pmap, pix, server.gc, traywin->x, traywin->y, traywin->width, traywin->height, 0, 0); +// XSetWindowBackgroundPixmap(server.dsp, traywin->id, pix); XClearArea(server.dsp, traywin->tray_id, 0, 0, traywin->width, traywin->height, True); - XSetWindowBackgroundPixmap(server.dsp, traywin->id, pix); } } } diff --git a/src/tint.c b/src/tint.c index 3a7b82b..1a5c4bb 100644 --- a/src/tint.c +++ b/src/tint.c @@ -703,7 +703,6 @@ int main (int argc, char *argv[]) panel = (Panel*)systray.area.panel; if (refresh_systray && !panel->is_hidden) { refresh_systray = 0; - panel = (Panel*)systray.area.panel; // tint2 doen't draw systray icons. it just redraw background. XSetWindowBackgroundPixmap (server.dsp, panel->main_win, panel->temp_pmap); // force icon's refresh -- 2.44.0