Currently when we want to show/raise the window in reaction to the tray icon/notification being clicked etc we do this by emitting a signal on the controller.
This is connected to in main.qml, which does some things, then calls back to controller to do more things.
This is quite convoluted. Instead introduce a new class WindowController that is responsible for all things window, in particular showing/raising and config saving
Fix the reply an edit text being shown in all chat rooms when multiple windows are open. This is done by changing chatBoxHelper from a singleton to being instantiated for each instance of roompage.
BUG: 454963
### Summary
This merge request adds a horizontal bar at top of room list, which shows spaces. By clicking on a space, user can filter out rooms belonging only to that specific space.
### Pending/ Help needed
#### Segfault when loading active connection on startup
Refer `void SortFilterRoomListModel::cacheSpaceHierarchy()` ([link](8c372800d7 (b969e462c30df43ef3714ea441948d8d8027f6a0_117_126))) in `src/sortfilterroomlistmodel.cpp`.
On [line 129](8c372800d7 (b969e462c30df43ef3714ea441948d8d8027f6a0_117_129)), I have called `connection->allRooms()`, which segfaults if the active connection hasn't been loaded yet. Is there a way to ensure that `Controller::instance().activeConnection()` on line 128 waits till connection is loaded?
#### Avatars
Avatars on space horizontal bar aren't aligned to vertical middle. I'll need help with that.
Using the code below doesn't help with padding
```qml
delegate: QQC2.Control {
topPadding: 10
contentItem: Kirigami.Avatar { ..... }
}
```
This complains about uninitialized properties in `Kirigami.Avatar`. (`id`, `currentRoom`, `avatar`, `index` are properties utilized during run time)
After we get around these two issue, this MR will be ready from my side.
QDesktopServices::openUrl does not have XDG activation support yet so it can't raise an existing browser window when opening URLs
Instead use KIO::OpenUrlJob, which does support that
* use KWindowSystem::updateStartupId() for abstract update of X11
startup id or wayland activation token
* call QWindow::raise() also for wayland to prepare when it will
support it
* call KWindowSystem::activateWindow() for all platforms, like done
by other apps on user-triggered activation
If the user wants to automatically launch NeoChat when the system
starts up, the user may also want to minimize the window to system tray
on startup. So a new option named "Minimize to system tray on startup"
is added.
The option is only visible on desktop platforms, and is only enabled
when "Close to system tray" is checked.
In order to restore window geometry for the first time the user opens
the window if the option is checked,
1. a new function named `restoreWindowGeometry` is added, and
`restoreWindowGeometryConnections` will be enabled if the option is
checked, and will be disabled after the window debuts.
2. `saveWindowGeometryConnections` will be enabled if the option is not
checked, and will be disabled if checked and enabled after the window
debuts.
Adds support for xdg_activation_v1 when calling the application from the
system tray by using KStatusNotifier which supports it.
Listens to XDG_ACTIVATION_TOKEN as it's passed when we are started from
dbus.
Only display up to 10 emojis when searching
Related to #310 but a better solution needs to be found because we get
the same problem on big room when autocompleting usernames.