Commit Graph

3180 Commits

Author SHA1 Message Date
Joshua Goins
a1615118d0 Allow focusing and navigating the space drawer with a keyboard
CCBUG: 511591
(cherry picked from commit f1b5ad7392)
2026-02-16 11:13:41 -05:00
Joshua Goins
9d816158f5 When favoriting/reprioritizng a room, make sure to re-sort the list
This fixes some odd issues like newly favorited rooms being sent to the
bottom of the room list, and so on.

(cherry picked from commit 78beb9ffff)
2026-02-16 11:13:41 -05:00
Joshua Goins
d8619356d3 Stop tree view from attempting to expand sections too early
This fixes a consistent bug for me, where the expandRecursively call
(somehow) predates the room list being populated. Which resulted in some
or all sections being collapsed on start-up.

(cherry picked from commit 431dbf6457)
2026-02-16 11:13:41 -05:00
Joshua Goins
6b6ccdaff0 Fix the emoticon editor page
It wasn't possible to edit the shortcode or description anymore, because
signals weren't hooked up. I also added a separator to help separate
some of these controls visually.

(cherry picked from commit 4e616d53b2)
2026-02-16 11:13:41 -05:00
Joshua Goins
18a29bc46b Fix weird scrolling behavior in room list
You may have noticed that the room list acts a bit... odd. You usually
can't scroll all the way down with a scrollwheel, it just
stops. It's possible to continue a little bit more with the scrollbar.
And sometimes the scrollbar doesn't know how big it's actually supposed
to be, commonly occuring when switching from a large room list to a
smaller one.

I narrowed it down the same usual problem with views in QtQuick:
variable sized delegates! Using GammaRay I figured out that for the
delegates currently in use they're slightly different: 46 pixels for
regular room delegates, 42 pixels for section headers and the "Find your
Friends" button was also different.

*Technically* TableView (and by extension TreeView) is supposed to allow
variable-sized delegates, and we should be able to advertise that with
rowHeightProvider. I tried a bunch of different solutions and none of
them worked reliably, so I took the usual sledgehammer approach of
making all of the delegates the same size.

This fixes all of the obvious bugs with the room list I could see, with
the one visual downside of making the section headers slightly taller.
But since I spent some time improving the tap targets, this is only a
visual change and not a functional one.

I also made sure to test it in compact mode, and everything shrinks as
expected.

(cherry picked from commit d47a4eb0de)
2026-02-16 11:09:17 -05:00
Joshua Goins
76180ace07 Re-settle the timeline view when replying to messages
Or changing the height of the chatbar in other ways, which I'm sure is
going to become more common with our new rich text system.

(cherry picked from commit e4c9230c09)
2026-02-16 11:09:17 -05:00
Joshua Goins
c439fa7e45 Fix undefined reference in Bubble
This tends to spam the logs while loading/unloading timelines.

(cherry picked from commit 318432d561)
2026-02-16 11:09:17 -05:00
Joshua Goins
9cadce88bb Hide rooms with custom defined types in quick switcher
This matches the behavior in other room lists. I also tried to normalize
the constructor with SortFilterRoomTreeModel.

(cherry picked from commit 847db41fb3)
2026-02-16 11:09:17 -05:00
Joshua Goins
d8984dc812 Reduce the tap target of RoomTreeSection
For some reason I don't understand, the ItemDelegate used for these
sections are ginormous. There is quite a bit of padding which confuses
users as its unexpectedly used for the tap area.

I changed it so we only listen for taps inside of the contentItem
itself, which is a more suitable area.

(cherry picked from commit 115d4e7466)
2026-02-16 11:09:17 -05:00
Joshua Goins
3f096da49b Fix the emoticon editor looking visually broken
We need to set a minimum width/height here since the Image isn't
technically loaded, when creating a new one.

(cherry picked from commit 9f4146e5b1)
2026-02-16 11:09:17 -05:00
Joshua Goins
6abc398033 Focus code and location chooser maximize components too
I did this for images a while back, but not for these. Otherwise you
can't press escape or perform other key navigation functions easily.

