132 lines
3.3 KiB
C++
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
|
|
|