--- a/gntmain.c Fri Oct 20 00:23:13 2017 -0500
+++ b/gntmain.c Thu Nov 16 21:13:33 2017 -0600
@@ -551,10 +551,11 @@
static void (*org_winch_handler)(int);
+static void (*org_winch_handler_sa)(int, siginfo_t *, void *);
+sighandler(int sig, siginfo_t *info, void *data) @@ -563,18 +564,17 @@
g_idle_add((GSourceFunc)refresh_screen, NULL);
- signal(SIGWINCH, sighandler);
+ if (org_winch_handler_sa) + org_winch_handler_sa(sig, info, data); - signal(SIGCHLD, sighandler);
- signal(SIGINT, sighandler);
@@ -602,6 +602,10 @@
@@ -654,14 +658,26 @@
+ act.sa_sigaction = sighandler; + sigemptyset(&act.sa_mask); + act.sa_flags = SA_SIGINFO; - org_winch_handler = signal(SIGWINCH, sighandler);
+ org_winch_handler = NULL; + org_winch_handler_sa = NULL; + sigaction(SIGWINCH, &act, &oact); + if (oact.sa_flags & SA_SIGINFO) + org_winch_handler_sa = oact.sa_sigaction; + else if (oact.sa_handler != SIG_DFL && oact.sa_handler != SIG_IGN) + org_winch_handler = oact.sa_handler;
- signal(SIGCHLD, sighandler);
+ sigaction(SIGCHLD, &act, NULL); + sigaction(SIGINT, &act, NULL); signal(SIGPIPE, SIG_IGN);
- signal(SIGINT, sighandler);
#if !GLIB_CHECK_VERSION(2, 36, 0)
/* GLib type system is automaticaly initialized since 2.36. */
--- a/gntwm.c Fri Oct 20 00:23:13 2017 -0500
+++ b/gntwm.c Thu Nov 16 21:13:33 2017 -0600
@@ -166,37 +166,37 @@
- sx = panel->win->_begx;
- ex = panel->win->_maxx + sx;
- sy = panel->win->_begy;
- ey = panel->win->_maxy + sy;
+ sx = getbegx(panel->win); + ex = getmaxx(panel->win) + sx; + sy = getbegy(panel->win); + ey = getmaxy(panel->win) + sy; while ((below = panel_below(below)) != NULL) {
- if (sy > below->win->_begy + below->win->_maxy ||
- ey < below->win->_begy)
+ if (sy > getbegy(below->win) + getmaxy(below->win) || + ey < getbegy(below->win)) - if (sx > below->win->_begx + below->win->_maxx ||
- ex < below->win->_begx)
+ if (sx > getbegx(below->win) + getmaxx(below->win) || + ex < getbegx(below->win)) - for (y = MAX(sy, below->win->_begy); y <= MIN(ey, below->win->_begy + below->win->_maxy); y++) {
- if (mvwin_wch(below->win, y - below->win->_begy, sx - 1 - below->win->_begx, &ch) != OK)
+ for (y = MAX(sy, getbegy(below->win)); y <= MIN(ey, getbegy(below->win) + getmaxy(below->win)); y++) { + if (mvwin_wch(below->win, y - getbegy(below->win), sx - 1 - getbegx(below->win), &ch) != OK) w = widestringwidth(ch.chars);
if (w > 1 && (ch.attr & 1)) {
- mvwadd_wch(below->win, y - below->win->_begy, sx - 1 - below->win->_begx, &ch);
- touchline(below->win, y - below->win->_begy, 1);
+ mvwadd_wch(below->win, y - getbegy(below->win), sx - 1 - getbegx(below->win), &ch); + touchline(below->win, y - getbegy(below->win), 1); - if (mvwin_wch(below->win, y - below->win->_begy, ex + 1 - below->win->_begx, &ch) != OK)
+ if (mvwin_wch(below->win, y - getbegy(below->win), ex + 1 - getbegx(below->win), &ch) != OK) w = widestringwidth(ch.chars);
if (w > 1 && !(ch.attr & 1)) {
- mvwadd_wch(below->win, y - below->win->_begy, ex + 1 - below->win->_begx, &ch);
- touchline(below->win, y - below->win->_begy, 1);
+ mvwadd_wch(below->win, y - getbegy(below->win), ex + 1 - getbegx(below->win), &ch); + touchline(below->win, y - getbegy(below->win), 1);