image_instance = Fgethash (make_int (id),
FRAME_MSWINDOWS_WIDGET_HASH_TABLE1 (f), Qnil);
+ /* It is possible for a widget action to cause it to get out of sync
+ with its instantiator. Thus it is necessary to signal this
+ possibility. */
+ if (IMAGE_INSTANCEP (image_instance))
+ XIMAGE_INSTANCE_WIDGET_ACTION_OCCURRED (image_instance) = 1;
callback = Fgethash (make_int (id),
FRAME_MSWINDOWS_WIDGET_HASH_TABLE2 (f), Qnil);
callback_ex = Fgethash (make_int (id),
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))
-{
- /* Encode filename and current directory. */
- Lisp_Object current_dir = Ffile_name_directory (document);
- char* path = NULL;
- char* doc = NULL;
- Extbyte* f=0;
- int ret;
- struct gcpro gcpro1, gcpro2;
-
- CHECK_STRING (document);
-
- if (NILP (current_dir))
- current_dir = current_buffer->directory;
-
- GCPRO2 (current_dir, document);
-
- /* Use mule and cygwin-safe APIs top get at file data. */
- if (STRINGP (current_dir))
- {
- TO_EXTERNAL_FORMAT (LISP_STRING, current_dir,
- C_STRING_ALLOCA, f,
- Qfile_name);
-#ifdef CYGWIN
- CYGWIN_WIN32_PATH (f, path);
-#else
- path = f;
-#endif
- }
-
- if (STRINGP (document))
- {
- TO_EXTERNAL_FORMAT (LISP_STRING, document,
- C_STRING_ALLOCA, f,
- Qfile_name);
-#ifdef CYGWIN
- CYGWIN_WIN32_PATH (f, doc);
-#else
- doc = f;
-#endif
- }
-
- UNGCPRO;
-
- ret = (int) ShellExecute (NULL,
- (STRINGP (operation) ?
- XSTRING_DATA (operation) : NULL),
- doc,
- (STRINGP (parameters) ?
- XSTRING_DATA (parameters) : NULL),
- path,
- (INTP (show_flag) ?
- XINT (show_flag) : SW_SHOWDEFAULT));
-
- if (ret > 32)
- return Qt;
-
- if (ret == ERROR_FILE_NOT_FOUND)
- signal_simple_error ("file not found", document);
- else if (ret == ERROR_PATH_NOT_FOUND)
- signal_simple_error ("path not found", current_dir);
- else if (ret == ERROR_BAD_FORMAT)
- signal_simple_error ("bad executable format", document);
- else
- error ("internal error");
-
- return Qnil;
-}
-
void
syms_of_gui_mswindows (void)
{
- DEFSUBR (Fmswindows_shell_execute);
}