Enlightenment CVS committal
Author : kwo
Project : e16
Module : e
Dir : e16/e/src
Modified Files:
Tag: branch-exp
E.h ecompmgr.c ecompmgr.h eobj.c iconify.c ipc.c
Log Message:
Fix segv, use window pixmap.
===================================================================
RCS file: /cvsroot/enlightenment/e16/e/src/E.h,v
retrieving revision 1.314.2.71
retrieving revision 1.314.2.72
diff -u -3 -r1.314.2.71 -r1.314.2.72
--- E.h 13 Dec 2004 21:29:08 -0000 1.314.2.71
+++ E.h 14 Dec 2004 22:20:38 -0000 1.314.2.72
@@ -575,6 +575,7 @@
#define EoIsFloating(eo) ((eo)->o.floating)
#define EoGetDesk(eo) EobjGetDesk(&((eo)->o))
#define EoGetLayer(eo) ((eo)->o.layer)
+#define EoGetPixmap(eo) EobjGetPixmap(&((eo)->o))
#define EoSetWin(eo, _x) (eo)->o.win = (_x)
#define EoSetType(eo, _x) (eo)->o.type = (_x)
@@ -1585,6 +1586,7 @@
void EobjUnregister(Window win);
const char *EobjGetName(const EObj * eo);
int EobjGetDesk(const EObj * eo);
+Pixmap EobjGetPixmap(const EObj * eo);
int EobjSetDesk(EObj * eo, int desk);
void EobjSetLayer(EObj * eo, int layer);
===================================================================
RCS file: /cvsroot/enlightenment/e16/e/src/Attic/ecompmgr.c,v
retrieving revision 1.1.2.8
retrieving revision 1.1.2.9
diff -u -3 -r1.1.2.8 -r1.1.2.9
--- ecompmgr.c 11 Dec 2004 15:51:33 -0000 1.1.2.8
+++ ecompmgr.c 14 Dec 2004 22:20:38 -0000 1.1.2.9
@@ -76,7 +76,6 @@
#if COMPOSITE_MAJOR > 0 || COMPOSITE_MINOR >= 2
#define HAS_NAME_WINDOW_PIXMAP 1
#endif
-#undef HAS_NAME_WINDOW_PIXMAP
#define CAN_DO_USABLE 0
@@ -164,6 +163,9 @@
static struct
{
char active;
+#if HAS_NAME_WINDOW_PIXMAP
+ char have_name_pixmap;
+#endif
} Mode_compmgr;
static Picture rootPicture;
@@ -173,10 +175,6 @@
static Bool clipChanged;
-#if HAS_NAME_WINDOW_PIXMAP
-static Bool hasNamePixmap;
-#endif
-
#define OPAQUE 0xffffffff
#define WINDOW_SOLID 0
@@ -332,7 +330,7 @@
}
#if xHAS_NAME_WINDOW_PIXMAP /* Do this? */
- if (hasNamePixmap)
+ if (Mode_compmgr.have_name_pixmap)
{
pmap = XCompositeNameWindowPixmap(dpy, id);
desks[desk].bgpmap = pmap;
@@ -913,7 +911,7 @@
}
Pixmap
-ECompMgrWinGetPixmap(EObj * eo)
+ECompMgrWinGetPixmap(const EObj * eo)
{
#if HAS_NAME_WINDOW_PIXMAP
ECmWinInfo *w = eo->cmhook;
@@ -1474,7 +1472,9 @@
eo = lst[i];
if (!eo->cmhook)
{
- Eprintf("??? %#lx %s\n", eo->win, EobjGetName(eo));
+ /* Atm we first hook up when mapped */
+ /* Maybe do it at init/create? */
+ continue;
}
w = eo->cmhook;
@@ -1492,11 +1492,13 @@
Drawable draw = eo->win;
#if HAS_NAME_WINDOW_PIXMAP
- if (hasNamePixmap && !w->pixmap)
+ if (Mode_compmgr.have_name_pixmap && !w->pixmap)
w->pixmap = XCompositeNameWindowPixmap(dpy, eo->win);
+#if 0 /* ??? */
if (w->pixmap)
draw = w->pixmap;
#endif
+#endif
pictfmt = XRenderFindVisualFormat(dpy, w->a.visual);
pa.subwindow_mode = IncludeInferiors;
w->picture = XRenderCreatePicture(dpy, draw,
@@ -1933,7 +1935,7 @@
static void
ECompMgrInit(void)
{
- int events, errors;
+ int events, errors, major, minor;
if (!XDamageQueryExtension(disp, &events, &errors))
{
@@ -1941,6 +1943,15 @@
goto done;
}
+ if (!XDamageQueryExtension(disp, &major, &minor))
+ {
+ Conf_compmgr.mode = ECOMPMGR_MODE_OFF;
+ goto done;
+ }
+#if HAS_NAME_WINDOW_PIXMAP
+ Mode_compmgr.have_name_pixmap = (major > 0 || minor >= 2);
+#endif
+
if (Conf_compmgr.args)
{
switch (Conf_compmgr.args[0])
===================================================================
RCS file: /cvsroot/enlightenment/e16/e/src/Attic/ecompmgr.h,v
retrieving revision 1.1.2.3
retrieving revision 1.1.2.4
diff -u -3 -r1.1.2.3 -r1.1.2.4
--- ecompmgr.h 11 Dec 2004 15:51:34 -0000 1.1.2.3
+++ ecompmgr.h 14 Dec 2004 22:20:39 -0000 1.1.2.4
@@ -5,10 +5,9 @@
#if USE_COMPOSITE
void ECompMgrWinChangeOpacity(EObj * eo, unsigned int opacity);
-Pixmap ECompMgrWinGetPixmap(EObj * eo);
+Pixmap ECompMgrWinGetPixmap(const EObj * eo);
#else
-#define ECompMgrWinChangeOpacity(eo, opacity)
-#define ECompMgrWinGetPixmap(eo) None
+#define ECompMgrWinChangeOpacity(eo, opacity)
#endif
#endif /* _ECOMPMGR_H */
===================================================================
RCS file: /cvsroot/enlightenment/e16/e/src/Attic/eobj.c,v
retrieving revision 1.1.2.4
retrieving revision 1.1.2.5
diff -u -3 -r1.1.2.4 -r1.1.2.5
--- eobj.c 9 Dec 2004 22:07:34 -0000 1.1.2.4
+++ eobj.c 14 Dec 2004 22:20:39 -0000 1.1.2.5
@@ -21,6 +21,7 @@
* CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/
#include "E.h"
+#include "ecompmgr.h"
const char *
EobjGetName(const EObj * eo)
@@ -44,6 +45,17 @@
return (eo->sticky) ? DesksGetCurrent() : eo->desk;
}
+Pixmap
+EobjGetPixmap(const EObj * eo)
+{
+ Pixmap pmap = None;
+
+#if USE_COMPOSITE
+ pmap = ECompMgrWinGetPixmap(eo);
+#endif
+ return pmap;
+}
+
int
EobjSetDesk(EObj * eo, int desk)
{
===================================================================
RCS file: /cvsroot/enlightenment/e16/e/src/iconify.c,v
retrieving revision 1.116.2.26
retrieving revision 1.116.2.27
diff -u -3 -r1.116.2.26 -r1.116.2.27
--- iconify.c 11 Dec 2004 15:51:35 -0000 1.116.2.26
+++ iconify.c 14 Dec 2004 22:20:39 -0000 1.116.2.27
@@ -717,6 +717,7 @@
int w, h, scale;
Iconbox *ib;
Imlib_Image *im;
+ Drawable draw;
if (!EwinIsMapped(ewin))
return;
@@ -743,12 +744,32 @@
w = 4;
if (h < 4)
h = 4;
+ if (w > EoGetW(ewin) || h > EoGetH(ewin))
+ {
+ w = EoGetW(ewin);
+ h = EoGetH(ewin);
+ }
- imlib_context_set_drawable(EoGetWin(ewin));
- im = imlib_create_scaled_image_from_drawable(None, 0, 0, EoGetW(ewin),
- EoGetH(ewin), w, h, 1, 1);
- imlib_context_set_image(im);
- imlib_image_set_has_alpha(1); /* Should be set by imlib? */
+#if 0
+ /* FIXME - Need to fix mask */
+ draw = EoGetPixmap(ewin);
+ if (draw != None)
+ {
+ imlib_context_set_drawable(draw);
+ im = imlib_create_scaled_image_from_drawable(None, 0, 0, EoGetW(ewin),
+ EoGetH(ewin), w, h, 1, 0);
+ imlib_context_set_image(im);
+ }
+ else
+#endif
+ {
+ draw = EoGetWin(ewin);
+ imlib_context_set_drawable(draw);
+ im = imlib_create_scaled_image_from_drawable(None, 0, 0, EoGetW(ewin),
+ EoGetH(ewin), w, h, 1, 1);
+ imlib_context_set_image(im);
+ imlib_image_set_has_alpha(1); /* Should be set by imlib? */
+ }
ewin->icon_image = im;
ewin->icon_type = EWIN_ICON_TYPE_SNAP;
}
===================================================================
RCS file: /cvsroot/enlightenment/e16/e/src/ipc.c,v
retrieving revision 1.174.2.38
retrieving revision 1.174.2.39
diff -u -3 -r1.174.2.38 -r1.174.2.39
--- ipc.c 9 Dec 2004 21:40:58 -0000 1.174.2.38
+++ ipc.c 14 Dec 2004 22:20:39 -0000 1.174.2.39
@@ -1375,8 +1375,11 @@
"WM_COMMAND %s\n"
"WM_CLIENT_MACHINE %s\n"
"Client window %#10lx x,y %4i,%4i wxh %4ix%4i\n"
- "Frame window %#10lx x,y %4i,%4i wxh %4ix%4i\n"
"Container window %#10lx\n"
+ "Frame window %#10lx x,y %4i,%4i wxh %4ix%4i\n"
+#if USE_COMPOSITE
+ "Named pixmap %#10lx\n"
+#endif
"Border %s lrtb %i,%i,%i,%i\n"
"Icon window, pixmap, mask %#10lx, %#10lx, %#10lx\n"
"Is group leader %i Window group leader %#lx Client leader
%#10lx\n"
@@ -1400,10 +1403,15 @@
SS(ewin->icccm.wm_machine),
ewin->client.win,
ewin->client.x, ewin->client.y, ewin->client.w, ewin->client.h,
- EoGetWin(ewin), EoGetX(ewin), EoGetY(ewin), EoGetW(ewin),
- EoGetH(ewin), ewin->win_container, border->name,
- border->border.left, border->border.right, border->border.top,
- border->border.bottom, ewin->client.icon_win,
+ ewin->win_container,
+ EoGetWin(ewin),
+ EoGetX(ewin), EoGetY(ewin), EoGetW(ewin), EoGetH(ewin),
+#if USE_COMPOSITE
+ EoGetPixmap(ewin),
+#endif
+ border->name, border->border.left, border->border.right,
+ border->border.top, border->border.bottom,
+ ewin->client.icon_win,
ewin->client.icon_pmap, ewin->client.icon_mask,
ewin->client.is_group_leader, ewin->client.group,
ewin->client.client_leader, ewin->has_transients,
-------------------------------------------------------
SF email is sponsored by - The IT Product Guide
Read honest & candid reviews on hundreds of IT Products from real users.
Discover which products truly live up to the hype. Start reading now.
http://productguide.itmanagersjournal.com/
_______________________________________________
enlightenment-cvs mailing list
[EMAIL PROTECTED]
https://lists.sourceforge.net/lists/listinfo/enlightenment-cvs