1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131
|
#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(const char *, const 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();
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
|