fyne-io / systray

a cross platfrom Go library to place an icon and menu in the notification area
Apache License 2.0
227 stars 42 forks source link

[ Feature Request ] Split Left click and Right click action #23

Open shugen002 opened 2 years ago

shugen002 commented 2 years ago

By split left right click action , we can do other action on left click not just open the menu but such as show/hide window.

andydotxyz commented 2 years ago

On many OS it is assumed that the menu will appear from left click. I wonder if this is perhaps possibly a request to have a single action instead of a menu? Many apps that want to do both put the window toggle in the menu so both can be done. Toggling a window visibility with a single tap is the job of your OS app switcher / taskbar isn't it?

shugen002 commented 2 years ago

On many OS it is assumed that the menu will appear from left click.

Sorry about that , I work at window desktop enviroment most of time , I didn't notice the appearance difference in MacOS and Linux.

But looks MacOS is also support handle left right click (sources: https://www.electronjs.org/docs/latest/api/tray#event-right-click-macos-windows)

I wonder if this is perhaps possibly a request to have a single action instead of a menu?

Yes , but not exactly.

I plan do this:

single left click: do nothing

dourble left click: open Browser with our WebUI

right click: show a menu include Open WebUI and Quit and other common action

Toggling a window visibility with a single tap is the job of your OS app switcher / taskbar isn't it?

I agree that , but in my developing experence , some user still request hide window into tray , and many app (such as telegram, steam) support hide into tray when click the close button.

shugen002 commented 2 years ago

looks like you already done part of support for linux ? https://github.com/fyne-io/systray/blob/master/internal/generated/notifier/status_notifier_item.go#L182-L185

davidnewhall commented 1 year ago

On many OS it is assumed that the menu will appear from left click.

MacOS and Windows differ in this regard. On Windows, you usually open the menu by right clicking the icon, and a left click open a window (as opposed to a menu). On macOS, left clicking is expected to open the menu, and right clicking menu items on macOS is hit-and-miss. Some open a menu, and some do nothing. Very few will open a window without clicking an item in a menu. I don't use Linux as a desktop, so I have no idea what sort of behaviors exist there.

All that said, it's desirable for the app developer to control these behaviors, so we can keep our apps consistent with the users' expectations.

As an app dev, I'd even love to see a third control-option for double-click. I'll try to put some time into this, but can't promise much. I have only had one user ask for the ability to split right/left click on Windows, so it's not super high priority.

heaxo commented 8 months ago

I think it's necessary

andydotxyz commented 8 months ago

On macOS, left clicking is expected to open the menu, and right clicking menu items on macOS is hit-and-miss. Some open a menu, and some do nothing. Very few will open a window without clicking an item in a menu.

This is same with my findings

All that said, it's desirable for the app developer to control these behaviors, so we can keep our apps consistent with the users' expectations.

I think it's necessary

These statements feel subjective. We are trying to juggle consistency for all your users whilst being consistent with the OS. I'm not sure that implementing differently for each platform leading to content that may not be accessible to some is the right way to go? Would users of something platform-agnostic like this library really expect to write OS-specific code into their apps for controlling menus?

davidnewhall commented 7 months ago

Would users of something platform-agnostic like this library really expect to write OS-specific code into their apps for controlling menus?

If you don't your users will complain about how your app feels 'weird'. No way around it. If you're good with telling your users "tuff" then don't worry about writing OS-specific code.

fwiw, I've since switched to another systray fork that allows me to define all of these behaviors in my own code my own way. Works brilliantly.

Jacalz commented 7 months ago

See https://github.com/fyne-io/fyne/issues/4491#issuecomment-1900866088 for a relevant discussion.

andydotxyz commented 7 months ago

Would users of something platform-agnostic like this library really expect to write OS-specific code into their apps for controlling menus?

If you don't your users will complain about how your app feels 'weird'. No way around it. If you're good with telling your users "tuff" then don't worry about writing OS-specific code.

fwiw, I've since switched to another systray fork that allows me to define all of these behaviors in my own code my own way. Works brilliantly.

There is a big distance between not adding APIs that won't work on some platforms and telling users "tough luck". As @Jacalz points out we are having a discussion about how to do it in a way that meets platform expectations without encouraging developers to accidentally break functionality on some platforms.

gschafra commented 3 months ago

Has anyone see this PR from the upstream repo? IMHO I think this might be the way to go to allow devs to implement the behaviour as needed/wished, don't you?

andydotxyz commented 3 months ago

The PR you linked to only works on Windows (where the clicks are often different) but not on macOS (where most apps have the same action) or Linux (where right click is not supported).

Don't we want to be able to have an API that works everywhere consistently?