Skip to content

Commit

Permalink
Merged from the latest developing branch.
Browse files Browse the repository at this point in the history
git-svn-id: https://vim.svn.sourceforge.net/svnroot/vim/trunk@1547 2a77ed30-b011-0410-a7ad-c7884a0aa172
  • Loading branch information
edyfox committed Jul 2, 2009
1 parent bc7e564 commit dcd3322
Show file tree
Hide file tree
Showing 9 changed files with 107 additions and 33 deletions.
5 changes: 5 additions & 0 deletions src/ex_docmd.c
Expand Up @@ -8686,6 +8686,8 @@ ex_mkrc(eap)
}

#ifdef FEAT_SESSION
/* Use the short file name until ":lcd" is used. We also don't use the
* short file name when 'acd' is set, that is checked later. */
did_lcd = FALSE;

/* ":mkview" or ":mkview 9": generate file name with 'viewdir' */
Expand Down Expand Up @@ -10573,6 +10575,9 @@ ses_fname(fd, buf, flagp)
if (buf->b_sfname != NULL
&& flagp == &ssop_flags
&& (ssop_flags & (SSOP_CURDIR | SSOP_SESDIR))
#ifdef FEAT_AUTOCHDIR
&& !p_acd
#endif
&& !did_lcd)
name = buf->b_sfname;
else
Expand Down
9 changes: 7 additions & 2 deletions src/fileio.c
Expand Up @@ -8441,13 +8441,16 @@ aucmd_prepbuf(aco, buf)
win_init_empty(aucmd_win); /* set cursor and topline to safe values */

#ifdef FEAT_WINDOWS
/* Split the current window, put the aucmd_win in the upper half. */
/* Split the current window, put the aucmd_win in the upper half.
* We don't want the BufEnter or WinEnter autocommands. */
block_autocmds();
make_snapshot(SNAP_AUCMD_IDX);
save_ea = p_ea;
p_ea = FALSE;
(void)win_split_ins(0, WSP_TOP, aucmd_win, 0);
(void)win_comp_pos(); /* recompute window positions */
p_ea = save_ea;
unblock_autocmds();
#endif
curwin = aucmd_win;
}
Expand All @@ -8474,7 +8477,8 @@ aucmd_restbuf(aco)
--curbuf->b_nwindows;
#ifdef FEAT_WINDOWS
/* Find "aucmd_win", it can't be closed, but it may be in another tab
* page. */
* page. Do not trigger autocommands here. */
block_autocmds();
if (curwin != aucmd_win)
{
tabpage_T *tp;
Expand All @@ -8498,6 +8502,7 @@ aucmd_restbuf(aco)
last_status(FALSE); /* may need to remove last status line */
restore_snapshot(SNAP_AUCMD_IDX, FALSE);
(void)win_comp_pos(); /* recompute window positions */
unblock_autocmds();

if (win_valid(aco->save_curwin))
curwin = aco->save_curwin;
Expand Down
19 changes: 1 addition & 18 deletions src/gui_gtk_x11.c
Expand Up @@ -6717,8 +6717,6 @@ clip_mch_request_selection(VimClipboard *cbd)
{
GdkAtom target;
unsigned i;
int nbytes;
char_u *buffer;
time_t start;

for (i = 0; i < N_SELECTION_TARGETS; ++i)
Expand Down Expand Up @@ -6746,22 +6744,7 @@ clip_mch_request_selection(VimClipboard *cbd)
}

/* Final fallback position - use the X CUT_BUFFER0 store */
nbytes = 0;
buffer = (char_u *)XFetchBuffer(GDK_WINDOW_XDISPLAY(gui.mainwin->window),
&nbytes, 0);
if (nbytes > 0)
{
/* Got something */
clip_yank_selection(MCHAR, buffer, (long)nbytes, cbd);
if (p_verbose > 0)
{
verbose_enter();
smsg((char_u *)_("Used CUT_BUFFER0 instead of empty selection"));
verbose_leave();
}
}
if (buffer != NULL)
XFree(buffer);
yank_cut_buffer0(GDK_WINDOW_XDISPLAY(gui.mainwin->window), cbd);
}

/*
Expand Down
7 changes: 6 additions & 1 deletion src/gui_photon.c
Expand Up @@ -838,7 +838,12 @@ gui_ph_handle_window_open(
static void
gui_ph_draw_start( void )
{
PhGC_t *gc;

gc = PgGetGC();
PgSetRegion( PtWidgetRid( PtFindDisjoint( gui.vimTextArea ) ) );
PgClearClippingsCx( gc );
PgClearTranslationCx( gc );

PtWidgetOffset( gui.vimTextArea, &gui_ph_raw_offset );
PhTranslatePoint( &gui_ph_raw_offset, PtWidgetPos( gui.vimTextArea, NULL ) );
Expand Down Expand Up @@ -2970,7 +2975,7 @@ gui_mch_init_font(char_u *vim_font_name, int fontset)
if( vim_font_name == NULL )
{
/* Default font */
vim_font_name = "PC Term";
vim_font_name = "PC Terminal";
}

if( STRCMP( vim_font_name, "*" ) == 0 )
Expand Down
2 changes: 1 addition & 1 deletion src/message.c
Expand Up @@ -107,7 +107,7 @@ msg(s)
}

