Skip to content

Commit

Permalink
Fix crashing when selecting user status
Browse files Browse the repository at this point in the history
Signed-off-by: Claudio Cambra <claudio.cambra@gmail.com>
  • Loading branch information
claucambra committed Jun 7, 2022
1 parent 994af63 commit bb0b299
Show file tree
Hide file tree
Showing 4 changed files with 34 additions and 13 deletions.
4 changes: 4 additions & 0 deletions src/gui/UserStatusSelectorDialog.qml
Original file line number Diff line number Diff line change
Expand Up @@ -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: 0
onUserIndexChanged: model.load(userIndex)

minimumWidth: view.implicitWidth
minimumHeight: view.implicitHeight
Expand Down
5 changes: 1 addition & 4 deletions src/gui/tray/UserLine.qml
Original file line number Diff line number Diff line change
Expand Up @@ -184,10 +184,7 @@ MenuItem {
font.pixelSize: Style.topLinePixelSize
palette.windowText: Style.ncTextColor
hoverEnabled: true
onClicked: {
showUserStatusSelectorDialog(index)
accountMenu.close()
}
onClicked: showUserStatusSelectorDialog(index)

background: Item {
height: parent.height
Expand Down
33 changes: 25 additions & 8 deletions src/gui/tray/Window.qml
Original file line number Diff line number Diff line change
Expand Up @@ -175,10 +175,6 @@ Window {
}
}

Loader {
id: userStatusSelectorDialogLoader
}

Menu {
id: accountMenu

Expand Down Expand Up @@ -221,15 +217,36 @@ Window {
userLineInstantiator.active = true;
}

Loader {
id: userStatusSelectorDialogLoader

property int userIndex

function openDialog(newUserIndex) {
console.log(`About to show dialog for user with index ${newUserIndex}`);
userIndex = newUserIndex;
active = true;
item.show();
}

active: false
sourceComponent: UserStatusSelectorDialog {
userIndex: userStatusSelectorDialogLoader.userIndex
}

onLoaded: {
item.model.load(userIndex);
item.show();
}
}

Instantiator {
id: userLineInstantiator
model: UserModel
delegate: UserLine {
onShowUserStatusSelectorDialog: {
userStatusSelectorDialogLoader.source = "qrc:/qml/src/gui/UserStatusSelectorDialog.qml"
userStatusSelectorDialogLoader.item.title = qsTr("Set user status")
userStatusSelectorDialogLoader.item.model.load(index)
userStatusSelectorDialogLoader.item.show()
userStatusSelectorDialogLoader.openDialog(model.index);
accountMenu.close();
}
}
onObjectAdded: accountMenu.insertItem(index, object)
Expand Down
5 changes: 4 additions & 1 deletion src/gui/userstatusselectormodel.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -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();
}
Expand All @@ -102,6 +103,7 @@ void UserStatusSelectorModel::reset()

void UserStatusSelectorModel::init()
{
Q_ASSERT(_userStatusConnector);
if (!_userStatusConnector) {
return;
}
Expand Down Expand Up @@ -177,7 +179,8 @@ void UserStatusSelectorModel::clearError()

void UserStatusSelectorModel::setOnlineStatus(UserStatus::OnlineStatus status)
{
if (status == _userStatus.state()) {
Q_ASSERT(_userStatusConnector);
if (!_userStatusConnector || status == _userStatus.state()) {
return;
}

Expand Down

0 comments on commit bb0b299

Please sign in to comment.