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
a551dfe3
Commit
a551dfe3
authored
Apr 19, 2010
by
Alexandre Julliard
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
winex11: Add the small icon to the NET_WM_ICON hint.
parent
f0644c6d
Show whitespace changes
Inline
Side-by-side
Showing
1 changed file
with
47 additions
and
17 deletions
+47
-17
window.c
dlls/winex11.drv/window.c
+47
-17
No files found.
dlls/winex11.drv/window.c
View file @
a551dfe3
...
...
@@ -880,16 +880,28 @@ failed:
*
* Set the icon wm hints
*/
static
void
set_icon_hints
(
Display
*
display
,
struct
x11drv_win_data
*
data
,
HICON
hIcon
)
static
void
set_icon_hints
(
Display
*
display
,
struct
x11drv_win_data
*
data
,
HICON
icon_big
,
HICON
icon_small
)
{
XWMHints
*
hints
=
data
->
wm_hints
;
if
(
!
icon_big
)
{
icon_big
=
(
HICON
)
SendMessageW
(
data
->
hwnd
,
WM_GETICON
,
ICON_BIG
,
0
);
if
(
!
icon_big
)
icon_big
=
(
HICON
)
GetClassLongPtrW
(
data
->
hwnd
,
GCLP_HICON
);
}
if
(
!
icon_small
)
{
icon_small
=
(
HICON
)
SendMessageW
(
data
->
hwnd
,
WM_GETICON
,
ICON_SMALL
,
0
);
if
(
!
icon_small
)
icon_small
=
(
HICON
)
GetClassLongPtrW
(
data
->
hwnd
,
GCLP_HICONSM
);
}
if
(
data
->
hWMIconBitmap
)
DeleteObject
(
data
->
hWMIconBitmap
);
if
(
data
->
hWMIconMask
)
DeleteObject
(
data
->
hWMIconMask
);
data
->
hWMIconBitmap
=
0
;
data
->
hWMIconMask
=
0
;
if
(
!
hIcon
)
if
(
!
icon_big
)
{
if
(
!
data
->
icon_window
)
create_icon_window
(
display
,
data
);
hints
->
icon_window
=
data
->
icon_window
;
...
...
@@ -905,7 +917,7 @@ static void set_icon_hints( Display *display, struct x11drv_win_data *data, HICO
unsigned
int
size
;
unsigned
long
*
bits
;
GetIconInfo
(
hIcon
,
&
ii
);
GetIconInfo
(
icon_big
,
&
ii
);
GetObjectW
(
ii
.
hbmMask
,
sizeof
(
bm
),
&
bm
);
rcMask
.
top
=
0
;
...
...
@@ -917,8 +929,36 @@ static void set_icon_hints( Display *display, struct x11drv_win_data *data, HICO
hbmOrig
=
SelectObject
(
hDC
,
ii
.
hbmMask
);
InvertRect
(
hDC
,
&
rcMask
);
SelectObject
(
hDC
,
ii
.
hbmColor
);
/* force the color bitmap to x11drv mode too */
SelectObject
(
hDC
,
hbmOrig
);
data
->
hWMIconBitmap
=
ii
.
hbmColor
;
data
->
hWMIconMask
=
ii
.
hbmMask
;
hints
->
icon_pixmap
=
X11DRV_get_pixmap
(
data
->
hWMIconBitmap
);
hints
->
icon_mask
=
X11DRV_get_pixmap
(
data
->
hWMIconMask
);
destroy_icon_window
(
display
,
data
);
hints
->
flags
=
(
hints
->
flags
&
~
IconWindowHint
)
|
IconPixmapHint
|
IconMaskHint
;
bits
=
get_bitmap_argb
(
hDC
,
ii
.
hbmColor
,
ii
.
hbmMask
,
&
size
);
if
(
GetIconInfo
(
icon_small
,
&
ii
))
{
unsigned
int
size_small
;
unsigned
long
*
bits_small
,
*
new
;
if
((
bits_small
=
get_bitmap_argb
(
hDC
,
ii
.
hbmColor
,
ii
.
hbmMask
,
&
size_small
)))
{
if
((
new
=
HeapReAlloc
(
GetProcessHeap
(),
0
,
bits
,
(
size
+
size_small
)
*
sizeof
(
unsigned
long
)
)))
{
bits
=
new
;
memcpy
(
bits
+
size
,
bits_small
,
size_small
*
sizeof
(
unsigned
long
)
);
size
+=
size_small
;
}
HeapFree
(
GetProcessHeap
(),
0
,
bits_small
);
}
DeleteObject
(
ii
.
hbmColor
);
DeleteObject
(
ii
.
hbmMask
);
}
wine_tsx11_lock
();
if
(
bits
)
XChangeProperty
(
display
,
data
->
whole_window
,
x11drv_atom
(
_NET_WM_ICON
),
...
...
@@ -927,16 +967,8 @@ static void set_icon_hints( Display *display, struct x11drv_win_data *data, HICO
XDeleteProperty
(
display
,
data
->
whole_window
,
x11drv_atom
(
_NET_WM_ICON
)
);
wine_tsx11_unlock
();
HeapFree
(
GetProcessHeap
(),
0
,
bits
);
SelectObject
(
hDC
,
hbmOrig
);
DeleteDC
(
hDC
);
data
->
hWMIconBitmap
=
ii
.
hbmColor
;
data
->
hWMIconMask
=
ii
.
hbmMask
;
hints
->
icon_pixmap
=
X11DRV_get_pixmap
(
data
->
hWMIconBitmap
);
hints
->
icon_mask
=
X11DRV_get_pixmap
(
data
->
hWMIconMask
);
destroy_icon_window
(
display
,
data
);
hints
->
flags
=
(
hints
->
flags
&
~
IconWindowHint
)
|
IconPixmapHint
|
IconMaskHint
;
DeleteDC
(
hDC
);
}
}
...
...
@@ -1060,10 +1092,8 @@ static void set_initial_wm_hints( Display *display, struct x11drv_win_data *data
if
(
data
->
wm_hints
)
{
HICON
icon
=
(
HICON
)
SendMessageW
(
data
->
hwnd
,
WM_GETICON
,
ICON_BIG
,
0
);
if
(
!
icon
)
icon
=
(
HICON
)
GetClassLongPtrW
(
data
->
hwnd
,
GCLP_HICON
);
data
->
wm_hints
->
flags
=
0
;
set_icon_hints
(
display
,
data
,
icon
);
set_icon_hints
(
display
,
data
,
0
,
0
);
}
}
...
...
@@ -2388,7 +2418,6 @@ void CDECL X11DRV_SetWindowIcon( HWND hwnd, UINT type, HICON icon )
Display
*
display
=
thread_display
();
struct
x11drv_win_data
*
data
;
if
(
type
!=
ICON_BIG
)
return
;
/* nothing to do here */
if
(
!
(
data
=
X11DRV_get_win_data
(
hwnd
)))
return
;
if
(
!
data
->
whole_window
)
return
;
...
...
@@ -2396,7 +2425,8 @@ void CDECL X11DRV_SetWindowIcon( HWND hwnd, UINT type, HICON icon )
if
(
data
->
wm_hints
)
{
set_icon_hints
(
display
,
data
,
icon
);
if
(
type
==
ICON_BIG
)
set_icon_hints
(
display
,
data
,
icon
,
0
);
else
set_icon_hints
(
display
,
data
,
0
,
icon
);
wine_tsx11_lock
();
XSetWMHints
(
display
,
data
->
whole_window
,
data
->
wm_hints
);
wine_tsx11_unlock
();
...
...
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