diff --git a/doc/config_settings.xml b/doc/config_settings.xml index 70d67d68..a12a77d3 100644 --- a/doc/config_settings.xml +++ b/doc/config_settings.xml @@ -675,11 +675,22 @@ - + - Boolean, use ARGB visual? ARGB can be used for real transparency, - note that a composite manager is required for real transparency. + Boolean, use ARGB visual? ARGB can be used for real + transparency, note that a composite manager is required for real + transparency. This option will not work as desired (in most cases) + in conjunction with 'own_window_type override'. + + + + + + + + + When ARGB visuals are enabled, this use this to modify the alpha value used. Valid range is 0-255, where 0 is 0% opacity, and 255 is 100% opacity. Note that if own_window_transparent is enabled, this value has no effect. @@ -688,8 +699,8 @@ - Boolean, set transparency? If argb visual is configured - true transparency is used, else pseudo transparency is used. + Boolean, set transparency? If ARGB visual is enabled, sets + background opacity to 0%. diff --git a/src/conky.cc b/src/conky.cc index 1ce95b6b..5f337c17 100644 --- a/src/conky.cc +++ b/src/conky.cc @@ -168,105 +168,105 @@ static void print_version(void) printf(PACKAGE_NAME" "VERSION" compiled "BUILD_DATE" for "BUILD_ARCH"\n"); printf("\nCompiled in features:\n\n" - "System config file: "SYSTEM_CONFIG_FILE"\n" - "Package library path: "PACKAGE_LIBDIR"\n\n" + "System config file: "SYSTEM_CONFIG_FILE"\n" + "Package library path: "PACKAGE_LIBDIR"\n\n" #ifdef X11 - " X11:\n" + " X11:\n" # ifdef HAVE_XDAMAGE - " * Xdamage extension\n" + " * Xdamage extension\n" # endif /* HAVE_XDAMAGE */ # ifdef HAVE_XDBE - " * XDBE (double buffer extension)\n" + " * XDBE (double buffer extension)\n" # endif /* HAVE_XDBE */ # ifdef XFT - " * Xft\n" + " * Xft\n" # endif /* XFT */ # ifdef USE_ARGB - " * ARGB visual\n" + " * ARGB visual\n" # endif /* USE_ARGB */ #endif /* X11 */ - "\n Music detection:\n" + "\n Music detection:\n" #ifdef AUDACIOUS - " * Audacious\n" + " * Audacious\n" #endif /* AUDACIOUS */ #ifdef BMPX - " * BMPx\n" + " * BMPx\n" #endif /* BMPX */ #ifdef MPD - " * MPD\n" + " * MPD\n" #endif /* MPD */ #ifdef MOC - " * MOC\n" + " * MOC\n" #endif /* MOC */ #ifdef XMMS2 - " * XMMS2\n" + " * XMMS2\n" #endif /* XMMS2 */ - "\n General:\n" + "\n General:\n" #ifdef HAVE_OPENMP - " * OpenMP\n" + " * OpenMP\n" #endif /* HAVE_OPENMP */ #ifdef MATH - " * math\n" + " * math\n" #endif /* Math */ #ifdef HDDTEMP - " * hddtemp\n" + " * hddtemp\n" #endif /* HDDTEMP */ #ifdef TCP_PORT_MONITOR - " * portmon\n" + " * portmon\n" #endif /* TCP_PORT_MONITOR */ #ifdef HAVE_CURL - " * Curl\n" + " * Curl\n" #endif /* HAVE_CURL */ #ifdef RSS - " * RSS\n" + " * RSS\n" #endif /* RSS */ #ifdef WEATHER - " * Weather (METAR)\n" + " * Weather (METAR)\n" #ifdef XOAP - " * Weather (XOAP)\n" + " * Weather (XOAP)\n" #endif /* XOAP */ #endif /* WEATHER */ #ifdef HAVE_IWLIB - " * wireless\n" + " * wireless\n" #endif /* HAVE_IWLIB */ #ifdef IBM - " * support for IBM/Lenovo notebooks\n" + " * support for IBM/Lenovo notebooks\n" #endif /* IBM */ #ifdef NVIDIA - " * nvidia\n" + " * nvidia\n" #endif /* NVIDIA */ #ifdef EVE - " * eve-online\n" + " * eve-online\n" #endif /* EVE */ #ifdef CONFIG_OUTPUT - " * config-output\n" + " * config-output\n" #endif /* CONFIG_OUTPUT */ #ifdef IMLIB2 - " * Imlib2\n" + " * Imlib2\n" #endif /* IMLIB2 */ #ifdef MIXER_IS_ALSA - " * ALSA mixer support\n" + " * ALSA mixer support\n" #endif /* MIXER_IS_ALSA */ #ifdef APCUPSD - " * apcupsd\n" + " * apcupsd\n" #endif /* APCUPSD */ #ifdef IOSTATS - " * iostats\n" + " * iostats\n" #endif /* IOSTATS */ #ifdef NCURSES - " * ncurses\n" + " * ncurses\n" #endif /* NCURSES */ #ifdef HAVE_LUA - " * Lua\n" - "\n Lua bindings:\n" + " * Lua\n" + "\n Lua bindings:\n" #ifdef HAVE_LUA_CAIRO - " * Cairo\n" + " * Cairo\n" #endif /* HAVE_LUA_CAIRO */ #ifdef HAVE_LUA_IMLIB2 - " * Imlib2\n" + " * Imlib2\n" #endif /* IMLIB2 */ #endif /* HAVE_LUA */ - ); + ); exit(EXIT_SUCCESS); } @@ -440,10 +440,10 @@ static inline int calc_text_width(const char *s) if (utf8_mode) { XftTextExtentsUtf8(display, fonts[selected_font].xftfont, - (const FcChar8 *) s, slen, &gi); + (const FcChar8 *) s, slen, &gi); } else { XftTextExtents8(display, fonts[selected_font].xftfont, - (const FcChar8 *) s, slen, &gi); + (const FcChar8 *) s, slen, &gi); } return gi.xOff; } else @@ -1093,7 +1093,7 @@ static inline void set_foreground_color(long c) if (output_methods & TO_X) { #ifdef USE_ARGB if (have_argb_visual) { - current_color = c | (0xff << 24); + current_color = c | (own_window_argb_value << 24); } else { #endif /* USE_ARGB */ current_color = c; @@ -1963,7 +1963,7 @@ static void main_loop(void) draw_stuff(); /* redraw everything in our newly sized window */ XResizeWindow(display, window.window, window.width, window.height); /* resize window */ - set_transparent_background(window.window); + set_transparent_background(window.window, own_window_argb_value); #ifdef HAVE_XDBE /* swap buffers */ xdbe_swap_buffers(); @@ -2065,7 +2065,7 @@ static void main_loop(void) case ReparentNotify: /* make background transparent */ if (own_window) { - set_transparent_background(window.window); + set_transparent_background(window.window, own_window_argb_value); } break; @@ -2652,6 +2652,7 @@ static void set_default_configurations(void) sprintf(window.title, PACKAGE_NAME" (%s)", info.uname_s.nodename); #ifdef USE_ARGB use_argb_visual = 0; + own_window_argb_value = 255; #endif #endif stippled_borders = 0; @@ -2788,7 +2789,7 @@ static void X11_create_window(void) XMoveWindow(display, window.window, window.x, window.y); } if (own_window) { - set_transparent_background(window.window); + set_transparent_background(window.window, own_window_argb_value); } #endif @@ -3431,6 +3432,12 @@ char load_config_file(const char *f) CONF("own_window_argb_visual") { use_argb_visual = string_to_bool(value); } + CONF("own_window_argb_value") { + own_window_argb_value = strtol(value, 0, 0); + if (own_window_argb_value > 255 || own_window_argb_value < 0) { + CONF_ERR2("own_window_argb_value must be <= 255 and >= 0"); + } + } #endif /* USE_ARGB */ #endif CONF("stippled_borders") { diff --git a/src/core.cc b/src/core.cc index 7d137153..9dc17945 100644 --- a/src/core.cc +++ b/src/core.cc @@ -1664,9 +1664,9 @@ int extract_variable_text_internal(struct text_object *retval, const char *const s = orig_p = p; if (strcmp(p, const_p)) { - DBGP("replaced all templates in text: input is\n'%s'\noutput is\n'%s'", const_p, p); + DBGP2("replaced all templates in text: input is\n'%s'\noutput is\n'%s'", const_p, p); } else { - DBGP("no templates to replace"); + DBGP2("no templates to replace"); } memset(retval, 0, sizeof(struct text_object)); diff --git a/src/x11.c b/src/x11.c index b7c8c122..c669a4d7 100644 --- a/src/x11.c +++ b/src/x11.c @@ -53,6 +53,7 @@ int use_xdbe; #ifdef USE_ARGB int use_argb_visual; +int own_window_argb_value; int have_argb_visual; #endif /* USE_ARGB */ @@ -178,9 +179,10 @@ static Window find_desktop_window(Window *p_root, Window *p_desktop) /* if no argb visual is configured sets background to ParentRelative for the Window and all parents, else real transparency is used */ -void set_transparent_background(Window win) +void set_transparent_background(Window win, int alpha) { static int colour_set = -1; + (void)alpha; /* disable warnings when unused */ #ifdef USE_ARGB if (have_argb_visual) { @@ -189,7 +191,7 @@ void set_transparent_background(Window win) XSetWindowBackground(display, win, 0x00); } else if (colour_set != background_colour) { XSetWindowBackground(display, win, - background_colour | (0xff << 24)); + background_colour | (alpha << 24)); colour_set = background_colour; } } else { @@ -235,10 +237,12 @@ static int get_argb_visual(Visual** visual, int *depth) { visual_list[i].blue_mask == 0x0000ff)) { *visual = visual_list[i].visual; *depth = visual_list[i].depth; + DBGP("Found ARGB Visual"); return 1; } } // no argb visual available + DBGP("No ARGB Visual found"); return 0; } #endif /* USE_ARGB */ diff --git a/src/x11.h b/src/x11.h index 2e36f9bf..d0e1033d 100644 --- a/src/x11.h +++ b/src/x11.h @@ -80,6 +80,8 @@ extern int use_xft; extern int use_argb_visual; /* 1 if use_argb_visual=1 and argb visual was found, otherwise 0 */ extern int have_argb_visual; +/* range of 0-255 for alpha */ +extern int own_window_argb_value; #endif extern Display *display; @@ -101,7 +103,7 @@ void init_window(int use_own_window, int width, int height, int set_trans, int back_colour, char **argv, int argc); void destroy_window(void); void create_gc(void); -void set_transparent_background(Window win); +void set_transparent_background(Window win, int alpha); void get_x11_desktop_info(Display *display, Atom atom); void set_struts(int);