pkgsrc-Changes archive

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]

CVS commit: pkgsrc/wm/spectrwm



Module Name:    pkgsrc
Committed By:   pin
Date:           Fri Nov  3 08:14:11 UTC 2023

Modified Files:
        pkgsrc/wm/spectrwm: Makefile distinfo
Added Files:
        pkgsrc/wm/spectrwm/patches: patch-spectrwm.c

Log Message:
wm/spectrwm: update to 3.5.0

spectrwm 3.5.0
==============

Released on Oct 22, 2023

Includes a bunch of major new features and improvements, such as dock/panel
support, an always mapped window mode, floating workspace layout, transparent
color support, tons of fixes, and more!

* Add *free* window mode.
  - *free* windows are floating windows that are not in a workspace. They remain
    mapped and may be resized, positioned and stacked anywhere. When iconified,
    they appear at the end of the uniconify menu. Note that free windows can be
    stacked above/below workspace windows but must be put into a workspace and
    unfloated to be part of its tiling layout. `float_toggle` is convenient for
    this purpose.
  - Add `free_toggle` action (default: `M-S-grave`). Toggle focused window
    between workspace mode and free mode.
  - Add `focus_free` action (default: `M-grave`). Switch focus to/from windows
    in free mode, if any.
  - Add related color and focus mark options.
* Improve EWMH (Extended Window Manager Hints) support.
  - Add support for docks/panels and desktop managers.
  - Add strut support for windows (e.g. panels) to automatically reserve screen
    real estate.
  - Add support for applications to initiate move/resize operations.
  - Add *demands attention* support to urgency features to include windows that
    request focus but are denied.
  - Add support for *below* state to keep windows stacked below others.
  - Improve _NET_ACTIVE_WINDOW handling.
  - Fix _NET_DESKTOP_VIEWPORT should update on workspace and region changes.
* Improve window stacking.
  - Overhaul window stacking for improved reliability and flexibility required
    for new features/fixes. Windows are now stacked as a whole instead of per
    region/workspace.
  - Add `click_to_raise` option (default: `1` (enabled)). Raises stacking
    priority when clicking on a window.
  - Add `below_toggle` action (default: `M-S-t`). Toggles *below* state on a
    focused window to keep it below other windows. `raise` can be used to
    temporarily bring a window above all others.
  - Fix `raise` and `always_raise` stacking issues.
  - Fix follow mode stacking issues.
  - Fix stacking order issues.
  - Restore stacking order after leaving fullscreen/maximized state.
* Workaround application issues related to ICCCM 6.3 button grabs.
  - If X Input Extension >= 2.1 is available, handle button bindings with the
    `REPLAY` flag passively, without grabs. For other button bindings, establish
    grabs on root.
  - Otherwise, for compatibility, establish all button binding grabs directly on
    client windows.
* Add alpha transparent color support for use with compositing managers. Colors
  can now be specified with an alpha component via the format
  `rbga:rr/gg/bb/aa` (values in hex.)
* Improve bar fonts.
  - Fallback to a "fail-safe" font if the default/user `bar_font` fails to load.
  - Add fallback handling for missing glyphs when using multiple fonts with Xft.
  - Add supplementary private-use code points to `bar_font_pua`.
  - Fix `$bar_font` program variable substitution should not include fallbacks.
* Improve window mapping.
  - Add `maximize_hide_other` and `fullscreen_hide_other` options. When a
    maximized/fullscreen window is focused, hide unrelated windows on the same
    workspace. Useful for transparent windows.
  - Fix window mapping issue when handling simultaneous screen changes.
  - Improve reliability.
* Improve (re)start handling.
  - Set intial focus more reliably.
  - Focus on fullscreen/maximized windows before main.
  - Restore window floating geometry on shutdown.
