From a20c429f889bef98ea7a5baf5813bac863b9ea58 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=9D=A8=E7=BA=A2=E5=B2=A9?= Date: Tue, 3 Jan 2023 18:50:12 +0800 Subject: [PATCH] Fixed Chinese input and gtk3 issues for linux packaging --- cef/cef-browser-window.go | 6 +- cef/cef-views-framework-browser-window.go | 118 ++++++++++-------- cef/window-info.go | 17 ++- example/browser-linux/linux.go | 2 +- .../views-framework.go | 2 +- 5 files changed, 84 insertions(+), 61 deletions(-) diff --git a/cef/cef-browser-window.go b/cef/cef-browser-window.go index 024ab3e..5b254d2 100644 --- a/cef/cef-browser-window.go +++ b/cef/cef-browser-window.go @@ -29,11 +29,7 @@ var ( mainBrowserWindow: &browserWindow{}, browserEvent: &BrowserEvent{}, Config: &browserConfig{ - WindowProperty: WindowProperty{ - Title: "Energy", - Width: 1024, - Height: 768, - }, + WindowProperty: *NewWindowProperty(), }, windowInfo: make(map[int32]*TCefWindowInfo), windowSerial: 1, diff --git a/cef/cef-views-framework-browser-window.go b/cef/cef-views-framework-browser-window.go index 4fd5e6e..3f8ed67 100644 --- a/cef/cef-views-framework-browser-window.go +++ b/cef/cef-views-framework-browser-window.go @@ -57,33 +57,10 @@ func (m *browserWindow) appContextInitialized(app *TCEFApplication) { BrowserWindow.Config.chromiumConfig.SetEnableOpenUrlTab(true) BrowserWindow.Config.chromiumConfig.SetEnableWindowPopup(true) } - component := lcl.NewComponent(nil) - m.vFrameBrowserWindow = &ViewsFrameworkBrowserWindow{ - component: component, - chromium: NewChromium(component, BrowserWindow.Config.chromiumConfig), - windowComponent: NewWindowComponent(component), - browserViewComponent: NewBrowserViewComponent(component), - } - m.vFrameBrowserWindow.chromium.SetEnableMultiBrowserMode(true) + m.vFrameBrowserWindow = NewViewsFrameworkBrowserWindow(&BrowserWindow.Config.WindowProperty, BrowserWindow.Config.viewsFrameBrowserWindowOnEventCallback) m.chromium = m.vFrameBrowserWindow.chromium m.vFrameBrowserWindow.registerPopupEvent() //m.vFrameBrowserWindow.registerDefaultEvent() - m.vFrameBrowserWindow.windowComponent.SetOnWindowCreated(func(sender lcl.IObject, window *ICefWindow) { - if m.chromium.CreateBrowserByBrowserViewComponent(BrowserWindow.Config.Url, m.vFrameBrowserWindow.browserViewComponent) { - m.vFrameBrowserWindow.windowComponent.AddChildView(m.vFrameBrowserWindow.browserViewComponent) - m.vFrameBrowserWindow.windowComponent.SetTitle(BrowserWindow.Config.Title) - window.CenterWindow(NewCefSize(BrowserWindow.Config.Width, BrowserWindow.Config.Height)) - m.vFrameBrowserWindow.browserViewComponent.RequestFocus() - if BrowserWindow.Config.Icon != "" { - window.SetWindowAppIconFS(1, BrowserWindow.Config.Icon) - } - if BrowserWindow.Config.viewsFrameBrowserWindowOnEventCallback != nil { - BrowserWindow.browserEvent.chromium = m.chromium - BrowserWindow.Config.viewsFrameBrowserWindowOnEventCallback(BrowserWindow.browserEvent, m.vFrameBrowserWindow) - } - window.Show() - } - }) m.vFrameBrowserWindow.windowComponent.SetOnCanClose(func(sender lcl.IObject, window *ICefWindow, aResult *bool) { fmt.Println("OnCanClose") *aResult = true @@ -104,16 +81,62 @@ func (m *browserWindow) appContextInitialized(app *TCEFApplication) { }) } -func NewViewsFrameworkBrowserWindow(windowProperty *WindowProperty) *ViewsFrameworkBrowserWindow { +//创建一个 ViewsFrameworkBrowserWindow 窗口 +func NewViewsFrameworkBrowserWindow(windowProperty *WindowProperty, callback viewsFrameBrowserWindowOnEventCallback) *ViewsFrameworkBrowserWindow { component := lcl.NewComponent(nil) - vFrameBrowserWindow := &ViewsFrameworkBrowserWindow{ + m := &ViewsFrameworkBrowserWindow{ windowProperty: windowProperty, component: component, chromium: NewChromium(component, BrowserWindow.Config.chromiumConfig), windowComponent: NewWindowComponent(component), browserViewComponent: NewBrowserViewComponent(component), } - return vFrameBrowserWindow + m.chromium.SetEnableMultiBrowserMode(true) + m.registerPopupEvent() + m.windowComponent.SetOnWindowCreated(func(sender lcl.IObject, window *ICefWindow) { + if m.chromium.CreateBrowserByBrowserViewComponent(windowProperty.Url, m.browserViewComponent) { + m.windowComponent.AddChildView(m.browserViewComponent) + m.windowComponent.SetTitle(windowProperty.Title) + if windowProperty.IsCenterWindow { + window.CenterWindow(NewCefSize(windowProperty.Width, windowProperty.Height)) + } + if windowProperty.IconFS != "" { + m.windowComponent.SetWindowAppIconFS(1, windowProperty.IconFS) + } else if windowProperty.Icon != "" { + m.windowComponent.SetWindowAppIcon(1, windowProperty.Icon) + } + m.browserViewComponent.RequestFocus() + if callback != nil { + callback(BrowserWindow.browserEvent, m) + } + m.windowComponent.Show() + } + }) + if !windowProperty.IsCenterWindow { + m.windowComponent.SetOnGetInitialBounds(func(sender lcl.IObject, window *ICefWindow, aResult *TCefRect) { + aResult.X = windowProperty.X + aResult.Y = windowProperty.Y + aResult.Width = windowProperty.Width + aResult.Height = windowProperty.Height + }) + } + m.windowComponent.SetOnCanMinimize(func(sender lcl.IObject, window *ICefWindow, aResult *bool) { + *aResult = windowProperty.CanMinimize + }) + m.windowComponent.SetOnCanResize(func(sender lcl.IObject, window *ICefWindow, aResult *bool) { + *aResult = windowProperty.CanResize + }) + m.windowComponent.SetOnCanMaximize(func(sender lcl.IObject, window *ICefWindow, aResult *bool) { + *aResult = windowProperty.CanMaximize + }) + m.windowComponent.SetOnCanClose(func(sender lcl.IObject, window *ICefWindow, aResult *bool) { + *aResult = windowProperty.CanClose + }) + return m +} + +func (m *ViewsFrameworkBrowserWindow) CreateTopLevelWindow() { + m.windowComponent.CreateTopLevelWindow() } func (m *ViewsFrameworkBrowserWindow) registerPopupEvent() { @@ -129,31 +152,24 @@ func (m *ViewsFrameworkBrowserWindow) registerPopupEvent() { } if !result { result = true - component := lcl.NewComponent(nil) - vFrameBrowserWindow := &ViewsFrameworkBrowserWindow{ - component: component, - chromium: NewChromium(component, BrowserWindow.Config.chromiumConfig), - windowComponent: NewWindowComponent(component), - browserViewComponent: NewBrowserViewComponent(component), + wp := &WindowProperty{ + Title: BrowserWindow.Config.WindowProperty.Title, + Url: beforePopupInfo.TargetUrl, + CanMinimize: BrowserWindow.Config.WindowProperty.CanMinimize, + CanMaximize: BrowserWindow.Config.WindowProperty.CanMaximize, + CanResize: BrowserWindow.Config.WindowProperty.CanResize, + CanClose: BrowserWindow.Config.WindowProperty.CanClose, + IsCenterWindow: BrowserWindow.Config.WindowProperty.IsCenterWindow, + IsShowModel: BrowserWindow.Config.WindowProperty.IsShowModel, + WindowState: BrowserWindow.Config.WindowProperty.WindowState, + Icon: BrowserWindow.Config.WindowProperty.Icon, + IconFS: BrowserWindow.Config.WindowProperty.IconFS, + X: BrowserWindow.Config.WindowProperty.X, + Y: BrowserWindow.Config.WindowProperty.Y, + Width: BrowserWindow.Config.WindowProperty.Width, + Height: BrowserWindow.Config.WindowProperty.Height, } - vFrameBrowserWindow.chromium.SetEnableMultiBrowserMode(true) - vFrameBrowserWindow.registerPopupEvent() - vFrameBrowserWindow.windowComponent.SetOnWindowCreated(func(sender lcl.IObject, window *ICefWindow) { - if vFrameBrowserWindow.chromium.CreateBrowserByBrowserViewComponent(beforePopupInfo.TargetUrl, vFrameBrowserWindow.browserViewComponent) { - vFrameBrowserWindow.windowComponent.AddChildView(vFrameBrowserWindow.browserViewComponent) - vFrameBrowserWindow.windowComponent.SetTitle(BrowserWindow.Config.Title) - window.CenterWindow(NewCefSize(BrowserWindow.Config.Width, BrowserWindow.Config.Height)) - vFrameBrowserWindow.browserViewComponent.RequestFocus() - if BrowserWindow.Config.Icon != "" { - window.SetWindowAppIconFS(1, BrowserWindow.Config.Icon) - } - if BrowserWindow.Config.viewsFrameBrowserWindowOnEventCallback != nil { - BrowserWindow.browserEvent.chromium = m.chromium - BrowserWindow.Config.viewsFrameBrowserWindowOnEventCallback(BrowserWindow.browserEvent, vFrameBrowserWindow) - } - window.Show() - } - }) + vFrameBrowserWindow := NewViewsFrameworkBrowserWindow(wp, nil) vFrameBrowserWindow.windowComponent.CreateTopLevelWindow() } diff --git a/cef/window-info.go b/cef/window-info.go index 8c66016..bc7c1d9 100644 --- a/cef/window-info.go +++ b/cef/window-info.go @@ -45,11 +45,12 @@ type WindowProperty struct { WindowState types.TWindowState //窗口状态 Title string //标题 Url string //默认打开URL - Icon string //窗口图标 加载本地图片或emfs内置图片 + Icon string //窗口图标 加载本地图 + IconFS string //窗口图标 加载emfs内置图片 CanMinimize bool //窗口 是否显示最小化按钮 CanMaximize bool //窗口 是否显示最大化按钮 CanResize bool //窗口 是否允许调整窗口大小 - OnCanClose bool //窗口 关闭时是否关闭窗口 + CanClose bool //窗口 关闭时是否关闭窗口 IsCenterWindow bool //窗口 是否居中显示 X int32 //窗口 IsCenterWindow=false X坐标 Y int32 //窗口 IsCenterWindow=false Y坐标 @@ -58,7 +59,17 @@ type WindowProperty struct { } func NewWindowProperty() *WindowProperty { - return &WindowProperty{} + return &WindowProperty{ + Title: "Energy", + Url: "about:blank", + CanMinimize: true, + CanMaximize: true, + CanResize: true, + CanClose: true, + IsCenterWindow: true, + Width: 1024, + Height: 768, + } } func (m *TCefWindowInfo) Chromium() IChromiumProc { diff --git a/example/browser-linux/linux.go b/example/browser-linux/linux.go index 898ff89..8b18491 100644 --- a/example/browser-linux/linux.go +++ b/example/browser-linux/linux.go @@ -22,7 +22,7 @@ func main() { cefApp := cef.NewApplication(config) //指定一个URL地址,或本地html文件目录 cef.BrowserWindow.Config.Url = "http://localhost:22022/index.html" - cef.BrowserWindow.Config.Icon = "resources/icon.png" + cef.BrowserWindow.Config.IconFS = "resources/icon.png" cef.BrowserWindow.SetViewFrameBrowserInit(func(event *cef.BrowserEvent, window *cef.ViewsFrameworkBrowserWindow) { fmt.Println("cef.BrowserWindow.SetViewFrameBrowserInit", window) fmt.Printf("%+v\n", window) diff --git a/example/browser-views-framework/views-framework.go b/example/browser-views-framework/views-framework.go index b860f4b..886ba12 100644 --- a/example/browser-views-framework/views-framework.go +++ b/example/browser-views-framework/views-framework.go @@ -76,7 +76,7 @@ func main() { }) windowComponent.SetOnCanResize(func(sender lcl.IObject, window *cef.ICefWindow, aResult *bool) { fmt.Println("OnCanResize") - *aResult = true + *aResult = false }) windowComponent.SetOnCanMaximize(func(sender lcl.IObject, window *cef.ICefWindow, aResult *bool) { fmt.Println("OnCanMaximize") -- GitLab