]> git.mdlowis.com Git - proto/anvil.git/commitdiff
broken checkpoint
authorMike Lowis <mike.lowis@gentex.com>
Wed, 14 Aug 2024 20:48:07 +0000 (16:48 -0400)
committerMike Lowis <mike.lowis@gentex.com>
Wed, 14 Aug 2024 20:48:07 +0000 (16:48 -0400)
anvil.c
anvil.h
client.c

diff --git a/anvil.c b/anvil.c
index 4b3b0da9519f7921fd0339e86b2e47d83606bb84..ba98d6fd993d3835c6ae4056adc7a52a8af475c9 100644 (file)
--- a/anvil.c
+++ b/anvil.c
@@ -167,6 +167,15 @@ static void XClientMsg(XEvent* e)
         EWMH_UpdateWindowStateFlags(
             ev->window, ev->data.l[0], ev->data.l[1]);
     }
+
+    /*
+        TODO:
+        * handle WM_State && fullscreen
+        * handle active window (set urgency)
+
+    */
+
+
 }
 
 static void XPropNotify(XEvent* e)
diff --git a/anvil.h b/anvil.h
index b482b9b5676d2d4df4a8bdd765fe17ee5c70a4a3..77e0b8d578d63fce14a78d3c8b028cd768bfce5a 100644 (file)
--- a/anvil.h
+++ b/anvil.h
@@ -66,25 +66,22 @@ typedef struct {
 } 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 {
@@ -164,7 +161,6 @@ void Client_MoveResize(Client* c);
 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);
index 4c2ebe70c376cd6c186d2ce222b6f3ed3c0b566d..629abfce4d1c1bdd14355ec906d712f84033f3ea 100644 (file)
--- a/client.c
+++ b/client.c
@@ -129,14 +129,14 @@ void Client_Destroy(Client* c)
 
 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;
@@ -347,10 +347,6 @@ static void ReadProps(Client* c)
     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 - */
@@ -377,7 +373,7 @@ static void Redraw(Client* c)
         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;
@@ -511,3 +507,71 @@ static void* ListDelete(void* list, void* node)
         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
+*/
+}
+