valgrind xlib window & cairo
valgrind постоянно ругается, на утечку памяти:
#include "xlib_cairo_window.h"
//#include <cairo.h>
//#include <X11/Xlib.h>
#include <iostream>
using std::cout;
using std::endl;
point xlib_window::current() { return p; }
void xlib_window::current(const point& cp) { p=cp; }
void xlib_window::line(const point& p) { if (p.x) cout<<"px"<<endl; }
void xlib_window::paint() {
XEvent e;
while(1) {
XNextEvent(dpy, &e);
if(e.type==Expose && e.xexpose.count<1) {
//paint(cs);
} else if(e.type==ButtonPress) break;
}
}
xlib_window::xlib_window(int x,int y,const char* pc):p(0,0){
if(!(dpy=XOpenDisplay(NULL))) {
std::cerr<<"ERROR: Could not open display"<<std::endl;
exit(1);
}
scr=DefaultScreen(dpy);
rootwin=RootWindow(dpy, scr);
win=XCreateSimpleWindow(dpy, rootwin, 1, 1, x, y, 0,
BlackPixel(dpy, scr), BlackPixel(dpy, scr));
XStoreName(dpy, win, pc);
XSelectInput(dpy, win, ExposureMask|ButtonPressMask);
XMapWindow(dpy, win);
surface=cairo_xlib_surface_create(dpy, win,
DefaultVisual(dpy, 0), x, y);
cr = cairo_create (surface);
cairo_select_font_face (cr, "serif", CAIRO_FONT_SLANT_NORMAL, CAIRO_FONT_WEIGHT_BOLD);
cairo_set_font_size (cr, 32.0);
cairo_set_source_rgb (cr, 0.0, 0.0, 1.0);
cairo_move_to (cr, 10.0, 50.0);
cairo_show_text (cr, "Hello, world");
cairo_show_page(cr);
}
xlib_window::~xlib_window(){
cairo_destroy (cr);
cairo_surface_destroy (surface);
XCloseDisplay(dpy);
cout<<"destroing xlib window"<<endl;
}
вроде бы разрушил все созданые в конструкторе объекты, может быть следовало обработать еще какое-нить сообщение в пайнт?
или может кто-нить более опытным глазом увидит, еще какой объект, который я не вспомнил в деструкторе?