BUG: 515462
FIXED-IN: 25.12.2
(cherry picked from commit 793f81e733)
2026-02-09 21:47:11 -05:00
James Graham
bef4f370b6 Fix use after free in message delegate. We can't delete the incubator in the completed callback because it then returns to the incubator we just deleted.
(cherry picked from commit 8edb248647)
2026-02-09 21:45:42 -05:00
Joshua Goins
b18c12f149 Don't scroll the timeline when reacting to messages
BUG: 515306
FIXED-IN: 25.12.2
(cherry picked from commit 5de394b4b7)
2026-02-06 12:22:39 -05:00
Joshua Goins
e267f9f667 Fix closeToYEnd check
The comparison operator was reversed, and this was seen with mark as
read being broken and buttons showing up at the wrong times.

(cherry picked from commit 9ace01f74a)
2026-02-06 12:22:39 -05:00
Joshua Goins
5be43575fc Remove single tap to maximize code component
This is just more ergonomic (in my opinion) as you usually want to
select some text from a code block, instead of maximizing it. There's
already an easy-to-access button for maximizing if you want to.

BUG: 499048
FIXED-IN: 25.12.2
(cherry picked from commit 332a822996)
2026-01-27 18:08:09 +01:00
Joshua Goins
558519f355 Fix transparency blur not applying to the timeline anymore
We still had the default opaque background for RoomPage. I added a
comment too so it isn't removed accidentally in the future.

BUG: 513363
FIXED-IN: 25.12.2
(cherry picked from commit f145bbe8db)
2026-01-27 18:08:09 +01:00
Joshua Goins
2ef3fd9d6c Add hack to fix crash when sending long text reactions
This is some bug in Flow (that is really hard to debug, I can't get it
to exit at all) but we can work around it for a minor visual impact. It
seems to me allow the reaction list to become slightly larger, but
that's about it.

BUG: 504344
FIXED-IN: 25.12.2
(cherry picked from commit 93e932c09c)
2026-01-17 15:08:11 -05:00
Joshua Goins
e64b6033f3 Cleanup few remaining atYEnd usages in TimelineView
These were either mistakes or rebase errors, but we should be using
closeToYEnd here.

(cherry picked from commit 3b8930c2bc)
2026-01-17 15:08:11 -05:00
Joshua Goins
82989e7ef2 Add hack to fix room sidebar not sticking to the top
This is similar to the TimelineView hacks, but this time its the header
item that's changing height as our room topics and such wrap.

(cherry picked from commit 6eb2b2e739)
2026-01-17 15:08:11 -05:00
Joshua Goins
ddf272ab2b Fix left padding for "Rooms" label in the room list
This now emulates the default Kirigami heading behavior now, with the
correct amount of padding.

(cherry picked from commit be89362fdd)
2026-01-17 15:08:11 -05:00
Joshua Goins
4d4b44e011 Fix Quick Switcher not being activatable by Enter/Return key
(cherry picked from commit e53c84d30c)
2026-01-17 15:08:11 -05:00
Joshua Goins
a17d7e18fd Don't show the Share action for non-file messages
This only shares files, if you try it on anything else it crashes
NeoChat.

(cherry picked from commit a90c26f566)
2026-01-17 15:08:10 -05:00
Joshua Goins
1e78f119f1 Add hack around the timeline never settling just right
This is due to some kind of bug in ListView that never resettles
properly for bottom-to-top views. This can arise when the pinned message
is loaded (because that squishes the view) or the window is resized
(because that also resizes the view.)

We can work around it by assuming the following:
1. The RoomPage knows the window is resizing because it gets its height
changed before TimelineView.
2. The first height change can be a marker to position the view at the
beginning.

This fixes the issue for me, I did the following in order to test this:
* Switch between many rooms, especially ones with a pinned message. Now
all of them start at the bottom as they should.
* Resize the window, ensure that if you scrolled it stays around that
position - otherwise it sticks at the bottom.

(cherry picked from commit 39de4d10e4)
2026-01-17 10:22:10 -05:00
Joshua Goins
b6a4b67c22 Improve reliability of restoring the last space and room (again)
I found that 50% of the time, NeoChat won't restore the last space but
instead get stuck at Home. Even worse, it will overwrite Home's last
opened room with the one from the space - resulting in really buggy
behavior.

The reason why this happens is partly due to the space hierarchy cache
(I think) but that's not the real problem in my opinion. During
setCurrentSpace, we needlessly update the last space & room config
despite us being the ones already reading it.

In addition to that I also refactored this code a bit to be more
consolidated and readable.

