Compare commits

...
4 Commits
Author SHA1 Message Date
Andreas Metzler b5bd9a1995 Fix typo in WINGs/Makefile.am.
Broken-By: c7ab42e183
2026-08-30 18:04:06 +01:00
Doug Torrance d581598c7b Ignore --enable-cxx-stdlib when checking configure docs
It's a new option added by libtool beginning w/ v2.6.0, and there's no
reason for us to document it.  We ignore it with the other
libtool-added configure options.

Fixes: https://bugs.debian.org/1146103
2026-08-30 17:18:07 +01:00
David Maciejak 78b58d4418 wmaker: cycle ScreenSwitchKey across Xinerama/RandR heads
ScreenSwitchKey only looped over w_global.screen_count, which stays 1
on a single-screen multi-head display driven by Xinerama or RandR, so
the binding did nothing on such multi-monitor setups.

Treat monitors as the heads of all managed screens in (screen, head)
order and warp the pointer from the head it is on to the next one.
With one head per screen this behaves exactly as before.
2026-08-19 03:03:01 +01:00
Andreas Metzler c7ab42e183 Drop ./configure-generated date (Makefile) from tarball. 2026-08-17 17:23:01 +01:00
5 changed files with 66 additions and 22 deletions
+1
View File
@@ -146,6 +146,7 @@ configure-documentation:
--ignore-prg 'with-aix-soname # new in libtool 2.4.4 up to 2.5.2' \ --ignore-prg 'with-aix-soname # new in libtool 2.4.4 up to 2.5.2' \
--ignore-prg 'enable-aix-soname # renamed in libtool 2.5.3' \ --ignore-prg 'enable-aix-soname # renamed in libtool 2.5.3' \
--ignore-prg 'enable-pic # new in libtool 2.5.3' \ --ignore-prg 'enable-pic # new in libtool 2.5.3' \
--ignore-prg 'enable-cxx-stdlib # new in libtool 2.6.0' \
--ignore-prg 'with-x # no use, it would not work without X' --ignore-prg 'with-x # no use, it would not work without X'
.PHONY: configure-documentation .PHONY: configure-documentation
-2
View File
@@ -47,8 +47,6 @@ Never: (so, dont even bother to ask)
====== ======
- different themes for each workspace. Unless you give us a SGI/Power Onyx - different themes for each workspace. Unless you give us a SGI/Power Onyx
with 2 CPUs ;). with 2 CPUs ;).
- anything that requires the mouse pointer to be jumped by WindowMaker to
somewhere. This is *terrible* behaviour. And it's not just IMO.
- rewrite to use Gtk... I wont even bother to explain why... - rewrite to use Gtk... I wont even bother to explain why...
+4
View File
@@ -5,6 +5,10 @@ AUTOMAKE_OPTIONS =
SUBDIRS = WINGs . po Documentation Resources SUBDIRS = WINGs . po Documentation Resources
DIST_SUBDIRS = $(SUBDIRS) Tests Examples Extras DIST_SUBDIRS = $(SUBDIRS) Tests Examples Extras
dist-hook:
rm -f $(distdir)/Examples/Makefile $(distdir)/Extras/Makefile \
$(distdir)/Tests/Makefile
libWINGs_la_LDFLAGS = -version-info @WINGS_VERSION@ libWINGs_la_LDFLAGS = -version-info @WINGS_VERSION@
libWUtil_la_LDFLAGS = -version-info @WUTIL_VERSION@ libWUtil_la_LDFLAGS = -version-info @WUTIL_VERSION@
+58 -20
View File
@@ -1476,6 +1476,63 @@ static void startMarkCapture(WScreen *scr, Display *dpy, WMarkCaptureMode mode)
XGrabKeyboard(dpy, scr->root_win, False, GrabModeAsync, GrabModeAsync, CurrentTime); XGrabKeyboard(dpy, scr->root_win, False, GrabModeAsync, GrabModeAsync, CurrentTime);
} }
/*
* Warp pointer to the center of the next monitor, cycling.
*
* Monitors are the Xinerama/RandR heads of every managed screen,
* visited in (screen, head) order starting from the head the pointer
* is on. With one head per screen this reduces to hopping from X11
* screen to X11 screen as before.
*/
static void warpPointerToNextMonitor(WScreen *scr)
{
WMRect rect;
WScreen *target;
int total, current, next;
int i, h;
total = 0;
for (i = 0; i < w_global.screen_count; i++)
total += wXineramaHeads(wScreenWithNumber(i));
if (total <= 1)
return;
/* flat index of the monitor the pointer is currently on */
current = 0;
for (i = 0; i < w_global.screen_count; i++) {
if (wScreenWithNumber(i) == scr) {
h = wGetHeadForPointerLocation(scr);
if (h < 0 || h >= wXineramaHeads(scr))
h = 0;
current += h;
break;
}
current += wXineramaHeads(wScreenWithNumber(i));
}
next = (current + 1) % total;
/* map the flat index back to a (screen, head) pair */
target = NULL;
for (i = 0; i < w_global.screen_count; i++) {
target = wScreenWithNumber(i);
h = wXineramaHeads(target);
if (next < h)
break;
next -= h;
target = NULL;
}
if (!target)
return;
rect = wGetRectForHead(target, next);
XWarpPointer(dpy, None, target->root_win, 0, 0, 0, 0,
rect.pos.x + (int)rect.size.width / 2,
rect.pos.y + (int)rect.size.height / 2);
XFlush(dpy);
}
static void dispatchWKBDCommand(int command, WScreen *scr, WWindow *wwin, XEvent *event) static void dispatchWKBDCommand(int command, WScreen *scr, WWindow *wwin, XEvent *event)
{ {
short widx; short widx;
@@ -1898,26 +1955,7 @@ static void dispatchWKBDCommand(int command, WScreen *scr, WWindow *wwin, XEvent
break; break;
case WKBD_SWITCH_SCREEN: case WKBD_SWITCH_SCREEN:
if (w_global.screen_count > 1) { warpPointerToNextMonitor(scr);
WScreen *scr2;
int i;
/* find index of this screen */
for (i = 0; i < w_global.screen_count; i++) {
if (wScreenWithNumber(i) == scr)
break;
}
i++;
if (i >= w_global.screen_count) {
i = 0;
}
scr2 = wScreenWithNumber(i);
if (scr2) {
XWarpPointer(dpy, scr->root_win, scr2->root_win, 0, 0, 0, 0,
scr2->scr_width / 2, scr2->scr_height / 2);
}
}
break; break;
case WKBD_RUN: case WKBD_RUN:
+3
View File
@@ -3,6 +3,9 @@
SUBDIRS = . po SUBDIRS = . po
DIST_SUBDIRS = $(SUBDIRS) tests DIST_SUBDIRS = $(SUBDIRS) tests
dist-hook:
rm -f $(distdir)/tests/Makefile
AUTOMAKE_OPTIONS = AUTOMAKE_OPTIONS =
EXTRA_DIST = tests EXTRA_DIST = tests