Commit Graph

5539 Commits

Author SHA1 Message Date
Joshua Goins
b5fcad3db0 Fix multiple Global menu issues
See individual commits. When backporting, I'll create a separate patchset just for the we-broke-something-bugs without the strings.
2025-05-17 21:21:38 -04:00
Joshua Goins
d3fd441c88 Improve the "Create a Room/Space" and "Select Existing Room" dialog
First of all, these are now all separate dialogs instead of shoving all
of these functions (which are only marginally related) into one single
dialog. We also convert these to in-app Kirigami Dialogs, which look a
bit nicer. I also touched up the UX in some places, such as adding
descriptions which were previously available to translators. I also hid
some not oft used options like setting a topic, which almost nobody does
before creating a room/space.
2025-05-17 21:09:43 -04:00
Joshua Goins
e9568b50fc If the message body is empty, say so
Normally if a malformed event is empty it will just be empty space - but
that looks buggy. Instead, we can add a message saying "This event does
not have any content."

BUG: 494093
2025-05-17 21:09:25 -04:00
James Graham
e7040a518a Create a new module for the room info drawer QML.
Create a new module for the room info drawer QML. This also requires moving some QML to LibNeoChat common with other modules. Finally all QML in roominfo is modifed to not depend on app.
2025-05-17 14:27:38 +01:00
l10n daemon script
495f7194ac GIT_SILENT Sync po/docbooks with svn 2025-05-17 01:40:09 +00:00
Ritchie Frodomar
d31cc486bb Work around startup UI freeze caused by QtTextToSpeech
This merge request works around an annoying startup hang that I introduced when adding text-to-speech to NeoChat. The previous implementation was a QML singleton that used the `TextToSpeech` QML component. Unfortunately that component blocks the UI thread when first loading it, while it connects to speech-dispatcher.

This MR just rewrites that singleton in C++, and moves initialization of QtTextToSpeech to the first time you read a message aloud. It doesn't fix the performance problem, but it at least stops it from affecting startup.

In the future, I'd like to move speech operations to a background thread to completely mitigate the initialization freeze.
2025-05-16 14:27:49 -04:00
l10n daemon script
3ea844496a GIT_SILENT Sync po/docbooks with svn 2025-05-16 01:41:58 +00:00
Nate Graham
7b953d0cc0 Fixup becc127dc4
This isn't a JavaScript list, so a comma between items is actually an
error here.
2025-05-15 15:05:42 -06:00
Joshua Goins
becc127dc4 Add share action to the maximize delegate
Self-explanatory, you know how this works! Enables sharing images out of
NeoChat more easily other Purpose-enabled applications.

BUG: 466382
2025-05-15 15:34:29 -04:00
James Graham
e2742cbf8b Add a button to access all emojis from the message menu
Add a button to access all emojis from the message menu for when that button is not availble in the quick actions

requires libraries/kirigami-addons!362
2025-05-15 13:41:09 -04:00
Joshua Goins
a1513b30cd Check if RoomEvent is null before trying to insert a notification
As seen in the bug report, roomEvent could be null and then we get a
nice and simple null-access error. We should be careful before trying to
use it.

BUG: 502687
2025-05-15 13:39:33 -04:00
Joshua Goins
e2c0316e7d Focus the chat bar when replying to a message
Just a nice UX thing, otherwise you have to manually focus the chat bar
again with a keyboard or mouse.
2025-05-15 13:39:24 -04:00
Joshua Goins
fda84a6aac Allow performing shortcuts while the completion menu is open
This prevents doing actions like zooming in your screen (Meta+Equals)
because it will tripper shortcutOverride and close the menu. Instead, we
shouldn't block shortcuts but still allow closing when Escape is
pressed.

This *does* block all NeoChat shortcuts when the completion menu is
open, but personally I think this is fine. If you have this open, you
really should finish your message first!
2025-05-15 13:39:16 -04:00
Joshua Goins
142312d87d Give completion popup a minimum size when editing an existing message
This was previously fixed to the size of the text area itself, which
could be small. We also have a bug where the text area *itself* is like
one character big, so this helps there too.

The popup is also given a margin of 0 so it is always positioned within
the bounds of the window.

BUG: 503483
2025-05-15 13:39:08 -04:00
Joshua Goins
906fb97259 Fix crash when trying to edit your message on a wide screen
This only seems to happen when the window is maximized, specifically
the height of the window. This seems to be a weird TextArea issue (or
something else in our TimelineView) but until that's found out, a
Qt.callLater will prevent this annoying crash.

