summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorHannes Janetzek <hannes.janetzek@gmail.com>2009-10-05 23:54:53 +0000
committerHannes Janetzek <hannes.janetzek@gmail.com>2009-10-05 23:54:53 +0000
commita26cde7b3d8f6884e0ec1fed58451bcd39c8b430 (patch)
tree64510f7de749a51a05b7364f92f5188e2bed5bb6
parent07e0c8b22bb1924bff90886de5bcc8ff8b43d94b (diff)
downloadeterm-a26cde7b3d8f6884e0ec1fed58451bcd39c8b430.tar.gz
check wm supporting hints for mwm:
make borderless also work with window managers that do not pretend to be mwm SVN revision: 42896
-rw-r--r--src/windows.c49
1 files changed, 44 insertions, 5 deletions
diff --git a/src/windows.c b/src/windows.c
index da712d5..4a0d74a 100644
--- a/src/windows.c
+++ b/src/windows.c
@@ -363,6 +363,46 @@ set_pointer_colors(const char *fg_name, const char *bg_name)
XRecolorCursor(Xdisplay, TermWin_cursor, &fg, &bg);
}
+int
+check_mwm_supported(void)
+{
+ Atom prop, mwm_prop, type_ret;
+ unsigned char *prop_ret;
+ unsigned long bytes_after, num_ret;
+ int format_ret, num, i, supported = 0;
+
+ /* check whether wm support mwm hint */
+ prop = XInternAtom(Xdisplay, "_NET_SUPPORTED", True);
+ mwm_prop = XInternAtom(Xdisplay, "_MOTIF_WM_HINTS", True);
+
+ if ((prop != None) && (mwm_prop != None)) {
+ prop_ret = NULL;
+ if (XGetWindowProperty(Xdisplay, Xroot, prop, 0, 0x7fffffff, False,
+ XA_ATOM, &type_ret, &format_ret, &num_ret,
+ &bytes_after, &prop_ret) == Success) {
+
+ if ((type_ret == XA_ATOM) &&
+ (format_ret == 32) &&
+ (num_ret && prop_ret))
+ {
+ for (i = 0; i < num_ret; i++)
+ if (mwm_prop == ((unsigned long*)prop_ret)[i])
+ supported = 1;
+ }
+ if (prop_ret)
+ XFree(prop_ret);
+ }
+ }
+ /* check whether wm is mwm */
+ if (!supported) {
+ prop = XInternAtom(Xdisplay, "_MOTIF_WM_INFO", True);
+ if (prop != None) {
+ supported = 1;
+ }
+ }
+ return supported;
+}
+
/* Create_Windows() - Open and map the window */
void
Create_Windows(int argc, char *argv[])
@@ -378,14 +418,13 @@ Create_Windows(int argc, char *argv[])
MWMHints mwmhints;
if (BITFIELD_IS_SET(eterm_options, ETERM_OPTIONS_BORDERLESS)) {
- prop = XInternAtom(Xdisplay, "_MOTIF_WM_INFO", True);
- if (prop == None) {
+ if (check_mwm_supported()) {
+ mwmhints.flags = MWM_HINTS_DECORATIONS;
+ mwmhints.decorations = 0;
+ } else {
libast_print_warning("Window Manager does not support MWM hints. Bypassing window manager control for borderless window.\n");
Attributes.override_redirect = TRUE;
mwmhints.flags = 0;
- } else {
- mwmhints.flags = MWM_HINTS_DECORATIONS;
- mwmhints.decorations = 0;
}
} else {
mwmhints.flags = 0;