-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Updates: golang/go#36439 Updates: golang/go#44020 Signed-off-by: Jason A. Donenfeld <Jason@zx2c4.com>
- Loading branch information
Showing
4 changed files
with
100 additions
and
2 deletions.
There are no files selected for viewing
File renamed without changes.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,98 @@ | ||
// Copyright 2010 The win Authors. All rights reserved. | ||
// Use of this source code is governed by a BSD-style | ||
// license that can be found in the LICENSE file. | ||
|
||
// +build windows,arm64 | ||
|
||
package win | ||
|
||
import ( | ||
"syscall" | ||
"unsafe" | ||
) | ||
|
||
func (idProp *MSAAPROPID) split() (uintptr, uintptr) { | ||
if idProp == nil { | ||
return 0, 0 | ||
} | ||
x := (*struct { a, b uintptr })(unsafe.Pointer(idProp)) | ||
return x.a, x.b | ||
} | ||
|
||
// SetPropValue identifies the accessible element to be annotated, specify the property to be annotated, and provide a new value for that property. | ||
// If server developers know the HWND of the accessible element they want to annotate, they can use one of the following methods: SetHwndPropStr, SetHwndProp, or SetHwndPropServer | ||
func (obj *IAccPropServices) SetPropValue(idString []byte, idProp *MSAAPROPID, v *VARIANT) HRESULT { | ||
var idStringPtr unsafe.Pointer | ||
idStringLen := len(idString) | ||
if idStringLen != 0 { | ||
idStringPtr = unsafe.Pointer(&idString[0]) | ||
} | ||
propA, propB := idProp.split() | ||
ret, _, _ := syscall.Syscall6(obj.LpVtbl.SetPropValue, 6, | ||
uintptr(unsafe.Pointer(obj)), | ||
uintptr(idStringPtr), | ||
uintptr(idStringLen), | ||
propA, propB, | ||
uintptr(unsafe.Pointer(v))) | ||
return HRESULT(ret) | ||
} | ||
|
||
// SetHwndProp wraps SetPropValue, providing a convenient entry point for callers who are annotating HWND-based accessible elements. If the new value is a string, you can use SetHwndPropStr instead. | ||
func (obj *IAccPropServices) SetHwndProp(hwnd HWND, idObject int32, idChild uint32, idProp *MSAAPROPID, v *VARIANT) HRESULT { | ||
propA, propB := idProp.split() | ||
ret, _, _ := syscall.Syscall9(obj.LpVtbl.SetHwndProp, 7, | ||
uintptr(unsafe.Pointer(obj)), | ||
uintptr(hwnd), | ||
uintptr(idObject), | ||
uintptr(idChild), | ||
propA, propB, | ||
uintptr(unsafe.Pointer(v)), | ||
0, 0) | ||
return HRESULT(ret) | ||
} | ||
|
||
// SetHwndPropStr wraps SetPropValue, providing a more convenient entry point for callers who are annotating HWND-based accessible elements. | ||
func (obj *IAccPropServices) SetHwndPropStr(hwnd HWND, idObject int32, idChild uint32, idProp *MSAAPROPID, str string) HRESULT { | ||
str16, err := syscall.UTF16PtrFromString(str) | ||
if err != nil { | ||
return -((E_INVALIDARG ^ 0xFFFFFFFF) + 1) | ||
} | ||
propA, propB := idProp.split() | ||
ret, _, _ := syscall.Syscall9(obj.LpVtbl.SetHwndPropStr, 7, | ||
uintptr(unsafe.Pointer(obj)), | ||
uintptr(hwnd), | ||
uintptr(idObject), | ||
uintptr(idChild), | ||
propA, propB, | ||
uintptr(unsafe.Pointer(str16)), | ||
0, 0) | ||
return HRESULT(ret) | ||
} | ||
|
||
// SetHmenuProp wraps SetPropValue, providing a convenient entry point for callers who are annotating HMENU-based accessible elements. If the new value is a string, you can use IAccPropServices::SetHmenuPropStr instead. | ||
func (obj *IAccPropServices) SetHmenuProp(hmenu HMENU, idChild uint32, idProp *MSAAPROPID, v *VARIANT) HRESULT { | ||
propA, propB := idProp.split() | ||
ret, _, _ := syscall.Syscall6(obj.LpVtbl.SetHmenuProp, 6, | ||
uintptr(unsafe.Pointer(obj)), | ||
uintptr(hmenu), | ||
uintptr(idChild), | ||
propA, propB, | ||
uintptr(unsafe.Pointer(v))) | ||
return HRESULT(ret) | ||
} | ||
|
||
// SetHmenuPropStr wraps SetPropValue, providing a more convenient entry point for callers who are annotating HMENU-based accessible elements. | ||
func (obj *IAccPropServices) SetHmenuPropStr(hmenu HMENU, idChild uint32, idProp *MSAAPROPID, str string) HRESULT { | ||
str16, err := syscall.UTF16PtrFromString(str) | ||
if err != nil { | ||
return -((E_INVALIDARG ^ 0xFFFFFFFF) + 1) | ||
} | ||
propA, propB := idProp.split() | ||
ret, _, _ := syscall.Syscall6(obj.LpVtbl.SetHmenuPropStr, 6, | ||
uintptr(unsafe.Pointer(obj)), | ||
uintptr(hmenu), | ||
uintptr(idChild), | ||
propA, propB, | ||
uintptr(unsafe.Pointer(str16))) | ||
return HRESULT(ret) | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters