1
0
Fork 0
mirror of https://github.com/yshui/picom.git synced 2024-11-11 13:51:02 -05:00
picom/README.md
Richard Grenville 58c0ecec40 Feature #80: D-Bus support
- Add D-Bus support. Currently 7 methods are available: "reset" (same as
  SIGUSR1), "list_win" (list the windows compton manages), "win_get"
  (get a property of the window), "win_set" (set a property of the
  window), "find_win" (find window based on client window / focus),
  "opts_get" (get the value of a compton option), and "opts_set" (set
  the value of a compton option), together with 4 signals: "win_added",
  "win_destroyed", "win_mapped", "win_unmapped".

- D-Bus support depends on libdbus.

- As there are many items and my time is tight, no much tests are done.
  Bugs to be expected.

- Create a new header file `common.h` that contains shared content.

- Fix some bugs in timeout handling.

- Update file headers in all source files.

- Re-enable --unredir-if-possible on multi-screen set-ups, as the user
  could turn if off manually anyway.

- Check if the window is mapped in `repair_win()`.

- Add ps->track_atom_lst and its handlers, to prepare for the new
  condition format.

- Known issue 1: "win_get", "win_set", "opts_get", "opts_set" support a
  very limited number of targets only. New ones will be added gradually.

- Known issue 2: Accidental drop of D-Bus connection is not handled.

- Known issue 3: Introspection does not reveal all available methods,
  because some methods have unpredictable prototypes. Still hesitating
  about what to do...

- Known issue 4: Error handling is not finished yet. Compton does not
  always reply with the correct error message (but it does print out the
  correct error message, usually).
2013-01-19 20:20:27 +08:00

4.4 KiB

Compton

Compton is a compositor for X, and a fork of xcompmgr-dana.

I was frustrated by the low amount of standalone lightweight compositors. Compton was forked from Dana Jansens' fork of xcompmgr and refactored. I fixed whatever bug I found, and added features I wanted. Things seem stable, but don't quote me on it. I will most likely be actively working on this until I get the features I want. This is also a learning experience for me. That is, I'm partially doing this out of a desire to learn Xlib.

Changes from xcompmgr:

  • inactive window transparency / dimming
  • titlebar/frame transparency (specified with -e)
  • menu transparency (thanks to Dana)
  • shadows are now enabled for argb windows, e.g. terminals with transparency
  • removed serverside shadows (and simple compositing) to clean the code, the only option that remains is clientside shadows
  • configuration files (see the man page for more details)
  • colored shadows (--shadow-[red/green/blue])
  • a new fade system
  • VSync support (not always working)
  • Blur of background of transparent windows, window color inversion (bad in performance)
  • Some more options...

Fixes from the original xcompmgr:

  • fixed a segfault when opening certain window types
  • fixed a memory leak caused by not freeing up shadows (from the freedesktop repo)
  • fixed the conflict with chromium and similar windows
  • many more

Building

Dependencies:

B for build-time

R for runtime

  • libx11 (B,R)
  • libxcomposite (B,R)
  • libxdamage (B,R)
  • libxfixes (B,R)
  • libXext (B,R)
  • libxrender (B,R)
  • libXrandr (B,R)
  • pkg-config (B)
  • make (B)
  • xproto / x11proto (B)
  • bash (R)
  • xprop,xwininfo / x11-utils (R)
  • libpcre (B,R) (Can be disabled with NO_REGEX_PCRE at compile time)
  • libconfig (B,R) (Can be disabled with NO_LIBCONFIG at compile time)
  • libdrm (B) (Can be disabled with NO_VSYNC_DRM at compile time)
  • libGL (B,R) (Can be disabled with NO_VSYNC_OPENGL at compile time)
  • libdbus (B,R) (Can be disabled with NO_DBUS at compile time)
  • asciidoc (B)

How to build

To build, make sure you have the dependencies above:

# Make the main program
$ make
# Make the man pages
$ make docs
# Install
$ make install

(Compton does include a _CMakeLists.txt in the tree, but we haven't decided whether we should switch to CMake yet. The Makefile is fully usable right now.)

Known issues

  • VSync does not work too well. It's widely reported that tearing still happens on the top of the screen. I do not know how to fix the issue.

  • If --unredir-if-possible is enabled, when compton redirects/unredirects windows, the screen may flicker. Using --paint-on-overlay minimizes the problem from my observation, yet I do not know if there's a cure.

  • compton may not track focus correctly in all situations. The focus tracking code is experimental. --use-ewmh-active-win might be helpful.

  • Compton may give ugly shadow to windows with ARGB background if -z is enabled, because compton cannot determine their real shapes. One may have to disable shadows on those windows with window-type-specific settings in configuration file or --shadow-exclude.

  • The performance of blurring is terrible, probably because of a problem in the X Render implementation. Its behavior is driver-dependent: With nvidia-drivers it works but there are strange 1px lines remaining when you operate on windows (not sure if it's a bug in compton or in the driver); with nouveau it's utterly broken.

Usage

Please refer to the Asciidoc man pages (man/compton.1.asciidoc & man/compton-trans.1.asciidoc) for more details and examples.

Note a sample configuration file compton.sample.conf is included in the repository.

Support

  • Bug reports and feature requests should go to the "Issues" section above.

  • Our (semi?) official IRC channel is #compton on FreeNode.

  • Some information is available on the wiki, including (and presently, only includes) a FAQ.

License

Although compton has kind of taken on a life of its own, it was originally an xcompmgr fork. xcompmgr has gotten around. As far as I can tell, the lineage for this particular tree is something like:

  • Keith Packard (original author)
  • Matthew Hawn
  • ...
  • Dana Jansens
  • chjj and richardgv

Not counting the tens of people who forked it in between.

Compton is distributed under MIT license, as far as I (richardgv) know. See LICENSE for more info.