summaryrefslogtreecommitdiffstats
path: root/compton.h
diff options
context:
space:
mode:
authorRichard Grenville <[email protected]>2012-12-10 10:31:24 +0800
committerRichard Grenville <[email protected]>2012-12-10 10:38:28 +0800
commit8d4a3f899f8efb03da4c1ab52234e463c45396df (patch)
tree10c62c7b9266ba53485e64e8e90da278380bd855 /compton.h
parent94f292b9ff1cffd7fade3ba9de9f4ed8d83416db (diff)
downloadtdebase-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.h37
1 files changed, 29 insertions, 8 deletions
diff --git a/compton.h b/compton.h
index 6b4eed221..0ff235432 100644
--- a/compton.h
+++ b/compton.h
@@ -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))