1
0
forked from aniani/vim

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)
This commit is contained in:
Yegappan Lakshmanan 2023-01-08 13:44:24 +00:00 committed by Bram Moolenaar
parent df8f947359
commit 7f8b2559a3
14 changed files with 1274 additions and 1266 deletions

View File

@ -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;
}
/*

View File

@ -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

View File

@ -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

624
src/gui.c
View File

@ -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;
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);
// 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;
}
old_hl_mask = gui.highlight_mask;
if (shape->shape == SHAPE_BLOCK)
{
/*
* 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;
cur_width = (gui.char_width * shape->percentage + 99) / 100;
}
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)
{
cur_height = gui.char_height;
cur_width = (gui.char_width * shape->percentage + 99) / 100;
}
else
{
cur_height = (gui.char_height * shape->percentage + 99) / 100;
cur_width = gui.char_width;
}
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;
cur_height = (gui.char_height * shape->percentage + 99) / 100;
cur_width = gui.char_width;
}
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
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;
}
gui_mch_draw_part_cursor(cur_width, cur_height, cbg);
#endif
}
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);
}
/*

View File

@ -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)
{
/*
* 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
{
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)
if (beval->msg == NULL)
return;
XmString s;
// Show the Balloon
// Calculate the label's width and height
// 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);
{
XmString s;
// Show the Balloon
XmFontList fl;
// Calculate the label's width and height
// 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);
fl = gui_motif_fontset2fontlist(&gui.tooltip_fontset);
if (fl == NULL)
{
XmFontList fl;
fl = gui_motif_fontset2fontlist(&gui.tooltip_fontset);
if (fl == NULL)
{
XmStringFree(s);
return;
}
XmStringExtent(fl, s, &w, &h);
XmFontListFree(fl);
XmStringFree(s);
return;
}
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];
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));
}
XtPopup(beval->balloonShell, XtGrabNone);
beval->showState = ShS_SHOWING;
current_beval = beval;
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];
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));
}
XtPopup(beval->balloonShell, XtGrabNone);
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

View File

@ -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;
tooltip = CONVERT_TO_UTF8(menu->strings[MENU_INDEX_TIP]);
if (tooltip != NULL && utf_valid_string(tooltip, NULL))
char_u *tooltip;
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;
// ignore events triggered by moving the thumb (happens in GTK 3)
++hold_gui_events;
GtkAdjustment *adjustment;
adjustment = gtk_range_get_adjustment(GTK_RANGE(sb->id));
// ignore events triggered by moving the thumb (happens in GTK 3)
++hold_gui_events;
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);
adjustment = gtk_range_get_adjustment(GTK_RANGE(sb->id));
g_signal_handler_block(G_OBJECT(adjustment), (gulong)sb->handler_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);
--hold_gui_events;
g_signal_handler_block(G_OBJECT(adjustment), (gulong)sb->handler_id);
--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;
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;
// 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 };
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);
}
# else
gtk_menu_popup(GTK_MENU(menu->submenu_id),
NULL, NULL,
&popup_menu_position_func, NULL,
0U, (guint32)GDK_CURRENT_TIME);
# endif
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);
# endif
}
#endif // FEAT_MENU

View File

@ -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

View File

@ -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)
if (sign == NULL || gui.drawarea == NULL
|| gtk_widget_get_window(gui.drawarea) == NULL)
return;
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)
{
int width;
int height;
int xoffset;
int yoffset;
int need_scale;
double aspect;
int w = width;
int h = height;
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)
// 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;
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
}
// 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;
// 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 (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;
# 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;
{
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);
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);
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);
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_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_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);
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);
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_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);
}
# else // !GTK_CHECK_VERSION(3,0,0)
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);
# endif // !GTK_CHECK_VERSION(3,0,0)
if (need_scale)
g_object_unref(sign);
}
void *

View File

@ -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;
}
#endif
XtDestroyWidget(menu->id);
menu->id = (Widget)0;
if (parent == menuBar)
gui_mch_compute_menu_height((Widget)0);
#ifdef FEAT_TOOLBAR
else if (parent == toolBar)
{
Cardinal num_children;
// When removing last toolbar item, don't display the toolbar.
XtVaGetValues(toolBar, XmNnumChildren, &num_children, NULL);
if (num_children == 0)
gui_mch_show_toolbar(FALSE);
else
gui.toolbar_height = gui_mch_compute_toolbar_height();
}
#endif
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;
}
#endif
XtDestroyWidget(menu->id);
menu->id = (Widget)0;
if (parent == menuBar)
gui_mch_compute_menu_height((Widget)0);
#ifdef FEAT_TOOLBAR
else if (parent == toolBar)
{
Cardinal num_children;
// When removing last toolbar item, don't display the toolbar.
XtVaGetValues(toolBar, XmNnumChildren, &num_children, NULL);
if (num_children == 0)
gui_mch_show_toolbar(FALSE);
else
gui.toolbar_height = gui_mch_compute_toolbar_height();
}
#endif
}
void
@ -1630,19 +1630,19 @@ gui_mch_show_popupmenu(vimmenu_T *menu UNUSED)
void
gui_mch_def_colors(void)
{
if (gui.in_use)
{
gui.menu_fg_pixel = gui_get_color((char_u *)gui.rsrc_menu_fg_name);
gui.menu_bg_pixel = gui_get_color((char_u *)gui.rsrc_menu_bg_name);
gui.scroll_fg_pixel = gui_get_color((char_u *)gui.rsrc_scroll_fg_name);
gui.scroll_bg_pixel = gui_get_color((char_u *)gui.rsrc_scroll_bg_name);
if (!gui.in_use)
return;
gui.menu_fg_pixel = gui_get_color((char_u *)gui.rsrc_menu_fg_name);
gui.menu_bg_pixel = gui_get_color((char_u *)gui.rsrc_menu_bg_name);
gui.scroll_fg_pixel = gui_get_color((char_u *)gui.rsrc_scroll_fg_name);
gui.scroll_bg_pixel = gui_get_color((char_u *)gui.rsrc_scroll_bg_name);
#ifdef FEAT_BEVAL_GUI
gui.tooltip_fg_pixel =
gui_get_color((char_u *)gui.rsrc_tooltip_fg_name);
gui.tooltip_bg_pixel =
gui_get_color((char_u *)gui.rsrc_tooltip_bg_name);
gui.tooltip_fg_pixel =
gui_get_color((char_u *)gui.rsrc_tooltip_fg_name);
gui.tooltip_bg_pixel =
gui_get_color((char_u *)gui.rsrc_tooltip_bg_name);
#endif
}
}
@ -1674,30 +1674,30 @@ gui_mch_set_scrollbar_pos(
int w,
int h)
{
if (sb->id != (Widget)0)
if (sb->id == (Widget)0)
return;
if (sb->type == SBAR_LEFT || sb->type == SBAR_RIGHT)
{
if (sb->type == SBAR_LEFT || sb->type == SBAR_RIGHT)
{
if (y == 0)
h -= gui.border_offset;
else
y -= gui.border_offset;
XtVaSetValues(sb->id,
XmNtopOffset, y,
XmNbottomOffset, -y - h,
XmNwidth, w,
NULL);
}
if (y == 0)
h -= gui.border_offset;
else
XtVaSetValues(sb->id,
XmNtopOffset, y,
XmNleftOffset, x,
XmNrightOffset, gui.which_scrollbars[SBAR_RIGHT]
? gui.scrollbar_width : 0,
XmNheight, h,
NULL);
XtManageChild(sb->id);
y -= gui.border_offset;
XtVaSetValues(sb->id,
XmNtopOffset, y,
XmNbottomOffset, -y - h,
XmNwidth, w,
NULL);
}
else
XtVaSetValues(sb->id,
XmNtopOffset, y,
XmNleftOffset, x,
XmNrightOffset, gui.which_scrollbars[SBAR_RIGHT]
? gui.scrollbar_width : 0,
XmNheight, h,
NULL);
XtManageChild(sb->id);
}
int
@ -1732,52 +1732,52 @@ gui_mch_enable_scrollbar(scrollbar_T *sb, int flag)
Arg args[16];
int n;
if (sb->id != (Widget)0)
if (sb->id == (Widget)0)
return;
n = 0;
if (flag)
{
n = 0;
if (flag)
switch (sb->type)
{
case SBAR_LEFT:
XtSetArg(args[n], XmNleftOffset, gui.scrollbar_width); n++;
break;
case SBAR_RIGHT:
XtSetArg(args[n], XmNrightOffset, gui.scrollbar_width); n++;
break;
case SBAR_BOTTOM:
XtSetArg(args[n], XmNbottomOffset, gui.scrollbar_height);n++;
break;
}
XtSetValues(textArea, args, n);
XtManageChild(sb->id);
}
else
{
if (!gui.which_scrollbars[sb->type])
{
// The scrollbars of this type are all disabled, adjust the
// textArea attachment offset.
switch (sb->type)
{
case SBAR_LEFT:
XtSetArg(args[n], XmNleftOffset, gui.scrollbar_width); n++;
XtSetArg(args[n], XmNleftOffset, 0); n++;
break;
case SBAR_RIGHT:
XtSetArg(args[n], XmNrightOffset, gui.scrollbar_width); n++;
XtSetArg(args[n], XmNrightOffset, 0); n++;
break;
case SBAR_BOTTOM:
XtSetArg(args[n], XmNbottomOffset, gui.scrollbar_height);n++;
XtSetArg(args[n], XmNbottomOffset, 0);n++;
break;
}
XtSetValues(textArea, args, n);
XtManageChild(sb->id);
}
else
{
if (!gui.which_scrollbars[sb->type])
{
// The scrollbars of this type are all disabled, adjust the
// textArea attachment offset.
switch (sb->type)
{
case SBAR_LEFT:
XtSetArg(args[n], XmNleftOffset, 0); n++;
break;
case SBAR_RIGHT:
XtSetArg(args[n], XmNrightOffset, 0); n++;
break;
case SBAR_BOTTOM:
XtSetArg(args[n], XmNbottomOffset, 0);n++;
break;
}
XtSetValues(textArea, args, n);
}
XtUnmanageChild(sb->id);
}
XtUnmanageChild(sb->id);
}
}
@ -1817,17 +1817,16 @@ gui_mch_create_scrollbar(
sb->id = XtCreateWidget("scrollBar",
xmScrollBarWidgetClass, textAreaForm, args, n);
if (sb->id == (Widget)0)
return;
if (sb->id != (Widget)0)
{
gui_mch_set_scrollbar_colors(sb);
XtAddCallback(sb->id, XmNvalueChangedCallback,
scroll_cb, (XtPointer)sb->ident);
XtAddCallback(sb->id, XmNdragCallback,
scroll_cb, (XtPointer)sb->ident);
XtAddEventHandler(sb->id, KeyPressMask, FALSE, gui_x11_key_hit_cb,
gui_mch_set_scrollbar_colors(sb);
XtAddCallback(sb->id, XmNvalueChangedCallback,
scroll_cb, (XtPointer)sb->ident);
XtAddCallback(sb->id, XmNdragCallback,
scroll_cb, (XtPointer)sb->ident);
XtAddEventHandler(sb->id, KeyPressMask, FALSE, gui_x11_key_hit_cb,
(XtPointer)0);
}
}
void

View File

@ -992,19 +992,19 @@ gui_ph_pg_add_buffer(char *name)
char **new_titles = NULL;
new_titles = ALLOC_MULT(char *, (num_panels + 1));
if (new_titles != NULL)
{
if (num_panels > 0)
memcpy(new_titles, panel_titles, num_panels * sizeof(char **));
if (new_titles == NULL)
return;
new_titles[ num_panels++ ] = name;
if (num_panels > 0)
memcpy(new_titles, panel_titles, num_panels * sizeof(char **));
PtSetResource(gui.vimPanelGroup, Pt_ARG_PG_PANEL_TITLES, new_titles,
num_panels);
new_titles[ num_panels++ ] = name;
vim_free(panel_titles);
panel_titles = new_titles;
}
PtSetResource(gui.vimPanelGroup, Pt_ARG_PG_PANEL_TITLES, new_titles,
num_panels);
vim_free(panel_titles);
panel_titles = new_titles;
}
static void
@ -1901,21 +1901,21 @@ mch_set_mouse_shape(int shape)
void
gui_mch_mousehide(int hide)
{
if (gui.pointer_hidden != hide)
{
gui.pointer_hidden = hide;
if (gui.pointer_hidden == hide)
return;
gui.pointer_hidden = hide;
#ifdef FEAT_MOUSESHAPE
if (hide)
PtSetResource(gui.vimTextArea, Pt_ARG_CURSOR_TYPE,
Ph_CURSOR_NONE, 0);
else
mch_set_mouse_shape(last_shape);
#else
if (hide)
PtSetResource(gui.vimTextArea, Pt_ARG_CURSOR_TYPE,
(hide == MOUSE_SHOW) ? GUI_PH_MOUSE_TYPE : Ph_CURSOR_NONE,
0);
Ph_CURSOR_NONE, 0);
else
mch_set_mouse_shape(last_shape);
#else
PtSetResource(gui.vimTextArea, Pt_ARG_CURSOR_TYPE,
(hide == MOUSE_SHOW) ? GUI_PH_MOUSE_TYPE : Ph_CURSOR_NONE,
0);
#endif
}
}
void

View File

@ -434,12 +434,12 @@ directx_enabled(void)
static void
directx_binddc(void)
{
if (s_textArea != NULL)
{
RECT rect;
GetClientRect(s_textArea, &rect);
DWriteContext_BindDC(s_dwc, s_hdc, &rect);
}
if (s_textArea == NULL)
return;
RECT rect;
GetClientRect(s_textArea, &rect);
DWriteContext_BindDC(s_dwc, s_hdc, &rect);
}
#endif
@ -663,14 +663,14 @@ gui_mswin_rm_blink_timer(void)
{
MSG msg;
if (blink_timer != 0)
{
KillTimer(NULL, blink_timer);
// Eat spurious WM_TIMER messages
while (PeekMessageW(&msg, s_hwnd, WM_TIMER, WM_TIMER, PM_REMOVE))
;
blink_timer = 0;
}
if (blink_timer == 0)
return;
KillTimer(NULL, blink_timer);
// Eat spurious WM_TIMER messages
while (PeekMessageW(&msg, s_hwnd, WM_TIMER, WM_TIMER, PM_REMOVE))
;
blink_timer = 0;
}
/*
@ -888,7 +888,7 @@ _OnChar(
modifiers = get_active_modifiers();
ch = simplify_key(ch, &modifiers);
// Some keys need adjustment when the Ctrl modifier is used.
++no_reduce_keys;
ch = may_adjust_key_for_ctrl(modifiers, ch);
@ -1034,63 +1034,64 @@ _OnMouseButtonDown(
else
button = MOUSE_LEFT;
}
if (button >= 0)
if (button < 0)
return;
repeated_click = ((int)(currentTime - s_prevTime) < p_mouset);
/*
* Holding down the left and right buttons simulates pushing the middle
* button.
*/
if (repeated_click
&& ((button == MOUSE_LEFT && s_button_pending == MOUSE_RIGHT)
|| (button == MOUSE_RIGHT
&& s_button_pending == MOUSE_LEFT)))
{
repeated_click = ((int)(currentTime - s_prevTime) < p_mouset);
/*
* Holding down the left and right buttons simulates pushing the middle
* button.
* Hmm, gui.c will ignore more than one button down at a time, so
* pretend we let go of it first.
*/
if (repeated_click
&& ((button == MOUSE_LEFT && s_button_pending == MOUSE_RIGHT)
|| (button == MOUSE_RIGHT
&& s_button_pending == MOUSE_LEFT)))
{
/*
* Hmm, gui.c will ignore more than one button down at a time, so
* pretend we let go of it first.
*/
gui_send_mouse_event(MOUSE_RELEASE, x, y, FALSE, 0x0);
button = MOUSE_MIDDLE;
repeated_click = FALSE;
s_button_pending = -1;
_OnMouseEvent(button, x, y, repeated_click, keyFlags);
}
else if ((repeated_click)
|| (mouse_model_popup() && (button == MOUSE_RIGHT)))
{
if (s_button_pending > -1)
{
_OnMouseEvent(s_button_pending, x, y, FALSE, keyFlags);
s_button_pending = -1;
}
// TRACE("Button down at x %d, y %d\n", x, y);
_OnMouseEvent(button, x, y, repeated_click, keyFlags);
}
else
{
/*
* If this is the first press (i.e. not a multiple click) don't
* action immediately, but store and wait for:
* i) button-up
* ii) mouse move
* iii) another button press
* before using it.
* This enables us to make left+right simulate middle button,
* without left or right being actioned first. The side-effect is
* that if you click and hold the mouse without dragging, the
* cursor doesn't move until you release the button. In practice
* this is hardly a problem.
*/
s_button_pending = button;
s_x_pending = x;
s_y_pending = y;
s_kFlags_pending = keyFlags;
}
s_prevTime = currentTime;
gui_send_mouse_event(MOUSE_RELEASE, x, y, FALSE, 0x0);
button = MOUSE_MIDDLE;
repeated_click = FALSE;
s_button_pending = -1;
_OnMouseEvent(button, x, y, repeated_click, keyFlags);
}
else if ((repeated_click)
|| (mouse_model_popup() && (button == MOUSE_RIGHT)))
{
if (s_button_pending > -1)
{
_OnMouseEvent(s_button_pending, x, y, FALSE, keyFlags);
s_button_pending = -1;
}
// TRACE("Button down at x %d, y %d\n", x, y);
_OnMouseEvent(button, x, y, repeated_click, keyFlags);
}
else
{
/*
* If this is the first press (i.e. not a multiple click) don't
* action immediately, but store and wait for:
* i) button-up
* ii) mouse move
* iii) another button press
* before using it.
* This enables us to make left+right simulate middle button,
* without left or right being actioned first. The side-effect is
* that if you click and hold the mouse without dragging, the
* cursor doesn't move until you release the button. In practice
* this is hardly a problem.
*/
s_button_pending = button;
s_x_pending = x;
s_y_pending = y;
s_kFlags_pending = keyFlags;
}
s_prevTime = currentTime;
}
static void
@ -1233,23 +1234,23 @@ _OnFindRepl(void)
flags = FRD_REPLACEALL;
}
if (flags != 0)
{
char_u *p, *q;
if (flags == 0)
return;
// Call the generic GUI function to do the actual work.
if (s_findrep_struct.Flags & FR_WHOLEWORD)
flags |= FRD_WHOLE_WORD;
if (s_findrep_struct.Flags & FR_MATCHCASE)
flags |= FRD_MATCH_CASE;
down = (s_findrep_struct.Flags & FR_DOWN) != 0;
p = utf16_to_enc(s_findrep_struct.lpstrFindWhat, NULL);
q = utf16_to_enc(s_findrep_struct.lpstrReplaceWith, NULL);
if (p != NULL && q != NULL)
gui_do_findrepl(flags, p, q, down);
vim_free(p);
vim_free(q);
}
char_u *p, *q;
// Call the generic GUI function to do the actual work.
if (s_findrep_struct.Flags & FR_WHOLEWORD)
flags |= FRD_WHOLE_WORD;
if (s_findrep_struct.Flags & FR_MATCHCASE)
flags |= FRD_MATCH_CASE;
down = (s_findrep_struct.Flags & FR_DOWN) != 0;
p = utf16_to_enc(s_findrep_struct.lpstrFindWhat, NULL);
q = utf16_to_enc(s_findrep_struct.lpstrReplaceWith, NULL);
if (p != NULL && q != NULL)
gui_do_findrepl(flags, p, q, down);
vim_free(p);
vim_free(q);
}
#endif
@ -2932,11 +2933,11 @@ gui_mch_replace_dialog(exarg_T *eap)
void
gui_mch_mousehide(int hide)
{
if (hide != gui.pointer_hidden)
{
ShowCursor(!hide);
gui.pointer_hidden = hide;
}
if (hide == gui.pointer_hidden)
return;
ShowCursor(!hide);
gui.pointer_hidden = hide;
}
#ifdef FEAT_MENU
@ -2993,33 +2994,33 @@ _OnDestroy(HWND hwnd)
_OnPaint(
HWND hwnd)
{
if (!IsMinimized(hwnd))
if (IsMinimized(hwnd))
return;
PAINTSTRUCT ps;
out_flush(); // make sure all output has been processed
(void)BeginPaint(hwnd, &ps);
// prevent multi-byte characters from misprinting on an invalid
// rectangle
if (has_mbyte)
{
PAINTSTRUCT ps;
RECT rect;
out_flush(); // make sure all output has been processed
(void)BeginPaint(hwnd, &ps);
// prevent multi-byte characters from misprinting on an invalid
// rectangle
if (has_mbyte)
{
RECT rect;
GetClientRect(hwnd, &rect);
ps.rcPaint.left = rect.left;
ps.rcPaint.right = rect.right;
}
if (!IsRectEmpty(&ps.rcPaint))
{
gui_redraw(ps.rcPaint.left, ps.rcPaint.top,
ps.rcPaint.right - ps.rcPaint.left + 1,
ps.rcPaint.bottom - ps.rcPaint.top + 1);
}
EndPaint(hwnd, &ps);
GetClientRect(hwnd, &rect);
ps.rcPaint.left = rect.left;
ps.rcPaint.right = rect.right;
}
if (!IsRectEmpty(&ps.rcPaint))
{
gui_redraw(ps.rcPaint.left, ps.rcPaint.top,
ps.rcPaint.right - ps.rcPaint.left + 1,
ps.rcPaint.bottom - ps.rcPaint.top + 1);
}
EndPaint(hwnd, &ps);
}
static void
@ -3904,21 +3905,21 @@ _OnDropFiles(
DragFinish(hDrop);
if (fnames != NULL)
{
int kbd_modifiers = get_active_modifiers();
if (fnames == NULL)
return;
if ((kbd_modifiers & MOD_MASK_SHIFT) != 0)
modifiers |= MOUSE_SHIFT;
if ((kbd_modifiers & MOD_MASK_CTRL) != 0)
modifiers |= MOUSE_CTRL;
if ((kbd_modifiers & MOD_MASK_ALT) != 0)
modifiers |= MOUSE_ALT;
int kbd_modifiers = get_active_modifiers();
gui_handle_drop(pt.x, pt.y, modifiers, fnames, cFiles);
if ((kbd_modifiers & MOD_MASK_SHIFT) != 0)
modifiers |= MOUSE_SHIFT;
if ((kbd_modifiers & MOD_MASK_CTRL) != 0)
modifiers |= MOUSE_CTRL;
if ((kbd_modifiers & MOD_MASK_ALT) != 0)
modifiers |= MOUSE_ALT;
s_need_activate = TRUE;
}
gui_handle_drop(pt.x, pt.y, modifiers, fnames, cFiles);
s_need_activate = TRUE;
}
static int
@ -4461,11 +4462,11 @@ show_sizing_tip(int cols, int rows)
static void
destroy_sizing_tip(void)
{
if (hwndTip != NULL)
{
DestroyWindow(hwndTip);
hwndTip = NULL;
}
if (hwndTip == NULL)
return;
DestroyWindow(hwndTip);
hwndTip = NULL;
}
static int
@ -5844,64 +5845,64 @@ im_set_active(int active)
}
# endif
if (pImmGetContext) // if NULL imm32.dll wasn't loaded (yet)
if (!pImmGetContext) // if NULL imm32.dll wasn't loaded (yet)
return;
if (p_imdisable)
{
if (p_imdisable)
if (hImcOld == (HIMC)0)
{
if (hImcOld == (HIMC)0)
{
hImcOld = pImmGetContext(s_hwnd);
if (hImcOld)
pImmAssociateContext(s_hwnd, (HIMC)0);
}
active = FALSE;
hImcOld = pImmGetContext(s_hwnd);
if (hImcOld)
pImmAssociateContext(s_hwnd, (HIMC)0);
}
else if (hImcOld != (HIMC)0)
active = FALSE;
}
else if (hImcOld != (HIMC)0)
{
pImmAssociateContext(s_hwnd, hImcOld);
hImcOld = (HIMC)0;
}
hImc = pImmGetContext(s_hwnd);
if (!hImc)
return;
/*
* for Korean ime
*/
HKL hKL = GetKeyboardLayout(0);
if (LOWORD(hKL) == MAKELANGID(LANG_KOREAN, SUBLANG_KOREAN))
{
static DWORD dwConversionSaved = 0, dwSentenceSaved = 0;
static BOOL bSaved = FALSE;
if (active)
{
pImmAssociateContext(s_hwnd, hImcOld);
hImcOld = (HIMC)0;
// if we have a saved conversion status, restore it
if (bSaved)
pImmSetConversionStatus(hImc, dwConversionSaved,
dwSentenceSaved);
bSaved = FALSE;
}
hImc = pImmGetContext(s_hwnd);
if (hImc)
else
{
/*
* for Korean ime
*/
HKL hKL = GetKeyboardLayout(0);
if (LOWORD(hKL) == MAKELANGID(LANG_KOREAN, SUBLANG_KOREAN))
// save conversion status and disable korean
if (pImmGetConversionStatus(hImc, &dwConversionSaved,
&dwSentenceSaved))
{
static DWORD dwConversionSaved = 0, dwSentenceSaved = 0;
static BOOL bSaved = FALSE;
if (active)
{
// if we have a saved conversion status, restore it
if (bSaved)
pImmSetConversionStatus(hImc, dwConversionSaved,
dwSentenceSaved);
bSaved = FALSE;
}
else
{
// save conversion status and disable korean
if (pImmGetConversionStatus(hImc, &dwConversionSaved,
&dwSentenceSaved))
{
bSaved = TRUE;
pImmSetConversionStatus(hImc,
dwConversionSaved & ~(IME_CMODE_NATIVE
| IME_CMODE_FULLSHAPE),
dwSentenceSaved);
}
}
bSaved = TRUE;
pImmSetConversionStatus(hImc,
dwConversionSaved & ~(IME_CMODE_NATIVE
| IME_CMODE_FULLSHAPE),
dwSentenceSaved);
}
pImmSetOpenStatus(hImc, active);
pImmReleaseContext(s_hwnd, hImc);
}
}
pImmSetOpenStatus(hImc, active);
pImmReleaseContext(s_hwnd, hImc);
}
/*
@ -6459,28 +6460,28 @@ gui_make_popup(char_u *path_name, int mouse_pos)
{
vimmenu_T *menu = gui_find_menu(path_name);
if (menu != NULL)
if (menu == NULL)
return;
POINT p;
// Find the position of the current cursor
GetDCOrgEx(s_hdc, &p);
if (mouse_pos)
{
POINT p;
int mx, my;
// Find the position of the current cursor
GetDCOrgEx(s_hdc, &p);
if (mouse_pos)
{
int mx, my;
gui_mch_getmouse(&mx, &my);
p.x += mx;
p.y += my;
}
else if (curwin != NULL)
{
p.x += TEXT_X(curwin->w_wincol + curwin->w_wcol + 1);
p.y += TEXT_Y(W_WINROW(curwin) + curwin->w_wrow + 1);
}
msg_scroll = FALSE;
gui_mch_show_popupmenu_at(menu, (int)p.x, (int)p.y);
gui_mch_getmouse(&mx, &my);
p.x += mx;
p.y += my;
}
else if (curwin != NULL)
{
p.x += TEXT_X(curwin->w_wincol + curwin->w_wcol + 1);
p.y += TEXT_Y(W_WINROW(curwin) + curwin->w_wrow + 1);
}
msg_scroll = FALSE;
gui_mch_show_popupmenu_at(menu, (int)p.x, (int)p.y);
}
# if defined(FEAT_TEAROFF) || defined(PROTO)
@ -8274,25 +8275,27 @@ gui_mch_drawsign(int row, int col, int typenr)
static void
close_signicon_image(signicon_t *sign)
{
if (sign)
switch (sign->uType)
{
case IMAGE_BITMAP:
DeleteObject((HGDIOBJ)sign->hImage);
break;
case IMAGE_CURSOR:
DestroyCursor((HCURSOR)sign->hImage);
break;
case IMAGE_ICON:
DestroyIcon((HICON)sign->hImage);
break;
if (sign == NULL)
return;
switch (sign->uType)
{
case IMAGE_BITMAP:
DeleteObject((HGDIOBJ)sign->hImage);
break;
case IMAGE_CURSOR:
DestroyCursor((HCURSOR)sign->hImage);
break;
case IMAGE_ICON:
DestroyIcon((HICON)sign->hImage);
break;
# ifdef FEAT_XPM_W32
case IMAGE_XPM:
DeleteObject((HBITMAP)sign->hImage);
DeleteObject((HBITMAP)sign->hShape);
break;
case IMAGE_XPM:
DeleteObject((HBITMAP)sign->hImage);
DeleteObject((HBITMAP)sign->hShape);
break;
# endif
}
}
}
void *
@ -8347,11 +8350,11 @@ gui_mch_register_sign(char_u *signfile)
void
gui_mch_destroy_sign(void *sign)
{
if (sign)
{
close_signicon_image((signicon_t *)sign);
vim_free(sign);
}
if (sign == NULL)
return;
close_signicon_image((signicon_t *)sign);
vim_free(sign);
}
#endif
@ -8561,10 +8564,11 @@ Handle_WM_Notify(HWND hwnd UNUSED, LPNMHDR pnmh)
if (pnmh->idFrom != ID_BEVAL_TOOLTIP) // it is not our tooltip
return;
if (cur_beval != NULL)
if (cur_beval == NULL)
return;
switch (pnmh->code)
{
switch (pnmh->code)
{
case TTN_SHOW:
break;
case TTN_POP: // Before tooltip disappear
@ -8589,7 +8593,6 @@ Handle_WM_Notify(HWND hwnd UNUSED, LPNMHDR pnmh)
info->uFlags |= TTF_DI_SETITEM;
}
break;
}
}
}

View File

@ -2194,11 +2194,11 @@ gui_mch_get_rgb_color(int r, int g, int b)
void
gui_mch_set_fg_color(guicolor_T color)
{
if (color != prev_fg_color)
{
XSetForeground(gui.dpy, gui.text_gc, (Pixel)color);
prev_fg_color = color;
}
if (color == prev_fg_color)
return;
XSetForeground(gui.dpy, gui.text_gc, (Pixel)color);
prev_fg_color = color;
}
/*
@ -2207,11 +2207,11 @@ gui_mch_set_fg_color(guicolor_T color)
void
gui_mch_set_bg_color(guicolor_T color)
{
if (color != prev_bg_color)
{
XSetBackground(gui.dpy, gui.text_gc, (Pixel)color);
prev_bg_color = color;
}
if (color == prev_bg_color)
return;
XSetBackground(gui.dpy, gui.text_gc, (Pixel)color);
prev_bg_color = color;
}
/*
@ -2814,18 +2814,18 @@ clip_mch_set_selection(
void
gui_mch_menu_grey(vimmenu_T *menu, int grey)
{
if (menu->id != (Widget)0)
{
gui_mch_menu_hidden(menu, False);
if (grey
if (menu->id == (Widget)0)
return;
gui_mch_menu_hidden(menu, False);
if (grey
#ifdef FEAT_GUI_MOTIF
|| !menu->sensitive
|| !menu->sensitive
#endif
)
XtSetSensitive(menu->id, False);
else
XtSetSensitive(menu->id, True);
}
)
XtSetSensitive(menu->id, False);
else
XtSetSensitive(menu->id, True);
}
/*
@ -2834,13 +2834,13 @@ gui_mch_menu_grey(vimmenu_T *menu, int grey)
void
gui_mch_menu_hidden(vimmenu_T *menu, int hidden)
{
if (menu->id != (Widget)0)
{
if (hidden)
XtUnmanageChild(menu->id);
else
XtManageChild(menu->id);
}
if (menu->id == (Widget)0)
return;
if (hidden)
XtUnmanageChild(menu->id);
else
XtManageChild(menu->id);
}
/*
@ -3130,15 +3130,15 @@ gui_mch_drawsign(int row, int col, int typenr)
{
XImage *sign;
if (gui.in_use && (sign = (XImage *)sign_get_image(typenr)) != NULL)
{
XClearArea(gui.dpy, gui.wid, TEXT_X(col), TEXT_Y(row) - sign->height,
SIGN_WIDTH, gui.char_height, FALSE);
XPutImage(gui.dpy, gui.wid, gui.text_gc, sign, 0, 0,
TEXT_X(col) + (SIGN_WIDTH - sign->width) / 2,
TEXT_Y(row) - sign->height,
sign->width, sign->height);
}
if (!gui.in_use || (sign = (XImage *)sign_get_image(typenr)) == NULL)
return;
XClearArea(gui.dpy, gui.wid, TEXT_X(col), TEXT_Y(row) - sign->height,
SIGN_WIDTH, gui.char_height, FALSE);
XPutImage(gui.dpy, gui.wid, gui.text_gc, sign, 0, 0,
TEXT_X(col) + (SIGN_WIDTH - sign->width) / 2,
TEXT_Y(row) - sign->height,
sign->width, sign->height);
}
void *
@ -3202,18 +3202,18 @@ static int last_shape = 0;
gui_mch_mousehide(
int hide) // TRUE = use blank ptr, FALSE = use parent ptr
{
if (gui.pointer_hidden != hide)
{
gui.pointer_hidden = hide;
if (hide)
XDefineCursor(gui.dpy, gui.wid, gui.blank_pointer);
else
if (gui.pointer_hidden == hide)
return;
gui.pointer_hidden = hide;
if (hide)
XDefineCursor(gui.dpy, gui.wid, gui.blank_pointer);
else
#ifdef FEAT_MOUSESHAPE
mch_set_mouse_shape(last_shape);
mch_set_mouse_shape(last_shape);
#else
XUndefineCursor(gui.dpy, gui.wid);
XUndefineCursor(gui.dpy, gui.wid);
#endif
}
}
#if defined(FEAT_MOUSESHAPE) || defined(PROTO)
@ -3280,22 +3280,22 @@ mch_set_mouse_shape(int shape)
void
gui_mch_menu_set_tip(vimmenu_T *menu)
{
if (menu->id != NULL && menu->parent != NULL
&& menu_is_toolbar(menu->parent->name))
if (menu->id == NULL || menu->parent == NULL
|| !menu_is_toolbar(menu->parent->name))
return;
// Always destroy and create the balloon, in case the string was
// changed.
if (menu->tip != NULL)
{
// Always destroy and create the balloon, in case the string was
// changed.
if (menu->tip != NULL)
{
gui_mch_destroy_beval_area(menu->tip);
menu->tip = NULL;
}
if (menu->strings[MENU_INDEX_TIP] != NULL)
menu->tip = gui_mch_create_beval_area(
menu->id,
menu->strings[MENU_INDEX_TIP],
NULL,
NULL);
gui_mch_destroy_beval_area(menu->tip);
menu->tip = NULL;
}
if (menu->strings[MENU_INDEX_TIP] != NULL)
menu->tip = gui_mch_create_beval_area(
menu->id,
menu->strings[MENU_INDEX_TIP],
NULL,
NULL);
}
#endif

View File

@ -199,32 +199,32 @@ im_set_active(int active)
void
xim_set_focus(int focus)
{
if (xic != NULL)
{
if (focus)
gtk_im_context_focus_in(xic);
else
gtk_im_context_focus_out(xic);
}
if (xic == NULL)
return;
if (focus)
gtk_im_context_focus_in(xic);
else
gtk_im_context_focus_out(xic);
}
void
im_set_position(int row, int col)
{
if (xic != NULL)
{
GdkRectangle area;
if (xic == NULL)
return;
area.x = FILL_X(col);
area.y = FILL_Y(row);
area.width = gui.char_width * (mb_lefthalve(row, col) ? 2 : 1);
area.height = gui.char_height;
GdkRectangle area;
gtk_im_context_set_cursor_location(xic, &area);
area.x = FILL_X(col);
area.y = FILL_Y(row);
area.width = gui.char_width * (mb_lefthalve(row, col) ? 2 : 1);
area.height = gui.char_height;
if (p_imst == IM_OVER_THE_SPOT)
im_preedit_window_set_position();
}
gtk_im_context_set_cursor_location(xic, &area);
if (p_imst == IM_OVER_THE_SPOT)
im_preedit_window_set_position();
}
# if 0 || defined(PROTO) // apparently only used in gui_x11.c

View File

@ -695,6 +695,8 @@ static char *(features[]) =
static int included_patches[] =
{ /* Add new patch number below this line */
/**/
1158,
/**/
1157,
/**/