*add* render finitely often systray icons (at most every 50 ms)
git-svn-id: http://tint2.googlecode.com/svn/trunk@324 121b4492-b84c-0410-8b4c-0d4edfb3f3cc
This commit is contained in:
@@ -498,9 +498,10 @@ void net_message(XClientMessageEvent *e)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void systray_render_icon_now(TrayWindow* traywin)
|
||||||
void systray_render_icon(TrayWindow* traywin)
|
|
||||||
{
|
{
|
||||||
|
traywin->render_timeout = 0;
|
||||||
|
|
||||||
// good systray icons support 32 bit depth, but some icons are still 24 bit.
|
// good systray icons support 32 bit depth, but some icons are still 24 bit.
|
||||||
// We create a heuristic mask for these icons, i.e. we get the rgb value in the top left corner, and
|
// We create a heuristic mask for these icons, i.e. we get the rgb value in the top left corner, and
|
||||||
// mask out all pixel with the same rgb value
|
// mask out all pixel with the same rgb value
|
||||||
@@ -529,6 +530,15 @@ void systray_render_icon(TrayWindow* traywin)
|
|||||||
}
|
}
|
||||||
XCopyArea(server.dsp, systray.area.pix.pmap, panel->main_win, server.gc, traywin->x-systray.area.posx, traywin->y-systray.area.posy, traywin->width, traywin->height, traywin->x, traywin->y);
|
XCopyArea(server.dsp, systray.area.pix.pmap, panel->main_win, server.gc, traywin->x-systray.area.posx, traywin->y-systray.area.posy, traywin->width, traywin->height, traywin->x, traywin->y);
|
||||||
imlib_free_image_and_decache();
|
imlib_free_image_and_decache();
|
||||||
|
|
||||||
|
XFlush(server.dsp);
|
||||||
|
}
|
||||||
|
|
||||||
|
void systray_render_icon(TrayWindow* traywin)
|
||||||
|
{
|
||||||
|
// wine tray icons update whenever mouse is over them, so we limit the updates to 50 ms
|
||||||
|
if (traywin->render_timeout == 0)
|
||||||
|
traywin->render_timeout = add_timeout(50, 0, systray_render_icon_now, traywin);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@@ -544,4 +554,7 @@ void refresh_systray_icon()
|
|||||||
else
|
else
|
||||||
XClearArea(server.dsp, traywin->id, 0, 0, traywin->width, traywin->height, True);
|
XClearArea(server.dsp, traywin->id, 0, 0, traywin->width, traywin->height, True);
|
||||||
}
|
}
|
||||||
|
//
|
||||||
|
// if (real_transparency || systray.alpha != 100 || systray.brightness != 0 || systray.saturation != 0)
|
||||||
|
// XFlush(server.dsp);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -12,6 +12,7 @@
|
|||||||
|
|
||||||
#include "common.h"
|
#include "common.h"
|
||||||
#include "area.h"
|
#include "area.h"
|
||||||
|
#include "timer.h"
|
||||||
#include <X11/extensions/Xdamage.h>
|
#include <X11/extensions/Xdamage.h>
|
||||||
|
|
||||||
// XEMBED messages
|
// XEMBED messages
|
||||||
@@ -40,6 +41,7 @@ typedef struct
|
|||||||
int hide;
|
int hide;
|
||||||
int depth;
|
int depth;
|
||||||
Damage damage;
|
Damage damage;
|
||||||
|
const struct timeout* render_timeout;
|
||||||
} TrayWindow;
|
} TrayWindow;
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -855,7 +855,7 @@ int main (int argc, char *argv[])
|
|||||||
XDamageNotifyEvent* de = (XDamageNotifyEvent*)&e;
|
XDamageNotifyEvent* de = (XDamageNotifyEvent*)&e;
|
||||||
for (l = systray.list_icons; l ; l = l->next) {
|
for (l = systray.list_icons; l ; l = l->next) {
|
||||||
traywin = (TrayWindow*)l->data;
|
traywin = (TrayWindow*)l->data;
|
||||||
if ( traywin->id == de->drawable ) {
|
if ( traywin->id == de->drawable && !de->more ) {
|
||||||
systray_render_icon(traywin);
|
systray_render_icon(traywin);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user