Mercurial > hg > xemacs-beta
diff src/frame-msw.c @ 219:262b8bb4a523 r20-4b8
Import from CVS: tag r20-4b8
author | cvs |
---|---|
date | Mon, 13 Aug 2007 10:09:35 +0200 |
parents | 1f0dabaa0855 |
children | 6c0ae1f9357f |
line wrap: on
line diff
--- a/src/frame-msw.c Mon Aug 13 10:08:36 2007 +0200 +++ b/src/frame-msw.c Mon Aug 13 10:09:35 2007 +0200 @@ -63,9 +63,6 @@ 0, &request); FRAME_MSWINDOWS_DC(f) = GetDC(FRAME_MSWINDOWS_HANDLE(f)); SetTextAlign(FRAME_MSWINDOWS_DC(f), TA_BASELINE|TA_LEFT|TA_NOUPDATECP); - - /* XXX FIXME: This function should be made to do something */ - update_frame_face_values (f); } /* Called just before frame's properties are set, size is 10x10 or something */ @@ -86,7 +83,14 @@ mswindows_init_frame_3 (struct frame *f) { /* Don't do this earlier or we get a WM_PAINT before the frame is ready*/ - ShowWindow(FRAME_MSWINDOWS_HANDLE(f), SW_SHOWNORMAL); + ShowWindow (FRAME_MSWINDOWS_HANDLE(f), SW_SHOWNORMAL); + SetForegroundWindow (FRAME_MSWINDOWS_HANDLE(f)); +} + +static void +mswindows_focus_on_frame (struct frame *f) +{ + SetForegroundWindow (FRAME_MSWINDOWS_HANDLE(f)); } static void @@ -94,20 +98,97 @@ { if (f->frame_data) { - ReleaseDC(FRAME_MSWINDOWS_HANDLE(f), FRAME_MSWINDOWS_DC(f)); - DestroyWindow(FRAME_MSWINDOWS_HANDLE(f)); + mswindows_request_type request = { f }; + mswindows_make_request(WM_XEMACS_DESTROYWINDOW, 0, &request); } } static void mswindows_set_frame_size (struct frame *f, int cols, int rows) { + RECT rect1, rect2; + + GetWindowRect (FRAME_MSWINDOWS_HANDLE(f), &rect1); + rect2.left = rect2.top = 0; + char_to_pixel_size (f, cols, rows, &rect2.right, &rect2.bottom); + AdjustWindowRect (&rect2, GetWindowLong (FRAME_MSWINDOWS_HANDLE(f), + GWL_STYLE), FALSE); + MoveWindow (FRAME_MSWINDOWS_HANDLE(f), rect1.left, rect1.top, + rect2.right-rect2.left, rect2.bottom-rect2.top, TRUE); } static void mswindows_set_frame_position (struct frame *f, int xoff, int yoff) { + RECT rect; + + GetWindowRect (FRAME_MSWINDOWS_HANDLE(f), &rect); + MoveWindow (FRAME_MSWINDOWS_HANDLE(f), xoff, yoff, + rect.right-rect.left, rect.bottom-rect.top, TRUE); +} + +static void +mswindows_make_frame_visible (struct frame *f) +{ + if (f->iconified) + ShowWindow (FRAME_MSWINDOWS_HANDLE(f), SW_RESTORE); + else + ShowWindow (FRAME_MSWINDOWS_HANDLE(f), SW_SHOWNORMAL); + f->visible = 1; + f->iconified = 0; +} + +static void +mswindows_make_frame_invisible (struct frame *f) +{ + ShowWindow (FRAME_MSWINDOWS_HANDLE(f), SW_HIDE); + f->visible = -1; +} + +static int +mswindows_frame_visible_p (struct frame *f) +{ + return IsWindowVisible (FRAME_MSWINDOWS_HANDLE(f)) + && !IsIconic (FRAME_MSWINDOWS_HANDLE(f)); +} + + +static void +mswindows_iconify_frame (struct frame *f) +{ + ShowWindow (FRAME_MSWINDOWS_HANDLE(f), SW_MINIMIZE); + f->visible = 0; + f->iconified = 1; +} + +static int +mswindows_frame_iconified_p (struct frame *f) +{ + return IsIconic (FRAME_MSWINDOWS_HANDLE(f)); +} + +static void +mswindows_raise_frame (struct frame *f) +{ + BringWindowToTop (FRAME_MSWINDOWS_HANDLE(f)); + /* XXX Should we do SetWindowForeground too ? */ +} + +static void +mswindows_lower_frame (struct frame *f) +{ + RECT rect; + + GetWindowRect (FRAME_MSWINDOWS_HANDLE(f), &rect); + SetWindowPos (FRAME_MSWINDOWS_HANDLE(f), HWND_BOTTOM, rect.top, rect.left, + rect.right-rect.left, rect.bottom-rect.top, 0); +} + +static void +mswindows_set_title_from_bufbyte (struct frame *f, Bufbyte *title) +{ + SetWindowText (FRAME_MSWINDOWS_HANDLE(f), title); } static void @@ -190,7 +271,9 @@ x = rect.left; if (!y_specified_p) y = rect.top; - /* XXX FIXME: Should do AdjustWindowRect here like in mswindows_handle_request */ + + AdjustWindowRect (&rect, GetWindowLong (FRAME_MSWINDOWS_HANDLE(f), + GWL_STYLE), FALSE); MoveWindow (FRAME_MSWINDOWS_HANDLE(f), x, y, pixel_width, pixel_height, (width_specified_p || height_specified_p)); } @@ -205,26 +288,26 @@ CONSOLE_HAS_METHOD (mswindows, init_frame_2); CONSOLE_HAS_METHOD (mswindows, init_frame_3); /* CONSOLE_HAS_METHOD (mswindows, mark_frame); */ -/* CONSOLE_HAS_METHOD (mswindows, focus_on_frame); */ + CONSOLE_HAS_METHOD (mswindows, focus_on_frame); CONSOLE_HAS_METHOD (mswindows, delete_frame); /* CONSOLE_HAS_METHOD (mswindows, get_mouse_position); */ /* CONSOLE_HAS_METHOD (mswindows, set_mouse_position); */ -/* CONSOLE_HAS_METHOD (mswindows, raise_frame); */ -/* CONSOLE_HAS_METHOD (mswindows, lower_frame); */ -/* CONSOLE_HAS_METHOD (mswindows, make_frame_visible); */ -/* CONSOLE_HAS_METHOD (mswindows, make_frame_invisible); */ -/* CONSOLE_HAS_METHOD (mswindows, iconify_frame); */ + CONSOLE_HAS_METHOD (mswindows, raise_frame); + CONSOLE_HAS_METHOD (mswindows, lower_frame); + CONSOLE_HAS_METHOD (mswindows, make_frame_visible); + CONSOLE_HAS_METHOD (mswindows, make_frame_invisible); + CONSOLE_HAS_METHOD (mswindows, iconify_frame); CONSOLE_HAS_METHOD (mswindows, set_frame_size); CONSOLE_HAS_METHOD (mswindows, set_frame_position); /* CONSOLE_HAS_METHOD (mswindows, frame_property); */ /* CONSOLE_HAS_METHOD (mswindows, internal_frame_property_p); */ /* CONSOLE_HAS_METHOD (mswindows, frame_properties); */ CONSOLE_HAS_METHOD (mswindows, set_frame_properties); -/* CONSOLE_HAS_METHOD (mswindows, set_title_from_bufbyte); */ + CONSOLE_HAS_METHOD (mswindows, set_title_from_bufbyte); /* CONSOLE_HAS_METHOD (mswindows, set_icon_name_from_bufbyte); */ -/* CONSOLE_HAS_METHOD (mswindows, frame_visible_p); */ + CONSOLE_HAS_METHOD (mswindows, frame_visible_p); /* CONSOLE_HAS_METHOD (mswindows, frame_totally_visible_p); */ -/* CONSOLE_HAS_METHOD (mswindows, frame_iconified_p); */ + CONSOLE_HAS_METHOD (mswindows, frame_iconified_p); /* CONSOLE_HAS_METHOD (mswindows, set_frame_pointer); */ /* CONSOLE_HAS_METHOD (mswindows, set_frame_icon); */ /* CONSOLE_HAS_METHOD (mswindows, get_frame_parent); */