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
1c1fe30c
Commit
1c1fe30c
authored
Nov 25, 2021
by
Zhiyi Zhang
Committed by
Alexandre Julliard
Nov 25, 2021
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
explorerframe: Implement taskbar_list_AddTab() for x11 driver.
Signed-off-by:
Zhiyi Zhang
<
zzhang@codeweavers.com
>
Signed-off-by:
Alexandre Julliard
<
julliard@winehq.org
>
parent
d9b1df26
Hide whitespace changes
Inline
Side-by-side
Showing
4 changed files
with
39 additions
and
15 deletions
+39
-15
taskbarlist.c
dlls/explorerframe/taskbarlist.c
+4
-2
taskbarlist.c
dlls/explorerframe/tests/taskbarlist.c
+0
-8
window.c
dlls/winex11.drv/window.c
+32
-4
x11drv.h
dlls/winex11.drv/x11drv.h
+3
-1
No files found.
dlls/explorerframe/taskbarlist.c
View file @
1c1fe30c
...
...
@@ -26,6 +26,7 @@
WINE_DEFAULT_DEBUG_CHANNEL
(
explorerframe
);
#define WM_WINE_DELETE_TAB (WM_USER + 1)
#define WM_WINE_ADD_TAB (WM_USER + 2)
struct
taskbar_list
{
...
...
@@ -98,9 +99,10 @@ static HRESULT STDMETHODCALLTYPE taskbar_list_HrInit(ITaskbarList4 *iface)
static
HRESULT
STDMETHODCALLTYPE
taskbar_list_AddTab
(
ITaskbarList4
*
iface
,
HWND
hwnd
)
{
FIXME
(
"iface %p, hwnd %p stub!
\n
"
,
iface
,
hwnd
);
TRACE
(
"iface %p, hwnd %p
\n
"
,
iface
,
hwnd
);
return
E_NOTIMPL
;
SendMessageW
(
GetDesktopWindow
(),
WM_WINE_ADD_TAB
,
(
WPARAM
)
hwnd
,
0
);
return
S_OK
;
}
static
HRESULT
STDMETHODCALLTYPE
taskbar_list_DeleteTab
(
ITaskbarList4
*
iface
,
HWND
hwnd
)
...
...
dlls/explorerframe/tests/taskbarlist.c
View file @
1c1fe30c
...
...
@@ -43,7 +43,6 @@ static void test_ITaskbarList(void)
/* Test calling methods before calling ITaskbarList::HrInit() */
hr
=
ITaskbarList_AddTab
(
taskbarlist
,
hwnd
);
todo_wine
ok
(
hr
==
S_OK
,
"Got hr %#x.
\n
"
,
hr
);
hr
=
ITaskbarList_SetActiveAlt
(
taskbarlist
,
hwnd
);
...
...
@@ -69,21 +68,17 @@ static void test_ITaskbarList(void)
/* Test ITaskbarList::AddTab() */
/* Check invalid parameters */
hr
=
ITaskbarList_AddTab
(
taskbarlist
,
NULL
);
todo_wine
ok
(
hr
==
S_OK
,
"Got hr %#x.
\n
"
,
hr
);
hr
=
ITaskbarList_AddTab
(
taskbarlist
,
(
HWND
)
0xdeadbeef
);
todo_wine
ok
(
hr
==
S_OK
,
"Got hr %#x.
\n
"
,
hr
);
/* Normal ITaskbarList::AddTab() */
hr
=
ITaskbarList_AddTab
(
taskbarlist
,
hwnd
);
todo_wine
ok
(
hr
==
S_OK
,
"Got hr %#x.
\n
"
,
hr
);
/* Repeat ITaskbarList::AddTab() with the same hwnd */
hr
=
ITaskbarList_AddTab
(
taskbarlist
,
hwnd
);
todo_wine
ok
(
hr
==
S_OK
,
"Got hr %#x.
\n
"
,
hr
);
hr
=
ITaskbarList_DeleteTab
(
taskbarlist
,
hwnd
);
...
...
@@ -101,7 +96,6 @@ static void test_ITaskbarList(void)
/* Normal ITaskbarList::SetActiveAlt() */
hr
=
ITaskbarList_AddTab
(
taskbarlist
,
hwnd
);
todo_wine
ok
(
hr
==
S_OK
,
"Got hr %#x.
\n
"
,
hr
);
hr
=
ITaskbarList_SetActiveAlt
(
taskbarlist
,
hwnd
);
...
...
@@ -128,7 +122,6 @@ static void test_ITaskbarList(void)
/* Normal ITaskbarList::ActivateTab() */
hr
=
ITaskbarList_AddTab
(
taskbarlist
,
hwnd
);
todo_wine
ok
(
hr
==
S_OK
,
"Got hr %#x.
\n
"
,
hr
);
hr
=
ITaskbarList_ActivateTab
(
taskbarlist
,
hwnd
);
...
...
@@ -156,7 +149,6 @@ static void test_ITaskbarList(void)
/* Normal ITaskbarList::DeleteTab() */
hr
=
ITaskbarList_AddTab
(
taskbarlist
,
hwnd
);
todo_wine
ok
(
hr
==
S_OK
,
"Got hr %#x.
\n
"
,
hr
);
hr
=
ITaskbarList_DeleteTab
(
taskbarlist
,
hwnd
);
...
...
dlls/winex11.drv/window.c
View file @
1c1fe30c
...
...
@@ -994,10 +994,13 @@ void update_net_wm_states( struct x11drv_win_data *data )
ex_style
=
GetWindowLongW
(
data
->
hwnd
,
GWL_EXSTYLE
);
if
(
ex_style
&
WS_EX_TOPMOST
)
new_state
|=
(
1
<<
NET_WM_STATE_ABOVE
);
if
(
data
->
skip_taskbar
||
(
ex_style
&
(
WS_EX_TOOLWINDOW
|
WS_EX_NOACTIVATE
)))
new_state
|=
(
1
<<
NET_WM_STATE_SKIP_TASKBAR
)
|
(
1
<<
NET_WM_STATE_SKIP_PAGER
);
else
if
(
!
(
ex_style
&
WS_EX_APPWINDOW
)
&&
GetWindow
(
data
->
hwnd
,
GW_OWNER
))
new_state
|=
(
1
<<
NET_WM_STATE_SKIP_TASKBAR
);
if
(
!
data
->
add_taskbar
)
{
if
(
data
->
skip_taskbar
||
(
ex_style
&
(
WS_EX_TOOLWINDOW
|
WS_EX_NOACTIVATE
)))
new_state
|=
(
1
<<
NET_WM_STATE_SKIP_TASKBAR
)
|
(
1
<<
NET_WM_STATE_SKIP_PAGER
);
else
if
(
!
(
ex_style
&
WS_EX_APPWINDOW
)
&&
GetWindow
(
data
->
hwnd
,
GW_OWNER
))
new_state
|=
(
1
<<
NET_WM_STATE_SKIP_TASKBAR
);
}
if
(
!
data
->
mapped
)
/* set the _NET_WM_STATE atom directly */
{
...
...
@@ -1859,6 +1862,7 @@ static WNDPROC desktop_orig_wndproc;
#define WM_WINE_NOTIFY_ACTIVITY WM_USER
#define WM_WINE_DELETE_TAB (WM_USER + 1)
#define WM_WINE_ADD_TAB (WM_USER + 2)
static
LRESULT
CALLBACK
desktop_wndproc_wrapper
(
HWND
hwnd
,
UINT
msg
,
WPARAM
wp
,
LPARAM
lp
)
{
...
...
@@ -1881,6 +1885,9 @@ static LRESULT CALLBACK desktop_wndproc_wrapper( HWND hwnd, UINT msg, WPARAM wp,
case
WM_WINE_DELETE_TAB
:
SendNotifyMessageW
(
(
HWND
)
wp
,
WM_X11DRV_DELETE_TAB
,
0
,
0
);
break
;
case
WM_WINE_ADD_TAB
:
SendNotifyMessageW
(
(
HWND
)
wp
,
WM_X11DRV_ADD_TAB
,
0
,
0
);
break
;
}
return
desktop_orig_wndproc
(
hwnd
,
msg
,
wp
,
lp
);
}
...
...
@@ -2781,6 +2788,23 @@ done:
return
ret
;
}
/* Add a window to taskbar */
static
void
taskbar_add_tab
(
HWND
hwnd
)
{
struct
x11drv_win_data
*
data
;
TRACE
(
"hwnd %p
\n
"
,
hwnd
);
data
=
get_win_data
(
hwnd
);
if
(
!
data
)
return
;
data
->
add_taskbar
=
TRUE
;
data
->
skip_taskbar
=
FALSE
;
update_net_wm_states
(
data
);
release_win_data
(
data
);
}
/* Delete a window from taskbar */
static
void
taskbar_delete_tab
(
HWND
hwnd
)
{
...
...
@@ -2793,6 +2817,7 @@ static void taskbar_delete_tab( HWND hwnd )
return
;
data
->
skip_taskbar
=
TRUE
;
data
->
add_taskbar
=
FALSE
;
update_net_wm_states
(
data
);
release_win_data
(
data
);
}
...
...
@@ -2835,6 +2860,9 @@ LRESULT CDECL X11DRV_WindowMessage( HWND hwnd, UINT msg, WPARAM wp, LPARAM lp )
case
WM_X11DRV_DELETE_TAB
:
taskbar_delete_tab
(
hwnd
);
return
0
;
case
WM_X11DRV_ADD_TAB
:
taskbar_add_tab
(
hwnd
);
return
0
;
default:
FIXME
(
"got window msg %x hwnd %p wp %lx lp %lx
\n
"
,
msg
,
hwnd
,
wp
,
lp
);
return
0
;
...
...
dlls/winex11.drv/x11drv.h
View file @
1c1fe30c
...
...
@@ -585,7 +585,8 @@ enum x11drv_window_messages
WM_X11DRV_SET_CURSOR
,
WM_X11DRV_CLIP_CURSOR_NOTIFY
,
WM_X11DRV_CLIP_CURSOR_REQUEST
,
WM_X11DRV_DELETE_TAB
WM_X11DRV_DELETE_TAB
,
WM_X11DRV_ADD_TAB
};
/* _NET_WM_STATE properties that we keep track of */
...
...
@@ -621,6 +622,7 @@ struct x11drv_win_data
BOOL
layered
:
1
;
/* is window layered and with valid attributes? */
BOOL
use_alpha
:
1
;
/* does window use an alpha channel? */
BOOL
skip_taskbar
:
1
;
/* does window should be deleted from taskbar */
BOOL
add_taskbar
:
1
;
/* does window should be added to taskbar regardless of style */
int
wm_state
;
/* current value of the WM_STATE property */
DWORD
net_wm_state
;
/* bit mask of active x11drv_net_wm_state values */
Window
embedder
;
/* window id of embedder */
...
...
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