} XConf;
enum {
- F_MAPPED_ONCE = (1 << 0),
- F_WM_DELETE = (1 << 1),
- F_DIALOG = (1 << 2),
- F_FLOATING = (1 << 3),
- F_SHADED = (1 << 4),
- F_NO_FRAME = (1 << 5),
-
-// F_STATE_MODAL = (1 << 0),
-// F_STATE_STICKY = (1 << 1),
-// F_STATE_MAXIMIZED_VERT = (1 << 2),
-// F_STATE_MAXIMIZED_HORZ = (1 << 3),
-// F_STATE_SHADED = (1 << 4),
-// F_STATE_SKIP_TASKBAR = (1 << 5),
-// F_STATE_SKIP_PAGER = (1 << 6),
-// F_STATE_HIDDEN = (1 << 7),
-// F_STATE_FULLSCREEN = (1 << 8),
-// F_STATE_ABOVE = (1 << 9),
-// F_STATE_BELOW = (1 << 10),
-// F_STATE_DEMANDS_ATTENTION = (1 << 11),
+ F_MAPPED_ONCE = (1 << 0),
+ F_MAPPED_FRAME = (1 << 1),
+ F_MAPPED_WINDOW = (1 << 2),
+
+
+
+// F_NO_FRAME = (1 << 1),
+
+
+ F_WM_DELETE = (1 << 16),
+};
+
+enum {
+ SET_FLAG = 0,
+ CLR_FLAG = 1,
+ TOG_FLAG = 2
};
typedef struct Node {
void Client_Move(Client* c, int xdiff, int ydiff);
void Client_Resize(Client* c, int xdiff, int ydiff);
void Client_Raise(Client* c);
-void Client_Lower(Client* c);
void Client_Update(Client* c);
void Client_Focus(Client* client);
void Client_Close(Client* client);
void Client_MoveResize(Client* c)
{
- int shaded = (c->flags & F_SHADED);
- int floating = 1; //(c->flags & (F_DIALOG|F_FLOATING));
+ int shaded = (c->wm_state & F_NET_WM_STATE_SHADED);
+ int floating = (c->wm_types & (F_NET_WM_WINDOW_TYPE_DIALOG|F_NET_WM_WINDOW_TYPE_NORMAL));
int minheight = (shaded || !floating ? MIN_HEIGHT : 3*MIN_HEIGHT);
if (c->w < minheight) c->w = minheight;
if (c->h < minheight) c->h = minheight;
// printf("XMoveResize(0x%lx, %d, %d, %d, %d)\n", c->frame, c->x, c->y, c->w, c->h);
XMoveResizeWindow(X.disp, c->frame, c->x, c->y, c->w, (shaded ? minheight : c->h));
- if ( !(c->flags & F_SHADED) )
+ if ( !(c->wm_state & F_NET_WM_STATE_SHADED) )
{
int child_w = c->w - FRAME_WIDTH_SUM;
int child_h = c->h - FRAME_HEIGHT_SUM;
c->wm_types = EWMH_GetWindowTypeFlags(c->win);
c->wm_state = EWMH_GetWindowStateFlags(c->win);
-// ReadWindowTypes(c);
-//
-// ReadWindowState(c);
-
/* The following properties are unused currently */
/* WM_ICON_NAME - window title when iconified */
/* WM_COLORMAP_WINDOWS - */
XDrawLine(X.disp, c->frame, DefaultGC(X.disp, X.screen), c->w-1, 0, c->w-1, c->h);
/* draw inner border */
- if (!(c->flags & F_SHADED))
+ if (!(c->wm_state & F_NET_WM_STATE_SHADED))
{
int bw = BORDER_WIDTH;
int mh = MIN_HEIGHT;
return l;
}
}
+
+static void UpdateState(Client* c)
+{
+ int frame_shown = 1;
+ int window_shown = 1;
+ int save_size_and_pos = 1;
+
+/*
+ if (fullscreen)
+ {
+ Update frame extents
+ Set window state to normal
+ Resize to fill workspace (do not change saved x/y/w/h)
+ Hide frame
+ Show window
+ Mark as fullscreen client on workspace
+ }
+ else if (maximized)
+ {
+ Update frame extents
+ Set window state to normal
+ Resize to fill workspace (do not change saved x/y/w/h)
+ Show frame
+ Show window
+ Clear fullscreen client if it was us
+ }
+ else if (!tiled and snapped left)
+ {
+ Update frame extents
+ Set window state to normal
+ Move/Resize to fill left side of workspace (do not change saved x/y/w/h)
+ Show frame
+ Show window
+ Clear fullscreen client if it was us
+ }
+ else if (!tiled and snapped right)
+ {
+ Update frame extents
+ Set window state to normal
+ Move/Resize to fill right side of workspace (do not change saved x/y/w/h)
+ Show frame
+ Show window
+ Clear fullscreen client if it was us
+ }
+ else if (hidden)
+ {
+ Update frame extents
+ Set window state to normal
+ Move/Resize to current x/y/w/h
+ Hide frame
+ Hide window
+ Clear fullscreen client if it was us
+ }
+ else // normal floating or tiled window
+ {
+ Update frame extents
+ Set window state to normal
+ Move/Resize to fill right side of workspace (do not change saved x/y/w/h)
+ Show frame
+ Show window
+ Clear fullscreen client if it was us
+ Place in current x/y/w/h
+ }
+
+ redraw
+*/
+}
+