BUG: 503846
2025-05-15 13:38:55 -04:00
Joshua Goins
80923a2025 Fix undefined reference to webShortcutModel
This was incorrectly capitalized, so I just went ahead and properly
capitalized it so we stop making this mistake!
2025-05-15 13:38:46 -04:00
l10n daemon script
12882586d3 GIT_SILENT Sync po/docbooks with svn 2025-05-15 01:42:42 +00:00
Joshua Goins
d51e68e9e2 Fix the room list header margin in Kirigami >6.14
They changed how margins behave when there's no navigation buttons in 7b02df40381b28de97fab1dd8d97182778c242df
so we are actually adding more padding ontop of the existing one.
2025-05-14 17:41:45 -04:00
l10n daemon script
7f6e489f20 GIT_SILENT Sync po/docbooks with svn 2025-05-14 01:41:32 +00:00
l10n daemon script
161111bf5c GIT_SILENT Sync po/docbooks with svn 2025-05-13 01:43:24 +00:00
James Graham
5452c51c6a Elide the user ID in UserDetailDialog if it's too long
Elide the user ID in UserDetailDialog if it's too long

BUG: 501483
2025-05-12 19:00:29 +01:00
l10n daemon script
09917d45e3 GIT_SILENT Sync po/docbooks with svn 2025-05-12 01:37:54 +00:00
James Graham
101a8b9ec3 Yeet HoverActions into the sun
Replace HoverActions with an inline action component that appears on hover. There are only actions for reply and react if there is space the overflow button opens the normal message menu.

NOTE: the most recent update changes things slightly, from the images below the buttons are now top aligned because of potentially hige messages. The actions are also now disabled for compact mode as they never really made sense there anyway. The menu now has all options so no one is missing out.

For normal messages

![image](/uploads/b8679eb09c9190404fc84f01e14169af/image.png){width=419 height=138}

When space is limited

![image](/uploads/ecd7c725ea2526689e586a2d786f389e/image.png){width=411 height=130}

User messages

![image](/uploads/767ef09f6650a5fb6abf3a49ef9f9b90/image.png){width=296 height=114}

BUG: 503784
2025-05-11 11:11:52 +01:00
l10n daemon script
a04769baad GIT_SILENT Sync po/docbooks with svn 2025-05-11 01:40:13 +00:00
l10n daemon script
07441df3f6 GIT_SILENT Sync po/docbooks with svn 2025-05-10 01:40:07 +00:00
Joshua Goins
b5465cd8d0 Fix one more ownership issue that causes crashes when switching rooms
I was hitting one more annoying crash with a backtrace inside QCache,
because we didn't set the ownership propetly for one last model. Now I
don't hit it anymore.
2025-05-09 15:09:54 -04:00
James Graham
0a2af02c5f Restore hover actions for the cpp message delegate
Restore hover actions for the cpp message delegate

BUG: 503843
2025-05-09 13:03:23 -04:00
Tobias Fella
3183be460e Implement OIDC registration/login compat 2025-05-09 18:20:21 +02:00
Tobias Fella
beb72dfa48 Actually fix TextHandlerTest 2025-05-09 14:44:44 +02:00
Tobias Fella
60d493e34b Re-enable texthandlertest on CI 2025-05-09 14:44:44 +02:00
Joshua Goins
36a5e8bdb5 Package new "Send a Location" button icon for Android
I forgot to add this in 5d4529ccf9.
2025-05-09 08:44:21 +02:00
l10n daemon script
489e60996a GIT_SILENT Sync po/docbooks with svn 2025-05-09 01:36:18 +00:00
Joshua Goins
3d15e4f061 Use FormCard on the invitation page
It now looks a bit nicer, and I made sure everything scales down to
mobile as well.
2025-05-08 15:48:55 -04:00
Joshua Goins
28c39292f7 Show the time when we were invited on the invite page
Currently, this is something that's missing even in clients like Element
(!?!) I will sometimes miss when invites are sent - like when I'm
sleeping - and then when I start back up NeoChat I have no idea when
they tried to invite me. This can get worse on bigger timescales, like
when you go on vacation for a few days.
2025-05-08 15:48:55 -04:00
Joshua Goins
d7c9bea783 Add spoiler formatting to the quick format bar 2025-05-08 15:39:34 -04:00
Joshua Goins
e232501715 Use the new strikethrough syntax in the quick format bar 2025-05-08 15:39:34 -04:00
Joshua Goins
4757ac11dc Allow striking through text with ~~
Similar to spoilers, some Markdown flavors like GitHub's or Discord's
allow you to strike through text with ~~. Normally, the only way to do
this on most Matrix clients (including Element) is surrounding text with
<del> tags. As expected, no one knows how to do this.

