0
0
mirror of https://github.com/vim/vim.git synced 2025-09-23 03:43:49 -04:00

updated for version 7.1-095

This commit is contained in:
Bram Moolenaar
2007-09-05 19:47:23 +00:00
parent 102e3a6164
commit 9c8791fde0
6 changed files with 54 additions and 15 deletions

View File

@@ -9912,18 +9912,24 @@ f_getchar(argvars, rettv)
++no_mapping;
++allow_keys;
if (argvars[0].v_type == VAR_UNKNOWN)
/* getchar(): blocking wait. */
n = safe_vgetc();
else if (get_tv_number_chk(&argvars[0], &error) == 1)
/* getchar(1): only check if char avail */
n = vpeekc();
else if (error || vpeekc() == NUL)
/* illegal argument or getchar(0) and no char avail: return zero */
n = 0;
else
/* getchar(0) and char avail: return char */
n = safe_vgetc();
for (;;)
{
if (argvars[0].v_type == VAR_UNKNOWN)
/* getchar(): blocking wait. */
n = safe_vgetc();
else if (get_tv_number_chk(&argvars[0], &error) == 1)
/* getchar(1): only check if char avail */
n = vpeekc();
else if (error || vpeekc() == NUL)
/* illegal argument or getchar(0) and no char avail: return zero */
n = 0;
else
/* getchar(0) and char avail: return char */
n = safe_vgetc();
if (n == K_IGNORE)
continue;
break;
}
--no_mapping;
--allow_keys;

View File

@@ -1596,8 +1596,15 @@ vgetc()
continue;
}
#endif
#ifdef FEAT_GUI
/* The caller doesn't need to know that the focus event is delayed
* until getting a character. */
if (c == K_FOCUSGAINED || c == K_FOCUSLOST)
{
ui_focus_change(c == K_FOCUSGAINED);
continue;
}
/* Translate K_CSI to CSI. The special key is only used to avoid
* it being recognized as the start of a special key. */
if (c == K_CSI)

View File

@@ -4519,7 +4519,18 @@ gui_focus_change(in_focus)
xim_set_focus(in_focus);
# endif
ui_focus_change(in_focus);
/* Put events in the input queue only when allowed.
* ui_focus_change() isn't called directly, because it invokes
* autocommands and that must not happen asynchronously. */
if (!hold_gui_events)
{
char_u bytes[3];
bytes[0] = CSI;
bytes[1] = KS_EXTRA;
bytes[2] = in_focus ? (int)KE_FOCUSGAINED : (int)KE_FOCUSLOST;
add_to_input_buf(bytes, 3);
}
#endif
}

View File

@@ -813,10 +813,15 @@ focus_in_event(GtkWidget *widget, GdkEventFocus *event, gpointer data)
if (blink_state == BLINK_NONE)
gui_mch_start_blink();
/* make sure keyboard input goes to the draw area (if this is focus for a window) */
/* make sure keyboard input goes to the draw area (if this is focus for a
* window) */
if (widget != gui.drawarea)
gtk_widget_grab_focus(gui.drawarea);
/* make sure the input buffer is read */
if (gtk_main_level() > 0)
gtk_main_quit();
return TRUE;
}
@@ -829,6 +834,10 @@ focus_out_event(GtkWidget *widget, GdkEventFocus *event, gpointer data)
if (blink_state != BLINK_NONE)
gui_mch_stop_blink();
/* make sure the input buffer is read */
if (gtk_main_level() > 0)
gtk_main_quit();
return TRUE;
}

View File

@@ -254,6 +254,8 @@ enum key_extra
, KE_DROP /* DnD data is available */
, KE_CURSORHOLD /* CursorHold event */
, KE_NOP /* doesn't do something */
, KE_FOCUSGAINED /* focus gained */
, KE_FOCUSLOST /* focus lost */
};
/*
@@ -445,6 +447,8 @@ enum key_extra
#define K_CMDWIN TERMCAP2KEY(KS_EXTRA, KE_CMDWIN)
#define K_DROP TERMCAP2KEY(KS_EXTRA, KE_DROP)
#define K_FOCUSGAINED TERMCAP2KEY(KS_EXTRA, KE_FOCUSGAINED)
#define K_FOCUSLOST TERMCAP2KEY(KS_EXTRA, KE_FOCUSLOST)
#define K_CURSORHOLD TERMCAP2KEY(KS_EXTRA, KE_CURSORHOLD)

View File

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