xenocara/app/wm2/Manager.h

132 lines
3.3 KiB
C++

#ifndef _MANAGER_H_
#define _MANAGER_H_
#include "General.h"
#include "listmacro2.h"
class Client;
declarePList(ClientList, Client);
class WindowManager {
public:
WindowManager();
~WindowManager();
void fatal(const char *);
// for call from Client and within:
Client *windowToClient(Window, Boolean create = False);
Client *activeClient() { return m_activeClient; }
Boolean raiseTransients(Client *); // true if raised any
Time timestamp(Boolean reset);
void clearFocus();
void setActiveClient(Client *const c) { m_activeClient = c; }
void addToHiddenList(Client *);
void removeFromHiddenList(Client *);
void skipInRevert(Client *, Client *);
Display *display() { return m_display; }
Window root() { return m_root; }
enum RootCursor {
NormalCursor, DeleteCursor, DownCursor, RightCursor, DownrightCursor
};
void installCursor(RootCursor);
void installCursorOnWindow(RootCursor, Window);
void installColormap(Colormap);
unsigned long allocateColour(char *, char *);
void considerFocusChange(Client *, Window, Time timestamp);
void stopConsideringFocus();
// shouldn't really be public
int attemptGrab(Window, Window, int, int);
void releaseGrab(XButtonEvent *);
void eventExposure(XExposeEvent *); // for exposures during client grab
void showGeometry(int, int);
void removeGeometry();
private:
int loop();
void release();
Display *m_display;
int m_screenNumber;
Window m_root;
Colormap m_defaultColormap;
int m_minimumColormaps;
Cursor m_cursor;
Cursor m_xCursor;
Cursor m_vCursor;
Cursor m_hCursor;
Cursor m_vhCursor;
char *m_terminal;
char *m_shell;
ClientList m_clients;
ClientList m_hiddenClients;
Client *m_activeClient;
int m_shapeEvent;
int m_currentTime;
Boolean m_looping;
int m_returnCode;
static Boolean m_initialising;
static int errorHandler(Display *, XErrorEvent *);
static void sigHandler(int);
static int m_signalled;
void initialiseScreen();
void scanInitialWindows();
GC m_menuGC;
Window m_menuWindow;
XFontStruct *m_menuFont;
unsigned long m_menuForegroundPixel;
unsigned long m_menuBackgroundPixel;
unsigned long m_menuBorderPixel;
static const char *const m_menuCreateLabel;
const char *const menuLabel(int);
void menu(XButtonEvent *);
void spawn();
void circulate(Boolean activeFirst);
Boolean m_focusChanging; // checking times for focus change
Client *m_focusCandidate;
Window m_focusCandidateWindow;
Time m_focusTimestamp; // time of last crossing event
Boolean m_focusPointerMoved;
Boolean m_focusPointerNowStill;
void checkDelaysForFocus();
void nextEvent(XEvent *); // return
void eventButton(XButtonEvent *);
void eventMapRequest(XMapRequestEvent *);
void eventConfigureRequest(XConfigureRequestEvent *);
void eventUnmap(XUnmapEvent *);
void eventCreate(XCreateWindowEvent *);
void eventDestroy(XDestroyWindowEvent *);
void eventClient(XClientMessageEvent *);
void eventColormap(XColormapEvent *);
void eventProperty(XPropertyEvent *);
void eventEnter(XCrossingEvent *);
void eventReparent(XReparentEvent *);
void eventFocusIn(XFocusInEvent *);
};
#endif