So now NeoChat supports the ~~ syntax. We can reuse the existing spoiler
parser for this after making it generic. I have added new test cases for
this syntax. This does not affect the quick format bar yet.
2025-05-08 15:26:00 -04:00
Joshua Goins
14cbbd394f Differinate between regular text and revealed spoiler text
When you reveal a spoiler, it removes the background from the spoiler
block - effectively making it seem like regular text. There's also a
minor issue that we use the color scheme's textColor as the "spoiler
block" color, and it will usually end up white. Most chat programs have
typically used a dark background for spoiler blocks, even on dark
themes.

I killed two UX issues with one stone, first by making the spoiler block
color fixed (but mixed with the textColor, to ensure it's readable
regardless of Breeze Light/Dark.) And second by only changing the text's
visibility, not the background.
2025-05-08 15:25:37 -04:00
Joshua Goins
5d4529ccf9 Replace the "Send a Location" button icon with a more fitting one
"globe" is super generic, "mark-location" is way more fitting - not only
in name but also in appearance.
2025-05-08 14:42:10 -04:00
Joshua Goins
baa214df0e Don't insert spoilers inside of code blocks
Also add some new test cases to catch these weird situations.
2025-05-08 12:40:10 -04:00
Joshua Goins
6b5996a1bd Add custom syntax for tagging spoilers
Currently the only two ways to spoiler text in your message is either:
* Using the /spoiler command
* Manually typing the data-mx-spoiler span HTML blocks

Neither one is discoverable, or friendly to users really. Instead, we
should extend our existing Markdown-based formatting syntax with one
that can handle spoiler tags. I chose the || syntax to match Discord,
since Element doesn't seem to adopt one.

Unfortunately, CMark does not support custom extensions (see
https://github.com/commonmark/cmark/pull/123) so we have to implement
our own parsing function. New tests are also added for this too.
2025-05-08 12:40:10 -04:00
Joshua Goins
86a43c4f7e Register TextHandler::Type with Q_ENUM
This makes Qt spit out more useful debug messages when printing this
enum.
2025-05-08 12:40:10 -04:00
Joshua Goins
107f3b6616 Make MessageDelegateBase::cleanupIncubator static
This doesn't need to be attached to an instance of MessageDelegateBase,
and avoid various problems when called from a MessageObjectIncubator
callback. (Because it needs access to the "this" pointer.)

Fixes a regularly occurring crash when switching rooms.
2025-05-06 19:33:09 -04:00
Joshua Goins
bcab617b9d Move m_sectionIncubating/m_avatarIncubating/m_readMarkerIncubating set
This should be set *before* we clean up the incubator, because it could
end up accessing invalid data when the incubator is freed. This fixes a
regularly occuring crash when switching rooms.
2025-05-06 19:31:41 -04:00
l10n daemon script
f6c12dc27a GIT_SILENT Sync po/docbooks with svn 2025-05-06 01:37:59 +00:00
Joshua Goins
3e954a24a1 Fix the KDE_CI env var check
This should make it possible to run this test on regular machines again.
2025-05-05 20:39:18 +00:00
Joshua Goins
08dc05c707 Refactor lastEventIsSpoiler, remove lastEvent() call that isn't needed
This is only called after we already get an event with lastEvent() so
doing it again is useless. Instead, we should refactor it to behave like
similar functions (e.g. isEventHighlighted.)
2025-05-05 20:32:22 +00:00
Tobias Fella
8817ca7f2b Return member objects for users that are not actually members
Most of the data in the objects will be empty, but at least a valid matrix id is provided.
This fixes missing data in some places in the UI (e.g., in HiddenDelegate)
2025-05-05 22:19:52 +02:00
Tobias Fella
5262ec4b56 Show event type for hidden events 2025-05-05 20:18:58 +02:00
James Graham
f4799a4287 Rework MessageDelegate in cpp
Rework MessageDelegate to be mostly a cpp class. This allows us to only load the components that are actually needed saving memory.

In testing using memtest it saved ~30% versus the current implementation.
2025-05-05 16:25:40 +01:00