diff src/console-msw.h @ 428:3ecd8885ac67 r21-2-22

Import from CVS: tag r21-2-22
author cvs
date Mon, 13 Aug 2007 11:28:15 +0200
parents
children a5df635868b2
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/console-msw.h	Mon Aug 13 11:28:15 2007 +0200
@@ -0,0 +1,265 @@
+/* Define mswindows-specific console, device, and frame object for XEmacs.
+   Copyright (C) 1989, 1992, 1993, 1994, 1995 Free Software Foundation, Inc.
+   Copyright (C) 1994, 1995 Board of Trustees, University of Illinois.
+
+This file is part of XEmacs.
+
+XEmacs is free software; you can redistribute it and/or modify it
+under the terms of the GNU General Public License as published by the
+Free Software Foundation; either version 2, or (at your option) any
+later version.
+
+XEmacs is distributed in the hope that it will be useful, but WITHOUT
+ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+for more details.
+
+You should have received a copy of the GNU General Public License
+along with XEmacs; see the file COPYING.  If not, write to
+the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+Boston, MA 02111-1307, USA.  */
+
+/* Synched up with: Not in FSF. */
+
+
+/* Authorship:
+
+   Ultimately based on FSF, then later on JWZ work for Lemacs.
+   Rewritten over time by Ben Wing and Chuck Thompson.
+   Rewritten for mswindows by Jonathan Harris, November 1997 for 21.0.
+ */
+
+#ifndef _XEMACS_CONSOLE_MSW_H_
+#define _XEMACS_CONSOLE_MSW_H_
+
+#include "console.h"
+#ifdef CONST			/* I suspect this is safe */
+#undef CONST
+#endif
+#include <windows.h>
+#include <ddeml.h>	/* DDE management library */
+#if !defined(__CYGWIN32__) && !defined(__MINGW32__)
+#include <shellapi.h>	/* FileManager/Explorer drag and drop */
+#include <commctrl.h>
+#endif
+
+#ifdef HAVE_XPM
+#include <X11/xpm.h>
+#endif
+
+/*
+ * XXX FIXME: The following X modifier defs in events-mod.h clash with win32
+ * hotkey defs in winuser.h. For the moment lose the win32 versions.
+ * Maybe we should rename all of MOD_* to something that doesn't clash.
+ */
+#ifdef MOD_CONTROL
+#  undef MOD_CONTROL
+#endif  
+#ifdef MOD_ALT
+#  undef MOD_ALT
+#endif  
+#ifdef MOD_SHIFT
+#  undef MOD_SHIFT
+#endif  
+
+
+/* The name of the main window class */
+#define XEMACS_CLASS "XEmacs"
+
+#define XEMACS_CONTROL_CLASS "XEmacsControl"
+
+/*
+ * Console
+ */
+
+DECLARE_CONSOLE_TYPE (mswindows);
+
+struct mswindows_console
+{
+  int infd, outfd;
+};
+
+
+/*
+ * Device
+ */
+
+#define MSW_FONTSIZE (LF_FACESIZE*4+12)
+
+struct mswindows_font_enum
+{
+  char fontname[MSW_FONTSIZE];
+  struct mswindows_font_enum *next;
+};
+
+struct mswindows_device
+{
+  int logpixelsx, logpixelsy;
+  int planes, cells;
+  int horzres, vertres;		/* Size in pixels */
+  int horzsize, vertsize;	/* Size in mm */
+  int bitspixel;
+  struct mswindows_font_enum *fontlist;
+};
+
+#define DEVICE_MSWINDOWS_DATA(d) DEVICE_TYPE_DATA (d, mswindows)
+#define DEVICE_MSWINDOWS_LOGPIXELSX(d) 	(DEVICE_MSWINDOWS_DATA (d)->logpixelsx)
+#define DEVICE_MSWINDOWS_LOGPIXELSY(d) 	(DEVICE_MSWINDOWS_DATA (d)->logpixelsy)
+#define DEVICE_MSWINDOWS_PLANES(d) 	(DEVICE_MSWINDOWS_DATA (d)->planes)
+#define DEVICE_MSWINDOWS_CELLS(d) 	(DEVICE_MSWINDOWS_DATA (d)->cells)
+#define DEVICE_MSWINDOWS_HORZRES(d) 	(DEVICE_MSWINDOWS_DATA (d)->horzres)
+#define DEVICE_MSWINDOWS_VERTRES(d) 	(DEVICE_MSWINDOWS_DATA (d)->vertres)
+#define DEVICE_MSWINDOWS_HORZSIZE(d) 	(DEVICE_MSWINDOWS_DATA (d)->horzsize)
+#define DEVICE_MSWINDOWS_VERTSIZE(d) 	(DEVICE_MSWINDOWS_DATA (d)->vertsize)
+#define DEVICE_MSWINDOWS_BITSPIXEL(d) 	(DEVICE_MSWINDOWS_DATA (d)->bitspixel)
+#define DEVICE_MSWINDOWS_FONTLIST(d) 	(DEVICE_MSWINDOWS_DATA (d)->fontlist)
+
+
+/*
+ * Frame
+ */
+typedef struct
+{
+  int left;
+  int top;
+  int width;
+  int height;
+} XEMACS_RECT_WH;
+
+struct mswindows_frame
+{
+  /* win32 window handle */
+  HWND hwnd;
+
+  /* DC for this win32 window */
+  HDC hdc;
+
+  /* compatible DC for bitmap operations */
+  HDC cdc;
+
+  /* Time of last click event, for button 2 emul */
+  DWORD last_click_time;
+
+  /* Coordinates of last click event, screen-relative */
+  POINTS last_click_point;
+#ifdef HAVE_TOOLBARS
+  /* Toolbar hash table. See toolbar-msw.c */
+  Lisp_Object toolbar_hash_table;
+  unsigned int toolbar_checksum[4];
+#endif
+
+  /* Menu hash table. See menubar-msw.c */
+  Lisp_Object menu_hash_table;
+
+  /* Menu checksum. See menubar-msw.c */
+  unsigned int menu_checksum;
+
+  /* Widget glyphs attached to this frame. See glyphs-msw.c */
+  Lisp_Object widget_hash_table;
+
+  /* Frame title hash value. See frame-msw.c */
+  unsigned int title_checksum;
+
+  /* Real character width and height of the frame.
+     FRAME_{HEIGHT,WIDTH} do not work for pixel geometry! */
+  int charheight, charwidth;
+
+  /* Misc flags */
+  int button2_need_lbutton : 1;
+  int button2_need_rbutton : 1;
+  int button2_is_down : 1;
+  int ignore_next_lbutton_up : 1;
+  int ignore_next_rbutton_up : 1;
+  int sizing : 1;
+
+  /* Geometry, in characters, as specified by proplist during frame
+     creation. Memebers are set to -1 for unspecified */
+  XEMACS_RECT_WH* target_rect;
+};
+
+#define FRAME_MSWINDOWS_DATA(f) FRAME_TYPE_DATA (f, mswindows)
+
+#define FRAME_MSWINDOWS_HANDLE(f)	   (FRAME_MSWINDOWS_DATA (f)->hwnd)
+#define FRAME_MSWINDOWS_DC(f)		   (FRAME_MSWINDOWS_DATA (f)->hdc)
+#define FRAME_MSWINDOWS_CDC(f)		   (FRAME_MSWINDOWS_DATA (f)->cdc)
+#define FRAME_MSWINDOWS_MENU_HASH_TABLE(f) (FRAME_MSWINDOWS_DATA (f)->menu_hash_table)
+#define FRAME_MSWINDOWS_TOOLBAR_HASH_TABLE(f) \
+ (FRAME_MSWINDOWS_DATA (f)->toolbar_hash_table)
+#define FRAME_MSWINDOWS_WIDGET_HASH_TABLE(f) \
+ (FRAME_MSWINDOWS_DATA (f)->widget_hash_table)
+#define FRAME_MSWINDOWS_TOOLBAR_CHECKSUM(f,pos) \
+ (FRAME_MSWINDOWS_DATA (f)->toolbar_checksum[pos])
+#define FRAME_MSWINDOWS_MENU_CHECKSUM(f)  (FRAME_MSWINDOWS_DATA (f)->menu_checksum)
+#define FRAME_MSWINDOWS_TITLE_CHECKSUM(f) (FRAME_MSWINDOWS_DATA (f)->title_checksum)
+#define FRAME_MSWINDOWS_CHARWIDTH(f)	  (FRAME_MSWINDOWS_DATA (f)->charwidth)
+#define FRAME_MSWINDOWS_CHARHEIGHT(f)	  (FRAME_MSWINDOWS_DATA (f)->charheight)
+#define FRAME_MSWINDOWS_TARGET_RECT(f)	  (FRAME_MSWINDOWS_DATA (f)->target_rect)
+
+/* Frame check and validation macros */
+#define FRAME_MSWINDOWS_P(frm) CONSOLE_TYPESYM_MSWINDOWS_P (FRAME_TYPE (frm))
+#define CHECK_MSWINDOWS_FRAME(z) CHECK_FRAME_TYPE (z, mswindows)
+#define CONCHECK_MSWINDOWS_FRAME(z) CONCHECK_FRAME_TYPE (z, mswindows)
+
+/* win32 window LONG indices */
+#define XWL_FRAMEOBJ	0
+#define XWL_COUNT	1	/* Number of LONGs that we use */
+#define MSWINDOWS_WINDOW_EXTRA_BYTES	(XWL_COUNT*4)
+
+
+/*
+ * Events
+ */
+
+/* win32 messages / magic event types */
+#define EVENT_MSWINDOWS_MAGIC_TYPE(e)	\
+	((e)->event.magic.underlying_mswindows_event)
+#define XM_BUMPQUEUE	(WM_USER + 101)
+#define XM_MAPFRAME	(WM_USER + 102)
+#define XM_UNMAPFRAME	(WM_USER + 103)
+
+
+/*
+ * Random globals
+ */
+
+/* win32 "Windows" procedure */
+LRESULT WINAPI mswindows_wnd_proc (HWND hwnd, UINT msg, WPARAM wParam,
+				   LPARAM lParam);
+LRESULT WINAPI mswindows_control_wnd_proc (HWND hwnd,
+					   UINT msg, WPARAM wParam,
+					   LPARAM lParam);
+
+void mswindows_redraw_exposed_area (struct frame *f, int x, int y, 
+				    int width, int height);
+void mswindows_size_frame_internal (struct frame* f, XEMACS_RECT_WH* dest);
+void mswindows_enqueue_magic_event (HWND hwnd, UINT message);
+
+/* win32 DDE management library */
+#define MSWINDOWS_DDE_ITEM_OPEN "Open"
+extern DWORD mswindows_dde_mlid;
+extern HSZ mswindows_dde_service;
+extern HSZ mswindows_dde_topic_system;
+extern HSZ mswindows_dde_item_open;
+HDDEDATA CALLBACK mswindows_dde_callback (UINT uType, UINT uFmt, HCONV hconv,
+					  HSZ hszTopic, HSZ hszItem, HDDEDATA hdata,
+					  DWORD dwData1, DWORD dwData2);
+
+void mswindows_enqueue_misc_user_event (Lisp_Object channel,
+					Lisp_Object function,
+					Lisp_Object object);
+Lisp_Object mswindows_cancel_dispatch_event (struct Lisp_Event* event);
+Lisp_Object mswindows_pump_outstanding_events (void);
+Lisp_Object mswindows_protect_modal_loop (Lisp_Object (*bfun) (Lisp_Object barg),
+					  Lisp_Object barg);
+void mswindows_unmodalize_signal_maybe (void);
+
+#ifdef HAVE_WIN32_PROCESSES
+HANDLE get_nt_process_handle (struct Lisp_Process *p);
+#endif
+
+extern Lisp_Object Vmswindows_frame_being_created;
+extern Lisp_Object mswindows_frame_being_created;
+
+void mswindows_enumerate_fonts (struct device *d);
+
+#endif /* _XEMACS_CONSOLE_MSW_H_ */