/* Graphical user interface functions for the Microsoft W32 API.
Copyright (C) 1989, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000,
- 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008
+ 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009
Free Software Foundation, Inc.
This file is part of GNU Emacs.
#include "font.h"
#include "w32font.h"
+#ifndef FOF_NO_CONNECTED_ELEMENTS
+#define FOF_NO_CONNECTED_ELEMENTS 0x2000
+#endif
+
void syms_of_w32fns ();
void globals_of_w32fns ();
extern int w32_console_toggle_lock_key P_ ((int, Lisp_Object));
extern void w32_menu_display_help P_ ((HWND, HMENU, UINT, UINT));
extern void w32_free_menu_strings P_ ((HWND));
+extern const char *map_w32_filename P_ ((const char *, const char **));
extern int quit_char;
/* Non nil if no window manager is in use. */
Lisp_Object Vx_no_window_manager;
-/* Non-zero means we're allowed to display a hourglass pointer. */
-
-int display_hourglass_p;
-
/* If non-zero, a w32 timer that, when it expires, displays an
hourglass cursor on all frames. */
static unsigned hourglass_timer = 0;
static HWND hourglass_hwnd = NULL;
+#if 0 /* TODO: Mouse cursor customization. */
/* The background and shape of the mouse pointer, and shape when not
over text or in the modeline. */
-
Lisp_Object Vx_pointer_shape, Vx_nontext_pointer_shape, Vx_mode_pointer_shape;
Lisp_Object Vx_hourglass_pointer_shape, Vx_window_horizontal_drag_shape;
/* The shape when over mouse-sensitive text. */
Lisp_Object Vx_sensitive_text_pointer_shape;
+#endif
#ifndef IDC_HAND
#define IDC_HAND MAKEINTRESOURCE(32649)
#endif
/* Color of chars displayed in cursor box. */
-
Lisp_Object Vx_cursor_fore_pixel;
/* Nonzero if using Windows. */
indicates there is an update region. */
static int w32_strict_painting;
-/* Associative list linking character set strings to Windows codepages. */
-static Lisp_Object Vw32_charset_info_alist;
-
-/* VIETNAMESE_CHARSET is not defined in some versions of MSVC. */
-#ifndef VIETNAMESE_CHARSET
-#define VIETNAMESE_CHARSET 163
-#endif
-
Lisp_Object Qnone;
Lisp_Object Qsuppress_icon;
Lisp_Object Qundefined_color;
Lisp_Object Qcontrol;
Lisp_Object Qshift;
-Lisp_Object Qw32_charset_ansi;
-Lisp_Object Qw32_charset_default;
-Lisp_Object Qw32_charset_symbol;
-Lisp_Object Qw32_charset_shiftjis;
-Lisp_Object Qw32_charset_hangeul;
-Lisp_Object Qw32_charset_gb2312;
-Lisp_Object Qw32_charset_chinesebig5;
-Lisp_Object Qw32_charset_oem;
-
-#ifndef JOHAB_CHARSET
-#define JOHAB_CHARSET 130
-#endif
-#ifdef JOHAB_CHARSET
-Lisp_Object Qw32_charset_easteurope;
-Lisp_Object Qw32_charset_turkish;
-Lisp_Object Qw32_charset_baltic;
-Lisp_Object Qw32_charset_russian;
-Lisp_Object Qw32_charset_arabic;
-Lisp_Object Qw32_charset_greek;
-Lisp_Object Qw32_charset_hebrew;
-Lisp_Object Qw32_charset_vietnamese;
-Lisp_Object Qw32_charset_thai;
-Lisp_Object Qw32_charset_johab;
-Lisp_Object Qw32_charset_mac;
-#endif
-
-#ifdef UNICODE_CHARSET
-Lisp_Object Qw32_charset_unicode;
-#endif
/* The ANSI codepage. */
int w32_ansi_code_page;
DWORD dwFlags;
};
+/* Reportedly, VS 6 does not have this in its headers. */
+#if defined(_MSC_VER) && _MSC_VER < 1300
+DECLARE_HANDLE(HMONITOR);
+#endif
+
typedef BOOL (WINAPI * TrackMouseEvent_Proc)
(IN OUT LPTRACKMOUSEEVENT lpEventTrack);
typedef LONG (WINAPI * ImmGetCompositionString_Proc)
extern int uniscribe_available;
/* Function prototypes for hourglass support. */
-static void show_hourglass P_ ((struct frame *));
-static void hide_hourglass P_ ((void));
+static void w32_show_hourglass P_ ((struct frame *));
+static void w32_hide_hourglass P_ ((void));
\f
return (oldrgb);
}
-DEFUN ("w32-load-color-file", Fw32_load_color_file,
- Sw32_load_color_file, 1, 1, 0,
- doc: /* Create an alist of color entries from an external file.
-Assign this value to `w32-color-map' to replace the existing color map.
-
-The file should define one named RGB color per line like so:
- R G B name
-where R,G,B are numbers between 0 and 255 and name is an arbitrary string. */)
- (filename)
- Lisp_Object filename;
-{
- FILE *fp;
- Lisp_Object cmap = Qnil;
- Lisp_Object abspath;
-
- CHECK_STRING (filename);
- abspath = Fexpand_file_name (filename, Qnil);
-
- fp = fopen (SDATA (filename), "rt");
- if (fp)
- {
- char buf[512];
- int red, green, blue;
- int num;
-
- BLOCK_INPUT;
-
- while (fgets (buf, sizeof (buf), fp) != NULL) {
- if (sscanf (buf, "%u %u %u %n", &red, &green, &blue, &num) == 3)
- {
- char *name = buf + num;
- num = strlen (name) - 1;
- if (name[num] == '\n')
- name[num] = 0;
- cmap = Fcons (Fcons (build_string (name),
- make_number (RGB (red, green, blue))),
- cmap);
- }
- }
- fclose (fp);
-
- UNBLOCK_INPUT;
- }
-
- return cmap;
-}
-
/* The default colors for the w32 color map */
typedef struct colormap_t
{
&& mask_color == FRAME_BACKGROUND_PIXEL (f))
f->output_data.w32->mouse_pixel = FRAME_FOREGROUND_PIXEL (f);
-#if 0 /* TODO : cursor changes */
+#if 0 /* TODO : Mouse cursor customization. */
BLOCK_INPUT;
/* It's not okay to crash if the user selects a screwy cursor. */
}
\f
-/* Subroutines of creating a frame. */
-
-
-/* Return the value of parameter PARAM.
-
- First search ALIST, then Vdefault_frame_alist, then the X defaults
- database, using ATTRIBUTE as the attribute name and CLASS as its class.
-
- Convert the resource to the type specified by desired_type.
-
- If no default is specified, return Qunbound. If you call
- w32_get_arg, make sure you deal with Qunbound in a reasonable way,
- and don't let it get stored in any Lisp-visible variables! */
+/* Subroutines for creating a frame. */
-static Lisp_Object
-w32_get_arg (alist, param, attribute, class, type)
- Lisp_Object alist, param;
- char *attribute;
- char *class;
- enum resource_types type;
-{
- return x_get_arg (check_x_display_info (Qnil),
- alist, param, attribute, class, type);
-}
-
-\f
Cursor
w32_load_cursor (LPCTSTR name)
{
RECT rect;
Lisp_Object top = Qunbound;
Lisp_Object left = Qunbound;
+ struct w32_display_info *dpyinfo = &one_w32_display_info;
rect.left = rect.top = 0;
rect.right = FRAME_PIXEL_WIDTH (f);
{
/* When called with RES_TYPE_NUMBER, w32_get_arg will return zero
for anything that is not a number and is not Qunbound. */
- left = w32_get_arg (Qnil, Qleft, "left", "Left", RES_TYPE_NUMBER);
- top = w32_get_arg (Qnil, Qtop, "top", "Top", RES_TYPE_NUMBER);
+ left = x_get_arg (dpyinfo, Qnil, Qleft, "left", "Left", RES_TYPE_NUMBER);
+ top = x_get_arg (dpyinfo, Qnil, Qtop, "top", "Top", RES_TYPE_NUMBER);
}
FRAME_W32_WINDOW (f) = hwnd
{
KillTimer (hwnd, hourglass_timer);
hourglass_timer = 0;
- show_hourglass (x_window_to_frame (dpyinfo, hwnd));
+ w32_show_hourglass (x_window_to_frame (dpyinfo, hwnd));
}
return 0;
Lisp_Object parms;
{
Lisp_Object icon_x, icon_y;
+ struct w32_display_info *dpyinfo = &one_w32_display_info;
/* Set the position of the icon. Note that Windows 95 groups all
icons in the tray. */
- icon_x = w32_get_arg (parms, Qicon_left, 0, 0, RES_TYPE_NUMBER);
- icon_y = w32_get_arg (parms, Qicon_top, 0, 0, RES_TYPE_NUMBER);
+ icon_x = x_get_arg (dpyinfo, parms, Qicon_left, 0, 0, RES_TYPE_NUMBER);
+ icon_y = x_get_arg (dpyinfo, parms, Qicon_top, 0, 0, RES_TYPE_NUMBER);
if (!EQ (icon_x, Qunbound) && !EQ (icon_y, Qunbound))
{
CHECK_NUMBER (icon_x);
#if 0 /* TODO */
/* Start up iconic or window? */
x_wm_set_window_state
- (f, (EQ (w32_get_arg (parms, Qvisibility, 0, 0, RES_TYPE_SYMBOL), Qicon)
+ (f, (EQ (x_get_arg (dpyinfo, parms, Qvisibility, 0, 0, RES_TYPE_SYMBOL), Qicon)
? IconicState
: NormalState));
x_free_frame_resources (f);
+#if GLYPH_DEBUG
/* Check that reference counts are indeed correct. */
xassert (dpyinfo->reference_count == dpyinfo_refcount);
xassert (dpyinfo->image_cache->refcount == image_cache_refcount);
-
+#endif
return Qt;
}
Lisp_Object parent;
struct kboard *kb;
- check_w32 ();
-
/* Make copy of frame parameters because the original is in pure
storage now. */
parameters = Fcopy_alist (parameters);
until we know if this frame has a specified name. */
Vx_resource_name = Vinvocation_name;
- display = w32_get_arg (parameters, Qdisplay, 0, 0, RES_TYPE_STRING);
+ display = x_get_arg (dpyinfo, parameters, Qterminal, 0, 0, RES_TYPE_NUMBER);
+ if (EQ (display, Qunbound))
+ display = x_get_arg (dpyinfo, parameters, Qdisplay, 0, 0, RES_TYPE_STRING);
if (EQ (display, Qunbound))
display = Qnil;
dpyinfo = check_x_display_info (display);
-#ifdef MULTI_KBOARD
kb = dpyinfo->terminal->kboard;
-#else
- kb = &the_only_kboard;
-#endif
- name = w32_get_arg (parameters, Qname, "name", "Name", RES_TYPE_STRING);
+ if (!dpyinfo->terminal->name)
+ error ("Terminal is not live, can't create new frames on it");
+
+ name = x_get_arg (dpyinfo, parameters, Qname, "name", "Name", RES_TYPE_STRING);
if (!STRINGP (name)
&& ! EQ (name, Qunbound)
&& ! NILP (name))
Vx_resource_name = name;
/* See if parent window is specified. */
- parent = w32_get_arg (parameters, Qparent_id, NULL, NULL, RES_TYPE_NUMBER);
+ parent = x_get_arg (dpyinfo, parameters, Qparent_id, NULL, NULL, RES_TYPE_NUMBER);
if (EQ (parent, Qunbound))
parent = Qnil;
if (! NILP (parent))
it to make_frame_without_minibuffer. */
frame = Qnil;
GCPRO4 (parameters, parent, name, frame);
- tem = w32_get_arg (parameters, Qminibuffer, "minibuffer", "Minibuffer",
+ tem = x_get_arg (dpyinfo, parameters, Qminibuffer, "minibuffer", "Minibuffer",
RES_TYPE_SYMBOL);
if (EQ (tem, Qnone) || NILP (tem))
f = make_frame_without_minibuffer (Qnil, kb, display);
(struct w32_output *) xmalloc (sizeof (struct w32_output));
bzero (f->output_data.w32, sizeof (struct w32_output));
FRAME_FONTSET (f) = -1;
- record_unwind_protect (unwind_create_frame, frame);
f->icon_name
- = w32_get_arg (parameters, Qicon_name, "iconName", "Title", RES_TYPE_STRING);
+ = x_get_arg (dpyinfo, parameters, Qicon_name, "iconName", "Title",
+ RES_TYPE_STRING);
if (! STRINGP (f->icon_name))
f->icon_name = Qnil;
/* FRAME_W32_DISPLAY_INFO (f) = dpyinfo; */
-#ifdef MULTI_KBOARD
- FRAME_KBOARD (f) = kb;
-#endif
+
+ /* With FRAME_X_DISPLAY_INFO set up, this unwind-protect is safe. */
+ record_unwind_protect (unwind_create_frame, frame);
+#if GLYPH_DEBUG
+ image_cache_refcount = FRAME_IMAGE_CACHE (f)->refcount;
+ dpyinfo_refcount = dpyinfo->reference_count;
+#endif /* GLYPH_DEBUG */
/* Specify the parent under which to make this window. */
x_default_font_parameter (f, parameters);
x_default_parameter (f, parameters, Qborder_width, make_number (2),
"borderWidth", "BorderWidth", RES_TYPE_NUMBER);
- /* This defaults to 2 in order to match xterm. We recognize either
- internalBorderWidth or internalBorder (which is what xterm calls
- it). */
+
+ /* We recognize either internalBorderWidth or internalBorder
+ (which is what xterm calls it). */
if (NILP (Fassq (Qinternal_border_width, parameters)))
{
Lisp_Object value;
- value = w32_get_arg (parameters, Qinternal_border_width,
+ value = x_get_arg (dpyinfo, parameters, Qinternal_border_width,
"internalBorder", "InternalBorder", RES_TYPE_NUMBER);
if (! EQ (value, Qunbound))
parameters = Fcons (Fcons (Qinternal_border_width, value),
window_prompting = x_figure_window_size (f, parameters, 1);
- tem = w32_get_arg (parameters, Qunsplittable, 0, 0, RES_TYPE_BOOLEAN);
+ tem = x_get_arg (dpyinfo, parameters, Qunsplittable, 0, 0, RES_TYPE_BOOLEAN);
f->no_split = minibuffer_only || EQ (tem, Qt);
w32_window (f, window_prompting, minibuffer_only);
"cursorType", "CursorType", RES_TYPE_SYMBOL);
x_default_parameter (f, parameters, Qscroll_bar_width, Qnil,
"scrollBarWidth", "ScrollBarWidth", RES_TYPE_NUMBER);
+ x_default_parameter (f, parameters, Qalpha, Qnil,
+ "alpha", "Alpha", RES_TYPE_NUMBER);
/* Dimensions, especially FRAME_LINES (f), must be done via change_frame_size.
Change will not be effected unless different from the current
{
Lisp_Object visibility;
- visibility = w32_get_arg (parameters, Qvisibility, 0, 0, RES_TYPE_SYMBOL);
+ visibility = x_get_arg (dpyinfo, parameters, Qvisibility, 0, 0, RES_TYPE_SYMBOL);
if (EQ (visibility, Qunbound))
visibility = Qt;
}
\f
-/* The font conversion stuff between x and w32 */
-
-/* X font string is as follows (from faces.el)
- * (let ((- "[-?]")
- * (foundry "[^-]+")
- * (family "[^-]+")
- * (weight "\\(bold\\|demibold\\|medium\\)") ; 1
- * (weight\? "\\([^-]*\\)") ; 1
- * (slant "\\([ior]\\)") ; 2
- * (slant\? "\\([^-]?\\)") ; 2
- * (swidth "\\([^-]*\\)") ; 3
- * (adstyle "[^-]*") ; 4
- * (pixelsize "[0-9]+")
- * (pointsize "[0-9][0-9]+")
- * (resx "[0-9][0-9]+")
- * (resy "[0-9][0-9]+")
- * (spacing "[cmp?*]")
- * (avgwidth "[0-9]+")
- * (registry "[^-]+")
- * (encoding "[^-]+")
- * )
- */
-
-static LONG
-x_to_w32_weight (lpw)
- char * lpw;
-{
- if (!lpw) return (FW_DONTCARE);
-
- if (xstrcasecmp (lpw, "heavy") == 0) return FW_HEAVY;
- else if (xstrcasecmp (lpw, "extrabold") == 0) return FW_EXTRABOLD;
- else if (xstrcasecmp (lpw, "bold") == 0) return FW_BOLD;
- else if (xstrcasecmp (lpw, "demibold") == 0) return FW_SEMIBOLD;
- else if (xstrcasecmp (lpw, "semibold") == 0) return FW_SEMIBOLD;
- else if (xstrcasecmp (lpw, "medium") == 0) return FW_MEDIUM;
- else if (xstrcasecmp (lpw, "normal") == 0) return FW_NORMAL;
- else if (xstrcasecmp (lpw, "light") == 0) return FW_LIGHT;
- else if (xstrcasecmp (lpw, "extralight") == 0) return FW_EXTRALIGHT;
- else if (xstrcasecmp (lpw, "thin") == 0) return FW_THIN;
- else
- return FW_DONTCARE;
-}
-
-
-static char *
-w32_to_x_weight (fnweight)
- int fnweight;
-{
- if (fnweight >= FW_HEAVY) return "heavy";
- if (fnweight >= FW_EXTRABOLD) return "extrabold";
- if (fnweight >= FW_BOLD) return "bold";
- if (fnweight >= FW_SEMIBOLD) return "demibold";
- if (fnweight >= FW_MEDIUM) return "medium";
- if (fnweight >= FW_NORMAL) return "normal";
- if (fnweight >= FW_LIGHT) return "light";
- if (fnweight >= FW_EXTRALIGHT) return "extralight";
- if (fnweight >= FW_THIN) return "thin";
- else
- return "*";
-}
-
-LONG
-x_to_w32_charset (lpcs)
- char * lpcs;
-{
- Lisp_Object this_entry, w32_charset;
- char *charset;
- int len = strlen (lpcs);
-
- /* Support "*-#nnn" format for unknown charsets. */
- if (strncmp (lpcs, "*-#", 3) == 0)
- return atoi (lpcs + 3);
-
- /* All Windows fonts qualify as unicode. */
- if (!strncmp (lpcs, "iso10646", 8))
- return DEFAULT_CHARSET;
-
- /* Handle wildcards by ignoring them; eg. treat "big5*-*" as "big5". */
- charset = alloca (len + 1);
- strcpy (charset, lpcs);
- lpcs = strchr (charset, '*');
- if (lpcs)
- *lpcs = '\0';
-
- /* Look through w32-charset-info-alist for the character set.
- Format of each entry is
- (CHARSET_NAME . (WINDOWS_CHARSET . CODEPAGE)).
- */
- this_entry = Fassoc (build_string (charset), Vw32_charset_info_alist);
-
- if (NILP (this_entry))
- {
- /* At startup, we want iso8859-1 fonts to come up properly. */
- if (xstrcasecmp (charset, "iso8859-1") == 0)
- return ANSI_CHARSET;
- else
- return DEFAULT_CHARSET;
- }
-
- w32_charset = Fcar (Fcdr (this_entry));
-
- /* Translate Lisp symbol to number. */
- if (EQ (w32_charset, Qw32_charset_ansi))
- return ANSI_CHARSET;
- if (EQ (w32_charset, Qw32_charset_symbol))
- return SYMBOL_CHARSET;
- if (EQ (w32_charset, Qw32_charset_shiftjis))
- return SHIFTJIS_CHARSET;
- if (EQ (w32_charset, Qw32_charset_hangeul))
- return HANGEUL_CHARSET;
- if (EQ (w32_charset, Qw32_charset_chinesebig5))
- return CHINESEBIG5_CHARSET;
- if (EQ (w32_charset, Qw32_charset_gb2312))
- return GB2312_CHARSET;
- if (EQ (w32_charset, Qw32_charset_oem))
- return OEM_CHARSET;
-#ifdef JOHAB_CHARSET
- if (EQ (w32_charset, Qw32_charset_johab))
- return JOHAB_CHARSET;
- if (EQ (w32_charset, Qw32_charset_easteurope))
- return EASTEUROPE_CHARSET;
- if (EQ (w32_charset, Qw32_charset_turkish))
- return TURKISH_CHARSET;
- if (EQ (w32_charset, Qw32_charset_baltic))
- return BALTIC_CHARSET;
- if (EQ (w32_charset, Qw32_charset_russian))
- return RUSSIAN_CHARSET;
- if (EQ (w32_charset, Qw32_charset_arabic))
- return ARABIC_CHARSET;
- if (EQ (w32_charset, Qw32_charset_greek))
- return GREEK_CHARSET;
- if (EQ (w32_charset, Qw32_charset_hebrew))
- return HEBREW_CHARSET;
- if (EQ (w32_charset, Qw32_charset_vietnamese))
- return VIETNAMESE_CHARSET;
- if (EQ (w32_charset, Qw32_charset_thai))
- return THAI_CHARSET;
- if (EQ (w32_charset, Qw32_charset_mac))
- return MAC_CHARSET;
-#endif /* JOHAB_CHARSET */
-#ifdef UNICODE_CHARSET
- if (EQ (w32_charset, Qw32_charset_unicode))
- return UNICODE_CHARSET;
-#endif
-
- return DEFAULT_CHARSET;
-}
-
-
-char *
-w32_to_x_charset (fncharset, matching)
- int fncharset;
- char *matching;
-{
- static char buf[32];
- Lisp_Object charset_type;
- int match_len = 0;
-
- if (matching)
- {
- /* If fully specified, accept it as it is. Otherwise use a
- substring match. */
- char *wildcard = strchr (matching, '*');
- if (wildcard)
- *wildcard = '\0';
- else if (strchr (matching, '-'))
- return matching;
-
- match_len = strlen (matching);
- }
-
- switch (fncharset)
- {
- case ANSI_CHARSET:
- /* Handle startup case of w32-charset-info-alist not
- being set up yet. */
- if (NILP (Vw32_charset_info_alist))
- return "iso8859-1";
- charset_type = Qw32_charset_ansi;
- break;
- case DEFAULT_CHARSET:
- charset_type = Qw32_charset_default;
- break;
- case SYMBOL_CHARSET:
- charset_type = Qw32_charset_symbol;
- break;
- case SHIFTJIS_CHARSET:
- charset_type = Qw32_charset_shiftjis;
- break;
- case HANGEUL_CHARSET:
- charset_type = Qw32_charset_hangeul;
- break;
- case GB2312_CHARSET:
- charset_type = Qw32_charset_gb2312;
- break;
- case CHINESEBIG5_CHARSET:
- charset_type = Qw32_charset_chinesebig5;
- break;
- case OEM_CHARSET:
- charset_type = Qw32_charset_oem;
- break;
-
- /* More recent versions of Windows (95 and NT4.0) define more
- character sets. */
-#ifdef EASTEUROPE_CHARSET
- case EASTEUROPE_CHARSET:
- charset_type = Qw32_charset_easteurope;
- break;
- case TURKISH_CHARSET:
- charset_type = Qw32_charset_turkish;
- break;
- case BALTIC_CHARSET:
- charset_type = Qw32_charset_baltic;
- break;
- case RUSSIAN_CHARSET:
- charset_type = Qw32_charset_russian;
- break;
- case ARABIC_CHARSET:
- charset_type = Qw32_charset_arabic;
- break;
- case GREEK_CHARSET:
- charset_type = Qw32_charset_greek;
- break;
- case HEBREW_CHARSET:
- charset_type = Qw32_charset_hebrew;
- break;
- case VIETNAMESE_CHARSET:
- charset_type = Qw32_charset_vietnamese;
- break;
- case THAI_CHARSET:
- charset_type = Qw32_charset_thai;
- break;
- case MAC_CHARSET:
- charset_type = Qw32_charset_mac;
- break;
- case JOHAB_CHARSET:
- charset_type = Qw32_charset_johab;
- break;
-#endif
-
-#ifdef UNICODE_CHARSET
- case UNICODE_CHARSET:
- charset_type = Qw32_charset_unicode;
- break;
-#endif
- default:
- /* Encode numerical value of unknown charset. */
- sprintf (buf, "*-#%u", fncharset);
- return buf;
- }
-
- {
- Lisp_Object rest;
- char * best_match = NULL;
- int matching_found = 0;
-
- /* Look through w32-charset-info-alist for the character set.
- Prefer ISO codepages, and prefer lower numbers in the ISO
- range. Only return charsets for codepages which are installed.
-
- Format of each entry is
- (CHARSET_NAME . (WINDOWS_CHARSET . CODEPAGE)).
- */
- for (rest = Vw32_charset_info_alist; CONSP (rest); rest = XCDR (rest))
- {
- char * x_charset;
- Lisp_Object w32_charset;
- Lisp_Object codepage;
-
- Lisp_Object this_entry = XCAR (rest);
-
- /* Skip invalid entries in alist. */
- if (!CONSP (this_entry) || !STRINGP (XCAR (this_entry))
- || !CONSP (XCDR (this_entry))
- || !SYMBOLP (XCAR (XCDR (this_entry))))
- continue;
-
- x_charset = SDATA (XCAR (this_entry));
- w32_charset = XCAR (XCDR (this_entry));
- codepage = XCDR (XCDR (this_entry));
-
- /* Look for Same charset and a valid codepage (or non-int
- which means ignore). */
- if (EQ (w32_charset, charset_type)
- && (!INTEGERP (codepage) || XINT (codepage) == CP_DEFAULT
- || IsValidCodePage (XINT (codepage))))
- {
- /* If we don't have a match already, then this is the
- best. */
- if (!best_match)
- {
- best_match = x_charset;
- if (matching && !strnicmp (x_charset, matching, match_len))
- matching_found = 1;
- }
- /* If we already found a match for MATCHING, then
- only consider other matches. */
- else if (matching_found
- && strnicmp (x_charset, matching, match_len))
- continue;
- /* If this matches what we want, and the best so far doesn't,
- then this is better. */
- else if (!matching_found && matching
- && !strnicmp (x_charset, matching, match_len))
- {
- best_match = x_charset;
- matching_found = 1;
- }
- /* If this is fully specified, and the best so far isn't,
- then this is better. */
- else if ((!strchr (best_match, '-') && strchr (x_charset, '-'))
- /* If this is an ISO codepage, and the best so far isn't,
- then this is better, but only if it fully specifies the
- encoding. */
- || (strnicmp (best_match, "iso", 3) != 0
- && strnicmp (x_charset, "iso", 3) == 0
- && strchr (x_charset, '-')))
- best_match = x_charset;
- /* If both are ISO8859 codepages, choose the one with the
- lowest number in the encoding field. */
- else if (strnicmp (best_match, "iso8859-", 8) == 0
- && strnicmp (x_charset, "iso8859-", 8) == 0)
- {
- int best_enc = atoi (best_match + 8);
- int this_enc = atoi (x_charset + 8);
- if (this_enc > 0 && this_enc < best_enc)
- best_match = x_charset;
- }
- }
- }
-
- /* If no match, encode the numeric value. */
- if (!best_match)
- {
- sprintf (buf, "*-#%u", fncharset);
- return buf;
- }
-
- strncpy (buf, best_match, 31);
- /* If the charset is not fully specified, put -0 on the end. */
- if (!strchr (best_match, '-'))
- {
- int pos = strlen (best_match);
- /* Charset specifiers shouldn't be very long. If it is a made
- up one, truncating it should not do any harm since it isn't
- recognized anyway. */
- if (pos > 29)
- pos = 29;
- strcpy (buf + pos, "-0");
- }
- buf[31] = '\0';
- return buf;
- }
-}
-
-
-/* Return all the X charsets that map to a font. */
-static Lisp_Object
-w32_to_all_x_charsets (fncharset)
- int fncharset;
-{
- static char buf[32];
- Lisp_Object charset_type;
- Lisp_Object retval = Qnil;
-
- switch (fncharset)
- {
- case ANSI_CHARSET:
- /* Handle startup case of w32-charset-info-alist not
- being set up yet. */
- if (NILP (Vw32_charset_info_alist))
- return Fcons (build_string ("iso8859-1"), Qnil);
-
- charset_type = Qw32_charset_ansi;
- break;
- case DEFAULT_CHARSET:
- charset_type = Qw32_charset_default;
- break;
- case SYMBOL_CHARSET:
- charset_type = Qw32_charset_symbol;
- break;
- case SHIFTJIS_CHARSET:
- charset_type = Qw32_charset_shiftjis;
- break;
- case HANGEUL_CHARSET:
- charset_type = Qw32_charset_hangeul;
- break;
- case GB2312_CHARSET:
- charset_type = Qw32_charset_gb2312;
- break;
- case CHINESEBIG5_CHARSET:
- charset_type = Qw32_charset_chinesebig5;
- break;
- case OEM_CHARSET:
- charset_type = Qw32_charset_oem;
- break;
-
- /* More recent versions of Windows (95 and NT4.0) define more
- character sets. */
-#ifdef EASTEUROPE_CHARSET
- case EASTEUROPE_CHARSET:
- charset_type = Qw32_charset_easteurope;
- break;
- case TURKISH_CHARSET:
- charset_type = Qw32_charset_turkish;
- break;
- case BALTIC_CHARSET:
- charset_type = Qw32_charset_baltic;
- break;
- case RUSSIAN_CHARSET:
- charset_type = Qw32_charset_russian;
- break;
- case ARABIC_CHARSET:
- charset_type = Qw32_charset_arabic;
- break;
- case GREEK_CHARSET:
- charset_type = Qw32_charset_greek;
- break;
- case HEBREW_CHARSET:
- charset_type = Qw32_charset_hebrew;
- break;
- case VIETNAMESE_CHARSET:
- charset_type = Qw32_charset_vietnamese;
- break;
- case THAI_CHARSET:
- charset_type = Qw32_charset_thai;
- break;
- case MAC_CHARSET:
- charset_type = Qw32_charset_mac;
- break;
- case JOHAB_CHARSET:
- charset_type = Qw32_charset_johab;
- break;
-#endif
-
-#ifdef UNICODE_CHARSET
- case UNICODE_CHARSET:
- charset_type = Qw32_charset_unicode;
- break;
-#endif
- default:
- /* Encode numerical value of unknown charset. */
- sprintf (buf, "*-#%u", fncharset);
- return Fcons (build_string (buf), Qnil);
- }
-
- {
- Lisp_Object rest;
- /* Look through w32-charset-info-alist for the character set.
- Only return fully specified charsets for codepages which are
- installed.
-
- Format of each entry in Vw32_charset_info_alist is
- (CHARSET_NAME . (WINDOWS_CHARSET . CODEPAGE)).
- */
- for (rest = Vw32_charset_info_alist; CONSP (rest); rest = XCDR (rest))
- {
- Lisp_Object x_charset;
- Lisp_Object w32_charset;
- Lisp_Object codepage;
-
- Lisp_Object this_entry = XCAR (rest);
-
- /* Skip invalid entries in alist. */
- if (!CONSP (this_entry) || !STRINGP (XCAR (this_entry))
- || !CONSP (XCDR (this_entry))
- || !SYMBOLP (XCAR (XCDR (this_entry))))
- continue;
-
- x_charset = XCAR (this_entry);
- w32_charset = XCAR (XCDR (this_entry));
- codepage = XCDR (XCDR (this_entry));
-
- if (!strchr (SDATA (x_charset), '-'))
- continue;
-
- /* Look for Same charset and a valid codepage (or non-int
- which means ignore). */
- if (EQ (w32_charset, charset_type)
- && (!INTEGERP (codepage) || XINT (codepage) == CP_DEFAULT
- || IsValidCodePage (XINT (codepage))))
- {
- retval = Fcons (x_charset, retval);
- }
- }
-
- /* If no match, encode the numeric value. */
- if (NILP (retval))
- {
- sprintf (buf, "*-#%u", fncharset);
- return Fcons (build_string (buf), Qnil);
- }
-
- return retval;
- }
-}
-
-static BOOL
-w32_to_x_font (lplogfont, lpxstr, len, specific_charset)
- LOGFONT * lplogfont;
- char * lpxstr;
- int len;
- char * specific_charset;
-{
- char* fonttype;
- char *fontname;
- char height_pixels[8];
- char height_dpi[8];
- char width_pixels[8];
- char *fontname_dash;
- int display_resy = (int) one_w32_display_info.resy;
- int display_resx = (int) one_w32_display_info.resx;
- struct coding_system coding;
-
- if (!lpxstr) abort ();
-
- if (!lplogfont)
- return FALSE;
-
- if (lplogfont->lfOutPrecision == OUT_STRING_PRECIS)
- fonttype = "raster";
- else if (lplogfont->lfOutPrecision == OUT_STROKE_PRECIS)
- fonttype = "outline";
- else
- fonttype = "unknown";
-
- setup_coding_system (Fcheck_coding_system (Vlocale_coding_system),
- &coding);
- coding.src_multibyte = 0;
- coding.dst_multibyte = 1;
- coding.mode |= CODING_MODE_LAST_BLOCK;
- /* We explicitely disable composition handling because selection
- data should not contain any composition sequence. */
- coding.common_flags &= ~CODING_ANNOTATION_MASK;
-
- coding.dst_bytes = LF_FACESIZE * 2;
- coding.destination = (unsigned char *) xmalloc (coding.dst_bytes + 1);
- decode_coding_c_string (&coding, lplogfont->lfFaceName,
- strlen(lplogfont->lfFaceName), Qnil);
- fontname = coding.destination;
-
- *(fontname + coding.produced) = '\0';
-
- /* Replace dashes with underscores so the dashes are not
- misinterpreted. */
- fontname_dash = fontname;
- while (fontname_dash = strchr (fontname_dash, '-'))
- *fontname_dash = '_';
-
- if (lplogfont->lfHeight)
- {
- sprintf (height_pixels, "%u", eabs (lplogfont->lfHeight));
- sprintf (height_dpi, "%u",
- eabs (lplogfont->lfHeight) * 720 / display_resy);
- }
- else
- {
- strcpy (height_pixels, "*");
- strcpy (height_dpi, "*");
- }
-
-#if 0 /* Never put the width in the xlfd. It fails on fonts with
- double-width characters. */
- if (lplogfont->lfWidth)
- sprintf (width_pixels, "%u", lplogfont->lfWidth * 10);
- else
-#endif
- strcpy (width_pixels, "*");
-
- _snprintf (lpxstr, len - 1,
- "-%s-%s-%s-%c-normal-normal-%s-%s-%d-%d-%c-%s-%s",
- fonttype, /* foundry */
- fontname, /* family */
- w32_to_x_weight (lplogfont->lfWeight), /* weight */
- lplogfont->lfItalic?'i':'r', /* slant */
- /* setwidth name */
- /* add style name */
- height_pixels, /* pixel size */
- height_dpi, /* point size */
- display_resx, /* resx */
- display_resy, /* resy */
- ((lplogfont->lfPitchAndFamily & 0x3) == VARIABLE_PITCH)
- ? 'p' : 'c', /* spacing */
- width_pixels, /* avg width */
- w32_to_x_charset (lplogfont->lfCharSet, specific_charset)
- /* charset registry and encoding */
- );
-
- lpxstr[len - 1] = 0; /* just to be sure */
- return (TRUE);
-}
-
-static BOOL
-x_to_w32_font (lpxstr, lplogfont)
- char * lpxstr;
- LOGFONT * lplogfont;
-{
- struct coding_system coding;
-
- if (!lplogfont) return (FALSE);
-
- memset (lplogfont, 0, sizeof (*lplogfont));
-
- /* Set default value for each field. */
-#if 1
- lplogfont->lfOutPrecision = OUT_DEFAULT_PRECIS;
- lplogfont->lfClipPrecision = CLIP_DEFAULT_PRECIS;
- lplogfont->lfQuality = DEFAULT_QUALITY;
-#else
- /* go for maximum quality */
- lplogfont->lfOutPrecision = OUT_STROKE_PRECIS;
- lplogfont->lfClipPrecision = CLIP_STROKE_PRECIS;
- lplogfont->lfQuality = PROOF_QUALITY;
-#endif
-
- lplogfont->lfCharSet = DEFAULT_CHARSET;
- lplogfont->lfWeight = FW_DONTCARE;
- lplogfont->lfPitchAndFamily = DEFAULT_PITCH | FF_DONTCARE;
-
- if (!lpxstr)
- return FALSE;
-
- /* Provide a simple escape mechanism for specifying Windows font names
- * directly -- if font spec does not beginning with '-', assume this
- * format:
- * "<font name>[:height in pixels[:width in pixels[:weight]]]"
- */
-
- if (*lpxstr == '-')
- {
- int fields, tem;
- char name[50], weight[20], slant, pitch, pixels[10], height[10],
- width[10], resy[10], remainder[50];
- char * encoding;
- int dpi = (int) one_w32_display_info.resy;
-
- fields = sscanf (lpxstr,
- "-%*[^-]-%49[^-]-%19[^-]-%c-%*[^-]-%*[^-]-%9[^-]-%9[^-]-%*[^-]-%9[^-]-%c-%9[^-]-%49s",
- name, weight, &slant, pixels, height, resy, &pitch, width, remainder);
- if (fields == EOF)
- return (FALSE);
-
- /* In the general case when wildcards cover more than one field,
- we don't know which field is which, so don't fill any in.
- However, we need to cope with this particular form, which is
- generated by font_list_1 (invoked by try_font_list):
- "-raster-6x10-*-gb2312*-*"
- and make sure to correctly parse the charset field. */
- if (fields == 3)
- {
- fields = sscanf (lpxstr,
- "-%*[^-]-%49[^-]-*-%49s",
- name, remainder);
- }
- else if (fields < 9)
- {
- fields = 0;
- remainder[0] = 0;
- }
-
- if (fields > 0 && name[0] != '*')
- {
- Lisp_Object string = build_string (name);
- setup_coding_system
- (Fcheck_coding_system (Vlocale_coding_system), &coding);
- coding.mode |= (CODING_MODE_SAFE_ENCODING | CODING_MODE_LAST_BLOCK);
- /* Disable composition/charset annotation. */
- coding.common_flags &= ~CODING_ANNOTATION_MASK;
- coding.dst_bytes = SCHARS (string) * 2;
-
- coding.destination = (unsigned char *) xmalloc (coding.dst_bytes);
- encode_coding_object (&coding, string, 0, 0,
- SCHARS (string), SBYTES (string), Qnil);
- if (coding.produced >= LF_FACESIZE)
- coding.produced = LF_FACESIZE - 1;
-
- coding.destination[coding.produced] = '\0';
-
- strcpy (lplogfont->lfFaceName, coding.destination);
- xfree (coding.destination);
- }
- else
- {
- lplogfont->lfFaceName[0] = '\0';
- }
-
- fields--;
-
- lplogfont->lfWeight = x_to_w32_weight ((fields > 0 ? weight : ""));
-
- fields--;
-
- lplogfont->lfItalic = (fields > 0 && slant == 'i');
-
- fields--;
-
- if (fields > 0 && pixels[0] != '*')
- lplogfont->lfHeight = atoi (pixels);
-
- fields--;
- fields--;
- if (fields > 0 && resy[0] != '*')
- {
- tem = atoi (resy);
- if (tem > 0) dpi = tem;
- }
-
- if (fields > -1 && lplogfont->lfHeight == 0 && height[0] != '*')
- lplogfont->lfHeight = atoi (height) * dpi / 720;
-
- if (fields > 0)
- {
- if (pitch == 'p')
- lplogfont->lfPitchAndFamily = VARIABLE_PITCH | FF_DONTCARE;
- else if (pitch == 'c')
- lplogfont->lfPitchAndFamily = FIXED_PITCH | FF_DONTCARE;
- }
-
- fields--;
-
- if (fields > 0 && width[0] != '*')
- lplogfont->lfWidth = atoi (width) / 10;
-
- fields--;
-
- /* Strip the trailing '-' if present. (it shouldn't be, as it
- fails the test against xlfd-tight-regexp in fontset.el). */
- {
- int len = strlen (remainder);
- if (len > 0 && remainder[len-1] == '-')
- remainder[len-1] = 0;
- }
- encoding = remainder;
-#if 0
- if (strncmp (encoding, "*-", 2) == 0)
- encoding += 2;
-#endif
- lplogfont->lfCharSet = x_to_w32_charset (encoding);
- }
- else
- {
- int fields;
- char name[100], height[10], width[10], weight[20];
-
- fields = sscanf (lpxstr,
- "%99[^:]:%9[^:]:%9[^:]:%19s",
- name, height, width, weight);
-
- if (fields == EOF) return (FALSE);
-
- if (fields > 0)
- {
- strncpy (lplogfont->lfFaceName, name, LF_FACESIZE);
- lplogfont->lfFaceName[LF_FACESIZE-1] = 0;
- }
- else
- {
- lplogfont->lfFaceName[0] = 0;
- }
-
- fields--;
-
- if (fields > 0)
- lplogfont->lfHeight = atoi (height);
-
- fields--;
-
- if (fields > 0)
- lplogfont->lfWidth = atoi (width);
-
- fields--;
-
- lplogfont->lfWeight = x_to_w32_weight ((fields > 0 ? weight : ""));
- }
-
- /* This makes TrueType fonts work better. */
- lplogfont->lfHeight = - eabs (lplogfont->lfHeight);
-
- return (TRUE);
-}
-
-
-\f
DEFUN ("xw-color-defined-p", Fxw_color_defined_p, Sxw_color_defined_p, 1, 2, 0,
doc: /* Internal function called by `color-defined-p', which see. */)
(color, frame)
{
struct w32_display_info *dpyinfo = check_x_display_info (display);
- return make_number (dpyinfo->width);
+ return make_number (x_display_pixel_width (dpyinfo));
}
DEFUN ("x-display-pixel-height", Fx_display_pixel_height,
{
struct w32_display_info *dpyinfo = check_x_display_info (display);
- return make_number (dpyinfo->height);
+ return make_number (x_display_pixel_height (dpyinfo));
}
DEFUN ("x-display-planes", Fx_display_planes, Sx_display_planes,
error ("Cannot connect to server %s", SDATA (name));
w32_in_use = 1;
- XSETFASTINT (Vwindow_system_version, 3);
+ XSETFASTINT (Vwindow_system_version, w32_major_version);
return dpyinfo;
}
Fexpand_file_name (build_string ("rgb.txt"),
Fsymbol_value (intern ("data-directory")));
- Vw32_color_map = Fw32_load_color_file (color_file);
+ Vw32_color_map = Fx_load_color_file (color_file);
UNGCPRO;
}
w32_in_use = 1;
- XSETFASTINT (Vwindow_system_version, 3);
+ XSETFASTINT (Vwindow_system_version, w32_major_version);
return Qnil;
}
Busy cursor
***********************************************************************/
-/* Non-zero means an hourglass cursor is currently shown. */
-
-static int hourglass_shown_p;
-
-/* Number of seconds to wait before displaying an hourglass cursor. */
-
-static Lisp_Object Vhourglass_delay;
-
/* Default number of seconds to wait before displaying an hourglass
- cursor. */
-
+ cursor. Duplicated from xdisp.c, but cannot use the version there
+ due to lack of atimers on w32. */
#define DEFAULT_HOURGLASS_DELAY 1
+extern Lisp_Object Vhourglass_delay;
/* Return non-zero if houglass timer has been started or hourglass is shown. */
+/* PENDING: if W32 can use atimers (atimer.[hc]) then the common impl in
+ xdisp.c could be used. */
int
hourglass_started ()
}
if (hourglass_shown_p)
- hide_hourglass ();
+ w32_hide_hourglass ();
}
to indicate that an hourglass cursor is shown. */
static void
-show_hourglass (f)
+w32_show_hourglass (f)
struct frame *f;
{
if (!hourglass_shown_p)
/* Hide the hourglass cursor on all frames, if it is currently shown. */
static void
-hide_hourglass ()
+w32_hide_hourglass ()
{
if (hourglass_shown_p)
{
struct frame *f = x_window_to_frame (&one_w32_display_info,
hourglass_hwnd);
+ if (f)
+ f->output_data.w32->hourglass_p = 0;
+ else
+ /* If frame was deleted, restore to selected frame's cursor. */
+ f = SELECTED_FRAME ();
+
+ if (FRAME_W32_P (f))
+ SetCursor (f->output_data.w32->current_cursor);
+ else
+ /* No cursors on non GUI frames - restore to stock arrow cursor. */
+ SetCursor (w32_load_cursor (IDC_ARROW));
- f->output_data.w32->hourglass_p = 0;
- SetCursor (f->output_data.w32->current_cursor);
hourglass_shown_p = 0;
}
}
this frame has a specified name. */
Vx_resource_name = Vinvocation_name;
-#ifdef MULTI_KBOARD
kb = dpyinfo->terminal->kboard;
-#else
- kb = &the_only_kboard;
-#endif
/* Get the name of the frame to use for resource lookup. */
- name = w32_get_arg (parms, Qname, "name", "Name", RES_TYPE_STRING);
+ name = x_get_arg (dpyinfo, parms, Qname, "name", "Name", RES_TYPE_STRING);
if (!STRINGP (name)
&& !EQ (name, Qunbound)
&& !NILP (name))
FRAME_FONTSET (f) = -1;
f->icon_name = Qnil;
-#if 0 /* GLYPH_DEBUG TODO: image support. */
+#if GLYPH_DEBUG
image_cache_refcount = FRAME_IMAGE_CACHE (f)->refcount;
dpyinfo_refcount = dpyinfo->reference_count;
#endif /* GLYPH_DEBUG */
-#ifdef MULTI_KBOARD
FRAME_KBOARD (f) = kb;
-#endif
f->output_data.w32->parent_desc = FRAME_W32_DISPLAY_INFO (f)->root_window;
f->output_data.w32->explicit_parent = 0;
{
Lisp_Object value;
- value = w32_get_arg (parms, Qinternal_border_width,
+ value = x_get_arg (dpyinfo, parms, Qinternal_border_width,
"internalBorder", "internalBorder", RES_TYPE_NUMBER);
if (! EQ (value, Qunbound))
parms = Fcons (Fcons (Qinternal_border_width, value),
of the tooltip frame appear in pink. Prevent this. */
{
Lisp_Object bg = Fframe_parameter (frame, Qbackground_color);
+ Lisp_Object fg = Fframe_parameter (frame, Qforeground_color);
+ Lisp_Object colors = Qnil;
/* Set tip_frame here, so that */
tip_frame = frame;
- call1 (Qface_set_after_frame_default, frame);
+ call2 (Qface_set_after_frame_default, frame, Qnil);
if (!EQ (bg, Fframe_parameter (frame, Qbackground_color)))
- Fmodify_frame_parameters (frame, Fcons (Fcons (Qbackground_color, bg),
- Qnil));
+ colors = Fcons (Fcons (Qbackground_color, bg), colors);
+ if (!EQ (fg, Fframe_parameter (frame, Qforeground_color)))
+ colors = Fcons (Fcons (Qforeground_color, fg), colors);
+
+ if (!NILP (colors))
+ Fmodify_frame_parameters (frame, colors);
}
f->no_split = 1;
/* Default min and max values. */
min_x = 0;
min_y = 0;
- max_x = FRAME_W32_DISPLAY_INFO (f)->width;
- max_y = FRAME_W32_DISPLAY_INFO (f)->height;
+ max_x = x_display_pixel_width (FRAME_W32_DISPLAY_INFO (f));
+ max_y = x_display_pixel_height (FRAME_W32_DISPLAY_INFO (f));
BLOCK_INPUT;
GetCursorPos (&pt);
if (FRAMEP (frame))
{
- Fdelete_frame (frame, Qnil);
+ delete_frame (frame, Qnil);
deleted = Qt;
}
***********************************************************************/
extern Lisp_Object Qfile_name_history;
-/* Callback for altering the behaviour of the Open File dialog.
+/* Callback for altering the behavior of the Open File dialog.
Makes the Filename text field contain "Current Directory" and be
read-only when "Directories" is selected in the filter. This
allows us to work around the fact that the standard Open File
}
+/* Moving files to the system recycle bin.
+ Used by `move-file-to-trash' instead of the default moving to ~/.Trash */
+DEFUN ("system-move-file-to-trash", Fsystem_move_file_to_trash,
+ Ssystem_move_file_to_trash, 1, 1, 0,
+ doc: /* Move file or directory named FILENAME to the recycle bin. */)
+ (filename)
+ Lisp_Object filename;
+{
+ Lisp_Object handler;
+ Lisp_Object encoded_file;
+ Lisp_Object operation;
+
+ operation = Qdelete_file;
+ if (!NILP (Ffile_directory_p (filename))
+ && NILP (Ffile_symlink_p (filename)))
+ {
+ operation = Qdelete_directory;
+ filename = Fdirectory_file_name (filename);
+ }
+ filename = Fexpand_file_name (filename, Qnil);
+
+ handler = Ffind_file_name_handler (filename, operation);
+ if (!NILP (handler))
+ return call2 (handler, operation, filename);
+
+ encoded_file = ENCODE_FILE (filename);
+
+ {
+ const char * path;
+ SHFILEOPSTRUCT file_op;
+ char tmp_path[MAX_PATH + 1];
+
+ path = map_w32_filename (SDATA (encoded_file), NULL);
+
+ /* On Windows, write permission is required to delete/move files. */
+ _chmod (path, 0666);
+
+ bzero (tmp_path, sizeof (tmp_path));
+ strcpy (tmp_path, path);
+
+ bzero (&file_op, sizeof (file_op));
+ file_op.hwnd = HWND_DESKTOP;
+ file_op.wFunc = FO_DELETE;
+ file_op.pFrom = tmp_path;
+ file_op.fFlags = FOF_SILENT | FOF_NOCONFIRMATION | FOF_ALLOWUNDO
+ | FOF_NOERRORUI | FOF_NO_CONNECTED_ELEMENTS;
+ file_op.fAnyOperationsAborted = FALSE;
+
+ if (SHFileOperation (&file_op) != 0)
+ report_file_error ("Removing old name", list1 (filename));
+ }
+ return Qnil;
+}
+
\f
/***********************************************************************
w32 specialized functions
if (system_status.BatteryFlag & 128)
{
battery_status = build_string ("N/A");
- battery_status_symbol = build_string ("");
+ battery_status_symbol = empty_unibyte_string;
}
else if (system_status.BatteryFlag & 8)
{
else if (system_status.BatteryFlag & 1)
{
battery_status = build_string ("high");
- battery_status_symbol = build_string ("");
+ battery_status_symbol = empty_unibyte_string;
}
else
{
battery_status = build_string ("medium");
- battery_status_symbol = build_string ("");
+ battery_status_symbol = empty_unibyte_string;
}
if (system_status.BatteryLifePercent > 100)
0, /* x_set_wait_for_wm, */
x_set_fullscreen,
x_set_font_backend,
- 0 /* x_set_alpha, */
+ x_set_alpha
};
void
bass-down, bass-boost, bass-up, treble-down, treble-up */);
w32_pass_multimedia_buttons_to_system = 1;
+#if 0 /* TODO: Mouse cursor customization. */
DEFVAR_LISP ("x-pointer-shape", &Vx_pointer_shape,
doc: /* The shape of the pointer when over text.
Changing the value does not affect existing frames
or when you set the mouse color. */);
Vx_hourglass_pointer_shape = Qnil;
- DEFVAR_BOOL ("display-hourglass", &display_hourglass_p,
- doc: /* Non-zero means Emacs displays an hourglass pointer on window systems. */);
- display_hourglass_p = 1;
-
- DEFVAR_LISP ("hourglass-delay", &Vhourglass_delay,
- doc: /* *Seconds to wait before displaying an hourglass pointer.
-Value must be an integer or float. */);
- Vhourglass_delay = make_number (DEFAULT_HOURGLASS_DELAY);
-
DEFVAR_LISP ("x-sensitive-text-pointer-shape",
&Vx_sensitive_text_pointer_shape,
doc: /* The shape of the pointer when over mouse-sensitive text.
This variable takes effect when you create a new frame
or when you set the mouse color. */);
Vx_window_horizontal_drag_shape = Qnil;
+#endif
DEFVAR_LISP ("x-cursor-fore-pixel", &Vx_cursor_fore_pixel,
doc: /* A string indicating the foreground color of the cursor box. */);
only be necessary if the default setting causes problems. */);
w32_strict_painting = 1;
- DEFVAR_LISP ("w32-charset-info-alist",
- &Vw32_charset_info_alist,
- doc: /* Alist linking Emacs character sets to Windows fonts and codepages.
-Each entry should be of the form:
-
- (CHARSET_NAME . (WINDOWS_CHARSET . CODEPAGE))
-
-where CHARSET_NAME is a string used in font names to identify the charset,
-WINDOWS_CHARSET is a symbol that can be one of:
-w32-charset-ansi, w32-charset-default, w32-charset-symbol,
-w32-charset-shiftjis, w32-charset-hangeul, w32-charset-gb2312,
-w32-charset-chinesebig5,
-w32-charset-johab, w32-charset-hebrew,
-w32-charset-arabic, w32-charset-greek, w32-charset-turkish,
-w32-charset-vietnamese, w32-charset-thai, w32-charset-easteurope,
-w32-charset-russian, w32-charset-mac, w32-charset-baltic,
-w32-charset-unicode,
-or w32-charset-oem.
-CODEPAGE should be an integer specifying the codepage that should be used
-to display the character set, t to do no translation and output as Unicode,
-or nil to do no translation and output as 8 bit (or multibyte on far-east
-versions of Windows) characters. */);
- Vw32_charset_info_alist = Qnil;
-
- DEFSYM (Qw32_charset_ansi, "w32-charset-ansi");
- DEFSYM (Qw32_charset_symbol, "w32-charset-symbol");
- DEFSYM (Qw32_charset_default, "w32-charset-default");
- DEFSYM (Qw32_charset_shiftjis, "w32-charset-shiftjis");
- DEFSYM (Qw32_charset_hangeul, "w32-charset-hangeul");
- DEFSYM (Qw32_charset_chinesebig5, "w32-charset-chinesebig5");
- DEFSYM (Qw32_charset_gb2312, "w32-charset-gb2312");
- DEFSYM (Qw32_charset_oem, "w32-charset-oem");
-
-#ifdef JOHAB_CHARSET
- {
- static int w32_extra_charsets_defined = 1;
- DEFVAR_BOOL ("w32-extra-charsets-defined", &w32_extra_charsets_defined,
- doc: /* Internal variable. */);
-
- DEFSYM (Qw32_charset_johab, "w32-charset-johab");
- DEFSYM (Qw32_charset_easteurope, "w32-charset-easteurope");
- DEFSYM (Qw32_charset_turkish, "w32-charset-turkish");
- DEFSYM (Qw32_charset_baltic, "w32-charset-baltic");
- DEFSYM (Qw32_charset_russian, "w32-charset-russian");
- DEFSYM (Qw32_charset_arabic, "w32-charset-arabic");
- DEFSYM (Qw32_charset_greek, "w32-charset-greek");
- DEFSYM (Qw32_charset_hebrew, "w32-charset-hebrew");
- DEFSYM (Qw32_charset_vietnamese, "w32-charset-vietnamese");
- DEFSYM (Qw32_charset_thai, "w32-charset-thai");
- DEFSYM (Qw32_charset_mac, "w32-charset-mac");
- }
-#endif
-
-#ifdef UNICODE_CHARSET
- {
- static int w32_unicode_charset_defined = 1;
- DEFVAR_BOOL ("w32-unicode-charset-defined",
- &w32_unicode_charset_defined,
- doc: /* Internal variable. */);
- DEFSYM (Qw32_charset_unicode, "w32-charset-unicode");
- }
-#endif
-
#if 0 /* TODO: Port to W32 */
defsubr (&Sx_change_window_property);
defsubr (&Sx_delete_window_property);
defsubr (&Sw32_define_rgb_color);
defsubr (&Sw32_default_color_map);
- defsubr (&Sw32_load_color_file);
defsubr (&Sw32_send_sys_command);
defsubr (&Sw32_shell_execute);
defsubr (&Sw32_register_hot_key);
hourglass_timer = 0;
hourglass_hwnd = NULL;
- hourglass_shown_p = 0;
+
defsubr (&Sx_show_tip);
defsubr (&Sx_hide_tip);
tip_timer = Qnil;
staticpro (&last_show_tip_args);
defsubr (&Sx_file_dialog);
+ defsubr (&Ssystem_move_file_to_trash);
}