Skip to content
Draft
Show file tree
Hide file tree
Changes from 1 commit
Commits
Show all changes
25 commits
Select commit Hold shift + click to select a range
6ed4073
Add user status and more items to the tray's user menu
Rello Jun 11, 2026
5d235c7
fix(UI): implementing further design improvements
Rello Jun 18, 2026
f9dce87
Merge branch 'master' into feature/trayAccountStatus
Rello Jun 18, 2026
cf88741
Merge branch 'master' into feature/trayAccountStatus
Rello Jun 22, 2026
3eb8ecd
Merge branch 'master' into feature/trayAccountStatus
Rello Jun 22, 2026
965200c
fix(UI): menu auto resizing and alignment
Rello Jun 22, 2026
92d57ef
fix(UI): translations in macOS tray account popup
Rello Jun 23, 2026
024efe9
fix(UI): tray on windows going to old trayWindow
Rello Jun 23, 2026
837ccd7
Merge branch 'master' into feature/trayAccountStatus
Rello Jun 23, 2026
2a9c98b
fix(UI): fix test issues
Rello Jun 23, 2026
607d677
fix(UI): real QML menus on win
Rello Jun 24, 2026
a0d9e39
fix(UI): tray on windows alignment
Rello Jun 24, 2026
bed4d75
fix(UI): tray on windows alignment
Rello Jun 24, 2026
be312d5
fix(UI): test fixes and update
Rello Jun 25, 2026
9b38d3d
fix(UI): test fixes and update
Rello Jun 25, 2026
c9a3f7b
fix(UI): test fixes and update
Rello Jun 25, 2026
8b053ad
fix(UI): test fixes and update
Rello Jun 25, 2026
0f3e51c
fix(UI): test fixes and update
Rello Jun 25, 2026
4b96fbf
Merge branch 'master' into feature/trayAccountStatus
Rello Jun 25, 2026
69eda92
fix(tray): avoid crash when running on Wayland
nilsding Jun 26, 2026
a998e42
fix(UI): change QML menu to QMenu for Win/Linux
Rello Jun 26, 2026
90e27f4
fix(UI): change QML menu to QMenu for Win/Linux
Rello Jun 26, 2026
536c5e0
fix(UI): change QML menu to QMenu for Win/Linux
Rello Jun 26, 2026
2408e4c
fix(UI): change QML menu to QMenu for Win/Linux
Rello Jun 26, 2026
639f7a8
fix(UI): change QML menu to QMenu for Win/Linux
Rello Jun 26, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 3 additions & 0 deletions resources.qrc
Original file line number Diff line number Diff line change
@@ -1,6 +1,9 @@
<RCC>
<qresource prefix="/qml">
<file>src/gui/UserStatusMessageView.qml</file>
<file>src/gui/UserStatusWindow.qml</file>
<file>src/gui/UserStatusWindowStatusRow.qml</file>
<file>src/gui/UserStatusWindowPredefinedStatusRow.qml</file>
<file>src/gui/UserStatusSelectorPage.qml</file>
<file>src/gui/EmojiPicker.qml</file>
<file>src/gui/UserStatusSelectorButton.qml</file>
Expand Down
2 changes: 2 additions & 0 deletions src/gui/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -207,6 +207,8 @@ set(client_SRCS
tray/unifiedsearchresult.cpp
tray/unifiedsearchresultslistmodel.h
tray/trayimageprovider.cpp
tray/trayaccountappsmodel.h
tray/trayaccountappsmodel.cpp
tray/unifiedsearchresultslistmodel.cpp
tray/usermodel.h
tray/usermodel.cpp
Expand Down
75 changes: 70 additions & 5 deletions src/gui/EmojiPicker.qml
Original file line number Diff line number Diff line change
Expand Up @@ -5,13 +5,50 @@

import QtQuick
import QtQuick.Controls
import QtQuick.Controls.Basic as BasicControls
import QtQuick.Layouts

import Style
import com.nextcloud.desktopclient 1.0 as NC
import "./tray"

ColumnLayout {
id: root

property bool showSearch: false
property int visibleRows: 8
property string searchText: ""
readonly property var filteredModel: {
if (searchText === "") {
return emojiModel.model
}

const needle = searchText.toLowerCase()
const emojiLists = [
emojiModel.people,
emojiModel.nature,
emojiModel.food,
emojiModel.activity,
emojiModel.travel,
emojiModel.objects,
emojiModel.symbols,
emojiModel.flags
]
var results = []
for (var listIndex = 0; listIndex < emojiLists.length; ++listIndex) {
const emojis = emojiLists[listIndex]
for (var emojiIndex = 0; emojiIndex < emojis.length; ++emojiIndex) {
const emoji = emojis[emojiIndex]
const shortname = emoji.shortname === undefined ? "" : emoji.shortname.toLowerCase()
const unicode = emoji.unicode === undefined ? "" : emoji.unicode
if (shortname.indexOf(needle) !== -1 || unicode.indexOf(searchText) !== -1) {
results.push(emoji)
}
}
}
return results
}

NC.EmojiModel {
id: emojiModel
}
Expand All @@ -24,13 +61,41 @@ ColumnLayout {
id: metrics
}

BasicControls.TextField {
id: searchField

visible: root.showSearch
Layout.fillWidth: true
Layout.preferredHeight: visible ? 32 : 0
Layout.margins: visible ? Style.smallSpacing : 0
placeholderText: qsTr("Search emoji")
selectByMouse: true
text: root.searchText
topPadding: 0
bottomPadding: 0
leftPadding: 10
rightPadding: 10
font.pixelSize: Style.pixelSize + 2
verticalAlignment: TextInput.AlignVCenter
onTextChanged: root.searchText = text

background: Rectangle {
radius: 8
color: palette.base
border.width: 1
border.color: searchField.activeFocus ? Style.ncBlue : palette.dark
}
}

ListView {
id: headerLayout
Layout.fillWidth: true
Layout.margins: 1
implicitWidth: contentItem.childrenRect.width
implicitHeight: metrics.height * 2

visible: root.searchText === ""
Layout.preferredHeight: visible ? implicitHeight : 0
orientation: ListView.Horizontal

model: emojiModel.emojiCategoriesModel
Expand Down Expand Up @@ -74,15 +139,15 @@ ColumnLayout {
}

Rectangle {
height: Style.normalBorderWidth
Layout.preferredHeight: root.searchText === "" ? Style.normalBorderWidth : 0
Layout.fillWidth: true
color: palette.dark
}

ScrollView {
Layout.fillWidth: true
Layout.fillHeight: true
Layout.preferredHeight: metrics.height * 8
Layout.preferredHeight: metrics.height * root.visibleRows
Layout.margins: Style.normalBorderWidth
clip: true

Expand All @@ -95,7 +160,7 @@ ColumnLayout {
cellWidth: metrics.height * 2
cellHeight: metrics.height * 2
boundsBehavior: Flickable.DragOverBounds
model: emojiModel.model
model: root.filteredModel

delegate: ItemDelegate {
id: emojiDelegate
Expand Down Expand Up @@ -129,11 +194,11 @@ ColumnLayout {

}

EnforcedPlainTextLabel {
EnforcedPlainTextLabel {
id: placeholderMessage
width: parent.width * 0.8
anchors.centerIn: parent
text: qsTr("No recent emojis")
text: root.searchText === "" ? qsTr("No recent emojis") : qsTr("No emojis found")
wrapMode: Text.Wrap
font.bold: true
visible: emojiView.count === 0
Expand Down
Loading
Loading