/* treewm - an X11 window manager.
* Copyright (c) 2001-2002 Thomas Jäger <TheHunter2000 at web dot de>
* This code is released under the terms of the GNU GPL.
* See the included file LICENSE for details.
*/
#ifndef CLIENT_H
#define CLIENT_H
#include "global.h"
#include "menu.h"
// 1 - 25
#define CF_SHADED (1L<< 1)
#define CF_IGNOREEXPOSE (1L<< 2)
#define CF_FIXEDSIZE (1L<< 3)
#define CF_ICONPOSKNOWN (1L<< 4)
#define CF_GRABBED (1L<< 5)
#define CF_NOCLOSE (1L<< 6)
#define CF_NOMINIMIZE (1L<< 7)
#define CF_FORCESTATIC (1L<< 8)
#define CF_STICKY (1L<< 9)
#define CF_HASTITLE (1L<<10)
#define CF_HASTBENTRY (1L<<11)
#define CF_GRABALTCLICK (1L<<12)
#define CF_PASSFIRSTCLICK (1L<<13)
#define CF_TITLEBARBUTTONS (1L<<14)
#define CF_SNAP (1L<<15)
#define CF_ABOVE (1L<<16)
#define CF_BELOW (1L<<17)
#define CF_RAISEONCLICK (1L<<18)
#define CF_RAISEONENTER (1L<<19)
#define CF_FOCUSONCLICK (1L<<20)
#define CF_FOCUSONENTER (1L<<21)
#define CF_AUTOSHADE (1L<<22)
#define CF_HIDEMOUSE (1L<<23)
#define CF_HASBEENSHAPED (1L<<25)
// 26-31
#define DF_FIRST (1L<<26)
#define DF_ICONSRAISED (1L<<26)
#define DF_AUTOSCROLL (1L<<27)
#define DF_TILE (1L<<28)
#define DF_AUTORESIZE (1L<<29)
#define DF_TASKBARBUTTONS (1L<<30)
#define DF_GRABKEYBOARD (1L<<31)
#define DEFAULTFLAGS (CF_HASTBENTRY | CF_HASTITLE | CF_GRABALTCLICK | CF_PASSFIRSTCLICK | \
CF_SNAP | CF_TITLEBARBUTTONS | CF_FOCUSONENTER | DF_TASKBARBUTTONS)
#define DEFAULTMASK (CF_IGNOREEXPOSE | CF_FIXEDSIZE | CF_ICONPOSKNOWN | CF_GRABBED | \
CF_FORCESTATIC | CF_HASBEENSHAPED | TF_ISICON | DF_ICONSRAISED)
#define CF_ALL 0x00FFFFFE
#define DF_ALL 0xFF000000
#define FLAG_NONE 0
#define FLAG_UPDATE 1
#define FLAG_SET 2
#define FLAG_UNSET 3
#define FLAG_TOGGLE 4
#define FLAG_REMOVE 5
#define FLAG_DSET 6
#define FLAG_DUNSET 7
#define FLAG_DTOGGLE 8
#define FLAG_DREMOVE 9
#define FLAG_CSET 10
#define FLAG_CUNSET 11
#define FLAG_CTOGGLE 12
#define FLAG_CREMOVE 13
#define FLAG_CMIN FLAG_CSET
#define FLAG_CMAX FLAG_CREMOVE
#define R_WITHDRAW 0
#define R_REMAP 1
#define R_RESTART 2
#define SPACE 1
#define BUTTONWIDTH THeight
// modes for raise
#define R_PARENT 1
#define R_MOVEMOUSE 2
#define R_INDIRECT 4
#define R_GOTO 8
#define R_MAP 16
#define L_PARENT 1
#define L_BOTTOM 2
#define snap 6
#define S_LEFT 1
#define S_RIGHT 2
#define S_TOP 4
#define S_BOTTOM 8
// Defines for Maximize
#define MAX_UNMAX 0
#define MAX_HALF 1
#define MAX_FULL 2
#define MAX_REMAX 3
#define MAX_FULLSCREEN 4
#define MAX_HORI 5
#define MAX_VERTHALF 6
#define MAX_VERTFULL 7
// Defines for SendWMDelete
#define DEL_NORMAL 0
#define DEL_FORCE 1
#define DEL_RELEASE 2
// Defines for MH->type
#define T_B1 1
#define T_B2 2
#define T_B3 3
#define T_DC 8 // Doubleclick
#define T_SDC 16 // Strange doubleclick
#define T_BAR 32
#define T_F1 64
#define T_F2 96
#define T_SHIFT 128
#define T_BUTTON (T_BAR|T_F1|T_F2)
#define T_MOUSEBUTTON (T_B1|T_B2|T_B3)
class Client : public TWindow {
public:
Client(Desktop *, Window = 0);
virtual void SetClientInfo(ClientInfo *);
virtual bool Init();
void GetMWMOptions();
virtual ~Client();
virtual Client* FindPointerClient();
virtual bool GetWindowList(MenuItem *,int &,bool,int,int,int,char *);
virtual void RemoveClientReferences(Client *);
virtual Desktop *DesktopAbove();
void ChangeName();
void GetFlags();
virtual void UpdateFlags(int, unsigned long);
void UpdateName(bool);
void ReDrawTBEntry(Client *,bool=true);
virtual void SendWMDelete(int);
virtual void SendEvent(XAnyEvent &e);
virtual void RequestDesktop(bool);
void Maximize(int);
void Shade();
virtual unsigned long GetRegionMask(int,int,Client * &);
virtual void SetWMState();
virtual void GrabButtons(bool = false);
void GiveFocus();
virtual void GetFocus();
virtual Client *Focus();
Client* Next(bool);
Client* Prev(bool);
void MoveRight();
void MoveLeft();
void MoveUp();
void MoveDown();
void Stacking(bool);
int GetStacking();
virtual void Raise(int);
void Scroll(bool);
void Lower(unsigned int);
void LowerBelow(Client *);
void Map();
void Unmap(bool);
long GetWMState();
virtual void SendConfig();
void Configure(XConfigureRequestEvent);
void InitPosition();
void Gravitate(int);
void Reparent();
virtual void Remove(int);
void Hide();
void ToggleHasTitle();
virtual void UpdateTB();
virtual void ReDraw();
void DrawOutline();
void MoveResize(int, bool, int, int, bool = false);
void Snap(int);
void RecalcSweep(int);
virtual void ChangeSize();
void ChangePos(bool);
void Clear();
#ifdef SHAPE
void MakeHole(bool);
void SetShape();
#endif
#ifdef DEBUG
const char *ShowGrav();
const char *ShowState();
void dump();
#endif
unsigned long mask;
unsigned long parentmask; // why here????
Client *next;
Desktop *parent,*target;
char *name, *wmname;
bool mapped; // Is the window mapped?
bool visible; // Is the window visible?
int THeight;
Window window, frame, title;
Client *trans,*transfor;
// protected:
Sceme *Sc;
// ClientInfo *ci; doesn't make sence
int TBx, TBy, TBEx, TBEy;
int MaxX,MaxY,MaxW,MaxH;
XSizeHints *size;
Colormap cmap;
int x, y, width, height;
int x_root, y_root;
int IconX,IconY;
Icon *icon;
RPixmap *iconpm;
int ignoreunmap;
};
void GetMousePosition(Window , int &, int &);
void FetchName(Window , char **);
#define setmouse(w, x, y) XWarpPointer(dpy, None, w, 0, 0, 0, 0, x, y)
#define grabp(w, mask, curs) (XGrabPointer(dpy, w, False, mask, \
GrabModeAsync, GrabModeAsync, None, curs, CurrentTime) == GrabSuccess)
#define DWidth DisplayWidth(dpy,screen)
#define DHeight DisplayHeight(dpy,screen)
#ifdef VIDMODE
#define VWidth ct->ctVWidth
#define VHeight ct->ctVHeight
#define VX ct->ctVX
#define VY ct->ctVY
#else
#define VWidth DWidth
#define VHeight DHeight
#define VX 0
#define VY 0
#endif
#endif
syntax highlighted by Code2HTML, v. 0.9.1