From ddc84d0a4abfe46b6cfac00340d1ad88e6a28009 Mon Sep 17 00:00:00 2001 From: Robert A Basch Date: Mon, 27 Sep 2004 11:18:42 +0000 Subject: Set properties to work better under metacity, per the extended window manager hints spec: 1) Set _NET_WM_WINDOW_TYPE to _NET_WM_WINDOW_TYPE_UTILITY, so that metacity does not add zephyrgram windows to the task list. 2) Set _NET_WM_DESKTOP property to 0xFFFFFFFF by default, so that zephyrgram windws appear on all workspaces. Add the "allDesktops" resource allowing users to override this behavior. --- zwgc/X_gram.c | 21 +++++++++++++++++++++ zwgc/zwgc.1 | 13 +++++++++++++ 2 files changed, 34 insertions(+) (limited to 'zwgc') diff --git a/zwgc/X_gram.c b/zwgc/X_gram.c index 98f81da..37d78aa 100644 --- a/zwgc/X_gram.c +++ b/zwgc/X_gram.c @@ -25,6 +25,7 @@ static const char rcsid_X_gram_c[] = "$Id$"; #include "xmark.h" #include #include +#include #include "zwgc.h" #include "X_driver.h" #include "X_fonts.h" @@ -62,6 +63,10 @@ static Window group_leader; /* In order to have transient windows, static XClassHint classhint; static XSetWindowAttributes xattributes; static unsigned long xattributes_mask; +static int set_all_desktops = True; +static Atom net_wm_desktop = None; +static Atom net_wm_window_type = None; +static Atom net_wm_window_type_utility = None; /* ICCCM note: * @@ -218,6 +223,14 @@ void x_gram_init(dpy) |LeaveWindowMask|Button1MotionMask |Button3MotionMask|StructureNotifyMask); xattributes_mask = (CWBackPixel|CWBorderPixel|CWEventMask|CWCursor); + + set_all_desktops = get_bool_resource("allDesktops", "AllDesktops", True); + net_wm_desktop = XInternAtom(dpy, "_NET_WM_DESKTOP", False); + net_wm_window_type = XInternAtom(dpy, "_NET_WM_WINDOW_TYPE", False); + net_wm_window_type_utility = XInternAtom(dpy, + "_NET_WM_WINDOW_TYPE_UTILITY", + False); + temp = get_string_resource ("backingStore", "BackingStore"); if (!temp) return; @@ -261,6 +274,7 @@ void x_gram_create(dpy, gram, xalign, yalign, xpos, ypos, xsize, ysize, XSizeHints sizehints; XWMHints wmhints; XSetWindowAttributes attributes; + unsigned long all_desktops = 0xFFFFFFFF; extern void x_get_input(); /* @@ -311,6 +325,13 @@ void x_gram_create(dpy, gram, xalign, yalign, xpos, ypos, xsize, ysize, x_set_icccm_hints(dpy,w,title_name,icon_name,&sizehints,&wmhints,0); } + if (net_wm_window_type != None && net_wm_window_type_utility != None) + XChangeProperty(dpy, w, net_wm_window_type, XA_ATOM, 32, + PropModeReplace, + (unsigned char *) &net_wm_window_type_utility, 1); + if (set_all_desktops && net_wm_desktop != None) + XChangeProperty(dpy, w, net_wm_desktop, XA_CARDINAL, 32, + PropModeReplace, (unsigned char *) &all_desktops, 1); XSaveContext(dpy, w, desc_context, (caddr_t)gram); diff --git a/zwgc/zwgc.1 b/zwgc/zwgc.1 index 880d2ad..f4e6b87 100644 --- a/zwgc/zwgc.1 +++ b/zwgc/zwgc.1 @@ -811,6 +811,19 @@ entirely. Transient Secondary transient determining value [default False] .TP +allDesktops +(logical) Primary value which determines if zephyrgram windows should +appear on all desktops, for those window managers which support multiple +desktops (sometimes referred to as workspaces). When this resource is +true (the default), +.I zwgc +sets the \fB_NET_WM_DESKTOP\fR property to 0xFFFFFFFF for each zephyrgram +window, indicating that it should appear on all desktops. +.TP +AllDesktops +Secondary value determining whether zephyrgram windows should appear +on all desktops. +.TP scrollDelete (logical) If true, scrolling over a zgram will cause it to be deleted -- cgit v1.2.3