Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
energye
energy
提交
d0225fd2
energy
项目概览
energye
/
energy
通知
13
Star
2
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
DevOps
流水线
流水线任务
计划
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
energy
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
DevOps
DevOps
流水线
流水线任务
计划
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
流水线任务
提交
Issue看板
体验新版 GitCode,发现更多精彩内容 >>
提交
d0225fd2
编写于
9月 19, 2023
作者:
yanghye
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
VF window: 完善常用功能函数、统一常用回调事件,修复window事件功能
上级
85a6aa93
变更
2
隐藏空白更改
内联
并排
Showing
2 changed file
with
77 addition
and
31 deletion
+77
-31
cef/browser-window-views-framework.go
cef/browser-window-views-framework.go
+75
-31
cef/browser-window.go
cef/browser-window.go
+2
-0
未找到文件。
cef/browser-window-views-framework.go
浏览文件 @
d0225fd2
...
...
@@ -34,23 +34,24 @@ import (
//
// 当创建应用配置时 MultiThreadedMessageLoop 和 ExternalMessagePump 属性同时为false(linux系统默认强制false)时启用ViewsFramework窗口
type
ViewsFrameworkBrowserWindow
struct
{
isClosing
bool
//
windowType
consts
.
WINDOW_TYPE
//0:browser 1:devTools 2:viewSource 默认:0
windowId
int32
//
chromium
IChromium
//
component
lcl
.
IComponent
//
windowComponent
*
TCEFWindowComponent
//
browserViewComponent
*
TCEFBrowserViewComponent
//
windowProperty
*
WindowProperty
//窗口属性
auxTools
*
auxTools
//辅助工具
tray
ITray
//托盘
doOnWindowCreated
WindowComponentOnWindowCreated
//窗口创建
doOnGetInitialBounds
WindowComponentOnGetInitialBounds
//窗口初始bounds
regions
*
TCefDraggableRegions
//窗口内html拖拽区域
context
*
ICefRequestContext
//
extraInfo
*
ICefDictionaryValue
//
screen
IScreen
//屏幕
created
bool
//
isClosing
bool
//
windowType
consts
.
WINDOW_TYPE
//0:browser 1:devTools 2:viewSource 默认:0
windowId
int32
//
chromium
IChromium
//
component
lcl
.
IComponent
//
windowComponent
*
TCEFWindowComponent
//
browserViewComponent
*
TCEFBrowserViewComponent
//
windowProperty
*
WindowProperty
//窗口属性
auxTools
*
auxTools
//辅助工具
tray
ITray
//托盘
doOnWindowCreated
WindowComponentOnWindowCreated
//窗口创建
doOnGetInitialBounds
WindowComponentOnGetInitialBounds
//窗口初始bounds
regions
*
TCefDraggableRegions
//窗口内html拖拽区域
context
*
ICefRequestContext
//
extraInfo
*
ICefDictionaryValue
//
screen
IScreen
//屏幕
created
bool
//创建顶层窗口完成
canEnableDefaultEvent
bool
//是否启用了默认事件
}
// NewViewsFrameworkBrowserWindow 创建 ViewsFrameworkBrowserWindow 窗口
...
...
@@ -121,33 +122,51 @@ func (m *browserWindow) appContextInitialized(app *TCEFApplication) {
if
!
process
.
Args
.
IsMain
()
{
return
}
var
bwEvent
=
BrowserWindow
.
browserEvent
// VF 主窗口在 application 上下文初始化时创建
app
.
SetOnContextInitialized
(
func
()
{
// 主窗口
m
.
Config
.
WindowProperty
.
WindowType
=
consts
.
WT_MAIN_BROWSER
// main window
vfMainWindow
:=
NewViewsFrameworkBrowserWindow
(
m
.
Config
.
ChromiumConfig
(),
m
.
Config
.
WindowProperty
)
// 主窗口关闭流程 before close
// OnCanClose如果阻止关闭,该函数不会执行
vfMainWindow
.
Chromium
()
.
SetOnBeforeClose
(
func
(
sender
lcl
.
IObject
,
browser
*
ICefBrowser
)
{
chromiumOnBeforeClose
(
browser
)
if
vfMainWindow
.
tray
!=
nil
{
vfMainWindow
.
tray
.
close
()
var
flag
=
false
if
bwEvent
.
onBeforeClose
!=
nil
{
flag
=
bwEvent
.
onBeforeClose
(
sender
,
browser
,
vfMainWindow
)
}
if
!
flag
{
chromiumOnBeforeClose
(
browser
)
if
vfMainWindow
.
tray
!=
nil
{
vfMainWindow
.
tray
.
close
()
}
app
.
QuitMessageLoop
()
}
app
.
QuitMessageLoop
()
})
// 重置窗口属性, 注册默认实现事件
// SetOnClose如果阻止关闭,该函数不会执行
vfMainWindow
.
Chromium
()
.
SetOnClose
(
func
(
sender
lcl
.
IObject
,
browser
*
ICefBrowser
,
aAction
*
consts
.
TCefCloseBrowserAction
)
{
if
bwEvent
.
onClose
!=
nil
{
bwEvent
.
onClose
(
sender
,
browser
,
aAction
,
vfMainWindow
)
}
})
// 重置窗口属性, 使用事件初始窗口属性
vfMainWindow
.
ResetWindowPropertyForEvent
()
vfMainWindow
.
registerPopupEvent
(
true
)
vfMainWindow
.
registerDefaultEvent
()
vfMainWindow
.
EnableAllDefaultEvent
()
// 开启默认事件
// 主窗口关闭时触发该函数
// EnableClose=true时关闭窗口, false时不关闭窗口
vfMainWindow
.
WindowComponent
()
.
SetOnCanClose
(
func
(
sender
lcl
.
IObject
,
window
*
ICefWindow
,
aResult
*
bool
)
{
*
aResult
=
vfMainWindow
.
Chromium
()
.
TryCloseBrowser
()
*
aResult
=
m
.
Config
.
WindowProperty
.
EnableClose
if
m
.
Config
.
WindowProperty
.
EnableClose
{
*
aResult
=
vfMainWindow
.
Chromium
()
.
TryCloseBrowser
()
}
})
// 设置到 MainBrowser
// 设置到 MainBrowser
, 主窗口有且仅有一个
BrowserWindow
.
mainVFBrowserWindow
=
vfMainWindow
if
m
.
Config
.
browserWindowOnEventCallback
!=
nil
{
BrowserWindow
.
browserEvent
.
chromium
=
vfMainWindow
.
chromium
m
.
Config
.
browserWindowOnEventCallback
(
BrowserWindow
.
browserEvent
,
vfMainWindow
)
}
// IPC
ipc
.
SetProcessMessage
(
vfMainWindow
.
Chromium
()
.
(
*
TCEFChromium
))
vfMainWindow
.
CreateTopLevelWindow
()
//创建完窗口之后设置窗口属性
...
...
@@ -181,7 +200,18 @@ func (m *ViewsFrameworkBrowserWindow) registerPopupEvent(isMain bool) {
if
!
isMain
{
// 子窗口关闭流程
m
.
Chromium
()
.
SetOnBeforeClose
(
func
(
sender
lcl
.
IObject
,
browser
*
ICefBrowser
)
{
chromiumOnBeforeClose
(
browser
)
var
flag
bool
if
bwEvent
.
onBeforeClose
!=
nil
{
flag
=
bwEvent
.
onBeforeClose
(
sender
,
browser
,
m
)
}
if
!
flag
{
chromiumOnBeforeClose
(
browser
)
}
})
m
.
Chromium
()
.
SetOnClose
(
func
(
sender
lcl
.
IObject
,
browser
*
ICefBrowser
,
aAction
*
consts
.
TCefCloseBrowserAction
)
{
if
bwEvent
.
onClose
!=
nil
{
bwEvent
.
onClose
(
sender
,
browser
,
aAction
,
m
)
}
})
}
m
.
Chromium
()
.
SetOnOpenUrlFromTab
(
func
(
sender
lcl
.
IObject
,
browser
*
ICefBrowser
,
frame
*
ICefFrame
,
targetUrl
string
,
targetDisposition
consts
.
TCefWindowOpenDisposition
,
userGesture
bool
)
bool
{
...
...
@@ -204,9 +234,9 @@ func (m *ViewsFrameworkBrowserWindow) registerPopupEvent(isMain bool) {
}
if
!
result
{
vFrameBrowserWindow
.
ResetWindowPropertyForEvent
()
vFrameBrowserWindow
.
registerPopupEvent
(
false
)
vFrameBrowserWindow
.
registerDefaultEvent
()
vFrameBrowserWindow
.
EnableAllDefaultEvent
()
vFrameBrowserWindow
.
CreateTopLevelWindow
()
vFrameBrowserWindow
.
createAfterWindowPropertyForEvent
()
result
=
true
}
return
result
...
...
@@ -214,6 +244,8 @@ func (m *ViewsFrameworkBrowserWindow) registerPopupEvent(isMain bool) {
}
// ResetWindowPropertyForEvent 重置窗口属性-通过事件函数
// VF窗口初始化时通过回调事件设置一些默认行为,而不像LCL窗口直接通过属性设置
// 在初始化之后部分属性可直接设置
func
(
m
*
ViewsFrameworkBrowserWindow
)
ResetWindowPropertyForEvent
()
{
wp
:=
m
.
WindowProperty
()
m
.
WindowComponent
()
.
SetOnGetInitialShowState
(
func
(
sender
lcl
.
IObject
,
window
*
ICefWindow
,
aResult
*
consts
.
TCefShowState
)
{
...
...
@@ -245,6 +277,9 @@ func (m *ViewsFrameworkBrowserWindow) ResetWindowPropertyForEvent() {
})
m
.
WindowComponent
()
.
SetOnCanClose
(
func
(
sender
lcl
.
IObject
,
window
*
ICefWindow
,
aResult
*
bool
)
{
*
aResult
=
wp
.
EnableClose
if
wp
.
EnableClose
{
*
aResult
=
m
.
Chromium
()
.
TryCloseBrowser
()
}
})
m
.
WindowComponent
()
.
SetOnIsFrameless
(
func
(
sender
lcl
.
IObject
,
window
*
ICefWindow
,
aResult
*
bool
)
{
*
aResult
=
wp
.
EnableHideCaption
...
...
@@ -381,8 +416,9 @@ func (m *ViewsFrameworkBrowserWindow) Created() bool {
// EnableAllDefaultEvent 启用所有默认事件行为
func
(
m
*
ViewsFrameworkBrowserWindow
)
EnableAllDefaultEvent
()
{
m
.
registerPopupEvent
(
false
)
m
.
registerPopupEvent
(
m
.
WindowType
()
==
consts
.
WT_MAIN_BROWSER
)
m
.
registerDefaultEvent
()
m
.
canEnableDefaultEvent
=
true
}
// SetOnWindowCreated 窗口创建
...
...
@@ -550,9 +586,15 @@ func (m *ViewsFrameworkBrowserWindow) Id() int32 {
// Show 显示窗口
func
(
m
*
ViewsFrameworkBrowserWindow
)
Show
()
{
if
m
.
Created
()
{
m
.
BrowserViewComponent
()
.
RequestFocus
()
m
.
WindowComponent
()
.
Show
()
}
else
{
if
m
.
canEnableDefaultEvent
{
// 启用了默认事件,窗口属性配置事件在创建顶层窗口之前调用
m
.
ResetWindowPropertyForEvent
()
}
m
.
CreateTopLevelWindow
()
m
.
createAfterWindowPropertyForEvent
()
}
}
...
...
@@ -617,10 +659,12 @@ func (m *ViewsFrameworkBrowserWindow) CloseBrowserWindow() {
// CreateTopLevelWindow 创建顶层窗口
func
(
m
*
ViewsFrameworkBrowserWindow
)
CreateTopLevelWindow
()
{
// 非辅助工具类型窗口,不做托管, 辅助工具窗口有自己的事件行为
if
m
.
WindowType
()
!=
consts
.
WT_DEV_TOOLS
{
window
.
CurrentBrowseWindowCache
=
m
}
m
.
WindowComponent
()
.
CreateTopLevelWindow
()
// 标记已创建
m
.
created
=
true
}
...
...
cef/browser-window.go
浏览文件 @
d0225fd2
...
...
@@ -208,6 +208,8 @@ func (m *auxTools) DevTools() *devToolsWindow {
func
NewBrowserWindow
(
config
*
TCefChromiumConfig
,
windowProperty
WindowProperty
,
owner
...
lcl
.
IComponent
)
IBrowserWindow
{
// 获取当前应用的主窗口
main
:=
BrowserWindow
.
MainWindow
()
// 设置为弹出的子窗口
windowProperty
.
WindowType
=
consts
.
WT_POPUP_SUB_BROWSER
if
main
.
IsLCL
()
{
// 创建LCL窗口
return
NewLCLBrowserWindow
(
config
,
windowProperty
,
owner
...
)
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录