Skip to content

Commit

Permalink
Port to arm64
Browse files Browse the repository at this point in the history
Updates: golang/go#36439
Updates: golang/go#44020

Signed-off-by: Jason A. Donenfeld <Jason@zx2c4.com>
  • Loading branch information
zx2c4 authored and cbwest3 committed Feb 1, 2023
1 parent c99a8c4 commit b888a50
Show file tree
Hide file tree
Showing 4 changed files with 100 additions and 2 deletions.
File renamed without changes.
98 changes: 98 additions & 0 deletions oleacc_arm64.go
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)
}
2 changes: 1 addition & 1 deletion oleaut32_64.go
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.

// +build windows,amd64
// +build windows,amd64 windows,arm64

package win

Expand Down
2 changes: 1 addition & 1 deletion shobj_64.go
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.

// +build windows,amd64
// +build windows,amd64 windows,arm64

package win

Expand Down

0 comments on commit b888a50

Please sign in to comment.