Mercurial > hg > xemacs-beta
diff src/gui-msw.c @ 440:8de8e3f6228a r21-2-28
Import from CVS: tag r21-2-28
author | cvs |
---|---|
date | Mon, 13 Aug 2007 11:33:38 +0200 |
parents | 3ecd8885ac67 |
children | abe6d1db359e |
line wrap: on
line diff
--- a/src/gui-msw.c Mon Aug 13 11:32:27 2007 +0200 +++ b/src/gui-msw.c Mon Aug 13 11:33:38 2007 +0200 @@ -27,6 +27,7 @@ #include "frame.h" #include "elhash.h" #include "console-msw.h" +#include "buffer.h" /* * Return value is Qt if we have dispatched the command, @@ -35,11 +36,14 @@ * command if we return nil */ Lisp_Object -mswindows_handle_gui_wm_command (struct frame* f, HWND ctrl, WORD id) +mswindows_handle_gui_wm_command (struct frame* f, HWND ctrl, DWORD id) { /* Try to map the command id through the proper hash table */ Lisp_Object data, fn, arg, frame; + /* #### make_int should assert that --kkm */ + assert (XINT (make_int (id)) == id); + data = Fgethash (make_int (id), FRAME_MSWINDOWS_WIDGET_HASH_TABLE (f), Qnil); @@ -55,3 +59,53 @@ return Qt; } +DEFUN ("mswindows-shell-execute", Fmswindows_shell_execute, 2, 4, 0, /* +Get Windows to perform OPERATION on DOCUMENT. +This is a wrapper around the ShellExecute system function, which +invokes the application registered to handle OPERATION for DOCUMENT. +OPERATION is typically \"open\", \"print\" or \"explore\" (but can be +nil for the default action), and DOCUMENT is typically the name of a +document file or URL, but can also be a program executable to run or +a directory to open in the Windows Explorer. + +If DOCUMENT is a program executable, PARAMETERS can be a string +containing command line parameters, but otherwise should be nil. + +SHOW-FLAG can be used to control whether the invoked application is hidden +or minimized. If SHOW-FLAG is nil, the application is displayed normally, +otherwise it is an integer representing a ShowWindow flag: + + 0 - start hidden + 1 - start normally + 3 - start maximized + 6 - start minimized +*/ + (operation, document, parameters, show_flag)) +{ + Lisp_Object current_dir; + + CHECK_STRING (document); + + /* Encode filename and current directory. */ + current_dir = current_buffer->directory; + if ((int) ShellExecute (NULL, + (STRINGP (operation) ? + XSTRING (operation)->data : NULL), + XSTRING (document)->data, + (STRINGP (parameters) ? + XSTRING (parameters)->data : NULL), + XSTRING (current_dir)->data, + (INTP (show_flag) ? + XINT (show_flag) : SW_SHOWDEFAULT)) + > 32) + return Qt; + + error ("ShellExecute failed"); + return Qnil; +} + +void +syms_of_gui_mswindows (void) +{ + DEFSUBR (Fmswindows_shell_execute); +}