Commit Graph

36 Commits

Author SHA1 Message Date
Richard Grenville 6d36ef2d0f Feature #16: Advanced window matching
- Add advanced window matching system, capable of matching against
  arbitrary window properties as well as a series of internal
  properties, with 4 additional operators (>, <, >=, <=) useful for
  integer targets, and support of logical operators. The old matching
  system is removed, but compatibility with the format is retained.

- As the new matching system is pretty complicated, and I have no past
  experience in writing a parser, it's pretty possible that bugs are
  present. It also has inferior performance, but I hope it doesn't
  matter on modern CPUs.

- It's possible to disable matching system at compile time with NO_C2=1
  now.

- Add ps->o.config_file to track which config file we have actually
  read. Queryable via D-Bus.

- Parse -d in first pass in get_cfg() as c2 needs to query X to get
  atoms during condition parsing.

- Fix a bug in wid_get_prop_adv() that 0 == rformat is not handled
  correctly.

- Fix incompatibility with FreeBSD sed in dbus-examples/cdbus-driver.sh
  .

- Add recipe to generate .clang_complete in Makefile, used by Vim
  clang_complete plugin.

- Add DEBUG_C2 for debugging condition string parsing. DEBUG_WINMATCH is
  still used for match debugging.

- Rename win_on_wdata_change() to win_on_factor_change().

- Extra malloc() failure checks. Add const to matching cache members in
  session_t. Code clean-up. Documentation update.
2013-01-28 21:39:38 +08:00
Richard Grenville 00424b1082 Bug fix #84: Root window not repainted sometimes on wallpaper change
- Fix a bug that root window is not repainted on wallpaper change unless
  an Expose X event is received. Seemingly, if there's no mapped window
  on a screen, X will not send an Expose event when the wallpaper
  changes. Thanks to baskerville for reporting.

- Fix a X Pixmap leak when there's no existing wallpaper pixmap found.

- Fix a bug in mstrncpy() that null character is not added to the end of
  the copied string.

- Make VSYNC_STRS public, for use in src/dbus.c. Adjust the type of
  WINTYPES array. Add NUM_VSYNC.

- Add more targets for various D-Bus methods. Add "bad_target" D-Bus
  error. Improve error handling. Add more helper functions to append
  arguments to a D-Bus message. Add Introspect method to D-Bus
  introspection reply.

- Add public declarations of things in the new condition format code to
  common.h. Move definitions of some inline functions from compton.h to
  common.h. Make some functions public. Move wid_get_prop_adv() to
  compton.c. The primary code files of the new format src/c2.{c,h} will
  be published when ready.

- Add support for dumping version string in Makefile (make version), to
  make snapshot generation easier.

- Add repeated inclusion protection to common.h.

- Update documentation.

- Use gsed instead of sed in dbus-examples/cdbus-driver.sh if possible,
  as some BSD systems does not come with GNU sed by default. Thanks to
  DaChiChang for reporting.

- Code clean-up. Small type changes in register_cm() to silence
  warnings. Quit on failure in parse_vsync(). Apply stricter checks in
  force_repaint().
2013-01-24 13:38:03 +08:00
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
Richard Grenville 57c5854fd0 Improvement: Use select() for main loop
- Back to using select() for main loop. Thus we are not longer relying
  on libevent.

- Add generic timeout system (untested) to prepare for D-Bus support.

- Drop troff man pages. Revise Makefile to improve documentation
  building, fix double LDFLAGS inclusion, and re-add -lrt. This turns
  asciidoc into a build time dependency.

- Change fading time calculation.

- Add --logpath and ostream_reopen() for debugging with -b.

- Drop unused lceil_ntimes() and other helper functions.

