1
0
mirror of https://github.com/Llewellynvdm/conky.git synced 2024-11-18 02:55:12 +00:00

reload_config() fix, fix default net graph args.

Closing the X display on reload caused some weirdness.  We can just
leave it open between reloads.  For whatever reason we had a macro
inside quotes for the default net device.
This commit is contained in:
Brenden Matthews 2009-06-06 22:53:40 -06:00
parent 17d5310981
commit 00e559aef8
5 changed files with 72 additions and 40 deletions

View File

@ -1602,7 +1602,7 @@ static struct text_object *construct_text_object(const char *s,
&obj->e, &obj->char_a, &obj->char_b); &obj->e, &obj->char_a, &obj->char_b);
// default to DEFAULTNETDEV // default to DEFAULTNETDEV
buf = strndup(buf ? buf : "DEFAULTNETDEV", text_buffer_size); buf = strndup(buf ? buf : DEFAULTNETDEV, text_buffer_size);
obj->data.net = get_net_stat(buf); obj->data.net = get_net_stat(buf);
free(buf); free(buf);
#endif /* X11 */ #endif /* X11 */
@ -2426,7 +2426,7 @@ static struct text_object *construct_text_object(const char *s,
&obj->e, &obj->char_a, &obj->char_b); &obj->e, &obj->char_a, &obj->char_b);
// default to DEFAULTNETDEV // default to DEFAULTNETDEV
buf = strndup(buf ? buf : "DEFAULTNETDEV", text_buffer_size); buf = strndup(buf ? buf : DEFAULTNETDEV, text_buffer_size);
obj->data.net = get_net_stat(buf); obj->data.net = get_net_stat(buf);
free(buf); free(buf);
#endif #endif
@ -3467,6 +3467,7 @@ static void generate_text_internal(char *p, int p_max_size,
struct text_object root, struct information *cur) struct text_object root, struct information *cur)
{ {
struct text_object *obj; struct text_object *obj;
int need_to_load_fonts = 0;
/* for the OBJ_top* handler */ /* for the OBJ_top* handler */
struct process **needed = 0; struct process **needed = 0;
@ -3902,6 +3903,7 @@ static void generate_text_internal(char *p, int p_max_size,
#ifdef X11 #ifdef X11
OBJ(font) { OBJ(font) {
new_font(p, obj->data.s); new_font(p, obj->data.s);
need_to_load_fonts = 1;
} }
#endif /* X11 */ #endif /* X11 */
/* TODO: move this correction from kB to kB/s elsewhere /* TODO: move this correction from kB to kB/s elsewhere
@ -5733,6 +5735,12 @@ static void generate_text_internal(char *p, int p_max_size,
} }
obj = obj->next; obj = obj->next;
} }
#ifdef X11
/* load any new fonts we may have had */
if (need_to_load_fonts) {
load_fonts();
}
#endif /* X11 */
} }
double current_update_time, next_update_time, last_update_time; double current_update_time, next_update_time, last_update_time;
@ -6444,7 +6452,6 @@ static void draw_line(char *s)
} else { } else {
cur_y += font_ascent(); cur_y += font_ascent();
} }
set_font();
font_h = font_height(); font_h = font_height();
break; break;
} }
@ -6875,7 +6882,6 @@ static void main_loop(void)
|| ev.xconfigure.y != 0)) { || ev.xconfigure.y != 0)) {
fixed_pos = 1; fixed_pos = 1;
} */ } */
set_font();
} }
break; break;
@ -7140,7 +7146,6 @@ static void reload_config(void)
} }
#ifdef X11 #ifdef X11
x_initialised = NO;
if (output_methods & TO_X) { if (output_methods & TO_X) {
X11_initialisation(); X11_initialisation();
} }
@ -7163,10 +7168,10 @@ static void reload_config(void)
} }
text_buffer = malloc(max_user_text); text_buffer = malloc(max_user_text);
memset(text_buffer, 0, max_user_text); memset(text_buffer, 0, max_user_text);
update_text();
#ifdef X11 #ifdef X11
X11_create_window(); X11_create_window();
#endif /* X11 */ #endif /* X11 */
update_text();
} }
} }
@ -7444,6 +7449,36 @@ static _Bool append_works(const char *path)
} }
#ifdef X11 #ifdef X11
#ifdef DEBUG
/* WARNING, this type not in Xlib spec */
int x11_error_handler(Display *d, XErrorEvent *err)
__attribute__((noreturn));
int x11_error_handler(Display *d, XErrorEvent *err)
{
ERR("X Error: type %i Display %lx XID %li serial %lu error_code %i request_code %i minor_code %i other Display: %lx\n",
err->type,
(long unsigned)err->display,
(long)err->resourceid,
err->serial,
err->error_code,
err->request_code,
err->minor_code,
(long unsigned)d
);
abort();
}
int x11_ioerror_handler(Display *d)
__attribute__((noreturn));
int x11_ioerror_handler(Display *d)
{
ERR("X Error: Display %lx\n",
(long unsigned)d
);
abort();
}
#endif /* DEBUG */
static void X11_initialisation(void) static void X11_initialisation(void)
{ {
if (x_initialised == YES) return; if (x_initialised == YES) return;
@ -7451,6 +7486,12 @@ static void X11_initialisation(void)
init_X11(disp); init_X11(disp);
set_default_configurations_for_x(); set_default_configurations_for_x();
x_initialised = YES; x_initialised = YES;
#ifdef DEBUG
_Xdebug = 1;
/* WARNING, this type not in Xlib spec */
XSetErrorHandler(&x11_error_handler);
XSetIOErrorHandler(&x11_ioerror_handler);
#endif /* DEBUG */
} }
static void X11_destroy_window(void) static void X11_destroy_window(void)
@ -7468,6 +7509,7 @@ static void X11_destroy_window(void)
#endif /* HAVE_XDAMAGE */ #endif /* HAVE_XDAMAGE */
destroy_window(); destroy_window();
} }
x_initialised = NO;
} }
static char **xargv = 0; static char **xargv = 0;
@ -7486,7 +7528,7 @@ static void X11_create_window(void)
xargv, xargc); xargv, xargc);
#endif /* OWN_WINDOW */ #endif /* OWN_WINDOW */
selected_font = 0; setup_fonts();
load_fonts(); load_fonts();
update_text_area(); /* to position text/window on screen */ update_text_area(); /* to position text/window on screen */
@ -7501,7 +7543,6 @@ static void X11_create_window(void)
create_gc(); create_gc();
set_font();
draw_stuff(); draw_stuff();
x11_stuff.region = XCreateRegion(); x11_stuff.region = XCreateRegion();
@ -7926,7 +7967,7 @@ static void load_config_file(const char *f)
#else #else
CONF("use_xft") { CONF("use_xft") {
if (string_to_bool(value)) { if (string_to_bool(value)) {
ERR("Xft not enabled"); ERR("Xft not enabled at compile time");
} }
} }
CONF("xftfont") { CONF("xftfont") {

View File

@ -32,26 +32,20 @@ int selected_font = 0;
int font_count = -1; int font_count = -1;
struct font_list *fonts = NULL; struct font_list *fonts = NULL;
void set_font(void) void setup_fonts(void)
{ {
if ((output_methods & TO_X) == 0) { if ((output_methods & TO_X) == 0) {
return; return;
} }
#ifdef XFT #ifdef XFT
if (use_xft) { if (use_xft && !window.xftdraw) {
if (window.xftdraw != NULL) {
XftDrawDestroy(window.xftdraw);
}
window.xftdraw = XftDrawCreate(display, window.drawable, window.xftdraw = XftDrawCreate(display, window.drawable,
DefaultVisual(display, screen), DefaultColormap(display, screen)); DefaultVisual(display, screen), DefaultColormap(display, screen));
} else
#endif
{
XSetFont(display, window.gc, fonts[selected_font].font->fid);
} }
#endif
} }
int addfont(const char *data_in) int add_font(const char *data_in)
{ {
if ((output_methods & TO_X) == 0) { if ((output_methods & TO_X) == 0) {
return 0; return 0;
@ -73,7 +67,7 @@ int addfont(const char *data_in)
fonts = realloc(fonts, (sizeof(struct font_list) * (font_count + 1))); fonts = realloc(fonts, (sizeof(struct font_list) * (font_count + 1)));
memset(&fonts[font_count], 0, sizeof(struct font_list)); memset(&fonts[font_count], 0, sizeof(struct font_list));
if (fonts == NULL) { if (fonts == NULL) {
CRIT_ERR("realloc in addfont"); CRIT_ERR("realloc in add_font");
} }
// must account for null terminator // must account for null terminator
if (strlen(data_in) < DEFAULT_TEXT_BUFFER_SIZE) { if (strlen(data_in) < DEFAULT_TEXT_BUFFER_SIZE) {
@ -82,7 +76,7 @@ int addfont(const char *data_in)
fonts[font_count].font_alpha = 0xffff; fonts[font_count].font_alpha = 0xffff;
#endif #endif
} else { } else {
CRIT_ERR("Oops...looks like something overflowed in addfont()."); CRIT_ERR("Oops...looks like something overflowed in add_font().");
} }
return font_count; return font_count;
} }
@ -121,7 +115,7 @@ void free_fonts(void)
XftFontClose(display, fonts[i].xftfont); XftFontClose(display, fonts[i].xftfont);
fonts[i].xftfont = 0; fonts[i].xftfont = 0;
} else } else
#endif #endif /* XFT */
{ {
XFreeFont(display, fonts[i].font); XFreeFont(display, fonts[i].font);
fonts[i].font = 0; fonts[i].font = 0;
@ -131,6 +125,12 @@ void free_fonts(void)
fonts = 0; fonts = 0;
font_count = -1; font_count = -1;
selected_font = 0; selected_font = 0;
#ifdef XFT
if (window.xftdraw) {
XftDrawDestroy(window.xftdraw);
window.xftdraw = 0;
}
#endif /* XFT */
} }
void load_fonts(void) void load_fonts(void)
@ -145,12 +145,9 @@ void load_fonts(void)
if (use_xft && fonts[i].xftfont) { if (use_xft && fonts[i].xftfont) {
continue; continue;
} else if (use_xft) { } else if (use_xft) {
/* if (fonts[i].xftfont != NULL && selected_font == 0) {
XftFontClose(display, fonts[i].xftfont);
} */
fonts[i].xftfont = XftFontOpenName(display, screen, fonts[i].xftfont = XftFontOpenName(display, screen,
fonts[i].name); fonts[i].name);
if (fonts[i].xftfont != NULL) { if (fonts[i].xftfont) {
continue; continue;
} }
@ -171,10 +168,6 @@ void load_fonts(void)
} }
#endif #endif
/* load normal font */ /* load normal font */
/* if (fonts[i].font != NULL) {
XFreeFont(display, fonts[i].font);
} */
if (fonts[i].font || (fonts[i].font = XLoadQueryFont(display, fonts[i].name)) == NULL) { if (fonts[i].font || (fonts[i].font = XLoadQueryFont(display, fonts[i].name)) == NULL) {
ERR("can't load font '%s'", fonts[i].name); ERR("can't load font '%s'", fonts[i].name);
if ((fonts[i].font = XLoadQueryFont(display, "fixed")) == NULL) { if ((fonts[i].font = XLoadQueryFont(display, "fixed")) == NULL) {

View File

@ -70,8 +70,8 @@ extern struct font_list *fonts;
extern int selected_font; extern int selected_font;
extern int font_count; extern int font_count;
void set_font(void); void setup_fonts(void);
int addfont(const char *); int add_font(const char *);
void set_first_font(const char *); void set_first_font(const char *);
void free_fonts(void); void free_fonts(void);
void load_fonts(void); void load_fonts(void);

View File

@ -254,8 +254,7 @@ void new_font(char *buf, char *args)
if (s->font_added > font_count || !s->font_added || (strncmp(args, fonts[s->font_added].name, DEFAULT_TEXT_BUFFER_SIZE) != EQUAL) ) { if (s->font_added > font_count || !s->font_added || (strncmp(args, fonts[s->font_added].name, DEFAULT_TEXT_BUFFER_SIZE) != EQUAL) ) {
int tmp = selected_font; int tmp = selected_font;
selected_font = s->font_added = addfont(args); selected_font = s->font_added = add_font(args);
load_fonts();
selected_font = tmp; selected_font = tmp;
} }
} else { } else {

View File

@ -70,11 +70,10 @@ static Window find_subwindow(Window win, int w, int h);
/* X11 initializer */ /* X11 initializer */
void init_X11(const char *disp) void init_X11(const char *disp)
{ {
if (display) { if (!display) {
XCloseDisplay(display); if ((display = XOpenDisplay(disp)) == NULL) {
} CRIT_ERR("can't open display: %s", XDisplayName(0));
if ((display = XOpenDisplay(disp)) == NULL) { }
CRIT_ERR("can't open display: %s", XDisplayName(0));
} }
screen = DefaultScreen(display); screen = DefaultScreen(display);