* Improve focus handling.
  - Add `prior` setting to `focus_close`. When the focused window is closed,
    fallback to the last focused window in the workspace.
  - Add `focus_prior` action. Focus last focused window on workspace.
    (Default binding: `M-S-a`.)
  - Improve previous focus fallback.
  - Fix iconified window focus issue.
  - Fix input focus fallback.
  - Fix setting focus with EWMH should unmaximize other windows.
  - Fix move/resize operation should abort on focus loss.
  - Fix `focus_main` issue with iconified/floating windows.
  - Fix max layout focus issue when closing transients.
  - Fix `warp_pointer` issues.
* Improve focus follow mode.
  - Fix handling of ConfigureWindow and EWMH requests.
  - Fix workspace switching issues.
* Improve status bar.
  - Add character sequence for workspace list indicator (+L).
  - Add workspace mark options for the workspace indicator (+L).
  - Add stack mark options for the stacking indicator (+S).
  - Add focus mark options for the focus status indicator (+F).
  - Add character sequence for number of windows in workspace (+w) (lowercase).
  - Add unfocused options to color bar text and background.
  - Add color options for when a window in free mode is focused.
  - Fix `bar_action` piping deadlock issue.
  - Fix `name_workspace` should clear on empty string.
  - Fix refresh bar on `name_workspace`.
  - Set WM_CLASS, WM_NAME and _NET_WM_NAME on the bar window.
* Add `floating` workspace layout stacking mode.
  - In floating layout, windows are not tiled and may be freely moved around
    and resized.
  - Add `stack_mark_floating` option for the stacking indicator
    (default:` '[~]'`).
  - Add `layout_floating` action (default: unbound). Directly switch to floating
    layout.
  - Add `floating` `stack_mode` to the `layout` option.
* Improve max layout.
  - Allow windows to be unmaximized/floated in max layout.
  - Add `max_layout_maximize` option to configure default maximized state.
  - Allow floating windows to remain floating when dragged between regions into
    a max layout workspace.
* Improve window handling.
  - Add *snap* behavior when dragging tiled/maximized windows. Prevents
    accidentally floating tiled windows.
  - Add `snap_distance` option (default 25). Sets the pixel distance a
    tiled/maximized window must be dragged (with the pointer) to make it
    float and move freely. Set to 0 to unsnap/float immediately.
  - Add `maximized_unfocus` and `fullscreen_unfocus` options. Configures
    handling of maximized/fullscreen windows that lose focus.
  - Add support for ICCCM `WM_CHANGE_STATE` ClientMessage. Enables applications
    to iconify their own windows.
  - Add support for window gravity. Improves floating window positioning by
    applications.
  - Disable border on maximized windows when `disable_border = always`.
  - Add window titles to `search_win`.
  - Fix maximize handling.
  - Fix handling when a window is lost immediately after ReparentWindow.
  - Fix Java workaround.
* Improve workspace handling.
  - Add `workspace_autorotate` option. When switching workspaces between regions,
    automatically "rotate" vertical/horizontal layouts based on RandR rotation
    data.
  - Add `prior_layout` action. Switch to the last used layout.
    (Unbound by default.)
  - Add optional rotation argument to `region` option.
  - Fix ws cycle actions should skip visible workspaces.
  - Add `cycle_visible` option to the man page and example conf.
* Improve debugging.
  - Add `-d` command-line option to enable debug mode. Enables debug mode
    actions and logging to *stderr* without the need to rebuild with
    `-DSWM_DEBUG`.
  - Add multi-line support to `debug_toggle` overlay (default: M-d).
  - Add atom name cache to avoid redundant requests/syncs when printing output.
* Fix X connection error handling to exit on a failed connection.
* Fix build issues.
  - Fix compile error when building against musl.
  - Fix build with clang 16 on Linux.
* Improve OpenBSD `pledge(2)` support.
  - Add "wpath" pledge for sparc64 support
  - Simplify usage.
