diff --git a/src/appicon.c b/src/appicon.c index 45911b82..a90e35b2 100644 --- a/src/appicon.c +++ b/src/appicon.c @@ -109,7 +109,6 @@ void wApplicationExtractDirPackIcon(WScreen * scr, char *path, char *wm_instance WAppIcon *wAppIconCreateForDock(WScreen *scr, char *command, char *wm_instance, char *wm_class, int tile) { WAppIcon *aicon; - char *path; aicon = wmalloc(sizeof(WAppIcon)); wretain(aicon); @@ -127,12 +126,8 @@ WAppIcon *wAppIconCreateForDock(WScreen *scr, char *command, char *wm_instance, if (wm_instance) aicon->wm_instance = wstrdup(wm_instance); - /* Search the icon using instance and class, without default icon */ - path = get_default_icon_filename(scr, wm_instance, wm_class, command, False); + aicon->icon = icon_create_for_dock(scr, command, wm_instance, wm_class, tile); - aicon->icon = icon_create_for_dock(scr, path, tile); - if (path) - wfree(path); #ifdef XDND wXDNDMakeAwareness(aicon->icon->core->window); #endif diff --git a/src/icon.c b/src/icon.c index 73592bcb..e950a7d6 100644 --- a/src/icon.c +++ b/src/icon.c @@ -127,38 +127,44 @@ WIcon *icon_create_for_wwindow(WWindow *wwin) icon->show_title = 1; #endif - /* Get the application icon, default included */ - file = get_default_icon_filename(scr, wwin->wm_instance, wwin->wm_class, NULL, True); - if (file) { - icon->file = wstrdup(file); - icon->file_image = get_default_icon_rimage(scr, icon->file, wPreferences.icon_size); - } - icon->icon_name = wNETWMGetIconName(wwin->client_win); if (icon->icon_name) wwin->flags.net_has_icon_title = 1; else wGetIconName(dpy, wwin->client_win, &icon->icon_name); + /* Get the application icon, default included */ + file = get_default_icon_filename(scr, wwin->wm_instance, wwin->wm_class, NULL, True); + if (file) { + icon->file = wstrdup(file); + icon->file_image = get_default_icon_rimage(scr, icon->file, wPreferences.icon_size); + wfree(file); + } + icon->tile_type = TILE_NORMAL; wIconUpdate(icon); - XFlush(dpy); - WMAddNotificationObserver(appearanceObserver, icon, WNIconAppearanceSettingsChanged, icon); WMAddNotificationObserver(tileObserver, icon, WNIconTileSettingsChanged, icon); + return icon; } -WIcon *icon_create_for_dock(WScreen *scr, char *iconfile, int tile) +WIcon *icon_create_for_dock(WScreen *scr, char *command, char *wm_instance, char *wm_class, int tile) { WIcon *icon; + char *file = NULL; icon = icon_create_core(scr, 0, 0); - icon->file_image = get_default_icon_rimage(scr, iconfile, wPreferences.icon_size); - icon->file = wstrdup(iconfile); + /* Search the icon using instance and class, without default icon */ + file = get_default_icon_filename(scr, wm_instance, wm_class, command, False); + if (file) { + icon->file = wstrdup(file); + icon->file_image = get_default_icon_rimage(scr, icon->file, wPreferences.icon_size); + wfree(file); + } icon->tile_type = tile; diff --git a/src/icon.h b/src/icon.h index 7de9e504..f0786cbf 100644 --- a/src/icon.h +++ b/src/icon.h @@ -54,7 +54,7 @@ typedef struct WIcon { * color */ } WIcon; -WIcon *icon_create_for_dock(WScreen *scr, char *iconfile, int tile); +WIcon *icon_create_for_dock(WScreen *scr, char *command, char *wm_instance, char *wm_class, int tile); WIcon *icon_create_for_wwindow(WWindow *wwin); void wIconDestroy(WIcon *icon);