diff options
author | Richard Grenville <[email protected]> | 2012-10-31 08:54:09 +0800 |
---|---|---|
committer | Richard Grenville <[email protected]> | 2012-10-31 10:08:48 +0800 |
commit | 47f54a1cb78bb53552ea0a0277b1604d1eaad482 (patch) | |
tree | d3a47c53e3c4fb08a28abf3d1b82a66d62c52821 /compton.h | |
parent | 4a607cea934b66478be02ab88cd7c4f37f1b0ca0 (diff) | |
download | tdebase-47f54a1cb78bb53552ea0a0277b1604d1eaad482.tar.gz tdebase-47f54a1cb78bb53552ea0a0277b1604d1eaad482.zip |
Improvement: Try to reduce reg_ignore regenerations
- Try to reduce regenerations of reg_ignore. Highly experimental and
could lead to very obscure bugs. More testing needed.
- Introduce to_paint in struct _win to keep track of whether this window
was painted last time.
- Drop CAN_DO_USABLE support. Its usage looks pretty limited.
- Fix a bug that possibly causes rendering issues on frame width changes
if frame_opacity is enabled.
- Detect other borders (instead of only top border) when determining
frame opacity.
- Change the type of w->mode from int to an enumeration type.
- Ignore ShapeNotify if the window is not mapped, to avoid loss of
w->border_size in some cases, which breaks the fading out process of
shaped windows.
- Stop rendering a window if its picture is lost and it's unmapped, to
avoid a series of X errors and possible rendering problems.
Diffstat (limited to 'compton.h')
-rw-r--r-- | compton.h | 33 |
1 files changed, 22 insertions, 11 deletions
@@ -6,8 +6,6 @@ // === Options === -#define CAN_DO_USABLE 0 - // Debug options, enable them using -D in CFLAGS // #define DEBUG_REPAINT 1 // #define DEBUG_EVENTS 1 @@ -106,10 +104,6 @@ extern struct timeval time_start; #define OPAQUE 0xffffffff #define REGISTER_PROP "_NET_WM_CM_S" -#define WINDOW_SOLID 0 -#define WINDOW_TRANS 1 -#define WINDOW_ARGB 2 - #define FADE_DELTA_TOLERANCE 0.2 #define SW_OPTI_TOLERANCE 1000 @@ -147,6 +141,12 @@ typedef enum { NUM_WINTYPES } wintype; +typedef enum { + WINDOW_SOLID, + WINDOW_TRANS, + WINDOW_ARGB +} winmode; + typedef struct _ignore { struct _ignore *next; unsigned long sequence; @@ -186,11 +186,7 @@ typedef struct _win { Window client_win; Pixmap pixmap; XWindowAttributes a; -#if CAN_DO_USABLE - Bool usable; /* mapped and all damaged at one point */ - XRectangle damage_bounds; /* bounds of damage */ -#endif - int mode; + winmode mode; int damaged; Damage damage; Picture picture; @@ -207,6 +203,8 @@ typedef struct _win { Bool bounding_shaped; /// Whether the window just have rounded corners. Bool rounded_corners; + /// Whether this window is to be painted + Bool to_paint; // Blacklist related members char *name; @@ -393,6 +391,7 @@ extern int root_height, root_width; extern Atom atom_client_attr; extern Bool idling; extern Bool shape_exists; +extern Bool reg_ignore_expire; /** * Functions @@ -830,6 +829,18 @@ wid_bounding_shaped(Display *dpy, Window wid) { return False; } +static inline void +update_reg_ignore_expire(const win *w) { + if (w->to_paint && WINDOW_SOLID == w->mode) + reg_ignore_expire = True; +} + +static inline bool +win_has_frame(const win *w) { + return w->top_width || w->left_width || w->right_width + || w->bottom_width; +} + static void win_rounded_corners(Display *dpy, win *w); |