In src/gui/TrayIcon.qml the showUpWatcher looked for the settingsFolder
in the qrc file context so it didn't notice changes in the real settingsFolder.
Fixes#126
Encryption keys, themes and general config dir (if used) were stored in
the default directories even if Moment-specific environmental variables
were present.
This is a bad place to display a huge error because it is a repeating
query. And also this is the first thing people see when opening the app
for the first time and it is a bad impression.
By Linux convention for GUI software, Ctrl+Q is quit.
By general chat app convention, Ctrl+K is filter.
Some keybindings have been changed to make space for these:
Reply is now Ctrl+R
Remove is now Ctrl+Shift+R
"Previous message" is now Ctrl+I
I did not want to alter the defaults more than this.
But ideally, you would want "Previous message" and "Next message"
adjacent, so it makes sense to swap Ctrl+U and Ctrl+J as well.
Moment has different default directories and is controlled by
different environment variables. On first startup, Moment
detects Mirage directories and offers to copy them.
It doesn't make sense to migrate logins without migrating encryption
keys, so this is now included in migration. Themes are migrated as well.
Only offer migration is only if both config and data directory are able to be
migrated.
By default, TapHandler is used for all input types. GlobalTapHandlers
was blocking finger touch events from reaching the underlying elements,
breaking the app for mobile devices with a touch screen.
Sending screenshots of error popups is an easy way to leak information.
But if the popup is transparent, that makes it so much easier.
For the sake of privacy, error popups should be opaque.
I just spent half an hour debugging why some setting didn't work for me.
It was because I was putting it in Chat instead of Keys.Chat. This is
very confusing when you're making your own partial config override file.
I've added comments to the classes with identical names to hopefully
make this less confusing.
* Key to jump to latest/oldest unread #186
Latest/oldest unread/highlight.
Default bindings match the bindings for previous/next unread/highlight.
Allows the user to read messages in the order of receiving them.
Or the opposite order, to stay on top of things.
* Clean up code
Use let instead of var, and proper indentation
* Fix case for some variables in RoomList.qml
Some variables were using snake_case instead of camelCase like usually
done in QML code (note that the model items come from python)
Co-authored-by: miruka <miruka@disroot.org>
People modify animationDuration because they want a snappy client.
But it also affects a few things that do not contribute to that
and should remain constant speed:
- Busy indicator
- Progress bar animation
- Ping indicator in AddAccount ServerBrowser
- Image rotation button cooldown
When we are invisible and restart the client, set ourself to invisible,
not offline, and correctly keep the status message that should be set
whenever we get back to a visible online.
- Up to 5 previously set status are now shown under the field
for quick access; the history is shared between accounts
- When focusing the field, the text gets auto-selected since most of the
time we want to set a totally different status, not edit the current one
- Typing in the field will autosuggest any matching history entry
- Keyboard focus now skips the "apply" button, since we can just hit
enter in the field
If our presence is invisible from the first sync, we'll never receive a
presence event telling us so.
The server just knows from the beginning, so show our local presence as
echo instead of echo_invisible (which causes the half-opacity presence orb)
If another client becomes invisible/offline or we stop syncing for some
time (due to e.g. connection issue or debugger freeze), the server will
tell us our presence is offline. Following this update would lead to our
our current connection being terminated, so ignore it.
Side-effect: if we become invisible and another client with this behavior
is using the account at the same time, this will result in us becoming
online/unavailable again a few seconds later, since we follow
updates for these status to avoid conflicts