1
0
mirror of https://github.com/gryf/wmaker.git synced 2025-12-21 05:18:06 +01:00

New function create_default_icon

The function create_default_icon sets the panel's default icon. This
is interesting to have a "cache" icon and don't search the default
icon more than one time if the icons don't have icon associated.

The code of create_default_icon was included in the addIconForWindow()
function, this patch only moves it to get a better (clear) code.
This commit is contained in:
Rodolfo García Peñas (kix)
2012-07-14 12:07:45 +02:00
committed by Carlos R. Mafra
parent 6d08aa22d8
commit 829830c010

View File

@@ -162,6 +162,27 @@ static RImage *scaleDownIfNeeded(RImage *image)
return image; return image;
} }
/* This function sets the default icon (defIcon) in the switchpanel */
static void create_default_icon(WSwitchPanel *panel)
{
RImage *image = NULL;
char *path = NULL;
char *file = wDefaultGetIconFile(NULL, NULL, False);
if (file) {
path = FindImage(wPreferences.icon_path, file);
if (path) {
image = RLoadImage(panel->scr->rcontext, path, 0);
wfree(path);
}
}
if (image)
panel->defIcon = scaleDownIfNeeded(image);
image = NULL;
}
static void addIconForWindow(WSwitchPanel *panel, WMWidget *parent, WWindow *wwin, int x, int y) static void addIconForWindow(WSwitchPanel *panel, WMWidget *parent, WWindow *wwin, int x, int y)
{ {
WMFrame *icon = WMCreateFrame(parent); WMFrame *icon = WMCreateFrame(parent);
@@ -174,27 +195,14 @@ static void addIconForWindow(WSwitchPanel *panel, WMWidget *parent, WWindow *wwi
if (!WFLAGP(wwin, always_user_icon) && wwin->net_icon_image) if (!WFLAGP(wwin, always_user_icon) && wwin->net_icon_image)
image = RRetainImage(wwin->net_icon_image); image = RRetainImage(wwin->net_icon_image);
// Make this use a caching thing. When there are many windows,
// it's very likely that most of them are instances of the same thing,
// so caching them should get performance acceptable in these cases.
if (!image) if (!image)
image = wDefaultGetImage(panel->scr, wwin->wm_instance, wwin->wm_class, ICON_TILE_SIZE); image = wDefaultGetImage(panel->scr, wwin->wm_instance, wwin->wm_class, ICON_TILE_SIZE);
if (!image && !panel->defIcon) { // Make this use a caching thing. When there are many windows,
char *file = wDefaultGetIconFile(NULL, NULL, False); // it's very likely that most of them are instances of the same thing,
if (file) { // so caching them should get performance acceptable in these cases.
char *path = FindImage(wPreferences.icon_path, file); if (!image && !panel->defIcon)
if (path) { create_default_icon(panel);
image = RLoadImage(panel->scr->rcontext, path, 0);
wfree(path);
}
}
if (image)
panel->defIcon = scaleDownIfNeeded(image);
image = NULL;
}
if (!image && panel->defIcon) if (!image && panel->defIcon)
image = RRetainImage(panel->defIcon); image = RRetainImage(panel->defIcon);