From: Rémi Bernon rbernon@codeweavers.com
--- dlls/win32u/defwnd.c | 16 ++++- dlls/win32u/driver.c | 6 +- dlls/win32u/ntuser_private.h | 1 + dlls/win32u/win32u_private.h | 1 + dlls/win32u/window.c | 35 +++++++++- dlls/winewayland.drv/wayland_surface.c | 2 +- dlls/winewayland.drv/waylanddrv.h | 4 +- dlls/winewayland.drv/waylanddrv_main.c | 2 +- dlls/winewayland.drv/window.c | 60 +++------------- dlls/winex11.drv/init.c | 2 +- dlls/winex11.drv/window.c | 95 ++++++-------------------- dlls/winex11.drv/x11drv.h | 2 +- include/wine/gdi_driver.h | 4 +- 13 files changed, 91 insertions(+), 139 deletions(-)
diff --git a/dlls/win32u/defwnd.c b/dlls/win32u/defwnd.c index 4055d5b9a68..870ef376e85 100644 --- a/dlls/win32u/defwnd.c +++ b/dlls/win32u/defwnd.c @@ -375,7 +375,10 @@ static HICON get_window_icon( HWND hwnd, WPARAM type )
static HICON set_window_icon( HWND hwnd, WPARAM type, HICON icon ) { - HICON ret = 0; + HWND parent = NtUserGetAncestor( hwnd, GA_PARENT ); + BOOL is_child = parent && parent != NtUserGetDesktopWindow(); + HICON icon_small, ret = 0; + ICONINFO ii, ii_small; WND *win;
if (!(win = get_win_ptr( hwnd ))) return 0; @@ -414,9 +417,18 @@ static HICON set_window_icon( HWND hwnd, WPARAM type, HICON icon ) win->hIcon = icon; break; } + + icon = win->hIcon; + icon_small = win->hIconSmall2 ? win->hIconSmall2 : win->hIconSmall; + win->has_icons = !is_child; release_win_ptr( win );
- user_driver->pSetWindowIcon( hwnd, type, icon ); + if (!is_child && (icon = get_window_icon_info( hwnd, ICON_BIG, icon, &ii ))) + { + icon_small = get_window_icon_info( hwnd, ICON_SMALL, icon_small, &ii_small ); + user_driver->pSetWindowIcons( hwnd, icon, &ii, icon_small, &ii_small ); + } + return ret; }
diff --git a/dlls/win32u/driver.c b/dlls/win32u/driver.c index 2c262c81943..2a269db8c65 100644 --- a/dlls/win32u/driver.c +++ b/dlls/win32u/driver.c @@ -834,7 +834,7 @@ static void nulldrv_SetWindowRgn( HWND hwnd, HRGN hrgn, BOOL redraw ) { }
-static void nulldrv_SetWindowIcon( HWND hwnd, UINT type, HICON icon ) +static void nulldrv_SetWindowIcons( HWND hwnd, HICON icon, const ICONINFO *ii, HICON icon_small, const ICONINFO *ii_small ) { }
@@ -1278,7 +1278,7 @@ static const struct user_driver_funcs lazy_load_driver = loaderdrv_SetLayeredWindowAttributes, nulldrv_SetParent, loaderdrv_SetWindowRgn, - nulldrv_SetWindowIcon, + nulldrv_SetWindowIcons, nulldrv_SetWindowStyle, nulldrv_SetWindowText, nulldrv_ShowWindow, @@ -1375,7 +1375,7 @@ void __wine_set_user_driver( const struct user_driver_funcs *funcs, UINT version SET_USER_FUNC(SetLayeredWindowAttributes); SET_USER_FUNC(SetParent); SET_USER_FUNC(SetWindowRgn); - SET_USER_FUNC(SetWindowIcon); + SET_USER_FUNC(SetWindowIcons); SET_USER_FUNC(SetWindowStyle); SET_USER_FUNC(SetWindowText); SET_USER_FUNC(ShowWindow); diff --git a/dlls/win32u/ntuser_private.h b/dlls/win32u/ntuser_private.h index 7bd35530915..a3022eafa4e 100644 --- a/dlls/win32u/ntuser_private.h +++ b/dlls/win32u/ntuser_private.h @@ -64,6 +64,7 @@ typedef struct tagWND HICON hIcon; /* window's icon */ HICON hIconSmall; /* window's small icon */ HICON hIconSmall2; /* window's secondary small icon, derived from hIcon */ + BOOL has_icons; /* window's icons has been initialized */ HIMC imc; /* window's input context */ struct window_surface *surface; /* Window surface if any */ struct opengl_drawable *current_drawable; /* current GL client surface for this window */ diff --git a/dlls/win32u/win32u_private.h b/dlls/win32u/win32u_private.h index 6eaa7270b01..4d4570f06f5 100644 --- a/dlls/win32u/win32u_private.h +++ b/dlls/win32u/win32u_private.h @@ -296,6 +296,7 @@ extern HWND get_shell_window(void); extern HWND get_progman_window(void); extern HWND get_taskman_window(void); extern BOOL is_client_surface_window( struct client_surface *surface, HWND hwnd ); +extern HICON get_window_icon_info( HWND hwnd, UINT type, HICON icon, ICONINFO *ret );
/* to release pointers retrieved by win_get_ptr */ static inline void release_win_ptr( struct tagWND *ptr ) diff --git a/dlls/win32u/window.c b/dlls/win32u/window.c index 7e7726f52f9..a49273fec0d 100644 --- a/dlls/win32u/window.c +++ b/dlls/win32u/window.c @@ -2122,6 +2122,24 @@ static void update_children_window_state( HWND hwnd ) free( children ); }
+static HICON get_icon_info( HICON icon, ICONINFO *ii ) +{ + return icon && NtUserGetIconInfo( icon, ii, NULL, NULL, NULL, 0 ) ? icon : NULL; +} + +HICON get_window_icon_info( HWND hwnd, UINT type, HICON icon, ICONINFO *ret ) +{ + if ((icon = get_icon_info( icon, ret ))) return icon; + if ((icon = get_icon_info( (HICON)send_message( hwnd, WM_GETICON, type, 0 ), ret ))) return icon; + if ((icon = get_icon_info( (HICON)get_class_long_ptr( hwnd, GCLP_HICON, FALSE ), ret ))) return icon; + if (type == ICON_BIG) + { + icon = LoadImageW( 0, (const WCHAR *)IDI_WINLOGO, IMAGE_ICON, 0, 0, LR_SHARED | LR_DEFAULTSIZE ); + return get_icon_info( icon, ret ); + } + return NULL; +} + /*********************************************************************** * apply_window_pos * @@ -2133,11 +2151,13 @@ static BOOL apply_window_pos( HWND hwnd, HWND insert_after, UINT swp_flags, stru struct window_rects monitor_rects; WND *win; HWND owner_hint, surface_win = 0, parent = NtUserGetAncestor( hwnd, GA_PARENT ); - BOOL ret, is_fullscreen, is_layered, is_child; + BOOL ret, is_fullscreen, is_layered, is_child, need_icons = FALSE; struct window_rects old_rects; RECT extra_rects[3]; struct window_surface *old_surface; UINT raw_dpi, monitor_dpi; + HICON icon, icon_small; + ICONINFO ii, ii_small;
is_layered = new_surface && new_surface->alpha_mask; is_fullscreen = is_window_rect_full_screen( &new_rects->visible, get_thread_dpi() ); @@ -2217,6 +2237,13 @@ static BOOL apply_window_pos( HWND hwnd, HWND insert_after, UINT swp_flags, stru if (((swp_flags & SWP_AGG_NOPOSCHANGE) != SWP_AGG_NOPOSCHANGE) || (swp_flags & (SWP_HIDEWINDOW | SWP_SHOWWINDOW | SWP_STATECHANGED | SWP_FRAMECHANGED))) invalidate_dce( win, &old_rects.window ); + + if (win->dwStyle & WS_VISIBLE && !is_child && !win->has_icons) + { + icon = win->hIcon; + icon_small = win->hIconSmall2 ? win->hIconSmall2 : win->hIconSmall; + win->has_icons = need_icons = TRUE; + } }
release_win_ptr( win ); @@ -2273,6 +2300,12 @@ static BOOL apply_window_pos( HWND hwnd, HWND insert_after, UINT swp_flags, stru } }
+ if (need_icons && (icon = get_window_icon_info( hwnd, ICON_BIG, icon, &ii ))) + { + icon_small = get_window_icon_info( hwnd, ICON_SMALL, icon_small, &ii_small ); + user_driver->pSetWindowIcons( hwnd, icon, &ii, icon_small, &ii_small ); + } + owner_hint = NtUserGetWindowRelative(hwnd, GW_OWNER); /* fallback to any window that is right below our top left corner */ if (!owner_hint) owner_hint = NtUserWindowFromPoint(new_rects->window.left - 1, new_rects->window.top - 1); diff --git a/dlls/winewayland.drv/wayland_surface.c b/dlls/winewayland.drv/wayland_surface.c index 7da7c4212f6..49af34633bc 100644 --- a/dlls/winewayland.drv/wayland_surface.c +++ b/dlls/winewayland.drv/wayland_surface.c @@ -1221,7 +1221,7 @@ void wayland_surface_set_title(struct wayland_surface *surface, LPCWSTR text) /********************************************************************** * wayland_surface_set_icon */ -void wayland_surface_set_icon(struct wayland_surface *surface, UINT type, ICONINFO *ii) +void wayland_surface_set_icon(struct wayland_surface *surface, UINT type, const ICONINFO *ii) { HDC hDC; struct wayland_shm_buffer *icon_buf; diff --git a/dlls/winewayland.drv/waylanddrv.h b/dlls/winewayland.drv/waylanddrv.h index cb331df789d..2ec87c768dd 100644 --- a/dlls/winewayland.drv/waylanddrv.h +++ b/dlls/winewayland.drv/waylanddrv.h @@ -332,7 +332,7 @@ struct wayland_client_surface *wayland_client_surface_create(HWND hwnd); void wayland_client_surface_attach(struct wayland_client_surface *client, HWND toplevel); void wayland_surface_ensure_contents(struct wayland_surface *surface); void wayland_surface_set_title(struct wayland_surface *surface, LPCWSTR title); -void wayland_surface_set_icon(struct wayland_surface *surface, UINT type, ICONINFO *ii); +void wayland_surface_set_icon(struct wayland_surface *surface, UINT type, const ICONINFO *ii);
static inline BOOL wayland_surface_is_toplevel(struct wayland_surface *surface) { @@ -445,7 +445,7 @@ BOOL WAYLAND_SetIMECompositionRect(HWND hwnd, RECT rect); void WAYLAND_SetCursor(HWND hwnd, HCURSOR hcursor); BOOL WAYLAND_SetCursorPos(INT x, INT y); void WAYLAND_SetLayeredWindowAttributes(HWND hwnd, COLORREF key, BYTE alpha, DWORD flags); -void WAYLAND_SetWindowIcon(HWND hwnd, UINT type, HICON icon); +void WAYLAND_SetWindowIcons(HWND hwnd, HICON icon, const ICONINFO *ii, HICON icon_small, const ICONINFO *ii_small); void WAYLAND_SetWindowStyle(HWND hwnd, INT offset, STYLESTRUCT *style); void WAYLAND_SetWindowText(HWND hwnd, LPCWSTR text); LRESULT WAYLAND_SysCommand(HWND hwnd, WPARAM wparam, LPARAM lparam, const POINT *pos); diff --git a/dlls/winewayland.drv/waylanddrv_main.c b/dlls/winewayland.drv/waylanddrv_main.c index 4e012f0e3a3..cdb5dd8a956 100644 --- a/dlls/winewayland.drv/waylanddrv_main.c +++ b/dlls/winewayland.drv/waylanddrv_main.c @@ -45,7 +45,7 @@ static const struct user_driver_funcs waylanddrv_funcs = .pSetCursor = WAYLAND_SetCursor, .pSetCursorPos = WAYLAND_SetCursorPos, .pSetLayeredWindowAttributes = WAYLAND_SetLayeredWindowAttributes, - .pSetWindowIcon = WAYLAND_SetWindowIcon, + .pSetWindowIcons = WAYLAND_SetWindowIcons, .pSetWindowStyle = WAYLAND_SetWindowStyle, .pSetWindowText = WAYLAND_SetWindowText, .pSysCommand = WAYLAND_SysCommand, diff --git a/dlls/winewayland.drv/window.c b/dlls/winewayland.drv/window.c index 1beeb43a6e2..3b94112dc6d 100644 --- a/dlls/winewayland.drv/window.c +++ b/dlls/winewayland.drv/window.c @@ -424,29 +424,6 @@ BOOL WAYLAND_WindowPosChanging(HWND hwnd, UINT swp_flags, BOOL shaped, const str return TRUE; }
-static HICON get_icon_info(HICON icon, ICONINFO *ii) -{ - return icon && NtUserGetIconInfo(icon, ii, NULL, NULL, NULL, 0) ? icon : NULL; -} - -static HICON get_window_icon(HWND hwnd, UINT type, HICON icon, ICONINFO *ret) -{ - icon = get_icon_info(icon, ret); - if (!icon) - { - icon = get_icon_info((HICON)send_message(hwnd, WM_GETICON, type, 0), ret); - if (!icon) - icon = get_icon_info((HICON)NtUserGetClassLongPtrW(hwnd, GCLP_HICON), ret); - if (!icon && type == ICON_BIG) - { - icon = LoadImageW(0, (const WCHAR *)IDI_WINLOGO, IMAGE_ICON, 0, 0, - LR_SHARED | LR_DEFAULTSIZE); - icon = get_icon_info(icon, ret); - } - } - return icon; -} - /*********************************************************************** * WAYLAND_WindowPosChanged */ @@ -457,7 +434,7 @@ void WAYLAND_WindowPosChanged(HWND hwnd, HWND insert_after, HWND owner_hint, UIN struct wayland_surface *toplevel_surface; struct wayland_client_surface *client; struct wayland_win_data *data, *toplevel_data; - BOOL managed, needs_icon; + BOOL managed;
TRACE("hwnd %p new_rects %s after %p flags %08x\n", hwnd, debugstr_window_rects(new_rects), insert_after, swp_flags);
@@ -495,27 +472,7 @@ void WAYLAND_WindowPosChanged(HWND hwnd, HWND insert_after, HWND owner_hint, UIN wayland_win_data_update_wayland_state(data); }
- needs_icon = data->wayland_surface && !data->wayland_surface->big_icon_buffer && - wayland_surface_is_toplevel(data->wayland_surface) && - process_wayland.xdg_toplevel_icon_manager_v1; - wayland_win_data_release(data); - - if (needs_icon) - { - HICON big, small; - ICONINFO ii, ii_small; - big = get_window_icon(hwnd, ICON_BIG, 0, &ii); - small = get_window_icon(hwnd, ICON_SMALL, 0, &ii_small); - - if((data = wayland_win_data_get(hwnd))) - { - if (big) wayland_surface_set_icon(data->wayland_surface, ICON_BIG, &ii); - if (small) wayland_surface_set_icon(data->wayland_surface, ICON_SMALL, &ii_small); - - wayland_win_data_release(data); - } - } }
static void wayland_configure_window(HWND hwnd) @@ -699,22 +656,23 @@ static enum xdg_toplevel_resize_edge hittest_to_resize_edge(WPARAM hittest) }
/***************************************************************** - * WAYLAND_SetWindowIcon + * WAYLAND_SetWindowIcons */ -void WAYLAND_SetWindowIcon(HWND hwnd, UINT type, HICON icon) +void WAYLAND_SetWindowIcons(HWND hwnd, HICON icon, const ICONINFO *ii, HICON icon_small, const ICONINFO *ii_small) { struct wayland_win_data *data; - ICONINFO ii;
- TRACE("hwnd=%p type=%u icon=%p\n", hwnd, type, icon); + TRACE("hwnd=%p icon=%p ii=%p icon_small=%p ii_small=%p\n", hwnd, icon, ii, icon_small, ii_small);
if (process_wayland.xdg_toplevel_icon_manager_v1) { - icon = get_window_icon(hwnd, type, icon, &ii); - if (icon && (data = wayland_win_data_get(hwnd))) + if ((data = wayland_win_data_get(hwnd))) { if (data->wayland_surface && wayland_surface_is_toplevel(data->wayland_surface)) - wayland_surface_set_icon(data->wayland_surface, type, &ii); + { + wayland_surface_set_icon(data->wayland_surface, ICON_BIG, ii); + wayland_surface_set_icon(data->wayland_surface, ICON_SMALL, ii_small); + } wayland_win_data_release(data); } } diff --git a/dlls/winex11.drv/init.c b/dlls/winex11.drv/init.c index 98964430a20..08810b44024 100644 --- a/dlls/winex11.drv/init.c +++ b/dlls/winex11.drv/init.c @@ -653,7 +653,7 @@ static const struct user_driver_funcs x11drv_funcs = .pActivateWindow = X11DRV_ActivateWindow, .pSetLayeredWindowAttributes = X11DRV_SetLayeredWindowAttributes, .pSetParent = X11DRV_SetParent, - .pSetWindowIcon = X11DRV_SetWindowIcon, + .pSetWindowIcons = X11DRV_SetWindowIcons, .pSetWindowRgn = X11DRV_SetWindowRgn, .pSetWindowStyle = X11DRV_SetWindowStyle, .pSetWindowText = X11DRV_SetWindowText, diff --git a/dlls/winex11.drv/window.c b/dlls/winex11.drv/window.c index bf3b8f66603..f60c2ef750e 100644 --- a/dlls/winex11.drv/window.c +++ b/dlls/winex11.drv/window.c @@ -778,55 +778,25 @@ failed: }
-static HICON get_icon_info( HICON icon, ICONINFO *ii ) -{ - return icon && NtUserGetIconInfo( icon, ii, NULL, NULL, NULL, 0 ) ? icon : NULL; -} - /*********************************************************************** - * fetch_icon_data + * set_window_icon_data */ -static void fetch_icon_data( HWND hwnd, HICON icon_big, HICON icon_small ) +static void set_window_icon_data( struct x11drv_win_data *data, HICON icon, const ICONINFO *ii, + HICON icon_small, const ICONINFO *ii_small ) { - struct x11drv_win_data *data; - ICONINFO ii, ii_small; HDC hDC; unsigned int size; unsigned long *bits; Pixmap icon_pixmap, mask_pixmap;
- icon_big = get_icon_info( icon_big, &ii ); - if (!icon_big) - { - icon_big = get_icon_info( (HICON)send_message( hwnd, WM_GETICON, ICON_BIG, 0 ), &ii ); - if (!icon_big) - icon_big = get_icon_info( (HICON)NtUserGetClassLongPtrW( hwnd, GCLP_HICON ), &ii ); - if (!icon_big) - { - icon_big = LoadImageW( 0, (const WCHAR *)IDI_WINLOGO, IMAGE_ICON, 0, 0, - LR_SHARED | LR_DEFAULTSIZE ); - icon_big = get_icon_info( icon_big, &ii ); - } - } - - icon_small = get_icon_info( icon_small, &ii_small ); - if (!icon_small) - { - icon_small = get_icon_info( (HICON)send_message( hwnd, WM_GETICON, ICON_SMALL, 0 ), &ii_small ); - if (!icon_small) - icon_small = get_icon_info( (HICON)NtUserGetClassLongPtrW( hwnd, GCLP_HICONSM ), &ii_small ); - } - - if (!icon_big) return; - hDC = NtGdiCreateCompatibleDC(0); - bits = get_bitmap_argb( hDC, ii.hbmColor, ii.hbmMask, &size ); + bits = get_bitmap_argb( hDC, ii->hbmColor, ii->hbmMask, &size ); if (bits && icon_small) { unsigned int size_small; unsigned long *bits_small, *new;
- if ((bits_small = get_bitmap_argb( hDC, ii_small.hbmColor, ii_small.hbmMask, &size_small )) && + if ((bits_small = get_bitmap_argb( hDC, ii_small->hbmColor, ii_small->hbmMask, &size_small )) && (bits_small[0] != bits[0] || bits_small[1] != bits[1])) /* size must be different */ { if ((new = realloc( bits, (size + size_small) * sizeof(unsigned long) ))) @@ -837,33 +807,23 @@ static void fetch_icon_data( HWND hwnd, HICON icon_big, HICON icon_small ) } } free( bits_small ); - NtGdiDeleteObjectApp( ii_small.hbmColor ); - NtGdiDeleteObjectApp( ii_small.hbmMask ); + NtGdiDeleteObjectApp( ii_small->hbmColor ); + NtGdiDeleteObjectApp( ii_small->hbmMask ); }
- if (!create_icon_pixmaps( hDC, &ii, &icon_pixmap, &mask_pixmap )) icon_pixmap = mask_pixmap = 0; + if (!create_icon_pixmaps( hDC, ii, &icon_pixmap, &mask_pixmap )) icon_pixmap = mask_pixmap = 0;
- NtGdiDeleteObjectApp( ii.hbmColor ); - NtGdiDeleteObjectApp( ii.hbmMask ); + NtGdiDeleteObjectApp( ii->hbmColor ); + NtGdiDeleteObjectApp( ii->hbmMask ); NtGdiDeleteObjectApp( hDC );
- if ((data = get_win_data( hwnd ))) - { - if (data->icon_pixmap) XFreePixmap( gdi_display, data->icon_pixmap ); - if (data->icon_mask) XFreePixmap( gdi_display, data->icon_mask ); - free( data->icon_bits ); - data->icon_pixmap = icon_pixmap; - data->icon_mask = mask_pixmap; - data->icon_bits = bits; - data->icon_size = size; - release_win_data( data ); - } - else - { - if (icon_pixmap) XFreePixmap( gdi_display, icon_pixmap ); - if (mask_pixmap) XFreePixmap( gdi_display, mask_pixmap ); - free( bits ); - } + if (data->icon_pixmap) XFreePixmap( gdi_display, data->icon_pixmap ); + if (data->icon_mask) XFreePixmap( gdi_display, data->icon_mask ); + free( data->icon_bits ); + data->icon_pixmap = icon_pixmap; + data->icon_mask = mask_pixmap; + data->icon_bits = bits; + data->icon_size = size; }
@@ -3068,8 +3028,6 @@ void X11DRV_SetParent( HWND hwnd, HWND parent, HWND old_parent ) } done: release_win_data( data ); - - fetch_icon_data( hwnd, 0, 0 ); }
@@ -3218,14 +3176,12 @@ void X11DRV_WindowPosChanged( HWND hwnd, HWND insert_after, HWND owner_hint, UIN { if (!(old_style & WS_VISIBLE)) { - BOOL needs_icon = !data->icon_pixmap; BOOL needs_map = TRUE;
/* layered windows are mapped only once their attributes are set */ if (NtUserGetWindowLongW( hwnd, GWL_EXSTYLE ) & WS_EX_LAYERED) needs_map = data->layered || IsRectEmpty( &new_rects->window ); release_win_data( data ); - if (needs_icon) fetch_icon_data( hwnd, 0, 0 ); if (needs_map) map_window( hwnd, new_style, activate ); return; } @@ -3309,26 +3265,17 @@ done:
/********************************************************************** - * SetWindowIcon (X11DRV.@) - * - * hIcon or hIconSm has changed (or is being initialised for the - * first time). Complete the X11 driver-specific initialisation - * and set the window hints. + * SetWindowIcons (X11DRV.@) */ -void X11DRV_SetWindowIcon( HWND hwnd, UINT type, HICON icon ) +void X11DRV_SetWindowIcons( HWND hwnd, HICON icon, const ICONINFO *ii, HICON icon_small, const ICONINFO *ii_small ) { struct x11drv_win_data *data;
- if (!(data = get_win_data( hwnd ))) return; - if (!data->whole_window) goto done; - release_win_data( data ); /* release the lock, fetching the icon requires sending messages */ - - if (type == ICON_BIG) fetch_icon_data( hwnd, icon, 0 ); - else fetch_icon_data( hwnd, 0, icon ); + TRACE( "hwnd %p, icon %p, ii %p, icon_small %p, ii_small %p\n", hwnd, icon, ii, icon_small, ii_small );
if (!(data = get_win_data( hwnd ))) return; + set_window_icon_data( data, icon, ii, icon_small, ii_small ); set_wm_hints( data ); -done: release_win_data( data ); }
diff --git a/dlls/winex11.drv/x11drv.h b/dlls/winex11.drv/x11drv.h index 6e909e289ee..fdd4534a626 100644 --- a/dlls/winex11.drv/x11drv.h +++ b/dlls/winex11.drv/x11drv.h @@ -231,7 +231,7 @@ extern void X11DRV_SetDesktopWindow( HWND hwnd ); extern void X11DRV_SetLayeredWindowAttributes( HWND hwnd, COLORREF key, BYTE alpha, DWORD flags ); extern void X11DRV_SetParent( HWND hwnd, HWND parent, HWND old_parent ); -extern void X11DRV_SetWindowIcon( HWND hwnd, UINT type, HICON icon ); +extern void X11DRV_SetWindowIcons( HWND hwnd, HICON icon, const ICONINFO *ii, HICON icon_small, const ICONINFO *ii_small ); extern void X11DRV_SetWindowRgn( HWND hwnd, HRGN hrgn, BOOL redraw ); extern void X11DRV_SetWindowStyle( HWND hwnd, INT offset, STYLESTRUCT *style ); extern void X11DRV_SetWindowText( HWND hwnd, LPCWSTR text ); diff --git a/include/wine/gdi_driver.h b/include/wine/gdi_driver.h index b3b392dc474..cdc838d36d8 100644 --- a/include/wine/gdi_driver.h +++ b/include/wine/gdi_driver.h @@ -218,7 +218,7 @@ struct gdi_dc_funcs };
/* increment this when you change the DC function table */ -#define WINE_GDI_DRIVER_VERSION 106 +#define WINE_GDI_DRIVER_VERSION 107
#define GDI_PRIORITY_NULL_DRV 0 /* null driver */ #define GDI_PRIORITY_FONT_DRV 100 /* any font driver */ @@ -412,7 +412,7 @@ struct user_driver_funcs void (*pSetLayeredWindowAttributes)(HWND,COLORREF,BYTE,DWORD); void (*pSetParent)(HWND,HWND,HWND); void (*pSetWindowRgn)(HWND,HRGN,BOOL); - void (*pSetWindowIcon)(HWND,UINT,HICON); + void (*pSetWindowIcons)(HWND,HICON,const ICONINFO*,HICON,const ICONINFO*); void (*pSetWindowStyle)(HWND,INT,STYLESTRUCT*); void (*pSetWindowText)(HWND,LPCWSTR); UINT (*pShowWindow)(HWND,INT,RECT*,UINT);