common.h: general clean up
Remove unused functions and definitions. Move some macros into the files they belong. Signed-off-by: Yuxuan Shui <yshuiv7@gmail.com>
This commit is contained in:
parent
e330464126
commit
939f2fb602
@ -4,9 +4,6 @@
|
|||||||
#include "common.h"
|
#include "common.h"
|
||||||
#include "utils.h"
|
#include "utils.h"
|
||||||
|
|
||||||
/**
|
|
||||||
* Wrapper of XInternAtom() for convenience.
|
|
||||||
*/
|
|
||||||
static inline void *atom_getter(void *ud, const char *atom_name, int *err) {
|
static inline void *atom_getter(void *ud, const char *atom_name, int *err) {
|
||||||
xcb_connection_t *c = ud;
|
xcb_connection_t *c = ud;
|
||||||
xcb_intern_atom_reply_t *reply = xcb_intern_atom_reply(
|
xcb_intern_atom_reply_t *reply = xcb_intern_atom_reply(
|
||||||
@ -25,7 +22,7 @@ static inline void *atom_getter(void *ud, const char *atom_name, int *err) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Fetch all required atoms and save them to a session.
|
* Create a new atom structure and fetch all predefined atoms
|
||||||
*/
|
*/
|
||||||
struct atom *init_atoms(xcb_connection_t *c) {
|
struct atom *init_atoms(xcb_connection_t *c) {
|
||||||
auto atoms = ccalloc(1, struct atom);
|
auto atoms = ccalloc(1, struct atom);
|
||||||
|
@ -277,17 +277,14 @@ void paint_all_new(session_t *ps, struct managed_win *t, bool ignore_damage) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
#ifdef DEBUG_REPAINT
|
#ifdef DEBUG_REPAINT
|
||||||
print_timestamp(ps);
|
|
||||||
struct timespec now = get_time_timespec();
|
struct timespec now = get_time_timespec();
|
||||||
struct timespec diff = {0};
|
struct timespec diff = {0};
|
||||||
timespec_subtract(&diff, &now, &last_paint);
|
timespec_subtract(&diff, &now, &last_paint);
|
||||||
printf("[ %5ld:%09ld ] ", diff.tv_sec, diff.tv_nsec);
|
log_trace("[ %5ld:%09ld ] ", diff.tv_sec, diff.tv_nsec);
|
||||||
last_paint = now;
|
last_paint = now;
|
||||||
printf("paint:");
|
log_trace("paint:");
|
||||||
for (win *w = t; w; w = w->prev_trans)
|
for (win *w = t; w; w = w->prev_trans)
|
||||||
printf(" %#010lx", w->id);
|
log_trace(" %#010lx", w->id);
|
||||||
putchar('\n');
|
|
||||||
fflush(stdout);
|
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
|
149
src/common.h
149
src/common.h
@ -38,7 +38,6 @@
|
|||||||
#include <sys/time.h>
|
#include <sys/time.h>
|
||||||
#include <time.h>
|
#include <time.h>
|
||||||
|
|
||||||
#include <X11/Xlib.h>
|
|
||||||
#include <ev.h>
|
#include <ev.h>
|
||||||
#include <pixman.h>
|
#include <pixman.h>
|
||||||
#include <xcb/composite.h>
|
#include <xcb/composite.h>
|
||||||
@ -51,19 +50,7 @@
|
|||||||
|
|
||||||
#include "uthash_extra.h"
|
#include "uthash_extra.h"
|
||||||
#ifdef CONFIG_OPENGL
|
#ifdef CONFIG_OPENGL
|
||||||
// libGL
|
|
||||||
#include "backend/gl/glx.h"
|
#include "backend/gl/glx.h"
|
||||||
|
|
||||||
// Workarounds for missing definitions in some broken GL drivers, thanks to
|
|
||||||
// douglasp and consolers for reporting
|
|
||||||
#ifndef GL_TEXTURE_RECTANGLE
|
|
||||||
#define GL_TEXTURE_RECTANGLE 0x84F5
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#ifndef GLX_BACK_BUFFER_AGE_EXT
|
|
||||||
#define GLX_BACK_BUFFER_AGE_EXT 0x20F4
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
// === Macros ===
|
// === Macros ===
|
||||||
@ -92,26 +79,15 @@
|
|||||||
|
|
||||||
// === Constants ===
|
// === Constants ===
|
||||||
|
|
||||||
/// @brief Length of generic buffers.
|
|
||||||
#define BUF_LEN 80
|
|
||||||
|
|
||||||
#define ROUNDED_PERCENT 0.05
|
#define ROUNDED_PERCENT 0.05
|
||||||
#define ROUNDED_PIXELS 10
|
#define ROUNDED_PIXELS 10
|
||||||
|
|
||||||
#define REGISTER_PROP "_NET_WM_CM_S"
|
|
||||||
|
|
||||||
#define TIME_MS_MAX LONG_MAX
|
|
||||||
#define SWOPTI_TOLERANCE 3000
|
#define SWOPTI_TOLERANCE 3000
|
||||||
#define WIN_GET_LEADER_MAX_RECURSION 20
|
|
||||||
|
|
||||||
#define NS_PER_SEC 1000000000L
|
#define NS_PER_SEC 1000000000L
|
||||||
#define US_PER_SEC 1000000L
|
#define US_PER_SEC 1000000L
|
||||||
#define MS_PER_SEC 1000
|
#define MS_PER_SEC 1000
|
||||||
|
|
||||||
#define XRFILTER_CONVOLUTION "convolution"
|
|
||||||
#define XRFILTER_GAUSSIAN "gaussian"
|
|
||||||
#define XRFILTER_BINOMIAL "binomial"
|
|
||||||
|
|
||||||
/// @brief Maximum OpenGL FBConfig depth.
|
/// @brief Maximum OpenGL FBConfig depth.
|
||||||
#define OPENGL_MAX_DEPTH 32
|
#define OPENGL_MAX_DEPTH 32
|
||||||
|
|
||||||
@ -173,16 +149,6 @@ typedef void (*GLDEBUGPROC)(GLenum source, GLenum type, GLuint id, GLenum severi
|
|||||||
typedef void (*f_DebugMessageCallback)(GLDEBUGPROC, void *userParam);
|
typedef void (*f_DebugMessageCallback)(GLDEBUGPROC, void *userParam);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifdef CONFIG_OPENGL
|
|
||||||
typedef GLsync (*f_FenceSync)(GLenum condition, GLbitfield flags);
|
|
||||||
typedef GLboolean (*f_IsSync)(GLsync sync);
|
|
||||||
typedef void (*f_DeleteSync)(GLsync sync);
|
|
||||||
typedef GLenum (*f_ClientWaitSync)(GLsync sync, GLbitfield flags, GLuint64 timeout);
|
|
||||||
typedef void (*f_WaitSync)(GLsync sync, GLbitfield flags, GLuint64 timeout);
|
|
||||||
typedef GLsync (*f_ImportSyncEXT)(GLenum external_sync_type, GLintptr external_sync,
|
|
||||||
GLbitfield flags);
|
|
||||||
#endif
|
|
||||||
|
|
||||||
/// @brief Wrapper of a binded GLX texture.
|
/// @brief Wrapper of a binded GLX texture.
|
||||||
struct _glx_texture {
|
struct _glx_texture {
|
||||||
GLuint texture;
|
GLuint texture;
|
||||||
@ -247,29 +213,15 @@ typedef struct {
|
|||||||
GLXContext context;
|
GLXContext context;
|
||||||
/// Whether we have GL_ARB_texture_non_power_of_two.
|
/// Whether we have GL_ARB_texture_non_power_of_two.
|
||||||
bool has_texture_non_power_of_two;
|
bool has_texture_non_power_of_two;
|
||||||
/// Pointer to the glFenceSync() function.
|
|
||||||
f_FenceSync glFenceSyncProc;
|
|
||||||
/// Pointer to the glIsSync() function.
|
|
||||||
f_IsSync glIsSyncProc;
|
|
||||||
/// Pointer to the glDeleteSync() function.
|
|
||||||
f_DeleteSync glDeleteSyncProc;
|
|
||||||
/// Pointer to the glClientWaitSync() function.
|
|
||||||
f_ClientWaitSync glClientWaitSyncProc;
|
|
||||||
/// Pointer to the glWaitSync() function.
|
|
||||||
f_WaitSync glWaitSyncProc;
|
|
||||||
/// Pointer to the glImportSyncEXT() function.
|
|
||||||
f_ImportSyncEXT glImportSyncEXT;
|
|
||||||
/// Current GLX Z value.
|
/// Current GLX Z value.
|
||||||
int z;
|
int z;
|
||||||
#ifdef CONFIG_OPENGL
|
|
||||||
glx_blur_pass_t blur_passes[MAX_BLUR_PASS];
|
glx_blur_pass_t blur_passes[MAX_BLUR_PASS];
|
||||||
#endif
|
|
||||||
} glx_session_t;
|
} glx_session_t;
|
||||||
|
|
||||||
#define CGLX_SESSION_INIT \
|
#define CGLX_SESSION_INIT \
|
||||||
{ .context = NULL }
|
{ .context = NULL }
|
||||||
|
|
||||||
#endif
|
#endif // CONFIG_OPENGL
|
||||||
|
|
||||||
/// Structure containing all necessary data for a compton session.
|
/// Structure containing all necessary data for a compton session.
|
||||||
typedef struct session {
|
typedef struct session {
|
||||||
@ -523,85 +475,10 @@ typedef enum { WIN_EVMODE_UNKNOWN, WIN_EVMODE_FRAME, WIN_EVMODE_CLIENT } win_evm
|
|||||||
extern const char *const WINTYPES[NUM_WINTYPES];
|
extern const char *const WINTYPES[NUM_WINTYPES];
|
||||||
extern session_t *ps_g;
|
extern session_t *ps_g;
|
||||||
|
|
||||||
// == Debugging code ==
|
|
||||||
static inline void print_timestamp(session_t *ps);
|
|
||||||
|
|
||||||
void ev_xcb_error(session_t *ps, xcb_generic_error_t *err);
|
void ev_xcb_error(session_t *ps, xcb_generic_error_t *err);
|
||||||
|
|
||||||
// === Functions ===
|
// === Functions ===
|
||||||
|
|
||||||
/**
|
|
||||||
* Return whether a struct timeval value is empty.
|
|
||||||
*/
|
|
||||||
static inline bool timeval_isempty(struct timeval *ptv) {
|
|
||||||
if (!ptv)
|
|
||||||
return false;
|
|
||||||
|
|
||||||
return ptv->tv_sec <= 0 && ptv->tv_usec <= 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Compare a struct timeval with a time in milliseconds.
|
|
||||||
*
|
|
||||||
* @return > 0 if ptv > ms, 0 if ptv == 0, -1 if ptv < ms
|
|
||||||
*/
|
|
||||||
static inline int timeval_ms_cmp(struct timeval *ptv, unsigned long ms) {
|
|
||||||
assert(ptv);
|
|
||||||
|
|
||||||
// We use those if statement instead of a - expression because of possible
|
|
||||||
// truncation problem from long to int.
|
|
||||||
auto sec = (long)(ms / MS_PER_SEC);
|
|
||||||
if (ptv->tv_sec > sec) {
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
if (ptv->tv_sec < sec) {
|
|
||||||
return -1;
|
|
||||||
}
|
|
||||||
|
|
||||||
auto usec = (long)(ms % MS_PER_SEC * (US_PER_SEC / MS_PER_SEC));
|
|
||||||
if (ptv->tv_usec > usec) {
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
if (ptv->tv_usec < usec) {
|
|
||||||
return -1;
|
|
||||||
}
|
|
||||||
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Subtracting two struct timeval values.
|
|
||||||
*
|
|
||||||
* Taken from glibc manual.
|
|
||||||
*
|
|
||||||
* Subtract the `struct timeval' values X and Y,
|
|
||||||
* storing the result in RESULT.
|
|
||||||
* Return 1 if the difference is negative, otherwise 0.
|
|
||||||
*/
|
|
||||||
static inline int
|
|
||||||
timeval_subtract(struct timeval *result, struct timeval *x, struct timeval *y) {
|
|
||||||
/* Perform the carry for the later subtraction by updating y. */
|
|
||||||
if (x->tv_usec < y->tv_usec) {
|
|
||||||
long nsec = (y->tv_usec - x->tv_usec) / 1000000 + 1;
|
|
||||||
y->tv_usec -= 1000000 * nsec;
|
|
||||||
y->tv_sec += nsec;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (x->tv_usec - y->tv_usec > 1000000) {
|
|
||||||
long nsec = (x->tv_usec - y->tv_usec) / 1000000;
|
|
||||||
y->tv_usec += 1000000 * nsec;
|
|
||||||
y->tv_sec -= nsec;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Compute the time remaining to wait.
|
|
||||||
tv_usec is certainly positive. */
|
|
||||||
result->tv_sec = x->tv_sec - y->tv_sec;
|
|
||||||
result->tv_usec = x->tv_usec - y->tv_usec;
|
|
||||||
|
|
||||||
/* Return 1 if result is negative. */
|
|
||||||
return x->tv_sec < y->tv_sec;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Subtracting two struct timespec values.
|
* Subtracting two struct timespec values.
|
||||||
*
|
*
|
||||||
@ -661,21 +538,6 @@ static inline struct timespec get_time_timespec(void) {
|
|||||||
return tm;
|
return tm;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* Print time passed since program starts execution.
|
|
||||||
*
|
|
||||||
* Used for debugging.
|
|
||||||
*/
|
|
||||||
static inline void print_timestamp(session_t *ps) {
|
|
||||||
struct timeval tm, diff;
|
|
||||||
|
|
||||||
if (gettimeofday(&tm, NULL))
|
|
||||||
return;
|
|
||||||
|
|
||||||
timeval_subtract(&diff, &tm, &ps->time_start);
|
|
||||||
fprintf(stderr, "[ %5ld.%06ld ] ", diff.tv_sec, diff.tv_usec);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Wrapper of XFree() for convenience.
|
* Wrapper of XFree() for convenience.
|
||||||
*
|
*
|
||||||
@ -686,11 +548,6 @@ static inline void cxfree(void *data) {
|
|||||||
XFree(data);
|
XFree(data);
|
||||||
}
|
}
|
||||||
|
|
||||||
_Noreturn static inline void die(const char *msg) {
|
|
||||||
puts(msg);
|
|
||||||
exit(1);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Return the painting target window.
|
* Return the painting target window.
|
||||||
*/
|
*/
|
||||||
@ -787,10 +644,6 @@ static inline long winprop_get_int(winprop_t prop) {
|
|||||||
|
|
||||||
void force_repaint(session_t *ps);
|
void force_repaint(session_t *ps);
|
||||||
|
|
||||||
bool vsync_init(session_t *ps);
|
|
||||||
|
|
||||||
void vsync_deinit(session_t *ps);
|
|
||||||
|
|
||||||
/** @name DBus handling
|
/** @name DBus handling
|
||||||
*/
|
*/
|
||||||
///@{
|
///@{
|
||||||
|
@ -932,18 +932,14 @@ static bool register_cm(session_t *ps) {
|
|||||||
|
|
||||||
// Acquire X Selection _NET_WM_CM_S?
|
// Acquire X Selection _NET_WM_CM_S?
|
||||||
if (!ps->o.no_x_selection) {
|
if (!ps->o.no_x_selection) {
|
||||||
unsigned len = strlen(REGISTER_PROP) + 2;
|
const char register_prop[] = "_NET_WM_CM_S";
|
||||||
int s = ps->scr;
|
|
||||||
xcb_atom_t atom;
|
xcb_atom_t atom;
|
||||||
|
|
||||||
while (s >= 10) {
|
char *buf = NULL;
|
||||||
++len;
|
if (asprintf(&buf, "%s%d", register_prop, ps->scr) < 0) {
|
||||||
s /= 10;
|
log_fatal("Failed to allocate memory");
|
||||||
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
auto buf = ccalloc(len, char);
|
|
||||||
snprintf(buf, len, REGISTER_PROP "%d", ps->scr);
|
|
||||||
buf[len - 1] = '\0';
|
|
||||||
atom = get_atom(ps->atoms, buf);
|
atom = get_atom(ps->atoms, buf);
|
||||||
free(buf);
|
free(buf);
|
||||||
|
|
||||||
|
@ -30,6 +30,10 @@
|
|||||||
|
|
||||||
#include "opengl.h"
|
#include "opengl.h"
|
||||||
|
|
||||||
|
#ifndef GL_TEXTURE_RECTANGLE
|
||||||
|
#define GL_TEXTURE_RECTANGLE 0x84F5
|
||||||
|
#endif
|
||||||
|
|
||||||
static inline XVisualInfo *get_visualinfo_from_visual(session_t *ps, xcb_visualid_t visual) {
|
static inline XVisualInfo *get_visualinfo_from_visual(session_t *ps, xcb_visualid_t visual) {
|
||||||
XVisualInfo vreq = {.visualid = visual};
|
XVisualInfo vreq = {.visualid = visual};
|
||||||
int nitems = 0;
|
int nitems = 0;
|
||||||
|
@ -15,6 +15,11 @@
|
|||||||
#ifdef CONFIG_OPENGL
|
#ifdef CONFIG_OPENGL
|
||||||
#include "backend/gl/glx.h"
|
#include "backend/gl/glx.h"
|
||||||
#include "opengl.h"
|
#include "opengl.h"
|
||||||
|
|
||||||
|
#ifndef GLX_BACK_BUFFER_AGE_EXT
|
||||||
|
#define GLX_BACK_BUFFER_AGE_EXT 0x20F4
|
||||||
|
#endif
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#include "compiler.h"
|
#include "compiler.h"
|
||||||
@ -31,6 +36,10 @@
|
|||||||
#include "backend/backend_common.h"
|
#include "backend/backend_common.h"
|
||||||
#include "render.h"
|
#include "render.h"
|
||||||
|
|
||||||
|
#define XRFILTER_CONVOLUTION "convolution"
|
||||||
|
#define XRFILTER_GAUSSIAN "gaussian"
|
||||||
|
#define XRFILTER_BINOMIAL "binomial"
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Bind texture in paint_t if we are using GLX backend.
|
* Bind texture in paint_t if we are using GLX backend.
|
||||||
*/
|
*/
|
||||||
|
@ -43,6 +43,7 @@
|
|||||||
#include "win.h"
|
#include "win.h"
|
||||||
|
|
||||||
#define OPAQUE 0xffffffff
|
#define OPAQUE 0xffffffff
|
||||||
|
#define WIN_GET_LEADER_MAX_RECURSION 20
|
||||||
|
|
||||||
/// Generate a "return by value" function, from a function that returns the
|
/// Generate a "return by value" function, from a function that returns the
|
||||||
/// region via a region_t pointer argument.
|
/// region via a region_t pointer argument.
|
||||||
|
Loading…
Reference in New Issue
Block a user