diff options
author | Richard Grenville <[email protected]> | 2012-12-10 10:31:24 +0800 |
---|---|---|
committer | Richard Grenville <[email protected]> | 2012-12-10 10:38:28 +0800 |
commit | 8d4a3f899f8efb03da4c1ab52234e463c45396df (patch) | |
tree | 10c62c7b9266ba53485e64e8e90da278380bd855 /compton.h | |
parent | 94f292b9ff1cffd7fade3ba9de9f4ed8d83416db (diff) | |
download | tdebase-8d4a3f899f8efb03da4c1ab52234e463c45396df.tar.gz tdebase-8d4a3f899f8efb03da4c1ab52234e463c45396df.zip |
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.
Diffstat (limited to 'compton.h')
-rw-r--r-- | compton.h | 37 |
1 files changed, 29 insertions, 8 deletions
@@ -162,6 +162,13 @@ typedef enum { NUM_WINTYPES } wintype_t; +/// Enumeration type to represent switches. +typedef enum { + OFF, // false + ON, // true + UNSET +} switch_t; + typedef enum { WINDOW_SOLID, WINDOW_TRANS, @@ -266,6 +273,7 @@ typedef struct { bool vsync_aggressive; // === Shadow === + /// Enable/disable shadow for specific window types. bool wintype_shadow[NUM_WINTYPES]; /// Red, green and blue tone of the shadow. double shadow_red, shadow_green, shadow_blue; @@ -281,6 +289,7 @@ typedef struct { bool respect_prop_shadow; // === Fading === + /// Enable/disable fading for specific window types. bool wintype_fade[NUM_WINTYPES]; /// How much to fade in in a single fading step. opacity_t fade_in_step; @@ -293,6 +302,7 @@ typedef struct { wincond_t *fade_blacklist; // === Opacity === + /// Default opacity for specific window types double wintype_opacity[NUM_WINTYPES]; /// Default opacity for inactive windows. /// 32-bit integer with the format of _NET_WM_OPACITY. 0 stands for @@ -316,6 +326,8 @@ typedef struct { double alpha_step; // === Focus related === + /// Consider windows of specific types to be always focused. + bool wintype_focus[NUM_WINTYPES]; /// Whether to use EWMH _NET_ACTIVE_WINDOW to find active window. bool use_ewmh_active_win; /// A list of windows always to be considered focused. @@ -764,7 +776,7 @@ sub_unslong(unsigned long a, unsigned long b) { /** * Set a <code>bool</code> array of all wintypes to true. */ -static void +static inline void wintype_arr_enable(bool arr[]) { wintype_t i; @@ -774,6 +786,18 @@ wintype_arr_enable(bool arr[]) { } /** + * Set a <code>switch_t</code> array of all unset wintypes to true. + */ +static inline void +wintype_arr_enable_unset(switch_t arr[]) { + wintype_t i; + + for (i = 0; i < NUM_WINTYPES; ++i) + if (UNSET == arr[i]) + arr[i] = ON; +} + +/** * Allocate the space and copy a string. */ static inline char * __attribute__((const)) @@ -1147,11 +1171,6 @@ static Picture solid_picture(session_t *ps, bool argb, double a, double r, double g, double b); -static inline bool is_normal_win(const win *w) { - return (WINTYPE_NORMAL == w->window_type - || WINTYPE_UTILITY == w->window_type); -} - /** * Determine if a window has a specific property. * @@ -1439,8 +1458,10 @@ win_update_focused(session_t *ps, win *w) { w->focused = w->focused_real; - // Treat WM windows and override-redirected windows specially - if ((ps->o.mark_wmwin_focused && w->wmwin) + // Use wintype_focus, and treat WM windows and override-redirected + // windows specially + if (ps->o.wintype_focus[w->window_type] + || (ps->o.mark_wmwin_focused && w->wmwin) || (ps->o.mark_ovredir_focused && w->id == w->client_win && !w->wmwin) || win_match(w, ps->o.focus_blacklist, &w->cache_fcblst)) |