ch11ng / exwm

Emacs X Window Manager
2.85k stars 136 forks source link

'Show Desktop' support. may be? "Your window manager doeesn't support ...." [GNOME Flashback + GNOME Panel] #609

Open emacksnotes opened 5 years ago

emacksnotes commented 5 years ago

'Show Desktop' support may be? [GNOME Flashback + GNOME Panel]

I run EXWM Gnome Flashback Session with GNOME Panel on. (See https://github.com/ch11ng/exwm/issues/606)

Factory settings of GNOME Panel, has a 'Show Desktop' Icon in the bottom panel. When I click on it, I see the following message

You window manager does not support the show desktop button, or you are not running a window manager.

See the screenshot below for what I see when I click on the 'Show Desktop' Icon.

EXWM Show Desktop Not Supported

My gut feeling is that ....

EXWM hints (i.e., falsely claims) that it supports 'Show Desktop' while failing to provide a handler for it. If this is the case, and if 'Show Desktop' is indeed not supported, then EXWM shouldn't make any false claims. This way GNOME Panel wouldn't even bother about activating 'Show Desktop' icon.

What should 'Show Desktop' do?

If 'Show Desktop' feature hasn't surfaced before, this issue could be taken as a placeholder for discussing what this feature means in Emacs/EXWM context. IMHO, the 'Show Desktop' feature of EXWM can take inspiration from what buffer-expose: Visual buffer switching using a window grid does. See screenshot for what buffer-expose does.

'Buffer Expose' as 'Show Desktop'

medranocalvo commented 5 years ago

Thanks for bringing this up.

I think this feature had not been considered before. I'd say the default implementation should simply hide current workspace frame, so that the desktop is displayed, but we should let users customize it to do different actions, such as your suggested buffer-expose.

ch11ng commented 5 years ago

EXWM hints (i.e., falsely claims) that it supports 'Show Desktop' [...]

Actually we don't, and it may be the exact reason the dialog poped up. You may checkout exwm--init-icccm-ewmh where xcb:Atom:_NET_SHOWING_DESKTOP is commented out along with other unsupported EWMH hints.

I'm not sure what this feature should be like on EXWM as we don't have a 'desktop'. Perhaps the closest thing is to kill all Emacs windows and make a default buffer (perhaps the *scratch* buffer) displayed in the sole window, but I don't think users will find it useful.

[...] the 'Show Desktop' feature of EXWM can take inspiration from what buffer-expose [...]

'Expose' is another unrelated feature I'm afraid. It seems not defined by any X11 protocol.

[...] I'd say the default implementation should simply hide current workspace frame, so that the desktop is displayed, [...]

Then users may find it hard to bring back that frame though.

emacksnotes commented 5 years ago

EXWM hints (i.e., falsely claims) that it supports 'Show Desktop' [...]

Actually we don't, and it may be the exact reason the dialog poped up. You may checkout exwm--init-icccm-ewmh where xcb:Atom:_NET_SHOWING_DESKTOP is commented out along with other unsupported EWMH hints.

I read the specifications /NOT/ as a hint of /CAPABILITY/, but as hint of /DISPLAY STATE/. I don't know if the implication is that /all/ window manager /must/ support the SHOWING DESKTOP, even if the support amounts to nodding the head and saying yes, yes.

_NET_SHOWING_DESKTOP

_NET_SHOWING_DESKTOP desktop, CARDINAL/32

Some Window Managers have a "showing the desktop" mode in which windows are hidden, and the desktop background is displayed and focused. If a Window Manager supports the _NET_SHOWING_DESKTOP hint, it MUST set it to a value of 1 when the Window Manager is in "showing the desktop" mode, and a value of zero if the Window Manager is not in this mode.

If a Pager wants to enter or leave the mode, it MUST send a _NET_SHOWING_DESKTOP client message to the root window requesting the change:

_NET_SHOWING_DESKTOP message_type = _NET_SHOWING_DESKTOP format = 32 data.l[0] = boolean 0 or 1 other data.l[] elements = 0

The Window Manager may choose to ignore this client message.

Btw, what do you call the blue blackground I see in the screenshot below? Isn't that a desktop? Or is it something else.

ewxm-show-desktop

Can the root frame be iconified? If it is iconified, can I de-iconify it with `Show Desktop' icon on the panel? Based on cursory reading of some forum messages, it looks like the 'Show Desktop' icon is rendered as depressed or raised according as how the Window Manager responds to the "SHOWING DESKTOP" query.

(/I really don't know what I am talking about here/)

medranocalvo commented 5 years ago

Btw, what do you call the blue blackground I see in the screenshot below? Isn't that a desktop? Or is it something else.

Yes, that's the desktop.

Then users may find it hard to bring back that frame though.

This functionality is usually invoked by clicking a button on the taskbar. This button can be used to toggle back to showing the not-desktop. I think it is the brown folder-like icon on the lower left image of https://github.com/ch11ng/exwm/issues/609#issuecomment-520333405.

ch11ng commented 5 years ago

I read the specifications /NOT/ as a hint of /CAPABILITY/, but as hint of /DISPLAY STATE/.

I mean it's excluded in the list of _NET_SUPPORTED.

Btw, what do you call the blue blackground I see in the screenshot below? Isn't that a desktop? Or is it something else.

Desktop is actually an X window with some special properties set. By default EXWM has no desktop but it's possible to create one with some external application.

Then users may find it hard to bring back that frame though.

This functionality is usually invoked by clicking a button on the taskbar. This button can be used to toggle back to showing the not-desktop. I think it is the brown folder-like icon on the lower left image of #609 (comment).

I see. So we need an external GUI application to toggle this and it's preferably a pager. I still find it not very useful to iconify workspace frames though; users can hardly do anything in this state.