updated for version 7.1-091
diff --git a/src/globals.h b/src/globals.h
index edd4c79..d6e879a 100644
--- a/src/globals.h
+++ b/src/globals.h
@@ -876,7 +876,7 @@
EXTERN int no_mapping INIT(= FALSE); /* currently no mapping allowed */
EXTERN int no_zero_mapping INIT(= 0); /* mapping zero not allowed */
EXTERN int allow_keys INIT(= FALSE); /* allow key codes when no_mapping
- * is set */
+ * is set */
EXTERN int no_u_sync INIT(= 0); /* Don't call u_sync() */
EXTERN int restart_edit INIT(= 0); /* call edit when next cmd finished */
@@ -1252,6 +1252,14 @@
EXTERN int echo_wid_arg INIT(= FALSE); /* --echo-wid argument */
#endif
+#ifdef FEAT_GUI_W32
+/*
+ * The value of the --windowid argument.
+ * For embedding gvim inside another application.
+ */
+EXTERN int win_socket_id INIT(= 0);
+#endif
+
#if defined(FEAT_CLIENTSERVER) || defined(FEAT_EVAL)
EXTERN int typebuf_was_filled INIT(= FALSE); /* received text from client
or from feedkeys() */
diff --git a/src/gui_w32.c b/src/gui_w32.c
index 092d8d5..bcc1524 100644
--- a/src/gui_w32.c
+++ b/src/gui_w32.c
@@ -23,6 +23,8 @@
* e.g., replace LONG with LONG_PTR, etc.
*/
+#include "vim.h"
+
/*
* These are new in Windows ME/XP, only defined in recent compilers.
*/
@@ -1432,16 +1434,29 @@
}
}
else
- /* Open toplevel window. */
+ {
+ /* If the provided windowid is not valid reset it to zero, so that it
+ * is ignored and we open our own window. */
+ if (IsWindow((HWND)win_socket_id) <= 0)
+ win_socket_id = 0;
+
+ /* Create a window. If win_socket_id is not zero without border and
+ * titlebar, it will be reparented below. */
s_hwnd = CreateWindow(
- szVimWndClass, "Vim MSWindows GUI",
- WS_OVERLAPPEDWINDOW,
- gui_win_x == -1 ? CW_USEDEFAULT : gui_win_x,
- gui_win_y == -1 ? CW_USEDEFAULT : gui_win_y,
- 100, /* Any value will do */
- 100, /* Any value will do */
- NULL, NULL,
- s_hinst, NULL);
+ szVimWndClass, "Vim MSWindows GUI",
+ win_socket_id == 0 ? WS_OVERLAPPEDWINDOW : WS_POPUP,
+ gui_win_x == -1 ? CW_USEDEFAULT : gui_win_x,
+ gui_win_y == -1 ? CW_USEDEFAULT : gui_win_y,
+ 100, /* Any value will do */
+ 100, /* Any value will do */
+ NULL, NULL,
+ s_hinst, NULL);
+ if (s_hwnd != NULL && win_socket_id != 0)
+ {
+ SetParent(s_hwnd, (HWND)win_socket_id);
+ ShowWindow(s_hwnd, SW_SHOWMAXIMIZED);
+ }
+ }
if (s_hwnd == NULL)
return FAIL;
diff --git a/src/main.c b/src/main.c
index 7d553f1..ab5d31b 100644
--- a/src/main.c
+++ b/src/main.c
@@ -275,6 +275,7 @@
* -display or --display
* --server...
* --socketid
+ * --windowid
*/
early_arg_scan(¶ms);
@@ -1489,7 +1490,7 @@
* Get the name of the display, before gui_prepare() removes it from
* argv[]. Used for the xterm-clipboard display.
*
- * Also find the --server... arguments and --socketid
+ * Also find the --server... arguments and --socketid and --windowid
*/
/*ARGSUSED*/
static void
@@ -1536,24 +1537,35 @@
# endif
}
# endif
-# ifdef FEAT_GUI_GTK
+
+# if defined(FEAT_GUI_GTK) || defined(FEAT_GUI_W32)
+# ifdef FEAT_GUI_W32
+ else if (STRICMP(argv[i], "--windowid") == 0)
+# else
else if (STRICMP(argv[i], "--socketid") == 0)
+# endif
{
- unsigned int socket_id;
+ unsigned int id;
int count;
if (i == argc - 1)
mainerr_arg_missing((char_u *)argv[i]);
if (STRNICMP(argv[i+1], "0x", 2) == 0)
- count = sscanf(&(argv[i + 1][2]), "%x", &socket_id);
+ count = sscanf(&(argv[i + 1][2]), "%x", &id);
else
- count = sscanf(argv[i+1], "%u", &socket_id);
+ count = sscanf(argv[i+1], "%u", &id);
if (count != 1)
mainerr(ME_INVALID_ARG, (char_u *)argv[i]);
else
- gtk_socket_id = socket_id;
+# ifdef FEAT_GUI_W32
+ win_socket_id = id;
+# else
+ gtk_socket_id = id;
+# endif
i++;
}
+# endif
+# ifdef FEAT_GUI_GTK
else if (STRICMP(argv[i], "--echo-wid") == 0)
echo_wid_arg = TRUE;
# endif
@@ -1683,8 +1695,12 @@
}
}
#endif
-#ifdef FEAT_GUI_GTK
+#if defined(FEAT_GUI_GTK) || defined(FEAT_GUI_W32)
+# ifdef FEAT_GUI_GTK
else if (STRNICMP(argv[0] + argv_idx, "socketid", 8) == 0)
+# else
+ else if (STRNICMP(argv[0] + argv_idx, "windowid", 8) == 0)
+# endif
{
/* already processed -- snatch the following arg */
if (argc > 1)
@@ -1693,6 +1709,8 @@
++argv;
}
}
+#endif
+#ifdef FEAT_GUI_GTK
else if (STRNICMP(argv[0] + argv_idx, "echo-wid", 8) == 0)
{
/* already processed, skip */
@@ -3120,6 +3138,7 @@
#endif
#ifdef FEAT_GUI_W32
main_msg(_("-P <parent title>\tOpen Vim inside parent application"));
+ main_msg(_("--windowid <HWND>\tOpen Vim inside another win32 widget"));
#endif
#ifdef FEAT_GUI_GNOME
diff --git a/src/version.c b/src/version.c
index cae6b52..c04c5e8 100644
--- a/src/version.c
+++ b/src/version.c
@@ -667,6 +667,8 @@
static int included_patches[] =
{ /* Add new patch number below this line */
/**/
+ 91,
+/**/
90,
/**/
89,