* Improve Linux Makefile.
* Improve manual and examples.
  - Add details to `modkey` option in man page.
  - Add stack modes and window states to man page.
  - Fix incorrect key binding for `ws_6` in spectrwm_fr.conf.
  - Fix man page `wmctrl(1)` examples.
  - Fix `iostat(8)` issue in example baraction.sh script for OpenBSD.
  - Update man page note regarding `dmenu(1)` Xft support.
  - Update example spectrwm.conf.
  - Update `keyboard_mapping` example configuration files.
  - Update html manual.


To generate a diff of this commit:
cvs rdiff -u -r1.19 -r1.20 pkgsrc/wm/spectrwm/Makefile
cvs rdiff -u -r1.12 -r1.13 pkgsrc/wm/spectrwm/distinfo
cvs rdiff -u -r0 -r1.3 pkgsrc/wm/spectrwm/patches/patch-spectrwm.c

Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.

Modified files:

Index: pkgsrc/wm/spectrwm/Makefile
diff -u pkgsrc/wm/spectrwm/Makefile:1.19 pkgsrc/wm/spectrwm/Makefile:1.20
--- pkgsrc/wm/spectrwm/Makefile:1.19    Sun Jan 29 21:18:01 2023
+++ pkgsrc/wm/spectrwm/Makefile Fri Nov  3 08:14:10 2023
@@ -1,7 +1,6 @@
-# $NetBSD: Makefile,v 1.19 2023/01/29 21:18:01 ryoon Exp $
+# $NetBSD: Makefile,v 1.20 2023/11/03 08:14:10 pin Exp $
 
-DISTNAME=      spectrwm-3.4.1
-PKGREVISION=   2
+DISTNAME=      spectrwm-3.5.0
 CATEGORIES=    wm
 MASTER_SITES=  ${MASTER_SITE_GITHUB:=conformal/}
 GITHUB_TAG=    ${GITHUB_PROJECT:tu}_${PKGVERSION_NOREV:S/./_/g}
@@ -60,4 +59,6 @@ BUILDLINK_DEPMETHOD.libXt=    build
 .include "../../x11/xcb-util/buildlink3.mk"
 .include "../../x11/xcb-util-keysyms/buildlink3.mk"
 .include "../../x11/xcb-util-wm/buildlink3.mk"
+.include "../../fonts/fontconfig/buildlink3.mk"
+.include "../../graphics/freetype2/buildlink3.mk"
 .include "../../mk/bsd.pkg.mk"

Index: pkgsrc/wm/spectrwm/distinfo
diff -u pkgsrc/wm/spectrwm/distinfo:1.12 pkgsrc/wm/spectrwm/distinfo:1.13
--- pkgsrc/wm/spectrwm/distinfo:1.12    Tue Oct 26 11:25:18 2021
+++ pkgsrc/wm/spectrwm/distinfo Fri Nov  3 08:14:10 2023
@@ -1,5 +1,6 @@
-$NetBSD: distinfo,v 1.12 2021/10/26 11:25:18 nia Exp $
+$NetBSD: distinfo,v 1.13 2023/11/03 08:14:10 pin Exp $
 
-BLAKE2s (spectrwm-3.4.1.tar.gz) = 984f05c0bd03da9772b156a0c3f653d8ad951655c223d6cb41bb0f4fd481e7f1
-SHA512 (spectrwm-3.4.1.tar.gz) = 94d468833124b51fa12b29b173126f10f27dd551d599459e4bea589721b3df6f1f0af0ea67326ed3ad462e1203d3bbcb82032ff83abfa0943ec45afd29dedaa6
-Size (spectrwm-3.4.1.tar.gz) = 164507 bytes
+BLAKE2s (spectrwm-3.5.0.tar.gz) = 1a593fbba884a33dfb43ca7e4a974c41b4350b6c1d83cbd629ae4a5faf842e33
+SHA512 (spectrwm-3.5.0.tar.gz) = a4cc86710b9367d8c39b8d22cd315db32a3e69bdcb9092620779fa17d660a8433aef3624708d6f348891eae08e07defa03eaa022ff4cce7a5f9f43cfe388af8e
+Size (spectrwm-3.5.0.tar.gz) = 194387 bytes
+SHA1 (patch-spectrwm.c) = 720b61c20e75586863482690b2a1e463aa75be96

