| To: vim-dev@vim.org |
| Subject: patch 7.1.091 (extra) |
| Fcc: outbox |
| From: Bram Moolenaar <Bram@moolenaar.net> |
| Mime-Version: 1.0 |
| Content-Type: text/plain; charset=ISO-8859-1 |
| Content-Transfer-Encoding: 8bit |
| |
| |
| Patch 7.1.091 (extra) |
| Problem: Win32: Can't embed Vim inside another application. |
| Solution: Add the --windowid argument. (Nageshwar) |
| Files: runtime/doc/gui_w32.txt, runtime/doc/starting.txt, |
| runtime/doc/vi_diff.txt, src/globals.h, src/gui_w32.c, src/main.c |
| |
| |
| |
| |
| |
| *** 1,4 **** |
| ! *gui_w32.txt* For Vim version 7.1. Last change: 2007 May 03 |
| |
| |
| VIM REFERENCE MANUAL by Bram Moolenaar |
| --- 1,4 ---- |
| ! *gui_w32.txt* For Vim version 7.1. Last change: 2007 Aug 14 |
| |
| |
| VIM REFERENCE MANUAL by Bram Moolenaar |
| |
| *** 52,57 **** |
| --- 52,67 ---- |
| *gui-w32s* |
| There is a specific version of gvim.exe that runs under the Win32s subsystem |
| of Windows 3.1 or 3.11. See |win32s|. |
| + |
| + |
| + Using Vim as a plugin *gui-w32-windowid* |
| + |
| + When gvim starts up normally, it creates its own top level window. If you |
| + pass Vim the command-line option |--windowid| with a decimal or hexadecimal |
| + value, Vim will create a window that is a child of the window with the given |
| + ID. This enables Vim to act as a plugin in another application. This really |
| + is a programmer's interface, and is of no use without a supporting application |
| + to spawn Vim correctly. |
| |
| |
| 2. Vim as default editor *vim-default-editor* |
| |
| |
| |
| *** 1,4 **** |
| ! *starting.txt* For Vim version 7.1. Last change: 2007 May 12 |
| |
| |
| VIM REFERENCE MANUAL by Bram Moolenaar |
| --- 1,4 ---- |
| ! *starting.txt* For Vim version 7.1. Last change: 2007 Aug 14 |
| |
| |
| VIM REFERENCE MANUAL by Bram Moolenaar |
| |
| *** 547,552 **** |
| --- 547,557 ---- |
| GTK+ GUI Vim only. Make gvim try to use GtkPlug mechanism, so |
| that it runs inside another window. See |gui-gtk-socketid| |
| for details. {not in Vi} |
| + |
| + --windowid {id} *--windowid* |
| + Win32 GUI Vim only. Make gvim try to use the window {id} as a |
| + parent, so that it runs inside that window. See |
| + |gui-w32-windowid| for details. {not in Vi} |
| |
| --echo-wid *--echo-wid* |
| GTK+ GUI Vim only. Make gvim echo the Window ID on stdout, |
| |
| |
| |
| *** 1,4 **** |
| ! *vi_diff.txt* For Vim version 7.1. Last change: 2007 May 07 |
| |
| |
| VIM REFERENCE MANUAL by Bram Moolenaar |
| --- 1,4 ---- |
| ! *vi_diff.txt* For Vim version 7.1. Last change: 2007 Aug 14 |
| |
| |
| VIM REFERENCE MANUAL by Bram Moolenaar |
| |
| *** 826,831 **** |
| --- 826,833 ---- |
| --servername {name} Vim: Specify Vim server name |
| |
| --socketid {id} Vim: GTK window socket to run Vim in |
| + |
| + --windowid {id} Vim: Win32 window ID to run Vim in |
| |
| --version Vim: show version message and exit. |
| |
| |
| |
| |
| *** 876,882 **** |
| 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 */ |
| EXTERN int no_u_sync INIT(= 0); /* Don't call u_sync() */ |
| |
| EXTERN int restart_edit INIT(= 0); /* call edit when next cmd finished */ |
| --- 876,882 ---- |
| 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 */ |
| EXTERN int no_u_sync INIT(= 0); /* Don't call u_sync() */ |
| |
| EXTERN int restart_edit INIT(= 0); /* call edit when next cmd finished */ |
| |
| *** 1250,1255 **** |
| --- 1250,1263 ---- |
| #ifdef FEAT_GUI_GTK |
| EXTERN guint32 gtk_socket_id INIT(= 0); |
| 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) |
| |
| |
| |
| *** 23,28 **** |
| --- 23,30 ---- |
| * e.g., replace LONG with LONG_PTR, etc. |
| */ |
| |
| + #include "vim.h" |
| + |
| /* |
| * These are new in Windows ME/XP, only defined in recent compilers. |
| */ |
| |
| *** 1432,1447 **** |
| } |
| } |
| else |
| ! /* Open toplevel window. */ |
| 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); |
| |
| if (s_hwnd == NULL) |
| return FAIL; |
| --- 1434,1462 ---- |
| } |
| } |
| else |
| ! { |
| ! /* 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", |
| ! 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; |
| |
| |
| |
| *** 275,280 **** |
| --- 275,281 ---- |
| * -display or --display |
| * --server... |
| * --socketid |
| + * --windowid |
| */ |
| early_arg_scan(¶ms); |
| |
| |
| *** 1489,1495 **** |
| * 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 |
| */ |
| /*ARGSUSED*/ |
| static void |
| --- 1490,1496 ---- |
| * 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 and --windowid |
| */ |
| /*ARGSUSED*/ |
| static void |
| |
| *** 1536,1559 **** |
| # endif |
| } |
| # endif |
| ! # ifdef FEAT_GUI_GTK |
| else if (STRICMP(argv[i], "--socketid") == 0) |
| { |
| ! unsigned int socket_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); |
| else |
| ! count = sscanf(argv[i+1], "%u", &socket_id); |
| if (count != 1) |
| mainerr(ME_INVALID_ARG, (char_u *)argv[i]); |
| else |
| ! gtk_socket_id = socket_id; |
| i++; |
| } |
| else if (STRICMP(argv[i], "--echo-wid") == 0) |
| echo_wid_arg = TRUE; |
| # endif |
| --- 1537,1571 ---- |
| # endif |
| } |
| # endif |
| ! |
| ! # 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 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", &id); |
| else |
| ! count = sscanf(argv[i+1], "%u", &id); |
| if (count != 1) |
| mainerr(ME_INVALID_ARG, (char_u *)argv[i]); |
| else |
| ! # 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,1690 **** |
| } |
| } |
| #endif |
| ! #ifdef FEAT_GUI_GTK |
| else if (STRNICMP(argv[0] + argv_idx, "socketid", 8) == 0) |
| { |
| /* already processed -- snatch the following arg */ |
| if (argc > 1) |
| --- 1695,1706 ---- |
| } |
| } |
| #endif |
| ! #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,1698 **** |
| --- 1709,1716 ---- |
| ++argv; |
| } |
| } |
| + #endif |
| + #ifdef FEAT_GUI_GTK |
| else if (STRNICMP(argv[0] + argv_idx, "echo-wid", 8) == 0) |
| { |
| /* already processed, skip */ |
| |
| *** 3120,3125 **** |
| --- 3138,3144 ---- |
| #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 |
| |
| |
| |
| *** 668,669 **** |
| --- 668,671 ---- |
| { /* Add new patch number below this line */ |
| + /**/ |
| + 91, |
| /**/ |
| |
| -- |
| We're knights of the Round Table |
| Our shows are formidable |
| But many times |
| We're given rhymes |
| That are quite unsingable |
| We're opera mad in Camelot |
| We sing from the diaphragm a lot. |
| "Monty Python and the Holy Grail" PYTHON (MONTY) PICTURES LTD |
| |
| /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\ |
| /// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\ |
| \\\ download, build and distribute -- http://www.A-A-P.org /// |
| \\\ help me help AIDS victims -- http://ICCF-Holland.org /// |