[repo.or.cz] wmaker-crm.git branch master updated: wmaker-0.96.0-53-g92e1e9fb0b19

7 views
Skip to first unread message

crmafra

unread,
Feb 7, 2026, 8:35:07 AMFeb 7
to wmake...@googlegroups.com
This is an automated email generated because a ref change occurred in the
git repository for project wmaker-crm.git.

The branch, master has been updated
via 92e1e9fb0b1935c8330847fc493d1811b236c59c (commit)
via ddf0b2036763cb0bf4ac3df309f663b4e24058f6 (commit)
via d303317a31c0efc4ba1821f4120a10132a6ab982 (commit)
via c620b354b55d3d1dc1dfbd233057d284e6d1fcb8 (commit)
via ebac2bbcd82a8ce621c2eb68209e3862cf8bd7f0 (commit)
via 3281349f8d2942233f67013e39eca71fb84f7160 (commit)
via 3f5280987e779d209ce5a4ad25b4696dcabc4c03 (commit)
from 6d0953bc229c8b6e8ed0cd251bd80280acf3e7e8 (commit)

Those revisions listed above that are new to this repository have
not appeared on any other notification email; so we list those
revisions in full, below.

- Log -----------------------------------------------------------------
commit 92e1e9fb0b1935c8330847fc493d1811b236c59c
Author: David Maciejak <david.m...@gmail.com>
Date: Tue, 3 Feb 2026 18:30:04 -0500
URL: <https://repo.or.cz/wmaker-crm.git/92e1e9fb0b1935c8>

WPrefs: fix some truncated texts

This patch is fixing some text truncation in the ergonomic and
hot corner preference tabs.
---
WPrefs.app/HotCornerShortcuts.c | 2 +-
WPrefs.app/Preferences.c | 6 +++---
2 files changed, 4 insertions(+), 4 deletions(-)

diff --git a/WPrefs.app/HotCornerShortcuts.c b/WPrefs.app/HotCornerShortcuts.c
index d3259d809872..f2db2c041270 100644
--- a/WPrefs.app/HotCornerShortcuts.c
+++ b/WPrefs.app/HotCornerShortcuts.c
@@ -257,7 +257,7 @@ static void createPanel(Panel * p)
WMMoveWidget(panel->hcdescF, 15, 130);

