Commit Graph

854 Commits

Author SHA1 Message Date
miruka
8d4e67d6a4 Fix EventList stuff depending on scroll position
Add visibleStart/End properties to HListView that take into account the
ListView's originX/Y, and not just contentX/Y which can be largely
offset.

Use those new properties in EventList for message focusing (fix
ctrl+up/down sometimes incorrectly focusing the message at the middle of
the screen even when we're scrolled at the bottom), and detection of
when we can update the read marker (fix cases when we're scrolled at the
bottom but the read marker never updates).
2021-03-03 17:14:55 -04:00
miruka
509b35a633 Make flickToTop/Bottom faster and more accurate 2021-03-03 17:14:55 -04:00
miruka
42f04b013e Add PCN theme system
Coexist with the old theme system for now. QML components have to be
updated to use the new system.
2021-03-03 17:14:55 -04:00
miruka
eed2cc4818 Remove double blank lines from QML files 2021-03-03 17:14:55 -04:00
miruka
93eba7ce92 Fix incorrect account switching keybind order
The keybinds to switch to the first room in account number X did not
behave properly when the accounts weren't ordered lexically.
2021-03-03 17:13:51 -04:00
miruka
3564e7a571 Turn bookmarks/aliases/at_index into Sections 2021-03-03 17:13:51 -04:00
miruka
db12036372 Use new PCN format for settings config file 2021-03-03 17:12:09 -04:00
miruka
75fbf23b21 Refactor user_files module & add live reloading
- Cleaner design for the backend user_files classes and simplified
  interaction with QML
- Config and theme files will now automatically reload when changed on
  disk
- Removed manual reload keybind and button
2021-03-03 17:12:09 -04:00
miruka
00c468384a Delay increasing timeline cache buffer, reduce lag
When switching rooms, first load only the delegates in the user's view
and wait a second before expanding the cacheBuffer and loading more
delegates outside the view. This reduces the amount of delegates to load
all at once by 3x.
2021-03-03 17:12:09 -04:00
miruka
ce3ed86bef Fix timeline occasionally breaking on room switch
When a chat page is recycled, set the eventList model to
null, wait for any animations to finish, then explicitely reassign it.
This prevents from model from randomly mixing up old and news delegates.
2021-03-03 17:12:09 -04:00
miruka
ed74592769 Add HToolTip.instantToggle(), use for some buttons
Used for buttons that trigger a tooltip instantly: if the tooltip is
currently visible, hide it.
2021-03-03 17:12:09 -04:00
miruka
0eb57c5986 Move composer alias "?" icon to be inside field
Be more consistent with the user ID field and its copy button.
2021-03-03 17:12:09 -04:00
miruka
28b25a53ea Make account user ID an easily copiable RO field 2021-03-03 17:12:09 -04:00
miruka
6af4cca315 Add FieldCopyButton.qml, split from SignInSso.qml 2021-03-03 17:12:09 -04:00
miruka
32484c3ae5 Prevent focusing readOnly field/areas on click 2021-03-03 17:12:09 -04:00
miruka
74ffbdb0a8 Account settings: make user ID label copiable 2021-03-03 17:12:09 -04:00
miruka
3d8914cb39 HTextContextMenu: less entries for readOnly fields
If the context menu is for a readOnly field or area, hide pointless
options like undo/redo and cut/paste.
2021-03-03 17:12:09 -04:00
miruka
dba41c30c2 Put HAvatar's tooltip image inside a Loader
Make sure to not load tooltip images unless the user is
currently trying to see one by hovering on an avatar.
This also seems to reduce idle CPU usage.
2021-03-03 17:12:09 -04:00
miruka
7564b40c3e Fix copying multi-line selected rich text
For rich text (rendered HTML) fields and areas, the selectedText
property for some reason contains "\u2028" or "\u2029"
characters that look like newlines in Qt programs but are just
invisible anywhere else. Translate them to normal "\n".
2021-03-03 17:12:09 -04:00
miruka
da75568428 Fix segfault on coroutine cancelling from QML
Since 87fcb0a773f4855cdae7212fa9448a05de57be56, it was possible to call
a Python coroutine, but cancel it (due to parent component destruction)
before Python even has time to start it.
The registred QML callbacks for this coro would then be called,
potentially causing a segfault if that callback tried to access the
parent component or its properties.
2021-03-03 17:12:09 -04:00
miruka
b94570f853 Support drag and drop for files and text in chat 2021-03-03 17:12:09 -04:00
miruka
63fe083cad Fix Alt+(Shift+)U/M ignoring local unread rooms
The goTo{Previous,Next}{Unread,Mentioned}Room keybinds only took into
accounts rooms that had a server-sent unread/highlight count, and not
those that only had a client-side unread "!" badge (e.g. for rooms that
get new messages but that have push rules disabling notifications).
2021-03-03 17:12:09 -04:00
miruka
4c04c1158c Fix sign in button always showing spinner 2021-03-03 17:12:09 -04:00
koudja
52b0bb18cb Add room bookmarking: bookmarks are always on top
Introduce a bookmark system for rooms:
a room bookmarked will always appear on top of every other
(for a given account).

Bookmarking can be done through context menu on targeted room
(as well as un-bookmarking) or through settings.json
(key roomBookmarkIDs) for permanent bookmark.
roomBookmarkIds is a {account_user_id: [room_id]} dict.
2021-03-03 17:12:09 -04:00
miruka
38360b101a Fix JoinRoom cancel button not going to last page 2021-03-03 17:12:09 -04:00
miruka
f682e0e261 Fix onLoopException calling showError incorrectly 2021-03-03 17:12:09 -04:00
hashashini
fd69046528 Require double click to open homepage (#140)
Require double click to open homepage (#140)

* Update TopBar.qml

To raise Mirage's window in a stacking wm, clicking on an area
without text, especially in the topbar, is probably what most users do.
In the case of the 2nd button in the topbar this currently accidentally
opens a browser window and thus becomes a privacy issue.

So for now require a double click to open mirage's homepage.
Alternatively the size of this button should at least be closely
restricted to the text "Mirage ${version number}".

In the long term it might be preferable to put this link into
some kind of "about" section instead of the "title" section.

* Make tooltip indicate that double click is required

Co-authored-by: miruka <miruka@disroot.org>
2021-03-03 17:12:09 -04:00
miruka
3bfaee4758 Fix invisible "Copy link address" event menu entry
menu.mediaType can be an enum value, which includes 0 to represent a
web page link, or null if no link was right clicked.
Check for null explicitely when evaluating whether the menu entry
should be displayed.
2021-03-03 17:12:08 -04:00
miruka
6e2f3440d7 Close reply bar when switching/recycling chat page 2021-03-03 17:12:08 -04:00
miruka
1feda8667f Cancel reply when pressing keybind on same event 2021-03-03 17:12:08 -04:00
miruka
6a36943dae Account settings: fix incorrect "User ID:" color 2021-03-03 17:12:08 -04:00
miruka
8acc7299e9 Add workaround for delegate stuck transition bug
Sometimes and randomly, a HListView/HGridView delegate's
add/populate transition will stop before completion.

This especially happens on startup when loading a large room list,
one room might get stuck and left tiny or invisible, despite its
normal space still being taken.
2021-03-03 17:12:08 -04:00
miruka
35fa1fa16b Fix account page not being highlighted on startup
If the page loaded on app startup is account settings or add new chat,
ensure the room list properly highlights the corresponding account
delegate.
2021-03-03 17:12:08 -04:00
miruka
2664bf1e93 HTile: prevent opening multiple context menus
If a context menu is already opened for that HTile when right clicking
or using a keybind like Alt+P (openPresenceMenu), close it instead of
just creating a duplicate one.
2021-03-03 17:12:08 -04:00
miruka
e6499d8fba Fix read counter display on EventImage
- Fix extra spacing on the right of the date when there's no read
  counter to show

- Fix read counter not being colored
2021-03-03 17:12:08 -04:00
miruka
ee1091b4dc Don't pass Python Future objects to QML
Returning a Future doesn't work on Windows for some reason
(https://github.com/thp/pyotherside/issues/116).

Instead of using these objects from QML to cancel running coroutines,
call a Python QMLBridge function that takes a coroutine UUID and will
take care of the cancelling.
2021-03-03 17:12:08 -04:00
miruka
53d2ab17af Fix display of right-to-left text in timeline
Set an explicit default left alignment for label components, to prevent
other people's right-to-left names or text from messing up the UI
in a left-to-right environment.
2021-03-03 17:12:08 -04:00
miruka
dbd78587fe DebugConsole: improve field placeholder & .help 2021-03-03 17:12:08 -04:00
miruka
e3fcb39556 DebugConsole: improve text & border coloring 2021-03-03 17:12:08 -04:00
miruka
d6062a8320 DebugConsole: add border "prompt" to delegates 2021-03-03 17:12:08 -04:00
miruka
192112ab4e DebugConsole output: add text selection & copying 2021-03-03 17:12:08 -04:00
miruka
4cc4229728 DebugConsole: restore non-history text on down key
When user starts typing something in the console, then navigates the
history with up but comes back to normal input by pressing down, restore
the text that was initially typed before navigating.
2021-03-03 17:12:08 -04:00
miruka
68d1ddfa61 Fix DebugConsole cursor at position 0 invisible 2021-03-03 17:12:08 -04:00
miruka
7d27acfcc8 Allow multi-line input in DebugConsole
Use ctrl/shift/alt+return to insert a newline, tab to insert 4 spaces
2021-03-03 17:12:08 -04:00
miruka
d9118ef24e Clear HList/GridView checked on model change
Clear the checked items and prevent potential segfaults
2021-03-03 17:12:08 -04:00
miruka
58613446f0 Fix event context menu targeting wrong message
If user right clicked on the most recent event in the timeline
(index 0), a new message was posted in the room (the new index 0),
and the user right clicked on it, the EventContextMenu's `event`
property relying on the index would not detect any change and
thus would still target the previous event.

This affected options depending on this property like "Reply".

The problem was reproducible with any same index repetition, not just 0.
2021-03-03 17:12:08 -04:00
miruka
c861c29b73 Add nonKineticScrollingSpeed multiplicator setting 2021-03-03 17:12:08 -04:00
miruka
1df7cb8014 Add copyright header to source code files
Copyright notice as per
https://reuse.software/spec/#format-of-copyright-notices

Fixes #134
2021-03-03 17:12:08 -04:00
miruka
54234399f5 Fix "Mentions & keywords" notification level
Make it work in cases where multiple accounts are present in the room
and one of them is highlighted.
2021-03-03 17:12:08 -04:00
miruka
e8d8f7fe0b Add global notification control icon in top bar
The "Mentions & keywords only" option doesn't work yet in multi-account
cases: when notifications arrive for a room that multiple accounts are
part of, the first notification to arrive is let through, and the
duplicate later ones are ignored. The first notification to arrive may
not be from the account that gets highlighted, thus it is ignored under
the "Mentions & keywords" setting.
2021-03-03 17:12:08 -04:00
miruka
03e4f9b85e Make settings icon open a more complete menu 2021-03-03 17:12:08 -04:00
miruka
94a623f677 Print coro infos on get_client not found error 2021-03-03 17:12:08 -04:00
miruka
dcc3473ecf Don't show notification if window is focused 2021-03-03 17:12:08 -04:00
miruka
60a57db33e Fix QML Connections-using code for Qt 5.12 2020-09-16 08:29:07 -04:00
miruka
e65202cfbe Fix checkbox update when default state changes
Make sure to update checkboxes when their default value changes
and the user hasn't already changed the value themselves.

This fixes a dangerous issue with new room switching and
room settings checkboxes keeping their value from the previous room.
2020-09-16 07:46:27 -04:00
miruka
9ac4cd0a97 Separate localEcho & readCounter theme properties
Allows making the hourglass gray by default again, while the read
counter uses the accent color.
2020-09-16 06:40:21 -04:00
miruka
5ce30d6019 Add message echo/read counter color theme property 2020-09-15 14:55:03 -04:00
miruka
d7d111705f Don't center the room list on clicks by default
Previously, clicking to select a room would make the list jump around
to become centered again. This behavior is now reserved to keyboard
navigation.

A "centerRoomListOnClick" setting has been added to allow going back
to the previous behavior.
2020-09-14 12:02:28 -04:00
miruka
2712896456 Show read marker counts on messages
Tells how many people have the message as their last seen one in the
room.
2020-09-14 11:58:37 -04:00
miruka
0d7a33d3a9 Unify Sessions (shift+)tab and up/down navigation 2020-09-13 19:28:50 -04:00
miruka
fb846226f8 Focus filter field on member profile exit 2020-09-13 19:16:46 -04:00
miruka
9b1608b696 Delay members loading for faster room switching 2020-09-13 16:05:23 -04:00
miruka
6df9647b59 Faster switching of rooms from different accounts
Use a single [userId, roomId] property for the chat page.
This gets read of the intermediate state where the userId property has
been updated but the roomId one not yet, which led to the page unloading
and reloading itself until both were properly set.

Side-effect: when starting Mirage after this commit for the first time,
the last saved page will not load and user must click a room or
other page manually.
2020-09-13 16:05:15 -04:00
miruka
59748c7cc8 EventDelegate: better separationSpacing formatting 2020-09-11 14:50:27 -04:00
miruka
0ccf3d03c9
Merge pull request #125 from vSLG/system-tray
Add a system tray icon
2020-09-11 13:52:20 -04:00
vslg
67012d6334 Move tray code to a reasonable place
- Move required properties to top
- Do not use concatenation on qsTr, use .arg()
2020-09-08 08:47:00 -03:00
vslg
ae9f88cae5 Fix show up watcher 2020-09-08 08:47:00 -03:00
vslg
4382edc8b0 Rename drawAttention to restoreFromTray 2020-09-08 08:47:00 -03:00
vslg
6f9d983e03 Use settingsFolder instead of configDir 2020-09-08 08:47:00 -03:00
vslg
c41ed5d77d Improve system tray icon click behavior
- Middle click now closes Mirage
- A normal click now toggle window visibility
2020-09-08 08:47:00 -03:00
vslg
a543c79c02 Use Qt.quit() when closing the window
Qt.quit() is used because KDE Plasma will minimize
to tray by default when clicking on X button
2020-09-08 08:47:00 -03:00
vslg
8a04f80602 Use application name instead of hardcoding Mirage 2020-09-08 08:47:00 -03:00
vslg
bde7af8a5a Move system tray icon code to its file 2020-09-08 08:46:40 -03:00
miruka
b12e38f41b Fix emote events (/me) display name display 2020-09-05 09:14:40 -04:00
miruka
5dca7d0a35 Remove leftover debug prints in PageLoader 2020-09-04 20:01:54 -04:00
vslg
9ee4b14aa2 Add watcher for .show file in config directory
Draw attention when the .show file is created.
It is created when attempting to open another
instance of Mirage with the same configuration.
2020-09-04 17:43:02 -03:00
vslg
56ad0b9975 Add config option closeMinimizesToTray
Options of the system tray icon:
- Hide/show Mirage
- Quit Mirage

Draw attention to Mirage when clicking on the icon
2020-09-04 17:30:12 -03:00
vslg
6061b2f061 Add simple lock file per configuration
Make use of lock files in configuration directory
for preventing multiple instances of Mirage from
being running at the same time, at least for a
single configuration.
Running multiple instances of Mirage is known to
cause encryption errors in one or more instances.
2020-09-04 17:30:12 -03:00
vslg
bbcdcde53f Add simple system tray 2020-09-04 17:30:12 -03:00
miruka
acb1367f11 Fix warnings when uploading to non-E2E room
Fix these:

    <Unknown File>: media_crypt_dict is undefined.
    Adding an object with a undefined member does not create a role for it.
2020-09-04 14:57:09 -04:00
miruka
89f8cf25d3 Show login page if current was for logged out acc. 2020-09-04 14:05:07 -04:00
miruka
8376d85961 Fix possible segfault when EventDelegate destroyed 2020-09-04 12:57:46 -04:00
miruka
7b6478f514 Correctly handle account with invalid access token
Show a popup saying the session was signed out and cleanup
the models data, instead of spamming the users with
never-ending errors.
2020-09-04 11:25:29 -04:00
miruka
3c9895b0b2 Fix EventHandlers.onModelCleared callback 2020-09-04 10:58:04 -04:00
miruka
1c306f421a Fix PageLoader initial page when no account 2020-09-04 10:51:33 -04:00
miruka
99ae075bb4 Reset composer when recycling chat page 2020-09-03 18:30:36 -04:00
miruka
82bcc29475 Field/area: insertAtCursor() when restoring text
Instead of assigning to `text` directly, which kills editing history and
has worse performance.
2020-09-03 18:27:31 -04:00
miruka
2545ba6c00 Reset room pane state when recycling chat page
Side effect: the members filter field's text is no longer saved to disk
2020-09-03 18:09:50 -04:00
miruka
601b42a503 Rename PageLoader.showPage() → PageLoader.show() 2020-09-03 17:33:19 -04:00
miruka
90929691c6 PageLoader: remove unused proporties 2020-09-03 17:31:33 -04:00
miruka
2b45c07819 Fix starting Mirage when initial page isn't a chat 2020-09-03 11:08:31 -04:00
miruka
462d3972ff Small window: close main pane when recycling page 2020-09-03 11:06:45 -04:00
miruka
f5c6a2627b Improve pageLoader animation 2020-09-03 10:49:15 -04:00
miruka
3f339b7bb9 Add global baseGIFSpeed property to DebugConsole
for great debugging
2020-09-02 15:56:13 -04:00
miruka
bed19eb117 Play appearAnimation when recycling page 2020-09-02 15:25:02 -04:00
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