To: vim_dev@googlegroups.com Subject: Patch 9.0.0639 Fcc: outbox From: Bram Moolenaar Mime-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ------------ Patch 9.0.0639 Problem: Checking for popup in screen_char() is too late, the attribute has already been changed. Solution: Move check for popup to where screen_char() is called. Files: src/screen.c *** ../vim-9.0.0638/src/screen.c 2022-10-02 15:17:13.837211460 +0100 --- src/screen.c 2022-10-02 15:06:50.093846439 +0100 *************** *** 728,734 **** col += char_cells; } ! if (clear_next) { // Clear the second half of a double-wide character of which the left // half was overwritten with a single-wide character. --- 728,734 ---- col += char_cells; } ! if (clear_next && !skip_for_popup(row, col + coloff)) { // Clear the second half of a double-wide character of which the left // half was overwritten with a single-wide character. *************** *** 792,803 **** } } ! if (enc_dbcs != 0 && prev_cells > 1) ! screen_char_2(off_to - prev_cells, row, col + coloff - prev_cells); ! else ! screen_char(off_to - prev_cells, row, col + coloff - prev_cells); } } #endif --- 792,806 ---- } } ! if (!skip_for_popup(row, col + coloff - prev_cells)) ! { ! if (enc_dbcs != 0 && prev_cells > 1) ! screen_char_2(off_to - prev_cells, row, col + coloff - prev_cells); ! else ! screen_char(off_to - prev_cells, row, col + coloff - prev_cells); + } } } #endif *************** *** 821,829 **** // right of the window contents. But not on top of a popup window. if (coloff + col < Columns) { ! #ifdef FEAT_PROP_POPUP ! if (!blocked_by_popup(row, col + coloff)) ! #endif { int c; --- 824,830 ---- // right of the window contents. But not on top of a popup window. if (coloff + col < Columns) { ! if (!skip_for_popup(row, col + coloff)) { int c; *************** *** 1564,1578 **** #endif && mb_fix_col(col, row) != col) { ! ScreenLines[off - 1] = ' '; ! ScreenAttrs[off - 1] = 0; ! if (enc_utf8) { ! ScreenLinesUC[off - 1] = 0; ! ScreenLinesC[0][off - 1] = 0; } - // redraw the previous cell, make it empty - screen_char(off - 1, row, col - 1); // force the cell at "col" to be redrawn force_redraw_next = TRUE; } --- 1565,1582 ---- #endif && mb_fix_col(col, row) != col) { ! if (!skip_for_popup(row, col - 1)) { ! ScreenLines[off - 1] = ' '; ! ScreenAttrs[off - 1] = 0; ! if (enc_utf8) ! { ! ScreenLinesUC[off - 1] = 0; ! ScreenLinesC[0][off - 1] = 0; ! } ! // redraw the previous cell, make it empty ! screen_char(off - 1, row, col - 1); } // force the cell at "col" to be redrawn force_redraw_next = TRUE; } *************** *** 1651,1661 **** || ScreenAttrs[off] != attr || exmode_active; ! if ((need_redraw || force_redraw_this) ! #ifdef FEAT_PROP_POPUP ! && !blocked_by_popup(row, col) ! #endif ! ) { #if defined(FEAT_GUI) || defined(UNIX) // The bold trick makes a single row of pixels appear in the next --- 1655,1661 ---- || ScreenAttrs[off] != attr || exmode_active; ! if ((need_redraw || force_redraw_this) && !skip_for_popup(row, col)) { #if defined(FEAT_GUI) || defined(UNIX) // The bold trick makes a single row of pixels appear in the next *************** *** 1772,1778 **** // If we detected the next character needs to be redrawn, but the text // doesn't extend up to there, update the character here. ! if (force_redraw_next && col < screen_Columns) { if (enc_dbcs != 0 && dbcs_off2cells(off, max_off) > 1) screen_char_2(off, row, col); --- 1772,1778 ---- // If we detected the next character needs to be redrawn, but the text // doesn't extend up to there, update the character here. ! if (force_redraw_next && col < screen_Columns && !skip_for_popup(row, col)) { if (enc_dbcs != 0 && dbcs_off2cells(off, max_off) > 1) screen_char_2(off, row, col); *************** *** 2181,2190 **** if (row >= screen_Rows || col >= screen_Columns) return; - // Skip if under the popup menu. - if (skip_for_popup(row, col)) - return; - // Outputting a character in the last cell on the screen may scroll the // screen up. Only do it when the "xn" termcap property is set, otherwise // mark the character invalid (update it when scrolled up). --- 2181,2186 ---- *************** *** 2315,2326 **** { if (enc_dbcs != 0 && dbcs_off2cells(off + c, max_off) > 1) { ! screen_char_2(off + c, r, c); ++c; } else { ! screen_char(off + c, r, c); if (utf_off2cells(off + c, max_off) > 1) ++c; } --- 2311,2324 ---- { if (enc_dbcs != 0 && dbcs_off2cells(off + c, max_off) > 1) { ! if (!skip_for_popup(r, c)) ! screen_char_2(off + c, r, c); ++c; } else { ! if (!skip_for_popup(r, c)) ! screen_char(off + c, r, c); if (utf_off2cells(off + c, max_off) > 1) ++c; } *************** *** 2486,2496 **** || force_next #endif ) - #ifdef FEAT_PROP_POPUP // Skip if under a(nother) popup. ! && !blocked_by_popup(row, col) ! #endif ! ) { #if defined(FEAT_GUI) || defined(UNIX) // The bold trick may make a single row of pixels appear in --- 2484,2491 ---- || force_next #endif ) // Skip if under a(nother) popup. ! && !skip_for_popup(row, col)) { #if defined(FEAT_GUI) || defined(UNIX) // The bold trick may make a single row of pixels appear in *** ../vim-9.0.0638/src/version.c 2022-10-02 15:14:40.357455932 +0100 --- src/version.c 2022-10-02 15:07:42.045841272 +0100 *************** *** 701,702 **** --- 701,704 ---- { /* Add new patch number below this line */ + /**/ + 639, /**/ -- hundred-and-one symptoms of being an internet addict: 244. You use more than 20 passwords. /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\ /// \\\ \\\ sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ /// \\\ help me help AIDS victims -- http://ICCF-Holland.org ///