Commit Graph

759 Commits

Author SHA1 Message Date
miruka
e947fe7695 Refactor PageLoader show methods
Also lets the chat page recycling work with showPrevious() (ctrl+tab)
2020-09-02 15:19:27 -04:00
miruka
a4bbbfee87 Recycle chat pages if possible when switching room
The chat page is complex and slow to create, which creates a visible lag
when user switches room.

Instead of throwing the pre-switch one away and
making a new one from scratch, keep the same page and update its user &
room ID for a big improvement in responsiveness. The rest is automatic
thanks to QML property bindings.
2020-09-02 15:19:21 -04:00
miruka
509c4a0871 Add defaultCurrentIndex to H(List/Grid)View
When the model of a view changes, Qt automatically sets the
currentIndex to 0.
Reset it back to the set default (usually -1) instead.
2020-09-02 14:40:06 -04:00
miruka
3fb64dbef5 Fix EventContextMenu errs if timeline has 0 events 2020-09-02 14:02:12 -04:00
miruka
d8c006a8c8 Remove a bunch of leftover debug prints 2020-09-02 13:41:31 -04:00
miruka
f5cb3ecaa0 Keep a {id: item} cache for ModelStore models
Accelerates the ModelStore ListView find() function,
which now just has to get an object key instead of looping through the
whole model.
2020-09-02 13:38:11 -04:00
miruka
b1398e5dbf EventDelegate: remove pointless content x Behavior 2020-09-02 12:06:09 -04:00
miruka
eebe215a62 Fix image viewer size 0x0 while loading & for GIFs 2020-09-02 11:53:44 -04:00
miruka
5a1ca24e65 Image viewer open: pause timeline URL preview GIF 2020-09-02 11:40:49 -04:00
miruka
377f1ffd4a Fix URL preview thumbnail GIFs not being animated 2020-09-02 11:37:51 -04:00
miruka
519eaa2ca0 EventDelegate: replace json() by dict() for debug
When debugging an event, `target.dict()` will return an object that can
be properly worked with and pretty-printed using the `.j` command.
2020-09-02 11:26:44 -04:00
miruka
9c4d37f64b Fix copying non-message single event text
For events with no body in their source, copy Mirage's generated
content text.
2020-09-02 10:56:45 -04:00
miruka
b79006f2ec Rename menu "Debug this event" to just "Debug" 2020-09-02 10:43:12 -04:00
miruka
b3ca5599cf Simplify & fix bugs event images context menu
Fix copy menu entries for messages with URL thumbnail previews
2020-09-02 10:40:37 -04:00
miruka
648c37f413 Refactor event context menu into its separate file
Have only one menu component attached to the EventList,
instead of every delegate carrying its own.
2020-09-02 09:47:42 -04:00
miruka
b5b968db3a Focus center event if scrolled up when ctrl+j/k
When using the focus(Previous/Next)Message keybinds, no message is
focused and the view has been scrolled up, focus the message in the
center of the view instead of returning to the list's bottom to focus
the most recent one.
2020-09-01 18:24:40 -04:00
miruka
8d61826887 Fix up/down not working with cursor in @word
In the composer, when the text cursor was inside a word starting
with a @ but not matching any username (thus the completion UI being
invisible), pressing up/down arrow would not do anything instead of
going to the prev/next line.
2020-09-01 14:27:28 -04:00
miruka
8b37ca2524 Add a persistent zoom setting to settings.json
The zoom keybinds now modify this setting directly.
The `uiScale` property in themes now default to using this zoom setting,
since just removing it would need of annoying changes through theme
files and QML code, and is best left to until the future theming
overhaul update.
2020-09-01 14:19:40 -04:00
miruka
bd8c6ec0fc Force-reload background image on config reload
Make it possible to see the change without restarting Mirage if an
image used for the theme's background was edited, or if used did the
mistake of typing "/path/to/img" then corrects it to
"file:///path/to/img".
2020-09-01 14:08:31 -04:00
miruka
f5ad22fcfb EventDelegate: fix separationSpacing indentation 2020-09-01 13:48:15 -04:00
miruka
39f159f0a3 Fix the one-line events combining
When there's a one line (emote or non-message) event with its avatar
shown and combinable events follow it, that first event delegate's height
is supposed to be one line with the avatar overflowing into
the following event's blank space.

