Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
W
wine-winehq
Project
Project
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Registry
Registry
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
wine
wine-winehq
Commits
26fcfb4b
Commit
26fcfb4b
authored
Nov 02, 2008
by
Damjan Jovanovic
Committed by
Alexandre Julliard
Nov 03, 2008
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
winemenubuilder: Generate icons in winemenubuilder instead of wineshelllink.
parent
5af3af2b
Show whitespace changes
Inline
Side-by-side
Showing
2 changed files
with
90 additions
and
55 deletions
+90
-55
winemenubuilder.c
programs/winemenubuilder/winemenubuilder.c
+89
-37
wineshelllink
tools/wineshelllink
+1
-18
No files found.
programs/winemenubuilder/winemenubuilder.c
View file @
26fcfb4b
...
...
@@ -6,6 +6,7 @@
* Copyright 2003 Mike McCormack for CodeWeavers
* Copyright 2004 Dmitry Timoshkov
* Copyright 2005 Bill Medland
* Copyright 2008 Damjan Jovanovic
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
...
...
@@ -169,6 +170,9 @@ MAKE_FUNCPTR(png_write_info);
MAKE_FUNCPTR
(
png_write_row
);
#undef MAKE_FUNCPTR
static
char
*
xdg_config_dir
;
static
char
*
xdg_data_dir
;
static
void
*
load_libpng
(
void
)
{
if
((
libpng_handle
=
wine_dlopen
(
SONAME_LIBPNG
,
RTLD_NOW
,
NULL
,
0
))
!=
NULL
)
...
...
@@ -665,58 +669,75 @@ static unsigned short crc16(const char* string)
return
crc
;
}
/* extract an icon from an exe or icon file; helper for IPersistFile_fnSave */
static
char
*
extract_icon
(
LPCWSTR
path
,
int
index
,
BOOL
bWait
)
static
char
*
heap_printf
(
const
char
*
format
,
...)
{
unsigned
short
crc
;
char
*
iconsdir
,
*
ico_path
,
*
ico_name
,
*
xpm_path
;
char
*
s
;
HKEY
hkey
;
va_list
args
;
int
size
=
4096
;
char
*
buffer
;
int
n
;
/* Where should we save the icon? */
WINE_TRACE
(
"path=[%s] index=%d
\n
"
,
wine_dbgstr_w
(
path
),
index
);
iconsdir
=
NULL
;
/* Default is no icon */
/* @@ Wine registry key: HKCU\Software\Wine\WineMenuBuilder */
if
(
!
RegOpenKeyA
(
HKEY_CURRENT_USER
,
"Software
\\
Wine
\\
WineMenuBuilder"
,
&
hkey
))
va_start
(
args
,
format
);
while
(
1
)
{
static
const
WCHAR
IconsDirW
[]
=
{
'I'
,
'c'
,
'o'
,
'n'
,
's'
,
'D'
,
'i'
,
'r'
,
0
};
LPWSTR
iconsdirW
;
DWORD
size
=
0
;
buffer
=
HeapAlloc
(
GetProcessHeap
(),
0
,
size
);
if
(
buffer
==
NULL
)
break
;
n
=
vsnprintf
(
buffer
,
size
,
format
,
args
);
if
(
n
==
-
1
)
size
*=
2
;
else
if
(
n
>=
size
)
size
=
n
+
1
;
else
break
;
HeapFree
(
GetProcessHeap
(),
0
,
buffer
);
}
va_end
(
args
);
return
buffer
;
}
if
(
!
RegQueryValueExW
(
hkey
,
IconsDirW
,
0
,
NULL
,
NULL
,
&
size
)
)
{
iconsdirW
=
HeapAlloc
(
GetProcessHeap
(),
0
,
size
)
;
RegQueryValueExW
(
hkey
,
IconsDirW
,
0
,
NULL
,
(
LPBYTE
)
iconsdirW
,
&
size
)
;
static
BOOL
create_directories
(
char
*
directory
)
{
BOOL
ret
=
TRUE
;
int
i
;
if
(
!
(
iconsdir
=
wine_get_unix_file_name
(
iconsdirW
))
)
for
(
i
=
0
;
directory
[
i
];
i
++
)
{
int
n
=
WideCharToMultiByte
(
CP_UNIXCP
,
0
,
iconsdirW
,
-
1
,
NULL
,
0
,
NULL
,
NULL
);
iconsdir
=
HeapAlloc
(
GetProcessHeap
(),
0
,
n
);
WideCharToMultiByte
(
CP_UNIXCP
,
0
,
iconsdirW
,
-
1
,
iconsdir
,
n
,
NULL
,
NULL
)
;
}
HeapFree
(
GetProcessHeap
(),
0
,
iconsdirW
)
;
if
(
i
>
0
&&
directory
[
i
]
==
'/'
)
{
directory
[
i
]
=
0
;
mkdir
(
directory
,
0777
);
directory
[
i
]
=
'/'
;
}
RegCloseKey
(
hkey
);
}
if
(
mkdir
(
directory
,
0777
)
&&
errno
!=
EEXIST
)
ret
=
FALSE
;
return
ret
;
}
/* extract an icon from an exe or icon file; helper for IPersistFile_fnSave */
static
char
*
extract_icon
(
LPCWSTR
path
,
int
index
,
BOOL
bWait
)
{
unsigned
short
crc
;
char
*
iconsdir
=
NULL
,
*
ico_path
=
NULL
,
*
ico_name
,
*
xpm_path
=
NULL
;
char
*
s
;
int
n
;
if
(
!
iconsdir
)
/* Where should we save the icon? */
WINE_TRACE
(
"path=[%s] index=%d
\n
"
,
wine_dbgstr_w
(
path
),
index
);
iconsdir
=
heap_printf
(
"%s/icons"
,
xdg_data_dir
);
if
(
iconsdir
)
{
WCHAR
path
[
MAX_PATH
];
if
(
GetTempPathW
(
MAX_PATH
,
path
))
iconsdir
=
wine_get_unix_file_name
(
path
);
if
(
!
iconsdir
)
if
(
mkdir
(
iconsdir
,
0777
)
&&
errno
!=
EEXIST
)
{
WINE_
TRACE
(
"no IconsDir
\n
"
);
return
NULL
;
/* No icon created */
WINE_
WARN
(
"couldn't make icons directory %s
\n
"
,
wine_dbgstr_a
(
iconsdir
)
);
goto
end
;
}
}
if
(
!*
iconsdir
)
else
{
WINE_TRACE
(
"icon generation disabled
\n
"
);
HeapFree
(
GetProcessHeap
(),
0
,
iconsdir
);
return
NULL
;
/* No icon created */
WINE_TRACE
(
"no icon created
\n
"
);
return
NULL
;
}
/* Determine the icon base name */
...
...
@@ -1364,6 +1385,35 @@ static CHAR *next_token( LPSTR *p )
return
token
;
}
static
BOOL
init_xdg
(
void
)
{
if
(
getenv
(
"XDG_CONFIG_HOME"
))
xdg_config_dir
=
heap_printf
(
"%s/menus/applications-merged"
,
getenv
(
"XDG_CONFIG_HOME"
));
else
xdg_config_dir
=
heap_printf
(
"%s/.config/menus/applications-merged"
,
getenv
(
"HOME"
));
if
(
xdg_config_dir
)
{
if
(
getenv
(
"XDG_DATA_HOME"
))
xdg_data_dir
=
heap_printf
(
"%s"
,
getenv
(
"XDG_DATA_HOME"
));
else
xdg_data_dir
=
heap_printf
(
"%s/.local/share"
,
getenv
(
"HOME"
));
if
(
xdg_data_dir
)
{
char
*
buffer
;
create_directories
(
xdg_data_dir
);
buffer
=
heap_printf
(
"%s/desktop-directories"
,
xdg_data_dir
);
if
(
buffer
)
{
mkdir
(
buffer
,
0777
);
HeapFree
(
GetProcessHeap
(),
0
,
buffer
);
}
return
TRUE
;
}
HeapFree
(
GetProcessHeap
(),
0
,
xdg_config_dir
);
}
return
FALSE
;
}
/***********************************************************************
*
* WinMain
...
...
@@ -1374,6 +1424,8 @@ int PASCAL WinMain (HINSTANCE hInstance, HINSTANCE prev, LPSTR cmdline, int show
BOOL
bWait
=
FALSE
;
int
ret
=
0
;
init_xdg
();
for
(
p
=
cmdline
;
p
&&
*
p
;
)
{
token
=
next_token
(
&
p
);
...
...
tools/wineshelllink
View file @
26fcfb4b
...
...
@@ -93,7 +93,7 @@ StartupWMClass=Wine
EOF
[
-z
"
$descr
"
]
||
echo
"Comment=
$descr
"
[
-z
"
$workdir
"
]
||
echo
"Path=
$workdir
"
[
-z
"
$
xpmicon
"
]
||
echo
"Icon=
$xpm
icon
"
[
-z
"
$
icon
"
]
||
echo
"Icon=
$
icon
"
}
directory_entry
()
...
...
@@ -111,21 +111,6 @@ EOF
fi
}
# copy the icon file to a specified dir and set xpmicon to the resulting path
copy_icon
()
{
if
[
-f
"
$icon
"
]
then
xpmicon
=
`
basename
"
$icon
"
`
xpmicon
=
${
xpmicon
%.*
}
mkdir
-p
"
$1
"
cp
"
$icon
"
"
$1
"
else
xpmicon
=
""
fi
}
# XDG
xdg_config_dir
=
"
${
XDG_CONFIG_HOME
:-
$HOME
/.config
}
/menus/applications-merged"
...
...
@@ -207,8 +192,6 @@ write_menu_file()
}
copy_icon
"
$xdg_data_dir
/icons"
linkname
=
`
basename
"
$link
"
`
if
[
$mode
=
"menu"
]
;
then
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment