xenocara/app/wm2/Client.h

149 lines
4.0 KiB
C++

#ifndef _CLIENT_H_
#define _CLIENT_H_
#include "General.h"
#include "Manager.h"
#include "Border.h"
class Client {
public:
Client(WindowManager *const, Window);
void release();
/* for call from WindowManager: */
void activate(); /* active() */
void deactivate(); /* setactive(0) */
void gravitate(Boolean invert);
void installColormap();
void unreparent();
void withdraw(Boolean = True);
void hide();
void unhide(Boolean map);
void rename();
void kill();
void mapRaised(); // without activating
void lower();
void move(XButtonEvent *); // event for grab timestamp & coords
void resize(XButtonEvent *, Boolean, Boolean);
void moveOrResize(XButtonEvent *);
void ensureVisible(); // make sure x, y are on-screen
void manage(Boolean mapped);
Boolean hasWindow(Window w) {
return ((m_window == w) || m_border->hasWindow(w));
}
Client *revertTo() { return m_revert; }
void setRevertTo(Client *c) { m_revert = c; }
Boolean isHidden() { return (m_state == IconicState); }
Boolean isWithdrawn() { return (m_state == WithdrawnState); }
Boolean isNormal() { return (m_state == NormalState); }
Boolean isTransient() { return (m_transient != None); }
Window transientFor() { return m_transient; }
Boolean isFixedSize() { return m_fixedSize; }
const char *label() { return m_label; }
const char *name() { return m_name; }
const char *iconName() { return m_iconName; }
void sendMessage(Atom, long);
void sendConfigureNotify();
void activateAndWarp();
void focusIfAppropriate(Boolean);
void selectOnMotion(Window, Boolean);
/* for call from within: */
void fatal(char *m) { m_windowManager->fatal(m); }
Display *display() { return m_windowManager->display(); }
Window parent() { return m_border->parent(); }
Window root() { return m_windowManager->root(); }
Client *activeClient() { return m_windowManager->activeClient(); }
Boolean isActive() { return (activeClient() == this); }
WindowManager *windowManager() { return m_windowManager; }
// for call from equivalent wm functions in Events.C:
void eventButton(XButtonEvent *);
void eventMapRequest(XMapRequestEvent *);
void eventConfigureRequest(XConfigureRequestEvent *);
void eventUnmap(XUnmapEvent *);
void eventColormap(XColormapEvent *);
void eventProperty(XPropertyEvent *);
void eventEnter(XCrossingEvent *);
void eventFocusIn(XFocusInEvent *);
void eventExposure(XExposeEvent *);
protected: // cravenly submitting to gcc's warnings
~Client();
private:
Window m_window;
Window m_transient;
Border *m_border;
Client *m_revert;
int m_x;
int m_y;
int m_w;
int m_h;
int m_bw;
XSizeHints m_sizeHints;
Boolean m_fixedSize;
int m_minWidth;
int m_minHeight;
void fixResizeDimensions(int &, int &, int &, int &);
Boolean coordsInHole(int, int);
int m_state;
int m_protocol;
Boolean m_managed;
Boolean m_reparenting;
Boolean m_stubborn; // keeps popping itself to the front
Time m_lastPopTime;
char *m_name;
char *m_iconName;
const char *m_label; // alias: one of (instance,class,name,iconName)
static const char *const m_defaultLabel;
Colormap m_colormap;
int m_colormapWinCount;
Window *m_colormapWindows;
Colormap *m_windowColormaps;
WindowManager *const m_windowManager;
char *getProperty(Atom);
int getAtomProperty(Atom, Atom);
int getIntegerProperty(Atom);
// accessors
Boolean getState(int *);
void setState(int);
// internal instantiation requests
Boolean setLabel(void); // returns True if changed
void getColormaps(void);
void getProtocols(void);
void getTransient(void);
void decorate(Boolean active);
};
#define Pdelete 1
#define PtakeFocus 2
#endif