comparison src/frame-msw.c @ 223:2c611d1463a6 r20-4b10

Import from CVS: tag r20-4b10
author cvs
date Mon, 13 Aug 2007 10:10:54 +0200
parents 6c0ae1f9357f
children 12579d965149
comparison
equal deleted inserted replaced
222:aae4c8b01452 223:2c611d1463a6
36 36
37 #include "buffer.h" 37 #include "buffer.h"
38 #include "frame.h" 38 #include "frame.h"
39 #include "events.h" 39 #include "events.h"
40 40
41 #define MSWINDOWS_FRAME_STYLE WS_CLIPCHILDREN|WS_CLIPSIBLINGS|WS_OVERLAPPEDWINDOW
42 #define MSWINDOWS_POPUP_STYLE WS_CLIPCHILDREN|WS_CLIPSIBLINGS|WS_CAPTION|WS_POPUP
43
44 #define MSWINDOWS_FRAME_EXSTYLE WS_EX_OVERLAPPEDWINDOW
45 #define MSWINDOWS_POPUP_EXSTYLE WS_EX_OVERLAPPEDWINDOW
46
47 #ifdef HAVE_MENUBARS
48 #define ADJR_MENUFLAG TRUE
49 #else
50 #define ADJR_MENUFLAG FALSE
51 #endif
52
41 /* Default properties to use when creating frames. */ 53 /* Default properties to use when creating frames. */
42 Lisp_Object Vdefault_mswindows_frame_plist; 54 Lisp_Object Vdefault_mswindows_frame_plist;
43 /* Lisp_Object Qname, Qheight, Qwidth, Qinitially_unmapped, Qpopup, Qtop, Qleft; */ 55 /* Lisp_Object Qname, Qheight, Qwidth, Qinitially_unmapped, Qpopup, Qtop, Qleft; */
44 Lisp_Object Qinitially_unmapped, Qpopup; 56 Lisp_Object Qinitially_unmapped, Qpopup;
45 57
46 static void 58 static void
47 mswindows_init_frame_1 (struct frame *f, Lisp_Object props) 59 mswindows_init_frame_1 (struct frame *f, Lisp_Object props)
48 { 60 {
49 mswindows_request_type request = { f, &props };
50 Lisp_Object device = FRAME_DEVICE (f); 61 Lisp_Object device = FRAME_DEVICE (f);
51 struct device *d = XDEVICE (device); 62 struct device *d = XDEVICE (device);
52 Lisp_Object lisp_window_id, initially_unmapped; 63 Lisp_Object lisp_window_id, initially_unmapped;
64 Lisp_Object name, height, width, popup, top, left;
65 Lisp_Object frame_obj;
66 int pixel_width, pixel_height;
67 RECT rect;
68 DWORD style, exstyle;
69 HWND hwnd;
70
53 initially_unmapped = Fplist_get (props, Qinitially_unmapped, Qnil); 71 initially_unmapped = Fplist_get (props, Qinitially_unmapped, Qnil);
54 72 name = Fplist_get (props, Qname, Qnil);
55 #if 0 73 height = Fplist_get (props, Qheight, Qnil);
56 if (NILP (DEVICE_SELECTED_FRAME (d)) && /* first frame on the device */ 74 width = Fplist_get (props, Qwidth, Qnil);
57 NILP (initially_unmapped)) 75 popup = Fplist_get (props, Qpopup, Qnil);
58 f->visible = 1; 76 top = Fplist_get (props, Qtop, Qnil);
59 #endif 77 left = Fplist_get (props, Qleft, Qnil);
60 78
61 f->frame_data = xnew_and_zero (struct mswindows_frame); 79 f->frame_data = xnew_and_zero (struct mswindows_frame);
62 FRAME_MSWINDOWS_HANDLE(f) = (HWND)mswindows_make_request(WM_XEMACS_CREATEWINDOW, 80 FRAME_WIDTH (f) = INTP(width) ? XINT(width) : 80;
63 0, &request); 81 FRAME_HEIGHT (f) = INTP(height) ? XINT(height) : 30;
82 char_to_pixel_size (f, FRAME_WIDTH(f), FRAME_HEIGHT (f),
83 &FRAME_PIXWIDTH (f), &FRAME_PIXHEIGHT (f));
84
85 style = (NILP(popup)) ? MSWINDOWS_FRAME_STYLE : MSWINDOWS_POPUP_STYLE;
86 exstyle = (NILP(popup)) ? MSWINDOWS_FRAME_EXSTYLE : MSWINDOWS_POPUP_EXSTYLE;
87 rect.left = rect.top = 0;
88 rect.right = FRAME_PIXWIDTH (f);
89 rect.bottom = FRAME_PIXHEIGHT (f);
90
91 FRAME_MSWINDOWS_DATA(f)->button2_need_lbutton = 0;
92 FRAME_MSWINDOWS_DATA(f)->button2_need_rbutton = 0;
93 FRAME_MSWINDOWS_DATA(f)->button2_is_down = 0;
94 FRAME_MSWINDOWS_DATA(f)->ignore_next_lbutton_up = 0;
95 FRAME_MSWINDOWS_DATA(f)->ignore_next_rbutton_up = 0;
96 FRAME_MSWINDOWS_DATA(f)->sizing = 0;
97
98 AdjustWindowRectEx(&rect, style, ADJR_MENUFLAG, exstyle);
99
100 FRAME_MSWINDOWS_HANDLE(f) =
101 CreateWindowEx (exstyle,
102 XEMACS_CLASS,
103 STRINGP(f->name) ? XSTRING_DATA(f->name) :
104 (STRINGP(name) ? XSTRING_DATA(name) : XEMACS_CLASS),
105 style,
106 INTP(left) ? XINT(left) : CW_USEDEFAULT,
107 INTP(top) ? XINT(top) : CW_USEDEFAULT,
108 rect.right-rect.left, rect.bottom-rect.top,
109 NULL, NULL, NULL, NULL);
110 XSETFRAME (frame_obj, f);
111 SetWindowLong (FRAME_MSWINDOWS_HANDLE(f), XWL_FRAMEOBJ, (LONG)frame_obj);
64 FRAME_MSWINDOWS_DC(f) = GetDC(FRAME_MSWINDOWS_HANDLE(f)); 112 FRAME_MSWINDOWS_DC(f) = GetDC(FRAME_MSWINDOWS_HANDLE(f));
65 SetTextAlign(FRAME_MSWINDOWS_DC(f), TA_BASELINE|TA_LEFT|TA_NOUPDATECP); 113 SetTextAlign(FRAME_MSWINDOWS_DC(f), TA_BASELINE|TA_LEFT|TA_NOUPDATECP);
66 } 114 }
67 115
68 /* Called just before frame's properties are set, size is 10x10 or something */ 116 /* Called just before frame's properties are set, size is 10x10 or something */
89 static void 137 static void
90 mswindows_delete_frame (struct frame *f) 138 mswindows_delete_frame (struct frame *f)
91 { 139 {
92 if (f->frame_data) 140 if (f->frame_data)
93 { 141 {
94 mswindows_request_type request = { f }; 142 ReleaseDC(FRAME_MSWINDOWS_HANDLE(f), FRAME_MSWINDOWS_DC(f));
95 mswindows_make_request(WM_XEMACS_DESTROYWINDOW, 0, &request); 143 DestroyWindow(FRAME_MSWINDOWS_HANDLE(f));
96 } 144 }
97 } 145 }
98 146
99 static void 147 static void
100 mswindows_set_frame_size (struct frame *f, int cols, int rows) 148 mswindows_set_frame_size (struct frame *f, int cols, int rows)
102 RECT rect1, rect2; 150 RECT rect1, rect2;
103 151
104 GetWindowRect (FRAME_MSWINDOWS_HANDLE(f), &rect1); 152 GetWindowRect (FRAME_MSWINDOWS_HANDLE(f), &rect1);
105 rect2.left = rect2.top = 0; 153 rect2.left = rect2.top = 0;
106 char_to_pixel_size (f, cols, rows, &rect2.right, &rect2.bottom); 154 char_to_pixel_size (f, cols, rows, &rect2.right, &rect2.bottom);
107 AdjustWindowRect (&rect2, GetWindowLong (FRAME_MSWINDOWS_HANDLE(f), 155
108 GWL_STYLE), FALSE); 156 AdjustWindowRectEx (&rect2,
157 GetWindowLong (FRAME_MSWINDOWS_HANDLE(f), GWL_STYLE),
158 GetMenu (FRAME_MSWINDOWS_HANDLE(f)) != NULL,
159 GetWindowLong (FRAME_MSWINDOWS_HANDLE(f), GWL_EXSTYLE));
160
109 MoveWindow (FRAME_MSWINDOWS_HANDLE(f), rect1.left, rect1.top, 161 MoveWindow (FRAME_MSWINDOWS_HANDLE(f), rect1.left, rect1.top,
110 rect2.right-rect2.left, rect2.bottom-rect2.top, TRUE); 162 rect2.right-rect2.left, rect2.bottom-rect2.top, TRUE);
111 } 163 }
112 164
113 165
263 if (!x_specified_p) 315 if (!x_specified_p)
264 x = rect.left; 316 x = rect.left;
265 if (!y_specified_p) 317 if (!y_specified_p)
266 y = rect.top; 318 y = rect.top;
267 319
268 AdjustWindowRect (&rect, GetWindowLong (FRAME_MSWINDOWS_HANDLE(f), 320 AdjustWindowRectEx (&rect,
269 GWL_STYLE), FALSE); 321 GetWindowLong (FRAME_MSWINDOWS_HANDLE(f), GWL_STYLE),
322 GetMenu (FRAME_MSWINDOWS_HANDLE(f)) != NULL,
323 GetWindowLong (FRAME_MSWINDOWS_HANDLE(f), GWL_EXSTYLE));
324
270 MoveWindow (FRAME_MSWINDOWS_HANDLE(f), x, y, pixel_width, pixel_height, 325 MoveWindow (FRAME_MSWINDOWS_HANDLE(f), x, y, pixel_width, pixel_height,
271 (width_specified_p || height_specified_p)); 326 (width_specified_p || height_specified_p));
272 } 327 }
273 } 328 }
274 329