Commit Graph

1125 Commits

Author SHA1 Message Date
Richard Grenville e3eca7ac61 Bug fix #91: Using pkg-config to find drm.h & OpenGL changes
- #91: Use pkg-config to find drm.h to avoid issues on FreeBSD. Thanks
  to hun7err for pointing out and providing patch.

- #89: Add default shadow exclusion rule for notify-osd. Thanks to
  DanielRS.

- Check for abundant positional arguments.

- Use paint target window (root window / overlay window) instead of
  ps->reg_win to create GLXContext. (May have negative effects on OpenGL
  VSync.) Add new OpenGL helpers functions, to prepare for the new
  OpenGL backend.

- Dump more info of a PropertyNotify with DEBUG_EVENTS.
2013-03-01 12:41:16 +08:00
Richard Grenville 218250546e Misc #86: Compatibility with BSD install
- Make Makefile compatible with BSD install, by dropping -D.

- Make CFG independent in Makefile, to allow people to specify CFLAGS
  as a parameter to make.

- Correct location of .clang_complete.
2013-02-05 16:59:36 +08:00
Richard Grenville 8e34736c19 Improvement: Change VSync mode with D-Bus & Makefile update & Misc
- Add on-the-fly VSync option modification via D-Bus, as requested by
  kunitoki (#80). Expose parse_vsync(), create vsync_init() and
  ensure_glx_context().

- Change default value of ps->drm_fd to -1.

- Update Makefile. Change the install/uninstall rules and add doc
  installation, requested by hasufell in #85.

- Mark window not damaged in map_win(). It helps in reducing flickering
  with inverted window color, but I'm not completely sure if it's safe.

- Avoid modifying w->invert_color when window is unmapped.

- Update documentation. Thanks to hasufell for pointing out.
2013-01-31 22:56:54 +08:00
Richard Grenville 1b5273c819 Improvement #7: Add GLX_OML_sync_control VSync support
- Add "vsync-oml" VSync method, using GLX_OML_sync_control. Untested,
  because it's not supported by my driver.

- Unredirect ps->reg_win, because DRI wiki says it's related to the
  behavior of OpenGL VSync extensions.

- Add glFlush() and glXWaitX() calls, in hope they are slightly helpful
  for VSync.

- Change a few functions to make error handling more graceful. Make some
  errors fatal. Code clean-up.

- Add unused function make_text_prop().
2013-01-30 13:41:08 +08:00
Richard Grenville 42e17cb4e9 Improvement: Improve color inversion performance & Validate pixmap
- Try to improve the performance of color inversion by applying clipping
  region during color inversion. (#75)

- Validate pixmap on window unmap/destruction. Probably slightly helpful
  for #52.

- Change the design of unmap_win() and destroy_win(), a bit.

- Add warning message to help messages about features disabled at
  compile time, instead of dropping their description completely. (#85)

- Silence some warnings. Code clean-up.
2013-01-29 09:57:04 +08:00
Richard Grenville 152ad5fb57 Merge branch 'master' into richardgv-dev
Conflicts:
	src/compton.c
2013-01-29 07:58:40 +08:00
Richard Grenville e8d854bcf1 Merge pull request #85 from hasufell/master
hide disabled features from help output
2013-01-28 15:49:55 -08:00
hasufell 85e561283e don't depend on bash, our script is POSIX anyway 2013-01-28 17:31:16 +01:00
hasufell 59e7ea63c5 hide disabled features from help output 2013-01-28 17:08:34 +01:00
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 e60fe72dcb Bug fix #75: --invert-color-include not working & others
- Fix a small bug that breaks --invert-color-include if no other
  blacklists are present. Thanks to MaskRay and xiaq for reporting.

- Disable --unredir-if-possible for multi-screen setups.

- Fix a bug that causes --no-fading-openclose to have no effect in some
  cases. Add w->in_openclose to keep track of window open/close state.
2013-01-13 13:44:05 +08:00
Richard Grenville 2165c42d27 Feature #75: Invert window color
- Add window color inversion (--invert-color-include). It means 2-3
  times extra painting, so performance issues are likely to appear.  I
  hope I could find a faster way to invert colors.

- Rename some functions.

- Fix update of some window properties after window type/data change.
  Hopefully this will be helpful for #73.

- Split win_build_picture() from win_blur_background().

- Correct memory leak of ps->focus_blacklist during reinitialization.

- Add win_upd_t and win_upd_run(), to reduce duplicate window property
  updates. But is unused right now.

- Limited tests are done overall. Bugs to be expected.
2013-01-12 22:44:46 +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 75aec17a85 Misc: Documentation update
Update man page and README.
2012-12-18 22:04:22 +08:00
Richard Grenville 1bfe21efb5 Improvement: Dynamic blur strength & improved frame blur performance
- Remove the region expansion design in win_blur_background(). I must be
  sleep-walking when I wrote that!

- Improve performance of blurring when a window is opaque but its frame
  is transparent.

- Adjust blur strength according to window opacity.
  --blur-background-fixed restores the old behavior.

- Add "use_offset" parameter to a few functions for convenience. Code
  clean-up.
2012-12-15 20:07:45 +08:00
Richard Grenville 22cabf7c89 Feature #69: Blur window background
- Add window background blur support (--blur-background &
  --blur-background-frame), with X Render convolution filter.
  The performance sucks. The performance when the window is opaque but
  frame is transparent could be improved, but there are two possible
  ways and I'm hesitating.

- Known issue: The blurring effect looks very ungraceful during fading.
  I could partially fix the problem, but it probably isn't easy to fix
  it completely.
2012-12-14 20:32:46 +08:00
Richard Grenville a77aaf0718 Misc: Code cleanup
- Move some long functions to ./src/compton.c .

- Fix a small potential issue in win_set_focused() when a window with
  neither leader nor client window is focused.

- Add DEBUG_LEADER.
2012-12-12 12:47:17 +08:00
Richard Grenville 848687b853 Feature #65: Auxiliary window detection
- Add auxiliary window detection (--detect-transient &
  --detect-client-leader). Thanks to SmilingHorse for inspiring me. The
  implementation is not too speed-efficient, and bugs are to be
  expected.

- Known issue: auxiliary window detection may not work too well with
  windows that are never mapped, for example as client leader.
2012-12-12 12:01:51 +08:00
Richard Grenville 33171e8933 Feature: Wintype-based focus exclusion
- Add "focus" to the wintypes settings in compton.conf, to mark windows
  of certain window types to be always focused. Replaces the ugly
  is_normal_win().

- Add a ON/OFF/UNSET switch_t type, but it's unused currently.

- Mark client_win if the window client detection hasn't been performed
  when we detect WM_STATE's presence in ev_property_notify(), for
  performance.
2012-12-10 10:38:28 +08:00
Richard Grenville 7d70f3dc13 Bug fix #68: Second attempt to fix client window detection
- Attempt to fix client window detection when WM_STATE property is not
  yet set when the window is mapped. Thanks to kinclma1 for reporting.

- Apply stricter checks for whether window is mapped in
  determine_evmask() and win_mark_client().
2012-12-08 11:10:08 +08:00
Richard Grenville 812ba93516 Bug fix #68: Possible fix for failure in client window detection
- Note I'm not in the best state today (bad cold & sleep-deprived). This
  commit is likely to introduce bugs.

- Attempt to fix client window detection failures happening when compton
  searches for client window before it's ready.

- Fix build failure with <libpcre-8.20. Thanks to @pvanek for reporting
  in #51.

- Move client window detection to a new function win_recheck_client().

- Add win_unmark_client(), which unmarks a client window.

- Rename a few functions.

- Split fetching of values of type-Window properties to a new function
  wid_get_prop_window().

- Add extra safety checks and assert calls to various functions, to
  expose potential bugs.

- Fix a memory leak that w->role is not freed on window destruction.
2012-12-07 23:06:15 +08:00
Richard Grenville a7189263e1 Feature: WM_WINDOW_ROLE matching
- Add support of matching WM_WINDOW_ROLE value. Thanks to Vladimir A.
  Pavlov!

- Thanks to Vladimir A. Pavlov for reporting the issues caused by
  missing client window, fixed in the last commit!

- Fix a memory leak in wid_get_text_prop() and wid_get_name(). Xlib
  documentation did not mention how to free the value XGetTextProperty()
  returns, so my fix could lead to troubles.

- Set focus out in unmap_win(), and add w->leader, to prepare for
  subsidiary window detection.

- Abstract update of a single string window property to
  win_get_prop_str().

- Change wid_get_name() to rely on wid_get_text_prop() as much as
  possible.

- Correct a typo in win_get_prop_str() that could cause unnecessary
  update of shadow state and window focus.
2012-12-05 18:23:35 +08:00
Richard Grenville 983803aa9f Bug fix: Dynamic inactive dim & client window changes
- Make inactive_dim opacity change according to window opacity by
  default, so it looks better when fading. --inactive-dim-fixed restores
  the old behavior.

- Make client window default to the window itself. Add w->wmwin to
  represent whether the window looks like a WM window instead. A side
  effect is, the window type of WM windows are changed from unknown to
  normal, making it necessary to use --mark-wmwin-active to avoid
  considering them unfocused.

- Add check of PointerRoot to recheck_focus() to avoid BadWindow errors
  when the root window is focused.

- Add a few macros to simplify debugging code.

- Add DEBUG_FRAME.
2012-12-05 15:28:37 +08:00
Richard Grenville 9e66fd5b3f Misc: Man page updates
Update Asciidoc man page.
2012-12-04 22:34:24 +08:00
Richard Grenville 72c18b6219 Feature #65: --focus-exclude
- Add --focus-exclude, which should be used with a list of conditions to
  set certain windows to always be considered focused.

- Change focus determination process, with a newly added w->focused_real
  that reflects whether the window is actually focused, while w->focused
  represents whether compton considers it focused. The primary
  difference is now when a window considered focused because of
  --mark-wmwin-focused or --mark-ovredir-focused receives a FocusOut
  event, it's still considered focused by compton.

- Change opacity target and dim state calculation so that it's done at
  most once every paint.

- Split window opacity property fetching from calc_opacity() to a new
  function win_update_opacity_prop().

- Silence a warning in wid_get_prop_wintype().

- Rename a few functions. Code clean-up.

- My time is very limited currently, few tests are done, so this commit
  may very well introduce bugs.

- Known issue: Dim picture opacity does not change based on window
  opacity, causing somehow annoying effects when a window fades off.
2012-11-28 12:07:58 +08:00
Richard Grenville 0f851b17a2 Bug fix: --use-ewmh-active-win causes wrong focus state in Awesome
- Fix a bug that causes wrong focus detection result in Awesome and
  maybe other window managers, when --use-ewmh-active-win is enabled and
  _NET_ACTIVE_WINDOW changes before the newly-focused window is mapped.

- Fix a typo that causes more than one window to stay focused after a
  window destruction with --use-ewmh-active-win.

- Fix a bug that find_clientwin() incorrectly returns a window when
  window ID 0 is passed to it.

- Check for window ID 0 in update_ewmh_active_win().
2012-11-27 08:41:55 +08:00
Richard Grenville 9ca20e7e32 Bug fix: Wrong file path being displayed on config file parsing error
- Fix a bug that causes wrong file path being displayed on configuration
  file parsing error.

- Continue dropping unused parameters and silence clang warnings.

- Add conky shadow exclusion rule to compton.sample.conf.
2012-11-21 09:15:49 +08:00
Richard Grenville e912fcde7b Feature #51: Re-initialize when SIGUSR1 is received
- Create a session_t structure, to get rid of most global variables and
  let information pass in/out mostly through parameters. Huge changes,
  so bugs may very well appear. I'm worried about resource leakages, in
  particular.

- Add gcc attributes on various functions.

- Add Doxygen configuration.

- Replace much Xlib Bool with C99 bool.

- Add and adjust some comments.

- Drop unused parameters from some functions.

- Cache default Visual and Depth, mainly to shorten code.

- Rename some types, variables, and functions.

- Add win_ev_stop() and set_ignore_next() for convenience.

- Modify wid_get_prop_wintype() and wid_get_opacity_prop() to use
  wid_get_prop().

- Rename --respect-attr-shadow to --respect-prop-shadow.

- Fix a memory leak in --respect-prop-shadow.

- Many other small changes.
2012-11-19 11:44:58 +08:00
Richard Grenville a92c2bd808 Misc: Code cleanup
- Form a function ev_window_name() for all window name detection in
  debugging code.

- Add unredir-if-possible to configuration file options.
2012-11-14 21:34:51 +08:00
Richard Grenville 09c10c227c Misc: Documentation updates
Update README.md and two Asciidoc man pages. Remove the options and
examples section in README.md.
2012-11-14 20:44:31 +08:00
Richard Grenville 62ea373ee5 Merge branch 'master' into richardgv-dev
Conflicts:
	bin/compton-trans
	man/compton-trans.1

- Add some explaination in README.md.

- Rename CMakeLists.txt to _CMakeLists.txt to avoid confusion.
2012-11-14 18:46:26 +08:00
Richard Grenville fd9c9ba38d Misc: compton-trans: Allow reading opacity from positional arguments
- compton-trans: Allow reading opacity value from positional arguments,
  like the version in master branch.

- compton-trans: Quit when meeting an unrecognized option.
2012-11-14 18:17:32 +08:00
Richard Grenville ce7f686f9e Misc: compton-trans: Performance optimization
Reduce abundant calls to xwininfo in compton-trans further. Helpful for
performance but you can't expect too much from a bash script anyway.
2012-11-11 13:02:14 +08:00
Richard Grenville aaeafbd19d Bug fix: Client window event mask not restored in map_win()
- Fix a bug that client window event masks are not restored in
  map_win(), causing further property changes to be ignored, for
  example.

- Misc changes.
2012-11-10 11:41:01 +08:00
Richard Grenville 59e54b0665 Feature: Unredirect windows when there's a fullscreen window
- Optionally unredirect windows when there's a fullscreen opaque window on
  the top of the stack (--unredir-if-possible). Experimental. Known
  issues:

  * Screen flickers when redirecting/unredirecting windows.
    --paint-on-overlay seemingly minimizes it (Thanks for hints from
	mutter), but still noticeable.

  * It probably does not play well with vdpau in some cases.

- A debug option DEBUG_REDIR is added.

- Fix a bug that reg_ignore are not expired when a CirculateNotify is
  received.

- Add extra safe guards in some places, which could be bad for
  performance.

- Remove some abundant code.
2012-11-09 22:16:41 +08:00
Richard Grenville e924976b28 Feature #16: _COMPTON_SHADOW window property support
- Add support for reading _COMPTON_SHADOW property from windows
  (--respect-attr-shadow). Presently the only defined behavior is, if
  _COMPTON_SHADOW is set on the highest ancestor below root window of a
  window (usually the WM frame), it's format is 32-bit, type is CADINAL,
  value is 0, the window will not get a shadow. The format and behavior
  could change in the future without prior notification.

- Fix an issue in fork_after() that may cause some streams to remain
  open. My mistake.

- Attempt to reduce determine_shadow() calls from map_win() by
  separating some raw handler functions out.
2012-11-09 11:41:21 +08:00
Richard Grenville b47205db08 Misc: Update CMakeLists.txt
Update CMakeLists.txt to support Asciidoc man page / HTML doc
generation, with various small changes.
2012-11-09 09:33:41 +08:00
Richard Grenville 59d6979612 Bug fix: compton-trans -s does not work
My silly mistake. :-)
2012-11-09 00:03:22 +08:00
Christopher Jeffrey c883cdec3e compton-trans: add error handling. better option parsing. 2012-11-08 09:21:57 -06:00
Richard Grenville 08ca5b4d1e Bug fix #62: Rewrite a part of compton-trans
Rewrite a part of compton-trans in order to provide more friendly
error messages, to support window title that contains spaces, and to
limit the number of xwininfo calls to a constant. Not much tests are
done, and I don't know bash well, so bugs could very well exist.
2012-11-08 22:37:31 +08:00
Richard Grenville 56ce896feb Bug fix: Shape update of opaque windows not handled correctly
- Fix a bug that causes rendering issues if a opaque window changes
  shape.

- Remove abundant handling code in paint_preprocess() when generating
  border_size as border_size() is no longer relying on
  XFixesCreateRegionFromWindow() right now by default.

- Add extra code to print backtrace in DEBUG_ALLOC_REG.

- Move initialization of fade_time closer to first paint.
2012-11-08 19:45:39 +08:00
Richard Grenville 357bf94efc Bug fix: Window rendered incorrectly if has no border with -e
- Fix a bug that window content and some borders are not rendered if the
  window has no border on particular sides when -e (frame-opacity) is
  enabled, introduced in 66d3f30978. Just as what I said in the commit
  message of the commit, "bugs are to be expected". :-S

- Fix a potential segfault in win_match().

- Slightly update CPackConfig.cmake to add dependency to libdrm.
2012-11-06 11:37:29 +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 dc04a7d8ca Improvement: Add EWMH _NET_WM_ACTIVE_WINDOW support
- Add support for using _NET_WM_ACTIVE_WINDOW to track focus (rather
  than using FocusIn/Out events) as --use-ewmh-active-win.

- Add wid_get_attr() and use it in place of XGetWindowProperty() in
  various places.

- Remove dpy parameter from find_win() and find_toplevel() as it's unused.

- Fix a writing-to-freed-memory issue in paint_preprocess().
2012-11-04 18:45:39 +08:00
Richard Grenville e734655eef Improvement: Focus detection & --mark-ovredir-focused changes
- Change focus detection to filter FocusIn/Out events in an alternative
  way. Could break things, and may be revoked in the future.

- Change --mark-ovredir-focused's semantics. Now it determines whether a
  window is to be unconditionally focused by checking if its client
  window is the window itself. This resolves a problem in window
  managers that set frame windows to be override-redirected (Fluxbox and
  i3?). Yes, I know it's bad to change semantics in this way.
2012-11-03 22:15:51 +08:00