- Only very limited tests are done. Bugs to be expected.
2013-01-11 21:31:02 +08:00
Richard Grenville 7188054825 Bug fix #77 incorrect border_width handling & #73 window data issue
- (Hopefully) fix all incorrect handling of w->a.border_width in compton
  (#77). Thanks to baskerville for reporting.

- Attempt to fix #73 by correcting a mistake that window data is fetched
  from the wrong function. Thanks to zakkak.

- Add git commit/tag detection to Makefile for automatic versioning.

- Change -lGL linking order, to fix a segmentation fault caused by
  something in nvidia-drivers under FreeBSD, mentioned in #74. Thanks
  for the report from DachiChang.

- Link to -levent_core instead of -levent in Makefile. We might move to
  libev soon, though.

- Increase SWOPTI_TOLERANCE to handle the extraordinary delay of
  kqueue() under FreeBSD. Thanks for DachiChang's report.

- Add helper function dump_drawable() for debugging.

- Replace XInternAtom() calls with get_atom().

- Remove -lrt as it's unneeded.
2013-01-09 20:41:18 +08:00
Richard Grenville 3521f10a97 Improvement #74: Use libevent for main loop
- Use libevent for main loop. I will explain the reasons in #56 later.
  The preferred libevent version is 2.x, yet 1.4.x should work as well.

- As a result, compton now should build fine on *BSD. Thanks to
  DachiChang for the FreeBSD build issue report.

- Another consequence is we now use microsecond-level timing all the
  way. Nanosecond-level code will be dropped soon. Start using long
  instead of unsigned long to represent time in milliseconds, as both
  can't hold the full epoch time in ms, anyway, and a signed type
  requires less care in subtraction. Wrap the epoch time in ms to 15
  days.

- Fix broken NO_VSYNC_DRM and NO_VSYNC_OPENGL compile-time options.

- Use git revision number for versioning in Makefile, and other small
  improvements.

- Reorganize struct _win. Drop unused w->damaged_sequence. w->damaged is
  turned to bool.

- Add type and format to winprop_t, as preparation for the new condition
  format.

- Add w->shadow_force and w->focus_force, to prepare for D-Bus support.

- Rename wid_get_prop() to wid_get_prop_adv() with more options. Add
  wrapper function wid_get_prop().

- Add some extra helper functions, for D-Bus support later.

- Make some functions return a bool value to indicate if it's
  successful.

- Modify add_win(), use a static const structure to initialize the new
  struct _win.

- Add some helper macros, like printf_err(f)(q). Make some errors fatal.

- Rename some types, constants, and functions. Code clean-up.

- Check for time disorder in paint_preprocess() when calculating fading
  steps.

- Rename evpoll() to swopti_handle_timeout(), and partially rewrite it.

- Make -h / --help legal.

- Known issue: compton segfaults on FreeBSD with nvidia-drivers, unless
  NO_VSYNC_OPENGL is used. Will look into it later. Thamls to DachiChang
  for reporting.
2013-01-08 10:19:19 +08:00
Richard Grenville c76d0fc150 Misc: Asciidoc man page update
- Add man page for compton-trans in Asciidoc format.

- Add description of --use-ewmh-active-win to compton man page.
2012-11-05 18:06:31 +08:00
Richard Grenville b15d40ec09 Bug fix #61: Silence a warning
- Silence a FORTIFY_SOURCE warning. Thanks to @smlx for reporting.

- Add -O2 -D_FORTIFY_SOURCE=2 to default CFLAGS in Makefile.

- Use a cleaner way to resolve the writing-to-freed-memory issue
  mentioned in last commit.
2012-11-04 19:44:14 +08:00
Richard Grenville 46dfd1a766 Misc: Add Asciidoc man pages
Add Asciidoc man pages. The old man page is still kept, and you need to
run "make docs" to generate the new man pages and a HTML version of it.
An Asciidoc man page for compton-trans is not added yet.
2012-11-01 12:47:15 +08:00
Richard Grenville 72ea4b5f47 Misc: Code clean-up
- Fix a memory leak in register_cm().

- Print a warning message if argument of --vsync is invalid.

- Known bug: compton will probably freeze X if another compositing
  window manager is running and --vsync opengl is enabled, with
  nvidia-drivers-304.51. Probably an issue on the driver. I could see no
  workaround.
2012-10-10 21:17:48 +08:00
Richard Grenville b59e592588 Feature: #7: VSync
- Add VSync feature. 3 possible VSync methods available: "sw" (software,
  not too reliable, but at least you have something to fallback to),
  "drm" (using DRM_IOCTL_WAIT_VBLANK, should work only on DRI drivers),
  "opengl" (using SGI_swap_control extension OpenGL, might work on more
  drivers than the DRM method). "sw" and "opengl" are briefly tested,
  "drm" received utterly no test (because I use the nVidia binary blob).
  They are enabled with "--vsync sw" / "--vsync drm" / "--vsync opengl".

- Add --refresh-rate to let user specify a refresh rate for software
  VSync, in case the automatic refresh rate detection does not work
  well.

- Seemingly the automatic refresh rate detection using X RandR in
  software VSync detects refresh rate incorrectly. Need further investigation.

- Fix a few bugs in fading timing.

- Add a workaround for client window detection on Fluxbox, as Fluxbox
  (incorrectly?) sets the override-redirect flag upon all frame
  windows.

- Software VSync adds dependency on librt (a part of glibc) for
  nanosecond-level timing functions, and libXrandr for automatic refresh
  rate detection; DRM VSync adds dependency on libdrm to use its drm.h,
  but does not link to libdrm; OpenGL VSync adds dependency on libGL.

- Print timing information on DEBUG_REPAINT.
2012-10-08 10:36:28 +08:00
Richard Grenville 1306b1591f Improvement: Support reading _NET_WM_OPACITY from client windows
- Some WMs don't respect Keith Packard's proposal of
  _NET_WM_WINDOW_OPACITY, and do not copy _NET_WM_OPACITY attribute of a
  client window to its frame windows, thus cause opacity set by
  non-override-redirect windows to have no effect. This commit adds
  support for reading _NET_WM_OPACITY from client windows if running
  with --detect-client-opacity. Thanks to pvanek for reporting.

- Change Makefile logic to determine options from 3 variables
  (NO_LIBCONFIG, NO_REGEX_PCRE, NO_REGEX_PCRE_JIT) instead of CFG to
  ensure compatibility when we add new options. CFG variable is no
  longer been respected.
2012-10-03 21:21:43 +08:00
Richard Grenville 9139d038c2 Bug fix: #48: Compilation failure with old libconfig/libpcre
- Fix compilation failure with <libpcre-8.20 and <libconfig-1.4. Tested
  with libpcre-8.12 and libconfig-1.3.2, but not extensively tested.
  libconfig-1.3* probably has more limitations on configuration file
  syntax (enforces comma at the end of a setting?) and does not support
  @include.

- Make it possible to turn off PCRE and libconfig support using
  environment variable "CFG". Not well tested. CMake might provide a
  better solution.
2012-09-28 09:19:53 +08:00
Richard Grenville ee9e90efec Feature: Configuration file parsing
- Add support for parsing configuration files using libconfig.
  (Dependency on libconfig could be made optional once we get some
  better building system.) Few tests has been done, bugs to be expected.
  compton searches for a configuration file mostly according to the XDG
  standard. Firstly the configuration file requested by --config, then
  $XDG_CONFIG_HOME/compton.conf (~/.config/compton.conf, usually), then
  ~/.compton.conf, then compton.conf under $XDG_DATA_DIRS (often
  /etc/xdg/compton.conf). A sample configuration file is supplied as
  compton.sample.conf. Configuration file syntax may change in the
  future.  Commandline switches has higher priority than configuration
  file, except for --shadow-exclude. Use --config /dev/null to
  temporarily disable configuration file.

- Fix a bug that causes windows to disappear or be partially rendered on
  opacity changes.

- Fix a bug that causes some windows to ignore -i (inactive_opacity) and
  --inactive-dim, caused by the default window type change in
  a5d9955ca4.
2012-09-25 10:32:41 +08:00
Richard Grenville 0d6724385e Feature: Issue #29: Alternative shadow blacklist implementation
- Add shadow blacklist feature, but a different implementation from
  nicklan's. 5 matching modes (exact, starts-with, contains, wildcard,
  PCRE) and 3 matching targets (window name, window class instance,
  window general class). Not extensively tested, bugs to be expected.
  It's slower for exact matching than nicklan's as it uses linear search
  instead of hash table. Also, PCRE's JIT optimization may cause issues
  on PaX kernels.

