#ifdef OWN_WINDOW
if (own_window) {
- {
- /* Allow WM control of conky again. Shielding conky from the WM
- * via override redirect creates more problems than it's worth and
- * makes it impossible to use tools like devilspie to manage the
- * conky windows beyond the parameters we offer. ButtonPress
- * events are now explicitly forwarded to the desktop window. */
+
+ if ( !find_desktop_window( &window.root, &window.desktop ) )
+ return;
+
+ if (window.type == TYPE_OVERRIDE) {
+
+ /*
+ An override_redirect True window. No WM hints or button processing needed.
+ */
+ XSetWindowAttributes attrs = {
+ ParentRelative,0L,0,0L,0,0,Always,0L,0L,False,
+ StructureNotifyMask|ExposureMask,
+ 0L,
+ True,
+ 0,0 };
+
+ /* Parent is desktop window (which might be a child of root) */
+ window.window = XCreateWindow(display,
+ window.desktop,
+ window.x, window.y, w, h, 0,
+ CopyFromParent,
+ InputOutput,
+ CopyFromParent,
+ CWBackPixel|CWOverrideRedirect,
+ &attrs);
+
+ XLowerWindow(display, window.window);
+
+ fprintf(stderr, "Conky: window type - override\n"); fflush(stderr);
+
+ }
+
+ else { /* window.type != TYPE_OVERRIDE */
+
+ /*
+ A window managed by the window manager. Process hints and buttons.
+ */
XSetWindowAttributes attrs = {
ParentRelative,0L,0,0L,0,0,Always,0L,0L,False,
- StructureNotifyMask|ExposureMask|ButtonPressMask,
- 0L,False,0,0 };
+ StructureNotifyMask|ExposureMask|ButtonPressMask|ButtonReleaseMask,
+ 0L,
+ False,
+ 0,0 };
XClassHint classHint;
XWMHints wmHint;
Atom xa;
char window_title[256];
- /* We want to parent the window to the root so it's under WM control,
- * but we want to forward button clicks to the desktop window for menus.
- * On some desktop systems, the desktop window != root window. */
- if ( !find_desktop_window( &window.root, &window.desktop ) )
- return;
-
- window.window = XCreateWindow(display, window.root,
- window.x, window.y, w, h, 0,
- CopyFromParent,
- InputOutput,
- CopyFromParent,
- CWBackPixel|CWOverrideRedirect,
- &attrs);
-
- fprintf(stderr, "Conky: drawing to created window (%lx)\n", window.window);
- fflush(stderr);
+ /* Parent is root window so WM can take control */
+ window.window = XCreateWindow(display,
+ window.root,
+ window.x, window.y, w, h, 0,
+ CopyFromParent,
+ InputOutput,
+ CopyFromParent,
+ CWBackPixel|CWOverrideRedirect,
+ &attrs);
classHint.res_name = window.wm_class_name;
classHint.res_class = classHint.res_name;
prop = ATOM(_NET_WM_WINDOW_TYPE_DESKTOP);
fprintf(stderr, "Conky: window type - desktop\n"); fflush(stderr);
}
- break;
-
+ break;
case TYPE_NORMAL:
default:
{
}
}
- XMapWindow(display, window.window);
+ } /* else { window.type != TYPE_OVERRIDE */
+
+ fprintf(stderr, "Conky: drawing to created window (%lx)\n", window.window);
+ fflush(stderr);
+
+ XMapWindow(display, window.window);
- }
- } else
+ } else /* if (own_window) { */
#endif
/* root / desktop window */
{
XSelectInput(display, window.window, ExposureMask
#ifdef OWN_WINDOW
| (own_window
- ? (StructureNotifyMask | PropertyChangeMask | ButtonPressMask) : 0)
+ ? (StructureNotifyMask | PropertyChangeMask |
+ ButtonPressMask | ButtonReleaseMask) : 0)
#endif
);
}