Blob Blame History Raw
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


*** ../vim-7.1.090/runtime/doc/gui_w32.txt	Sat May 12 15:35:53 2007
--- runtime/doc/gui_w32.txt	Tue Aug 14 17:32:27 2007
***************
*** 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*
*** ../vim-7.1.090/runtime/doc/starting.txt	Sat May 12 16:56:17 2007
--- runtime/doc/starting.txt	Tue Aug 14 17:34:22 2007
***************
*** 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,
*** ../vim-7.1.090/runtime/doc/vi_diff.txt	Sat May 12 14:54:28 2007
--- runtime/doc/vi_diff.txt	Tue Aug 14 17:35:10 2007
***************
*** 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.
  
*** ../vim-7.1.090/src/globals.h	Thu May 10 19:26:02 2007
--- src/globals.h	Wed Aug 29 22:27:45 2007
***************
*** 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)
*** ../vim-7.1.090/src/gui_w32.c	Tue Aug 14 16:57:04 2007
--- src/gui_w32.c	Tue Aug 14 17:13:41 2007
***************
*** 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;
*** ../vim-7.1.090/src/main.c	Fri Aug 10 21:32:41 2007
--- src/main.c	Tue Aug 14 17:22:52 2007
***************
*** 275,280 ****
--- 275,281 ----
       *   -display or --display
       *   --server...
       *   --socketid
+      *   --windowid
       */
      early_arg_scan(&params);
  
***************
*** 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
*** ../vim-7.1.090/src/version.c	Thu Aug 30 11:46:46 2007
--- src/version.c	Thu Aug 30 12:21:02 2007
***************
*** 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    ///