/* 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.
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. */
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)
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. */
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;
}
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
if (!dpyinfo->terminal->name)
error ("Terminal is not live, can't create new frames on it");
x_default_parameter (f, parameters, Qborder_width, make_number (2),
"borderWidth", "BorderWidth", RES_TYPE_NUMBER);
- /* We recognize either internalBorderWidth or internalBorder
+ /* We recognize either internalBorderWidth or internalBorder
(which is what xterm calls it). */
if (NILP (Fassq (Qinternal_border_width, parameters)))
{
{
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;
}
{
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 = x_get_arg (dpyinfo, parms, Qname, "name", "Name", RES_TYPE_STRING);
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;
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;
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;
}
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)
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
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. */);
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);