panel->hcdescL = WMCreateLabel(panel->hcdescF);
- WMResizeWidget(panel->hcdescL, 200, 60);
+ WMResizeWidget(panel->hcdescL, 200, 70);
WMMoveWidget(panel->hcdescL, 15, 10);
WMSetLabelText(panel->hcdescL,
_("Instructions:\n\n"
diff --git a/WPrefs.app/Preferences.c b/WPrefs.app/Preferences.c
index 6a9f8276fe6f..2fa1e4a816fb 100644
--- a/WPrefs.app/Preferences.c
+++ b/WPrefs.app/Preferences.c
@@ -284,14 +284,14 @@ static void createPanel(Panel * p)

/***************** Options ****************/
panel->optF = WMCreateFrame(panel->box);
- WMResizeWidget(panel->optF, 255, 94);
+ WMResizeWidget(panel->optF, 255, 96);
WMMoveWidget(panel->optF, 15, 125);
WMSetFrameTitle(panel->optF, _("AppIcon bouncing"));

for (i = 0; i < wlengthof(appicon_bouncing); i++) {
panel->bounceB[i] = WMCreateSwitchButton(panel->optF);
WMResizeWidget(panel->bounceB[i], 237, 26);
- WMMoveWidget(panel->bounceB[i], 9, 14 + i * 25);
+ WMMoveWidget(panel->bounceB[i], 9, 16 + i * 26);
WMSetButtonText(panel->bounceB[i], _(appicon_bouncing[i].label));

if (appicon_bouncing[i].default_value)
@@ -306,7 +306,7 @@ static void createPanel(Panel * p)

/***************** Workspace border ****************/
panel->borderF = WMCreateFrame(panel->box);
- WMResizeWidget(panel->borderF, 220, 75);
+ WMResizeWidget(panel->borderF, 220, 77);
WMMoveWidget(panel->borderF, 285, 144);
WMSetFrameTitle(panel->borderF, _("Workspace border"));


commit ddf0b2036763cb0bf4ac3df309f663b4e24058f6
Author: David Maciejak <david.m...@gmail.com>
Date: Tue, 3 Feb 2026 18:17:35 -0500
URL: <https://repo.or.cz/wmaker-crm.git/ddf0b2036763cb0b>

wmaker: refactor get_corner()

This patch refactors get_corner() for better readability
and performance.
---
src/event.c | 25 ++++++++++++++++++++-----
1 file changed, 20 insertions(+), 5 deletions(-)

diff --git a/src/event.c b/src/event.c
index 99fbba5a0a38..d23cbe3f224e 100644
--- a/src/event.c
+++ b/src/event.c
@@ -1958,16 +1958,31 @@ static void handleKeyPress(XEvent * event)
#define CORNER_BOTTOMLEFT 3
#define CORNER_BOTTOMRIGHT 4

-static int get_corner(WMRect rect, WMPoint p)
+static inline int get_corner(WMRect rect, WMPoint p)
{
- if (p.x <= (rect.pos.x + wPreferences.hot_corner_edge) && p.y <= (rect.pos.y + wPreferences.hot_corner_edge))
+ const int edge = wPreferences.hot_corner_edge;
+ const int left_edge = rect.pos.x + edge;
+ const int right_edge = rect.pos.x + rect.size.width - edge;
+ const int top_edge = rect.pos.y + edge;
+ const int bottom_edge = rect.pos.y + rect.size.height - edge;
+
+ int in_left = (p.x <= left_edge);
+ int in_right = (p.x >= right_edge);
+ int in_top = (p.y <= top_edge);
+ int in_bottom = (p.y >= bottom_edge);
+
+ if (!(in_left || in_right) || !(in_top || in_bottom))
+ return CORNER_NONE;
+
+ if (in_left && in_top)
return CORNER_TOPLEFT;
- if (p.x >= (rect.pos.x + rect.size.width - wPreferences.hot_corner_edge) && p.y <= (rect.pos.y + wPreferences.hot_corner_edge))
+ if (in_right && in_top)
return CORNER_TOPRIGHT;
- if (p.x <= (rect.pos.x + wPreferences.hot_corner_edge) && p.y >= (rect.pos.y + rect.size.height - wPreferences.hot_corner_edge))
+ if (in_left && in_bottom)
return CORNER_BOTTOMLEFT;
- if (p.x >= (rect.pos.x + rect.size.width - wPreferences.hot_corner_edge) && p.y >= (rect.pos.y + rect.size.height - wPreferences.hot_corner_edge))
+ if (in_right && in_bottom)
return CORNER_BOTTOMRIGHT;
+
return CORNER_NONE;
}


commit d303317a31c0efc4ba1821f4120a10132a6ab982
Author: David Maciejak <david.m...@gmail.com>
Date: Wed, 4 Feb 2026 19:16:58 -0500
URL: <https://repo.or.cz/wmaker-crm.git/d303317a31c0efc4>

wmaker: handle keybinding change notifications

This patch is to fix an issue seen on FreeBSD 15 where
keybinding are mixed up at the cold start of wmaker.
It is mentioned at https://github.com/window-maker/wmaker/issues/43
Seems that issue is not happening on Linux.
A warm restart ("restart window maker") from the root menu
is getting rid of that issue temporarily.

To solve that issue, now wmaker is reloading the keyboard mapping
via the new wReadKeybindings function when a XkbNewKeyboardNotifyMask
event is received.
It means xkb, which is part of X11 core,
is now used by default and not conditionally with modelock.
I tried to delay reading the keybinding as late as possible but
it did not solve the issue as seems X is started with a improper
keyboard by default.

Here some debug trace when the bindings are loaded by wmaker on FreeBSD:

Keybind F12: keycode=96 modifier=0x0 <--- cold starting wmaker
Keybind F11: keycode=95 modifier=0x0
Keybind Escape: keycode=9 modifier=0x4
Keybind M: keycode=58 modifier=0x8
Keybind H: keycode=43 modifier=0x8
Keybind Up: keycode=98 modifier=0x8 <--- keycode is wrong, provided by X11
Keybind Down: keycode=104 modifier=0x8
Keybind Tab: keycode=23 modifier=0x8
Keybind Tab: keycode=23 modifier=0x9
Keybind Right: keycode=102 modifier=0xc
Keybind Left: keycode=100 modifier=0xc
Keybind 1: keycode=10 modifier=0x8
Keybind 2: keycode=11 modifier=0x8
Keybind 3: keycode=12 modifier=0x8
Keybind 4: keycode=13 modifier=0x8
Keybind 5: keycode=14 modifier=0x8
Keybind 6: keycode=15 modifier=0x8
Keybind 7: keycode=16 modifier=0x8
Keybind 8: keycode=17 modifier=0x8
Keybind 9: keycode=18 modifier=0x8
Keybind 0: keycode=19 modifier=0x8
Keybind Print: keycode=111 modifier=0x0 <--- keycode is wrong, 111 is UP key

/usr/ports/x11-wm/windowmaker/work/WindowMaker-0.96.0/src/.libs/wmaker(execInitScript(main.c:531)):
error: /root/GNUstep/Library/WindowMaker/autostart:could not execute initialization script <--- warm restart from wmaker
Keybind F12: keycode=96 modifier=0x0
Keybind F11: keycode=95 modifier=0x0
Keybind Escape: keycode=9 modifier=0x4
Keybind M: keycode=58 modifier=0x8
Keybind H: keycode=43 modifier=0x8
Keybind Up: keycode=111 modifier=0x8 <--- UP key keycode is correct
Keybind Down: keycode=116 modifier=0x8
Keybind Tab: keycode=23 modifier=0x8
Keybind Tab: keycode=23 modifier=0x9
Keybind Right: keycode=114 modifier=0xc
Keybind Left: keycode=113 modifier=0xc
Keybind 1: keycode=10 modifier=0x8
Keybind 2: keycode=11 modifier=0x8
Keybind 3: keycode=12 modifier=0x8
Keybind 4: keycode=13 modifier=0x8
Keybind 5: keycode=14 modifier=0x8
Keybind 6: keycode=15 modifier=0x8
Keybind 7: keycode=16 modifier=0x8
Keybind 8: keycode=17 modifier=0x8
Keybind 9: keycode=18 modifier=0x8
Keybind 0: keycode=19 modifier=0x8
Keybind Print: keycode=107 modifier=0x0 <--- Print keycode is correct

Alternatively, to mitigate the issue, .xinitrc can be set to:

setxkbmap -layout us
exec wmaker

or whatever layout you are using.
---
src/WindowMaker.h | 2 --
src/defaults.c | 23 +++++++++++++++++++++++
src/defaults.h | 1 +
src/event.c | 26 +++++++++++++++++++++-----
src/screen.c | 10 +++++-----
src/startup.c | 7 ++++---
6 files changed, 54 insertions(+), 15 deletions(-)

diff --git a/src/WindowMaker.h b/src/WindowMaker.h
index 098a6a079bdb..23ca87418628 100644
--- a/src/WindowMaker.h
+++ b/src/WindowMaker.h
@@ -619,12 +619,10 @@ extern struct wmaker_global_variables {
} shape;
#endif

-#ifdef KEEP_XKB_LOCK_STATUS
struct {
Bool supported;
int event_base;
} xkb;
-#endif

#ifdef USE_RANDR
struct {
diff --git a/src/defaults.c b/src/defaults.c
index 878f18b8dba1..8720b4ac5fb6 100644
--- a/src/defaults.c
+++ b/src/defaults.c
@@ -1303,6 +1303,29 @@ void wReadDefaults(WScreen * scr, WMPropList * new_dict)
}
}

+void wReadKeybindings(WScreen *scr, WMPropList *dict)
+{
+ WDefaultEntry *entry;
+ unsigned int i;
+ void *tdata;
+
+ for (i = 0; i < wlengthof(optionList); i++) {
+ entry = &optionList[i];
+ if (entry->convert == getKeybind) {
+ WMPropList *plvalue = NULL;
+ if (dict)
+ plvalue = WMGetFromPLDictionary(dict, entry->plkey);
+ if (!plvalue)
+ plvalue = entry->plvalue;
+ if (plvalue) {
+ int ok = (*entry->convert)(scr, entry, plvalue, entry->addr, &tdata);
+ if (ok && entry->update)
+ (*entry->update)(scr, entry, tdata, entry->extra_data);
+ }
+ }
+ }
+}
+
void wDefaultUpdateIcons(WScreen *scr)
{
WAppIcon *aicon = scr->app_icon_list;
diff --git a/src/defaults.h b/src/defaults.h
index a03ff3452cd2..5aaf448a0e5e 100644
--- a/src/defaults.h
+++ b/src/defaults.h
@@ -33,6 +33,7 @@ WDDomain * wDefaultsInitDomain(const char *domain, Bool requireDictionary);
void wDefaultsMergeGlobalMenus(WDDomain *menuDomain);

void wReadDefaults(WScreen *scr, WMPropList *new_dict);
+void wReadKeybindings(WScreen *scr, WMPropList *dict);
void wDefaultUpdateIcons(WScreen *scr);
void wReadStaticDefaults(WMPropList *dict);
void wDefaultsCheckDomains(void *arg);
diff --git a/src/event.c b/src/event.c
index 67d300988da0..99fbba5a0a38 100644
--- a/src/event.c
+++ b/src/event.c
@@ -49,9 +49,7 @@
#include <X11/extensions/Xrandr.h>
#endif

-#ifdef KEEP_XKB_LOCK_STATUS
#include <X11/XKBlib.h>
-#endif /* KEEP_XKB_LOCK_STATUS */

#include "WindowMaker.h"
#include "window.h"
@@ -103,7 +101,9 @@ static void handleKeyPress(XEvent *event);
static void handleFocusIn(XEvent *event);
static void handleMotionNotify(XEvent *event);
static void handleVisibilityNotify(XEvent *event);
+#ifdef HAVE_INOTIFY
static void handle_inotify_events(void);
+#endif
static void handle_selection_request(XSelectionRequestEvent *event);
static void handle_selection_clear(XSelectionClearEvent *event);
static void wdelete_death_handler(WMagicNumber id);
@@ -569,11 +569,26 @@ static void handleExtensions(XEvent * event)
handleShapeNotify(event);
}
#endif
+ if (w_global.xext.xkb.supported && event->type == w_global.xext.xkb.event_base) {
+ XkbEvent *xkbevent = (XkbEvent *) event;
+
+ if (xkbevent->any.xkb_type == XkbNewKeyboardNotify) {
+ int j;
+ WScreen *scr;
+
+ for (j = 0; j < w_global.screen_count; j++) {
+ scr = wScreenWithNumber(j);
+ wReadKeybindings(scr, w_global.domain.wmaker->dictionary);
+ }
+ }
#ifdef KEEP_XKB_LOCK_STATUS
- if (wPreferences.modelock && (event->type == w_global.xext.xkb.event_base)) {
- handleXkbIndicatorStateNotify((XkbEvent *) event);
+ else {
+ if (wPreferences.modelock && (xkbevent->any.xkb_type == XkbIndicatorStateNotify)) {
+ handleXkbIndicatorStateNotify((XkbEvent *) event);
+ }
+ }
+#endif /*KEEP_XKB_LOCK_STATUS */
}
-#endif /*KEEP_XKB_LOCK_STATUS */
#ifdef USE_RANDR
if (w_global.xext.randr.supported && event->type == (w_global.xext.randr.event_base + RRScreenChangeNotify)) {
/* From xrandr man page: "Clients must call back into Xlib using
@@ -1275,6 +1290,7 @@ static void handleXkbIndicatorStateNotify(XkbEvent *event)
WScreen *scr;
XkbStateRec staterec;
int i;
+ (void) event;

for (i = 0; i < w_global.screen_count; i++) {
scr = wScreenWithNumber(i);
diff --git a/src/screen.c b/src/screen.c
index 3a2fd3b7518d..009622ddb61e 100644
--- a/src/screen.c
+++ b/src/screen.c
@@ -32,9 +32,7 @@
#include <X11/Xlib.h>
#include <X11/Xutil.h>
#include <X11/Xatom.h>
-#ifdef KEEP_XKB_LOCK_STATUS
#include <X11/XKBlib.h>
-#endif /* KEEP_XKB_LOCK_STATUS */
#ifdef USE_RANDR
#include <X11/extensions/Xrandr.h>
#endif
@@ -663,9 +661,11 @@ WScreen *wScreenInit(int screen_number)
/* Only GroupLock doesn't work correctly in my system since right-alt
* can change mode while holding it too - ]d
*/
- if (w_global.xext.xkb.supported) {
- XkbSelectEvents(dpy, XkbUseCoreKbd, XkbStateNotifyMask, XkbStateNotifyMask);
- }
+ if (w_global.xext.xkb.supported)
+ XkbSelectEvents(dpy, XkbUseCoreKbd, XkbIndicatorStateNotifyMask|XkbNewKeyboardNotifyMask, XkbIndicatorStateNotifyMask|XkbNewKeyboardNotifyMask);
+#else
+ if (w_global.xext.xkb.supported)
+ XkbSelectEvents(dpy, XkbUseCoreKbd, XkbNewKeyboardNotifyMask, XkbNewKeyboardNotifyMask);
#endif /* KEEP_XKB_LOCK_STATUS */

#ifdef USE_RANDR
diff --git a/src/startup.c b/src/startup.c
index ddaf789f6883..f74df8f25ee2 100644
--- a/src/startup.c
+++ b/src/startup.c
@@ -41,9 +41,7 @@
#ifdef USE_XSHAPE
#include <X11/extensions/shape.h>
#endif
-#ifdef KEEP_XKB_LOCK_STATUS
#include <X11/XKBlib.h>
-#endif
#ifdef USE_RANDR
#include <X11/extensions/Xrandr.h>
#endif
@@ -601,12 +599,15 @@ void StartUp(Bool defaultScreenOnly)
w_global.xext.randr.supported = XRRQueryExtension(dpy, &w_global.xext.randr.event_base, &j);
#endif

-#ifdef KEEP_XKB_LOCK_STATUS
w_global.xext.xkb.supported = XkbQueryExtension(dpy, NULL, &w_global.xext.xkb.event_base, NULL, NULL, NULL);
+#ifdef KEEP_XKB_LOCK_STATUS
if (wPreferences.modelock && !w_global.xext.xkb.supported) {
wwarning(_("XKB is not supported. KbdModeLock is automatically disabled."));
wPreferences.modelock = 0;
}
+#else
+ if (!w_global.xext.xkb.supported)
+ wwarning(_("XKB is not supported."));
#endif

if (defaultScreenOnly)

commit c620b354b55d3d1dc1dfbd233057d284e6d1fcb8
Author: David Maciejak <david.m...@gmail.com>
Date: Tue, 3 Feb 2026 18:47:21 -0500
URL: <https://repo.or.cz/wmaker-crm.git/c620b354b55d3d1d>

wmaker: fix some truncated texts in the info panel

This patch is fixing some text truncation especially
for displaying the total memory allocated in debug mode
and the image formats (when the JXL support is enabled).
---
src/dialog.c | 12 ++++++------
1 file changed, 6 insertions(+), 6 deletions(-)

diff --git a/src/dialog.c b/src/dialog.c
index 6568a158ff8a..98e0b5154252 100644
--- a/src/dialog.c
+++ b/src/dialog.c
@@ -1276,9 +1276,9 @@ void wShowInfoPanel(WScreen *scr)
panel->win = WMCreateWindow(scr->wmscreen, "info");
WMGetScaleBaseFromSystemFont(scr->wmscreen, &wmScaleWidth, &wmScaleHeight);
#if defined(HAVE_MALLOC_H) && defined(HAVE_MALLINFO2) && defined(DEBUG)
- pwidth = WMScaleX(412);
+ pwidth = WMScaleX(432);
#else
- pwidth = WMScaleX(382);
+ pwidth = WMScaleX(392);
#endif
pheight = WMScaleY(270);
WMResizeWidget(panel->win, pwidth, pheight);
@@ -1344,7 +1344,7 @@ void wShowInfoPanel(WScreen *scr)

panel->copyrL = WMCreateLabel(panel->win);
WMResizeWidget(panel->copyrL, WMScaleX(360), WMScaleY(60));
- WMMoveWidget(panel->copyrL, WMScaleX(15), WMScaleY(210));
+ WMMoveWidget(panel->copyrL, WMScaleX(15), WMScaleY(215));
WMSetLabelTextAlignment(panel->copyrL, WALeft);

snprintf(buffer, sizeof(buffer), COPYRIGHT_TEXT, current_year);
@@ -1455,7 +1455,7 @@ void wShowInfoPanel(WScreen *scr)
strbuf = wstrappend(strbuf, _("Xinerama: "));
{
char tmp[128];
- snprintf(tmp, sizeof(tmp) - 1, _("%d head(s) found"), scr->xine_info.count);
+ snprintf(tmp, sizeof(tmp) - 1, scr->xine_info.count > 1 ? _("%d head(s) found") : _("%d head found"), scr->xine_info.count);
strbuf = wstrappend(strbuf, tmp);
}
#endif
@@ -1471,9 +1471,9 @@ void wShowInfoPanel(WScreen *scr)

panel->infoL = WMCreateLabel(panel->win);
#if defined(HAVE_MALLOC_H) && defined(HAVE_MALLINFO2) && defined(DEBUG)
- WMResizeWidget(panel->infoL, WMScaleX(380), WMScaleY(100));
+ WMResizeWidget(panel->infoL, WMScaleX(430), WMScaleY(105));
#else
- WMResizeWidget(panel->infoL, WMScaleX(350), WMScaleY(100));
+ WMResizeWidget(panel->infoL, WMScaleX(370), WMScaleY(105));
#endif
WMMoveWidget(panel->infoL, WMScaleX(15), WMScaleY(115));
WMSetLabelText(panel->infoL, strbuf);

commit ebac2bbcd82a8ce621c2eb68209e3862cf8bd7f0
Author: David Maciejak <david.m...@gmail.com>
Date: Wed, 4 Feb 2026 12:42:53 -0500
URL: <https://repo.or.cz/wmaker-crm.git/ebac2bbcd82a8ce6>

wmaker: fix compiler warning in properties.c

This patch is fixing a compiler warning for the implicit
conversion of int to char changes value from 255 to -1
when at the line *ptr++ = 255 the code is trying to store
the value 255 into a char.
---
src/properties.c | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/src/properties.c b/src/properties.c
index 6751306cfeff..d1db00334af0 100644
--- a/src/properties.c
+++ b/src/properties.c
@@ -197,8 +197,8 @@ void PropSetIconTileHint(WScreen * scr, RImage * image)
if (image->format == RRGBAFormat) {
memcpy(&tmp[4], image->data, image->width * image->height * 4);
} else {
- char *ptr = (char *)(tmp + 4);
- char *src = (char *)image->data;
+ unsigned char *ptr = tmp + 4;
+ unsigned char *src = (unsigned char *)image->data;

for (y = 0; y < image->height; y++) {
for (x = 0; x < image->width; x++) {

commit 3281349f8d2942233f67013e39eca71fb84f7160
Author: David Maciejak <david.m...@gmail.com>
Date: Fri, 6 Feb 2026 12:23:02 -0500
URL: <https://repo.or.cz/wmaker-crm.git/3281349f8d294223>

WINGs: remove unnecessary warning in wtextfield

Since commit 77db6dc649eb96d85d9e13e118a90517e1e17eed
("WINGs: fix right and center aligned wtextfield"),
right and center alignments are working in wtextfield.
---
WINGs/wtextfield.c | 5 -----
1 file changed, 5 deletions(-)

diff --git a/WINGs/wtextfield.c b/WINGs/wtextfield.c
index 6a4d9ef22a1f..52b577e5d1bf 100644
--- a/WINGs/wtextfield.c
+++ b/WINGs/wtextfield.c
@@ -497,11 +497,6 @@ void WMSetTextFieldAlignment(WMTextField * tPtr, WMAlignment alignment)

tPtr->flags.alignment = alignment;

- if (alignment != WALeft) {
- wwarning(_("only left alignment is supported in textfields"));
- return;
- }
-
if (tPtr->view->flags.realized) {
paintTextField(tPtr);
}

commit 3f5280987e779d209ce5a4ad25b4696dcabc4c03
Author: David Maciejak <david.m...@gmail.com>
Date: Tue, 3 Feb 2026 18:22:24 -0500
URL: <https://repo.or.cz/wmaker-crm.git/3f5280987e779d20>

WINGs: refactor wlist

This patch refactors wlist to bring some improvements
to not count the list of entries at each loop iteration.
---
WINGs/wlist.c | 19 +++++++++++--------
1 file changed, 11 insertions(+), 8 deletions(-)

diff --git a/WINGs/wlist.c b/WINGs/wlist.c
index 4136145ca2c9..8350095b3f16 100644
--- a/WINGs/wlist.c
+++ b/WINGs/wlist.c
@@ -495,15 +495,16 @@ static void paintItem(List * lPtr, int index)
static void paintList(List * lPtr)
{
W_Screen *scrPtr = lPtr->view->screen;
- int i, lim;
+ int i, lim, itemCount;

if (!lPtr->view->flags.mapped)
return;

- if (WMGetArrayItemCount(lPtr->items) > 0) {
- if (lPtr->topItem + lPtr->fullFitLines + lPtr->flags.dontFitAll > WMGetArrayItemCount(lPtr->items)) {
+ itemCount = WMGetArrayItemCount(lPtr->items);
+ if (itemCount > 0) {
+ if (lPtr->topItem + lPtr->fullFitLines + lPtr->flags.dontFitAll > itemCount) {

- lim = WMGetArrayItemCount(lPtr->items) - lPtr->topItem;
+ lim = itemCount - lPtr->topItem;
XClearArea(scrPtr->display, lPtr->view->window, 19,
2 + lim * lPtr->itemHeight, lPtr->view->size.width - 21,
lPtr->view->size.height - lim * lPtr->itemHeight - 3, False);
@@ -820,7 +821,7 @@ void WMSetListSelectionToRange(WMList * lPtr, WMRange range)

void WMSelectAllListItems(WMList * lPtr)
{
- int i;
+ int i, itemCount;
WMListItem *item;

if (!lPtr->flags.allowMultipleSelection)
@@ -833,7 +834,8 @@ void WMSelectAllListItems(WMList * lPtr)
WMFreeArray(lPtr->selectedItems);
lPtr->selectedItems = WMCreateArrayWithArray(lPtr->items);

- for (i = 0; i < WMGetArrayItemCount(lPtr->items); i++) {
+ itemCount = WMGetArrayItemCount(lPtr->items);
+ for (i = 0; i < itemCount; i++) {
item = WMGetFromArray(lPtr->items, i);
if (!item->selected) {
item->selected = 1;
@@ -859,10 +861,11 @@ void WMSelectAllListItems(WMList * lPtr)
*/
static void unselectAllListItems(WMList * lPtr, WMListItem * exceptThis)
{
- int i;
+ int i, itemCount;
WMListItem *item;

- for (i = 0; i < WMGetArrayItemCount(lPtr->items); i++) {
+ itemCount = WMGetArrayItemCount(lPtr->items);
+ for (i = 0; i < itemCount; i++) {
item = WMGetFromArray(lPtr->items, i);
if (item != exceptThis && item->selected) {
item->selected = 0;

-----------------------------------------------------------------------

Summary of changes:
WINGs/wlist.c | 19 ++++++------
WINGs/wtextfield.c | 5 ----
WPrefs.app/HotCornerShortcuts.c | 2 +-
WPrefs.app/Preferences.c | 6 ++--
src/WindowMaker.h | 2 --
src/defaults.c | 23 +++++++++++++++
src/defaults.h | 1 +
src/dialog.c | 12 ++++----
src/event.c | 51 ++++++++++++++++++++++++++-------
src/properties.c | 4 +--
src/screen.c | 10 +++----
src/startup.c | 7 +++--
12 files changed, 97 insertions(+), 45 deletions(-)


repo.or.cz automatic notification. Contact project admin crm...@gmail.com
if you want to unsubscribe, or site admin ad...@repo.or.cz if you receive
no reply.
--
wmaker-crm.git ("The Window Maker window manager")

david.m...@gmail.com

unread,
Feb 7, 2026, 9:48:53 AMFeb 7
to Window Maker Development
Thanks Carlos!
FYI, I believe theĀ [PATCH] wmaker: factorize duplicated code was not merged.

Carlos R. Mafra

unread,
Feb 7, 2026, 3:42:23 PMFeb 7
to wmake...@googlegroups.com
On Sat, 7 Feb 2026 at 6:48:52 -0800, david.m...@gmail.com wrote:
> Thanks Carlos!
> FYI, I believe the [PATCH] wmaker: factorize duplicated code was not merged.

My bad. Thanks for bringing this up to my attention.

It's in the repo now.

Thanks!
Reply all
Reply to author
Forward
0 new messages