Netsupport
hi
how do i use net support software in windows ? because my macbook pro retina haven't LAN port!!
thank you
then use a USB or Thunderbolt to Ethernet adapter.
What did NetSupport say when you contacted them for support?
Similar Messages
-
Could not start NetSupport Manager Client For MacOS X because the lice
Could not start NetSupport Manager Client For MacOS X because the licence expired
"Could not start NetSupport Manager Client For MacOS X because the license file has expired."
I have a suspicion the above is a result of an old version of a program from a previous version of MACOS having been migrated, even from a PPC machine (PB17 to be exact).
My issue is how to fix it. What is the exact programme in error? What do i delete?
I have even upgraded to Leopard and the problem migrates to that(!) So clearly I have to manually sort this out. But how?
Many thanks
Anthony
reposted original 19/nov/2007 unansweredNetSupport Manager's web site would appear to be here (found via a quick web search):
http://www.netsupportmanager.com/
They should be able to tell you how to install their product, if the download doesn't contain an uninstaller (I'm not going to register with them just to find out).
Regards -
Could not start NetSupport Manager Client For MacOS X because the license e
"Could not start NetSupport Manager Client For MacOS X because the license file has expired."
I have a suspicion the above is a result of an old version of a program from a previous version of MACOS having been migrated, even from a PPC machine (PB17 to be exact).
My issue is how to fix it. What is the exact programme in error? What do i delete?
I have even upgraded to Leopard and the problem migrates to that(!) So clearly I have to manually sort this out. But how?
Many thanks
AnthonyNetSupport Manager's web site would appear to be here (found via a quick web search):
http://www.netsupportmanager.com/
They should be able to tell you how to install their product, if the download doesn't contain an uninstaller (I'm not going to register with them just to find out).
Regards -
Has anyone worked with NetSupport and Labview together?
Hello,
I am looking for some info on NetSupport (remote desktop software) and LabVIEW together, we run a monitoring station using NetSupport to log into different locations and I have built programs for analyzing data after it has been transfered from the NetSupport login but was looking for some capabilities to integrate some functionality between the two programs, maybe even view the NetSupport login sessions via LabVIEW. is this possilbe and is it a good/bad idea.
thanksHi Jordan,
Actually I am trying to connect to a remote server to view and possibly transfer files similar to a remote desktop connection. Ideally I would have a program that would open .csv files and analyze the data, we have been using NetSupport to connect and then doing a file transfer then running an application (labview) to open the file and analyze, however It would be nice to do this without having to connect and then transfer the files and then running the app. Can I build an app that will be able to connect to remote servers and open the files? does this make sense or am I rambling\repeating myself
Thanks in advance -
Dwm 5.9 Compilation issues
Ok guys, I really need your help.
I am currently with dwm 5.8.2 (everything's fine) and I downloaded 5.9 via ABS.
I launched a makepkg under ~/dwm. And next, I tried to apply this patch called pertag2. diff: https://github.com/simongmzlj/dwmhacks/ … rtag2.diff
It succeeded. Used:
patch -p1 < pertag2.diff
And I modified my config.h as jokerboy suggested me here: https://bbs.archlinux.org/viewtopic.php … 45#p960545
I haven't others patches.
But when I try to compile it, I got many errors messages.
dwm build options:
CFLAGS = -std=c99 -pedantic -Wall -Os -I. -I/usr/include -I/usr/include/X11 -DVERSION="5.9" -DXINERAMA
LDFLAGS = -s -L/usr/lib -lc -L/usr/lib/X11 -lX11 -L/usr/lib/X11 -lXinerama
CC = cc
CC dwm.c
In file included from dwm.c:293:0:
config.h:31:16: erreur: ‘tile’ undeclared here (not in a function)
dwm.c: In function ‘buttonpress’:
dwm.c:450:9: erreur: request for member ‘name’ in something not a structure or union
dwm.c:450:9: erreur: request for member ‘name’ in something not a structure or union
dwm.c:450:4: attention : passing argument 1 of ‘strlen’ from incompatible pointer type [enabled by default]
/usr/include/string.h:399:15: note: expected ‘const char *’ but argument is of type ‘const struct Layout *’
dwm.c:450:4: attention : passing argument 1 of ‘textnw’ from incompatible pointer type [enabled by default]
dwm.c:236:12: note: expected ‘const char *’ but argument is of type ‘const struct Layout *’
dwm.c: In function ‘createmon’:
dwm.c:686:29: erreur: request for member ‘mfact’ in something not a structure or union
dwm.c:686:36: attention : comparaison ordonnée de pointeur avec le zéro entier [-pedantic]
dwm.c:686:61: erreur: request for member ‘mfact’ in something not a structure or union
dwm.c:686:48: erreur: non concordance de type dans une expression conditionnelle
dwm.c:686:16: erreur: incompatible types when assigning to type ‘double’ from type ‘const struct Layout *’
dwm.c:686:3: attention : statement with no effect [-Wunused-value]
dwm.c:687:31: erreur: request for member ‘nmaster’ in something not a structure or union
dwm.c:687:40: attention : comparaison ordonnée de pointeur avec le zéro entier [-pedantic]
dwm.c:687:46: erreur: ‘nmaster’ undeclared (first use in this function)
dwm.c:687:46: note: each undeclared identifier is reported only once for each function it appears in
dwm.c:687:67: erreur: request for member ‘nmaster’ in something not a structure or union
dwm.c:687:18: attention : assignment makes integer from pointer without a cast [enabled by default]
dwm.c:688:26: erreur: request for member ‘layout’ in something not a structure or union
dwm.c: In function ‘drawbar’:
dwm.c:767:10: erreur: request for member ‘name’ in something not a structure or union
dwm.c:767:10: erreur: request for member ‘name’ in something not a structure or union
dwm.c:767:3: attention : passing argument 1 of ‘strlen’ from incompatible pointer type [enabled by default]
/usr/include/string.h:399:15: note: expected ‘const char *’ but argument is of type ‘const struct Layout *’
dwm.c:767:3: attention : passing argument 1 of ‘textnw’ from incompatible pointer type [enabled by default]
dwm.c:236:12: note: expected ‘const char *’ but argument is of type ‘const struct Layout *’
dwm.c:769:19: erreur: request for member ‘name’ in something not a structure or union
dwm.c:769:3: attention : passing argument 1 of ‘drawtext’ from incompatible pointer type [enabled by default]
dwm.c:190:13: note: expected ‘const char *’ but argument is of type ‘const struct Layout *’
dwm.c: Hors de toute fonction :
dwm.c:1550:1: attention : ‘setnmaster’ defined but not used [-Wunused-function]
dwm.c:1539:1: attention : ‘incnmaster’ defined but not used [-Wunused-function]
dwm.c:1691:1: attention : ‘ntile’ defined but not used [-Wunused-function]
make: *** [dwm.o] Erreur 1
Here my config.h:
/* See LICENSE file for copyright and license details. */
/* appearance */
static const char font[] = "-*-terminus-medium-r-*-*-16-*-*-*-*-*-*-*";
static const char normbordercolor[] = "#cccccc";
static const char normbgcolor[] = "#cccccc";
static const char normfgcolor[] = "#000000";
static const char selbordercolor[] = "#0066ff";
static const char selbgcolor[] = "#0066ff";
static const char selfgcolor[] = "#ffffff";
static const unsigned int borderpx = 1; /* border pixel of windows */
static const unsigned int snap = 32; /* snap pixel */
static const Bool showbar = True; /* False means no bar */
static const Bool topbar = True; /* False means bottom bar */
static const Rule rules[] = {
/* class instance title tags mask isfloating monitor */
{ "Gimp", NULL, NULL, 0, True, -1 },
{ "Firefox", NULL, NULL, 1 << 8, False, -1 },
/* layout(s) */
static const int nmaster = 1; /* clients in the master area */
static const float mfact = 0.55; /* factor of master area size [0.05..0.95] */
static const Bool resizehints = True; /* True means respect size hints in tiled resizals */
static const Layout layouts[] = {
/* symbol arrange function */
{ "[]=", tile }, /* first entry is default */
{ "><>", NULL }, /* no layout function means floating behavior */
{ "[M]", monocle },
{ "[N]", ntile },
/* tagging */
static const Tag tags[] = {
/* name layout mfact nmaster */
{ "1", &layouts[0], -1, -1 },
{ "2", &layouts[1], -1, -1 },
{ "3", &layouts[2], -1, -1 },
{ "4", &layouts[3], 0.40, -1 },
{ "5", &layouts[0], -1, -1 },
{ "6", &layouts[0], -1, -1 },
{ "7", &layouts[0], -1, -1 },
{ "8", &layouts[0], -1, -1 },
{ "9", &layouts[0], -1, -1 },
/* key definitions */
#define MODKEY Mod1Mask
#define TAGKEYS(KEY,TAG) \
{ MODKEY, KEY, view, {.ui = 1 << TAG} }, \
{ MODKEY|ControlMask, KEY, toggleview, {.ui = 1 << TAG} }, \
{ MODKEY|ShiftMask, KEY, tag, {.ui = 1 << TAG} }, \
{ MODKEY|ControlMask|ShiftMask, KEY, toggletag, {.ui = 1 << TAG} },
/* helper for spawning shell commands in the pre dwm-5.0 fashion */
#define SHCMD(cmd) { .v = (const char*[]){ "/bin/sh", "-c", cmd, NULL } }
/* commands */
static const char *dmenucmd[] = { "dmenu_run", "-fn", font, "-nb", normbgcolor, "-nf", normfgcolor, "-sb", selbgcolor, "-sf", selfgcolor, NULL };
static const char *termcmd[] = { "uxterm", NULL };
static Key keys[] = {
/* modifier key function argument */
{ MODKEY, XK_p, spawn, {.v = dmenucmd } },
{ MODKEY|ShiftMask, XK_Return, spawn, {.v = termcmd } },
{ MODKEY, XK_b, togglebar, {0} },
{ MODKEY, XK_j, focusstack, {.i = +1 } },
{ MODKEY, XK_k, focusstack, {.i = -1 } },
{ MODKEY, XK_a, incnmaster, {.i = +1 } },
{ MODKEY, XK_z, incnmaster, {.i = -1 } },
{ MODKEY, XK_h, setmfact, {.f = -0.05} },
{ MODKEY, XK_l, setmfact, {.f = +0.05} },
{ MODKEY, XK_Return, zoom, {0} },
{ MODKEY, XK_Tab, view, {0} },
{ MODKEY|ShiftMask, XK_c, killclient, {0} },
{ MODKEY, XK_t, setlayout, {.v = &layouts[0]} },
{ MODKEY, XK_f, setlayout, {.v = &layouts[1]} },
{ MODKEY, XK_m, setlayout, {.v = &layouts[2]} },
{ MODKEY, XK_n, setlayout, {.v = &layouts[3]} },
{ MODKEY, XK_space, setlayout, {0} },
{ MODKEY|ShiftMask, XK_space, togglefloating, {0} },
{ MODKEY, XK_0, view, {.ui = ~0 } },
{ MODKEY|ShiftMask, XK_0, tag, {.ui = ~0 } },
{ MODKEY, XK_comma, focusmon, {.i = -1 } },
{ MODKEY, XK_period, focusmon, {.i = +1 } },
{ MODKEY|ShiftMask, XK_comma, tagmon, {.i = -1 } },
{ MODKEY|ShiftMask, XK_period, tagmon, {.i = +1 } },
TAGKEYS( XK_1, 0)
TAGKEYS( XK_2, 1)
TAGKEYS( XK_3, 2)
TAGKEYS( XK_4, 3)
TAGKEYS( XK_5, 4)
TAGKEYS( XK_6, 5)
TAGKEYS( XK_7, 6)
TAGKEYS( XK_8, 7)
TAGKEYS( XK_9, 8)
{ MODKEY|ShiftMask, XK_q, quit, {0} },
/* button definitions */
/* click can be ClkLtSymbol, ClkStatusText, ClkWinTitle, ClkClientWin, or ClkRootWin */
static Button buttons[] = {
/* click event mask button function argument */
{ ClkLtSymbol, 0, Button1, setlayout, {0} },
{ ClkLtSymbol, 0, Button3, setlayout, {.v = &layouts[2]} },
{ ClkWinTitle, 0, Button2, zoom, {0} },
{ ClkStatusText, 0, Button2, spawn, {.v = termcmd } },
{ ClkClientWin, MODKEY, Button1, movemouse, {0} },
{ ClkClientWin, MODKEY, Button2, togglefloating, {0} },
{ ClkClientWin, MODKEY, Button3, resizemouse, {0} },
{ ClkTagBar, 0, Button1, view, {0} },
{ ClkTagBar, 0, Button3, toggleview, {0} },
{ ClkTagBar, MODKEY, Button1, tag, {0} },
{ ClkTagBar, MODKEY, Button3, toggletag, {0} },
dwm.c
/* See LICENSE file for copyright and license details.
* dynamic window manager is designed like any other X client as well. It is
* driven through handling X events. In contrast to other X clients, a window
* manager selects for SubstructureRedirectMask on the root window, to receive
* events about window (dis-)appearance. Only one X connection at a time is
* allowed to select for this event mask.
* The event handlers of dwm are organized in an array which is accessed
* whenever a new event has been fetched. This allows event dispatching
* in O(1) time.
* Each child of the root window is called a client, except windows which have
* set the override_redirect flag. Clients are organized in a linked client
* list on each monitor, the focus history is remembered through a stack list
* on each monitor. Each client contains a bit array to indicate the tags of a
* client.
* Keys and tagging rules are organized as arrays and defined in config.h.
* To understand everything else, start reading main().
#include <errno.h>
#include <locale.h>
#include <stdarg.h>
#include <signal.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <sys/types.h>
#include <sys/wait.h>
#include <X11/cursorfont.h>
#include <X11/keysym.h>
#include <X11/Xatom.h>
#include <X11/Xlib.h>
#include <X11/Xproto.h>
#include <X11/Xutil.h>
#ifdef XINERAMA
#include <X11/extensions/Xinerama.h>
#endif /* XINERAMA */
/* macros */
#define BUTTONMASK (ButtonPressMask|ButtonReleaseMask)
#define CLEANMASK(mask) (mask & ~(numlockmask|LockMask) & (ShiftMask|ControlMask|Mod1Mask|Mod2Mask|Mod3Mask|Mod4Mask|Mod5Mask))
#define INRECT(X,Y,RX,RY,RW,RH) ((X) >= (RX) && (X) < (RX) + (RW) && (Y) >= (RY) && (Y) < (RY) + (RH))
#define ISVISIBLE(C) ((C->tags & C->mon->tagset[C->mon->seltags]))
#define LENGTH(X) (sizeof X / sizeof X[0])
#define MAX(A, B) ((A) > (B) ? (A) : (B))
#define MIN(A, B) ((A) < (B) ? (A) : (B))
#define MOUSEMASK (BUTTONMASK|PointerMotionMask)
#define WIDTH(X) ((X)->w + 2 * (X)->bw)
#define HEIGHT(X) ((X)->h + 2 * (X)->bw)
#define TAGMASK ((1 << LENGTH(tags)) - 1)
#define TEXTW(X) (textnw(X, strlen(X)) + dc.font.height)
/* enums */
enum { CurNormal, CurResize, CurMove, CurLast }; /* cursor */
enum { ColBorder, ColFG, ColBG, ColLast }; /* color */
enum { NetSupported, NetWMName, NetWMState,
NetWMFullscreen, NetActiveWindow, NetLast }; /* EWMH atoms */
enum { WMProtocols, WMDelete, WMState, WMTakeFocus, WMLast }; /* default atoms */
enum { ClkTagBar, ClkLtSymbol, ClkStatusText, ClkWinTitle,
ClkClientWin, ClkRootWin, ClkLast }; /* clicks */
typedef union {
int i;
unsigned int ui;
float f;
const void *v;
} Arg;
typedef struct {
unsigned int click;
unsigned int mask;
unsigned int button;
void (*func)(const Arg *arg);
const Arg arg;
} Button;
typedef struct Monitor Monitor;
typedef struct Client Client;
struct Client {
char name[256];
float mina, maxa;
int x, y, w, h;
int oldx, oldy, oldw, oldh;
int basew, baseh, incw, inch, maxw, maxh, minw, minh;
int bw, oldbw;
unsigned int tags;
Bool isfixed, isfloating, isurgent, neverfocus, oldstate, isfullscreen;
Client *next;
Client *snext;
Monitor *mon;
Window win;
typedef struct {
int x, y, w, h;
unsigned long norm[ColLast];
unsigned long sel[ColLast];
Drawable drawable;
GC gc;
struct {
int ascent;
int descent;
int height;
XFontSet set;
XFontStruct *xfont;
} font;
} DC; /* draw context */
typedef struct {
unsigned int mod;
KeySym keysym;
void (*func)(const Arg *);
const Arg arg;
} Key;
typedef struct {
const char *symbol;
void (*arrange)(Monitor *);
} Layout;
struct Monitor {
char ltsymbol[16];
int num;
int by; /* bar geometry */
int mx, my, mw, mh; /* screen size */
int wx, wy, ww, wh; /* window area */
unsigned int seltags;
unsigned int sellt;
unsigned int tagset[2];
Bool showbar;
Bool topbar;
Client *clients;
Client *sel;
Client *stack;
Monitor *next;
Window barwin;
const Layout *lt[2];
int curtag;
int prevtag;
const Layout **lts;
double *mfacts;
int *nmasters;
typedef struct {
const char *name;
const Layout *layout;
float mfact;
int nmaster;
} Tag;
typedef struct {
const char *class;
const char *instance;
const char *title;
unsigned int tags;
Bool isfloating;
int monitor;
} Rule;
/* function declarations */
static void applyrules(Client *c);
static Bool applysizehints(Client *c, int *x, int *y, int *w, int *h, Bool interact);
static void arrange(Monitor *m);
static void arrangemon(Monitor *m);
static void attach(Client *c);
static void attachstack(Client *c);
static void buttonpress(XEvent *e);
static void checkotherwm(void);
static void cleanup(void);
static void cleanupmon(Monitor *mon);
static void clearurgent(Client *c);
static void clientmessage(XEvent *e);
static void configure(Client *c);
static void configurenotify(XEvent *e);
static void configurerequest(XEvent *e);
static Monitor *createmon(void);
static void destroynotify(XEvent *e);
static void detach(Client *c);
static void detachstack(Client *c);
static void die(const char *errstr, ...);
static Monitor *dirtomon(int dir);
static void drawbar(Monitor *m);
static void drawbars(void);
static void drawsquare(Bool filled, Bool empty, Bool invert, unsigned long col[ColLast]);
static void drawtext(const char *text, unsigned long col[ColLast], Bool invert);
static void enternotify(XEvent *e);
static void expose(XEvent *e);
static void focus(Client *c);
static void focusin(XEvent *e);
static void focusmon(const Arg *arg);
static void focusstack(const Arg *arg);
static unsigned long getcolor(const char *colstr);
static Bool getrootptr(int *x, int *y);
static long getstate(Window w);
static Bool gettextprop(Window w, Atom atom, char *text, unsigned int size);
static void grabbuttons(Client *c, Bool focused);
static void grabkeys(void);
static void initfont(const char *fontstr);
static void keypress(XEvent *e);
static void killclient(const Arg *arg);
static void manage(Window w, XWindowAttributes *wa);
static void mappingnotify(XEvent *e);
static void maprequest(XEvent *e);
static void monocle(Monitor *m);
static void movemouse(const Arg *arg);
static Client *nexttiled(Client *c);
static void pop(Client *);
static void propertynotify(XEvent *e);
static Monitor *ptrtomon(int x, int y);
static void quit(const Arg *arg);
static void resize(Client *c, int x, int y, int w, int h, Bool interact);
static void resizeclient(Client *c, int x, int y, int w, int h);
static void resizemouse(const Arg *arg);
static void restack(Monitor *m);
static void run(void);
static void scan(void);
static Bool sendevent(Client *c, Atom proto);
static void sendmon(Client *c, Monitor *m);
static void setclientstate(Client *c, long state);
static void setfocus(Client *c);
static void setlayout(const Arg *arg);
static void setmfact(const Arg *arg);
static void setnmaster(const Arg *arg);
static void incnmaster(const Arg *arg);
static void setup(void);
static void showhide(Client *c);
static void sigchld(int unused);
static void spawn(const Arg *arg);
static void tag(const Arg *arg);
static void tagmon(const Arg *arg);
static int textnw(const char *text, unsigned int len);
static void ntile(Monitor *);
static void togglebar(const Arg *arg);
static void togglefloating(const Arg *arg);
static void toggletag(const Arg *arg);
static void toggleview(const Arg *arg);
static void unfocus(Client *c, Bool setfocus);
static void unmanage(Client *c, Bool destroyed);
static void unmapnotify(XEvent *e);
static Bool updategeom(void);
static void updatebarpos(Monitor *m);
static void updatebars(void);
static void updatenumlockmask(void);
static void updatesizehints(Client *c);
static void updatestatus(void);
static void updatetitle(Client *c);
static void updatewmhints(Client *c);
static void view(const Arg *arg);
static Client *wintoclient(Window w);
static Monitor *wintomon(Window w);
static int xerror(Display *dpy, XErrorEvent *ee);
static int xerrordummy(Display *dpy, XErrorEvent *ee);
static int xerrorstart(Display *dpy, XErrorEvent *ee);
static void zoom(const Arg *arg);
/* variables */
static const char broken[] = "broken";
static char stext[256];
static int screen;
static int sw, sh; /* X display screen geometry width, height */
static int bh, blw = 0; /* bar geometry */
static int (*xerrorxlib)(Display *, XErrorEvent *);
static unsigned int numlockmask = 0;
static void (*handler[LASTEvent]) (XEvent *) = {
[ButtonPress] = buttonpress,
[ClientMessage] = clientmessage,
[ConfigureRequest] = configurerequest,
[ConfigureNotify] = configurenotify,
[DestroyNotify] = destroynotify,
[EnterNotify] = enternotify,
[Expose] = expose,
[FocusIn] = focusin,
[KeyPress] = keypress,
[MappingNotify] = mappingnotify,
[MapRequest] = maprequest,
[PropertyNotify] = propertynotify,
[UnmapNotify] = unmapnotify
static Atom wmatom[WMLast], netatom[NetLast];
static Bool running = True;
static Cursor cursor[CurLast];
static Display *dpy;
static DC dc;
static Monitor *mons = NULL, *selmon = NULL;
static Window root;
/* configuration, allows nested code to access above variables */
#include "config.h"
/* compile-time check if all tags fit into an unsigned int bit array. */
struct NumTags { char limitexceeded[LENGTH(tags) > 31 ? -1 : 1]; };
/* function implementations */
void
applyrules(Client *c) {
const char *class, *instance;
unsigned int i;
const Rule *r;
Monitor *m;
XClassHint ch = { 0 };
/* rule matching */
c->isfloating = c->tags = 0;
if(XGetClassHint(dpy, c->win, &ch)) {
class = ch.res_class ? ch.res_class : broken;
instance = ch.res_name ? ch.res_name : broken;
for(i = 0; i < LENGTH(rules); i++) {
r = &rules[i];
if((!r->title || strstr(c->name, r->title))
&& (!r->class || strstr(class, r->class))
&& (!r->instance || strstr(instance, r->instance)))
c->isfloating = r->isfloating;
c->tags |= r->tags;
for(m = mons; m && m->num != r->monitor; m = m->next);
if(m)
c->mon = m;
if(ch.res_class)
XFree(ch.res_class);
if(ch.res_name)
XFree(ch.res_name);
c->tags = c->tags & TAGMASK ? c->tags & TAGMASK : c->mon->tagset[c->mon->seltags];
Bool
applysizehints(Client *c, int *x, int *y, int *w, int *h, Bool interact) {
Bool baseismin;
Monitor *m = c->mon;
/* set minimum possible */
*w = MAX(1, *w);
*h = MAX(1, *h);
if(interact) {
if(*x > sw)
*x = sw - WIDTH(c);
if(*y > sh)
*y = sh - HEIGHT(c);
if(*x + *w + 2 * c->bw < 0)
*x = 0;
if(*y + *h + 2 * c->bw < 0)
*y = 0;
else {
if(*x > m->mx + m->mw)
*x = m->mx + m->mw - WIDTH(c);
if(*y > m->my + m->mh)
*y = m->my + m->mh - HEIGHT(c);
if(*x + *w + 2 * c->bw < m->mx)
*x = m->mx;
if(*y + *h + 2 * c->bw < m->my)
*y = m->my;
if(*h < bh)
*h = bh;
if(*w < bh)
*w = bh;
if(resizehints || c->isfloating) {
/* see last two sentences in ICCCM 4.1.2.3 */
baseismin = c->basew == c->minw && c->baseh == c->minh;
if(!baseismin) { /* temporarily remove base dimensions */
*w -= c->basew;
*h -= c->baseh;
/* adjust for aspect limits */
if(c->mina > 0 && c->maxa > 0) {
if(c->maxa < (float)*w / *h)
*w = *h * c->maxa + 0.5;
else if(c->mina < (float)*h / *w)
*h = *w * c->mina + 0.5;
if(baseismin) { /* increment calculation requires this */
*w -= c->basew;
*h -= c->baseh;
/* adjust for increment value */
if(c->incw)
*w -= *w % c->incw;
if(c->inch)
*h -= *h % c->inch;
/* restore base dimensions */
*w = MAX(*w + c->basew, c->minw);
*h = MAX(*h + c->baseh, c->minh);
if(c->maxw)
*w = MIN(*w, c->maxw);
if(c->maxh)
*h = MIN(*h, c->maxh);
return *x != c->x || *y != c->y || *w != c->w || *h != c->h;
void
arrange(Monitor *m) {
if(m)
showhide(m->stack);
else for(m = mons; m; m = m->next)
showhide(m->stack);
focus(NULL);
if(m)
arrangemon(m);
else for(m = mons; m; m = m->next)
arrangemon(m);
void
arrangemon(Monitor *m) {
strncpy(m->ltsymbol, m->lt[m->sellt]->symbol, sizeof m->ltsymbol);
if(m->lt[m->sellt]->arrange)
m->lt[m->sellt]->arrange(m);
restack(m);
void
attach(Client *c) {
c->next = c->mon->clients;
c->mon->clients = c;
void
attachstack(Client *c) {
c->snext = c->mon->stack;
c->mon->stack = c;
void
buttonpress(XEvent *e) {
unsigned int i, x, click;
Arg arg = {0};
Client *c;
Monitor *m;
XButtonPressedEvent *ev = &e->xbutton;
click = ClkRootWin;
/* focus monitor if necessary */
if((m = wintomon(ev->window)) && m != selmon) {
unfocus(selmon->sel, True);
selmon = m;
focus(NULL);
if(ev->window == selmon->barwin) {
i = x = 0;
do {
x += TEXTW(tags[i].name);
} while(ev->x >= x && ++i < LENGTH(tags));
if(i < LENGTH(tags)) {
click = ClkTagBar;
arg.ui = 1 << i;
else if(ev->x < x + blw)
click = ClkLtSymbol;
else if(ev->x > selmon->ww - TEXTW(stext))
click = ClkStatusText;
else
click = ClkWinTitle;
else if((c = wintoclient(ev->window))) {
focus(c);
click = ClkClientWin;
for(i = 0; i < LENGTH(buttons); i++)
if(click == buttons[i].click && buttons[i].func && buttons[i].button == ev->button
&& CLEANMASK(buttons[i].mask) == CLEANMASK(ev->state))
buttons[i].func(click == ClkTagBar && buttons[i].arg.i == 0 ? &arg : &buttons[i].arg);
void
checkotherwm(void) {
xerrorxlib = XSetErrorHandler(xerrorstart);
/* this causes an error if some other window manager is running */
XSelectInput(dpy, DefaultRootWindow(dpy), SubstructureRedirectMask);
XSync(dpy, False);
XSetErrorHandler(xerror);
XSync(dpy, False);
void
cleanup(void) {
Arg a = {.ui = ~0};
Layout foo = { "", NULL };
Monitor *m;
view(&a);
selmon->lt[selmon->sellt] = &foo;
for(m = mons; m; m = m->next)
while(m->stack)
unmanage(m->stack, False);
if(dc.font.set)
XFreeFontSet(dpy, dc.font.set);
else
XFreeFont(dpy, dc.font.xfont);
XUngrabKey(dpy, AnyKey, AnyModifier, root);
XFreePixmap(dpy, dc.drawable);
XFreeGC(dpy, dc.gc);
XFreeCursor(dpy, cursor[CurNormal]);
XFreeCursor(dpy, cursor[CurResize]);
XFreeCursor(dpy, cursor[CurMove]);
while(mons)
cleanupmon(mons);
XSync(dpy, False);
XSetInputFocus(dpy, PointerRoot, RevertToPointerRoot, CurrentTime);
void
cleanupmon(Monitor *mon) {
Monitor *m;
if(mon == mons)
mons = mons->next;
else {
for(m = mons; m && m->next != mon; m = m->next);
m->next = mon->next;
XUnmapWindow(dpy, mon->barwin);
XDestroyWindow(dpy, mon->barwin);
free(mon->mfacts);
free(mon->nmasters);
free(mon->lts);
free(mon);
void
clearurgent(Client *c) {
XWMHints *wmh;
c->isurgent = False;
if(!(wmh = XGetWMHints(dpy, c->win)))
return;
wmh->flags &= ~XUrgencyHint;
XSetWMHints(dpy, c->win, wmh);
XFree(wmh);
void
clientmessage(XEvent *e) {
XClientMessageEvent *cme = &e->xclient;
Client *c = wintoclient(cme->window);
if(!c)
return;
if(cme->message_type == netatom[NetWMState] && cme->data.l[1] == netatom[NetWMFullscreen]) {
if(cme->data.l[0] && !c->isfullscreen) {
XChangeProperty(dpy, cme->window, netatom[NetWMState], XA_ATOM, 32,
PropModeReplace, (unsigned char*)&netatom[NetWMFullscreen], 1);
c->isfullscreen = True;
c->oldstate = c->isfloating;
c->oldbw = c->bw;
c->bw = 0;
c->isfloating = True;
resizeclient(c, c->mon->mx, c->mon->my, c->mon->mw, c->mon->mh);
XRaiseWindow(dpy, c->win);
else {
XChangeProperty(dpy, cme->window, netatom[NetWMState], XA_ATOM, 32,
PropModeReplace, (unsigned char*)0, 0);
c->isfullscreen = False;
c->isfloating = c->oldstate;
c->bw = c->oldbw;
c->x = c->oldx;
c->y = c->oldy;
c->w = c->oldw;
c->h = c->oldh;
resizeclient(c, c->x, c->y, c->w, c->h);
arrange(c->mon);
else if(cme->message_type == netatom[NetActiveWindow]) {
if(!ISVISIBLE(c)) {
c->mon->seltags ^= 1;
c->mon->tagset[c->mon->seltags] = c->tags;
pop(c);
void
configure(Client *c) {
XConfigureEvent ce;
ce.type = ConfigureNotify;
ce.display = dpy;
ce.event = c->win;
ce.window = c->win;
ce.x = c->x;
ce.y = c->y;
ce.width = c->w;
ce.height = c->h;
ce.border_width = c->bw;
ce.above = None;
ce.override_redirect = False;
XSendEvent(dpy, c->win, False, StructureNotifyMask, (XEvent *)&ce);
void
configurenotify(XEvent *e) {
Monitor *m;
XConfigureEvent *ev = &e->xconfigure;
Bool dirty;
if(ev->window == root) {
dirty = (sw != ev->width);
sw = ev->width;
sh = ev->height;
if(updategeom() || dirty) {
if(dc.drawable != 0)
XFreePixmap(dpy, dc.drawable);
dc.drawable = XCreatePixmap(dpy, root, sw, bh, DefaultDepth(dpy, screen));
updatebars();
for(m = mons; m; m = m->next)
XMoveResizeWindow(dpy, m->barwin, m->wx, m->by, m->ww, bh);
arrange(NULL);
void
configurerequest(XEvent *e) {
Client *c;
Monitor *m;
XConfigureRequestEvent *ev = &e->xconfigurerequest;
XWindowChanges wc;
if((c = wintoclient(ev->window))) {
if(ev->value_mask & CWBorderWidth)
c->bw = ev->border_width;
else if(c->isfloating || !selmon->lt[selmon->sellt]->arrange) {
m = c->mon;
if(ev->value_mask & CWX)
c->x = m->mx + ev->x;
if(ev->value_mask & CWY)
c->y = m->my + ev->y;
if(ev->value_mask & CWWidth)
c->w = ev->width;
if(ev->value_mask & CWHeight)
c->h = ev->height;
if((c->x + c->w) > m->mx + m->mw && c->isfloating)
c->x = m->mx + (m->mw / 2 - c->w / 2); /* center in x direction */
if((c->y + c->h) > m->my + m->mh && c->isfloating)
c->y = m->my + (m->mh / 2 - c->h / 2); /* center in y direction */
if((ev->value_mask & (CWX|CWY)) && !(ev->value_mask & (CWWidth|CWHeight)))
configure(c);
if(ISVISIBLE(c))
XMoveResizeWindow(dpy, c->win, c->x, c->y, c->w, c->h);
else
configure(c);
else {
wc.x = ev->x;
wc.y = ev->y;
wc.width = ev->width;
wc.height = ev->height;
wc.border_width = ev->border_width;
wc.sibling = ev->above;
wc.stack_mode = ev->detail;
XConfigureWindow(dpy, ev->window, ev->value_mask, &wc);
XSync(dpy, False);
/* TODO Check how many times createmon is called */
Monitor *
createmon(void) {
Monitor *m;
int i, numtags = LENGTH(tags) + 1;
if(!(m = (Monitor *)calloc(1, sizeof(Monitor))))
die("fatal: could not malloc() %u bytes\n", sizeof(Monitor));
if(!(m->mfacts = calloc(sizeof(double), numtags)))
die("fatal: could not malloc() %u bytes\n", sizeof(double) * numtags);
if(!(m->nmasters = calloc(sizeof(int), numtags)))
die("fatal: could not malloc() %u bytes\n", sizeof(int) * numtags);
if(!(m->lts = calloc(sizeof(Layout *), numtags)))
die("fatal: could not malloc() %u bytes\n", sizeof(Layout *) * numtags);
m->tagset[0] = m->tagset[1] = 1;
m->showbar = showbar;
m->topbar = topbar;
m->curtag = m->prevtag = 1;
for(i = 1; i < numtags; i++) {
m->mfacts[i] = tags[i - 1].mfact < 0 ? mfact : tags[i - 1].mfact;
m->nmasters[i] = tags[i - 1].nmaster < 0 ? nmaster : tags[i - 1].nmaster;
m->lts[i] = tags[i - 1].layout;
m->lt[0] = m->lts[m->curtag];
m->lt[1] = &layouts[1 % LENGTH(layouts)];
strncpy(m->ltsymbol, m->lt[0]->symbol, sizeof m->ltsymbol);
return m;
void
destroynotify(XEvent *e) {
Client *c;
XDestroyWindowEvent *ev = &e->xdestroywindow;
if((c = wintoclient(ev->window)))
unmanage(c, True);
void
detach(Client *c) {
Client **tc;
for(tc = &c->mon->clients; *tc && *tc != c; tc = &(*tc)->next);
*tc = c->next;
void
detachstack(Client *c) {
Client **tc, *t;
for(tc = &c->mon->stack; *tc && *tc != c; tc = &(*tc)->snext);
*tc = c->snext;
if(c == c->mon->sel) {
for(t = c->mon->stack; t && !ISVISIBLE(t); t = t->snext);
c->mon->sel = t;
void
die(const char *errstr, ...) {
va_list ap;
va_start(ap, errstr);
vfprintf(stderr, errstr, ap);
va_end(ap);
exit(EXIT_FAILURE);
Monitor *
dirtomon(int dir) {
Monitor *m = NULL;
if(dir > 0) {
if(!(m = selmon->next))
m = mons;
else {
if(selmon == mons)
for(m = mons; m->next; m = m->next);
else
for(m = mons; m->next != selmon; m = m->next);
return m;
void
drawbar(Monitor *m) {
int x;
unsigned int i, occ = 0, urg = 0;
unsigned long *col;
Client *c;
for(c = m->clients; c; c = c->next) {
occ |= c->tags;
if(c->isurgent)
urg |= c->tags;
dc.x = 0;
for(i = 0; i < LENGTH(tags); i++) {
dc.w = TEXTW(tags[i].name);
col = m->tagset[m->seltags] & 1 << i ? dc.sel : dc.norm;
drawtext(tags[i].name, col, urg & 1 << i);
drawsquare(m == selmon && selmon->sel && selmon->sel->tags & 1 << i,
occ & 1 << i, urg & 1 << i, col);
dc.x += dc.w;
dc.w = blw = TEXTW(m->ltsymbol);
drawtext(m->ltsymbol, dc.norm, False);
dc.x += dc.w;
x = dc.x;
if(m == selmon) { /* status is only drawn on selected monitor */
dc.w = TEXTW(stext);
dc.x = m->ww - dc.w;
if(dc.x < x) {
dc.x = x;
dc.w = m->ww - x;
drawtext(stext, dc.norm, False);
else
dc.x = m->ww;
if((dc.w = dc.x - x) > bh) {
dc.x = x;
if(m->sel) {
col = m == selmon ? dc.sel : dc.norm;
drawtext(m->sel->name, col, False);
drawsquare(m->sel->isfixed, m->sel->isfloating, False, col);
else
drawtext(NULL, dc.norm, False);
XCopyArea(dpy, dc.drawable, m->barwin, dc.gc, 0, 0, m->ww, bh, 0, 0);
XSync(dpy, False);
void
drawbars(void) {
Monitor *m;
for(m = mons; m; m = m->next)
drawbar(m);
void
drawsquare(Bool filled, Bool empty, Bool invert, unsigned long col[ColLast]) {
int x;
XSetForeground(dpy, dc.gc, col[invert ? ColBG : ColFG]);
x = (dc.font.ascent + dc.font.descent + 2) / 4;
if(filled)
XFillRectangle(dpy, dc.drawable, dc.gc, dc.x+1, dc.y+1, x+1, x+1);
else if(empty)
XDrawRectangle(dpy, dc.drawable, dc.gc, dc.x+1, dc.y+1, x, x);
void
drawtext(const char *text, unsigned long col[ColLast], Bool invert) {
char buf[256];
int i, x, y, h, len, olen;
XSetForeground(dpy, dc.gc, col[invert ? ColFG : ColBG]);
XFillRectangle(dpy, dc.drawable, dc.gc, dc.x, dc.y, dc.w, dc.h);
if(!text)
return;
olen = strlen(text);
h = dc.font.ascent + dc.font.descent;
y = dc.y + (dc.h / 2) - (h / 2) + dc.font.ascent;
x = dc.x + (h / 2);
/* shorten text if necessary */
for(len = MIN(olen, sizeof buf); len && textnw(text, len) > dc.w - h; len--);
if(!len)
return;
memcpy(buf, text, len);
if(len < olen)
for(i = len; i && i > len - 3; buf[--i] = '.');
XSetForeground(dpy, dc.gc, col[invert ? ColBG : ColFG]);
if(dc.font.set)
XmbDrawString(dpy, dc.drawable, dc.font.set, dc.gc, x, y, buf, len);
else
XDrawString(dpy, dc.drawable, dc.gc, x, y, buf, len);
void
enternotify(XEvent *e) {
Client *c;
Monitor *m;
XCrossingEvent *ev = &e->xcrossing;
if((ev->mode != NotifyNormal || ev->detail == NotifyInferior) && ev->window != root)
return;
c = wintoclient(ev->window);
m = c ? c->mon : wintomon(ev->window);
if(m != selmon) {
unfocus(selmon->sel, True);
selmon = m;
else if(!c || c == selmon->sel)
return;
focus(c);
void
expose(XEvent *e) {
Monitor *m;
XExposeEvent *ev = &e->xexpose;
if(ev->count == 0 && (m = wintomon(ev->window)))
drawbar(m);
void
focus(Client *c) {
if(!c || !ISVISIBLE(c))
for(c = selmon->stack; c && !ISVISIBLE(c); c = c->snext);
/* was if(selmon->sel) */
if(selmon->sel && selmon->sel != c)
unfocus(selmon->sel, False);
if(c) {
if(c->mon != selmon)
selmon = c->mon;
if(c->isurgent)
clearurgent(c);
detachstack(c);
attachstack(c);
grabbuttons(c, True);
XSetWindowBorder(dpy, c->win, dc.sel[ColBorder]);
setfocus(c);
else
XSetInputFocus(dpy, root, RevertToPointerRoot, CurrentTime);
selmon->sel = c;
drawbars();
void
focusin(XEvent *e) { /* there are some broken focus acquiring clients */
XFocusChangeEvent *ev = &e->xfocus;
if(selmon->sel && ev->window != selmon->sel->win)
setfocus(selmon->sel);
void
focusmon(const Arg *arg) {
Monitor *m;
if(!mons->next)
return;
if((m = dirtomon(arg->i)) == selmon)
return;
unfocus(selmon->sel, True);
selmon = m;
focus(NULL);
void
focusstack(const Arg *arg) {
Client *c = NULL, *i;
if(!selmon->sel)
return;
if(arg->i > 0) {
for(c = selmon->sel->next; c && !ISVISIBLE(c); c = c->next);
if(!c)
for(c = selmon->clients; c && !ISVISIBLE(c); c = c->next);
else {
for(i = selmon->clients; i != selmon->sel; i = i->next)
if(ISVISIBLE(i))
c = i;
if(!c)
for(; i; i = i->next)
if(ISVISIBLE(i))
c = i;
if(c) {
focus(c);
restack(selmon);
unsigned long
getcolor(const char *colstr) {
Colormap cmap = DefaultColormap(dpy, screen);
XColor color;
if(!XAllocNamedColor(dpy, cmap, colstr, &color, &color))
die("error, cannot allocate color '%s'\n", colstr);
return color.pixel;
Bool
getrootptr(int *x, int *y) {
int di;
unsigned int dui;
Window dummy;
return XQueryPointer(dpy, root, &dummy, &dummy, x, y, &di, &di, &dui);
long
getstate(Window w) {
int format;
long result = -1;
unsigned char *p = NULL;
unsigned long n, extra;
Atom real;
if(XGetWindowProperty(dpy, w, wmatom[WMState], 0L, 2L, False, wmatom[WMState],
&real, &format, &n, &extra, (unsigned char **)&p) != Success)
return -1;
if(n != 0)
result = *p;
XFree(p);
return result;
Bool
gettextprop(Window w, Atom atom, char *text, unsigned int size) {
char **list = NULL;
int n;
XTextProperty name;
if(!text || size == 0)
return False;
text[0] = '\0';
XGetTextProperty(dpy, w, &name, atom);
if(!name.nitems)
return False;
if(name.encoding == XA_STRING)
strncpy(text, (char *)name.value, size - 1);
else {
if(XmbTextPropertyToTextList(dpy, &name, &list, &n) >= Success && n > 0 && *list) {
strncpy(text, *list, size - 1);
XFreeStringList(list);
text[size - 1] = '\0';
XFree(name.value);
return True;
void
grabbuttons(Client *c, Bool focused) {
updatenumlockmask();
unsigned int i, j;
unsigned int modifiers[] = { 0, LockMask, numlockmask, numlockmask|LockMask };
XUngrabButton(dpy, AnyButton, AnyModifier, c->win);
if(focused) {
for(i = 0; i < LENGTH(buttons); i++)
if(buttons[i].click == ClkClientWin)
for(j = 0; j < LENGTH(modifiers); j++)
XGrabButton(dpy, buttons[i].button,
buttons[i].mask | modifiers[j],
c->win, False, BUTTONMASK,
GrabModeAsync, GrabModeSync, None, None);
else
XGrabButton(dpy, AnyButton, AnyModifier, c->win, False,
BUTTONMASK, GrabModeAsync, GrabModeSync, None, None);
void
grabkeys(void) {
updatenumlockmask();
unsigned int i, j;
unsigned int modifiers[] = { 0, LockMask, numlockmask, numlockmask|LockMask };
KeyCode code;
XUngrabKey(dpy, AnyKey, AnyModifier, root);
for(i = 0; i < LENGTH(keys); i++) {
if((code = XKeysymToKeycode(dpy, keys[i].keysym)))
for(j = 0; j < LENGTH(modifiers); j++)
XGrabKey(dpy, code, keys[i].mod | modifiers[j], root,
True, GrabModeAsync, GrabModeAsync);
void
initfont(const char *fontstr) {
char *def, **missing;
int n;
missing = NULL;
dc.font.set = XCreateFontSet(dpy, fontstr, &missing, &n, &def);
if(missing) {
while(n--)
fprintf(stderr, "dwm: missing fontset: %s\n", missing[n]);
XFreeStringList(missing);
if(dc.font.set) {
XFontStruct **xfonts;
char **font_names;
dc.font.ascent = dc.font.descent = 0;
XExtentsOfFontSet(dc.font.set);
n = XFontsOfFontSet(dc.font.set, &xfonts, &font_names);
while(n--) {
dc.font.ascent = MAX(dc.font.ascent, (*xfonts)->ascent);
dc.font.descent = MAX(dc.font.descent,(*xfonts)->descent);
xfonts++;
else {
if(!(dc.font.xfont = XLoadQueryFont(dpy, fontstr))
&& !(dc.font.xfont = XLoadQueryFont(dpy, "fixed")))
die("error, cannot load font: '%s'\n", fontstr);
dc.font.ascent = dc.font.xfont->ascent;
dc.font.descent = dc.font.xfont->descent;
dc.font.height = dc.font.ascent + dc.font.descent;
#ifdef XINERAMA
static Bool
isuniquegeom(XineramaScreenInfo *unique, size_t n, XineramaScreenInfo *info) {
while(n--)
if(unique[n].x_org == info->x_org && unique[n].y_org == info->y_org
&& unique[n].width == info->width && unique[n].height == info->height)
return False;
return True;
#endif /* XINERAMA */
void
keypress(XEvent *e) {
unsigned int i;
KeySym keysym;
XKeyEvent *ev;
ev = &e->xkey;
keysym = XKeycodeToKeysym(dpy, (KeyCode)ev->keycode, 0);
for(i = 0; i < LENGTH(keys); i++)
if(keysym == keys[i].keysym
&& CLEANMASK(keys[i].mod) == CLEANMASK(ev->state)
&& keys[i].func)
keys[i].func(&(keys[i].arg));
void
killclient(const Arg *arg) {
if(!selmon->sel)
return;
if(!sendevent(selmon->sel, wmatom[WMDelete])) {
XGrabServer(dpy);
XSetErrorHandler(xerrordummy);
XSetCloseDownMode(dpy, DestroyAll);
XKillClient(dpy, selmon->sel->win);
XSync(dpy, False);
XSetErrorHandler(xerror);
XUngrabServer(dpy);
void
manage(Window w, XWindowAttributes *wa) {
Client *c, *t = NULL;
Window trans = None;
XWindowChanges wc;
if(!(c = calloc(1, sizeof(Client))))
die("fatal: could not malloc() %u bytes\n", sizeof(Client));
c->win = w;
updatetitle(c);
if(XGetTransientForHint(dpy, w, &trans) && (t = wintoclient(trans))) {
c->mon = t->mon;
c->tags = t->tags;
else {
c->mon = selmon;
applyrules(c);
/* geometry */
c->x = c->oldx = wa->x;
c->y = c->oldy = wa->y;
c->w = c->oldw = wa->width;
c->h = c->oldh = wa->height;
c->oldbw = wa->border_width;
if(c->w == c->mon->mw && c->h == c->mon->mh) {
c->isfloating = True;
c->x = c->mon->mx;
c->y = c->mon->my;
c->bw = 0;
else {
if(c->x + WIDTH(c) > c->mon->mx + c->mon->mw)
c->x = c->mon->mx + c->mon->mw - WIDTH(c);
if(c->y + HEIGHT(c) > c->mon->my + c->mon->mh)
c->y = c->mon->my + c->mon->mh - HEIGHT(c);
c->x = MAX(c->x, c->mon->mx);
/* only fix client y-offset, if the client center might cover the bar */
c->y = MAX(c->y, ((c->mon->by == 0) && (c->x + (c->w / 2) >= c->mon->wx)
&& (c->x + (c->w / 2) < c->mon->wx + c->mon->ww)) ? bh : c->mon->my);
c->bw = borderpx;
wc.border_width = c->bw;
XConfigureWindow(dpy, w, CWBorderWidth, &wc);
XSetWindowBorder(dpy, w, dc.norm[ColBorder]);
configure(c); /* propagates border_width, if size doesn't change */
updatesizehints(c);
updatewmhints(c);
XSelectInput(dpy, w, EnterWindowMask|FocusChangeMask|PropertyChangeMask|StructureNotifyMask);
grabbuttons(c, False);
if(!c->isfloating)
c->isfloating = c->oldstate = trans != None || c->isfixed;
if(c->isfloating)
XRaiseWindow(dpy, c->win);
attach(c);
attachstack(c);
XMoveResizeWindow(dpy, c->win, c->x + 2 * sw, c->y, c->w, c->h); /* some windows require this */
XMapWindow(dpy, c->win);
setclientstate(c, NormalState);
arrange(c->mon);
void
mappingnotify(XEvent *e) {
XMappingEvent *ev = &e->xmapping;
XRefreshKeyboardMapping(ev);
if(ev->request == MappingKeyboard)
grabkeys();
void
maprequest(XEvent *e) {
static XWindowAttributes wa;
XMapRequestEvent *ev = &e->xmaprequest;
if(!XGetWindowAttributes(dpy, ev->window, &wa))
return;
if(wa.override_redirect)
return;
if(!wintoclient(ev->window))
manage(ev->window, &wa);
void
monocle(Monitor *m) {
unsigned int n = 0;
Client *c;
for(c = m->clients; c; c = c->next)
if(ISVISIBLE(c))
n++;
if(n > 0) /* override layout symbol */
snprintf(m->ltsymbol, sizeof m->ltsymbol, "[%d]", n);
for(c = nexttiled(m->clients); c; c = nexttiled(c->next))
resize(c, m->wx, m->wy, m->ww - 2 * c->bw, m->wh - 2 * c->bw, False);
void
movemouse(const Arg *arg) {
int x, y, ocx, ocy, nx, ny;
Client *c;
Monitor *m;
XEvent ev;
if(!(c = selmon->sel))
return;
restack(selmon);
ocx = c->x;
ocy = c->y;
if(XGrabPointer(dpy, root, False, MOUSEMASK, GrabModeAsync, GrabModeAsync,
None, cursor[CurMove], CurrentTime) != GrabSuccess)
return;
if(!getrootptr(&x, &y))
return;
do {
XMaskEvent(dpy, MOUSEMASK|ExposureMask|SubstructureRedirectMask, &ev);
switch(ev.type) {
case ConfigureRequest:
case Expose:
case MapRequest:
handler[ev.type](&ev);
break;
case MotionNotify:
nx = ocx + (ev.xmotion.x - x);
ny = ocy + (ev.xmotion.y - y);
if(nx >= selmon->wx && nx <= selmon->wx + selmon->ww
&& ny >= selmon->wy && ny <= selmon->wy + selmon->wh) {
if(abs(selmon->wx - nx) < snap)
nx = selmon->wx;
else if(abs((selmon->wx + selmon->ww) - (nx + WIDTH(c))) < snap)
nx = selmon->wx + selmon->ww - WIDTH(c);
if(abs(selmon->wy - ny) < snap)
ny = selmon->wy;
else if(abs((selmon->wy + selmon->wh) - (ny + HEIGHT(c))) < snap)
ny = selmon->wy + selmon->wh - HEIGHT(c);
if(!c->isfloating && selmon->lt[selmon->sellt]->arrange
&& (abs(nx - c->x) > snap || abs(ny - c->y) > snap))
togglefloating(NULL);
if(!selmon->lt[selmon->sellt]->arrange || c->isfloating)
resize(c, nx, ny, c->w, c->h, True);
break;
} while(ev.type != ButtonRelease);
XUngrabPointer(dpy, CurrentTime);
if((m = ptrtomon(c->x + c->w / 2, c->y + c->h / 2)) != selmon) {
sendmon(c, m);
selmon = m;
focus(NULL);
Client *
nexttiled(Client *c) {
for(; c && (c->isfloating || !ISVISIBLE(c)); c = c->next);
return c;
void
pop(Client *c) {
detach(c);
attach(c);
focus(c);
arrange(c->mon);
void
propertynotify(XEvent *e) {
Client *c;
Window trans;
XPropertyEvent *ev = &e->xproperty;
if((ev->window == root) && (ev->atom == XA_WM_NAME))
updatestatus();
else if(ev->state == PropertyDelete)
return; /* ignore */
else if((c = wintoclient(ev->window))) {
switch(ev->atom) {
default: break;
case XA_WM_TRANSIENT_FOR:
if(!c->isfloating && (XGetTransientForHint(dpy, c->win, &trans)) &&
(c->isfloating = (wintoclient(trans)) != NULL))
arrange(c->mon);
break;
case XA_WM_NORMAL_HINTS:
updatesizehints(c);
break;
case XA_WM_HINTS:
updatewmhints(c);
drawbars();
break;
if(ev->atom == XA_WM_NAME || ev->atom == netatom[NetWMName]) {
updatetitle(c);
if(c == c->mon->sel)
drawbar(c->mon);
Monitor *
ptrtomon(int x, int y) {
Monitor *m;
for(m = mons; m; m = m->next)
if(INRECT(x, y, m->wx, m->wy, m->ww, m->wh))
return m;
return selmon;
void
quit(const Arg *arg) {
running = False;
void
resize(Client *c, int x, int y, int w, int h, Bool interact) {
if(applysizehints(c, &x, &y, &w, &h, interact))
resizeclient(c, x, y, w, h);
void
resizeclient(Client *c, int x, int y, int w, int h) {
XWindowChanges wc;
c->oldx = c->x; c->x = wc.x = x;
c->oldy = c->y; c->y = wc.y = y;
c->oldw = c->w; c->w = wc.width = w;
c->oldh = c->h; c->h = wc.height = h;
wc.border_width = c->bw;
XConfigureWindow(dpy, c->win, CWX|CWY|CWWidth|CWHeight|CWBorderWidth, &wc);
configure(c);
XSync(dpy, False);
void
resizemouse(const Arg *arg) {
int ocx, ocy;
int nw, nh;
Client *c;
Monitor *m;
XEvent ev;
if(!(c = selmon->sel))
return;
restack(selmon);
ocx = c->x;
ocy = c->y;
if(XGrabPointer(dpy, root, False, MOUSEMASK, GrabModeAsync, GrabModeAsync,
None, cursor[CurResize], CurrentTime) != GrabSuccess)
return;
XWarpPointer(dpy, None, c->win, 0, 0, 0, 0, c->w + c->bw - 1, c->h + c->bw - 1);
do {
XMaskEvent(dpy, MOUSEMASK|ExposureMask|SubstructureRedirectMask, &ev);
switch(ev.type) {
case ConfigureRequest:
case Expose:
case MapRequest:
handler[ev.type](&ev);
break;
case MotionNotify:
nw = MAX(ev.xmotion.x - ocx - 2 * c->bw + 1, 1);
nh = MAX(ev.xmotion.y - ocy - 2 * c->bw + 1, 1);
if(c->mon->wx + nw >= selmon->wx && c->mon->wx + nw <= selmon->wx + selmon->ww
&& c->mon->wy + nh >= selmon->wy && c->mon->wy + nh <= selmon->wy + selmon->wh)
if(!c->isfloating && selmon->lt[selmon->sellt]->arrange
&& (abs(nw - c->w) > snap || abs(nh - c->h) > snap))
togglefloating(NULL);
if(!selmon->lt[selmon->sellt]->arrange || c->isfloating)
resize(c, c->x, c->y, nw, nh, True);
break;
} while(ev.type != ButtonRelease);
XWarpPointer(dpy, None, c->win, 0, 0, 0, 0, c->w + c->bw - 1, c->h + c->bw - 1);
XUngrabPointer(dpy, CurrentTime);
while(XCheckMaskEvent(dpy, EnterWindowMask, &ev));
if((m = ptrtomon(c->x + c->w / 2, c->y + c->h / 2)) != selmon) {
sendmon(c, m);
selmon = m;
focus(NULL);
void
restack(Monitor *m) {
Client *c;
XEvent ev;
XWindowChanges wc;
drawbar(m);
if(!m->sel)
return;
if(m->sel->isfloating || !m->lt[m->sellt]->arrange)
XRaiseWindow(dpy, m->sel->win);
if(m->lt[m->sellt]->arrange) {
wc.stack_mode = Below;
wc.sibling = m->barwin;
for(c = m->stack; c; c = c->snext)
if(!c->isfloating && ISVISIBLE(c)) {
XConfigureWindow(dpy, c->win, CWSibling|CWStackMode, &wc);
wc.sibling = c->win;
XSync(dpy, False);
while(XCheckMaskEvent(dpy, EnterWindowMask, &ev));
void
run(void) {
XEvent ev;
/* main event loop */
XSync(dpy, False);
while(running && !XNextEvent(dpy, &ev)) {
if(handler[ev.type])
handler[ev.type](&ev); /* call handler */
void
scan(void) {
unsigned int i, num;
Window d1, d2, *wins = NULL;
XWindowAttributes wa;
if(XQueryTree(dpy, root, &d1, &d2, &wins, &num)) {
for(i = 0; i < num; i++) {
if(!XGetWindowAttributes(dpy, wins[i], &wa)
|| wa.override_redirect || XGetTransientForHint(dpy, wins[i], &d1))
continue;
if(wa.map_state == IsViewable || getstate(wins[i]) == IconicState)
manage(wins[i], &wa);
for(i = 0; i < num; i++) { /* now the transients */
if(!XGetWindowAttributes(dpy, wins[i], &wa))
continue;
if(XGetTransientForHint(dpy, wins[i], &d1)
&& (wa.map_state == IsViewable || getstate(wins[i]) == IconicState))
manage(wins[i], &wa);
if(wins)
XFree(wins);
void
sendmon(Client *c, Monitor *m) {
if(c->mon == m)
return;
unfocus(c, True);
detach(c);
detachstack(c);
c->mon = m;
c->tags = m->tagset[m->seltags]; /* assign tags of target monitor */
attach(c);
attachstack(c);
focus(NULL);
arrange(NULL);
void
setclientstate(Client *c, long state) {
long data[] = { state, None };
XChangeProperty(dpy, c->win, wmatom[WMState], wmatom[WMState], 32,
PropModeReplace, (unsigned char *)data, 2);
Bool
sendevent(Client *c, Atom proto) {
int n;
Atom *protocols;
Bool exists = False;
XEvent ev;
if(XGetWMProtocols(dpy, c->win, &protocols, &n)) {
while(!exists && n--)
exists = protocols[n] == proto;
XFree(protocols);
if(exists) {
ev.type = ClientMessage;
ev.xclient.window = c->win;
ev.xclient.message_type = wmatom[WMProtocols];
ev.xclient.format = 32;
ev.xclient.data.l[0] = proto;
ev.xclient.data.l[1] = CurrentTime;
XSendEvent(dpy, c->win, False, NoEventMask, &ev);
return exists;
void
setfocus(Client *c) {
if(!c->neverfocus)
XSetInputFocus(dpy, c->win, RevertToPointerRoot, CurrentTime);
sendevent(c, wmatom[WMTakeFocus]);
void
setlayout(const Arg *arg) {
if(!arg || !arg->v || arg->v != selmon->lt[selmon->sellt])
selmon->sellt ^= 1;
if(arg && arg->v)
selmon->lt[selmon->sellt] = selmon->lts[selmon->curtag] = (Layout *)arg->v;
strncpy(selmon->ltsymbol, selmon->lt[selmon->sellt]->symbol, sizeof selmon->ltsymbol);
if(selmon->sel)
arrange(selmon);
else
drawbar(selmon);
static void
incnmaster(const Arg *arg) {
int i;
if(!arg || !selmon->lt[selmon->sellt]->arrange)
return;
i = selmon->nmasters[selmon->curtag] + arg->i;
selmon->nmasters[selmon->curtag] = i < 0 ? 0 : i;
arrange(selmon);
static void
setnmaster(const Arg *arg) {
if(!arg || !selmon->lt[selmon->sellt]->arrange)
return;
selmon->nmasters[selmon->curtag] = arg->i > 0 ? arg->i : 0;
arrange(selmon);
/* arg > 1.0 will set mfact absolutly */
void
setmfact(const Arg *arg) {
float f;
if(!arg || !selmon->lt[selmon->sellt]->arrange)
return;
f = arg->f < 1.0 ? arg->f + selmon->mfacts[selmon->curtag] : arg->f - 1.0;
if(f < 0.1 || f > 0.9)
return;
selmon->mfacts[selmon->curtag] = f;
arrange(selmon);
void
setup(void) {
XSetWindowAttributes wa;
/* clean up any zombies immediately */
sigchld(0);
/* init screen */
screen = DefaultScreen(dpy);
root = RootWindow(dpy, screen);
initfont(font);
sw = DisplayWidth(dpy, screen);
sh = DisplayHeight(dpy, screen);
bh = dc.h = dc.font.height + 2;
updategeom();
/* init atoms */
wmatom[WMProtocols] = XInternAtom(dpy, "WM_PROTOCOLS", False);
wmatom[WMDelete] = XInternAtom(dpy, "WM_DELETE_WINDOW", False);
wmatom[WMState] = XInternAtom(dpy, "WM_STATE", False);
wmatom[WMTakeFocus] = XInternAtom(dpy, "WM_TAKE_FOCUS", False);
netatom[NetActiveWindow] = XInternAtom(dpy, "_NET_ACTIVE_WINDOW", False);
netatom[NetSupported] = XInternAtom(dpy, "_NET_SUPPORTED", False);
netatom[NetWMName] = XInternAtom(dpy, "_NET_WM_NAME", False);
netatom[NetWMState] = XInternAtom(dpy, "_NET_WM_STATE", False);
netatom[NetWMFullscreen] = XInternAtom(dpy, "_NET_WM_STATE_FULLSCREEN", False);
/* init cursors */
cursor[CurNormal] = XCreateFontCursor(dpy, XC_left_ptr);
cursor[CurResize] = XCreateFontCursor(dpy, XC_sizing);
cursor[CurMove] = XCreateFontCursor(dpy, XC_fleur);
/* init appearance */
dc.norm[ColBorder] = getcolor(normbordercolor);
dc.norm[ColBG] = getcolor(normbgcolor);
dc.norm[ColFG] = getcolor(normfgcolor);
dc.sel[ColBorder] = getcolor(selbordercolor);
dc.sel[ColBG] = getcolor(selbgcolor);
dc.sel[ColFG] = getcolor(selfgcolor);
dc.drawable = XCreatePixmap(dpy, root, DisplayWidth(dpy, screen), bh, DefaultDepth(dpy, screen));
dc.gc = XCreateGC(dpy, root, 0, NULL);
XSetLineAttributes(dpy, dc.gc, 1, LineSolid, CapButt, JoinMiter);
if(!dc.font.set)
XSetFont(dpy, dc.gc, dc.font.xfont->fid);
/* init bars */
updatebars();
updatestatus();
/* EWMH support per view */
XChangeProperty(dpy, root, netatom[NetSupported], XA_ATOM, 32,
PropModeReplace, (unsigned char *) netatom, NetLast);
/* select for events */
wa.cursor = cursor[CurNormal];
wa.event_mask = SubstructureRedirectMask|SubstructureNotifyMask|ButtonPressMask
|EnterWindowMask|LeaveWindowMask|StructureNotifyMask
|PropertyChangeMask;
XChangeWindowAttributes(dpy, root, CWEventMask|CWCursor, &wa);
XSelectInput(dpy, root, wa.event_mask);
grabkeys();
void
showhide(Client *c) {
if(!c)
return;
if(ISVISIBLE(c)) { /* show clients top down */
XMoveWindow(dpy, c->win, c->x, c->y);
if((!c->mon->lt[c->mon->sellt]->arrange || c->isfloating) && !c->isfullscreen)
resize(c, c->x, c->y, c->w, c->h, False);
showhide(c->snext);
else { /* hide clients bottom up */
showhide(c->snext);
XMoveWindow(dpy, c->win, c->x + 2 * sw, c->y);
void
sigchld(int unused) {
if(signal(SIGCHLD, sigchld) == SIG_ERR)
die("Can't install SIGCHLD handler");
while(0 < waitpid(-1, NULL, WNOHANG));
void
spawn(const Arg *arg) {
if(fork() == 0) {
if(dpy)
close(ConnectionNumber(dpy));
setsid();
execvp(((char **)arg->v)[0], (char **)arg->v);
fprintf(stderr, "dwm: execvp %s", ((char **)arg->v)[0]);
perror(" failed");
exit(EXIT_SUCCESS);
void
tag(const Arg *arg) {
if(selmon->sel && arg->ui & TAGMASK) {
selmon->sel->tags = arg->ui & TAGMASK;
arrange(selmon);
void
tagmon(const Arg *arg) {
if(!selmon->sel || !mons->next)
return;
sendmon(selmon->sel, dirtomon(arg->i));
int
textnw(const char *text, unsigned int len) {
XRectangle r;
if(dc.font.set) {
XmbTextExtents(dc.font.set, text, len, NULL, &r);
return r.width;
return XTextWidth(dc.font.xfont, text, len);
void
ntile(Monitor *m) {
int x, y, h, w, mw, nmax, nm;
unsigned int i, n;
Client *c;
snprintf(m->ltsymbol, sizeof m->ltsymbol, "=%d]", m->nmasters[m->curtag]);
for(n = 0, c = nexttiled(m->clients); c; c = nexttiled(c->next), n++);
c = nexttiled(m->clients);
nmax = m->nmasters[m->curtag];
nm = nmax == 1 ? 1 : MIN(n / 2, nmax);
if(nm > n)
nm = n;
/* master */
if(nm > 0) {
mw = selmon->mfacts[selmon->curtag] * m->ww;
h = m->wh / nm;
if(h < bh)
h = m->wh;
y = m->wy;
for(i = 0; i < nm; i++, c = nexttiled(c->next)) {
resize(c, m->wx, y, (n == nm ? m->ww : mw) - 2 * c->bw,
((i + 1 == nm) ? m->wy + m->wh - y : h) - 2 * c->bw, False);
if(h != m->wh)
y = c->y + HEIGHT(c);
n -= nm;
} else
mw = 0;
if(n == 0)
return;
/* tile stack */
x = m->wx + mw;
y = m->wy;
w = m->ww - mw;
h = m->wh / n;
if(h < bh)
h = m->wh;
for(i = 0; c; c = nexttiled(c->next), i++) {
resize(c, x, y, w - 2 * c->bw,
((i + 1 == n) ? m->wy + m->wh - y : h) - 2 * c->bw, False);
if(h != m->wh)
y = c->y + HEIGHT(c);
void
togglebar(const Arg *arg) {
selmon->showbar = !selmon->showbar;
updatebarpos(selmon);
XMoveResizeWindow(dpy, selmon->barwin, selmon->wx, selmon->by, selmon->ww, bh);
arrange(selmon);
void
togglefloating(const Arg *arg) {
if(!selmon->sel)
return;
selmon->sel->isfloating = !selmon->sel->isfloating || selmon->sel->isfixed;
if(selmon->sel->isfloating)
resize(selmon->sel, selmon->sel->x, selmon->sel->y,
selmon->sel->w, selmon->sel->h, False);
arrange(selmon);
void
toggletag(const Arg *arg) {
unsigned int newtags;
unsigned int i;
if(!selmon->sel)
return;
newtags = selmon->sel->tags ^ (arg->ui & TAGMASK);
if(newtags) {
selmon->sel->tags = newtags;
if(newtags == ~0) {
selmon->prevtag = selmon->curtag;
selmon->curtag = 0;
if(!(newtags & 1 << (selmon->curtag - 1))) {
selmon->prevtag = selmon->curtag;
for (i=0; !(newtags & 1 << i); i++);
selmon->curtag = i + 1;
selmon->sel->tags = newtags;
selmon->lt[selmon->sellt] = selmon->lts[selmon->curtag];
arrange(selmon);
void
toggleview(const Arg *arg) {
unsigned int newtagset = selmon->tagset[selmon->seltags] ^ (arg->ui & TAGMASK);
if(newtagset) {
selmon->tagset[selmon->seltags] = newtagset;
arrange(selmon);
void
unfocus(Client *c, Bool setfocus) {
if(!c)
return;
grabbuttons(c, False);
XSetWindowBorder(dpy, c->win, dc.norm[ColBorder]);
if(setfocus)
XSetInputFocus(dpy, root, RevertToPointerRoot, CurrentTime);
void
unmanage(Client *c, Bool destroyed) {
Monitor *m = c->mon;
XWindowChanges wc;
/* The server grab construct avoids race conditions. */
detach(c);
detachstack(c);
if(!destroyed) {
wc.border_width = c->oldbw;
XGrabServer(dpy);
XSetErrorHandler(xerrordummy);
XConfigureWindow(dpy, c->win, CWBorderWidth, &wc); /* restore border */
XUngrabButton(dpy, AnyButton, AnyModifier, c->win);
setclientstate(c, WithdrawnState);
XSync(dpy, False);
XSetErrorHandler(xerror);
XUngrabServer(dpy);
free(c);
focus(NULL);
arrange(m);
void
unmapnotify(XEvent *e) {
Client *c;
XUnmapEvent *ev = &e->xunmap;
if((c = wintoclient(ev->window)))
unmanage(c, False);
void
updatebars(void) {
Monitor *m;
XSetWindowAttributes wa = {
.override_redirect = True,
.background_pixmap = ParentRelative,
.event_mask = ButtonPressMask|ExposureMask
for(m = mons; m; m = m->next) {
m->barwin = XCreateWindow(dpy, root, m->wx, m->by, m->ww, bh, 0, DefaultDepth(dpy, screen),
CopyFromParent, DefaultVisual(dpy, screen),
CWOverrideRedirect|CWBackPixmap|CWEventMask, &wa);
XDefineCursor(dpy, m->barwin, cursor[CurNormal]);
XMapRaised(dpy, m->barwin);
void
updatebarpos(Monitor *m) {
m->wy = m->my;
m->wh = m->mh;
if(m->showbar) {
m->wh -= bh;
m->by = m->topbar ? m->wy : m->wy + m->wh;
m->wy = m->topbar ? m->wy + bh : m->wy;
else
m->by = -bh;
Bool
updategeom(void) {
Bool dirty = False;
#ifdef XINERAMA
if(XineramaIsActive(dpy)) {
int i, j, n, nn;
Client *c;
Monitor *m;
XineramaScreenInfo *info = XineramaQueryScreens(dpy, &nn);
XineramaScreenInfo *unique = NULL;
for(n = 0, m = mons; m; m = m->next, n++);
/* only consider unique geometries as separate screens */
if(!(unique = (XineramaScreenInfo *)malloc(sizeof(XineramaScreenInfo) * nn)))
die("fatal: could not malloc() %u bytes\n", sizeof(XineramaScreenInfo) * nn);
for(i = 0, j = 0; i < nn; i++)
if(isuniquegeom(unique, j, &info[i]))
memcpy(&unique[j++], &info[i], sizeof(XineramaScreenInfo));
XFree(info);
nn = j;
if(n <= nn) {
for(i = 0; i < (nn - n); i++) { /* new monitors available */
for(m = mons; m && m->next; m = m->next);
if(m)
m->next = createmon();
else
mons = createmon();
for(i = 0, m = mons; i < nn && m; m = m->next, i++)
if(i >= n
|| (unique[i].x_org != m->mx || unique[i].y_org != m->my
|| unique[i].width != m->mw || unique[i].height != m->mh))
dirty = True;
m->num = i;
m->mx = m->wx = unique[i].x_org;
m->my = m->wy = unique[i].y_org;
m->mw = m->ww = unique[i].width;
m->mh = m->wh = unique[i].height;
updatebarpos(m);
else { /* less monitors available nn < n */
for(i = nn; i < n; i++) {
for(m = mons; m && m->next; m = m->next);
while(m->clients) {
dirty = True;
c = m->clients;
m->clients = c->next;
detachstack(c);
c->mon = mons;
attach(c);
attachstack(c);
if(m == selmon)
selmon = mons;
cleanupmon(m);
free(unique);
else
#endif /* XINERAMA */
/* default monitor setup */
if(!mons)
mons = createmon();
if(mons->mw != sw || mons->mh != sh) {
dirty = True;
mons->mw = mons->ww = sw;
mons->mh = mons->wh = sh;
updatebarpos(mons);
if(dirty) {
selmon = mons;
selmon = wintomon(root);
return dirty;
void
updatenumlockmask(void) {
unsigned int i, j;
XModifierKeymap *modmap;
numlockmask = 0;
modmap = XGetModifierMapping(dpy);
for(i = 0; i < 8; i++)
for(j = 0; j < modmap->max_keypermod; j++)
if(modmap->modifiermap[i * modmap->max_keypermod + j]
== XKeysymToKeycode(dpy, XK_Num_Lock))
numlockmask = (1 << i);
XFreeModifiermap(modmap);
void
updatesizehints(Client *c) {
long msize;
XSizeHints size;
if(!XGetWMNormalHints(dpy, c->win, &size, &msize))
/* size is uninitialized, ensure that size.flags aren't used */
size.flags = PSize;
if(size.flags & PBaseSize) {
c->basew = size.base_width;
c->baseh = size.base_height;
else if(size.flags & PMinSize) {
c->basew = size.min_width;
c->baseh = size.min_height;
else
c->basew = c->baseh = 0;
if(size.flags & PResizeInc) {
c->incw = size.width_inc;
c->inch = size.height_inc;
else
c->incw = c->inch = 0;
if(size.flags & PMaxSize) {
c->maxw = sizeThe diff you use rename tile() to ntile(), you should not have tile in your config.h. The rest of errors probably relate to what the diff has nerfed, or should be gone once you fix that tile.
I think you should stay on 5.8.2 until all the patches have support for 5.9 if you can't patch on patch on your own.
(edit) that github repo has issues, it might be good idea to create issue if that patch really have compatible issue with 5.9. That would benefit all other patch users.
Last edited by livibetter (2011-09-12 14:55:00) -
System error in opening a query
hi guys,
this is the error i'm getting when opening this query which i need for my CR
Abort System error in program in SAPLRR12 and form cell_fuellen_acell-01
Diagnosis:
This internal error is a targeted termination since the program has an
incorrect status.
what is needed to be done here
Your help will be rightly appreciated
ThanksHi Vj,
Please check the SAP notes as below, which seems to be relevant for your issue.
Assign points it useful.....
Symptom
There are errors in Business Explorer components such as Analyzer, Browser, Form Reporting, Web Application Designer, Query Designer, Map, OLE DB for OLAP Provider
Solution General information
This note contains information about BW 3.0A front end patch 3. Here, you will find the most important information on:
Installation
Error corrections
New features
Additional general information that is not specifically for this BW front end patch.
Procedure
Downloading BW front end patches via FTP from sapserv
Downloading a BW front end patch via Online Correction Support (SAPnet)
Preparing the Installation Server
Checking the Installation Server
Installation on PC
Checking the PC
Problems during the installation of the BW front end Patch
Distributing a patch per script (for administrators only)
Installation
During the installation of the BW front end patch, note the following:
(This area is constantly updated)
The BW 3.0A front end patch 3 is based on the SAP GUI 6.10 Presentation CD 1 (6.10 Final Compilation 3, material number 50051811) and the SAP GUI 6.10 patch 12 or higher.
The BW 3.0A front end patch 3 contains all files, to convert a BW 2.0B/2.1C front end into a BW 3.0A front end.
The BW 3.0A front end is downward-compatible to BW 2.0B/2.C.Thus, it can also be used on BW 2.0B/2.1C backend systems.
When you use the Web Application Designer, implement at least BW 3.0A Support Package 03 (see note 425995).
Error corrections
This BW front end patch corrects the following errors in particular:
in SAP Business Explorer Analyzer
Displaying document links on filter cells and text elements
Improved performance for low-speed connections (WAN)
Bug:Incorrect language when starting documents in the Web browser (refer to note 450200)
Bug:Import of missing styles does not import the color palette anymore (refer to note 450194)
Bug:Various problems during the server logon as of Release 2.0 (incorrect list of Goto destinations, incorrectly indented hierarchy symbols...)
Bug: Starting jump destinations in the Web does not work
in BEx Query Designer
The system does not correctly interpret characteristics that were selected as being unique in each cell and when it checks these characteristics, it mistakenly reports them as being defined non-uniquely.
After you called the cell editor, you had to press the toolbar buttons twice to call the required function.
In the cell editor, you could change the formula cells but not the formulas of the columns or of the rows because the system displayed all references to other columns or rows as 25 digit numbers.
When you use Save as ... for queries with formula cells, these cells are not copied.
When you used the Save as ... function for queries with cells, the copied query sometimes displayed the message "Brain 299 SAPLRRI2 Form CELL_FUELLEN_ACELL-01-" when it was executed.
When you used the Save as ... function for queries with formula cells, these cells were not copied.
in Variable Editor
Formula variables that were replaced with the "To" value in intervals, were displayed without the "To" selection when you changed them.
in SAP Business Explorer Browser
Drag&Drop of Japanese file names on Japanese WinNT computers is now supported
Temporary files are automatically deleted when the BEx Browser is exited
New features
New features delivered with this BW front end patch:
SAP Business Explorer Analyzer
Delete function in dialog "Open -> Views"
Displaying documents for text elements and filter values
Now the BW front end is installed in a separate program folder in the start menu. The folder is called 'Business Explorer'.The setup only allows you to change the name of the folder of the SAP front end.
Procedure
1. Downloading the BW front end patch via FTP or SAPnet
2. Preparing and checking the installation server
3. Installing and checking on the PC
Note that you cannot install a BW front end patch directly on a PC (also see the 'Distribution of a patch by script' section).
The check of every step with SAPBEXC.XLA avoids unnecessary subsequent problems.
Downloading BW front end patches via FTP from sapserv
Downloading patches from the sapserv is described in note 96885, "Downloading a front end patch from SAPSERVx".
The BW 3.0A front end patches and the SAP GUI 6.10 patches are in the directory
sapservX/general/frontend/patches/rel610/Windows/Win32
The file name of the BW front end patch is
BW30A_n.EXE (where 'n' is the number of the BW front end patch)
The file name of the SAP GUI patch is
GUI610_n.EXE (where 'n' is the number of the SAP GUI patch)
In general, you can use the highest existing SAP GUI patch.The above-mentioned number of the SAP GUI patch is the minimum requirement.
Downloading a BW front end patch via Online Correction Support (SAPnet)
You can also download BW front end patches in the SAPnet.The URL for the SAP Online Correction Support is:
http://service.sap.com/swcenter-main
After you select SAP BW/SAP BW 3.0A/Binary Patches/SAP GUI for Windows 6.10/Win32 in the tree on the right side, the SAP Download Area appears on the left side.
Here you can select BW30A.EXE and, if necessary, GUI610.EXE for downloading.
In general, you can use the highest existing SAP GUI patch.The above-mentioned number of the SAP GUI patch is the minimum requirement.
Preparing the Installation Server
The installation of patches on the installation server is described in note 361222. Follow the instructions in this note.
A BW front end patch contains all files from the previous patches, so that you only need to install the latest patch.
Checking the Installation Server
Note 197460, "BW front end Checktool sapbexc.xla", describes how easily and quickly you can check the installation server.
Installation on PC
The BW front end patch is installed by executing the SAP GUI setup.In the setup, you must select the BW add-ons component to install the BW front end.
See also the section distribution of a patch per script.
Checking the PC
Note 197460, "BW front end Checktool sapbexc.xla", describes how simple and fast the local installation checks a PC
The local execution of SAPBEXC.XLA is necessary if you sent problems to the SAP Support (see note 142705).The status of a PC can be checked with the result of SAPBEXC.XLA.
Problems during the installation of the BW front end patch
If problems occur during the installation of the BW front end patches, you should install the BW front end patch again and use the following method for this:
First, remove the BW front end with "Remove" menu option under "SAP front end" from your local PC.
Afterwards you can install the front end programs again with the setup program of your setup server.The setup program has been delivered with the front end CD.You must have administrator rights on the local PC.During the setup, no other programs (for example, Excel) should run.
Certain programs save information on OLE components in special files.These files are not updated automatically during a new installation, therefore, when you change the OLE component during the installation, old information may remain in the system.We recommend you delete all files with the extensions ".EXD" and ".OCA" before you carry out the new installation.
Distributing a patch per script (for administrators only)
There is a large number of products for the distribution of software (for example, Microsoft SMS, IBM Tivoli, NetSupport NetInstall), so that no individual Support is possible when you use SAP and BW.There are two general notes about the front end installation (153341 and 194859), to which the system also refers.
The following remarks are intended for administrators who want to distribute a BW front end patch with such a software.
A BW front end patch consists of several files in different directories. These directories correspond to the directories on the installation server or on the CD.The files are usually distributed into the following directories on the local PC:
c:\program files\common files\sap\system
c:\program files\sappc
c:\winnt\system32 or c:\windows\system
In the sapbexc.xla file on the "Version" tab, there are notes about where the file must be copied to and whether it must be registered.
For the preparation of a script, first you should make a normal installation on a local PC from the installation server which must be checked with sapbexc.xla (see note 197460).Afterwards you can localize the corresponding directory of a file using this PC.In general, each DLL and each OCX must be registered if it can be registered.After the installation per script, a deinstallation may no longer work, therefore, before registering a file with regsvr32.exe <Path\File>, you should execute the script for an unregistration with regsvr32.exe /U <path\file>.
Currently, the sapbexc.xla checktool may not be able to recognize certain installation errors (copy without registrations) (see note 206609).
SAP offers support for problems with incorrect scripts for distributing patches.
Best Regards,
DMK
Assign Points if it helps.... -
Win 2000 doesn't show netware printers
I installed:
A single Novell 5.0 Server with sp6a
A Win 2000 PC with Novell client 4.92sp2 IP and IPX
with some standard software as MS Office 2000, Adobe Acrobat Reader,
Norman Antivirus, Java 1.5 and son more.
Using the Windows printer wizard I choose "network printers"
and "search for" printers. Windows shows only "Microsoft windows
Printers" but no Novell Network and no Novell printer / queue.
Using Network Neighborhood and going to NDS with the Printer icon Windows
tells me, that I have to install this printer. Then it says, the printer
coulnt be installed or isn't valid.
From my WinXP prof. Notebook I have no problem to acces the Novell Printer.
What's wrong?The problem is solved.
A software called "NET SUPPORT SCHOLL 7.01" from PCI - Software hooks a
part of the printer services. A senseless (!!!) DLL causes the problem.
See the email following (from PCI) for a workaround. I had to restart the
PC to for the changes to take effect.
Thanks for your help!
dear H. Wybranietz
Thank you for contacting NetSupport Technical concerning Printing Issue on
Novell via NetSupport School 7.01. This is not a problem usually found in
NetSupport School and is usually only reported regarding NetSupport
Manager, which includes a Print Capture feature.
The problem you are experiencing relates to NetSupport attempting to Hook
into the Print Driver in order to do this at start up we have to restart
the Print Spooler service at startup. After reading through your problem it
looks like the spooler service is not restarting.
Therefore, could you please remove the INJLIB.DLL file from the machine -
this will not cause any problems and will stop NetSupport from hooking into
the Printer driver. Which means you will not have to keep restarting the
Print Spooler service.
The file INJLIB.dll is a NSM file but is included in NSS, removing this
file from the system will not remove any functionality from NSS. Please
follow the steps below:
1) Go into C:\Program Files\NetSupport School
2) Find a file called injlib.dll
3) Rename this file to injlib.old
4) Restart the Print Spooler service
5) Restart the Client32 service
> Sounds like something was not right with the client install here -- one
> thing I'd do with the client install in any event, unless you are using
> the NetWare server to connect to the internet or the server only has
> TCPIP on it, you might well configure the client for custom install,
> IPX only, and then deselect the additional pieces that you can use with
> the client (ie you just want an NDS login).
>
>
>
> --
> Barry Schnur
> Novell Support Connection Volunteer Sysop -
Disable the Remote Management Service?
I know this is "Why would anyone want to do this" question but we are having conflicting issues in one of our labs between NetSupport and Zenworks when trying to run Adobe Flash. NetSupport is a tool that quite a few of our lab teachers use, it gives them the ability to see all of there students screens, take control of them, and a few other features, all from a console that runs on the teacher machine.
The problem comes in when running Flash if the student tries to create a text box and scroll inside of it then the computer crashes. We contacted NetSupport for help with this and they had us run a reporting tool that looked at the hardware setup and driver information. Then they setup a test machine and tried to replicate the problem and they were not able to. However they tech did note that in the scan of the machine there could be a conflicting issue between NetSupports Mirror Driver and DemoForge TightVNC Mirror Driver. I assumed the latter was part of Zenworks remote management. So we stopped the remote management service on a machine and tried to replicate the problem. We did not encounter the problem so we turned the remote management service back on and sure enough as soon as we tried to replicate the problem again the machine crashed.
Now when we tried to disable the remote management service in the services menu but it will not stay disable as soon as the machine restarts the remote management service is running and its set to automatic again.
Is there anyway to disable (preferable) or remove just the remote management piece with out removing the rest of the client from the machines?
Thanks,
MikeYou can configure this in the ZCC for which components you want
installed. You can deselect Remote Management.
Note: You can also disable or remove the Mirror Driver from the Devices
Control Panel under Display Drivers and it will not come back.
On 1/13/2012 2:36 PM, mshicks wrote:
>
> I know this is "Why would anyone want to do this" question but we are
> having conflicting issues in one of our labs between NetSupport and
> Zenworks when trying to run Adobe Flash. NetSupport is a tool that quite
> a few of our lab teachers use, it gives them the ability to see all of
> there students screens, take control of them, and a few other features,
> all from a console that runs on the teacher machine.
>
> The problem comes in when running Flash if the student tries to create
> a text box and scroll inside of it then the computer crashes. We
> contacted NetSupport for help with this and they had us run a reporting
> tool that looked at the hardware setup and driver information. Then they
> setup a test machine and tried to replicate the problem and they were
> not able to. However they tech did note that in the scan of the machine
> there could be a conflicting issue between NetSupports Mirror Driver and
> DemoForge TightVNC Mirror Driver. I assumed the latter was part of
> Zenworks remote management. So we stopped the remote management service
> on a machine and tried to replicate the problem. We did not encounter
> the problem so we turned the remote management service back on and sure
> enough as soon as we tried to replicate the problem again the machine
> crashed.
>
> Now when we tried to disable the remote management service in the
> services menu but it will not stay disable as soon as the machine
> restarts the remote management service is running and its set to
> automatic again.
>
> Is there anyway to disable (preferable) or remove just the remote
> management piece with out removing the rest of the client from the
> machines?
>
> Thanks,
> Mike
>
>
Craig Wilson - MCNE, MCSE, CCNA
Novell Knowledge Partner
Novell does not officially monitor these forums.
Suggestions/Opinions/Statements made by me are solely my own.
These thoughts may not be shared by either Novell or any rational human. -
Dear All,
someone can tell me if is possible take control of the remote client connected by VPN, through application like Remote Desktop or NetSupport?
We use a VPN Concentrator and one of our customer need to take control of the client-desktop that connected by VPN.
Thanks in advance.
Maurizio PederneschiUpsolutely you can , we do it all the time with our Concentrator 3005, if we need to connect to an already connected pptp client to assist we rdp to their machine using that same tunnel. Now you need to keep in mind that in order to RDP to the clients machine while that tunnel is up between the concentrator and the user's machine you will need to use the same users login credentials whatever they use at their end in order to keep the tunnel up without interruption.
I have not tried netsupport and do not know how Netsupport works but I would assume it should work as the netsuport traffic is sent through the tunnel.
Rgds
Jorge
Maybe you are looking for
-
Display Image In List Tile for creating Hyperlink
Hi, I have a requirement in my project that I have to display Image in one of the column of the List tile for Hyperlink. I have created custom control for this but unable to show the image on the List tile, currently it showing the Path of the Image.
-
Recover data unbootable macbook pro hd onto external hd
2013 macbook pro got stuck installing mavericks with the error saying that it couldnt install because disk is damaged. restarted in recovery mode and tried to repair from disk utility but after hitting verify disk and repair disk it says it cannot re
-
Hi, We are planning to make a migration of an Existing Cube to Oracle Olap 10g. Can anybody tell me the complete process to load a OLAP cube, Is it possible to load Cube data from a multi-dimensional variable ? or, if anyone has a previous experience
-
Short Dump - Please let me know if Any Note is available for this
<unreadable text removed> Moderator message: please search for applicable notes yourself. Edited by: Thomas Zloch on Nov 24, 2011 12:14 PM
-
hi experts, i want to generate a query based report t for following PoNo Item No Qty Vendor Chal No Challan Date Assesable Value BED Value SED Value AED Val ECS value NCCD VAL NCCD Rate ECS Rate % B