Added files:

Index: pkgsrc/wm/spectrwm/patches/patch-spectrwm.c
diff -u /dev/null pkgsrc/wm/spectrwm/patches/patch-spectrwm.c:1.3
--- /dev/null   Fri Nov  3 08:14:11 2023
+++ pkgsrc/wm/spectrwm/patches/patch-spectrwm.c Fri Nov  3 08:14:10 2023
@@ -0,0 +1,338 @@
+$NetBSD: patch-spectrwm.c,v 1.3 2023/11/03 08:14:10 pin Exp $
+
+Fix NetBSD build issues.
+See commit 624b67f32723ab600cbc272e9199cadd66659825
+
+--- spectrwm.c.orig    2023-10-22 07:58:36.000000000 +0000
++++ spectrwm.c
+@@ -63,6 +63,9 @@
+ #else
+ #include <util.h>
+ #endif
++#if defined(__NetBSD__)
++#include <inttypes.h>
++#endif
+ #include <X11/cursorfont.h>
+ #include <X11/extensions/Xrandr.h>
+ #include <X11/Xcursor/Xcursor.h>
+@@ -74,7 +77,8 @@
+ #include <xcb/xcb_event.h>
+ #include <xcb/xcb_icccm.h>
+ #include <xcb/xcb_keysyms.h>
+-#if defined(__linux__) || defined(__FreeBSD__) || defined(__OpenBSD__)
++#if defined(__linux__) || defined(__FreeBSD__) || defined(__OpenBSD__) ||     \
++    defined(__NetBSD__)
+ #include <xcb/xinput.h>
+ #define SWM_XCB_HAS_XINPUT
+ #endif
+@@ -1713,6 +1717,7 @@ void      stack_master(struct workspace *, s
+ static void    update_layout(struct swm_screen *);
+ void   store_float_geom(struct ws_win *);
+ char  *strdupsafe(const char *);
++static int32_t         strtoint32(const char *, int32_t, int32_t, int *);
+ void   swapwin(struct swm_screen *, struct binding *, union arg *);
+ void   switch_workspace(struct swm_region *, struct workspace *, bool);
+ void   switchlayout(struct swm_screen *, struct binding *, union arg *);
+@@ -5188,7 +5193,7 @@ bar_setup(struct swm_region *r)
+ 
+       r->bar->r = r;
+       X(r->bar) = X(r) + bar_border_width;
+-      Y(r->bar) = bar_at_bottom ? (Y(r) + HEIGHT(r) - bar_height -
++      Y(r->bar) = bar_at_bottom ? (Y(r) + HEIGHT(r) - bar_height +
+           bar_border_width) : Y(r) + bar_border_width;
+       WIDTH(r->bar) = WIDTH(r) - 2 * bar_border_width;
+       HEIGHT(r->bar) = bar_height - 2 * bar_border_width;
+@@ -8725,7 +8730,7 @@ get_win_name(xcb_window_t win)
+               name = strdup("");
+ 
+       if (name == NULL)
+-              err(1, "get_win_name: failed to allocate memory.");
++              err(1, "get_win_name: strdup");
+ 
+       free(r);
+ 
+@@ -9323,8 +9328,7 @@ search_resp_search_workspace(const char 
+ {
+       struct workspace        *ws;
+       char                    *p, *q;
+-      int                     ws_idx;
+-      const char              *errstr;
++      int                     ws_idx, fail;
+ 
+       DNPRINTF(SWM_D_MISC, "resp: %s\n", resp);
+ 
+@@ -9336,9 +9340,9 @@ search_resp_search_workspace(const char 
+       p = strchr(q, ':');
+       if (p != NULL)
+               *p = '\0';
+-      ws_idx = (int)strtonum(q, 1, workspace_limit, &errstr) - 1;
+-      if (errstr) {
+-              DNPRINTF(SWM_D_MISC, "workspace idx is %s: %s", errstr, q);
++      ws_idx = strtoint32(q, 1, workspace_limit, &fail) - 1;
++      if (fail) {
++              DNPRINTF(SWM_D_MISC, "integer conversion failed for %s\n", q);
+               free(q);
+               return;
+       }
+@@ -9353,8 +9357,7 @@ void
+ search_resp_search_window(const char *resp)
+ {
+       char                    *s, *p;
+-      int                     idx;
+-      const char              *errstr;
++      int                     idx, fail;
+       struct search_window    *sw;
+ 
+       DNPRINTF(SWM_D_MISC, "resp: %s\n", resp);
+@@ -9367,9 +9370,9 @@ search_resp_search_window(const char *re
+       p = strchr(s, ':');
+       if (p != NULL)
+               *p = '\0';
+-      idx = (int)strtonum(s, 1, INT_MAX, &errstr);
+-      if (errstr) {
+-              DNPRINTF(SWM_D_MISC, "window idx is %s: %s", errstr, s);
++      idx = strtoint32(s, 1, INT_MAX, &fail);
++      if (fail) {
++              DNPRINTF(SWM_D_MISC, "integer conversion failed for %s\n", s);
+               free(s);
+               return;
+       }
+@@ -12046,6 +12049,7 @@ get_input_event_label(xcb_ge_generic_eve
+ 
+       return (label);
+ }
++#endif /* SWM_XCB_HAS_XINPUT */
+ 
+ #if defined(SWM_XCB_HAS_XINPUT) && defined(XCB_INPUT_RAW_BUTTON_PRESS)
+ void
+@@ -13153,7 +13157,7 @@ setconfcolorlist(const char *selector, c
+ 
+               num_bg_colors = 0;
+               while ((b = strsep(&sp, SWM_CONF_DELIMLIST)) != NULL) {
+-                      while (isblank(*b)) b++;
++                      while (isblank((unsigned char)*b)) b++;
+                       if (*b == '\0')
+                               continue;
+                       setconfcolor(selector, b, flags + num_bg_colors, emsg);
+@@ -13171,7 +13175,7 @@ setconfcolorlist(const char *selector, c
+ 
+               num_fg_colors = 0;
+               while ((b = strsep(&sp, SWM_CONF_DELIMLIST)) != NULL) {
+-                      while (isblank(*b)) b++;
++                      while (isblank((unsigned char)*b)) b++;
+                       if (*b == '\0')
+                               continue;
+                       setconfcolor(selector, b, flags + num_fg_colors, emsg);
+@@ -13662,7 +13666,7 @@ conf_load(const char *filename, int keym
+               }
+               /* trim trailing spaces */
+               ce = optval + strlen(optval) - 1;
+-              while (ce > optval && isspace(*ce))
++              while (ce > optval && isspace((unsigned char)*ce))
+                       --ce;
+               *(ce + 1) = '\0';
+               /* call function to deal with it all */
+@@ -13687,85 +13691,69 @@ conf_load(const char *filename, int keym
+       return (0);
+ }
+ 
++static int32_t
++strtoint32(const char *str, int32_t min, int32_t max, int *fail)
++{
++      int32_t         ret;
++#if defined(__NetBSD__)
++      int             e;
++
++      ret = strtoi(str, NULL, 10, min, max, &e);
++      *fail = (e != 0);
++#else
++      const char      *errstr;
++
++      ret = strtonum(str, min, max, &errstr);
++      *fail = (errstr != NULL);
++#endif
++      return (ret);
++}
++
+ pid_t
+ window_get_pid(xcb_window_t win)
+ {
+       pid_t                           ret = 0;
+-      const char                      *errstr;
+-      xcb_get_property_cookie_t       pc;
++      int                             fail;
+       xcb_get_property_reply_t        *pr;
+ 
+-      pc = xcb_get_property(conn, 0, win, a_net_wm_pid,
+-          XCB_ATOM_CARDINAL, 0, 1);
+-      pr = xcb_get_property_reply(conn, pc, NULL);
+-      if (pr == NULL)
+-              goto tryharder;
+-      if (pr->type != XCB_ATOM_CARDINAL) {
+-              free(pr);
+-              goto tryharder;
+-      }
+-
+-      if (pr->type == a_net_wm_pid && pr->format == 32)
++      pr = xcb_get_property_reply(conn, xcb_get_property(conn, 0, win,
++          a_net_wm_pid, XCB_ATOM_CARDINAL, 0, 1), NULL);
++      if (pr && pr->type == XCB_ATOM_CARDINAL && pr->format == 32)
+               ret = *((pid_t *)xcb_get_property_value(pr));
+-      free(pr);
+-
+-      return (ret);
+-
+-tryharder:
+-      pc = xcb_get_property(conn, 0, win, a_swm_pid, XCB_ATOM_STRING,
+-          0, SWM_PROPLEN);
+-      pr = xcb_get_property_reply(conn, pc, NULL);
+-      if (pr == NULL)
+-              return (0);
+-      if (pr->type != a_swm_pid) {
++      else { /* tryharder */
+               free(pr);
+-              return (0);
++              pr = xcb_get_property_reply(conn, xcb_get_property(conn, 0, win,
++                  a_swm_pid, XCB_ATOM_STRING, 0, SWM_PROPLEN), NULL);
++              if (pr && pr->type == XCB_ATOM_STRING && pr->format == 8) {
++                      ret = (pid_t)strtoint32(xcb_get_property_value(pr), 0,
++                          INT32_MAX, &fail);
++                      if (fail)
++                              ret = 0;
++              }
+       }
+-
+-      ret = (pid_t)strtonum(xcb_get_property_value(pr), 0, INT_MAX, &errstr);
+       free(pr);
+ 
++      DNPRINTF(SWM_D_PROP, "pid: %d\n", ret);
+       return (ret);
+ }
+ 
+ int
+ get_swm_ws(xcb_window_t id)
+ {
+-      int                     ws_idx = -2;
+-      char                    *prop = NULL;
+-      size_t                  proplen;
+-      const char              *errstr;
++      int                             ws_idx = -2, fail;
+       xcb_get_property_reply_t        *gpr;
+ 
+-      gpr = xcb_get_property_reply(conn,
+-              xcb_get_property(conn, 0, id, a_swm_ws,
+-                  XCB_ATOM_STRING, 0, SWM_PROPLEN),
+-              NULL);
+-      if (gpr == NULL)
+-              return (-1);
+-      if (gpr->type) {
+-              proplen = xcb_get_property_value_length(gpr);
+-              if (proplen > 0) {
+-                      prop = malloc(proplen + 1);
+-                      if (prop) {
+-                              memcpy(prop,
+-                                  xcb_get_property_value(gpr),
+-                                  proplen);
+-                              prop[proplen] = '\0';
+-                      }
+-              }
++      gpr = xcb_get_property_reply(conn, xcb_get_property(conn, 0, id,
++          a_swm_ws, XCB_ATOM_STRING, 0, SWM_PROPLEN), NULL);
++      if (gpr && gpr->type == XCB_ATOM_STRING && gpr->format == 8) {
++              ws_idx = strtoint32(xcb_get_property_value(gpr), -1,
++                  workspace_limit - 1, &fail);
++              if (fail)
++                      ws_idx = -2;
+       }
+       free(gpr);
+ 
+-      if (prop) {
+-              DNPRINTF(SWM_D_PROP, "_SWM_WS: %s\n", prop);
+-              ws_idx = (int)strtonum(prop, -1, workspace_limit - 1, &errstr);
+-              if (errstr) {
+-                      DNPRINTF(SWM_D_PROP, "win #%s: %s", errstr, prop);
+-              }
+-              free(prop);
+-      }
+-
++      DNPRINTF(SWM_D_PROP, "_SWM_WS: %d\n", ws_idx);
+       return (ws_idx);
+ }
+ 
+@@ -13781,14 +13769,12 @@ get_ws_id(struct ws_win *win)
+ 
+       gpr = xcb_get_property_reply(conn, xcb_get_property(conn, 0, win->id,
+           ewmh[_NET_WM_DESKTOP].atom, XCB_ATOM_CARDINAL, 0, 1), NULL);
+-      if (gpr) {
+-              if (gpr->type == XCB_ATOM_CARDINAL && gpr->format == 32) {
+-                      val = *((uint32_t *)xcb_get_property_value(gpr));
+-                      DNPRINTF(SWM_D_PROP, "get _NET_WM_DESKTOP: %#x\n", val);
+-                      wsid = (val == EWMH_ALL_DESKTOPS ? -1 : (int)val);
+-              }
+-              free(gpr);
++      if (gpr && gpr->type == XCB_ATOM_CARDINAL && gpr->format == 32) {
++              val = *((uint32_t *)xcb_get_property_value(gpr));
++              DNPRINTF(SWM_D_PROP, "get _NET_WM_DESKTOP: %#x\n", val);
++              wsid = (val == EWMH_ALL_DESKTOPS ? -1 : (int)val);
+       }
++      free(gpr);
+ 
+       if (wsid == -2 && !(win->quirks & SWM_Q_IGNORESPAWNWS))
+               wsid = get_swm_ws(win->id);
+@@ -13977,9 +13963,6 @@ manage_window(xcb_window_t id, int spawn
+ 
+       free(gr);
+ 
+-      TAILQ_INSERT_TAIL(&s->managed, win, manage_entry);
+-      s->managed_count++;
+-
+       /* Select which X events to monitor and set border pixel color. */
+       wa[0] = XCB_EVENT_MASK_ENTER_WINDOW | XCB_EVENT_MASK_PROPERTY_CHANGE |
+           XCB_EVENT_MASK_STRUCTURE_NOTIFY;
+@@ -14081,6 +14064,10 @@ manage_window(xcb_window_t id, int spawn
+       if (win->ws == NULL)
+               win->ws = s->r->ws; /* Failsafe. */
+ 
++      /* WS must be valid before adding to managed list. */
++      TAILQ_INSERT_TAIL(&s->managed, win, manage_entry);
++      s->managed_count++;
++
+       /* Set the _NET_WM_DESKTOP atom. */
+       DNPRINTF(SWM_D_PROP, "set _NET_WM_DESKTOP: %d\n", win->ws->idx);
+       xcb_change_property(conn, XCB_PROP_MODE_REPLACE, win->id,
+@@ -14155,6 +14142,9 @@ manage_window(xcb_window_t id, int spawn
+       if (win->quirks & SWM_Q_ANYWHERE)
+               new_flags |= SWM_F_MANUAL;
+ 
++      if (win->maxstackmax && ws_maxstack(win->ws))
++              new_flags |= EWMH_F_MAXIMIZED;
++
+       ewmh_apply_flags(win, new_flags);
+       ewmh_update_wm_state(win);
+ 
+@@ -15226,7 +15216,6 @@ get_mapping_notify_label(uint8_t request
+ 
+       return (label);
+ }
+-#endif
+ 
+ void
+ mappingnotify(xcb_mapping_notify_event_t *e)
+@@ -15474,7 +15463,7 @@ propertynotify(xcb_property_notify_event
+ 
+       if (e->atom == XCB_ATOM_WM_CLASS ||
+           e->atom == XCB_ATOM_WM_NAME) {
+-              if (win->ws && win->ws->r)
++              if (win->ws->r)
+                       bar_draw(win->ws->r->bar);
+       } else if (e->atom == XCB_ATOM_WM_HINTS) {
+               get_wm_hints(win);
+@@ -16636,7 +16625,7 @@ setup_extensions(void)
+                       free(xiqvr);
+               }
+       }
+-#endif
++#endif /* SWM_XCB_HAS_XINPUT */
+ }
+ 
+ void



Home | Main Index | Thread Index | Old Index