Skip to content

Prominent incoming-call notification for desktop#34171

Open
syphernl wants to merge 2 commits into
element-hq:developfrom
syphernl:feat/prominent-incoming-call-notification
Open

Prominent incoming-call notification for desktop#34171
syphernl wants to merge 2 commits into
element-hq:developfrom
syphernl:feat/prominent-incoming-call-notification

Conversation

@syphernl

@syphernl syphernl commented Jul 7, 2026

Copy link
Copy Markdown

Depends on #34199 (extraction of useIncomingCallToast, split out so that PR's diff is reviewable on its own). This PR will show that diff inline until #34199 merges into develop.

What

Today an incoming call on Element Desktop is just a small toast in the corner, a ringtone, and a taskbar flash. If the window is minimised to the tray or buried behind other windows, it's easy to miss the call entirely.

This adds two opt-in settings (device-level, both off by default):

  • Show incoming calls full-screen: a full-screen card with the caller's avatar and large accept/decline buttons, in the style of Slack or Skype. For Element Call it also has a video on/off toggle, and accepting joins the call directly instead of dropping you into the in-widget lobby. Legacy 1:1 calls get a silence button too.
  • Bring the window to the front on an incoming call: raises the window via a new focusWindow platform method. It won't raise the window for calls that are force-silenced, and it falls back to flashing the taskbar entry where a programmatic raise isn't allowed.

Platform note on the window raise: it works on Windows, macOS, and Linux under X11 and XWayland (for example when Electron runs with --ozone-platform=x11). Native Wayland forbids a client from raising its own window, so there the taskbar flash is the fallback. This is a compositor limitation, not something the app can override.

The toast and the full-screen card share the same ring / timeout / auto-dismiss logic, which I pulled out of the existing toast into a useIncomingCallToast hook in #34199, so they stay in sync and only one of them ever owns the ringtone.

Relates to #32042, #32387, #32406.

Screenshots

Before After (Voice) After (Video)
incoming-call-before incoming-call-after incoming-call-video

Notes: Add an optional full-screen incoming-call notification on desktop, and an optional setting to bring the window to the front on an incoming call.

Checklist

@github-actions github-actions Bot added the Z-Community-PR Issue is solved by a community member's PR label Jul 7, 2026
@syphernl syphernl force-pushed the feat/prominent-incoming-call-notification branch from 01a84b1 to 35c6f6b Compare July 7, 2026 14:27
@CLAassistant

CLAassistant commented Jul 7, 2026

Copy link
Copy Markdown

CLA assistant check
All committers have signed the CLA.

@syphernl syphernl marked this pull request as ready for review July 8, 2026 08:54
@syphernl syphernl requested review from a team as code owners July 8, 2026 08:54
@syphernl syphernl requested review from dbkr, florianduros and toger5 July 8, 2026 08:54
@dbkr

dbkr commented Jul 8, 2026

Copy link
Copy Markdown
Member

I'll let product look at this but from a code PoV, this is a massive PR with a lot of related but distinct things in it. It would probably need the various parts split out if do get to reviewing it. We'll also need to think about how all this is going to be maintained.

@dbkr dbkr requested a review from a team July 8, 2026 16:54
syphernl added 2 commits July 9, 2026 08:24
…ast hook

No behavioural change: pulls the ring/timeout/auto-dismiss lifecycle and
join/decline actions out of IncomingCallToast into a reusable hook, so a
future prominent (full-screen) incoming-call surface can share the same
logic instead of duplicating it.

Signed-off-by: Frank Klaassen <639906+syphernl@users.noreply.github.com>
On Element Desktop an incoming call only shows as a small corner toast, a ring,
and a taskbar flash. When the window is minimised to tray or hidden behind other
windows, the call is easy to miss.

This adds two opt-in, device-level settings, both off by default:

- "Show incoming calls full-screen": a Slack/Skype-style full-screen card with
  the caller avatar, a video on/off toggle for Element Call, and round
  accept/decline (plus silence for legacy 1:1) buttons. Accepting an Element
  Call joins directly instead of opening the in-widget lobby.
- "Bring the window to the front on an incoming call": raises the window through
  a new focusWindow platform method, falling back to a taskbar flash where the
  OS refuses a programmatic raise (e.g. Wayland). Not triggered for
  force-silenced calls.

The full-screen card reuses the existing ring / timeout / auto-dismiss lifecycle,
pulled into a shared useIncomingCallToast hook so the compact toast and the card
behave identically and only one of them owns the ring.

Relates to element-hq#32042, element-hq#32387, element-hq#32406.

Signed-off-by: Frank Klaassen <639906+syphernl@users.noreply.github.com>
@syphernl

syphernl commented Jul 9, 2026

Copy link
Copy Markdown
Author

I'll let product look at this but from a code PoV, this is a massive PR with a lot of related but distinct things in it. It would probably need the various parts split out if do get to reviewing it. We'll also need to think about how all this is going to be maintained.

I have split some changes in their own PR: #34199. Once it has been reviewed+merged this PR can be rebased and should be smaller.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

Z-Community-PR Issue is solved by a community member's PR

Projects

None yet

Development

Successfully merging this pull request may close these issues.

5 participants