(cherry picked from commit 4c37dcf518)
2026-01-17 10:22:10 -05:00
Joshua Goins
e965e1680f Add hack around atYEnd
This fixes the annoying "I just scrolled down to the bottom, how come
NeoChat doesn't think I did?"

From what I can tell this is also ListView bug (or something caused by
our style/Kirigami) that creates cases like contentY being -643.2 (for a
ListView of height 643) thus that's not "at Y's end". For our case
though, we don't care and can safely round it.

(cherry picked from commit 3c77711417)
2026-01-17 10:22:10 -05:00
Nate Graham
7d4cc7a5cf Tell room page header message to fill the width
Otherwise it scrunches up as small as possible and breaks the layout.

(cherry picked from commit c50380b448)
2026-01-17 10:21:47 -05:00
Joshua Goins
26e7f3780c Small notification improvements
Changed a check to use isDirectChat (which is a clearer indication of
what we want.) I also made sure not to show the account name if you only
have one, since that's just useless noise.

(cherry picked from commit fc6f345036)
2026-01-13 17:55:41 -05:00
Lorenz Wildberg
8c96d05799 fix bug: room settings don't open
(cherry picked from commit 2ec1fa92fa)
2026-01-13 17:55:04 -05:00
Veres Károly
bc6e22bc6d Null check decoded messages in loadPinnedMessage
`decryptMessage` returns null if it fails to decode the passed message. This value
then got fed into `EventHandler::richBody` which logged a warning and cleared `m_pinnedMessage`.
If we instead retain the value as an `EncryptedEvent`, the UI will pin the encrypted event
placeholder instead of hiding the existence of pins.

(cherry picked from commit 71c84be4b4)
2026-01-13 17:55:04 -05:00
Veres Károly
4371c3f7e5 Null check pinned messages after decryption when filling PinnedMessageModel.
`room()->decryptMessage()` returns null if the message fails to decode. Since elements of `m_pinnedEvents`
get directly dereferenced in getEventForIndex, storing null values leads to a segfault.
In this case we should retain the EncryptedEvent to let the UI report the error.

(cherry picked from commit b684fb451d)
2026-01-13 17:55:04 -05:00
Kai Uwe Broulik
b88ee65a4c RoomPage: Fix selected text and hovered link in context menu
They were not forwarded to the menu.
Also, "isThread" argument is no longer there in the signal.

(cherry picked from commit 7a2211f8e0)
2026-01-13 17:54:55 -05:00
Azhar Momin
033e865a27 Fix some runtime qml warnings
(cherry picked from commit 4155e9116a)
2026-01-13 17:54:33 -05:00
Azhar Momin
75ba46e292 Fix pushDialogLayer failing in DelegateContextMenu
(cherry picked from commit a989ef42b2)
2026-01-13 17:54:33 -05:00
Joshua Goins
d492ed038a Decrypt when downloading single events from the server
This fixes issues like not being able to view pinned messages in
encrypted rooms.

(cherry picked from commit 89e42dbc53)
2026-01-13 17:54:33 -05:00
Joshua Goins
b29108a2f7 Fix reply colors being broken if you're faster than the server
This is that bug that causes reply colors to be white, and this error to
print in the log:

qrc:/qt/qml/org/kde/neochat/messagecontent/ReplyComponent.qml:41: TypeError: Cannot read property 'color' of null

The reason why this happens is inside of EventMessageContentModel, it
needs to be able to find the relevant event in the room to fetch the
room member (and then their color.) Dependent on many variables to
align, this can happen easily if you are faster than your server giving
you said events.

But this is an easy fix, we obviously get the event afterwards and just
need to re-evaluate the the author property. I also made sure it falls
back to some color instead of white, which will also quiet the error.

(cherry picked from commit b45967508c)
2026-01-13 17:54:33 -05:00
Joshua Goins
2790d430ae Make clicking room list section headers more reliable
ListSectionHeader itself is an ItemDelegate, which eats up input events.
We can work around this by also listening to onClicked there too.

(cherry picked from commit 3a416990ca)
2026-01-13 17:54:33 -05:00
Azhar Momin
e156d4da90 Fix notification count refresh for low-priority and mentions-only rooms
(cherry picked from commit 5f7967363f)
2026-01-04 17:13:27 -05:00
Joshua Goins
b3aa2abd89 Fix icons on Windows
KirigamiApp currently calls KIconTheme::initTheme too late for Windows,
as a workaround we can go back to calling it ourselves.