- Add dependency to libpcre. Could be made optional if we have a
  graceful way to handle that in Makefile.

- Some matching functions are GNU extensions of glibc. So this version
  may have troubles running on platforms not using glibc.

- Fix a bug that access freed memory blocks in set_fade_callcack() and
  check_fade_fin(). valgrind found it out.

- Use WM_CLASS to detect client windows instead of WM_STATE. Some client
  windows (like notification windows) have WM_CLASS but not WM_STATE.

- Mark the extents as damaged if shadow state changed in
  determine_shadow().

- Rewrite wid_get_name(). Code clean-up.

- Two debugging options: DEBUG_WINDATA and DEBUG_WINMATCH.

- As the matching system is ready, it should be rather easy to add other
  kinds of blacklists, like fading blacklist.
2012-09-22 11:42:39 +08:00
Richard Grenville f5aed89a67 Bug fix: Issue #36: Chromium window painting problems
More descriptions on issue #36.

- Listens ShapeNotify event to get around the Chromium window painting
  issues.

- Adds dependency on X Shape extension.

- Adds a few functions for convenience, so a bit code clean up.

- Better event debug support, adds restack_win() debug.
2012-09-11 21:33:03 +08:00
Christopher Jeffrey 2a566e83a7 rename settrans to compton-trans, add manpage. 2012-06-23 17:39:49 -05:00
Christopher Jeffrey 24bf591bd7 destdir 2012-03-20 19:30:20 -05:00
Christopher Jeffrey 24ffba0e51 use destdir. closes #15. 2012-03-20 19:27:51 -05:00
hasufell a0f4bfb5e8 respect cflags and ldflags, default to gcc if CC is unset, fix install-method 2012-03-18 02:00:49 +01:00
Christopher Jeffrey f7b57d527f improve make install. closes #9. 2012-02-28 09:04:10 -06:00
Christopher Jeffrey 0e956de906 fix makefile to work without gnu cp 2012-02-27 10:59:36 -06:00
Christopher Jeffrey b01cfea5c6 minor changes 2012-02-27 10:41:12 -06:00
Christopher Jeffrey 8f4eafaf79 reorganize tree 2012-02-27 05:22:33 -06:00
Christopher Jeffrey b93c6875cf change prefix 2012-02-20 04:38:16 -06:00
Christopher Jeffrey b9dbf7701b install trans script as settrans 2012-01-10 14:51:09 -06:00
Christopher Jeffrey 1e2bb55744 disable fading opacity changes 2011-12-09 08:48:56 -06:00
Christopher Jeffrey 48e0eccbbc clean makefile, add transset script 2011-12-07 12:35:22 -06:00
Christopher Jeffrey cc7adcd175 fix uninstall in makefile 2011-12-05 06:52:11 -06:00
Christopher Jeffrey de8b773387 clean tree 2011-11-06 18:20:45 -06:00
Phil Blundell 5025a4ed4c Autotoolized:
New files.
Likewise.
Deleted.
2004-03-25 23:57:55 +00:00
Matthew Allum 9813c48fef Remove local changes to Makefile 2003-11-14 19:32:41 +00:00
Matthew Allum 03e138e205 Made gussian_map get called just once rather than N times 2003-11-14 19:27:00 +00:00
Keith Packard 41293ef755 Track changes to _XROOTPMAP_ID property 2003-11-10 18:34:35 +00:00
Keith Packard d98b963d75 Add drop shadows. 2003-11-10 01:32:01 +00:00
Keith Packard 1685456c7e Initial revision 2003-11-09 07:08:23 +00:00