qulogic/libgnt

Merged release-2.x.y into default

2017-11-03, Gary Kramlich
a7113e201f72
Merged release-2.x.y into default
  • +25 -9
    gntmain.c
  • +15 -15
    gntwm.c
  • --- a/gntmain.c Fri Jul 07 02:45:36 2017 +0000
    +++ b/gntmain.c Fri Nov 03 01:22:04 2017 -0500
    @@ -551,10 +551,11 @@
    #ifdef SIGWINCH
    static void (*org_winch_handler)(int);
    +static void (*org_winch_handler_sa)(int, siginfo_t *, void *);
    #endif
    static void
    -sighandler(int sig)
    +sighandler(int sig, siginfo_t *info, void *data)
    {
    switch (sig) {
    #ifdef SIGWINCH
    @@ -563,18 +564,17 @@
    g_idle_add((GSourceFunc)refresh_screen, NULL);
    if (org_winch_handler)
    org_winch_handler(sig);
    - signal(SIGWINCH, sighandler);
    + if (org_winch_handler_sa)
    + org_winch_handler_sa(sig, info, data);
    break;
    #endif
    #ifndef _WIN32
    case SIGCHLD:
    clean_pid();
    - signal(SIGCHLD, sighandler);
    break;
    #endif
    case SIGINT:
    ask_before_exit();
    - signal(SIGINT, sighandler);
    break;
    }
    }
    @@ -602,6 +602,10 @@
    {
    char *filename;
    const char *locale;
    + struct sigaction act;
    +#ifdef SIGWINCH
    + struct sigaction oact;
    +#endif
    if (channel)
    return;
    @@ -654,14 +658,26 @@
    werase(stdscr);
    wrefresh(stdscr);
    + act.sa_sigaction = sighandler;
    + sigemptyset(&act.sa_mask);
    + act.sa_flags = SA_SIGINFO;
    +
    #ifdef SIGWINCH
    - 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;
    + }
    #endif
    -#ifndef _WIN32
    - signal(SIGCHLD, sighandler);
    + sigaction(SIGCHLD, &act, NULL);
    + sigaction(SIGINT, &act, NULL);
    signal(SIGPIPE, SIG_IGN);
    -#endif
    - signal(SIGINT, sighandler);
    #if !GLIB_CHECK_VERSION(2, 36, 0)
    /* GLib type system is automaticaly initialized since 2.36. */
    --- a/gntwm.c Fri Jul 07 02:45:36 2017 +0000
    +++ b/gntwm.c Fri Nov 03 01:22:04 2017 -0500
    @@ -166,37 +166,37 @@
    cchar_t ch;
    PANEL *below = panel;
    - 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))
    continue;
    - if (sx > below->win->_begx + below->win->_maxx ||
    - ex < below->win->_begx)
    + if (sx > getbegx(below->win) + getmaxx(below->win) ||
    + ex < getbegx(below->win))
    continue;
    - 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)
    goto right;
    w = widestringwidth(ch.chars);
    if (w > 1 && (ch.attr & 1)) {
    ch.chars[0] = ' ';
    ch.attr &= ~ A_CHARTEXT;
    - 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);
    }
    right:
    - 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)
    continue;
    w = widestringwidth(ch.chars);
    if (w > 1 && !(ch.attr & 1)) {
    ch.chars[0] = ' ';
    ch.attr &= ~ A_CHARTEXT;
    - 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);
    }
    }
    }