Skip to content

Commit d23305f

Browse files
authored
Merge pull request #4616 from nextcloud/bugfix/user-status-selector-crash
Fix crashing when selecting user status and predefined statuses not appearing
2 parents 5337d4b + 0658d72 commit d23305f

4 files changed

Lines changed: 32 additions & 15 deletions

File tree

src/gui/UserStatusSelectorDialog.qml

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,10 +4,14 @@ import com.nextcloud.desktopclient 1.0 as NC
44

55
Window {
66
id: dialog
7+
8+
title: qsTr("Set user status")
79

810
property NC.UserStatusSelectorModel model: NC.UserStatusSelectorModel {
911
onFinished: dialog.close()
1012
}
13+
property int userIndex
14+
onUserIndexChanged: model.load(userIndex)
1115

1216
minimumWidth: view.implicitWidth
1317
minimumHeight: view.implicitHeight

src/gui/tray/UserLine.qml

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -184,10 +184,7 @@ MenuItem {
184184
font.pixelSize: Style.topLinePixelSize
185185
palette.windowText: Style.ncTextColor
186186
hoverEnabled: true
187-
onClicked: {
188-
showUserStatusSelectorDialog(index)
189-
accountMenu.close()
190-
}
187+
onClicked: showUserStatusSelectorDialog(index)
191188

192189
background: Item {
193190
height: parent.height

src/gui/tray/Window.qml

Lines changed: 25 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -175,10 +175,6 @@ Window {
175175
}
176176
}
177177

178-
Loader {
179-
id: userStatusSelectorDialogLoader
180-
}
181-
182178
Menu {
183179
id: accountMenu
184180

@@ -221,15 +217,36 @@ Window {
221217
userLineInstantiator.active = true;
222218
}
223219

220+
Loader {
221+
id: userStatusSelectorDialogLoader
222+
223+
property int userIndex
224+
225+
function openDialog(newUserIndex) {
226+
console.log(`About to show dialog for user with index ${newUserIndex}`);
227+
userIndex = newUserIndex;
228+
active = true;
229+
item.show();
230+
}
231+
232+
active: false
233+
sourceComponent: UserStatusSelectorDialog {
234+
userIndex: userStatusSelectorDialogLoader.userIndex
235+
}
236+
237+
onLoaded: {
238+
item.model.load(userIndex);
239+
item.show();
240+
}
241+
}
242+
224243
Instantiator {
225244
id: userLineInstantiator
226245
model: UserModel
227246
delegate: UserLine {
228247
onShowUserStatusSelectorDialog: {
229-
userStatusSelectorDialogLoader.source = "qrc:/qml/src/gui/UserStatusSelectorDialog.qml"
230-
userStatusSelectorDialogLoader.item.title = qsTr("Set user status")
231-
userStatusSelectorDialogLoader.item.model.load(index)
232-
userStatusSelectorDialogLoader.item.show()
248+
userStatusSelectorDialogLoader.openDialog(model.index);
249+
accountMenu.close();
233250
}
234251
}
235252
onObjectAdded: accountMenu.insertItem(index, object)

src/gui/userstatusselectormodel.cpp

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -79,6 +79,7 @@ UserStatusSelectorModel::UserStatusSelectorModel(const UserStatus &userStatus,
7979
void UserStatusSelectorModel::load(int id)
8080
{
8181
reset();
82+
qCDebug(lcUserStatusDialogModel) << "Loading user status connector for user with index: " << id;
8283
_userStatusConnector = UserModel::instance()->userStatusConnector(id);
8384
init();
8485
}
@@ -177,7 +178,7 @@ void UserStatusSelectorModel::clearError()
177178

178179
void UserStatusSelectorModel::setOnlineStatus(UserStatus::OnlineStatus status)
179180
{
180-
if (status == _userStatus.state()) {
181+
if (!_userStatusConnector || status == _userStatus.state()) {
181182
return;
182183
}
183184

@@ -300,7 +301,6 @@ Optional<ClearAt> UserStatusSelectorModel::clearStageTypeToDateTime(ClearStageTy
300301

301302
void UserStatusSelectorModel::setUserStatus()
302303
{
303-
Q_ASSERT(_userStatusConnector);
304304
if (!_userStatusConnector) {
305305
return;
306306
}
@@ -311,7 +311,6 @@ void UserStatusSelectorModel::setUserStatus()
311311

312312
void UserStatusSelectorModel::clearUserStatus()
313313
{
314-
Q_ASSERT(_userStatusConnector);
315314
if (!_userStatusConnector) {
316315
return;
317316
}

0 commit comments

Comments
 (0)