Skip to content
  • Eike Hein's avatar
    Introduce a concept of runtime executables that can be ignored. · 1c8a4679
    Eike Hein authored
    Summary:
    This introduces a TryIgnoreRuntimes key in taskmanagerrulesrc's Settings
    group that can be used to list known runtime executables that can be
    ignored when trying to identify the application owning a window by the
    command line of the associated process.
    
    A concrete example is the Frozen Bubble application. Frozen Bubble
    installs a frozen-bubble.desktop with Exec=frozen-bubble, yet its
    WM_CLASS is ("perl", "perl") and its command line is as follows:
    
      /usr/bin/perl /usr/bin/frozen-bubble
    
    The existing servicesFromPid() (now split into servicesFromPid() and
    servicesFromCmdLine()) does not find the frozen-bubble service because
    it works with the leading executable in the command line.
    
    In this patch, TryIgnoreRuntimes is introduced with a default of
    "perl". In the new code, after the initial command line matching pass
    fails, TryIgnoreRuntimes is checked for whether the leading command
    line executable is on the list, and if so, a second command line
    matching pass is run with the remainder of the process' command line,
    now succeeding.
    
    Note that the approach of "try one more thing" rather than checking
    against TryIgnoreRuntimes first is deliberate: The Exec= key in many
    .desktop files contains a complete command line prefixed with the
    runtime executable. In those cases we don't want to ignore the runtime
    executable, or matching would fail.
    
    To complement this, the "perl" WM_CLASS is added to the
    MatchCommandLineFirst rc key. Due to the shoddy metadata Frozen
    Bubble already ended up in servicesFromPid() regardless, but this
    saves some busywork for this WM_CLASS, which can reliably be presumed
    bad.
    
    The patch also fixes a small logic error in the match-command-line-
    without-arguments block, where the result of a KServiceTypeTrader
    query was ignored and immediately overridden by another.
    
    Reviewers: #plasma, davidedmundson, broulik
    
    Subscribers: plasma-devel
    
    Tags: #plasma
    
    Differential Revision: https://phabricator.kde.org/D5522
    1c8a4679