aboutsummaryrefslogtreecommitdiff
path: root/Src/Wasabi/api/wnd/wndtrack.h
diff options
context:
space:
mode:
Diffstat (limited to 'Src/Wasabi/api/wnd/wndtrack.h')
-rw-r--r--Src/Wasabi/api/wnd/wndtrack.h104
1 files changed, 104 insertions, 0 deletions
diff --git a/Src/Wasabi/api/wnd/wndtrack.h b/Src/Wasabi/api/wnd/wndtrack.h
new file mode 100644
index 00000000..f4f33d80
--- /dev/null
+++ b/Src/Wasabi/api/wnd/wndtrack.h
@@ -0,0 +1,104 @@
+#ifndef __WNDTRACK_H
+#define __WNDTRACK_H
+
+#include "cwndtrack.h"
+#include <bfc/tlist.h>
+#include <bfc/ptrlist.h>
+#include <api/wndmgr/layout.h>
+
+class ifc_window;
+
+#define WNDTRACKCB_POPUPEXIT 0x8797
+#define WNDTRACKCB_POPUPEXITALL 0x8798
+
+const int DEFAULT_DOCK_DIST=10;
+const int MIN_DOCK_DIST=1;
+const int MAX_DOCK_DIST=64;
+
+class coopEntry {
+ public:
+ coopEntry(ifc_window *w, int lock=0) : wnd(w), locked(lock) {}
+ ~coopEntry() {}
+
+ ifc_window *wnd;
+ int locked;
+};
+
+#ifndef _REDOCK_STRUCT_DEFINED
+#define _REDOCK_STRUCT_DEFINED
+typedef struct {
+ Layout *l;
+ RECT original_rect;
+} redock_struct;
+#endif
+
+class WindowTracker {
+public:
+ WindowTracker();
+ ~WindowTracker();
+
+ void addWindow(ifc_window *wnd);
+ void removeWindow(ifc_window *wnd);
+ int checkWindow(ifc_window *wnd);
+ ifc_window *enumWindows(int n);
+ int getNumWindows();
+ ifc_window *enumAllWindows(int n);
+ int getNumAllWindows();
+ bool autoDock(ifc_window *thiswnd, RECT *newPosition, int mask);
+ bool autoDock(ifc_window *thiswnd, RECT *newPosition, RECT *oldPosition, int mask);
+ static bool touches(const RECT &z, const RECT &r);
+
+ RECT findOpenRect(const RECT &prev, ifc_window *exclude=NULL);
+
+ static void setDockDistance(int dd);
+ static int getDockDistance();
+ static void setEnableDocking(int ed);
+
+ void startCooperativeMove(ifc_window *wnd);
+ void endCooperativeMove();
+ int wasCooperativeMove();
+ void invalidateAllWindows();
+ int getNumDocked();
+ ifc_window *enumDocked(int n);
+
+ static void addRootWnd(ifc_window *wnd);
+ static void removeRootWnd(ifc_window *wnd);
+ static ifc_window *rootWndFromPoint(POINT *pt);
+ static ifc_window *rootWndFromHwnd(OSWINDOWHANDLE h);
+ static void layoutChanged(Layout *previouswnd, Layout *newwnd); // re-dock windows when changing layout
+
+ static void beforeRedock(Layout *l, redock_struct *rs);
+ static void afterRedock(Layout *l, redock_struct *rs);
+ static ifc_window *getNextDesktopWindow(ifc_window *w, int next);
+ static void snapAdjustWindowRect(ifc_window *w, RECT *r, RECT *adjustvals=NULL);
+ static void unsnapAdjustWindowRect(ifc_window *w, RECT *r, RECT *adjustvals=NULL);
+
+private:
+ void addCooperative(ifc_window *thiswnd);
+ void addCoopWnd(ifc_window *w, int forced=0);
+ int hasCoopWnd(ifc_window *w);
+ void flushCoopWnds();
+ static void recursAddToMoveWindows(ifc_window *wnd, redock_struct *rs, int v=-1); // used by layoutChanged()
+
+ static PtrList<ifc_window> desktopwnds;
+ static PtrList<ifc_window> nonvirtuals;
+ static PtrList<coopEntry> coopList;
+ static PtrList<ifc_window> recursList;
+ static ifc_window *coopWnd;
+ static PtrList<ifc_window> allWnd;
+ static PtrList<ifc_window> tomoveWindows_top;
+ static PtrList<ifc_window> tomoveWindows_left;
+ static PtrList<ifc_window> tomoveWindows_bottom;
+ static PtrList<ifc_window> tomoveWindows_right;
+
+ static int dockDist;
+ static int dock_enabled;
+ int wascoop;
+ int disabledock;
+ ifc_window *coopcachewnd;
+ int coopcache;
+};
+
+extern WindowTracker *windowTracker;
+
+#endif