This behavior hasn't been working for a long time. This commit restores
it, along with improving the related code's quality.
2020-09-01 13:48:15 -04:00
miruka
27c3d08031 EventDelegate/Content property usage improvements
- Remove pointless confusing aliases for avatar properties
  (smallAvatar, collapseAvatar, etc)

- Make some EventDelegate properties readonly as they should be

- Use Layout.preferredWidth/Height for avatarWrapper instead of both
  minimum and maximum W/H
2020-09-01 13:48:15 -04:00
miruka
107eddaa5c Use HTextArea.RichText, not Qt.RichText 2020-09-01 13:48:15 -04:00
miruka
6d26ac9006 Join/LeftBanner: auto keyboard-focus first button 2020-08-28 07:40:48 -04:00
miruka
78acb51220 Refactor the QML past events loading code
- Make the code cleaner and more declarative
- Start loading past events when the join state of the room changes,
  e.g. when accepting an invite, load history right then
- Properly cancel the loading task when leaving the room chat page
2020-08-28 07:19:26 -04:00
miruka
702497cb48 Fix 403 error on invited room chat page
Don't try to fetch room members while user is only invited or has left
the room.
2020-08-25 09:37:09 -04:00
miruka
0d2be820fe Allow "replying" to an event with a file
Send a pseudo-reply consisting of two messages: a `m.text` which is just
a reply with an empty body, then the file event itself.

This is a workaround to the restriction imposed by the Matrix API,
which prevents us from simply attaching a reply to a media event:
https://matrix.org/docs/spec/client_server/latest#rich-replies
2020-08-24 10:17:04 -04:00
miruka
6d9a013d5d Composer: allow sending a reply with no text
Useful for "forwarding" a message (to the same room)
2020-08-24 09:54:49 -04:00
miruka
bbb46a9feb Disallow whitespace in composer aliases
These cause problems with the composer alias parsing code.
If an alias from the config file has whitespace, only the first word
will be taken into account (ignoring any leading or trailing whitespace).
2020-08-24 09:54:49 -04:00
miruka
83f35c034e Refactor MessageArea composer alias handling
Simplify the code, make it more declarative, and improve the reliability
of sending typing notifications (notably when changing the used alias in
the middle of a message).
2020-08-24 09:54:49 -04:00
miruka
b83fd63769 Save composer state as right user when using alias
If the chat was opened under e.g. "@user1:example.org", but the
composer text is "o abc" where "o" is a composer alias for
"@other_account:example.org", save the composer text to state.json as
"@user1:example.org" and not the alias user.
2020-08-24 09:54:49 -04:00
miruka
df3f1fb645 Remove all Backend "get_any_client"-using methods
thumbnail() and download() were remaining.
Use a direct and carefully chosen MatrixClient's methods instead to
avoid problems mentioned in the previous commit 7502c1.
2020-08-24 09:54:43 -04:00
miruka
7502c1a9b4 Don't use TapHandlers in TextArea/TextField
Causes conflicts on touch/pen which prevent the component from being
focused. Use the normal press/pressHold signals instead.
2020-08-23 15:41:20 -04:00
miruka
71a2951f5b Move tooltip window hover detector to HToolTip
Having a HoverHandler covering the root ApplicationWindow causes
problems for some Qt Quick Controls with pen/touch, e.g. it's impossible
to focus a TextArea/TextField.

