1
0
mirror of https://github.com/gryf/wmaker.git synced 2025-12-22 14:08:06 +01:00

Solved bug if icon doesn't exists

There is a bug in wmaker with icon files set in config files, but
that doesn't exist in the disk. For example, if the config files have:

etc/WindowMaker/WMWindowAttributes:
  xcalc = {AlwaysUserIcon = Yes;Icon = "HP-16C-48.xpm";};
share/WindowMaker/IconSets/Default.iconset:
  xcalc = {AlwaysUserIcon = Yes;Icon = "HP-16C-48.xpm";};

But the icon "HP-16C-48.xpm" doesn't exist in the disk, wmaker does:

1. Load the config file in memory, in a database
2. When the application is launched, wmaker tries to find their icon in
   the database (using wDefaultGetIconFile), the icon is found: HP-16C-48.xpm
3. When WindowMaker try to find the full path for the icon, using FindImage(),
   WindowMaker cannot find the icon, and returns NULL.
   Even, if the user set the default_icon boolean variable to True, wmaker
   finds in the database the wrong icon.

This patch checks that the icon exists both in the database AND in the disk. If the
icon doesn't exist in the disk and the default_icon variable is set to True,
then windowmaker loads the default icon using the function get_default_image()
because this function searches the default icon directly.

The function get_default_image() is moved from icon.c to wdefaults.c because
it is now used in both places. This function is now splitted, to find the file
(get_default_image_path) path and the file image (get_default_image)
This commit is contained in:
Rodolfo García Peñas (kix)
2012-11-03 19:54:02 +01:00
committed by Carlos R. Mafra
parent 314f1dc907
commit 529276a395
3 changed files with 51 additions and 26 deletions

View File

@@ -41,6 +41,7 @@ void wDefaultFillAttributes(char *instance, char *class,
WWindowAttributes *attr, WWindowAttributes *mask,
Bool useGlobalDefault);
char *get_default_image_path(WScreen *scr);
char *wDefaultGetIconFile(char *instance, char *class, Bool default_icon);
RImage * wDefaultGetImage(WScreen *scr, char *winstance, char *wclass, int max_size);
@@ -48,6 +49,7 @@ RImage * wDefaultGetImage(WScreen *scr, char *winstance, char *wclass, int max_s
int wDefaultGetStartWorkspace(WScreen *scr, char *instance, char *class);
void wDefaultChangeIcon(WScreen *scr, char *instance, char* class, char *file);
RImage *get_default_image(WScreen *scr);
char *get_default_icon_filename(WScreen *scr, char *winstance, char *wclass, char *command,
Bool default_icon);
RImage *get_rimage_from_file(WScreen *scr, char *file_name, int max_size);