Fix crashing when selecting user status
authorClaudio Cambra <claudio.cambra@gmail.com>
Tue, 7 Jun 2022 16:53:46 +0000 (18:53 +0200)
committerClaudio Cambra <claudio.cambra@gmail.com>
Fri, 24 Jun 2022 10:34:52 +0000 (12:34 +0200)
Signed-off-by: Claudio Cambra <claudio.cambra@gmail.com>
src/gui/UserStatusSelectorDialog.qml
src/gui/tray/UserLine.qml
src/gui/tray/Window.qml
src/gui/userstatusselectormodel.cpp

index 3f86f8cf9bd25bd990c1dc0064660fac331ea4e9..28d09254aa08ebf098ca66e1cad8fd0ae2dd2764 100644 (file)
@@ -4,10 +4,14 @@ import com.nextcloud.desktopclient 1.0 as NC
 
 Window {
     id: dialog
+
+    title: qsTr("Set user status")
     
     property NC.UserStatusSelectorModel model: NC.UserStatusSelectorModel {
         onFinished: dialog.close()
     }
+    property int userIndex
+    onUserIndexChanged: model.load(userIndex)
 
     minimumWidth: view.implicitWidth
     minimumHeight: view.implicitHeight
index 740cd1a9156853d478af511949a745c887b92e92..d401457ccfc68699e585eec33cf9afa5a85de475 100644 (file)
@@ -184,10 +184,7 @@ MenuItem {
                     font.pixelSize: Style.topLinePixelSize\r
                     palette.windowText: Style.ncTextColor\r
                     hoverEnabled: true\r
-                    onClicked: {\r
-                        showUserStatusSelectorDialog(index)\r
-                        accountMenu.close()\r
-                    }\r
+                    onClicked: showUserStatusSelectorDialog(index)\r
 \r
                     background: Item {\r
                         height: parent.height\r
index cfb6aaacd40c4be134c94bfae08802b620d1f389..50b099ec65c017f85c996be93331a513d4df9b1c 100644 (file)
@@ -175,10 +175,6 @@ Window {
                         }\r
                     }\r
 \r
-                    Loader {\r
-                        id: userStatusSelectorDialogLoader\r
-                    }\r
-\r
                     Menu {\r
                         id: accountMenu\r
 \r
@@ -221,15 +217,36 @@ Window {
                             userLineInstantiator.active = true;\r
                         }\r
 \r
+                        Loader {\r
+                            id: userStatusSelectorDialogLoader\r
+\r
+                            property int userIndex\r
+\r
+                            function openDialog(newUserIndex) {\r
+                                console.log(`About to show dialog for user with index ${newUserIndex}`);\r
+                                userIndex = newUserIndex;\r
+                                active = true;\r
+                                item.show();\r
+                            }\r
+\r
+                            active: false\r
+                            sourceComponent: UserStatusSelectorDialog {\r
+                                userIndex: userStatusSelectorDialogLoader.userIndex\r
+                            }\r
+\r
+                            onLoaded: {\r
+                                item.model.load(userIndex);\r
+                                item.show();\r
+                            }\r
+                        }\r
+\r
                         Instantiator {\r
                             id: userLineInstantiator\r
                             model: UserModel\r
                             delegate: UserLine {\r
                                 onShowUserStatusSelectorDialog: {\r
-                                    userStatusSelectorDialogLoader.source = "qrc:/qml/src/gui/UserStatusSelectorDialog.qml"\r
-                                    userStatusSelectorDialogLoader.item.title = qsTr("Set user status")\r
-                                    userStatusSelectorDialogLoader.item.model.load(index)\r
-                                    userStatusSelectorDialogLoader.item.show()\r
+                                    userStatusSelectorDialogLoader.openDialog(model.index);\r
+                                    accountMenu.close();\r
                                 }\r
                             }\r
                             onObjectAdded: accountMenu.insertItem(index, object)\r
index da0b44c1523c62fc8ceeaae2d7a5820d4061603d..1fcb9761c678e86547564439f68d79f982b4c55a 100644 (file)
@@ -79,6 +79,7 @@ UserStatusSelectorModel::UserStatusSelectorModel(const UserStatus &userStatus,
 void UserStatusSelectorModel::load(int id)
 {
     reset();
+    qCDebug(lcUserStatusDialogModel) << "Loading user status connector for user with index: " << id;
     _userStatusConnector = UserModel::instance()->userStatusConnector(id);
     init();
 }
@@ -177,7 +178,7 @@ void UserStatusSelectorModel::clearError()
 
 void UserStatusSelectorModel::setOnlineStatus(UserStatus::OnlineStatus status)
 {
-    if (status == _userStatus.state()) {
+    if (!_userStatusConnector || status == _userStatus.state()) {
         return;
     }