From 7f8b2559a30e2e2a443c35b28e94c6b45ba7ae04 Mon Sep 17 00:00:00 2001 From: Yegappan Lakshmanan Date: Sun, 8 Jan 2023 13:44:24 +0000 Subject: patch 9.0.1158: code is indented more than necessary Problem: Code is indented more than necessary. Solution: Use an early return where it makes sense. (Yegappan Lakshmanan, closes #11787) --- src/findfile.c | 10 +- src/fold.c | 46 ++-- src/getchar.c | 118 +++++------ src/gui.c | 622 +++++++++++++++++++++++++++--------------------------- src/gui_beval.c | 310 ++++++++++++++------------- src/gui_gtk.c | 177 ++++++++-------- src/gui_gtk_f.c | 56 ++--- src/gui_gtk_x11.c | 325 ++++++++++++++-------------- src/gui_motif.c | 223 ++++++++++---------- src/gui_photon.c | 44 ++-- src/gui_w32.c | 437 +++++++++++++++++++------------------- src/gui_x11.c | 120 +++++------ src/gui_xim.c | 36 ++-- src/version.c | 2 + 14 files changed, 1267 insertions(+), 1259 deletions(-) diff --git a/src/findfile.c b/src/findfile.c index 9ce733cfd6..017e1c6629 100644 --- a/src/findfile.c +++ b/src/findfile.c @@ -1426,11 +1426,11 @@ ff_push(ff_search_ctx_T *search_ctx, ff_stack_T *stack_ptr) { // check for NULL pointer, not to return an error to the user, but // to prevent a crash - if (stack_ptr != NULL) - { - stack_ptr->ffs_prev = search_ctx->ffsc_stack_ptr; - search_ctx->ffsc_stack_ptr = stack_ptr; - } + if (stack_ptr == NULL) + return; + + stack_ptr->ffs_prev = search_ctx->ffsc_stack_ptr; + search_ctx->ffsc_stack_ptr = stack_ptr; } /* diff --git a/src/fold.c b/src/fold.c index d722a56d0c..61bffb5d01 100644 --- a/src/fold.c +++ b/src/fold.c @@ -513,13 +513,14 @@ newFoldLevelWin(win_T *wp) void foldCheckClose(void) { - if (*p_fcl != NUL) // can only be "all" right now - { - checkupdate(curwin); - if (checkCloseRec(&curwin->w_folds, curwin->w_cursor.lnum, - (int)curwin->w_p_fdl)) - changed_window_setting(); - } + if (*p_fcl == NUL) + return; + + // can only be "all" right now + checkupdate(curwin); + if (checkCloseRec(&curwin->w_folds, curwin->w_cursor.lnum, + (int)curwin->w_p_fdl)) + changed_window_setting(); } // checkCloseRec() {{{2 @@ -1077,16 +1078,17 @@ foldAdjustVisual(void) } if (hasFolding(start->lnum, &start->lnum, NULL)) start->col = 0; - if (hasFolding(end->lnum, NULL, &end->lnum)) - { - ptr = ml_get(end->lnum); - end->col = (colnr_T)STRLEN(ptr); - if (end->col > 0 && *p_sel == 'o') - --end->col; - // prevent cursor from moving on the trail byte - if (has_mbyte) - mb_adjust_cursor(); - } + + if (!hasFolding(end->lnum, NULL, &end->lnum)) + return; + + ptr = ml_get(end->lnum); + end->col = (colnr_T)STRLEN(ptr); + if (end->col > 0 && *p_sel == 'o') + --end->col; + // prevent cursor from moving on the trail byte + if (has_mbyte) + mb_adjust_cursor(); } // cursor_foldstart() {{{2 @@ -1215,11 +1217,11 @@ foldLevelWin(win_T *wp, linenr_T lnum) static void checkupdate(win_T *wp) { - if (wp->w_foldinvalid) - { - foldUpdate(wp, (linenr_T)1, (linenr_T)MAXLNUM); // will update all - wp->w_foldinvalid = FALSE; - } + if (!wp->w_foldinvalid) + return; + + foldUpdate(wp, (linenr_T)1, (linenr_T)MAXLNUM); // will update all + wp->w_foldinvalid = FALSE; } // setFoldRepeat() {{{2 diff --git a/src/getchar.c b/src/getchar.c index 3fd518b00d..2fb9baaf85 100644 --- a/src/getchar.c +++ b/src/getchar.c @@ -259,11 +259,11 @@ delete_buff_tail(buffheader_T *buf, int slen) if (buf->bh_curr == NULL) return; // nothing to delete len = (int)STRLEN(buf->bh_curr->b_str); - if (len >= slen) - { - buf->bh_curr->b_str[len - slen] = NUL; - buf->bh_space += slen; - } + if (len < slen) + return; + + buf->bh_curr->b_str[len - slen] = NUL; + buf->bh_space += slen; } /* @@ -478,12 +478,12 @@ flush_buffers(flush_buffers_T flush_typeahead) void ResetRedobuff(void) { - if (!block_redo) - { - free_buff(&old_redobuff); - old_redobuff = redobuff; - redobuff.bh_first.b_next = NULL; - } + if (block_redo) + return; + + free_buff(&old_redobuff); + old_redobuff = redobuff; + redobuff.bh_first.b_next = NULL; } /* @@ -493,15 +493,15 @@ ResetRedobuff(void) void CancelRedo(void) { - if (!block_redo) - { - free_buff(&redobuff); - redobuff = old_redobuff; - old_redobuff.bh_first.b_next = NULL; - start_stuff(); - while (read_readbuffers(TRUE) != NUL) - ; - } + if (block_redo) + return; + + free_buff(&redobuff); + redobuff = old_redobuff; + old_redobuff.bh_first.b_next = NULL; + start_stuff(); + while (read_readbuffers(TRUE) != NUL) + ; } /* @@ -520,11 +520,11 @@ saveRedobuff(save_redo_T *save_redo) // Make a copy, so that ":normal ." in a function works. s = get_buffcont(&save_redo->sr_redobuff, FALSE); - if (s != NULL) - { - add_buff(&redobuff, s, -1L); - vim_free(s); - } + if (s == NULL) + return; + + add_buff(&redobuff, s, -1L); + vim_free(s); } /* @@ -944,15 +944,15 @@ stop_redo_ins(void) static void init_typebuf(void) { - if (typebuf.tb_buf == NULL) - { - typebuf.tb_buf = typebuf_init; - typebuf.tb_noremap = noremapbuf_init; - typebuf.tb_buflen = TYPELEN_INIT; - typebuf.tb_len = 0; - typebuf.tb_off = MAXMAPLEN + 4; - typebuf.tb_change_cnt = 1; - } + if (typebuf.tb_buf != NULL) + return; + + typebuf.tb_buf = typebuf_init; + typebuf.tb_noremap = noremapbuf_init; + typebuf.tb_buflen = TYPELEN_INIT; + typebuf.tb_len = 0; + typebuf.tb_off = MAXMAPLEN + 4; + typebuf.tb_change_cnt = 1; } /* @@ -1324,11 +1324,11 @@ gotchars(char_u *chars, int len) void ungetchars(int len) { - if (reg_recording != 0) - { - delete_buff_tail(&recordbuff, len); - last_recorded_len -= len; - } + if (reg_recording == 0) + return; + + delete_buff_tail(&recordbuff, len); + last_recorded_len -= len; } /* @@ -2230,23 +2230,23 @@ f_getcharstr(typval_T *argvars, typval_T *rettv) { getchar_common(argvars, rettv); - if (rettv->v_type == VAR_NUMBER) - { - char_u temp[7]; // mbyte-char: 6, NUL: 1 - varnumber_T n = rettv->vval.v_number; - int i = 0; + if (rettv->v_type != VAR_NUMBER) + return; - if (n != 0) - { - if (has_mbyte) - i += (*mb_char2bytes)(n, temp + i); - else - temp[i++] = n; - } - temp[i++] = NUL; - rettv->v_type = VAR_STRING; - rettv->vval.v_string = vim_strsave(temp); + char_u temp[7]; // mbyte-char: 6, NUL: 1 + varnumber_T n = rettv->vval.v_number; + int i = 0; + + if (n != 0) + { + if (has_mbyte) + i += (*mb_char2bytes)(n, temp + i); + else + temp[i++] = n; } + temp[i++] = NUL; + rettv->v_type = VAR_STRING; + rettv->vval.v_string = vim_strsave(temp); } /* @@ -4031,10 +4031,10 @@ do_cmdkey_command(int key UNUSED, int flags) void reset_last_used_map(mapblock_T *mp) { - if (last_used_map == mp) - { - last_used_map = NULL; - last_used_sid = -1; - } + if (last_used_map != mp) + return; + + last_used_map = NULL; + last_used_sid = -1; } #endif diff --git a/src/gui.c b/src/gui.c index 585ead00d5..b8910054b0 100644 --- a/src/gui.c +++ b/src/gui.c @@ -1171,71 +1171,73 @@ gui_update_cursor( return; gui_check_pos(); - if (!gui.cursor_is_valid || force - || gui.row != gui.cursor_row || gui.col != gui.cursor_col) - { - gui_undraw_cursor(); - // If a cursor-less sleep is ongoing, leave the cursor invisible - if (cursor_is_sleeping()) - return; + if (gui.cursor_is_valid && !force + && gui.row == gui.cursor_row && gui.col == gui.cursor_col) + return; - if (gui.row < 0) - return; + gui_undraw_cursor(); + + // If a cursor-less sleep is ongoing, leave the cursor invisible + if (cursor_is_sleeping()) + return; + + if (gui.row < 0) + return; #ifdef HAVE_INPUT_METHOD - if (gui.row != gui.cursor_row || gui.col != gui.cursor_col) - im_set_position(gui.row, gui.col); + if (gui.row != gui.cursor_row || gui.col != gui.cursor_col) + im_set_position(gui.row, gui.col); #endif - gui.cursor_row = gui.row; - gui.cursor_col = gui.col; + gui.cursor_row = gui.row; + gui.cursor_col = gui.col; - // Only write to the screen after ScreenLines[] has been initialized - if (!screen_cleared || ScreenLines == NULL) - return; + // Only write to the screen after ScreenLines[] has been initialized + if (!screen_cleared || ScreenLines == NULL) + return; - // Clear the selection if we are about to write over it - if (clear_selection) - clip_may_clear_selection(gui.row, gui.row); - // Check that the cursor is inside the shell (resizing may have made - // it invalid) - if (gui.row >= screen_Rows || gui.col >= screen_Columns) - return; + // Clear the selection if we are about to write over it + if (clear_selection) + clip_may_clear_selection(gui.row, gui.row); + // Check that the cursor is inside the shell (resizing may have made + // it invalid) + if (gui.row >= screen_Rows || gui.col >= screen_Columns) + return; - gui.cursor_is_valid = TRUE; + gui.cursor_is_valid = TRUE; - /* - * How the cursor is drawn depends on the current mode. - * When in a terminal window use the shape/color specified there. - */ + /* + * How the cursor is drawn depends on the current mode. + * When in a terminal window use the shape/color specified there. + */ #ifdef FEAT_TERMINAL - if (terminal_is_active()) - shape = term_get_cursor_shape(&shape_fg, &shape_bg); - else + if (terminal_is_active()) + shape = term_get_cursor_shape(&shape_fg, &shape_bg); + else #endif - shape = &shape_table[get_shape_idx(FALSE)]; - if (State & MODE_LANGMAP) - id = shape->id_lm; - else - id = shape->id; - - // get the colors and attributes for the cursor. Default is inverted - cfg = INVALCOLOR; - cbg = INVALCOLOR; - cattr = HL_INVERSE; - gui_mch_set_blinking(shape->blinkwait, - shape->blinkon, - shape->blinkoff); - if (shape->blinkwait == 0 || shape->blinkon == 0 - || shape->blinkoff == 0) - gui_mch_stop_blink(FALSE); + shape = &shape_table[get_shape_idx(FALSE)]; + if (State & MODE_LANGMAP) + id = shape->id_lm; + else + id = shape->id; + + // get the colors and attributes for the cursor. Default is inverted + cfg = INVALCOLOR; + cbg = INVALCOLOR; + cattr = HL_INVERSE; + gui_mch_set_blinking(shape->blinkwait, + shape->blinkon, + shape->blinkoff); + if (shape->blinkwait == 0 || shape->blinkon == 0 + || shape->blinkoff == 0) + gui_mch_stop_blink(FALSE); #ifdef FEAT_TERMINAL - if (shape_bg != INVALCOLOR) - { - cattr = 0; - cfg = shape_fg; - cbg = shape_bg; - } - else + if (shape_bg != INVALCOLOR) + { + cattr = 0; + cfg = shape_fg; + cbg = shape_bg; + } + else #endif if (id > 0) { @@ -1251,7 +1253,7 @@ gui_update_cursor( # else im_get_status() # endif - ) + ) { iid = syn_name2id((char_u *)"CursorIM"); if (iid > 0) @@ -1267,132 +1269,131 @@ gui_update_cursor( #endif } - /* - * Get the attributes for the character under the cursor. - * When no cursor color was given, use the character color. - */ - attr = ScreenAttrs[LineOffset[gui.row] + gui.col]; - if (attr > HL_ALL) - aep = syn_gui_attr2entry(attr); - if (aep != NULL) - { - attr = aep->ae_attr; - if (cfg == INVALCOLOR) - cfg = ((attr & HL_INVERSE) ? aep->ae_u.gui.bg_color - : aep->ae_u.gui.fg_color); - if (cbg == INVALCOLOR) - cbg = ((attr & HL_INVERSE) ? aep->ae_u.gui.fg_color - : aep->ae_u.gui.bg_color); - } + /* + * Get the attributes for the character under the cursor. + * When no cursor color was given, use the character color. + */ + attr = ScreenAttrs[LineOffset[gui.row] + gui.col]; + if (attr > HL_ALL) + aep = syn_gui_attr2entry(attr); + if (aep != NULL) + { + attr = aep->ae_attr; if (cfg == INVALCOLOR) - cfg = (attr & HL_INVERSE) ? gui.back_pixel : gui.norm_pixel; + cfg = ((attr & HL_INVERSE) ? aep->ae_u.gui.bg_color + : aep->ae_u.gui.fg_color); if (cbg == INVALCOLOR) - cbg = (attr & HL_INVERSE) ? gui.norm_pixel : gui.back_pixel; + cbg = ((attr & HL_INVERSE) ? aep->ae_u.gui.fg_color + : aep->ae_u.gui.bg_color); + } + if (cfg == INVALCOLOR) + cfg = (attr & HL_INVERSE) ? gui.back_pixel : gui.norm_pixel; + if (cbg == INVALCOLOR) + cbg = (attr & HL_INVERSE) ? gui.norm_pixel : gui.back_pixel; #ifdef FEAT_XIM - if (aep != NULL) - { - xim_bg_color = ((attr & HL_INVERSE) ? aep->ae_u.gui.fg_color - : aep->ae_u.gui.bg_color); - xim_fg_color = ((attr & HL_INVERSE) ? aep->ae_u.gui.bg_color - : aep->ae_u.gui.fg_color); - if (xim_bg_color == INVALCOLOR) - xim_bg_color = (attr & HL_INVERSE) ? gui.norm_pixel - : gui.back_pixel; - if (xim_fg_color == INVALCOLOR) - xim_fg_color = (attr & HL_INVERSE) ? gui.back_pixel - : gui.norm_pixel; - } - else - { + if (aep != NULL) + { + xim_bg_color = ((attr & HL_INVERSE) ? aep->ae_u.gui.fg_color + : aep->ae_u.gui.bg_color); + xim_fg_color = ((attr & HL_INVERSE) ? aep->ae_u.gui.bg_color + : aep->ae_u.gui.fg_color); + if (xim_bg_color == INVALCOLOR) xim_bg_color = (attr & HL_INVERSE) ? gui.norm_pixel - : gui.back_pixel; + : gui.back_pixel; + if (xim_fg_color == INVALCOLOR) xim_fg_color = (attr & HL_INVERSE) ? gui.back_pixel - : gui.norm_pixel; - } + : gui.norm_pixel; + } + else + { + xim_bg_color = (attr & HL_INVERSE) ? gui.norm_pixel + : gui.back_pixel; + xim_fg_color = (attr & HL_INVERSE) ? gui.back_pixel + : gui.norm_pixel; + } #endif - attr &= ~HL_INVERSE; - if (cattr & HL_INVERSE) - { - cc = cbg; - cbg = cfg; - cfg = cc; - } - cattr &= ~HL_INVERSE; + attr &= ~HL_INVERSE; + if (cattr & HL_INVERSE) + { + cc = cbg; + cbg = cfg; + cfg = cc; + } + cattr &= ~HL_INVERSE; + + /* + * When we don't have window focus, draw a hollow cursor. + */ + if (!gui.in_focus) + { + gui_mch_draw_hollow_cursor(cbg); + return; + } + old_hl_mask = gui.highlight_mask; + if (shape->shape == SHAPE_BLOCK) + { /* - * When we don't have window focus, draw a hollow cursor. + * Draw the text character with the cursor colors. Use the + * character attributes plus the cursor attributes. */ - if (!gui.in_focus) + gui.highlight_mask = (cattr | attr); + (void)gui_screenchar(LineOffset[gui.row] + gui.col, + GUI_MON_IS_CURSOR | GUI_MON_NOCLEAR, cfg, cbg, 0); + } + else + { +#if defined(FEAT_RIGHTLEFT) + int col_off = FALSE; +#endif + /* + * First draw the partial cursor, then overwrite with the text + * character, using a transparent background. + */ + if (shape->shape == SHAPE_VER) { - gui_mch_draw_hollow_cursor(cbg); - return; + cur_height = gui.char_height; + cur_width = (gui.char_width * shape->percentage + 99) / 100; } - - old_hl_mask = gui.highlight_mask; - if (shape->shape == SHAPE_BLOCK) + else { - /* - * Draw the text character with the cursor colors. Use the - * character attributes plus the cursor attributes. - */ - gui.highlight_mask = (cattr | attr); - (void)gui_screenchar(LineOffset[gui.row] + gui.col, - GUI_MON_IS_CURSOR | GUI_MON_NOCLEAR, cfg, cbg, 0); + cur_height = (gui.char_height * shape->percentage + 99) / 100; + cur_width = gui.char_width; } - else + if (has_mbyte && (*mb_off2cells)(LineOffset[gui.row] + gui.col, + LineOffset[gui.row] + screen_Columns) > 1) { -#if defined(FEAT_RIGHTLEFT) - int col_off = FALSE; -#endif - /* - * First draw the partial cursor, then overwrite with the text - * character, using a transparent background. - */ - if (shape->shape == SHAPE_VER) - { - cur_height = gui.char_height; - cur_width = (gui.char_width * shape->percentage + 99) / 100; - } - else + // Double wide character. + if (shape->shape != SHAPE_VER) + cur_width += gui.char_width; +#ifdef FEAT_RIGHTLEFT + if (CURSOR_BAR_RIGHT) { - cur_height = (gui.char_height * shape->percentage + 99) / 100; - cur_width = gui.char_width; + // gui.col points to the left half of the character but + // the vertical line needs to be on the right half. + // A double-wide horizontal line is also drawn from the + // right half in gui_mch_draw_part_cursor(). + col_off = TRUE; + ++gui.col; } - if (has_mbyte && (*mb_off2cells)(LineOffset[gui.row] + gui.col, - LineOffset[gui.row] + screen_Columns) > 1) - { - // Double wide character. - if (shape->shape != SHAPE_VER) - cur_width += gui.char_width; -#ifdef FEAT_RIGHTLEFT - if (CURSOR_BAR_RIGHT) - { - // gui.col points to the left half of the character but - // the vertical line needs to be on the right half. - // A double-wide horizontal line is also drawn from the - // right half in gui_mch_draw_part_cursor(). - col_off = TRUE; - ++gui.col; - } #endif - } - gui_mch_draw_part_cursor(cur_width, cur_height, cbg); + } + gui_mch_draw_part_cursor(cur_width, cur_height, cbg); #if defined(FEAT_RIGHTLEFT) - if (col_off) - --gui.col; + if (col_off) + --gui.col; #endif #ifndef FEAT_GUI_MSWIN // doesn't seem to work for MSWindows - gui.highlight_mask = ScreenAttrs[LineOffset[gui.row] + gui.col]; - (void)gui_screenchar(LineOffset[gui.row] + gui.col, - GUI_MON_TRS_CURSOR | GUI_MON_NOCLEAR, - (guicolor_T)0, (guicolor_T)0, 0); + gui.highlight_mask = ScreenAttrs[LineOffset[gui.row] + gui.col]; + (void)gui_screenchar(LineOffset[gui.row] + gui.col, + GUI_MON_TRS_CURSOR | GUI_MON_NOCLEAR, + (guicolor_T)0, (guicolor_T)0, 0); #endif - } - gui.highlight_mask = old_hl_mask; } + gui.highlight_mask = old_hl_mask; } #if defined(FEAT_MENU) || defined(PROTO) @@ -2054,13 +2055,13 @@ gui_write( void gui_dont_update_cursor(int undraw) { - if (gui.in_use) - { - // Undraw the cursor now, we probably can't do it after the change. - if (undraw) - gui_undraw_cursor(); - can_update_cursor = FALSE; - } + if (!gui.in_use) + return; + + // Undraw the cursor now, we probably can't do it after the change. + if (undraw) + gui_undraw_cursor(); + can_update_cursor = FALSE; } void @@ -2679,23 +2680,23 @@ gui_outstr_nowrap( void gui_undraw_cursor(void) { - if (gui.cursor_is_valid) - { - // Always redraw the character just before if there is one, because - // with some fonts and characters there can be a one pixel overlap. - int startcol = gui.cursor_col > 0 ? gui.cursor_col - 1 : gui.cursor_col; - int endcol = gui.cursor_col; + if (!gui.cursor_is_valid) + return; + + // Always redraw the character just before if there is one, because + // with some fonts and characters there can be a one pixel overlap. + int startcol = gui.cursor_col > 0 ? gui.cursor_col - 1 : gui.cursor_col; + int endcol = gui.cursor_col; #ifdef FEAT_GUI_GTK - gui_adjust_undraw_cursor_for_ligatures(&startcol, &endcol); + gui_adjust_undraw_cursor_for_ligatures(&startcol, &endcol); #endif - gui_redraw_block(gui.cursor_row, startcol, - gui.cursor_row, endcol, GUI_MON_NOCLEAR); + gui_redraw_block(gui.cursor_row, startcol, + gui.cursor_row, endcol, GUI_MON_NOCLEAR); - // Cursor_is_valid is reset when the cursor is undrawn, also reset it - // here in case it wasn't needed to undraw it. - gui.cursor_is_valid = FALSE; - } + // Cursor_is_valid is reset when the cursor is undrawn, also reset it + // here in case it wasn't needed to undraw it. + gui.cursor_is_valid = FALSE; } void @@ -3559,137 +3560,137 @@ gui_init_which_components(char_u *oldval UNUSED) break; } - if (gui.in_use) - { - need_set_size = 0; - fix_size = FALSE; + if (!gui.in_use) + return; + + need_set_size = 0; + fix_size = FALSE; #ifdef FEAT_GUI_DARKTHEME - if (using_dark_theme != prev_dark_theme) - { - gui_mch_set_dark_theme(using_dark_theme); - prev_dark_theme = using_dark_theme; - } + if (using_dark_theme != prev_dark_theme) + { + gui_mch_set_dark_theme(using_dark_theme); + prev_dark_theme = using_dark_theme; + } #endif #ifdef FEAT_GUI_TABLINE - // Update the GUI tab line, it may appear or disappear. This may - // cause the non-GUI tab line to disappear or appear. - using_tabline = gui_has_tabline(); - if (!gui_mch_showing_tabline() != !using_tabline) - { - // We don't want a resize event change "Rows" here, save and - // restore it. Resizing is handled below. - i = Rows; - gui_update_tabline(); - Rows = i; - need_set_size |= RESIZE_VERT; - if (using_tabline) - fix_size = TRUE; - if (!gui_use_tabline()) - redraw_tabline = TRUE; // may draw non-GUI tab line - } + // Update the GUI tab line, it may appear or disappear. This may + // cause the non-GUI tab line to disappear or appear. + using_tabline = gui_has_tabline(); + if (!gui_mch_showing_tabline() != !using_tabline) + { + // We don't want a resize event change "Rows" here, save and + // restore it. Resizing is handled below. + i = Rows; + gui_update_tabline(); + Rows = i; + need_set_size |= RESIZE_VERT; + if (using_tabline) + fix_size = TRUE; + if (!gui_use_tabline()) + redraw_tabline = TRUE; // may draw non-GUI tab line + } #endif - for (i = 0; i < 3; i++) + for (i = 0; i < 3; i++) + { + // The scrollbar needs to be updated when it is shown/unshown and + // when switching tab pages. But the size only changes when it's + // shown/unshown. Thus we need two places to remember whether a + // scrollbar is there or not. + if (gui.which_scrollbars[i] != prev_which_scrollbars[i] + || gui.which_scrollbars[i] + != curtab->tp_prev_which_scrollbars[i]) { - // The scrollbar needs to be updated when it is shown/unshown and - // when switching tab pages. But the size only changes when it's - // shown/unshown. Thus we need two places to remember whether a - // scrollbar is there or not. - if (gui.which_scrollbars[i] != prev_which_scrollbars[i] - || gui.which_scrollbars[i] - != curtab->tp_prev_which_scrollbars[i]) + if (i == SBAR_BOTTOM) + gui_mch_enable_scrollbar(&gui.bottom_sbar, + gui.which_scrollbars[i]); + else + { + FOR_ALL_WINDOWS(wp) + gui_do_scrollbar(wp, i, gui.which_scrollbars[i]); + } + if (gui.which_scrollbars[i] != prev_which_scrollbars[i]) { if (i == SBAR_BOTTOM) - gui_mch_enable_scrollbar(&gui.bottom_sbar, - gui.which_scrollbars[i]); + need_set_size |= RESIZE_VERT; else - { - FOR_ALL_WINDOWS(wp) - gui_do_scrollbar(wp, i, gui.which_scrollbars[i]); - } - if (gui.which_scrollbars[i] != prev_which_scrollbars[i]) - { - if (i == SBAR_BOTTOM) - need_set_size |= RESIZE_VERT; - else - need_set_size |= RESIZE_HOR; - if (gui.which_scrollbars[i]) - fix_size = TRUE; - } + need_set_size |= RESIZE_HOR; + if (gui.which_scrollbars[i]) + fix_size = TRUE; } - curtab->tp_prev_which_scrollbars[i] = gui.which_scrollbars[i]; - prev_which_scrollbars[i] = gui.which_scrollbars[i]; } + curtab->tp_prev_which_scrollbars[i] = gui.which_scrollbars[i]; + prev_which_scrollbars[i] = gui.which_scrollbars[i]; + } #ifdef FEAT_MENU - if (gui.menu_is_active != prev_menu_is_active) - { - // We don't want a resize event change "Rows" here, save and - // restore it. Resizing is handled below. - i = Rows; - gui_mch_enable_menu(gui.menu_is_active); - Rows = i; - prev_menu_is_active = gui.menu_is_active; - need_set_size |= RESIZE_VERT; - if (gui.menu_is_active) - fix_size = TRUE; - } + if (gui.menu_is_active != prev_menu_is_active) + { + // We don't want a resize event change "Rows" here, save and + // restore it. Resizing is handled below. + i = Rows; + gui_mch_enable_menu(gui.menu_is_active); + Rows = i; + prev_menu_is_active = gui.menu_is_active; + need_set_size |= RESIZE_VERT; + if (gui.menu_is_active) + fix_size = TRUE; + } #endif #ifdef FEAT_TOOLBAR - if (using_toolbar != prev_toolbar) - { - gui_mch_show_toolbar(using_toolbar); - prev_toolbar = using_toolbar; - need_set_size |= RESIZE_VERT; - if (using_toolbar) - fix_size = TRUE; - } + if (using_toolbar != prev_toolbar) + { + gui_mch_show_toolbar(using_toolbar); + prev_toolbar = using_toolbar; + need_set_size |= RESIZE_VERT; + if (using_toolbar) + fix_size = TRUE; + } #endif #if defined(FEAT_MENU) && !(defined(MSWIN) && !defined(FEAT_TEAROFF)) - if (using_tearoff != prev_tearoff) - { - gui_mch_toggle_tearoffs(using_tearoff); - prev_tearoff = using_tearoff; - } + if (using_tearoff != prev_tearoff) + { + gui_mch_toggle_tearoffs(using_tearoff); + prev_tearoff = using_tearoff; + } #endif - if (need_set_size != 0) - { + if (need_set_size != 0) + { #ifdef FEAT_GUI_GTK - long prev_Columns = Columns; - long prev_Rows = Rows; + long prev_Columns = Columns; + long prev_Rows = Rows; #endif - // Adjust the size of the window to make the text area keep the - // same size and to avoid that part of our window is off-screen - // and a scrollbar can't be used, for example. - gui_set_shellsize(FALSE, fix_size, need_set_size); + // Adjust the size of the window to make the text area keep the + // same size and to avoid that part of our window is off-screen + // and a scrollbar can't be used, for example. + gui_set_shellsize(FALSE, fix_size, need_set_size); #ifdef FEAT_GUI_GTK - // GTK has the annoying habit of sending us resize events when - // changing the window size ourselves. This mostly happens when - // waiting for a character to arrive, quite unpredictably, and may - // change Columns and Rows when we don't want it. Wait for a - // character here to avoid this effect. - // If you remove this, please test this command for resizing - // effects (with optional left scrollbar): ":vsp|q|vsp|q|vsp|q". - // Don't do this while starting up though. - // Don't change Rows when adding menu/toolbar/tabline. - // Don't change Columns when adding vertical toolbar. - if (!gui.starting && need_set_size != (RESIZE_VERT | RESIZE_HOR)) - (void)char_avail(); - if ((need_set_size & RESIZE_VERT) == 0) - Rows = prev_Rows; - if ((need_set_size & RESIZE_HOR) == 0) - Columns = prev_Columns; + // GTK has the annoying habit of sending us resize events when + // changing the window size ourselves. This mostly happens when + // waiting for a character to arrive, quite unpredictably, and may + // change Columns and Rows when we don't want it. Wait for a + // character here to avoid this effect. + // If you remove this, please test this command for resizing + // effects (with optional left scrollbar): ":vsp|q|vsp|q|vsp|q". + // Don't do this while starting up though. + // Don't change Rows when adding menu/toolbar/tabline. + // Don't change Columns when adding vertical toolbar. + if (!gui.starting && need_set_size != (RESIZE_VERT | RESIZE_HOR)) + (void)char_avail(); + if ((need_set_size & RESIZE_VERT) == 0) + Rows = prev_Rows; + if ((need_set_size & RESIZE_HOR) == 0) + Columns = prev_Columns; #endif - } - // When the console tabline appears or disappears the window positions - // change. - if (firstwin->w_winrow != tabline_height()) - shell_new_rows(); // recompute window positions and heights } + // When the console tabline appears or disappears the window positions + // change. + if (firstwin->w_winrow != tabline_height()) + shell_new_rows(); // recompute window positions and heights } #if defined(FEAT_GUI_TABLINE) || defined(PROTO) @@ -4768,7 +4769,7 @@ gui_mouse_focus(int x, int y) return; /* - * format a mouse click on status line input + * Format a mouse click on status line input, * ala gui_send_mouse_event(0, x, y, 0, 0); * Trick: Use a column number -1, so that get_pseudo_mouse_code() will * generate a K_LEFTMOUSE_NM key code. @@ -4852,13 +4853,14 @@ gui_mouse_correct(void) need_mouse_correct = FALSE; wp = gui_mouse_window(IGNORE_POPUP); - if (wp != curwin && wp != NULL) // If in other than current window - { - validate_cline_row(); - gui_mch_setmouse((int)W_ENDCOL(curwin) * gui.char_width - 3, - (W_WINROW(curwin) + curwin->w_wrow) * gui.char_height - + (gui.char_height) / 2); - } + if (wp == curwin || wp == NULL) + return; + + // If in other than current window + validate_cline_row(); + gui_mch_setmouse((int)W_ENDCOL(curwin) * gui.char_width - 3, + (W_WINROW(curwin) + curwin->w_wrow) * gui.char_height + + (gui.char_height) / 2); } /* @@ -5014,22 +5016,26 @@ display_errors(void) char_u *p; if (isatty(2)) - fflush(stderr); - else if (error_ga.ga_data != NULL) { - // avoid putting up a message box with blanks only - for (p = (char_u *)error_ga.ga_data; *p != NUL; ++p) - if (!isspace(*p)) - { - // Truncate a very long message, it will go off-screen. - if (STRLEN(p) > 2000) - STRCPY(p + 2000 - 14, "...(truncated)"); - (void)do_dialog(VIM_ERROR, (char_u *)_("Error"), - p, (char_u *)_("&Ok"), 1, NULL, FALSE); - break; - } - ga_clear(&error_ga); + fflush(stderr); + return; } + + if (error_ga.ga_data == NULL) + return; + + // avoid putting up a message box with blanks only + for (p = (char_u *)error_ga.ga_data; *p != NUL; ++p) + if (!isspace(*p)) + { + // Truncate a very long message, it will go off-screen. + if (STRLEN(p) > 2000) + STRCPY(p + 2000 - 14, "...(truncated)"); + (void)do_dialog(VIM_ERROR, (char_u *)_("Error"), + p, (char_u *)_("&Ok"), 1, NULL, FALSE); + break; + } + ga_clear(&error_ga); } #endif @@ -5339,12 +5345,12 @@ gui_wingoto_xy(int x, int y) int col = X_2_COL(x); win_T *wp; - if (row >= 0 && col >= 0) - { - wp = mouse_find_win(&row, &col, FAIL_POPUP); - if (wp != NULL && wp != curwin) - win_goto(wp); - } + if (row < 0 || col < 0) + return; + + wp = mouse_find_win(&row, &col, FAIL_POPUP); + if (wp != NULL && wp != curwin) + win_goto(wp); } /* diff --git a/src/gui_beval.c b/src/gui_beval.c index e1b0e4bfd9..daeac8f3b7 100644 --- a/src/gui_beval.c +++ b/src/gui_beval.c @@ -373,40 +373,40 @@ pointer_event(BalloonEval *beval, int x, int y, unsigned state) distance = ABS(x - beval->x) + ABS(y - beval->y); - if (distance > 4) + if (distance <= 4) + return; + + /* + * Moved out of the balloon location: cancel it. + * Remember button state + */ + beval->state = state; + cancelBalloon(beval); + + // Mouse buttons are pressed - no balloon now + if (!(state & ((int)GDK_BUTTON1_MASK | (int)GDK_BUTTON2_MASK + | (int)GDK_BUTTON3_MASK))) { - /* - * Moved out of the balloon location: cancel it. - * Remember button state - */ - beval->state = state; - cancelBalloon(beval); + beval->x = x; + beval->y = y; - // Mouse buttons are pressed - no balloon now - if (!(state & ((int)GDK_BUTTON1_MASK | (int)GDK_BUTTON2_MASK - | (int)GDK_BUTTON3_MASK))) + if (state & (int)GDK_MOD1_MASK) { - beval->x = x; - beval->y = y; - - if (state & (int)GDK_MOD1_MASK) - { - /* - * Alt is pressed -- enter super-evaluate-mode, - * where there is no time delay - */ - if (beval->msgCB != NULL) - { - beval->showState = ShS_PENDING; - (*beval->msgCB)(beval, state); - } - } - else + /* + * Alt is pressed -- enter super-evaluate-mode, + * where there is no time delay + */ + if (beval->msgCB != NULL) { - beval->timerID = g_timeout_add((guint)p_bdlay, - &timeout_cb, beval); + beval->showState = ShS_PENDING; + (*beval->msgCB)(beval, state); } } + else + { + beval->timerID = g_timeout_add((guint)p_bdlay, + &timeout_cb, beval); + } } } @@ -698,17 +698,17 @@ timerRoutine(XtPointer dx, XtIntervalId *id UNUSED) static void requestBalloon(BalloonEval *beval) { - if (beval->showState != ShS_PENDING) + if (beval->showState == ShS_PENDING) + return; + + // Determine the beval to display + if (beval->msgCB != NULL) { - // Determine the beval to display - if (beval->msgCB != NULL) - { - beval->showState = ShS_PENDING; - (*beval->msgCB)(beval, beval->state); - } - else if (beval->msg != NULL) - drawBalloon(beval); + beval->showState = ShS_PENDING; + (*beval->msgCB)(beval, beval->state); } + else if (beval->msg != NULL) + drawBalloon(beval); } #ifdef FEAT_GUI_GTK @@ -900,85 +900,85 @@ set_printable_label_text(GtkLabel *label, char_u *text) static void drawBalloon(BalloonEval *beval) { - if (beval->msg != NULL) - { - GtkRequisition requisition; - int screen_w; - int screen_h; - int screen_x; - int screen_y; - int x; - int y; - int x_offset = EVAL_OFFSET_X; - int y_offset = EVAL_OFFSET_Y; - PangoLayout *layout; + if (beval->msg == NULL) + return; + + GtkRequisition requisition; + int screen_w; + int screen_h; + int screen_x; + int screen_y; + int x; + int y; + int x_offset = EVAL_OFFSET_X; + int y_offset = EVAL_OFFSET_Y; + PangoLayout *layout; # if !GTK_CHECK_VERSION(3,22,2) - GdkScreen *screen; + GdkScreen *screen; - screen = gtk_widget_get_screen(beval->target); - gtk_window_set_screen(GTK_WINDOW(beval->balloonShell), screen); + screen = gtk_widget_get_screen(beval->target); + gtk_window_set_screen(GTK_WINDOW(beval->balloonShell), screen); # endif - gui_gtk_get_screen_geom_of_win(beval->target, 0, 0, - &screen_x, &screen_y, &screen_w, &screen_h); + gui_gtk_get_screen_geom_of_win(beval->target, 0, 0, + &screen_x, &screen_y, &screen_w, &screen_h); # if !GTK_CHECK_VERSION(3,0,0) - gtk_widget_ensure_style(beval->balloonShell); - gtk_widget_ensure_style(beval->balloonLabel); + gtk_widget_ensure_style(beval->balloonShell); + gtk_widget_ensure_style(beval->balloonLabel); # endif - set_printable_label_text(GTK_LABEL(beval->balloonLabel), beval->msg); - /* - * Dirty trick: Enable wrapping mode on the label's layout behind its - * back. This way GtkLabel won't try to constrain the wrap width to a - * builtin maximum value of about 65 Latin characters. - */ - layout = gtk_label_get_layout(GTK_LABEL(beval->balloonLabel)); + set_printable_label_text(GTK_LABEL(beval->balloonLabel), beval->msg); + /* + * Dirty trick: Enable wrapping mode on the label's layout behind its + * back. This way GtkLabel won't try to constrain the wrap width to a + * builtin maximum value of about 65 Latin characters. + */ + layout = gtk_label_get_layout(GTK_LABEL(beval->balloonLabel)); # ifdef PANGO_WRAP_WORD_CHAR - pango_layout_set_wrap(layout, PANGO_WRAP_WORD_CHAR); + pango_layout_set_wrap(layout, PANGO_WRAP_WORD_CHAR); # else - pango_layout_set_wrap(layout, PANGO_WRAP_WORD); + pango_layout_set_wrap(layout, PANGO_WRAP_WORD); # endif - pango_layout_set_width(layout, - // try to come up with some reasonable width - PANGO_SCALE * CLAMP(gui.num_cols * gui.char_width, - screen_w / 2, - MAX(20, screen_w - 20))); + pango_layout_set_width(layout, + // try to come up with some reasonable width + PANGO_SCALE * CLAMP(gui.num_cols * gui.char_width, + screen_w / 2, + MAX(20, screen_w - 20))); - // Calculate the balloon's width and height. + // Calculate the balloon's width and height. # if GTK_CHECK_VERSION(3,0,0) - gtk_widget_get_preferred_size(beval->balloonShell, &requisition, NULL); + gtk_widget_get_preferred_size(beval->balloonShell, &requisition, NULL); # else - gtk_widget_size_request(beval->balloonShell, &requisition); + gtk_widget_size_request(beval->balloonShell, &requisition); # endif - // Compute position of the balloon area - gdk_window_get_origin(gtk_widget_get_window(beval->target), &x, &y); - x += beval->x; - y += beval->y; + // Compute position of the balloon area + gdk_window_get_origin(gtk_widget_get_window(beval->target), &x, &y); + x += beval->x; + y += beval->y; - // Get out of the way of the mouse pointer - if (x + x_offset + requisition.width > screen_x + screen_w) - y_offset += 15; - if (y + y_offset + requisition.height > screen_y + screen_h) - y_offset = -requisition.height - EVAL_OFFSET_Y; + // Get out of the way of the mouse pointer + if (x + x_offset + requisition.width > screen_x + screen_w) + y_offset += 15; + if (y + y_offset + requisition.height > screen_y + screen_h) + y_offset = -requisition.height - EVAL_OFFSET_Y; - // Sanitize values - x = CLAMP(x + x_offset, 0, - MAX(0, screen_x + screen_w - requisition.width)); - y = CLAMP(y + y_offset, 0, - MAX(0, screen_y + screen_h - requisition.height)); + // Sanitize values + x = CLAMP(x + x_offset, 0, + MAX(0, screen_x + screen_w - requisition.width)); + y = CLAMP(y + y_offset, 0, + MAX(0, screen_y + screen_h - requisition.height)); - // Show the balloon + // Show the balloon # if GTK_CHECK_VERSION(3,0,0) - gtk_window_move(GTK_WINDOW(beval->balloonShell), x, y); + gtk_window_move(GTK_WINDOW(beval->balloonShell), x, y); # else - gtk_widget_set_uposition(beval->balloonShell, x, y); + gtk_widget_set_uposition(beval->balloonShell, x, y); # endif - gtk_widget_show(beval->balloonShell); + gtk_widget_show(beval->balloonShell); - beval->showState = ShS_SHOWING; - gui_mch_update(); - } + beval->showState = ShS_SHOWING; + gui_mch_update(); } /* @@ -1060,65 +1060,65 @@ drawBalloon(BalloonEval *beval) Position tx; Position ty; - if (beval->msg != NULL) - { - XmString s; - // Show the Balloon + if (beval->msg == NULL) + return; - // Calculate the label's width and height + XmString s; + // Show the Balloon - // For the callback function we parse NL characters to create a - // multi-line label. This doesn't work for all languages, but - // XmStringCreateLocalized() doesn't do multi-line labels... - if (beval->msgCB != NULL) - s = XmStringCreateLtoR((char *)beval->msg, XmFONTLIST_DEFAULT_TAG); - else - s = XmStringCreateLocalized((char *)beval->msg); - { - XmFontList fl; + // Calculate the label's width and height - fl = gui_motif_fontset2fontlist(&gui.tooltip_fontset); - if (fl == NULL) - { - XmStringFree(s); - return; - } - XmStringExtent(fl, s, &w, &h); - XmFontListFree(fl); - } - w += gui.border_offset << 1; - h += gui.border_offset << 1; - XtVaSetValues(beval->balloonLabel, XmNlabelString, s, NULL); - XmStringFree(s); - - // Compute position of the balloon area - tx = beval->x_root + EVAL_OFFSET_X; - ty = beval->y_root + EVAL_OFFSET_Y; - if ((tx + w) > beval->screen_width) - tx = beval->screen_width - w; - if ((ty + h) > beval->screen_height) - ty = beval->screen_height - h; - XtVaSetValues(beval->balloonShell, - XmNx, tx, - XmNy, ty, - NULL); - // Set tooltip colors - { - Arg args[2]; + // For the callback function we parse NL characters to create a + // multi-line label. This doesn't work for all languages, but + // XmStringCreateLocalized() doesn't do multi-line labels... + if (beval->msgCB != NULL) + s = XmStringCreateLtoR((char *)beval->msg, XmFONTLIST_DEFAULT_TAG); + else + s = XmStringCreateLocalized((char *)beval->msg); + { + XmFontList fl; - args[0].name = XmNbackground; - args[0].value = gui.tooltip_bg_pixel; - args[1].name = XmNforeground; - args[1].value = gui.tooltip_fg_pixel; - XtSetValues(beval->balloonLabel, &args[0], XtNumber(args)); + fl = gui_motif_fontset2fontlist(&gui.tooltip_fontset); + if (fl == NULL) + { + XmStringFree(s); + return; } + XmStringExtent(fl, s, &w, &h); + XmFontListFree(fl); + } + w += gui.border_offset << 1; + h += gui.border_offset << 1; + XtVaSetValues(beval->balloonLabel, XmNlabelString, s, NULL); + XmStringFree(s); + + // Compute position of the balloon area + tx = beval->x_root + EVAL_OFFSET_X; + ty = beval->y_root + EVAL_OFFSET_Y; + if ((tx + w) > beval->screen_width) + tx = beval->screen_width - w; + if ((ty + h) > beval->screen_height) + ty = beval->screen_height - h; + XtVaSetValues(beval->balloonShell, + XmNx, tx, + XmNy, ty, + NULL); + // Set tooltip colors + { + Arg args[2]; - XtPopup(beval->balloonShell, XtGrabNone); + args[0].name = XmNbackground; + args[0].value = gui.tooltip_bg_pixel; + args[1].name = XmNforeground; + args[1].value = gui.tooltip_fg_pixel; + XtSetValues(beval->balloonLabel, &args[0], XtNumber(args)); + } - beval->showState = ShS_SHOWING; + XtPopup(beval->balloonShell, XtGrabNone); - current_beval = beval; - } + beval->showState = ShS_SHOWING; + + current_beval = beval; } /* @@ -1161,18 +1161,16 @@ createBalloonEvalWindow(BalloonEval *beval) beval->balloonShell = XtAppCreateShell("balloonEval", "BalloonEval", overrideShellWidgetClass, gui.dpy, args, n); - { - XmFontList fl; + XmFontList fl; - n = 0; - fl = gui_motif_fontset2fontlist(&gui.tooltip_fontset); - XtSetArg(args[n], XmNforeground, gui.tooltip_fg_pixel); n++; - XtSetArg(args[n], XmNbackground, gui.tooltip_bg_pixel); n++; - XtSetArg(args[n], XmNfontList, fl); n++; - XtSetArg(args[n], XmNalignment, XmALIGNMENT_BEGINNING); n++; - beval->balloonLabel = XtCreateManagedWidget("balloonLabel", - xmLabelWidgetClass, beval->balloonShell, args, n); - } + n = 0; + fl = gui_motif_fontset2fontlist(&gui.tooltip_fontset); + XtSetArg(args[n], XmNforeground, gui.tooltip_fg_pixel); n++; + XtSetArg(args[n], XmNbackground, gui.tooltip_bg_pixel); n++; + XtSetArg(args[n], XmNfontList, fl); n++; + XtSetArg(args[n], XmNalignment, XmALIGNMENT_BEGINNING); n++; + beval->balloonLabel = XtCreateManagedWidget("balloonLabel", + xmLabelWidgetClass, beval->balloonShell, args, n); } #endif // !FEAT_GUI_GTK diff --git a/src/gui_gtk.c b/src/gui_gtk.c index 1ae15ca3e6..6dbaf246b6 100644 --- a/src/gui_gtk.c +++ b/src/gui_gtk.c @@ -924,22 +924,22 @@ get_menu_position(vimmenu_T *menu) void gui_mch_menu_set_tip(vimmenu_T *menu) { - if (menu->id != NULL && menu->parent != NULL && gui.toolbar != NULL) - { - char_u *tooltip; + if (menu->id == NULL || menu->parent == NULL || gui.toolbar == NULL) + return; + + char_u *tooltip; - tooltip = CONVERT_TO_UTF8(menu->strings[MENU_INDEX_TIP]); - if (tooltip != NULL && utf_valid_string(tooltip, NULL)) + tooltip = CONVERT_TO_UTF8(menu->strings[MENU_INDEX_TIP]); + if (tooltip != NULL && utf_valid_string(tooltip, NULL)) # if GTK_CHECK_VERSION(3,0,0) - // Only set the tooltip when it's valid utf-8. - gtk_widget_set_tooltip_text(menu->id, (const gchar *)tooltip); + // Only set the tooltip when it's valid utf-8. + gtk_widget_set_tooltip_text(menu->id, (const gchar *)tooltip); # else - // Only set the tooltip when it's valid utf-8. - gtk_tooltips_set_tip(GTK_TOOLBAR(gui.toolbar)->tooltips, - menu->id, (const char *)tooltip, NULL); + // Only set the tooltip when it's valid utf-8. + gtk_tooltips_set_tip(GTK_TOOLBAR(gui.toolbar)->tooltips, + menu->id, (const char *)tooltip, NULL); # endif - CONVERT_TO_UTF8_FREE(tooltip); - } + CONVERT_TO_UTF8_FREE(tooltip); } #endif // FEAT_TOOLBAR @@ -1007,34 +1007,34 @@ gui_mch_destroy_menu(vimmenu_T *menu) void gui_mch_set_scrollbar_thumb(scrollbar_T *sb, long val, long size, long max) { - if (sb->id != NULL) - { - GtkAdjustment *adjustment; + if (sb->id == NULL) + return; + + GtkAdjustment *adjustment; - // ignore events triggered by moving the thumb (happens in GTK 3) - ++hold_gui_events; + // ignore events triggered by moving the thumb (happens in GTK 3) + ++hold_gui_events; - adjustment = gtk_range_get_adjustment(GTK_RANGE(sb->id)); + adjustment = gtk_range_get_adjustment(GTK_RANGE(sb->id)); - gtk_adjustment_set_lower(adjustment, 0.0); - gtk_adjustment_set_value(adjustment, val); - gtk_adjustment_set_upper(adjustment, max + 1); - gtk_adjustment_set_page_size(adjustment, size); - gtk_adjustment_set_page_increment(adjustment, - size < 3L ? 1L : size - 2L); - gtk_adjustment_set_step_increment(adjustment, 1.0); + gtk_adjustment_set_lower(adjustment, 0.0); + gtk_adjustment_set_value(adjustment, val); + gtk_adjustment_set_upper(adjustment, max + 1); + gtk_adjustment_set_page_size(adjustment, size); + gtk_adjustment_set_page_increment(adjustment, + size < 3L ? 1L : size - 2L); + gtk_adjustment_set_step_increment(adjustment, 1.0); - g_signal_handler_block(G_OBJECT(adjustment), (gulong)sb->handler_id); + g_signal_handler_block(G_OBJECT(adjustment), (gulong)sb->handler_id); - --hold_gui_events; + --hold_gui_events; #if !GTK_CHECK_VERSION(3,18,0) - gtk_adjustment_changed(adjustment); + gtk_adjustment_changed(adjustment); #endif - g_signal_handler_unblock(G_OBJECT(adjustment), - (gulong)sb->handler_id); - } + g_signal_handler_unblock(G_OBJECT(adjustment), + (gulong)sb->handler_id); } void @@ -1157,21 +1157,21 @@ gui_mch_create_scrollbar(scrollbar_T *sb, int orient) sb->id = gtk_vscrollbar_new(NULL); #endif - if (sb->id != NULL) - { - GtkAdjustment *adjustment; + if (sb->id == NULL) + return; - gtk_widget_set_can_focus(sb->id, FALSE); - gui_gtk_form_put(GTK_FORM(gui.formwin), sb->id, 0, 0); + GtkAdjustment *adjustment; - adjustment = gtk_range_get_adjustment(GTK_RANGE(sb->id)); + gtk_widget_set_can_focus(sb->id, FALSE); + gui_gtk_form_put(GTK_FORM(gui.formwin), sb->id, 0, 0); - sb->handler_id = g_signal_connect( - G_OBJECT(adjustment), "value-changed", - G_CALLBACK(adjustment_value_changed), - GINT_TO_POINTER(sb->ident)); - gui_mch_update(); - } + adjustment = gtk_range_get_adjustment(GTK_RANGE(sb->id)); + + sb->handler_id = g_signal_connect( + G_OBJECT(adjustment), "value-changed", + G_CALLBACK(adjustment_value_changed), + GINT_TO_POINTER(sb->ident)); + gui_mch_update(); } void @@ -1994,59 +1994,58 @@ gui_make_popup(char_u *path_name, int mouse_pos) popup_mouse_pos = mouse_pos; menu = gui_find_menu(path_name); + if (menu == NULL || menu->submenu_id == NULL) + return; - if (menu != NULL && menu->submenu_id != NULL) - { # if GTK_CHECK_VERSION(3,22,2) - GdkWindow * const win = gtk_widget_get_window(gui.drawarea); - GdkEventButton trigger; - - // A pseudo event to have gtk_menu_popup_at_*() functions work. Since - // the position where the menu pops up is automatically adjusted by - // the functions, none of the fields x, y, x_root and y_root has to be - // set to a specific value here; therefore, they are set to zero for - // convenience. - trigger.type = GDK_BUTTON_PRESS; - trigger.window = win; - trigger.send_event = FALSE; - trigger.time = GDK_CURRENT_TIME; - trigger.x = 0.0; - trigger.y = 0.0; - trigger.axes = NULL; - trigger.state = 0; - trigger.button = 0; - trigger.device = NULL; - trigger.x_root = 0.0; - trigger.y_root = 0.0; - - if (mouse_pos) - gtk_menu_popup_at_pointer(GTK_MENU(menu->submenu_id), - (GdkEvent *)&trigger); - else - { - gint origin_x, origin_y; - GdkRectangle rect = { 0, 0, 0, 0 }; + GdkWindow * const win = gtk_widget_get_window(gui.drawarea); + GdkEventButton trigger; + + // A pseudo event to have gtk_menu_popup_at_*() functions work. Since + // the position where the menu pops up is automatically adjusted by + // the functions, none of the fields x, y, x_root and y_root has to be + // set to a specific value here; therefore, they are set to zero for + // convenience. + trigger.type = GDK_BUTTON_PRESS; + trigger.window = win; + trigger.send_event = FALSE; + trigger.time = GDK_CURRENT_TIME; + trigger.x = 0.0; + trigger.y = 0.0; + trigger.axes = NULL; + trigger.state = 0; + trigger.button = 0; + trigger.device = NULL; + trigger.x_root = 0.0; + trigger.y_root = 0.0; + + if (mouse_pos) + gtk_menu_popup_at_pointer(GTK_MENU(menu->submenu_id), + (GdkEvent *)&trigger); + else + { + gint origin_x, origin_y; + GdkRectangle rect = { 0, 0, 0, 0 }; - gdk_window_get_origin(win, &origin_x, &origin_y); - popup_menu_position_func(NULL, &rect.x, &rect.y, NULL, NULL); + gdk_window_get_origin(win, &origin_x, &origin_y); + popup_menu_position_func(NULL, &rect.x, &rect.y, NULL, NULL); - rect.x -= origin_x; - rect.y -= origin_y; + rect.x -= origin_x; + rect.y -= origin_y; - gtk_menu_popup_at_rect(GTK_MENU(menu->submenu_id), - win, - &rect, - GDK_GRAVITY_SOUTH_EAST, - GDK_GRAVITY_NORTH_WEST, - (GdkEvent *)&trigger); - } + gtk_menu_popup_at_rect(GTK_MENU(menu->submenu_id), + win, + &rect, + GDK_GRAVITY_SOUTH_EAST, + GDK_GRAVITY_NORTH_WEST, + (GdkEvent *)&trigger); + } # else - gtk_menu_popup(GTK_MENU(menu->submenu_id), - NULL, NULL, - &popup_menu_position_func, NULL, - 0U, (guint32)GDK_CURRENT_TIME); + gtk_menu_popup(GTK_MENU(menu->submenu_id), + NULL, NULL, + &popup_menu_position_func, NULL, + 0U, (guint32)GDK_CURRENT_TIME); # endif - } } #endif // FEAT_MENU diff --git a/src/gui_gtk_f.c b/src/gui_gtk_f.c index c8f90c2d79..1ae1bd795e 100644 --- a/src/gui_gtk_f.c +++ b/src/gui_gtk_f.c @@ -188,13 +188,13 @@ gui_gtk_form_thaw(GtkForm *form) { g_return_if_fail(GTK_IS_FORM(form)); - if (form->freeze_count) + if (!form->freeze_count) + return; + + if (!(--form->freeze_count)) { - if (!(--form->freeze_count)) - { - form_position_children(form); - gtk_widget_queue_draw(GTK_WIDGET(form)); - } + form_position_children(form); + gtk_widget_queue_draw(GTK_WIDGET(form)); } } @@ -610,32 +610,32 @@ form_remove(GtkContainer *container, GtkWidget *widget) tmp_list = tmp_list->next; } - if (tmp_list) - { -#if GTK_CHECK_VERSION(3,0,0) - const gboolean was_visible = gtk_widget_get_visible(widget); -#endif - if (child->window) - { - g_signal_handlers_disconnect_by_func(G_OBJECT(child->widget), - FUNC2GENERIC(&form_child_map), child); - g_signal_handlers_disconnect_by_func(G_OBJECT(child->widget), - FUNC2GENERIC(&form_child_unmap), child); + if (tmp_list == NULL) + return; - // FIXME: This will cause problems for reparenting NO_WINDOW - // widgets out of a GtkForm - gdk_window_set_user_data(child->window, NULL); - gdk_window_destroy(child->window); - } - gtk_widget_unparent(widget); #if GTK_CHECK_VERSION(3,0,0) - if (was_visible) - gtk_widget_queue_resize(GTK_WIDGET(container)); + const gboolean was_visible = gtk_widget_get_visible(widget); #endif - form->children = g_list_remove_link(form->children, tmp_list); - g_list_free_1(tmp_list); - g_free(child); + if (child->window) + { + g_signal_handlers_disconnect_by_func(G_OBJECT(child->widget), + FUNC2GENERIC(&form_child_map), child); + g_signal_handlers_disconnect_by_func(G_OBJECT(child->widget), + FUNC2GENERIC(&form_child_unmap), child); + + // FIXME: This will cause problems for reparenting NO_WINDOW + // widgets out of a GtkForm + gdk_window_set_user_data(child->window, NULL); + gdk_window_destroy(child->window); } + gtk_widget_unparent(widget); +#if GTK_CHECK_VERSION(3,0,0) + if (was_visible) + gtk_widget_queue_resize(GTK_WIDGET(container)); +#endif + form->children = g_list_remove_link(form->children, tmp_list); + g_list_free_1(tmp_list); + g_free(child); } static void diff --git a/src/gui_gtk_x11.c b/src/gui_gtk_x11.c index ea76e3370a..b8e08f5ea4 100644 --- a/src/gui_gtk_x11.c +++ b/src/gui_gtk_x11.c @@ -2435,16 +2435,15 @@ setup_save_yourself(void) GnomeClient *client; client = gnome_master_client(); + if (client == NULL) + return; - if (client != NULL) - { - // Must use the deprecated gtk_signal_connect() for compatibility - // with GNOME 1. Arrgh, zombies! - gtk_signal_connect(GTK_OBJECT(client), "save_yourself", - GTK_SIGNAL_FUNC(&sm_client_save_yourself), NULL); - gtk_signal_connect(GTK_OBJECT(client), "die", - GTK_SIGNAL_FUNC(&sm_client_die), NULL); - } + // Must use the deprecated gtk_signal_connect() for compatibility + // with GNOME 1. Arrgh, zombies! + gtk_signal_connect(GTK_OBJECT(client), "save_yourself", + GTK_SIGNAL_FUNC(&sm_client_save_yourself), NULL); + gtk_signal_connect(GTK_OBJECT(client), "die", + GTK_SIGNAL_FUNC(&sm_client_die), NULL); } #else // !USE_GNOME_SESSION @@ -3379,13 +3378,13 @@ on_tab_reordered( gint idx, gpointer data UNUSED) { - if (!ignore_tabline_evt) - { - if ((tabpage_index(curtab) - 1) < idx) - tabpage_move(idx + 1); - else - tabpage_move(idx); - } + if (ignore_tabline_evt) + return; + + if ((tabpage_index(curtab) - 1) < idx) + tabpage_move(idx + 1); + else + tabpage_move(idx); } # endif @@ -4069,15 +4068,15 @@ gui_mch_init(void) void gui_mch_forked(void) { - if (using_gnome) - { - GnomeClient *client; + if (!using_gnome) + return; - client = gnome_master_client(); + GnomeClient *client; - if (client != NULL) - gnome_client_set_process_id(client, getpid()); - } + client = gnome_master_client(); + + if (client != NULL) + gnome_client_set_process_id(client, getpid()); } #endif // USE_GNOME_SESSION @@ -6860,11 +6859,11 @@ clip_mch_request_selection(Clipboard_T *cbd) void clip_mch_lose_selection(Clipboard_T *cbd UNUSED) { - if (!in_selection_clear_event) - { - gtk_selection_owner_set(NULL, cbd->gtk_sel_atom, gui.event_time); - gui_mch_update(); - } + if (in_selection_clear_event) + return; + + gtk_selection_owner_set(NULL, cbd->gtk_sel_atom, gui.event_time); + gui_mch_update(); } /* @@ -7029,21 +7028,21 @@ static int last_shape = 0; void gui_mch_mousehide(int hide) { - if (gui.pointer_hidden != hide) + if (gui.pointer_hidden == hide) + return; + + gui.pointer_hidden = hide; + if (gtk_widget_get_window(gui.drawarea) && gui.blank_pointer != NULL) { - gui.pointer_hidden = hide; - if (gtk_widget_get_window(gui.drawarea) && gui.blank_pointer != NULL) - { - if (hide) - gdk_window_set_cursor(gtk_widget_get_window(gui.drawarea), - gui.blank_pointer); - else + if (hide) + gdk_window_set_cursor(gtk_widget_get_window(gui.drawarea), + gui.blank_pointer); + else #ifdef FEAT_MOUSESHAPE - mch_set_mouse_shape(last_shape); + mch_set_mouse_shape(last_shape); #else - gdk_window_set_cursor(gtk_widget_get_window(gui.drawarea), NULL); + gdk_window_set_cursor(gtk_widget_get_window(gui.drawarea), NULL); #endif - } } } @@ -7132,141 +7131,141 @@ gui_mch_drawsign(int row, int col, int typenr) sign = (GdkPixbuf *)sign_get_image(typenr); - if (sign != NULL && gui.drawarea != NULL - && gtk_widget_get_window(gui.drawarea) != NULL) - { - int width; - int height; - int xoffset; - int yoffset; - int need_scale; + if (sign == NULL || gui.drawarea == NULL + || gtk_widget_get_window(gui.drawarea) == NULL) + return; - width = gdk_pixbuf_get_width(sign); - height = gdk_pixbuf_get_height(sign); - /* - * Decide whether we need to scale. Allow one pixel of border - * width to be cut off, in order to avoid excessive scaling for - * tiny differences in font size. - * Do scale to fit the height to avoid gaps because of linespacing. - */ - need_scale = (width > SIGN_WIDTH + 2 - || height != SIGN_HEIGHT - || (width < 3 * SIGN_WIDTH / 4 - && height < 3 * SIGN_HEIGHT / 4)); - if (need_scale) + int width; + int height; + int xoffset; + int yoffset; + int need_scale; + + width = gdk_pixbuf_get_width(sign); + height = gdk_pixbuf_get_height(sign); + /* + * Decide whether we need to scale. Allow one pixel of border + * width to be cut off, in order to avoid excessive scaling for + * tiny differences in font size. + * Do scale to fit the height to avoid gaps because of linespacing. + */ + need_scale = (width > SIGN_WIDTH + 2 + || height != SIGN_HEIGHT + || (width < 3 * SIGN_WIDTH / 4 + && height < 3 * SIGN_HEIGHT / 4)); + if (need_scale) + { + double aspect; + int w = width; + int h = height; + + // Keep the original aspect ratio + aspect = (double)height / (double)width; + width = (double)SIGN_WIDTH * SIGN_ASPECT / aspect; + width = MIN(width, SIGN_WIDTH); + if (((double)(MAX(height, SIGN_HEIGHT)) / + (double)(MIN(height, SIGN_HEIGHT))) < 1.15) { - double aspect; - int w = width; - int h = height; - - // Keep the original aspect ratio - aspect = (double)height / (double)width; - width = (double)SIGN_WIDTH * SIGN_ASPECT / aspect; - width = MIN(width, SIGN_WIDTH); - if (((double)(MAX(height, SIGN_HEIGHT)) / - (double)(MIN(height, SIGN_HEIGHT))) < 1.15) - { - // Change the aspect ratio by at most 15% to fill the - // available space completely. - height = (double)SIGN_HEIGHT * SIGN_ASPECT / aspect; - height = MIN(height, SIGN_HEIGHT); - } - else - height = (double)width * aspect; + // Change the aspect ratio by at most 15% to fill the + // available space completely. + height = (double)SIGN_HEIGHT * SIGN_ASPECT / aspect; + height = MIN(height, SIGN_HEIGHT); + } + else + height = (double)width * aspect; - if (w == width && h == height) - { - // no change in dimensions; don't decrease reference counter - // (below) - need_scale = FALSE; - } - else - { - // This doesn't seem to be worth caching, and doing so would - // complicate the code quite a bit. - sign = gdk_pixbuf_scale_simple(sign, width, height, - GDK_INTERP_BILINEAR); - if (sign == NULL) - return; // out of memory - } + if (w == width && h == height) + { + // no change in dimensions; don't decrease reference counter + // (below) + need_scale = FALSE; + } + else + { + // This doesn't seem to be worth caching, and doing so would + // complicate the code quite a bit. + sign = gdk_pixbuf_scale_simple(sign, width, height, + GDK_INTERP_BILINEAR); + if (sign == NULL) + return; // out of memory } + } - // The origin is the upper-left corner of the pixmap. Therefore - // these offset may become negative if the pixmap is smaller than - // the 2x1 cells reserved for the sign icon. - xoffset = (width - SIGN_WIDTH) / 2; - yoffset = (height - SIGN_HEIGHT) / 2; + // The origin is the upper-left corner of the pixmap. Therefore + // these offset may become negative if the pixmap is smaller than + // the 2x1 cells reserved for the sign icon. + xoffset = (width - SIGN_WIDTH) / 2; + yoffset = (height - SIGN_HEIGHT) / 2; # if GTK_CHECK_VERSION(3,0,0) - { - cairo_t *cr; - cairo_surface_t *bg_surf; - cairo_t *bg_cr; - cairo_surface_t *sign_surf; - cairo_t *sign_cr; - - cr = cairo_create(gui.surface); - - bg_surf = cairo_surface_create_similar(gui.surface, - cairo_surface_get_content(gui.surface), - SIGN_WIDTH, SIGN_HEIGHT); - bg_cr = cairo_create(bg_surf); - cairo_set_source_rgba(bg_cr, - gui.bgcolor->red, gui.bgcolor->green, gui.bgcolor->blue, - gui.bgcolor->alpha); - cairo_paint(bg_cr); - - sign_surf = cairo_surface_create_similar(gui.surface, - cairo_surface_get_content(gui.surface), - SIGN_WIDTH, SIGN_HEIGHT); - sign_cr = cairo_create(sign_surf); - gdk_cairo_set_source_pixbuf(sign_cr, sign, -xoffset, -yoffset); - cairo_paint(sign_cr); - - cairo_set_operator(sign_cr, CAIRO_OPERATOR_DEST_OVER); - cairo_set_source_surface(sign_cr, bg_surf, 0, 0); - cairo_paint(sign_cr); - - cairo_set_source_surface(cr, sign_surf, FILL_X(col), FILL_Y(row)); - cairo_paint(cr); - - cairo_destroy(sign_cr); - cairo_surface_destroy(sign_surf); - cairo_destroy(bg_cr); - cairo_surface_destroy(bg_surf); - cairo_destroy(cr); - - gtk_widget_queue_draw_area(gui.drawarea, - FILL_X(col), FILL_Y(col), width, height); + { + cairo_t *cr; + cairo_surface_t *bg_surf; + cairo_t *bg_cr; + cairo_surface_t *sign_surf; + cairo_t *sign_cr; - } + cr = cairo_create(gui.surface); + + bg_surf = cairo_surface_create_similar(gui.surface, + cairo_surface_get_content(gui.surface), + SIGN_WIDTH, SIGN_HEIGHT); + bg_cr = cairo_create(bg_surf); + cairo_set_source_rgba(bg_cr, + gui.bgcolor->red, gui.bgcolor->green, gui.bgcolor->blue, + gui.bgcolor->alpha); + cairo_paint(bg_cr); + + sign_surf = cairo_surface_create_similar(gui.surface, + cairo_surface_get_content(gui.surface), + SIGN_WIDTH, SIGN_HEIGHT); + sign_cr = cairo_create(sign_surf); + gdk_cairo_set_source_pixbuf(sign_cr, sign, -xoffset, -yoffset); + cairo_paint(sign_cr); + + cairo_set_operator(sign_cr, CAIRO_OPERATOR_DEST_OVER); + cairo_set_source_surface(sign_cr, bg_surf, 0, 0); + cairo_paint(sign_cr); + + cairo_set_source_surface(cr, sign_surf, FILL_X(col), FILL_Y(row)); + cairo_paint(cr); + + cairo_destroy(sign_cr); + cairo_surface_destroy(sign_surf); + cairo_destroy(bg_cr); + cairo_surface_destroy(bg_surf); + cairo_destroy(cr); + + gtk_widget_queue_draw_area(gui.drawarea, + FILL_X(col), FILL_Y(col), width, height); + + } # else // !GTK_CHECK_VERSION(3,0,0) - gdk_gc_set_foreground(gui.text_gc, gui.bgcolor); + gdk_gc_set_foreground(gui.text_gc, gui.bgcolor); - gdk_draw_rectangle(gui.drawarea->window, - gui.text_gc, - TRUE, - FILL_X(col), - FILL_Y(row), - SIGN_WIDTH, - SIGN_HEIGHT); - - gdk_pixbuf_render_to_drawable_alpha(sign, - gui.drawarea->window, - MAX(0, xoffset), - MAX(0, yoffset), - FILL_X(col) - MIN(0, xoffset), - FILL_Y(row) - MIN(0, yoffset), - MIN(width, SIGN_WIDTH), - MIN(height, SIGN_HEIGHT), - GDK_PIXBUF_ALPHA_BILEVEL, - 127, - GDK_RGB_DITHER_NORMAL, - 0, 0); + gdk_draw_rectangle(gui.drawarea->window, + gui.text_gc, + TRUE, + FILL_X(col), + FILL_Y(row), + SIGN_WIDTH, + SIGN_HEIGHT); + + gdk_pixbuf_render_to_drawable_alpha(sign, + gui.drawarea->window, + MAX(0, xoffset), + MAX(0, yoffset), + FILL_X(col) - MIN(0, xoffset), + FILL_Y(row) - MIN(0, yoffset), + MIN(width, SIGN_WIDTH), + MIN(height, SIGN_HEIGHT), + GDK_PIXBUF_ALPHA_BILEVEL, + 127, + GDK_RGB_DITHER_NORMAL, + 0, 0); # endif // !GTK_CHECK_VERSION(3,0,0) - if (need_scale) - g_object_unref(sign); - } + if (need_scale) + g_object_unref(sign); } void * diff --git a/src/gui_motif.c b/src/gui_motif.c index 55c026eb48..5e18f20c8e 100644 --- a/src/gui_motif.c +++ b/src/gui_motif.c @@ -979,14 +979,14 @@ gui_motif_add_actext(vimmenu_T *menu) XmString label; // Add accelerator text, if there is one - if (menu->actext != NULL && menu->id != (Widget)0) - { - label = XmStringCreate((char *)menu->actext, STRING_TAG); - if (label == NULL) - return; - XtVaSetValues(menu->id, XmNacceleratorText, label, NULL); - XmStringFree(label); - } + if (menu->actext == NULL || menu->id == (Widget)0) + return; + + label = XmStringCreate((char *)menu->actext, STRING_TAG); + if (label == NULL) + return; + XtVaSetValues(menu->id, XmNacceleratorText, label, NULL); + XmStringFree(label); } void @@ -1573,44 +1573,44 @@ gui_mch_destroy_menu(vimmenu_T *menu) menu->submenu_id = (Widget)0; } - if (menu->id != (Widget)0) - { - Widget parent; + if (menu->id == (Widget)0) + return; - parent = XtParent(menu->id); + Widget parent; + + parent = XtParent(menu->id); #if defined(FEAT_TOOLBAR) && defined(FEAT_BEVAL_GUI) - if (parent == toolBar && menu->tip != NULL) - { - // We try to destroy this before the actual menu, because there are - // callbacks, etc. that will be unregistered during the tooltip - // destruction. - // - // If you call "gui_mch_destroy_beval_area()" after destroying - // menu->id, then the tooltip's window will have already been - // deallocated by Xt, and unknown behaviour will ensue (probably - // a core dump). - gui_mch_destroy_beval_area(menu->tip); - menu->tip = NULL; - } + if (parent == toolBar && menu->tip != NULL) + { + // We try to destroy this before the actual menu, because there are + // callbacks, etc. that will be unregistered during the tooltip + // destruction. + // + // If you call "gui_mch_destroy_beval_area()" after destroying + // menu->id, then the tooltip's window will have already been + // deallocated by Xt, and unknown behaviour will ensue (probably + // a core dump). + gui_mch_destroy_beval_area(menu->tip); + menu->tip = NULL; + } #endi