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
b3490726
Commit
b3490726
authored
Aug 16, 2010
by
David Hedberg
Committed by
Alexandre Julliard
Aug 17, 2010
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
explorerframe: Handle keyboard events.
parent
f0d6d95e
Hide whitespace changes
Inline
Side-by-side
Showing
2 changed files
with
113 additions
and
0 deletions
+113
-0
nstc.c
dlls/explorerframe/nstc.c
+85
-0
nstc.c
dlls/explorerframe/tests/nstc.c
+28
-0
No files found.
dlls/explorerframe/nstc.c
View file @
b3490726
...
...
@@ -54,6 +54,8 @@ typedef struct {
HWND
hwnd_main
;
HWND
hwnd_tv
;
WNDPROC
tv_oldwndproc
;
NSTCSTYLE
style
;
NSTCSTYLE2
style2
;
struct
list
roots
;
...
...
@@ -69,6 +71,9 @@ static const DWORD unsupported_styles2 =
NSTCS2_INTERRUPTNOTIFICATIONS
|
NSTCS2_SHOWNULLSPACEMENU
|
NSTCS2_DISPLAYPADDING
|
NSTCS2_DISPLAYPINNEDONLY
|
NTSCS2_NOSINGLETONAUTOEXPAND
|
NTSCS2_NEVERINSERTNONENUMERATED
;
/* Forward declarations */
static
LRESULT
CALLBACK
tv_wndproc
(
HWND
hWnd
,
UINT
uMessage
,
WPARAM
wParam
,
LPARAM
lParam
);
/*************************************************************************
* NamespaceTree event wrappers
*/
...
...
@@ -145,6 +150,13 @@ static HRESULT events_OnSelectionChanged(NSTC2Impl *This, IShellItemArray *psia)
return
INameSpaceTreeControlEvents_OnSelectionChanged
(
This
->
pnstce
,
psia
);
}
static
HRESULT
events_OnKeyboardInput
(
NSTC2Impl
*
This
,
UINT
uMsg
,
WPARAM
wParam
,
LPARAM
lParam
)
{
if
(
!
This
->
pnstce
)
return
S_OK
;
return
INameSpaceTreeControlEvents_OnKeyboardInput
(
This
->
pnstce
,
uMsg
,
wParam
,
lParam
);
}
/*************************************************************************
* NamespaceTree helper functions
*/
...
...
@@ -325,6 +337,16 @@ static UINT fill_sublevel(NSTC2Impl *This, HTREEITEM hitem)
return
added
;
}
static
HTREEITEM
get_selected_treeitem
(
NSTC2Impl
*
This
)
{
return
(
HTREEITEM
)
SendMessageW
(
This
->
hwnd_tv
,
TVM_GETNEXTITEM
,
TVGN_CARET
,
0
);
}
static
IShellItem
*
get_selected_shellitem
(
NSTC2Impl
*
This
)
{
return
shellitem_from_treeitem
(
This
,
get_selected_treeitem
(
This
));
}
/*************************************************************************
* NamespaceTree window functions
*/
...
...
@@ -378,6 +400,12 @@ static LRESULT create_namespacetree(HWND hWnd, CREATESTRUCTW *crs)
INameSpaceTreeControl_AddRef
((
INameSpaceTreeControl
*
)
This
);
/* Subclass the treeview to get the keybord events. */
This
->
tv_oldwndproc
=
(
WNDPROC
)
SetWindowLongPtrW
(
This
->
hwnd_tv
,
GWLP_WNDPROC
,
(
ULONG_PTR
)
tv_wndproc
);
if
(
This
->
tv_oldwndproc
)
SetPropA
(
This
->
hwnd_tv
,
"PROP_THIS"
,
This
);
return
TRUE
;
}
...
...
@@ -396,6 +424,13 @@ static LRESULT destroy_namespacetree(NSTC2Impl *This)
{
TRACE
(
"%p
\n
"
,
This
);
/* Undo the subclassing */
if
(
This
->
tv_oldwndproc
)
{
SetWindowLongPtrW
(
This
->
hwnd_tv
,
GWLP_WNDPROC
,
(
ULONG_PTR
)
This
->
tv_oldwndproc
);
RemovePropA
(
This
->
hwnd_tv
,
"PROP_THIS"
);
}
INameSpaceTreeControl_RemoveAllRoots
((
INameSpaceTreeControl
*
)
This
);
/* This reference was added in create_namespacetree */
...
...
@@ -535,6 +570,56 @@ static LRESULT on_tvn_selchangedw(NSTC2Impl *This, LPARAM lParam)
return
TRUE
;
}
static
LRESULT
on_kbd_event
(
NSTC2Impl
*
This
,
UINT
uMsg
,
WPARAM
wParam
,
LPARAM
lParam
)
{
IShellItem
*
psi
;
HTREEITEM
hitem
;
TRACE
(
"%p : %d, %lx, %lx
\n
"
,
This
,
uMsg
,
wParam
,
lParam
);
/* Handled by the client? */
if
(
FAILED
(
events_OnKeyboardInput
(
This
,
uMsg
,
wParam
,
lParam
)))
return
TRUE
;
if
(
uMsg
==
WM_KEYDOWN
)
{
switch
(
wParam
)
{
case
VK_DELETE
:
psi
=
get_selected_shellitem
(
This
);
FIXME
(
"Deletion of file requested (shellitem: %p).
\n
"
,
psi
);
return
TRUE
;
case
VK_F2
:
hitem
=
get_selected_treeitem
(
This
);
SendMessageW
(
This
->
hwnd_tv
,
TVM_EDITLABELW
,
0
,
(
LPARAM
)
hitem
);
return
TRUE
;
}
}
/* Let the TreeView handle the key */
return
FALSE
;
}
static
LRESULT
CALLBACK
tv_wndproc
(
HWND
hWnd
,
UINT
uMessage
,
WPARAM
wParam
,
LPARAM
lParam
)
{
NSTC2Impl
*
This
=
(
NSTC2Impl
*
)
GetPropA
(
hWnd
,
"PROP_THIS"
);
switch
(
uMessage
)
{
case
WM_KEYDOWN
:
case
WM_KEYUP
:
case
WM_CHAR
:
case
WM_SYSKEYDOWN
:
case
WM_SYSKEYUP
:
case
WM_SYSCHAR
:
if
(
on_kbd_event
(
This
,
uMessage
,
wParam
,
lParam
))
return
TRUE
;
break
;
}
/* Pass the message on to the treeview */
return
CallWindowProcW
(
This
->
tv_oldwndproc
,
hWnd
,
uMessage
,
wParam
,
lParam
);
}
static
LRESULT
CALLBACK
NSTC2_WndProc
(
HWND
hWnd
,
UINT
uMessage
,
WPARAM
wParam
,
LPARAM
lParam
)
{
...
...
dlls/explorerframe/tests/nstc.c
View file @
b3490726
...
...
@@ -160,6 +160,8 @@ static HRESULT WINAPI NSTCEvents_fnOnKeyboardInput(
LPARAM
lParam
)
{
NSTCE_IMPL
(
iface
)
->
count
[
OnKeyboardInput
]
++
;
ok
(
wParam
==
0x1234
,
"Got unexpected wParam %lx
\n
"
,
wParam
);
ok
(
lParam
==
0x1234
,
"Got unexpected lParam %lx
\n
"
,
lParam
);
return
E_NOTIMPL
;
}
...
...
@@ -1252,6 +1254,12 @@ static void test_events(void)
if
(
hwnd_tv
)
{
HTREEITEM
hroot
,
hitem
;
UINT
i
;
static
const
UINT
kbd_msgs_event
[]
=
{
WM_KEYDOWN
,
WM_KEYUP
,
WM_CHAR
,
WM_SYSKEYDOWN
,
WM_SYSKEYUP
,
WM_SYSCHAR
,
0
};
static
const
UINT
kbd_msgs_noevent
[]
=
{
WM_DEADCHAR
,
WM_SYSDEADCHAR
,
WM_UNICHAR
,
0
};
/* Test On*Expand */
hroot
=
(
HTREEITEM
)
SendMessageW
(
hwnd_tv
,
TVM_GETNEXTITEM
,
TVGN_ROOT
,
0
);
...
...
@@ -1275,6 +1283,26 @@ static void test_events(void)
process_msgs
();
ok_event_count
(
pnstceimpl
,
OnSelectionChanged
,
1
);
ok_no_events
(
pnstceimpl
);
/* Test OnKeyboardInput */
for
(
i
=
0
;
kbd_msgs_event
[
i
]
!=
0
;
i
++
)
{
SendMessageW
(
hwnd_tv
,
kbd_msgs_event
[
i
],
0x1234
,
0x1234
);
ok
(
pnstceimpl
->
count
[
OnKeyboardInput
]
==
1
,
"%d (%x): Got count %d
\n
"
,
kbd_msgs_event
[
i
],
kbd_msgs_event
[
i
],
pnstceimpl
->
count
[
OnKeyboardInput
]);
pnstceimpl
->
count
[
OnKeyboardInput
]
=
0
;
}
for
(
i
=
0
;
kbd_msgs_noevent
[
i
]
!=
0
;
i
++
)
{
SendMessageW
(
hwnd_tv
,
kbd_msgs_noevent
[
i
],
0x1234
,
0x1234
);
ok
(
pnstceimpl
->
count
[
OnKeyboardInput
]
==
0
,
"%d (%x): Got count %d
\n
"
,
kbd_msgs_noevent
[
i
],
kbd_msgs_noevent
[
i
],
pnstceimpl
->
count
[
OnKeyboardInput
]);
pnstceimpl
->
count
[
OnKeyboardInput
]
=
0
;
}
ok_no_events
(
pnstceimpl
);
}
else
skip
(
"Skipping some tests.
\n
"
);
...
...
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