Convert print_errf/dbgf in win.c and compton.c
And improve some of the log messages. Like, when compton exits because of unsupported options, explain which options are causing compton to quit. Convert some debugging messages that are guarded behind ifdef's to log_trace, so user don't need to re-compile to enabled them. Signed-off-by: Yuxuan Shui <yshuiv7@gmail.com>
This commit is contained in:
parent
185c0ce97c
commit
833eb966f1
39
src/common.h
39
src/common.h
|
@ -16,18 +16,10 @@
|
||||||
// === Options ===
|
// === Options ===
|
||||||
|
|
||||||
// Debug options, enable them using -D in CFLAGS
|
// Debug options, enable them using -D in CFLAGS
|
||||||
// #define DEBUG_BACKTRACE 1
|
|
||||||
// #define DEBUG_REPAINT 1
|
// #define DEBUG_REPAINT 1
|
||||||
// #define DEBUG_EVENTS 1
|
// #define DEBUG_EVENTS 1
|
||||||
// #define DEBUG_RESTACK 1
|
// #define DEBUG_RESTACK 1
|
||||||
// #define DEBUG_WINTYPE 1
|
|
||||||
// #define DEBUG_CLIENTWIN 1
|
|
||||||
// #define DEBUG_WINDATA 1
|
|
||||||
// #define DEBUG_WINMATCH 1
|
// #define DEBUG_WINMATCH 1
|
||||||
// #define DEBUG_REDIR 1
|
|
||||||
// #define DEBUG_ALLOC_REG 1
|
|
||||||
// #define DEBUG_FRAME 1
|
|
||||||
// #define DEBUG_LEADER 1
|
|
||||||
// #define DEBUG_C2 1
|
// #define DEBUG_C2 1
|
||||||
// #define DEBUG_GLX 1
|
// #define DEBUG_GLX 1
|
||||||
// #define DEBUG_GLX_GLSL 1
|
// #define DEBUG_GLX_GLSL 1
|
||||||
|
@ -58,10 +50,6 @@
|
||||||
#define COMPTON_VERSION "unknown"
|
#define COMPTON_VERSION "unknown"
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#if defined(DEBUG_ALLOC_REG)
|
|
||||||
#define DEBUG_BACKTRACE 1
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#define MAX_ALPHA (255)
|
#define MAX_ALPHA (255)
|
||||||
|
|
||||||
// === Includes ===
|
// === Includes ===
|
||||||
|
@ -934,33 +922,6 @@ print_timestamp(session_t *ps);
|
||||||
void
|
void
|
||||||
ev_xcb_error(session_t *ps, xcb_generic_error_t *err);
|
ev_xcb_error(session_t *ps, xcb_generic_error_t *err);
|
||||||
|
|
||||||
#ifdef DEBUG_BACKTRACE
|
|
||||||
|
|
||||||
#include <execinfo.h>
|
|
||||||
#define BACKTRACE_SIZE 25
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Print current backtrace.
|
|
||||||
*
|
|
||||||
* Stolen from glibc manual.
|
|
||||||
*/
|
|
||||||
static inline void
|
|
||||||
print_backtrace(void) {
|
|
||||||
void *array[BACKTRACE_SIZE];
|
|
||||||
size_t size;
|
|
||||||
char **strings;
|
|
||||||
|
|
||||||
size = backtrace(array, BACKTRACE_SIZE);
|
|
||||||
strings = backtrace_symbols(array, size);
|
|
||||||
|
|
||||||
for (size_t i = 0; i < size; i++)
|
|
||||||
printf ("%s\n", strings[i]);
|
|
||||||
|
|
||||||
free(strings);
|
|
||||||
}
|
|
||||||
|
|
||||||
#endif
|
|
||||||
|
|
||||||
// === Functions ===
|
// === Functions ===
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
190
src/compton.c
190
src/compton.c
|
@ -500,11 +500,8 @@ recheck_focus(session_t *ps) {
|
||||||
|
|
||||||
win *w = find_win_all(ps, wid);
|
win *w = find_win_all(ps, wid);
|
||||||
|
|
||||||
#ifdef DEBUG_EVENTS
|
log_trace("%#010" PRIx32 " (%#010lx \"%s\") focused.", wid,
|
||||||
print_timestamp(ps);
|
|
||||||
printf_dbgf("(): %#010" PRIx32 " (%#010lx \"%s\") focused.\n", wid,
|
|
||||||
(w ? w->id: None), (w ? w->name: NULL));
|
(w ? w->id: None), (w ? w->name: NULL));
|
||||||
#endif
|
|
||||||
|
|
||||||
// And we set the focus state here
|
// And we set the focus state here
|
||||||
if (w) {
|
if (w) {
|
||||||
|
@ -624,7 +621,7 @@ paint_preprocess(session_t *ps, win *list) {
|
||||||
if (!reg_ignore_valid)
|
if (!reg_ignore_valid)
|
||||||
rc_region_unref(&w->reg_ignore);
|
rc_region_unref(&w->reg_ignore);
|
||||||
|
|
||||||
//printf_errf("(): %d %d %s", w->a.map_state, w->ever_damaged, w->name);
|
//log_trace("%d %d %s", w->a.map_state, w->ever_damaged, w->name);
|
||||||
|
|
||||||
// Give up if it's not damaged or invisible, or it's unmapped and its
|
// Give up if it's not damaged or invisible, or it's unmapped and its
|
||||||
// pixmap is gone (for example due to a ConfigureNotify), or when it's
|
// pixmap is gone (for example due to a ConfigureNotify), or when it's
|
||||||
|
@ -636,7 +633,7 @@ paint_preprocess(session_t *ps, win *list) {
|
||||||
|| (double) w->opacity / OPAQUE * MAX_ALPHA < 1
|
|| (double) w->opacity / OPAQUE * MAX_ALPHA < 1
|
||||||
|| w->paint_excluded)
|
|| w->paint_excluded)
|
||||||
to_paint = false;
|
to_paint = false;
|
||||||
//printf_errf("(): %s %d %d %d", w->name, to_paint, w->opacity, w->paint_excluded);
|
//log_trace("%s %d %d %d", w->name, to_paint, w->opacity, w->paint_excluded);
|
||||||
|
|
||||||
// Add window to damaged area if its painting status changes
|
// Add window to damaged area if its painting status changes
|
||||||
// or opacity changes
|
// or opacity changes
|
||||||
|
@ -753,7 +750,7 @@ xr_take_screenshot(session_t *ps) {
|
||||||
XImage *img = XGetImage(ps->dpy, get_tgt_window(ps), 0, 0,
|
XImage *img = XGetImage(ps->dpy, get_tgt_window(ps), 0, 0,
|
||||||
ps->root_width, ps->root_height, AllPlanes, XYPixmap);
|
ps->root_width, ps->root_height, AllPlanes, XYPixmap);
|
||||||
if (!img) {
|
if (!img) {
|
||||||
printf_errf("(): Failed to get XImage.");
|
log_error("Failed to get XImage.");
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
assert(0 == img->xoffset);
|
assert(0 == img->xoffset);
|
||||||
|
@ -841,9 +838,7 @@ map_win(session_t *ps, Window id) {
|
||||||
|
|
||||||
win *w = find_win(ps, id);
|
win *w = find_win(ps, id);
|
||||||
|
|
||||||
#ifdef DEBUG_EVENTS
|
log_trace("(%#010lx \"%s\"): %p", id, (w ? w->name: NULL), w);
|
||||||
printf_dbgf("(%#010lx \"%s\"): %p\n", id, (w ? w->name: NULL), w);
|
|
||||||
#endif
|
|
||||||
|
|
||||||
// Don't care about window mapping if it's an InputOnly window
|
// Don't care about window mapping if it's an InputOnly window
|
||||||
// Try avoiding mapping a window twice
|
// Try avoiding mapping a window twice
|
||||||
|
@ -885,9 +880,7 @@ map_win(session_t *ps, Window id) {
|
||||||
|
|
||||||
assert(w->client_win);
|
assert(w->client_win);
|
||||||
|
|
||||||
#ifdef DEBUG_WINTYPE
|
log_trace("(%#010lx): type %s", w->id, WINTYPES[w->window_type]);
|
||||||
printf_dbgf("(%#010lx): type %s\n", w->id, WINTYPES[w->window_type]);
|
|
||||||
#endif
|
|
||||||
|
|
||||||
// FocusIn/Out may be ignored when the window is unmapped, so we must
|
// FocusIn/Out may be ignored when the window is unmapped, so we must
|
||||||
// recheck focus here
|
// recheck focus here
|
||||||
|
@ -1027,8 +1020,7 @@ restack_win(session_t *ps, win *w, Window new_above) {
|
||||||
}
|
}
|
||||||
|
|
||||||
if (new_above && !found) {
|
if (new_above && !found) {
|
||||||
printf_errf("(%#010lx, %#010lx): "
|
log_error("(%#010lx, %#010lx): Failed to found new above window.", w->id, new_above);
|
||||||
"Failed to found new above window.", w->id, new_above);
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1047,8 +1039,8 @@ restack_win(session_t *ps, win *w, Window new_above) {
|
||||||
bool to_free;
|
bool to_free;
|
||||||
win* c = ps->list;
|
win* c = ps->list;
|
||||||
|
|
||||||
printf_dbgf("(%#010lx, %#010lx): "
|
log_trace("(%#010lx, %#010lx): "
|
||||||
"Window stack modified. Current stack:\n", w->id, new_above);
|
"Window stack modified. Current stack:", w->id, new_above);
|
||||||
|
|
||||||
for (; c; c = c->next) {
|
for (; c; c = c->next) {
|
||||||
window_name = "(Failed to get title)";
|
window_name = "(Failed to get title)";
|
||||||
|
@ -1099,9 +1091,9 @@ configure_win(session_t *ps, xcb_configure_notify_event_t *ce) {
|
||||||
// Reinitialize GLX on root change
|
// Reinitialize GLX on root change
|
||||||
if (ps->o.glx_reinit_on_root_change && ps->psglx) {
|
if (ps->o.glx_reinit_on_root_change && ps->psglx) {
|
||||||
if (!glx_reinit(ps, bkend_use_glx(ps)))
|
if (!glx_reinit(ps, bkend_use_glx(ps)))
|
||||||
printf_errf("(): Failed to reinitialize GLX, troubles ahead.");
|
log_error("Failed to reinitialize GLX, troubles ahead.");
|
||||||
if (BKEND_GLX == ps->o.backend && !glx_init_blur(ps))
|
if (BKEND_GLX == ps->o.backend && !glx_init_blur(ps))
|
||||||
printf_errf("(): Failed to initialize filters.");
|
log_error("Failed to initialize filters.");
|
||||||
}
|
}
|
||||||
|
|
||||||
// GLX root change callback
|
// GLX root change callback
|
||||||
|
@ -1196,15 +1188,11 @@ finish_destroy_win(session_t *ps, win **_w) {
|
||||||
assert(w->destroyed);
|
assert(w->destroyed);
|
||||||
win **prev = NULL, *i = NULL;
|
win **prev = NULL, *i = NULL;
|
||||||
|
|
||||||
#ifdef DEBUG_EVENTS
|
log_trace("(%#010lx): Starting...", w->id);
|
||||||
printf_dbgf("(%#010lx): Starting...\n", w->id);
|
|
||||||
#endif
|
|
||||||
|
|
||||||
for (prev = &ps->list; (i = *prev); prev = &i->next) {
|
for (prev = &ps->list; (i = *prev); prev = &i->next) {
|
||||||
if (w == i) {
|
if (w == i) {
|
||||||
#ifdef DEBUG_EVENTS
|
log_trace("(%#010lx \"%s\"): %p", w->id, w->name, w);
|
||||||
printf_dbgf("(%#010lx \"%s\"): %p\n", w->id, w->name, w);
|
|
||||||
#endif
|
|
||||||
|
|
||||||
finish_unmap_win(ps, _w);
|
finish_unmap_win(ps, _w);
|
||||||
*prev = w->next;
|
*prev = w->next;
|
||||||
|
@ -1232,9 +1220,7 @@ static void
|
||||||
destroy_win(session_t *ps, Window id) {
|
destroy_win(session_t *ps, Window id) {
|
||||||
win *w = find_win(ps, id);
|
win *w = find_win(ps, id);
|
||||||
|
|
||||||
#ifdef DEBUG_EVENTS
|
log_trace("(%#010lx \"%s\"): %p", id, (w ? w->name: NULL), w);
|
||||||
printf_dbgf("(%#010lx \"%s\"): %p\n", id, (w ? w->name: NULL), w);
|
|
||||||
#endif
|
|
||||||
|
|
||||||
if (w) {
|
if (w) {
|
||||||
unmap_win(ps, &w);
|
unmap_win(ps, &w);
|
||||||
|
@ -1506,7 +1492,7 @@ ev_focus_detail_name(xcb_focus_in_event_t* ev) {
|
||||||
|
|
||||||
static inline void attr_unused
|
static inline void attr_unused
|
||||||
ev_focus_report(xcb_focus_in_event_t *ev) {
|
ev_focus_report(xcb_focus_in_event_t *ev) {
|
||||||
printf(" { mode: %s, detail: %s }\n", ev_focus_mode_name(ev),
|
log_trace("{ mode: %s, detail: %s }\n", ev_focus_mode_name(ev),
|
||||||
ev_focus_detail_name(ev));
|
ev_focus_detail_name(ev));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1549,12 +1535,8 @@ ev_create_notify(session_t *ps, xcb_create_notify_event_t *ev) {
|
||||||
|
|
||||||
inline static void
|
inline static void
|
||||||
ev_configure_notify(session_t *ps, xcb_configure_notify_event_t *ev) {
|
ev_configure_notify(session_t *ps, xcb_configure_notify_event_t *ev) {
|
||||||
#ifdef DEBUG_EVENTS
|
log_trace("{ send_event: %d, above: %#010x, override_redirect: %d }",
|
||||||
printf(" { send_event: %d, "
|
|
||||||
" above: %#010x, "
|
|
||||||
" override_redirect: %d }\n",
|
|
||||||
ev->event, ev->above_sibling, ev->override_redirect);
|
ev->event, ev->above_sibling, ev->override_redirect);
|
||||||
#endif
|
|
||||||
configure_win(ps, ev);
|
configure_win(ps, ev);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1578,10 +1560,8 @@ ev_unmap_notify(session_t *ps, xcb_unmap_notify_event_t *ev) {
|
||||||
|
|
||||||
inline static void
|
inline static void
|
||||||
ev_reparent_notify(session_t *ps, xcb_reparent_notify_event_t *ev) {
|
ev_reparent_notify(session_t *ps, xcb_reparent_notify_event_t *ev) {
|
||||||
#ifdef DEBUG_EVENTS
|
log_trace("{ new_parent: %#010x, override_redirect: %d }",
|
||||||
printf_dbg(" { new_parent: %#010x, override_redirect: %d }\n",
|
|
||||||
ev->parent, ev->override_redirect);
|
ev->parent, ev->override_redirect);
|
||||||
#endif
|
|
||||||
|
|
||||||
if (ev->parent == ps->root) {
|
if (ev->parent == ps->root) {
|
||||||
add_win(ps, ev->window, 0);
|
add_win(ps, ev->window, 0);
|
||||||
|
@ -1679,7 +1659,7 @@ ev_property_notify(session_t *ps, xcb_property_notify_event_t *ev) {
|
||||||
name_len = xcb_get_atom_name_name_length(reply);
|
name_len = xcb_get_atom_name_name_length(reply);
|
||||||
}
|
}
|
||||||
|
|
||||||
printf_dbg(" { atom = %.*s }\n", name_len, name);
|
log_trace("{ atom = %.*s }", name_len, name);
|
||||||
free(reply);
|
free(reply);
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
@ -1857,8 +1837,7 @@ ev_screen_change_notify(session_t *ps,
|
||||||
if (ps->o.sw_opti && !ps->o.refresh_rate) {
|
if (ps->o.sw_opti && !ps->o.refresh_rate) {
|
||||||
update_refresh_rate(ps);
|
update_refresh_rate(ps);
|
||||||
if (!ps->refresh_rate) {
|
if (!ps->refresh_rate) {
|
||||||
fprintf(stderr, "ev_screen_change_notify(): Refresh rate detection failed."
|
log_warn("Refresh rate detection failed. swopti will be temporarily disabled");
|
||||||
"swopti will be temporarily disabled");
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1868,8 +1847,7 @@ ev_selection_clear(session_t *ps,
|
||||||
xcb_selection_clear_event_t attr_unused *ev) {
|
xcb_selection_clear_event_t attr_unused *ev) {
|
||||||
// The only selection we own is the _NET_WM_CM_Sn selection.
|
// The only selection we own is the _NET_WM_CM_Sn selection.
|
||||||
// If we lose that one, we should exit.
|
// If we lose that one, we should exit.
|
||||||
fprintf(stderr, "Another composite manager started and "
|
log_fatal("Another composite manager started and took the _NET_WM_CM_Sn selection.");
|
||||||
"took the _NET_WM_CM_Sn selection.\n");
|
|
||||||
exit(1);
|
exit(1);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1912,8 +1890,7 @@ ev_handle(session_t *ps, xcb_generic_event_t *ev) {
|
||||||
char *window_name = NULL;
|
char *window_name = NULL;
|
||||||
ev_window_name(ps, wid, &window_name);
|
ev_window_name(ps, wid, &window_name);
|
||||||
|
|
||||||
print_timestamp(ps);
|
log_trace("event %10.10s serial %#010x window %#010lx \"%s\"",
|
||||||
printf_errf(" event %10.10s serial %#010x window %#010lx \"%s\"\n",
|
|
||||||
ev_name(ps, ev), ev_serial(ev), wid, window_name);
|
ev_name(ps, ev), ev_serial(ev), wid, window_name);
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
@ -2371,7 +2348,7 @@ register_cm(session_t *ps) {
|
||||||
None, None);
|
None, None);
|
||||||
|
|
||||||
if (!ps->reg_win) {
|
if (!ps->reg_win) {
|
||||||
printf_errf("(): Failed to create window.");
|
log_fatal("Failed to create window.");
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -2398,8 +2375,9 @@ register_cm(session_t *ps) {
|
||||||
}
|
}
|
||||||
|
|
||||||
// Set COMPTON_VERSION
|
// Set COMPTON_VERSION
|
||||||
if (!wid_set_text_prop(ps, ps->reg_win, get_atom(ps, "COMPTON_VERSION"), COMPTON_VERSION)) {
|
if (!wid_set_text_prop(ps, ps->reg_win, get_atom(ps, "COMPTON_VERSION"),
|
||||||
printf_errf("(): Failed to set COMPTON_VERSION.");
|
COMPTON_VERSION)) {
|
||||||
|
log_error("Failed to set COMPTON_VERSION.");
|
||||||
}
|
}
|
||||||
|
|
||||||
// Acquire X Selection _NET_WM_CM_S?
|
// Acquire X Selection _NET_WM_CM_S?
|
||||||
|
@ -2425,7 +2403,7 @@ register_cm(session_t *ps) {
|
||||||
|
|
||||||
if (reply && reply->owner != XCB_NONE) {
|
if (reply && reply->owner != XCB_NONE) {
|
||||||
free(reply);
|
free(reply);
|
||||||
fprintf(stderr, "Another composite manager is already running\n");
|
log_fatal("Another composite manager is already running");
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
free(reply);
|
free(reply);
|
||||||
|
@ -2439,7 +2417,7 @@ register_cm(session_t *ps) {
|
||||||
* Reopen streams for logging.
|
* Reopen streams for logging.
|
||||||
*/
|
*/
|
||||||
static bool
|
static bool
|
||||||
ostream_reopen(session_t *ps, const char *path) {
|
stdout_reopen(session_t *ps, const char *path) {
|
||||||
if (!path)
|
if (!path)
|
||||||
path = ps->o.logpath;
|
path = ps->o.logpath;
|
||||||
if (!path)
|
if (!path)
|
||||||
|
@ -2447,8 +2425,10 @@ ostream_reopen(session_t *ps, const char *path) {
|
||||||
|
|
||||||
bool success = freopen(path, "a", stdout);
|
bool success = freopen(path, "a", stdout);
|
||||||
success = freopen(path, "a", stderr) && success;
|
success = freopen(path, "a", stderr) && success;
|
||||||
if (!success)
|
if (!success) {
|
||||||
printf_errfq(1, "(%s): freopen() failed.", path);
|
log_fatal("(%s): freopen() failed.", path);
|
||||||
|
exit(1);
|
||||||
|
}
|
||||||
|
|
||||||
return success;
|
return success;
|
||||||
}
|
}
|
||||||
|
@ -2464,7 +2444,7 @@ fork_after(session_t *ps) {
|
||||||
#ifdef CONFIG_OPENGL
|
#ifdef CONFIG_OPENGL
|
||||||
// GLX context must be released and reattached on fork
|
// GLX context must be released and reattached on fork
|
||||||
if (glx_has_context(ps) && !glXMakeCurrent(ps->dpy, None, NULL)) {
|
if (glx_has_context(ps) && !glXMakeCurrent(ps->dpy, None, NULL)) {
|
||||||
printf_errf("(): Failed to detach GLx context.");
|
log_fatal("Failed to detach GLX context.");
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
@ -2472,7 +2452,7 @@ fork_after(session_t *ps) {
|
||||||
int pid = fork();
|
int pid = fork();
|
||||||
|
|
||||||
if (-1 == pid) {
|
if (-1 == pid) {
|
||||||
printf_errf("(): fork() failed.");
|
log_fatal("fork() failed.");
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -2483,19 +2463,17 @@ fork_after(session_t *ps) {
|
||||||
#ifdef CONFIG_OPENGL
|
#ifdef CONFIG_OPENGL
|
||||||
if (glx_has_context(ps)
|
if (glx_has_context(ps)
|
||||||
&& !glXMakeCurrent(ps->dpy, get_tgt_window(ps), ps->psglx->context)) {
|
&& !glXMakeCurrent(ps->dpy, get_tgt_window(ps), ps->psglx->context)) {
|
||||||
printf_errf("(): Failed to make GLX context current.");
|
log_fatal("Failed to make GLX context current.");
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
// Mainly to suppress the _FORTIFY_SOURCE warning
|
if (!freopen("/dev/null", "r", stdin)) {
|
||||||
bool success = freopen("/dev/null", "r", stdin);
|
log_fatal("freopen() failed.");
|
||||||
if (!success) {
|
|
||||||
printf_errf("(): freopen() failed.");
|
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
return success;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -2508,7 +2486,7 @@ write_pid(session_t *ps) {
|
||||||
|
|
||||||
FILE *f = fopen(ps->o.write_pid_path, "w");
|
FILE *f = fopen(ps->o.write_pid_path, "w");
|
||||||
if (unlikely(!f)) {
|
if (unlikely(!f)) {
|
||||||
printf_errf("(): Failed to write PID to \"%s\".", ps->o.write_pid_path);
|
log_error("Failed to write PID to \"%s\".", ps->o.write_pid_path);
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -2646,7 +2624,7 @@ get_cfg(session_t *ps, int argc, char *const *argv, bool first_pass) {
|
||||||
|
|
||||||
// Check for abundant positional arguments
|
// Check for abundant positional arguments
|
||||||
if (optind < argc)
|
if (optind < argc)
|
||||||
printf_errfq(1, "(): compton doesn't accept positional arguments.");
|
log_fatal("compton doesn't accept positional arguments.");
|
||||||
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
@ -2731,14 +2709,14 @@ get_cfg(session_t *ps, int argc, char *const *argv, bool first_pass) {
|
||||||
ps->o.frame_opacity = atof(optarg);
|
ps->o.frame_opacity = atof(optarg);
|
||||||
break;
|
break;
|
||||||
case 'z':
|
case 'z':
|
||||||
printf_errf("(): clear-shadow is removed, shadows are automatically cleared now.\n"
|
log_warn("clear-shadow is removed, shadows are automatically cleared now. "
|
||||||
"If you want to prevent shadow from been cleared under certain types of windows,\n"
|
"If you want to prevent shadow from been cleared under certain types of windows, "
|
||||||
"you can use the \"full-shadow\" per window type option.");
|
"you can use the \"full-shadow\" per window type option.");
|
||||||
break;
|
break;
|
||||||
case 'n':
|
case 'n':
|
||||||
case 'a':
|
case 'a':
|
||||||
case 's':
|
case 's':
|
||||||
printf_errfq(1, "(): -n, -a, and -s have been removed.");
|
log_error("-n, -a, and -s have been removed.");
|
||||||
break;
|
break;
|
||||||
P_CASEBOOL('b', fork_after_register);
|
P_CASEBOOL('b', fork_after_register);
|
||||||
// Long options
|
// Long options
|
||||||
|
@ -2780,14 +2758,14 @@ get_cfg(session_t *ps, int argc, char *const *argv, bool first_pass) {
|
||||||
break;
|
break;
|
||||||
case 271:
|
case 271:
|
||||||
// --alpha-step
|
// --alpha-step
|
||||||
printf_errf("(): --alpha-step has been removed, compton now tries to make use"
|
log_warn("--alpha-step has been removed, compton now tries to make use"
|
||||||
" of all alpha values");
|
" of all alpha values");
|
||||||
break;
|
break;
|
||||||
case 272:
|
case 272:
|
||||||
printf_errf("(): use of --dbe is deprecated");
|
log_warn("use of --dbe is deprecated");
|
||||||
break;
|
break;
|
||||||
case 273:
|
case 273:
|
||||||
printf_errf("(): --paint-on-overlay has been removed, and is enabled when "
|
log_warn("--paint-on-overlay has been removed, and is enabled when "
|
||||||
"possible");
|
"possible");
|
||||||
break;
|
break;
|
||||||
P_CASEBOOL(274, sw_opti);
|
P_CASEBOOL(274, sw_opti);
|
||||||
|
@ -2825,7 +2803,7 @@ get_cfg(session_t *ps, int argc, char *const *argv, bool first_pass) {
|
||||||
break;
|
break;
|
||||||
P_CASEBOOL(291, glx_no_stencil);
|
P_CASEBOOL(291, glx_no_stencil);
|
||||||
case 292:
|
case 292:
|
||||||
printf_errf("(): --glx-copy-from-front %s", deprecation_message);
|
log_warn("--glx-copy-from-front %s", deprecation_message);
|
||||||
break;
|
break;
|
||||||
P_CASELONG(293, benchmark);
|
P_CASELONG(293, benchmark);
|
||||||
case 294:
|
case 294:
|
||||||
|
@ -2833,7 +2811,7 @@ get_cfg(session_t *ps, int argc, char *const *argv, bool first_pass) {
|
||||||
ps->o.benchmark_wid = strtol(optarg, NULL, 0);
|
ps->o.benchmark_wid = strtol(optarg, NULL, 0);
|
||||||
break;
|
break;
|
||||||
case 295:
|
case 295:
|
||||||
printf_errf("(): --glx-use-copysubbuffermesa %s", deprecation_message);
|
log_warn("--glx-use-copysubbuffermesa %s", deprecation_message);
|
||||||
break;
|
break;
|
||||||
case 296:
|
case 296:
|
||||||
// --blur-background-exclude
|
// --blur-background-exclude
|
||||||
|
@ -2868,7 +2846,7 @@ get_cfg(session_t *ps, int argc, char *const *argv, bool first_pass) {
|
||||||
case 305:
|
case 305:
|
||||||
// --shadow-exclude-reg
|
// --shadow-exclude-reg
|
||||||
ps->o.shadow_exclude_reg_str = strdup(optarg);
|
ps->o.shadow_exclude_reg_str = strdup(optarg);
|
||||||
printf_err("--shadow-exclude-reg is deprecated.\n"
|
log_warn("--shadow-exclude-reg is deprecated. "
|
||||||
"You are likely better off using --shadow-exclude anyway");
|
"You are likely better off using --shadow-exclude anyway");
|
||||||
break;
|
break;
|
||||||
case 306:
|
case 306:
|
||||||
|
@ -2892,9 +2870,9 @@ get_cfg(session_t *ps, int argc, char *const *argv, bool first_pass) {
|
||||||
P_CASEBOOL(316, force_win_blend);
|
P_CASEBOOL(316, force_win_blend);
|
||||||
case 317:
|
case 317:
|
||||||
ps->o.glx_fshader_win_str = strdup(optarg);
|
ps->o.glx_fshader_win_str = strdup(optarg);
|
||||||
printf_errf("(): --glx-fshader-win is being deprecated, and might be\n"
|
log_warn("--glx-fshader-win is being deprecated, and might be"
|
||||||
" removed in the future. If you really need this feature, please report\n"
|
" removed in the future. If you really need this feature, please report"
|
||||||
"an issue to let us know\n");
|
" an issue to let us know");
|
||||||
break;
|
break;
|
||||||
case 321: {
|
case 321: {
|
||||||
enum log_level tmp_level = string_to_log_level(optarg);
|
enum log_level tmp_level = string_to_log_level(optarg);
|
||||||
|
@ -2923,8 +2901,9 @@ get_cfg(session_t *ps, int argc, char *const *argv, bool first_pass) {
|
||||||
setlocale(LC_NUMERIC, lc_numeric_old);
|
setlocale(LC_NUMERIC, lc_numeric_old);
|
||||||
free(lc_numeric_old);
|
free(lc_numeric_old);
|
||||||
|
|
||||||
if (ps->o.monitor_repaint && ps->o.backend != BKEND_XRENDER)
|
if (ps->o.monitor_repaint && ps->o.backend != BKEND_XRENDER) {
|
||||||
printf_errf("(): --monitor-repaint has no effect when backend is not xrender");
|
log_warn("--monitor-repaint has no effect when backend is not xrender");
|
||||||
|
}
|
||||||
|
|
||||||
// Range checking and option assignments
|
// Range checking and option assignments
|
||||||
ps->o.fade_delta = max_i(ps->o.fade_delta, 1);
|
ps->o.fade_delta = max_i(ps->o.fade_delta, 1);
|
||||||
|
@ -2992,7 +2971,7 @@ get_cfg(session_t *ps, int argc, char *const *argv, bool first_pass) {
|
||||||
rebuild_shadow_exclude_reg(ps);
|
rebuild_shadow_exclude_reg(ps);
|
||||||
|
|
||||||
if (ps->o.resize_damage < 0)
|
if (ps->o.resize_damage < 0)
|
||||||
printf_errf("(): Negative --resize-damage does not work correctly.");
|
log_warn("Negative --resize-damage will not work correctly.");
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -3137,13 +3116,13 @@ init_overlay(session_t *ps) {
|
||||||
e = XCB_SYNCED_VOID(xcb_shape_mask, ps->c, XCB_SHAPE_SO_SET, XCB_SHAPE_SK_BOUNDING,
|
e = XCB_SYNCED_VOID(xcb_shape_mask, ps->c, XCB_SHAPE_SO_SET, XCB_SHAPE_SK_BOUNDING,
|
||||||
ps->overlay, 0, 0, 0);
|
ps->overlay, 0, 0, 0);
|
||||||
if (e) {
|
if (e) {
|
||||||
printf_errf("(): failed to set the bounding shape of overlay, giving up.");
|
log_fatal("Failed to set the bounding shape of overlay, giving up.");
|
||||||
exit(1);
|
exit(1);
|
||||||
}
|
}
|
||||||
e = XCB_SYNCED_VOID(xcb_shape_rectangles, ps->c, XCB_SHAPE_SO_SET, XCB_SHAPE_SK_INPUT,
|
e = XCB_SYNCED_VOID(xcb_shape_rectangles, ps->c, XCB_SHAPE_SO_SET, XCB_SHAPE_SK_INPUT,
|
||||||
XCB_CLIP_ORDERING_UNSORTED, ps->overlay, 0, 0, 0, NULL);
|
XCB_CLIP_ORDERING_UNSORTED, ps->overlay, 0, 0, 0, NULL);
|
||||||
if (e) {
|
if (e) {
|
||||||
printf_errf("(): failed to set the input shape of overlay, giving up.");
|
log_fatal("Failed to set the input shape of overlay, giving up.");
|
||||||
exit(1);
|
exit(1);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -3159,13 +3138,11 @@ init_overlay(session_t *ps) {
|
||||||
// the window isn't created yet.
|
// the window isn't created yet.
|
||||||
// xcb_unmap_window(c, ps->overlay);
|
// xcb_unmap_window(c, ps->overlay);
|
||||||
// XFlush(ps->dpy);
|
// XFlush(ps->dpy);
|
||||||
|
} else {
|
||||||
|
log_error("Cannot get X Composite overlay window. Falling "
|
||||||
|
"back to painting on root window.");
|
||||||
}
|
}
|
||||||
else
|
log_debug("overlay = %#010lx", ps->overlay);
|
||||||
fprintf(stderr, "Cannot get X Composite overlay window. Falling "
|
|
||||||
"back to painting on root window.\n");
|
|
||||||
#ifdef DEBUG_REDIR
|
|
||||||
printf_dbgf("(): overlay = %#010lx\n", ps->overlay);
|
|
||||||
#endif
|
|
||||||
|
|
||||||
return ps->overlay;
|
return ps->overlay;
|
||||||
}
|
}
|
||||||
|
@ -3176,10 +3153,7 @@ init_overlay(session_t *ps) {
|
||||||
static void
|
static void
|
||||||
redir_start(session_t *ps) {
|
redir_start(session_t *ps) {
|
||||||
if (!ps->redirected) {
|
if (!ps->redirected) {
|
||||||
#ifdef DEBUG_REDIR
|
log_trace("Screen redirected.");
|
||||||
print_timestamp(ps);
|
|
||||||
printf_dbgf("(): Screen redirected.\n");
|
|
||||||
#endif
|
|
||||||
|
|
||||||
// Map overlay window. Done firstly according to this:
|
// Map overlay window. Done firstly according to this:
|
||||||
// https://bugzilla.gnome.org/show_bug.cgi?id=597014
|
// https://bugzilla.gnome.org/show_bug.cgi?id=597014
|
||||||
|
@ -3213,10 +3187,7 @@ redir_start(session_t *ps) {
|
||||||
static void
|
static void
|
||||||
redir_stop(session_t *ps) {
|
redir_stop(session_t *ps) {
|
||||||
if (ps->redirected) {
|
if (ps->redirected) {
|
||||||
#ifdef DEBUG_REDIR
|
log_trace("Screen unredirected.");
|
||||||
print_timestamp(ps);
|
|
||||||
printf_dbgf("(): Screen unredirected.\n");
|
|
||||||
#endif
|
|
||||||
// Destroy all Pictures as they expire once windows are unredirected
|
// Destroy all Pictures as they expire once windows are unredirected
|
||||||
// If we don't destroy them here, looks like the resources are just
|
// If we don't destroy them here, looks like the resources are just
|
||||||
// kept inaccessible somehow
|
// kept inaccessible somehow
|
||||||
|
@ -3251,7 +3222,8 @@ handle_queued_x_events(EV_P_ ev_prepare *w, int revents) {
|
||||||
|
|
||||||
int err = xcb_connection_has_error(ps->c);
|
int err = xcb_connection_has_error(ps->c);
|
||||||
if (err) {
|
if (err) {
|
||||||
printf_errfq(1, "(): X11 server connection broke (error %d)", err);
|
log_fatal("X11 server connection broke (error %d)", err);
|
||||||
|
exit(1);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -3277,7 +3249,7 @@ _draw_callback(EV_P_ session_t *ps, int revents) {
|
||||||
if (ps->o.benchmark_wid) {
|
if (ps->o.benchmark_wid) {
|
||||||
win *wi = find_win(ps, ps->o.benchmark_wid);
|
win *wi = find_win(ps, ps->o.benchmark_wid);
|
||||||
if (!wi) {
|
if (!wi) {
|
||||||
printf_errf("(): Couldn't find specified benchmark window.");
|
log_fatal("Couldn't find specified benchmark window.");
|
||||||
exit(1);
|
exit(1);
|
||||||
}
|
}
|
||||||
add_damage_from_win(ps, wi);
|
add_damage_from_win(ps, wi);
|
||||||
|
@ -3605,7 +3577,8 @@ session_init(session_t *ps_old, int argc, char **argv) {
|
||||||
if (!ps->dpy) {
|
if (!ps->dpy) {
|
||||||
ps->dpy = XOpenDisplay(ps->o.display);
|
ps->dpy = XOpenDisplay(ps->o.display);
|
||||||
if (!ps->dpy) {
|
if (!ps->dpy) {
|
||||||
printf_errfq(1, "(): Can't open display.");
|
log_fatal("Can't open display.");
|
||||||
|
exit(1);
|
||||||
}
|
}
|
||||||
XSetEventQueueOwner(ps->dpy, XCBOwnsEventQueue);
|
XSetEventQueueOwner(ps->dpy, XCBOwnsEventQueue);
|
||||||
}
|
}
|
||||||
|
@ -3646,7 +3619,7 @@ session_init(session_t *ps_old, int argc, char **argv) {
|
||||||
|
|
||||||
ext_info = xcb_get_extension_data(ps->c, &xcb_render_id);
|
ext_info = xcb_get_extension_data(ps->c, &xcb_render_id);
|
||||||
if (!ext_info || !ext_info->present) {
|
if (!ext_info || !ext_info->present) {
|
||||||
fprintf(stderr, "No render extension\n");
|
log_fatal("No render extension");
|
||||||
exit(1);
|
exit(1);
|
||||||
}
|
}
|
||||||
ps->render_event = ext_info->first_event;
|
ps->render_event = ext_info->first_event;
|
||||||
|
@ -3654,7 +3627,7 @@ session_init(session_t *ps_old, int argc, char **argv) {
|
||||||
|
|
||||||
ext_info = xcb_get_extension_data(ps->c, &xcb_composite_id);
|
ext_info = xcb_get_extension_data(ps->c, &xcb_composite_id);
|
||||||
if (!ext_info || !ext_info->present) {
|
if (!ext_info || !ext_info->present) {
|
||||||
fprintf(stderr, "No composite extension\n");
|
log_fatal("No composite extension");
|
||||||
exit(1);
|
exit(1);
|
||||||
}
|
}
|
||||||
ps->composite_opcode = ext_info->major_opcode;
|
ps->composite_opcode = ext_info->major_opcode;
|
||||||
|
@ -3676,7 +3649,7 @@ session_init(session_t *ps_old, int argc, char **argv) {
|
||||||
|
|
||||||
ext_info = xcb_get_extension_data(ps->c, &xcb_damage_id);
|
ext_info = xcb_get_extension_data(ps->c, &xcb_damage_id);
|
||||||
if (!ext_info || !ext_info->present) {
|
if (!ext_info || !ext_info->present) {
|
||||||
fprintf(stderr, "No damage extension\n");
|
log_fatal("No damage extension");
|
||||||
exit(1);
|
exit(1);
|
||||||
}
|
}
|
||||||
ps->damage_event = ext_info->first_event;
|
ps->damage_event = ext_info->first_event;
|
||||||
|
@ -3686,7 +3659,7 @@ session_init(session_t *ps_old, int argc, char **argv) {
|
||||||
|
|
||||||
ext_info = xcb_get_extension_data(ps->c, &xcb_xfixes_id);
|
ext_info = xcb_get_extension_data(ps->c, &xcb_xfixes_id);
|
||||||
if (!ext_info || !ext_info->present) {
|
if (!ext_info || !ext_info->present) {
|
||||||
fprintf(stderr, "No XFixes extension\n");
|
log_fatal("No XFixes extension");
|
||||||
exit(1);
|
exit(1);
|
||||||
}
|
}
|
||||||
ps->xfixes_event = ext_info->first_event;
|
ps->xfixes_event = ext_info->first_event;
|
||||||
|
@ -3747,16 +3720,17 @@ session_init(session_t *ps_old, int argc, char **argv) {
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!ps->xsync_exists && ps->o.xrender_sync_fence) {
|
if (!ps->xsync_exists && ps->o.xrender_sync_fence) {
|
||||||
printf_errf("(): X Sync extension not found. No X Sync fence sync is "
|
log_fatal("X Sync extension not found. No X Sync fence sync is "
|
||||||
"possible.");
|
"possible. (xrender-sync-fence can't be enabled)");
|
||||||
exit(1);
|
exit(1);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Query X RandR
|
// Query X RandR
|
||||||
if ((ps->o.sw_opti && !ps->o.refresh_rate) || ps->o.xinerama_shadow_crop) {
|
if ((ps->o.sw_opti && !ps->o.refresh_rate) || ps->o.xinerama_shadow_crop) {
|
||||||
if (!ps->randr_exists) {
|
if (!ps->randr_exists) {
|
||||||
printf_errf("(): No XRandR extension, automatic screen change "
|
log_fatal("No XRandR extension. sw-opti, refresh-rate or xinerama-shadow-crop "
|
||||||
"detection impossible.");
|
"cannot be enabled.");
|
||||||
|
exit(1);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -3766,7 +3740,8 @@ session_init(session_t *ps_old, int argc, char **argv) {
|
||||||
ext_info = xcb_get_extension_data(ps->c, &xcb_xinerama_id);
|
ext_info = xcb_get_extension_data(ps->c, &xcb_xinerama_id);
|
||||||
ps->xinerama_exists = ext_info && ext_info->present;
|
ps->xinerama_exists = ext_info && ext_info->present;
|
||||||
#else
|
#else
|
||||||
printf_errf("(): Xinerama support not compiled in.");
|
log_fatal("Xinerama support not compiled in. xinerama-shadow-crop cannot be enabled");
|
||||||
|
exit(1);
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -3893,7 +3868,8 @@ session_init(session_t *ps_old, int argc, char **argv) {
|
||||||
ps->o.dbus = false;
|
ps->o.dbus = false;
|
||||||
}
|
}
|
||||||
#else
|
#else
|
||||||
printf_errfq(1, "(): DBus support not compiled in!");
|
log_fatal("DBus support not compiled in!");
|
||||||
|
exit(1);
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -3907,7 +3883,7 @@ session_init(session_t *ps_old, int argc, char **argv) {
|
||||||
|
|
||||||
// Redirect output stream
|
// Redirect output stream
|
||||||
if (ps->o.fork_after_register || ps->o.logpath)
|
if (ps->o.fork_after_register || ps->o.logpath)
|
||||||
ostream_reopen(ps, NULL);
|
stdout_reopen(ps, NULL);
|
||||||
|
|
||||||
write_pid(ps);
|
write_pid(ps);
|
||||||
|
|
||||||
|
@ -4133,7 +4109,7 @@ main(int argc, char **argv) {
|
||||||
while (!quit) {
|
while (!quit) {
|
||||||
ps_g = session_init(ps_old, argc, argv);
|
ps_g = session_init(ps_old, argc, argv);
|
||||||
if (!ps_g) {
|
if (!ps_g) {
|
||||||
printf_errf("(): Failed to create new session.");
|
log_fatal("Failed to create new compton session.");
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
session_run(ps_g);
|
session_run(ps_g);
|
||||||
|
|
|
@ -96,13 +96,13 @@ static inline bool
|
||||||
glx_hasglxext(session_t *ps, const char *ext) {
|
glx_hasglxext(session_t *ps, const char *ext) {
|
||||||
const char *glx_exts = glXQueryExtensionsString(ps->dpy, ps->scr);
|
const char *glx_exts = glXQueryExtensionsString(ps->dpy, ps->scr);
|
||||||
if (!glx_exts) {
|
if (!glx_exts) {
|
||||||
printf_errf("(): Failed get GLX extension list.");
|
log_error("Failed get GLX extension list.");
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool found = wd_is_in_str(glx_exts, ext);
|
bool found = wd_is_in_str(glx_exts, ext);
|
||||||
if (!found)
|
if (!found)
|
||||||
printf_errf("(): Missing GLX extension %s.", ext);
|
log_info("Missing GLX extension %s.", ext);
|
||||||
|
|
||||||
return found;
|
return found;
|
||||||
}
|
}
|
||||||
|
|
|
@ -4,7 +4,9 @@
|
||||||
#include <xcb/xcb.h>
|
#include <xcb/xcb.h>
|
||||||
#include <pixman.h>
|
#include <pixman.h>
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
|
|
||||||
#include "utils.h"
|
#include "utils.h"
|
||||||
|
#include "log.h"
|
||||||
|
|
||||||
typedef struct pixman_region32 pixman_region32_t;
|
typedef struct pixman_region32 pixman_region32_t;
|
||||||
typedef struct pixman_box32 pixman_box32_t;
|
typedef struct pixman_box32 pixman_box32_t;
|
||||||
|
@ -23,9 +25,9 @@ static inline void
|
||||||
dump_region(const region_t *x) {
|
dump_region(const region_t *x) {
|
||||||
int nrects;
|
int nrects;
|
||||||
const rect_t *rects = pixman_region32_rectangles((region_t *)x, &nrects);
|
const rect_t *rects = pixman_region32_rectangles((region_t *)x, &nrects);
|
||||||
fprintf(stderr, "nrects: %d\n", nrects);
|
log_trace("nrects: %d", nrects);
|
||||||
for (int i = 0; i < nrects; i++)
|
for (int i = 0; i < nrects; i++)
|
||||||
fprintf(stderr, "(%d, %d) - (%d, %d)\n", rects[i].x1, rects[i].y1, rects[i].x2, rects[i].y2);
|
log_trace("(%d, %d) - (%d, %d)", rects[i].x1, rects[i].y1, rects[i].x2, rects[i].y2);
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Convert one xcb rectangle to our rectangle type
|
/// Convert one xcb rectangle to our rectangle type
|
||||||
|
|
50
src/win.c
50
src/win.c
|
@ -172,9 +172,7 @@ int win_get_name(session_t *ps, win *w) {
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
if (!(wid_get_text_prop(ps, w->client_win, ps->atom_name_ewmh, &strlst, &nstr))) {
|
if (!(wid_get_text_prop(ps, w->client_win, ps->atom_name_ewmh, &strlst, &nstr))) {
|
||||||
#ifdef DEBUG_WINDATA
|
log_trace("(%#010lx): _NET_WM_NAME unset, falling back to WM_NAME.", w->client_win);
|
||||||
printf_dbgf("(%#010lx): _NET_WM_NAME unset, falling back to WM_NAME.\n", wid);
|
|
||||||
#endif
|
|
||||||
|
|
||||||
if (!(XGetWMName(ps->dpy, w->client_win, &text_prop) && text_prop.value)) {
|
if (!(XGetWMName(ps->dpy, w->client_win, &text_prop) && text_prop.value)) {
|
||||||
return -1;
|
return -1;
|
||||||
|
@ -199,10 +197,8 @@ int win_get_name(session_t *ps, win *w) {
|
||||||
|
|
||||||
XFreeStringList(strlst);
|
XFreeStringList(strlst);
|
||||||
|
|
||||||
#ifdef DEBUG_WINDATA
|
log_trace("(%#010lx): client = %#010lx, name = \"%s\", "
|
||||||
printf_dbgf("(%#010lx): client = %#010lx, name = \"%s\", "
|
"ret = %d", w->id, w->client_win, w->name, ret);
|
||||||
"ret = %d\n", w->id, w->client_win, w->name, ret);
|
|
||||||
#endif
|
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -222,10 +218,8 @@ int win_get_role(session_t *ps, win *w) {
|
||||||
|
|
||||||
XFreeStringList(strlst);
|
XFreeStringList(strlst);
|
||||||
|
|
||||||
#ifdef DEBUG_WINDATA
|
log_trace("(%#010lx): client = %#010lx, role = \"%s\", "
|
||||||
printf_dbgf("(%#010lx): client = %#010lx, role = \"%s\", "
|
"ret = %d", w->id, w->client_win, w->role, ret);
|
||||||
"ret = %d\n", w->id, w->client_win, w->role, ret);
|
|
||||||
#endif
|
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -703,19 +697,15 @@ void win_recheck_client(session_t *ps, win *w) {
|
||||||
// Always recursively look for a window with WM_STATE, as Fluxbox
|
// Always recursively look for a window with WM_STATE, as Fluxbox
|
||||||
// sets override-redirect flags on all frame windows.
|
// sets override-redirect flags on all frame windows.
|
||||||
Window cw = find_client_win(ps, w->id);
|
Window cw = find_client_win(ps, w->id);
|
||||||
#ifdef DEBUG_CLIENTWIN
|
|
||||||
if (cw)
|
if (cw)
|
||||||
printf_dbgf("(%#010lx): client %#010lx\n", w->id, cw);
|
log_trace("(%#010lx): client %#010lx", w->id, cw);
|
||||||
#endif
|
|
||||||
// Set a window's client window to itself if we couldn't find a
|
// Set a window's client window to itself if we couldn't find a
|
||||||
// client window
|
// client window
|
||||||
if (!cw) {
|
if (!cw) {
|
||||||
cw = w->id;
|
cw = w->id;
|
||||||
w->wmwin = !w->a.override_redirect;
|
w->wmwin = !w->a.override_redirect;
|
||||||
#ifdef DEBUG_CLIENTWIN
|
log_trace("(%#010lx): client self (%s)", w->id,
|
||||||
printf_dbgf("(%#010lx): client self (%s)\n", w->id,
|
|
||||||
(w->wmwin ? "wmwin" : "override-redirected"));
|
(w->wmwin ? "wmwin" : "override-redirected"));
|
||||||
#endif
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// Unmark the old one
|
// Unmark the old one
|
||||||
|
@ -817,14 +807,7 @@ bool add_win(session_t *ps, Window id, Window prev) {
|
||||||
// Allocate and initialize the new win structure
|
// Allocate and initialize the new win structure
|
||||||
auto new = cmalloc(win);
|
auto new = cmalloc(win);
|
||||||
|
|
||||||
#ifdef DEBUG_EVENTS
|
log_trace("(%#010lx): %p", id, new);
|
||||||
printf_dbgf("(%#010lx): %p\n", id, new);
|
|
||||||
#endif
|
|
||||||
|
|
||||||
if (!new) {
|
|
||||||
printf_errf("(%#010lx): Failed to allocate memory for the new window.", id);
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
*new = win_def;
|
*new = win_def;
|
||||||
pixman_region32_init(&new->bounding_shape);
|
pixman_region32_init(&new->bounding_shape);
|
||||||
|
@ -988,9 +971,8 @@ void win_update_leader(session_t *ps, win *w) {
|
||||||
|
|
||||||
win_set_leader(ps, w, leader);
|
win_set_leader(ps, w, leader);
|
||||||
|
|
||||||
#ifdef DEBUG_LEADER
|
log_trace("(%#010lx): client %#010lx, leader %#010lx, cache %#010lx",
|
||||||
printf_dbgf("(%#010lx): client %#010lx, leader %#010lx, cache %#010lx\n", w->id, w->client_win, w->leader, win_get_leader(ps, w));
|
w->id, w->client_win, w->leader, win_get_leader(ps, w));
|
||||||
#endif
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -1049,11 +1031,9 @@ bool win_get_class(session_t *ps, win *w) {
|
||||||
|
|
||||||
XFreeStringList(strlst);
|
XFreeStringList(strlst);
|
||||||
|
|
||||||
#ifdef DEBUG_WINDATA
|
log_trace("(%#010lx): client = %#010lx, "
|
||||||
printf_dbgf("(%#010lx): client = %#010lx, "
|
"instance = \"%s\", general = \"%s\"",
|
||||||
"instance = \"%s\", general = \"%s\"\n",
|
|
||||||
w->id, w->client_win, w->class_instance, w->class_general);
|
w->id, w->client_win, w->class_instance, w->class_general);
|
||||||
#endif
|
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
@ -1201,7 +1181,7 @@ void win_update_bounding_shape(session_t *ps, win *w) {
|
||||||
// Window shape changed, we should free old wpaint and shadow pict
|
// Window shape changed, we should free old wpaint and shadow pict
|
||||||
free_paint(ps, &w->paint);
|
free_paint(ps, &w->paint);
|
||||||
free_paint(ps, &w->shadow_paint);
|
free_paint(ps, &w->shadow_paint);
|
||||||
//printf_errf("(): free out dated pict");
|
//log_trace("free out dated pict");
|
||||||
|
|
||||||
win_on_factor_change(ps, w);
|
win_on_factor_change(ps, w);
|
||||||
}
|
}
|
||||||
|
@ -1252,11 +1232,9 @@ win_update_frame_extents(session_t *ps, win *w, Window client) {
|
||||||
w->reg_ignore_valid = false;
|
w->reg_ignore_valid = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifdef DEBUG_FRAME
|
log_trace("(%#010lx): %d, %d, %d, %d", w->id,
|
||||||
printf_dbgf("(%#010lx): %d, %d, %d, %d\n", w->id,
|
|
||||||
w->frame_extents.left, w->frame_extents.right,
|
w->frame_extents.left, w->frame_extents.right,
|
||||||
w->frame_extents.top, w->frame_extents.bottom);
|
w->frame_extents.top, w->frame_extents.bottom);
|
||||||
#endif
|
|
||||||
|
|
||||||
free_winprop(&prop);
|
free_winprop(&prop);
|
||||||
}
|
}
|
||||||
|
|
20
src/x.c
20
src/x.c
|
@ -196,7 +196,7 @@ x_create_picture(session_t *ps, int wid, int hei,
|
||||||
pictfmt = x_get_pictform_for_visual(ps, ps->vis);
|
pictfmt = x_get_pictform_for_visual(ps, ps->vis);
|
||||||
|
|
||||||
if (!pictfmt) {
|
if (!pictfmt) {
|
||||||
printf_errf("(): default visual is invalid");
|
log_fatal("Default visual is invalid");
|
||||||
abort();
|
abort();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -219,7 +219,7 @@ bool x_fetch_region(session_t *ps, xcb_xfixes_region_t r, pixman_region32_t *res
|
||||||
xcb_xfixes_fetch_region_reply_t *xr = xcb_xfixes_fetch_region_reply(ps->c,
|
xcb_xfixes_fetch_region_reply_t *xr = xcb_xfixes_fetch_region_reply(ps->c,
|
||||||
xcb_xfixes_fetch_region(ps->c, r), &e);
|
xcb_xfixes_fetch_region(ps->c, r), &e);
|
||||||
if (!xr) {
|
if (!xr) {
|
||||||
printf_errf("(): failed to fetch rectangles");
|
log_error("Failed to fetch rectangles");
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -257,7 +257,7 @@ void x_set_picture_clip_region(session_t *ps, xcb_render_picture_t pict,
|
||||||
xcb_request_check(ps->c, xcb_render_set_picture_clip_rectangles_checked(ps->c, pict,
|
xcb_request_check(ps->c, xcb_render_set_picture_clip_rectangles_checked(ps->c, pict,
|
||||||
clip_x_origin, clip_y_origin, nrects, xrects));
|
clip_x_origin, clip_y_origin, nrects, xrects));
|
||||||
if (e)
|
if (e)
|
||||||
printf_errf("(): failed to set clip region");
|
log_error("Failed to set clip region");
|
||||||
free(e);
|
free(e);
|
||||||
free(xrects);
|
free(xrects);
|
||||||
return;
|
return;
|
||||||
|
@ -277,8 +277,8 @@ x_print_error(unsigned long serial, uint8_t major, uint8_t minor, uint8_t error_
|
||||||
|
|
||||||
if (major == ps->composite_opcode
|
if (major == ps->composite_opcode
|
||||||
&& minor == XCB_COMPOSITE_REDIRECT_SUBWINDOWS) {
|
&& minor == XCB_COMPOSITE_REDIRECT_SUBWINDOWS) {
|
||||||
fprintf(stderr, "Another composite manager is already running "
|
log_fatal("Another composite manager is already running "
|
||||||
"(and does not handle _NET_WM_CM_Sn correctly)\n");
|
"(and does not handle _NET_WM_CM_Sn correctly)");
|
||||||
exit(1);
|
exit(1);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -349,16 +349,12 @@ x_print_error(unsigned long serial, uint8_t major, uint8_t minor, uint8_t error_
|
||||||
|
|
||||||
#undef CASESTRRET2
|
#undef CASESTRRET2
|
||||||
|
|
||||||
print_timestamp(ps);
|
|
||||||
{
|
{
|
||||||
char buf[BUF_LEN] = "";
|
char buf[BUF_LEN] = "";
|
||||||
XGetErrorText(ps->dpy, error_code, buf, BUF_LEN);
|
XGetErrorText(ps->dpy, error_code, buf, BUF_LEN);
|
||||||
printf("error %4d %-12s request %4d minor %4d serial %6lu: \"%s\"\n",
|
log_warn("X error %d %s request %d minor %d serial %lu: \"%s\"",
|
||||||
error_code, name, major,
|
error_code, name, major, minor, serial, buf);
|
||||||
minor, serial, buf);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// print_backtrace();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -372,7 +368,7 @@ x_create_pixmap(session_t *ps, uint8_t depth, xcb_drawable_t drawable, uint16_t
|
||||||
if (err == NULL)
|
if (err == NULL)
|
||||||
return pix;
|
return pix;
|
||||||
|
|
||||||
printf_err("Failed to create pixmap:");
|
log_error("Failed to create pixmap:");
|
||||||
ev_xcb_error(ps, err);
|
ev_xcb_error(ps, err);
|
||||||
free(err);
|
free(err);
|
||||||
return XCB_NONE;
|
return XCB_NONE;
|
||||||
|
|
Loading…
Reference in New Issue