The HoverHandler is moved to HToolTip (since it's used for those),
targets the ApplicationWindow but is now only enabled while a tooltip is
visible.
2020-08-23 15:17:06 -04:00
miruka
fc6827807c Fix mentioning blank display names
If the display name of a user is blank (e.g. just a space character),
autocomplete it as a user ID.

If the display name starts or ends with whitespace, trim it.
2020-08-23 10:46:59 -04:00
miruka
fbf6e48b5b Fix mentioning users without display names 2020-08-23 09:41:41 -04:00
miruka
e79094c18c Fix click on user delegate not making it a mention 2020-08-23 09:23:34 -04:00
miruka
4000d70514 Reset input method when autocompleting a user
Fixes IME being left in a strange state upon autocompleting a word that
was being edited.
2020-08-23 09:14:45 -04:00
miruka
0434659ad1 CompletableUserDelegate avatar: respect uiScale 2020-08-22 15:17:52 -04:00
miruka
223197b84e Pass HTTPS server URL to Python when possible
Reduce the time it takes to connect to the server since Python won't
need to guess the real protocol.
2020-08-22 15:15:15 -04:00
miruka
9cc9229fdb Simplify pinging & properly close aiohttp session 2020-08-22 13:19:38 -04:00
miruka
e7f769b344 HTextArea: consider preeditText for getWordAt()
`preeditText` is partial input from IME and touchscreen
autocompleting keyboards, consider it together with `text` for the
`getWordAt()` function.

This should allow user autocompletion to work properly in these
specific conditions.
2020-08-22 01:47:53 -04:00
miruka
eadc4bb317 Remove unused function inside UserAutoCompletion 2020-08-22 01:44:41 -04:00
miruka
bc3d6d902f Fix @autocomplete closing after one character
Typing e.g. "@a" would work, but "@ab" would always instantly close
the autocompletion UI if the cursor was at the end of the text area.
2020-08-22 01:23:44 -04:00
miruka
12c47476fc Add theme properties for autocompletion UI 2020-08-21 12:10:22 -04:00
miruka
044060d1c0 Color name when highlighting member delegates 2020-08-21 12:10:22 -04:00
miruka
010675001c Add bottom margin to autocompletion UI 2020-08-21 12:10:22 -04:00
miruka
6f37ce3519 Fix completing in the middle of a name with spaces 2020-08-21 12:10:22 -04:00
miruka
bea1d60621 Fix autocompletion for users without display name 2020-08-21 12:10:22 -04:00
miruka
cd81c94ce8 Fix autocompletion for display names with spaces 2020-08-21 12:10:22 -04:00
miruka
9dc9a5e70f Clip the autocompletion UI 2020-08-21 12:10:21 -04:00
miruka
9b3d01b9a8 ServerDelegate: add ping icon tooltips 2020-08-21 12:10:21 -04:00
miruka
93b73b86bb Add a "table header" to server browser 2020-08-21 12:10:21 -04:00
miruka
6160deace5 Improve ServerBrowser text wording 2020-08-21 12:10:21 -04:00
miruka
85f4620b3b Equalize "Homeserver address" label padding 2020-08-21 12:10:21 -04:00
miruka
339341da68 Disable new scrollbar auto-show behavior for now
There are still some usability issues to fix with it
2020-08-21 12:10:18 -04:00
miruka
b79b032184 Better delegate for completable users 2020-08-21 09:27:01 -04:00
miruka
6dcc244998 Move UserAutoCompletion outside of Composer 2020-08-21 05:50:37 -04:00
miruka
4ea3a7d52a Remove HFlickable leftover debug print 2020-08-21 05:33:59 -04:00
miruka
bd01d9edd0 Fix segfault when leaving loading server list page 2020-08-21 05:18:08 -04:00
miruka
6ba6202771 Fix clicking on server in server browser 2020-08-21 05:10:32 -04:00
miruka
2ccb28fa49 Box/popups: ignore enter press on disabled buttons 2020-08-21 05:08:12 -04:00
miruka
8fbe59f6eb Fix cursorShape over fields inside a HFlickable
Bug introduced in 6b907, made the cursor stay as a normal arrow when
hovering text fields/areas inside a HFlickable due to the
HKineticScrollingDisabler's width/height being incorrectly set.
2020-08-21 04:58:58 -04:00
miruka
43b14f3129 Make autocompletion work not just at end of line 2020-08-21 04:44:55 -04:00
miruka
1b919ec7be Cursor moves before last word: close completion UI 2020-08-21 01:46:07 -04:00
miruka
063f9d2b1d Only mention tab-completed usernames 2020-08-21 01:21:51 -04:00
miruka
5ba669444d Add basic user autocompletion UI 2020-08-21 01:21:10 -04:00
miruka
ec17d54923 ServerDelegate: ignore compact mode 2020-08-21 01:19:18 -04:00
miruka
cc06645275 Add spinner when fetching homeservers list 2020-08-21 01:19:18 -04:00
miruka
4f1b007e6f Add some top/bottom padding to account bar 2020-08-21 01:19:18 -04:00
miruka
ede99b310e Fix login box tab shortcuts 2020-08-21 01:19:18 -04:00
miruka
3c79ffbf21 Don't show register/reset tabs on sso login box 2020-08-21 01:19:18 -04:00
miruka
e303ee1fc9 SignInSso: return to server list on Cancel click 2020-08-21 01:19:18 -04:00
miruka
5ac5dbd1d5 Add usual FlickShortcuts to server browser 2020-08-21 01:19:18 -04:00
miruka
21fbe7a96b Show scrollbars for a few seconds at first
Lets the user know that there's content to scroll.
2020-08-21 01:19:18 -04:00
miruka
2f1889423b Room & member filter fields: support (shift+)tab 2020-08-21 01:19:17 -04:00
miruka
007a11b4aa Change "go to homeserver address" icon 2020-08-21 01:19:17 -04:00
miruka
d945bed0a3 Increase "Homeserver address" text bottom padding 2020-08-21 01:19:17 -04:00
miruka
d3092c4929 Clear server list highlight when field text edited 2020-08-21 01:19:17 -04:00
miruka
c51a771a65 Add colored border to HListView highlight delegate 2020-08-21 01:19:17 -04:00
miruka
ab390704eb Use homeserver URL field also as a filter field 2020-08-19 04:39:50 -04:00
miruka
16970d5e56 Auto-detect homeserver scheme:// 2020-08-19 02:14:46 -04:00
miruka
2fa8b2c5f9 Add a public server list to the initial login page 2020-08-19 01:13:34 -04:00
miruka
1a6273681d Fix HMenuItemPopupSpawner 2020-08-19 00:16:42 -04:00
miruka
21fe4b7bd1 Add spacing between MemberDelegate name-last seen 2020-08-16 16:17:22 -04:00
miruka
cc7c0ad336 Add theme property to Utils
Gets set to the window.theme when a theme is loaded, done to avoid
having to refer to the window object from utils.
2020-08-03 01:29:37 -04:00
miruka
a389238024 Add window.makePopup(), utils.makePopup() wrapper 2020-08-03 01:26:35 -04:00
miruka
c813e92ac7 Move hideErrorTypes & showError() to PythonBridge 2020-08-03 01:19:08 -04:00
miruka
040e966d27 Remove utils.sendFile(), useless wrapper 2020-08-03 01:05:19 -04:00
miruka
865d6b8bc8 ServerBrowser: strip trailing slashes from URL 2020-07-27 16:40:04 -04:00
miruka
db5d9b57f8 RoomDelegate subtitle: lazy-fetch missing profiles 2020-07-27 04:32:00 -04:00
miruka
a0912106ca EventDelegate: fix not setting fetchProfilesFuture 2020-07-27 04:24:40 -04:00
miruka
d127ad978c Correctly handle initial sync member events
Previously, member events in initial syncs (unless user had "hide member
events" and "hide profile events" set to false in their config) were
completely discarded with the help of a sync filter, instead of simply
being hidden like events loaded from room backfilling.

This was done due to the common case of rooms getting only
userconfig-ignored/hidden events on startup (especially with the
low number of initial events requested for lazy initial sync),
and thus having nothing to show as "last message" in
the room list (room delegate subtitles).

Other problems resulted from this, like missing join/leave events
when the config was set to hide profile events but not other
member events, and the "Members not synced" (#54) in encrypted room
with recent discarded member events.

The discarding filter is no longer used. Instead, if a room in the room
list has no visible "last message" and is currently visible to the user,
messages will be lazily fetched until we find something adequate or the
room goes out of view.
2020-07-27 03:59:41 -04:00
miruka
fcf6b45bf6 Disable timeline scrolling when a popup is open 2020-07-27 00:16:04 -04:00
miruka
3ab2864f22 SignInSso: add a copy URL button 2020-07-26 20:58:14 -04:00
miruka
157ea2ffb2 Add support for SSO authentication 2020-07-26 20:34:06 -04:00
miruka
d7907db547 Ask for server URL before showing sign in box
Contact the server's .well-known API before anything to get
available login flows instead of blindly assuming it will be
m.login.password, and to get the server's real URL instead of
requiring users to remember that e.g. it's "chat.privacytools.io"
and not just "privacytools.io" despite user IDs making it look like so.

The server field will also now remember the last accepted URL.
2020-07-24 02:36:24 -04:00
miruka
87ad3ccab1 Fix truncated "Loading previous messag..." text 2020-07-22 16:26:30 -04:00
vslg
6b9077816e Add HKineticScrollingDisabler to HFlickable
Also make horizontal scrolling available when
kinetic scrolling is disabled
2020-07-22 15:45:05 -04:00
miruka
5dbcf9c825 Image viewer: fix info bar text vertical alignment 2020-07-22 01:31:06 -04:00