New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Consider support for different cursor shapes #1551

Open
marmarek opened this Issue Dec 27, 2015 · 8 comments

Comments

Projects
None yet
6 participants
@marmarek
Member

marmarek commented Dec 27, 2015

https://groups.google.com/d/msgid/qubes-devel/20151226141511.GA95308%40cowbell.employees.org

Something I've noticed when using a web browser is that the cursor shape never changes,
always staying as a simple arrow pointer.

Having control over cursor shape it may mislead the user actions. While it shouldn't be a problem inside the same VM, it may be complex to do it right - to not interfere with windows of other VMs.
In short: without prior proper design, which would be simple and simple to implement, we don't want to have such feature, at least not by default.

But generally it is something to consider, because:

Cursor shape is a functional part of the UI, to the point of being critical
for certain apps like spreadsheets and drawing. If Qubes deems this a possible
source of confusion then it should explain the threat model for cursors
(having already done so for windows).

@marmarek marmarek added this to the Release 3.2 milestone Dec 27, 2015

@bnvk bnvk referenced this issue Dec 27, 2015

Open

Major UX pain points #1117

2 of 20 tasks complete
@mfc

This comment has been minimized.

Show comment
Hide comment
@mfc

mfc Jan 4, 2016

Member

at congress it was suggested that cursor changing be allowed when a vm is in full-screen mode as a UX/security compromise.

Member

mfc commented Jan 4, 2016

at congress it was suggested that cursor changing be allowed when a vm is in full-screen mode as a UX/security compromise.

@bnvk

This comment has been minimized.

Show comment
Hide comment
@bnvk

bnvk Jan 4, 2016

While it shouldn't be a problem inside the same VM, it may be complex to do it right - to not interfere with windows of other VMs.

Getting the cursor to change within the same VM will be a significant UX improvement. A whole range of GUI apps like graphic design programs, IDE's etc... all suffer from this fixed pointer cursor which make simple things like re-sizing a window pane hard to do!

at congress it was suggested that cursor changing be allowed when a vm is in full-screen mode as a UX/security compromise.

Disallowing in full-screen, but allowing in non-full-screen mode, is still a significant UX improvement. However, if we are able to (and proceed) in doing that, we should try to trigger an overlay that communicates this to user when toggling between full-screen and non mode!

bnvk commented Jan 4, 2016

While it shouldn't be a problem inside the same VM, it may be complex to do it right - to not interfere with windows of other VMs.

Getting the cursor to change within the same VM will be a significant UX improvement. A whole range of GUI apps like graphic design programs, IDE's etc... all suffer from this fixed pointer cursor which make simple things like re-sizing a window pane hard to do!

at congress it was suggested that cursor changing be allowed when a vm is in full-screen mode as a UX/security compromise.

Disallowing in full-screen, but allowing in non-full-screen mode, is still a significant UX improvement. However, if we are able to (and proceed) in doing that, we should try to trigger an overlay that communicates this to user when toggling between full-screen and non mode!

@v6ak

This comment has been minimized.

Show comment
Hide comment
@v6ak

v6ak Jan 8, 2016

In-window cursors

What about just providing a way to hide the cursor when it is on app's window? Custom cursors would be then implemented on top of this feature in the VM agent.

  • + Simple design for dom0.
  • + Cursors do not open a way to show arbitrary content outside of the window, as they are shown within the window only.
  • - Having mouse at edge of some window would cause clipped cursor.

Cursor classes

Another option is having some predefined cursor types (e.g. hand, standard pointer, cross, …).

  • + Simple design for dom0.
  • + Cursors do not open a way to show arbitrary content outside of the window, as they come form dom0 and are trusted.
  • + Unifies cursor set.
  • + No issues with cursor at edge.
  • - No support for custom cursors.
  • - Might require some more effort for various systems in AppVMs.

v6ak commented Jan 8, 2016

In-window cursors

What about just providing a way to hide the cursor when it is on app's window? Custom cursors would be then implemented on top of this feature in the VM agent.

  • + Simple design for dom0.
  • + Cursors do not open a way to show arbitrary content outside of the window, as they are shown within the window only.
  • - Having mouse at edge of some window would cause clipped cursor.

Cursor classes

Another option is having some predefined cursor types (e.g. hand, standard pointer, cross, …).

  • + Simple design for dom0.
  • + Cursors do not open a way to show arbitrary content outside of the window, as they come form dom0 and are trusted.
  • + Unifies cursor set.
  • + No issues with cursor at edge.
  • - No support for custom cursors.
  • - Might require some more effort for various systems in AppVMs.
@marmarek

This comment has been minimized.

Show comment
Hide comment
@marmarek

marmarek Jan 8, 2016

Member

On Fri, Jan 08, 2016 at 12:43:44PM -0800, Vít Šesták wrote:

In-window cursors

What about just providing a way to hide the cursor when it is on app's window? Custom cursors would be then implemented on top of this feature in the VM agent.

  • + Simple design for dom0.
  • + Cursors do not open a way to show arbitrary content outside of the window, as they are shown within the window only.
  • - Having mouse at edge of some window would cause clipped cursor.

From the security point of view, I like this idea. But from the
usability POV I'm afraid it would be horrible. Even small lag of cursor
position would be really frustrating. In early Windows Tools we had both
cursors visible (dom0 and windows) and it was bad - VM cursor was
lagging, even when click events were delivered correctly.

