GODT-1336: Fix showing window on startup

This commit is contained in:
Alexander Bilyak
2021-10-11 12:15:12 +00:00
committed by Jakub
parent ea821b1bd8
commit b259de238e
5 changed files with 33 additions and 14 deletions

View File

@ -54,4 +54,5 @@ func SetupEvents(listener listener.Listener) {
listener.SetBuffer(InternetOffEvent)
listener.SetBuffer(UpgradeApplicationEvent)
listener.SetBuffer(TLSCertIssue)
listener.SetBuffer(UserRefreshEvent)
}

View File

@ -330,6 +330,16 @@ Window {
}
CheckBox {
id: showOnStartupCheckbox
colorScheme: root.colorScheme
text: "Show on startup"
checked: root.showOnStartup
onCheckedChanged: {
root.showOnStartup = checked
}
}
Button {
colorScheme: root.colorScheme
//Layout.fillWidth: true
@ -338,7 +348,6 @@ Window {
enabled: bridge === undefined || bridge === null
onClicked: {
bridge = bridgeComponent.createObject()
if (true) bridge._mainWindow.showAndRise()
}
}
@ -630,6 +639,7 @@ Window {
property string goos: "linux"
property bool showOnStartup: true // this actually needs to be false, but since we use Bridge_test for testing purpose - lets default this to true just for convenience
property bool dockIconVisible: false
// this signals are used only when trying to login with new user (i.e. not in users model)

View File

@ -224,13 +224,7 @@ Item {
Layout.preferredWidth: 320
Layout.fillWidth: true
username: {
if (root.backend.users.count !== 1) return ""
var user = root.backend.users.get(0)
if (user) return ""
if (user.loggedIn) return ""
return user.username
}
username: root.backend.users.count === 1 && root.backend.users.get(0) && root.backend.users.get(0).loggedIn === false ? root.backend.users.get(0).username : ""
backend: root.backend
}

View File

@ -15,6 +15,7 @@
// You should have received a copy of the GNU General Public License
// along with ProtonMail Bridge. If not, see <https://www.gnu.org/licenses/>.
//go:build build_qt
// +build build_qt
// Package qt provides communication between Qt/QML frontend and Go backend
@ -64,7 +65,7 @@ type FrontendQt struct {
initializationDone sync.Once
app *widgets.QApplication
engine *qml.QQmlApplicationEngine
engine *qml.QQmlEngine
qml *QMLBackend
}

View File

@ -15,6 +15,7 @@
// You should have received a copy of the GNU General Public License
// along with ProtonMail Bridge. If not, see <https://www.gnu.org/licenses/>.
//go:build build_qt
// +build build_qt
package qt
@ -47,7 +48,8 @@ func (f *FrontendQt) initiateQtApplication() error {
f.app.SetQuitOnLastWindowClosed(false)
// QML Engine and path
f.engine = qml.NewQQmlApplicationEngine(f.app)
f.engine = qml.NewQQmlEngine(f.app)
rootComponent := qml.NewQQmlComponent2(f.engine, f.engine)
f.qml = NewQMLBackend(f.engine)
f.qml.setup(f)
@ -60,14 +62,25 @@ func (f *FrontendQt) initiateQtApplication() error {
quickcontrols2.QQuickStyle_AddStylePath("qrc:/qml/")
quickcontrols2.QQuickStyle_SetStyle("Proton")
f.engine.Load(core.NewQUrl3("qrc:/qml/Bridge.qml", 0))
// Before loading a component we should load translations.
// See https://github.com/qt/qtdeclarative/blob/bedef212a74a62452ed31d7f65536a6c67881fc4/src/qml/qml/qqmlapplicationengine.cpp#L69 as example.
// Check QML is loaded properly.
if len(f.engine.RootObjects()) == 0 {
rootComponent.LoadUrl(core.NewQUrl3("qrc:/qml/Bridge.qml", 0))
if rootComponent.Status() != qml.QQmlComponent__Ready {
return errors.New("QML not loaded properly")
}
f.engine.RootObjects()[0].SetProperty("backend", f.qml.ToVariant())
// Instead of creating component right away we use BeginCreate to stop right before binding evaluation.
// That is needed to set backend property so all bindings will be calculated properly.
rootObject := rootComponent.BeginCreate(f.engine.RootContext())
// Check QML is loaded properly.
if rootObject == nil {
return errors.New("QML not created properly")
}
rootObject.SetProperty("backend", f.qml.ToVariant())
rootComponent.CompleteCreate()
return nil
}