Shuffle some stuff around. Add function to find ARGB visual.

SVN revision: 23057
This commit is contained in:
Kim Woelders 2006-06-01 20:18:40 +00:00
parent 25648ab3e8
commit 5e65f016d0
5 changed files with 134 additions and 84 deletions

View File

@ -208,31 +208,6 @@ static int ECompMgrDetermineOrder(EObj * const *lst, int num,
EObj ** first, EObj ** last,
Desk * dsk, XserverRegion clip);
/*
* Visuals
*/
int
EVisualIsARGB(Visual * vis)
{
XRenderPictFormat *pictfmt;
#if 0 /* FIXME - Remove? */
if (!Mode_compmgr.active)
return 0;
#endif
pictfmt = XRenderFindVisualFormat(disp, vis);
if (!pictfmt)
return 0;
#if 0
Eprintf("Visual ID=%#lx Type=%d, alphamask=%d\n", vis->visualid,
pictfmt->type, pictfmt->direct.alphaMask);
#endif
return pictfmt->type == PictTypeDirect && pictfmt->direct.alphaMask;
}
/*
* Regions
*/

View File

@ -36,8 +36,6 @@ typedef struct
int fade_speed;
} cfg_composite;
int EVisualIsARGB(Visual * vis);
int ECompMgrIsActive(void);
int ECompMgrDeskConfigure(Desk * dsk);
@ -67,8 +65,6 @@ void ECompMgrRepaint(void);
#else
#define EVisualIsARGB(vis) 0
#define ECompMgrIsActive() 0
#define ECompMgrDeskConfigure(dsk) 0

View File

@ -181,7 +181,6 @@ EwinManage(EWin * ewin)
{
XSetWindowAttributes att;
Win frame;
XWindowAttributes win_attr;
if (ewin->client.w <= 0)
ewin->client.w = 100;
@ -191,8 +190,11 @@ EwinManage(EWin * ewin)
if (ewin->state.docked)
ewin->inh_wm.b.border = 1;
#if USE_COMPOSITE
if (EVisualIsARGB(WinGetVisual(_EwinGetClientWin(ewin))))
{
XWindowAttributes win_attr;
ewin->o.argb = 1;
EGetWindowAttributes(_EwinGetClientWin(ewin), &win_attr);
@ -204,6 +206,7 @@ EwinManage(EWin * ewin)
0, &win_attr);
}
else
#endif
{
frame =
ECreateWindow(VRoot.win, ewin->client.x, ewin->client.y,

157
src/x.c
View File

@ -29,6 +29,9 @@
#include <X11/Xatom.h>
#include <X11/Xutil.h>
#include <X11/Xresource.h>
#if USE_COMPOSITE
#include <X11/extensions/Xrender.h>
#endif
#define DEBUG_XWIN 0
@ -1508,50 +1511,9 @@ EWindowGetShapePixmap(Win win)
return mask;
}
void
EGrabServer(void)
{
if (Mode.grabs.server_grabbed <= 0)
{
if (EventDebug(EDBUG_TYPE_GRABS))
Eprintf("EGrabServer\n");
XGrabServer(disp);
}
Mode.grabs.server_grabbed++;
}
void
EUngrabServer(void)
{
if (Mode.grabs.server_grabbed == 1)
{
XUngrabServer(disp);
XFlush(disp);
if (EventDebug(EDBUG_TYPE_GRABS))
Eprintf("EUngrabServer\n");
}
Mode.grabs.server_grabbed--;
if (Mode.grabs.server_grabbed < 0)
Mode.grabs.server_grabbed = 0;
}
int
EServerIsGrabbed(void)
{
return Mode.grabs.server_grabbed;
}
void
EFlush(void)
{
XFlush(disp);
}
void
ESync(void)
{
XSync(disp, False);
}
/*
* Display
*/
Display *
EDisplayOpen(const char *dstr, int scr)
@ -1615,6 +1577,113 @@ EDisplayDisconnect(void)
disp = NULL;
}
/*
* Server
*/
void
EGrabServer(void)
{
if (Mode.grabs.server_grabbed <= 0)
{
if (EventDebug(EDBUG_TYPE_GRABS))
Eprintf("EGrabServer\n");
XGrabServer(disp);
}
Mode.grabs.server_grabbed++;
}
void
EUngrabServer(void)
{
if (Mode.grabs.server_grabbed == 1)
{
XUngrabServer(disp);
XFlush(disp);
if (EventDebug(EDBUG_TYPE_GRABS))
Eprintf("EUngrabServer\n");
}
Mode.grabs.server_grabbed--;
if (Mode.grabs.server_grabbed < 0)
Mode.grabs.server_grabbed = 0;
}
int
EServerIsGrabbed(void)
{
return Mode.grabs.server_grabbed;
}
void
EFlush(void)
{
XFlush(disp);
}
void
ESync(void)
{
XSync(disp, False);
}
/*
* Visuals
*/
#if USE_COMPOSITE
Visual *
EVisualFindARGB(void)
{
XVisualInfo *xvi, xvit;
int i, num;
Visual *vis;
xvit.screen = VRoot.scr;
xvit.depth = 32;
xvit.class = TrueColor;
xvi = XGetVisualInfo(disp,
VisualScreenMask | VisualDepthMask | VisualClassMask,
&xvit, &num);
if (!xvi)
return NULL;
for (i = 0; i < num; i++)
{
if (EVisualIsARGB(xvi[i].visual))
break;
}
vis = (i < num) ? xvi[i].visual : NULL;
XFree(xvi);
return vis;
}
int
EVisualIsARGB(Visual * vis)
{
XRenderPictFormat *pictfmt;
pictfmt = XRenderFindVisualFormat(disp, vis);
if (!pictfmt)
return 0;
#if 0
Eprintf("Visual ID=%#lx Type=%d, alphamask=%d\n", vis->visualid,
pictfmt->type, pictfmt->direct.alphaMask);
#endif
return pictfmt->type == PictTypeDirect && pictfmt->direct.alphaMask;
}
#endif
/*
* Misc
*/
Time
EGetTimestamp(void)
{

View File

@ -28,6 +28,23 @@ typedef struct _xwin *Win;
#define NoWin ((Win)0)
Display *EDisplayOpen(const char *dstr, int scr);
void EDisplayClose(void);
void EDisplayDisconnect(void);
void EGrabServer(void);
void EUngrabServer(void);
int EServerIsGrabbed(void);
void EFlush(void);
void ESync(void);
#if USE_COMPOSITE
int EVisualIsARGB(Visual * vis);
Visual *EVisualFindARGB(void);
#endif
Time EGetTimestamp(void);
Win ELookupXwin(Window xwin);
#define Xwin(win) WinGetXwin(win)
@ -40,16 +57,6 @@ Colormap WinGetCmap(const Win win);
Win ECreateWinFromXwin(Window xwin);
void EDestroyWin(Win win);
Display *EDisplayOpen(const char *dstr, int scr);
void EDisplayClose(void);
void EDisplayDisconnect(void);
void EGrabServer(void);
void EUngrabServer(void);
int EServerIsGrabbed(void);
void EFlush(void);
void ESync(void);
Time EGetTimestamp(void);
Win ERegisterWindow(Window xwin, XWindowAttributes * pxwa);
void EUnregisterWindow(Win win);
void EUnregisterXwin(Window xwin);