Also some technical problem would be that cursor is not part of the
window composition buffer (this is what is directly mapped as window
content in dom0). So it would be quite complex at VM side - not
affecting security, but most likely performance.

Cursor classes

Another option is having some predefined cursor types (e.g. hand, standard pointer, cross, …).

  • + Simple design for dom0.
  • + Cursors do not open a way to show arbitrary content outside of the window, as they come form dom0 and are trusted.
  • + Unifies cursor set.
  • + No issues with cursor at edge.
  • - No support for custom cursors.
  • - Might require some more effort for various systems in AppVMs.

I know exactly nothing about cursor shapes in X11 protocol. If it is
possible to extract such information, it would be good. If not, that
would require some guessing (OCSR - "optical cursor shape recognition"
;) ), not reliable. Even if that would be possible only at some higher
level (like for GTK based applications), that would be still an
improvement.

Since it is possible to set cursor theme globally, I guess it is
possible to extract abstract information about desired cursor shape.

Quick duckduckgo returns this:
http://stackoverflow.com/questions/6751928/set-x11-cursor-to-arrow

Looks promising. Especially the part about setting it as window property

  • it would mean that X server would handle switching its shape, so no
    need to do that manually on enter/leave events (which would be really
    fragile, probably a showstopper).

Best Regards,
Marek Marczykowski-Górecki
Invisible Things Lab
A: Because it messes up the order in which people normally read text.
Q: Why is top-posting such a bad thing?

Member

marmarek commented Jan 8, 2016

On Fri, Jan 08, 2016 at 12:43:44PM -0800, Vít Šesták wrote:

In-window cursors

What about just providing a way to hide the cursor when it is on app's window? Custom cursors would be then implemented on top of this feature in the VM agent.

  • + Simple design for dom0.
  • + Cursors do not open a way to show arbitrary content outside of the window, as they are shown within the window only.
  • - Having mouse at edge of some window would cause clipped cursor.

From the security point of view, I like this idea. But from the
usability POV I'm afraid it would be horrible. Even small lag of cursor
position would be really frustrating. In early Windows Tools we had both
cursors visible (dom0 and windows) and it was bad - VM cursor was
lagging, even when click events were delivered correctly.

Also some technical problem would be that cursor is not part of the
window composition buffer (this is what is directly mapped as window
content in dom0). So it would be quite complex at VM side - not
affecting security, but most likely performance.

Cursor classes

Another option is having some predefined cursor types (e.g. hand, standard pointer, cross, …).

  • + Simple design for dom0.
  • + Cursors do not open a way to show arbitrary content outside of the window, as they come form dom0 and are trusted.
  • + Unifies cursor set.
  • + No issues with cursor at edge.
  • - No support for custom cursors.
  • - Might require some more effort for various systems in AppVMs.

I know exactly nothing about cursor shapes in X11 protocol. If it is
possible to extract such information, it would be good. If not, that
would require some guessing (OCSR - "optical cursor shape recognition"
;) ), not reliable. Even if that would be possible only at some higher
level (like for GTK based applications), that would be still an
improvement.

Since it is possible to set cursor theme globally, I guess it is
possible to extract abstract information about desired cursor shape.

Quick duckduckgo returns this:
http://stackoverflow.com/questions/6751928/set-x11-cursor-to-arrow

Looks promising. Especially the part about setting it as window property

  • it would mean that X server would handle switching its shape, so no
    need to do that manually on enter/leave events (which would be really
    fragile, probably a showstopper).

Best Regards,
Marek Marczykowski-Górecki
Invisible Things Lab
A: Because it messes up the order in which people normally read text.
Q: Why is top-posting such a bad thing?

@marmarek marmarek added the help wanted label May 4, 2016

@marmarek marmarek modified the milestones: Release 4.0, Release 3.2 May 4, 2016

andrewdavidwong added a commit that referenced this issue May 31, 2016

andrewdavidwong added a commit that referenced this issue Jun 7, 2016

@andrewdavidwong andrewdavidwong added the UX label Mar 6, 2017

@marmarek marmarek modified the milestones: Release 4.1, Release 4.0 Jul 31, 2017

@Joeviocoe

This comment has been minimized.

Show comment
Hide comment
@Joeviocoe

Joeviocoe Sep 20, 2017

Does this issue being labeled "Help Wanted" mean that it has the lowest priority and nobody from the dev team is working on it?

Does this issue being labeled "Help Wanted" mean that it has the lowest priority and nobody from the dev team is working on it?

@v6ak

This comment has been minimized.

Show comment
Hide comment
@v6ak

v6ak Sep 20, 2017

v6ak commented Sep 20, 2017

@andrewdavidwong

This comment has been minimized.

Show comment
Hide comment
@andrewdavidwong

andrewdavidwong Sep 20, 2017

Member

Does this issue being labeled "Help Wanted" mean that it has the lowest priority and nobody from the dev team is working on it?

It does mean that the Qubes devs do not expect to have time to work on it in the foreseeable future. However, "priority" is somewhat orthogonal. An issue can have a high priority even if the Qubes devs can't work on it. In that case, we really want someone to help! 🙂

Member

andrewdavidwong commented Sep 20, 2017

Does this issue being labeled "Help Wanted" mean that it has the lowest priority and nobody from the dev team is working on it?

It does mean that the Qubes devs do not expect to have time to work on it in the foreseeable future. However, "priority" is somewhat orthogonal. An issue can have a high priority even if the Qubes devs can't work on it. In that case, we really want someone to help! 🙂

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