X-Git-Url: http://vcs.maemo.org/git/?a=blobdiff_plain;f=src%2Fx11.c;h=e933a64cc78bb63d8f3049b238b96099d5ee04a0;hb=fc1bd4cf0a46eb594789d5a5f72a7f9427e89431;hp=dcb5df12a4b45ced88fdcb06d9caf88b7eea3f2a;hpb=6526b47b2c63c9f46b63d3a5e72cbe71b04d60ac;p=monky diff --git a/src/x11.c b/src/x11.c index dcb5df1..e933a64 100644 --- a/src/x11.c +++ b/src/x11.c @@ -44,7 +44,7 @@ #ifdef XFT #include -int use_xft = 0; +int use_xft; #endif #ifdef HAVE_XDBE @@ -197,7 +197,7 @@ void set_transparent_background(Window win, int alpha) } else { #endif /* USE_ARGB */ // pseudo transparency - + if (set_transparent) { Window parent = win; unsigned int i; @@ -226,7 +226,7 @@ static int get_argb_visual(Visual** visual, int *depth) { XVisualInfo visual_template; XVisualInfo *visual_list; int nxvisuals = 0, i; - + visual_template.screen = screen; visual_list = XGetVisualInfo (display, VisualScreenMask, &visual_template, &nxvisuals); @@ -259,6 +259,12 @@ void destroy_window(void) if(window.gc) { XFreeGC(display, window.gc); } + if(window.gc_back) { + XFreeGC(display, window.gc_back); + } + if(window.back_buffer != None) { + XFreePixmap(display, window.back_buffer); + } memset(&window, 0, sizeof(struct conky_window)); colour_set = -1; } @@ -277,11 +283,11 @@ void init_window(int own_window, int w, int h, int set_trans, int back_colour, if (own_window) { int depth = 0, flags; Visual *visual = NULL; - + if (!find_desktop_window(&window.root, &window.desktop)) { return; } - + #ifdef USE_ARGB if (use_argb_visual && get_argb_visual(&visual, &depth)) { have_argb_visual = 1; @@ -336,7 +342,7 @@ void init_window(int own_window, int w, int h, int set_trans, int back_colour, XClassHint classHint; XWMHints wmHint; Atom xa; - + #ifdef USE_ARGB if (have_argb_visual) { attrs.colormap = window.colourmap; @@ -352,6 +358,8 @@ void init_window(int own_window, int w, int h, int set_trans, int back_colour, window.x = window.y = 0; } /* Parent is root window so WM can take control */ + + fprintf(stderr, PACKAGE_NAME": creating window of %d x %d x %d\n",w,h,depth); window.window = XCreateWindow(display, window.root, window.x, window.y, w, h, 0, depth, InputOutput, visual, flags, &attrs); @@ -503,13 +511,13 @@ void init_window(int own_window, int w, int h, int set_trans, int back_colour, } /* Skip pager */ - if (TEST_HINT(window.hints, HINT_SKIP_PAGER)) { - /* fprintf(stderr, PACKAGE_NAME": hint - skip_pager\n"); - fflush(stderr); */ + if (TEST_HINT(window.hints, HINT_FULLSCREEN)) { + fprintf(stderr, PACKAGE_NAME": hint - fullscreen\n"); + fflush(stderr); xa = ATOM(_NET_WM_STATE); if (xa != None) { - Atom xa_prop = ATOM(_NET_WM_STATE_SKIP_PAGER); + Atom xa_prop = ATOM(_NET_WM_STATE_FULLSCREEN); XChangeProperty(display, window.window, xa, XA_ATOM, 32, PropModeAppend, (unsigned char *) &xa_prop, 1); @@ -526,20 +534,23 @@ void init_window(int own_window, int w, int h, int set_trans, int back_colour, } else #endif /* OWN_WINDOW */ { - XWindowAttributes attrs; - if (!window.window) { window.window = find_desktop_window(&window.root, &window.desktop); } window.visual = DefaultVisual(display, screen); window.colourmap = DefaultColormap(display, screen); + fprintf(stderr, PACKAGE_NAME": drawing to desktop window\n"); + } + + { + fprintf(stderr, PACKAGE_NAME": getting window attrs\n"); + XWindowAttributes attrs; if (XGetWindowAttributes(display, window.window, &attrs)) { window.width = attrs.width; window.height = attrs.height; + window.depth = attrs.depth; } - - fprintf(stderr, PACKAGE_NAME": drawing to desktop window\n"); } /* Drawable is same as window. This may be changed by double buffering. */ @@ -547,16 +558,12 @@ void init_window(int own_window, int w, int h, int set_trans, int back_colour, #ifdef HAVE_XDBE if (use_xdbe) { - int major, minor; - - if (!XdbeQueryExtension(display, &major, &minor)) { - use_xdbe = 0; - } else { - window.back_buffer = XdbeAllocateBackBufferName(display, - window.window, XdbeBackground); + { + window.back_buffer = XCreatePixmap(display, window.window, + window.width, window.height, window.depth); if (window.back_buffer != None) { window.drawable = window.back_buffer; - fprintf(stderr, PACKAGE_NAME": drawing to double buffer\n"); + fprintf(stderr, PACKAGE_NAME": created %d x %d x %d back buffer\n",window.width, window.height, window.depth); } else { use_xdbe = 0; } @@ -627,6 +634,8 @@ void create_gc(void) values.function = GXcopy; window.gc = XCreateGC(display, window.drawable, GCFunction | GCGraphicsExposures, &values); + window.gc_back = XCreateGC(display, window.drawable, + GCFunction | GCGraphicsExposures, &values); } //Get current desktop number @@ -775,13 +784,14 @@ void get_x11_desktop_info(Display *current_display, Atom atom) } } -void update_x11info(void) +int update_x11info(void) { struct information *current_info = &info; - if (!x_initialised == YES) - return; + if (x_initialised != YES) + return 0; current_info->x11.monitor.number = XScreenCount(display); current_info->x11.monitor.current = XDefaultScreen(display); + return 0; } #ifdef OWN_WINDOW @@ -855,11 +865,16 @@ void set_struts(int sidenum) void xdbe_swap_buffers(void) { if (use_xdbe) { - XdbeSwapInfo swap; - - swap.swap_window = window.window; - swap.swap_action = XdbeBackground; - XdbeSwapBuffers(display, &swap, 1); + //XWindowAttributes dest;//leaks + //XGetWindowAttributes(display, window.window, &dest); + //unsigned int src_height, src_width, src_depth = 0; + //XGetGeometry(display, window.back_buffer, NULL, NULL, NULL,src_width,src_height, NULL, src_depth); +// fprintf(stderr, PACKAGE_NAME": copy from %d x %d x %d to %d x %d x %d\n",src_width, src_height, src_depth, dest.width, dest.height, dest.depth); + XCopyArea(display, window.drawable, window.window, + window.gc_back, 0, 0, window.width, window.height, 0, 0); + /* FIXME should fill w/ window background */ +// XFillRectangle(display, window.back_buffer, window.gc, +// 0, 0, window.width, window.height); } } #endif /* HAVE_XDBE */