Hi @ all,probiere gerade mit FvwmTransFocus (Modul für fvwm um Fenster an Hand des Focus transparent zu schalten, mit Hilfe von xcompmgr)
Funktioniert einwandfrei. Nun hat der Entwickler eine Funktion (ignoreWindow[0]) vorgesehen um bestimmte Fenster nicht transparent zu schalten (z.B für TV-Software) Sieht nehmlich nicht gut aus, wenn das Fernsehrbild halbtransparent ist ;-)
Die Funktion wird jedes mal von der Funktion transSet[1] gerufen und wenn Sie true zurück gibt wird das Fenster ignoriert. Die Entscheidung wird über !strncasecmp(class.res_class, "tvtime", 6) gemacht und klappt bei !strncasecmp(class.res_class, "xmms", 4) wunderbar nur halt bei tvtime nicht, da ist res_class null. Kann mir einer weiter helfen wo ich weiter suchen kann warum tvtime keine res_class liefert.
THX Marco
[0]
/* Checks whether the window should be ignored */
static int ignoreWindow(unsigned long int window) {
XClassHint class = {0, 0};
unsigned long int ignore, *children = 0;
unsigned int num;
/* Root window or no window */
if (!window) {
return 1;
}
/* Get class */
/* FVWM gives us a ID of a parent window which does not have a
* ClassHint so we need to find the child with ClassHint. At least
* that's what it looks like :) */
while (!XGetClassHint(display, window, &class)) {
if (!XQueryTree(display, window, &ignore, &ignore, &children,
&num)) {
debug("RETURN IF: %s; %s\n", class.res_name, class.res_class);
return 0;
} else if (num!=1) {
XFree((char*)children);
debug("RETURN ELSEIF: '%s'; %s %d\n", class.res_name,
class.res_class, num);
return 0;
} else {
window = children[0];
XFree((char*)children);
}
}
/* Ignore apps for watching TV */
num = !strncasecmp(class.res_class, "tvtime", 6);
/* Return */
debug("ClassHint: '%s'; '%s'%s\n", class.res_name, class.res_class,
num ? " (skipping)" : "");
XFree(class.res_name);
XFree(class.res_class);
return num;
}
[1]
/********** Sets translucency **********/
void transSet(unsigned long int window, double value) {
if (ignoreWindow(window)) {
return;
}
debug("Changing 0x%08lx's opacity to %lf\n", window, value);
if (value>=1) {
XDeleteProperty(display, window, XInternAtom(display, OPACITY,
False));
} else {
unsigned long opacity = value<=0 ? 0 : OPAQUE * value;
XChangeProperty(display, window, XInternAtom(display, OPACITY,
False),
XA_CARDINAL, 32, PropModeReplace,
(unsigned char *) &opacity, 1L);
}
}
--
Softwareentwicklung
marco@marcomartinez.de
www.marcomartinez.de
funk: +49 (178) 731 55 53
Diese Mail ist digital unterschrieben, Sie ist nur gültig mit dem folgenden Fingerprint:
This mail is digitally signed, it is only valid with the following Fingerprint:
MD5-Fingerprint: 70:D7:D8:73:F1:62:FF:02:9A:3F:D1:D4:82:84:9E:DA
Attachment:
smime.p7s
Description: S/MIME Cryptographic Signature