21#include "ctwm_atoms.h"
87 if(!
Scr->workSpaceManagerActive) {
170 if(!
Scr->TransientHasOccupation) {
179 else if(twm_win->
group != 0) {
209 if(
Scr->numVscreens > 1) {
211 for(vs =
Scr->vScreenList; vs !=
NULL; vs = vs->
next) {
259 state = twm_win->
wmhints->initial_state;
403 wlist1 =
Scr->workSpaceMgr.workSpaceList;
526 if((!
Scr->WarpUnmapped) && (!
tw->mapped)) {
563 Scr->iconmgr =
Scr->workSpaceMgr.workSpaceList->iconmgr;
603 const int lines =
Scr->workSpaceMgr.
lines;
604 const int columns =
Scr->workSpaceMgr.columns;
605 const int bwidth =
Scr->vScreenList->wsw->bwidth;
606 const int bheight =
Scr->vScreenList->wsw->bheight;
607 const int vspace =
occwin->vspace;
608 const int hspace =
occwin->hspace;
609 const int height = ((bheight + vspace) * lines) + bheight + (2 * vspace);
614 if(!
Scr->workSpaceManagerActive) {
621#ifdef COLOR_BLIND_USER
625 if(!
Scr->BeNiceToColormap) {
632 occwin->columns = columns;
687 ws_width = columns * (bwidth + hspace) + hspace;
700 occwin->minheight = height;
714 int idx = (
j * columns) + i;
726 0,
Scr->Black,
ws->cp.back);
750 if(!
Scr->BeNiceToColormap) {
789 wmhints.input =
True;
804 fprintf(
stderr,
"cannot create occupy window, exiting...\n");
823 attr.cursor =
Scr->ButtonCursor;
840#define EVT (ButtonPressMask | ButtonReleaseMask | ExposureMask)
841#define BTN_IPT_CTX(win) \
842 XSelectInput(dpy, (win), EVT); \
843 XSaveContext(dpy, (win), TwmContext, (XPointer) tmp_win); \
844 XSaveContext(dpy, (win), ScreenContext, (XPointer) Scr);
876 int bwidth, bheight, owidth,
oheight;
896 lines =
Scr->workSpaceMgr.lines;
897 columns =
Scr->workSpaceMgr.columns;
900 bwidth = (
neww - columns * hspace) / columns;
901 bheight = (
newh - (lines + 2) * vspace) / (lines + 1);
915 i * (bwidth + hspace) + (hspace / 2),
916 j * (bheight + vspace) + (vspace / 2),
929 hspace = (
neww - 3 * owidth) / 4;
931 y = ((bheight + vspace) * lines) + ((3 * vspace) / 2);
933 x += owidth + hspace;
935 x += owidth + hspace;
943 occwin->bheight = bheight;
995 if(!
Scr->workSpaceManagerActive) {
1005 buttonW =
event->xbutton.window;
1018 for(
ws =
Scr->workSpaceMgr.workSpaceList;
ws !=
NULL;
ws =
ws->next) {
1026 int mask = 1 <<
ws->number;
1031 occupyW->tmpOccupation ^= mask;
1035 if(
occupyW->tmpOccupation == 0) {
1040 occupyW->twm_win->mapped =
false;
1041 occupyW->twm_win->occupation = 0;
1048 occupyW->twm_win->mapped =
false;
1049 occupyW->twm_win->occupation = 0;
1055 for(
ws =
Scr->workSpaceMgr.workSpaceList;
ws !=
NULL;
ws =
ws->next) {
1076 unsigned int width, height;
1087 occupyWindow =
Scr->workSpaceMgr.occupyWindow;
1089 w = occupyWindow->
w;
1220 for(vs =
Scr->vScreenList; vs !=
NULL; vs = vs->
next) {
1237 for(
ws =
Scr->workSpaceMgr.workSpaceList;
ws !=
NULL;
ws =
ws->next) {
1238 int mask = 1 <<
ws->number;
1285 if(
Scr->workSpaceMgr.noshowoccupyall) {
1299 for(
ws =
Scr->workSpaceMgr.workSpaceList;
ws !=
NULL;
ws =
ws->next) {
1300 int mask = 1 <<
ws->number;
1313 if(
Scr->SaveWorkspaceFocus &&
ws->save_focus ==
tmp_win) {
1325 if(!
Scr->TransientHasOccupation) {
1326 for(
t =
Scr->FirstWindow;
t !=
NULL;
t =
t->next) {
1328 ((
t->istransient &&
t->transientfor ==
tmp_win->w) ||
1356 if(!
Scr->workSpaceManagerActive) {
1383 if(!
Scr->TransientHasOccupation) {
1418 for(
ws =
Scr->workSpaceMgr.workSpaceList;
ws !=
NULL;
ws =
ws->next) {
1467 else if(*
res ==
'-') {
1493 mask |= (1 <<
ws->number);
1538 l += strlen(
prop) + 1;
1547 mask |= (1 <<
ws->number);
1588 for(
ws =
Scr->workSpaceMgr.workSpaceList;
ws !=
NULL;
ws =
ws->next) {
1589 if(mask & (1 <<
ws->number)) {
1590 wss[i++] =
ws->label;
1591 len += strlen(
ws->label) + 1;
1598 for(i = 0 ;
wss[i] !=
NULL ; i++) {
1600 len += strlen(
wss[i]) + 1;
1621# pragma GCC diagnostic push
1622# pragma GCC diagnostic ignored "-Wunused-function"
1648# pragma GCC diagnostic pop
TwmWindow * AddWindow(Window w, AWType wtype, IconMgr *iconp, VirtualScreen *vs)
bool RestartPreviousState
void Draw3DBorder(Window w, int x, int y, int width, int height, int bw, ColorPair cp, ButtonState state, bool fill, bool forcebw)
void PaintWsButton(PWBType which, VirtualScreen *vs, Window w, char *label, ColorPair cp, ButtonState state)
void EwmhSet_NET_WM_DESKTOP(TwmWindow *twm_win)
int EwmhGetOccupation(TwmWindow *twm_win)
Window frame
The X window for the overall frame.
void RemoveIconManager(TwmWindow *tmp_win)
WList * AddIconManager(TwmWindow *tmp_win)
int match(const char *p, const char *t)
void AddToList(name_list **list_head, const char *name, void *ptr)
void * LookInList(name_list *list_head, const char *name, XClassHint *class)
void Occupy(TwmWindow *twm_win)
void OccupyHandleButtonEvent(XEvent *event)
static XrmOptionDescRec table[]
static ColorPair occupyButtoncp
void RemoveFromWorkSpace(char *wname, TwmWindow *twm_win)
unsigned int GetMaskFromProperty(unsigned char *_prop, unsigned long len)
static int GetMaskFromResource(TwmWindow *win, char *res)
static char * mk_nullsep_string(const char *prop, int len)
void PaintOccupyWindow(void)
static char * everywhere_string
void OccupyAll(TwmWindow *twm_win)
void AddToWorkSpace(char *wname, TwmWindow *twm_win)
static bool CanChangeOccupation(TwmWindow **twm_winp)
void MoveToPrevWorkSpace(VirtualScreen *vs, TwmWindow *twm_win)
void CreateOccupyWindow(void)
static char * cancel_string
void ChangeOccupation(TwmWindow *tmp_win, int newoccupation)
int GetPropertyFromMask(unsigned int mask, char **prop)
void MoveToNextWorkSpace(VirtualScreen *vs, TwmWindow *twm_win)
void WmgrRedoOccupation(TwmWindow *win)
bool AddToClientsList(char *workspace, char *client)
void WMgrRemoveFromCurrentWorkSpace(VirtualScreen *vs, TwmWindow *win)
void ResizeOccupyWindow(TwmWindow *win)
void MoveToNextWorkSpaceAndFollow(VirtualScreen *vs, TwmWindow *twm_win)
void MoveToPrevWorkSpaceAndFollow(VirtualScreen *vs, TwmWindow *twm_win)
void ToggleOccupation(char *wname, TwmWindow *twm_win)
void SetupOccupation(TwmWindow *twm_win, int occupation_hint)
void WMgrAddToCurrentWorkSpaceAndWarp(VirtualScreen *vs, char *winname)
void OtpSetPriority(TwmWindow *twm_win, WinType wintype, int new_pri, int where)
void OtpRaise(TwmWindow *twm_win, WinType wintype)
Info and control for every X Window we take over.
bool iswspmgr
This is a workspace manager window.
bool isiconmgr
This is an icon manager window.
XWMHints * wmhints
Window manager hints.
Window w
The actual X Window handle.
bool istransient
This is a transient window.
char * name
Current window name. Points into TwmWindow::names.
int occupation
Workspaces the window is in (bitmap)
struct VirtualScreen * vs
Where the window is currently mapped (may be NULL)
bool mapped
Is the window mapped ?
XClassHint class
Window class info. From XGetClassHint().
struct VirtualScreen * parent_vs
Where the window is parented. Always set.
XWindowAttributes attr
Window attributes from XGetWindowAttributes()
Window transientfor
What window it's transient for.
Window group
Window group, from WM hints.
struct VirtualScreen * next
struct WorkSpaceWindow * wsw
void safe_strncpy(char *dest, const char *src, size_t size)
void GetColor(int kind, Pixel *what, const char *name)
Get info from the server about a given color.
void GetShadeColors(ColorPair *cp)
Try and create a 'shaded' version of a color for prettier UI.
void ReparentFrameAndIcon(TwmWindow *tmp_win)
void Vanish(VirtualScreen *vs, TwmWindow *tmp_win)
void DisplayWin(VirtualScreen *vs, TwmWindow *tmp_win)
void DeIconify(TwmWindow *tmp_win)
void RemoveWindowFromRegion(TwmWindow *tmp_win)
bool PlaceWindowInRegion(TwmWindow *tmp_win, int *final_x, int *final_y)
bool visible(const TwmWindow *tmp_win)
bool GetWMState(Window w, int *statep, Window *iwp)
TwmWindow * GetTwmWindow(Window w)
int restore_mask(Window w, long restore)
bool ConstrainByLayout(RLayout *layout, int move_off_res, int *left, int width, int *top, int height)
long mask_out_event(Window w, long ignore_event)
void SetMapStateProp(TwmWindow *tmp_win, int state)
void WarpToWindow(TwmWindow *t, bool must_raise)
void WMapAddWindowToWorkspace(TwmWindow *win, WorkSpace *ws)
bool WMapWindowMayBeAdded(TwmWindow *win)
void WMapRemoveWindowFromWorkspace(TwmWindow *win, WorkSpace *ws)
void GotoPrevWorkSpace(VirtualScreen *vs)
WorkSpace * GetWorkspace(const char *wname)
void GotoNextWorkSpace(VirtualScreen *vs)