(cherry picked from commit a02a04d966)
2026-01-04 17:13:27 -05:00
Veres Károly
7627d6d0e2 Extract the space selection logic from setCurrentRoom and use it for setting lastRoomConfig too.
If a setCurrentRoom call changed the active space at the end of its execution, the new room's ID ended up still being written to the old space's lastRoomConfig.

By extracting this space selection logic into a helper function, we can now calculate this value earlier and use it as the space id when writing lastRoomConfig.

(cherry picked from commit 68b00b9fc5)
2026-01-04 17:13:27 -05:00
Nate Graham
77da7e6c7d Improve hamburger menu button
- Open the menu right beneath the button
- Use pressed state for the button while the menu is open
- Close the menu when clicking the button again
- Hide the tooltip while the menu is open

(cherry picked from commit bd0588ca99)
2026-01-04 17:13:27 -05:00
Carl Schwan
242a248bf3 Send beautiful red ❤️'s when quick reacting
I wondered for a while (and could tell) when people were using NeoChat
because they would react with cold, monochrome hearts. Let's add more
color to our world!


(cherry picked from commit 531df7a3b2)

Co-authored-by: Joshua Goins <josh@redstrate.com>
2025-12-21 19:59:56 +01:00
Carl Schwan
dfb0bb75f4 Fix missing escape sequence in /shrug command
Before the fix, the upper arm _ characters in the command's output would be parsed as Markdown italic formatting around the (ツ).


(cherry picked from commit 706f1f7836)

Co-authored-by: Veres Károly <mail+kde@karcsesz.hu>
2025-12-21 18:07:46 +01:00
Carl Schwan
573c8925d2 Fix krunner integration with Flatpak
(cherry picked from commit 1da24191f0)

Co-authored-by: renner 03 <renner0@posteo.de>
2025-12-02 23:00:25 +01:00
Heiko Becker
3cd5f3a1c6 Drop unused dependencies
Both KF6Crash and KF6IconThemes aren't used anymore after porting to
KirigamiApp in eab45e761a.

(cherry picked from commit 0cb3fd32f4)
2025-11-24 21:56:55 +01:00
l10n daemon script
e9421e28dd SVN_SILENT made messages (.desktop file) - always resolve ours
In case of conflict in i18n, keep the version of the branch "ours"
To resolve a particular conflict, "git checkout --ours path/to/file.desktop"
2025-11-16 03:13:00 +00:00
Carl Schwan
2a7d61c73b Improve invited room counting
I didn't realize when redoing the tooltip for DMs that directChatInvites
was a boolean, not an integer type. Now it's changed to an integer type,
which fixes the DM invite count.

NeoChat apparently didn't count normal room invites until now either, so
now Home is highlighted in that case. Now it should be harder to miss
these kinds of invites.


(cherry picked from commit 887865c0aa)

Co-authored-by: Joshua Goins <josh@redstrate.com>
2025-11-09 22:23:09 +01:00
Kristen McWilliam
25c0bc131a feat: add font size scaling setting
Adds an option in Appearance Settings to adjust font size scaling,
improving accessibility and user customization.
2025-11-03 10:18:23 -05:00
Joshua Goins
24d4829ba9 Clarify what is "recent activity" in our room list ordering settings
As seen in the bug report, this setting is a bit confusing. First, it
refers to "message activity" but in reality it does take into account
all events. This is fine in my opinion, so I clarified that point.

Another thing is that it wasn't clear that timeline visibility settings
currently affect the sorting, so I added a tip about that.

Finally I wasn't happy with these two options being called "Activity"
so the old "Activity" setting is now called "Importance". The "Last
Message Activity" setting is now called "Newest Events".

BUG: 508480
FIXED-IN: 25.12.0
2025-10-29 18:18:53 -04:00
Joshua Goins
f009420c20 Improve the design of the room notifications settings
Now it has icons that match what we have in the room menu, and the
duplicate header text is removed.
2025-10-28 12:27:23 -04:00
Joshua Goins
069e0d8f16 Add informational Keyboard Shortcuts settings page
While we don't have customizable keyboard shortcuts (yet!) we have been
asked before for some way to view all of NeoChat's keyboard shortcuts.
2025-10-28 10:29:55 -04:00