Ultimately based on FSF.
Substantially rewritten for XEmacs by Ben Wing.
Rewritten for mswindows by Jonathan Harris, November 1997 for 21.0.
+ Graphics features added and frame resizing fiddled with by Andy Piper.
*/
#include <config.h>
int pixel_width, pixel_height;
int size_p = (dest->width >=0 || dest->height >=0);
int move_p = (dest->top >=0 || dest->left >=0);
-
+ struct device* d = XDEVICE (FRAME_DEVICE (f));
char_to_real_pixel_size (f, dest->width, dest->height, &pixel_width, &pixel_height);
if (dest->width < 0)
dest->left = rect.left;
if (dest->top < 0)
dest->top = rect.top;
-
+
rect.left = rect.top = 0;
rect.right = pixel_width;
rect.bottom = pixel_height;
GetMenu (FRAME_MSWINDOWS_HANDLE(f)) != NULL,
GetWindowLong (FRAME_MSWINDOWS_HANDLE(f), GWL_EXSTYLE));
+ /* resize and move the window so that it fits on the screen. This is
+ not restrictive since this will happen later anyway in WM_SIZE. We
+ have to do this after adjusting the rect to account for menubar
+ etc. */
+ pixel_width = rect.right - rect.left;
+ pixel_height = rect.bottom - rect.top;
+ if (pixel_width > DEVICE_MSWINDOWS_HORZRES(d))
+ {
+ pixel_width = DEVICE_MSWINDOWS_HORZRES(d);
+ size_p=1;
+ }
+ if (pixel_height > DEVICE_MSWINDOWS_VERTRES(d))
+ {
+ pixel_height = DEVICE_MSWINDOWS_VERTRES(d);
+ size_p=1;
+ }
+
+ /* adjust position so window is on screen */
+ if (dest->left + pixel_width > DEVICE_MSWINDOWS_HORZRES(d))
+ {
+ dest->left = DEVICE_MSWINDOWS_HORZRES(d) - pixel_width;
+ move_p=1;
+ }
+ if (dest->top + pixel_height > DEVICE_MSWINDOWS_VERTRES(d))
+ {
+ dest->top = DEVICE_MSWINDOWS_VERTRES(d) - pixel_height;
+ move_p=1;
+ }
+
if (IsIconic (FRAME_MSWINDOWS_HANDLE(f))
|| IsZoomed (FRAME_MSWINDOWS_HANDLE(f)))
ShowWindow (FRAME_MSWINDOWS_HANDLE(f), SW_RESTORE);
SetWindowPos (FRAME_MSWINDOWS_HANDLE(f), NULL,
- dest->left, dest->top, rect.right - rect.left, rect.bottom - rect.top,
+ dest->left, dest->top, pixel_width, pixel_height,
SWP_NOACTIVATE | SWP_NOZORDER | SWP_NOSENDCHANGING
| (size_p ? 0 : SWP_NOSIZE)
| (move_p ? 0 : SWP_NOMOVE));