richardgv / skippy-xd

A full-screen Exposé-style standalone task switcher for X11.
GNU General Public License v2.0
341 stars 78 forks source link

Some windows are not displayed at all #50

Open alejandro-perez opened 9 years ago

alejandro-perez commented 9 years ago

Hi,

after having used skippy-xd for a while, I've found myself surprised that some windows are not displayed. I don't know if they are special or not, but they are listed in Xfce's application list on the panel, but skippy fails to show them.

In particular, this happens with some pop-up windows in chromium (the kidn of browser window without navigation bar, etc.). It also happens with a "tclsh" program I have to execute from time to time.

Am I missing some option?

Regards

landroni commented 9 years ago

Not sure, but I would suspect that skippy-xd won't pick up pop-up windows.

alejandro-perez commented 9 years ago

Well, it's a pop up in the sense that chromium opened that way. It is listed in the taskbar, so it is not a modal. For instance, xfdashboard displays it.

alejandro-perez commented 9 years ago

You might be right with Chromium's window :)

Chrome window:

_NET_WM_ICON_GEOMETRY(CARDINAL) = 1040, 876, 122, 24
_NET_FRAME_EXTENTS(CARDINAL) = 1, 1, 24, 1
_NET_WM_ALLOWED_ACTIONS(ATOM) = _NET_WM_ACTION_CLOSE, _NET_WM_ACTION_ABOVE, _NET_WM_ACTION_BELOW, _NET_WM_ACTION_FULLSCREEN, _NET_WM_ACTION_MOVE, _NET_WM_ACTION_RESIZE, _NET_WM_ACTION_MAXIMIZE_HORZ, _NET_WM_ACTION_MAXIMIZE_VERT, _NET_WM_ACTION_SHADE, _NET_WM_ACTION_MINIMIZE, _NET_WM_ACTION_CHANGE_DESKTOP, _NET_WM_ACTION_STICK
WM_STATE(WM_STATE):
        window state: Normal
        icon window: 0xc4b8e0
_NET_WM_DESKTOP(CARDINAL) = 1
_NET_WM_STATE(ATOM) = 
_NET_WM_USER_TIME(CARDINAL) = 1245477
WM_NORMAL_HINTS(WM_SIZE_HINTS):
        program specified location: 0, 0
        program specified minimum size: 110 by 34
WM_NAME(UTF8_STRING) = "Teoría y práctica de la investigación educativa - Chromium"
_NET_WM_NAME(UTF8_STRING) = "Teoría y práctica de la investigación educativa - Chromium"
XdndAware(ATOM) = BITMAP
_MOTIF_WM_HINTS(_MOTIF_WM_HINTS) = 0x2, 0x0, 0x1, 0x0, 0x0
WM_WINDOW_ROLE(STRING) = "pop-up"
WM_CLASS(STRING) = "Chromium", "Chromium"
_NET_WM_WINDOW_TYPE(ATOM) = _NET_WM_WINDOW_TYPE_NORMAL
_NET_WM_PID(CARDINAL) = 5249
WM_LOCALE_NAME(STRING) = "es_ES.UTF-8"
WM_CLIENT_MACHINE(STRING) = "vaioalex"
WM_PROTOCOLS(ATOM): protocols  WM_DELETE_WINDOW, _NET_WM_PING

Tclsh window:

_NET_WM_ICON_GEOMETRY(CARDINAL) = 1042, 876, 104, 24
_NET_FRAME_EXTENTS(CARDINAL) = 1, 1, 24, 1
_NET_WM_ALLOWED_ACTIONS(ATOM) = _NET_WM_ACTION_CLOSE, _NET_WM_ACTION_ABOVE, _NET_WM_ACTION_BELOW, _NET_WM_ACTION_FULLSCREEN, _NET_WM_ACTION_MOVE, _NET_WM_ACTION_RESIZE, _NET_WM_ACTION_MAXIMIZE_HORZ, _NET_WM_ACTION_MAXIMIZE_VERT, _NET_WM_ACTION_SHADE, _NET_WM_ACTION_MINIMIZE, _NET_WM_ACTION_CHANGE_DESKTOP, _NET_WM_ACTION_STICK
WM_STATE(WM_STATE):
        window state: Normal
        icon window: 0xbc1730
_NET_WM_DESKTOP(CARDINAL) = 1
_NET_WM_STATE(ATOM) = 
WM_NORMAL_HINTS(WM_SIZE_HINTS):
        user specified location: 0, 0
        program specified minimum size: 1 by 1
WM_PROTOCOLS(ATOM): protocols  WM_DELETE_WINDOW
WM_HINTS(WM_HINTS):
        Client accepts input or input focus: True
        Initial state is Normal State.
_NET_WM_ICON_NAME(UTF8_STRING) = "xml2rfc"
WM_ICON_NAME(STRING) = "xml2rfc"
_NET_WM_NAME(UTF8_STRING) = "xml2rfc"
WM_NAME(STRING) = "xml2rfc"
WM_CLASS(STRING) = "xml2rfc.tcl", "Xml2rfc.tcl"
richardgv commented 9 years ago

Here's how skippy-xd determines what windows should not be displayed:

  1. skippy-xd fetches window list from _NET_CLIENT_LIST or _WIN_CLIENT_LIST, unless acceptOvRedir or acceptWMWin is true, so probably only windows managed by your WM is considered. Most override-redirect windows and windows created by the WM will not be displayed.
  2. All windows not intersecting with the area of current Xinerama screen is not displayed, unless [xinerama] -> showAll is true in the configuration file.
  3. All windows not sticky and not on current virtual desktop are not displayed, unless [general] -> showAllDesktops is true.
  4. All windows with window type _NET_WM_WINDOW_TYPE_DESKTOP or _NET_WM_WINDOW_TYPE_DOCK are not displayed.
  5. If your WM is determined EWMH compliant, all windows with in _NET_WM_STATE_HIDDEN (unless [general] -> showUnmapped is true), _NET_WM_STATE_SKIP_TASKBAR (unless [general] -> ignoreSkipTaskbar is true), or _NET_WM_STATE_SHADED in _NET_WM_STATE are not displayed.
  6. If your WM is determined GNOME WM compliant, all windows with in WIN_STATE_MINIMIZED, WIN_STATE_SHADED, or WIN_STATE_HIDDEN in _WIN_STATE, and windows with WIN_HINTS_SKIP_TASKBAR in _WIN_HINTS are not displayed, unless [general] -> ignoreSkipTaskbar is true.
  7. Unmapped windows are not displayed unless [general] -> showUnmapped is true.
  8. If skippy-xd cannot find a proper way to display a window, the window is not displayed: If [general] -> clientDisplayModes contains thumbnail only and the window is unmapped (thus no thumbnail could be fetched), or if you specify icon only but there's no icon.

Unfortunately I'm not really sure about what particular type of popup window from Chromium you were talking about. At least I'm not able to reproduce the issue with a popup window opened with window.open().

alejandro-perez commented 9 years ago

Hi,

thanks for the thorough response. I'm not sure either why this is happening. I've tried with window.open() but it does not happen. Sorry I cannot give you another example of web page with his problem, since the one I was talking about is of my University Campus intranet, and I'd need to give you my personal credentials.

The other one is xml2rfc, the TCL/TK version. However, they seem to have moved to python (I have an old version in my dropbox), so not sure if that will still apply.

Nevertheless, if I find an "public" example where chromium behaves the way I described, I'll let you know.

Thanks and keep the good work you are doing with skippy!