mirror of
https://gitee.com/energye/energy.git
synced 2024-11-30 02:37:46 +08:00
U: IPC NewTarget IWindow > Add Chromium
This commit is contained in:
parent
4ed6668c7c
commit
62df11e108
@ -576,7 +576,7 @@ func (m *LCLBrowserWindow) ChromiumCreate(config *TCefChromiumConfig, defaultUrl
|
|||||||
//windowParent
|
//windowParent
|
||||||
m.WindowParent().DefaultAnchors()
|
m.WindowParent().DefaultAnchors()
|
||||||
m.WindowParent().SetOnEnter(func(sender lcl.IObject) {
|
m.WindowParent().SetOnEnter(func(sender lcl.IObject) {
|
||||||
if m.isClosing {
|
if m.IsClosing() {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
m.Chromium().Initialized()
|
m.Chromium().Initialized()
|
||||||
@ -584,7 +584,7 @@ func (m *LCLBrowserWindow) ChromiumCreate(config *TCefChromiumConfig, defaultUrl
|
|||||||
m.Chromium().SetFocus(true)
|
m.Chromium().SetFocus(true)
|
||||||
})
|
})
|
||||||
m.WindowParent().SetOnExit(func(sender lcl.IObject) {
|
m.WindowParent().SetOnExit(func(sender lcl.IObject) {
|
||||||
if m.isClosing {
|
if m.IsClosing() {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
m.Chromium().SendCaptureLostEvent()
|
m.Chromium().SendCaptureLostEvent()
|
||||||
@ -846,7 +846,7 @@ func (m *LCLBrowserWindow) resize(sender lcl.IObject) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
if !ret {
|
if !ret {
|
||||||
if m.isClosing {
|
if m.IsClosing() {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
m.setCurrentProperty()
|
m.setCurrentProperty()
|
||||||
@ -882,7 +882,7 @@ func (m *LCLBrowserWindow) activate(sender lcl.IObject) {
|
|||||||
ret = m.onActivate(sender)
|
ret = m.onActivate(sender)
|
||||||
}
|
}
|
||||||
if !ret {
|
if !ret {
|
||||||
if m.isClosing {
|
if m.IsClosing() {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
if m.chromiumBrowser != nil && !m.chromiumBrowser.IsCreated() {
|
if m.chromiumBrowser != nil && !m.chromiumBrowser.IsCreated() {
|
||||||
@ -945,18 +945,24 @@ func (m *LCLBrowserWindow) CloseBrowserWindow() {
|
|||||||
m.Close()
|
m.Close()
|
||||||
} else {
|
} else {
|
||||||
//sub window close
|
//sub window close
|
||||||
m.isClosing = true
|
m.setClosing(true)
|
||||||
m.Hide()
|
m.Hide()
|
||||||
m.Chromium().CloseBrowser(true)
|
m.Chromium().CloseBrowser(true)
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
m.isClosing = true
|
m.setClosing(true)
|
||||||
m.Hide()
|
m.Hide()
|
||||||
m.Chromium().CloseBrowser(true)
|
m.Chromium().CloseBrowser(true)
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// 窗口关闭时设置为true
|
||||||
|
func (m *LCLBrowserWindow) setClosing(v bool) {
|
||||||
|
m.isClosing = v
|
||||||
|
m.Chromium().setClosing(v)
|
||||||
|
}
|
||||||
|
|
||||||
// TryCloseWindowAndTerminate
|
// TryCloseWindowAndTerminate
|
||||||
// 尝试关闭窗口并退出应用,
|
// 尝试关闭窗口并退出应用,
|
||||||
// EnableMainWindow = false
|
// EnableMainWindow = false
|
||||||
@ -1020,8 +1026,8 @@ func (m *LCLBrowserWindow) closeQuery(sender lcl.IObject, close *bool) {
|
|||||||
*close = m.canClose
|
*close = m.canClose
|
||||||
}
|
}
|
||||||
RunOnMainThread(func() {
|
RunOnMainThread(func() {
|
||||||
if !m.isClosing {
|
if !m.IsClosing() {
|
||||||
m.isClosing = true
|
m.setClosing(true)
|
||||||
m.Chromium().CloseBrowser(true)
|
m.Chromium().CloseBrowser(true)
|
||||||
if IsDarwin() {
|
if IsDarwin() {
|
||||||
m.Show() // mac 主窗口未得到焦点时应用不退出, 所以show一下
|
m.Show() // mac 主窗口未得到焦点时应用不退出, 所以show一下
|
||||||
|
@ -40,6 +40,7 @@ type TCEFChromium struct {
|
|||||||
widgetHandle types.HWND
|
widgetHandle types.HWND
|
||||||
renderHandle types.HWND
|
renderHandle types.HWND
|
||||||
initialized bool
|
initialized bool
|
||||||
|
isClosing bool
|
||||||
}
|
}
|
||||||
|
|
||||||
// NewChromium 创建一个新的 TCEFChromium
|
// NewChromium 创建一个新的 TCEFChromium
|
||||||
|
@ -200,6 +200,9 @@ type IChromiumProc interface {
|
|||||||
InitializeDragAndDrop(dropTargetCtrl lcl.IWinControl)
|
InitializeDragAndDrop(dropTargetCtrl lcl.IWinControl)
|
||||||
Fullscreen() bool
|
Fullscreen() bool
|
||||||
ExitFullscreen(willCauseResize bool)
|
ExitFullscreen(willCauseResize bool)
|
||||||
|
AsTargetWindow() target.IWindow
|
||||||
|
IsClosing() bool
|
||||||
|
setClosing(v bool)
|
||||||
}
|
}
|
||||||
|
|
||||||
// IsValid 实例有效
|
// IsValid 实例有效
|
||||||
@ -1678,3 +1681,43 @@ func (m *TCEFChromium) ExitFullscreen(willCauseResize bool) {
|
|||||||
}
|
}
|
||||||
imports.Proc(def.CEFChromium_ExitFullscreen).Call(m.Instance(), api.PascalBool(willCauseResize))
|
imports.Proc(def.CEFChromium_ExitFullscreen).Call(m.Instance(), api.PascalBool(willCauseResize))
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Target
|
||||||
|
//
|
||||||
|
// IPC消息接收目标, 当前窗口chromium发送
|
||||||
|
// 参数: targetType 可选, 接收类型
|
||||||
|
func (m *TCEFChromium) Target(targetType ...target.Type) target.ITarget {
|
||||||
|
if !m.IsValid() {
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
browse := m.Browser()
|
||||||
|
if !browse.IsValid() {
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
return target.NewTarget(m, browse.Identifier(), browse.MainFrame().Identifier(), targetType...)
|
||||||
|
}
|
||||||
|
|
||||||
|
// ProcessMessage
|
||||||
|
//
|
||||||
|
// IPC消息触发当前Chromium
|
||||||
|
func (m *TCEFChromium) ProcessMessage() target.IProcessMessage {
|
||||||
|
if m == nil {
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
return m
|
||||||
|
}
|
||||||
|
|
||||||
|
// AsTargetWindow 转换为 IPC 目标接收窗口
|
||||||
|
func (m *TCEFChromium) AsTargetWindow() target.IWindow {
|
||||||
|
return m
|
||||||
|
}
|
||||||
|
|
||||||
|
// IsClosing 返回窗口是否正在关闭/或已关闭 true正在或已关闭
|
||||||
|
func (m *TCEFChromium) IsClosing() bool {
|
||||||
|
return m.isClosing
|
||||||
|
}
|
||||||
|
|
||||||
|
// 当窗口关闭时设置为true
|
||||||
|
func (m *TCEFChromium) setClosing(v bool) {
|
||||||
|
m.isClosing = v
|
||||||
|
}
|
||||||
|
@ -150,7 +150,14 @@ func (m *ICefFrame) SendProcessMessageForJSONBytes(messageName string, targetPro
|
|||||||
if !m.IsValid() || application.IsSpecVer49() {
|
if !m.IsValid() || application.IsSpecVer49() {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
imports.Proc(def.CEFFrame_SendProcessMessageForJSONBytes).Call(m.Instance(), api.PascalStr(messageName), targetProcess.ToPtr(), uintptr(unsafe.Pointer(&data[0])), uintptr(uint32(len(data))))
|
var (
|
||||||
|
dataPtr uintptr
|
||||||
|
count = uint32(len(data))
|
||||||
|
)
|
||||||
|
if count > 0 {
|
||||||
|
dataPtr = uintptr(unsafe.Pointer(&data[0]))
|
||||||
|
}
|
||||||
|
imports.Proc(def.CEFFrame_SendProcessMessageForJSONBytes).Call(m.Instance(), api.PascalStr(messageName), targetProcess.ToPtr(), dataPtr, uintptr(count))
|
||||||
}
|
}
|
||||||
|
|
||||||
// SendProcessMessageForV8Value 发送进程消息
|
// SendProcessMessageForV8Value 发送进程消息
|
||||||
|
Loading…
Reference in New Issue
Block a user