#if defined(FEAT_EVAL) || defined(FEAT_X11) || defined(USE_XSMP) \
|| defined(PROTO)
|| defined(FEAT_GUI_GTK) || defined(PROTO)
/*
* Like msg() but keep it silent when 'verbosefile' is set.
*/
Expand Down
23 changes: 23 additions & 0 deletions src/ops.c
Expand Up @@ -5591,6 +5591,29 @@ x11_export_final_selection()
if (dpy != NULL && str != NULL && motion_type >= 0
&& len < 1024*1024 && len > 0)
{
#ifdef FEAT_MBYTE
/* The CUT_BUFFER0 is supposed to always contain latin1. Convert from
* 'enc' when it is a multi-byte encoding. When 'enc' is an 8-bit
* encoding conversion usually doesn't work, so keep the text as-is.
*/
if (has_mbyte)
{
char_u *conv_str = str;
vimconv_T vc;

vc.vc_type = CONV_NONE;
if (convert_setup(&vc, p_enc, (char_u *)"latin1") == OK)
{
conv_str = string_convert(&vc, str, (int*)&len);
if (conv_str != NULL)
{
vim_free(str);
str = conv_str;
}
convert_setup(&vc, NULL, NULL);
}
}
#endif
XStoreBuffer(dpy, (char *)str, (int)len, 0);
XFlush(dpy);
}
Expand Down
1 change: 1 addition & 0 deletions src/proto/ui.pro
Expand Up @@ -48,6 +48,7 @@ int check_row __ARGS((int row));
void open_app_context __ARGS((void));
void x11_setup_atoms __ARGS((Display *dpy));
void clip_x11_request_selection __ARGS((Widget myShell, Display *dpy, VimClipboard *cbd));
void yank_cut_buffer0 __ARGS((Display *dpy, VimClipboard *cbd));
void clip_x11_lose_selection __ARGS((Widget myShell, VimClipboard *cbd));
int clip_x11_own_selection __ARGS((Widget myShell, VimClipboard *cbd));
void clip_x11_set_selection __ARGS((VimClipboard *cbd));
Expand Down
66 changes: 55 additions & 11 deletions src/ui.c
Expand Up @@ -2104,8 +2104,6 @@ clip_x11_request_selection(myShell, dpy, cbd)
Atom type;
static int success;
int i;
int nbytes = 0;
char_u *buffer;
time_t start_time;
int timed_out = FALSE;

Expand Down Expand Up @@ -2185,15 +2183,7 @@ clip_x11_request_selection(myShell, dpy, cbd)
}

/* Final fallback position - use the X CUT_BUFFER0 store */
buffer = (char_u *)XFetchBuffer(dpy, &nbytes, 0);
if (nbytes > 0)
{
/* Got something */
clip_yank_selection(MCHAR, buffer, (long)nbytes, cbd);
XFree((void *)buffer);
if (p_verbose > 0)
verb_msg((char_u *)_("Used CUT_BUFFER0 instead of empty selection"));
}
yank_cut_buffer0(dpy, cbd);
}

static Boolean clip_x11_convert_selection_cb __ARGS((Widget, Atom *, Atom *, Atom *, XtPointer *, long_u *, int *));
Expand Down Expand Up @@ -2369,6 +2359,60 @@ clip_x11_set_selection(cbd)
}
#endif

#if defined(FEAT_XCLIPBOARD) || defined(FEAT_GUI_X11) \
|| defined(FEAT_GUI_GTK) || defined(PROTO)
/*
* Get the contents of the X CUT_BUFFER0 and put it in "cbd".
*/
void
yank_cut_buffer0(dpy, cbd)
Display *dpy;
VimClipboard *cbd;
{
int nbytes = 0;
char_u *buffer = (char_u *)XFetchBuffer(dpy, &nbytes, 0);

if (nbytes > 0)
{
#ifdef FEAT_MBYTE
int done = FALSE;

/* CUT_BUFFER0 is supposed to be always latin1. Convert to 'enc' when
* using a multi-byte encoding. Conversion between two 8-bit
* character sets usually fails and the text might actually be in
* 'enc' anyway. */
if (has_mbyte)
{
char_u *conv_buf = buffer;
vimconv_T vc;

vc.vc_type = CONV_NONE;
if (convert_setup(&vc, (char_u *)"latin1", p_enc) == OK)
{
conv_buf = string_convert(&vc, buffer, &nbytes);
if (conv_buf != NULL)
{
clip_yank_selection(MCHAR, conv_buf, (long)nbytes, cbd);
vim_free(conv_buf);
done = TRUE;
}
convert_setup(&vc, NULL, NULL);
}
}
if (!done) /* use the text without conversion */
#endif
clip_yank_selection(MCHAR, buffer, (long)nbytes, cbd);
XFree((void *)buffer);
if (p_verbose > 0)
{
verbose_enter();
verb_msg((char_u *)_("Used CUT_BUFFER0 instead of empty selection"));
verbose_leave();
}
}
}
#endif

#if defined(FEAT_MOUSE) || defined(PROTO)

/*
Expand Down
8 changes: 8 additions & 0 deletions src/version.c
Expand Up @@ -676,6 +676,14 @@ static char *(features[]) =

static int included_patches[] =
{ /* Add new patch number below this line */
/**/
222,
/**/
221,
/**/
220,
/**/
219,
/**/
218,
/**/
Expand Down

0 comments on commit dcd3322

Please sign in to comment.