Mercurial > hg > xemacs-beta
diff src/frame-x.c @ 5178:97eb4942aec8
merge
author | Ben Wing <ben@xemacs.org> |
---|---|
date | Mon, 29 Mar 2010 21:28:13 -0500 |
parents | 8b2f75cecb89 7be849cb8828 |
children | 6466bc9ebf15 |
line wrap: on
line diff
--- a/src/frame-x.c Tue Feb 23 07:28:35 2010 -0600 +++ b/src/frame-x.c Mon Mar 29 21:28:13 2010 -0500 @@ -1,6 +1,7 @@ /* Functions for the X window system. Copyright (C) 1989, 1992-5, 1997 Free Software Foundation, Inc. Copyright (C) 1995, 1996, 2001, 2002, 2004, 2010 Ben Wing. + Copyright (C) 2010 Didier Verna This file is part of XEmacs. @@ -74,11 +75,9 @@ }; #ifdef NEW_GC -DEFINE_LRECORD_IMPLEMENTATION ("x-frame", x_frame, - 1, /*dumpable-flag*/ - 0, 0, 0, 0, 0, - x_frame_data_description_1, - Lisp_X_Frame); +DEFINE_DUMPABLE_INTERNAL_LISP_OBJECT ("x-frame", x_frame, + 0, x_frame_data_description_1, + Lisp_X_Frame); #else /* not NEW_GC */ extern const struct sized_memory_description x_frame_data_description; @@ -537,6 +536,23 @@ *y = xwa.y; } +void x_get_frame_text_position (struct frame *f) +{ + Display *dpy = DEVICE_X_DISPLAY (XDEVICE (FRAME_DEVICE (f))); + Window window = XtWindow (FRAME_X_TEXT_WIDGET (f)); + Window root, child; + int x, y; + unsigned int width, height, border_width; + unsigned int depth; + + XGetGeometry (dpy, window, &root, &x, &y, &width, &height, &border_width, + &depth); + XTranslateCoordinates (dpy, window, root, 0, 0, &x, &y, &child); + + FRAME_X_X (f) = x; + FRAME_X_Y (f) = y; +} + #if 0 static void x_smash_bastardly_shell_position (Widget shell) @@ -1434,16 +1450,13 @@ { struct window *win = XWINDOW (f->root_window); - WINDOW_LEFT (win) = FRAME_LEFT_BORDER_END (f) - + FRAME_LEFT_GUTTER_BOUNDS (f); - WINDOW_TOP (win) = FRAME_TOP_BORDER_END (f) - + FRAME_TOP_GUTTER_BOUNDS (f); + WINDOW_LEFT (win) = FRAME_PANED_LEFT_EDGE (f); + WINDOW_TOP (win) = FRAME_PANED_TOP_EDGE (f); if (!NILP (f->minibuffer_window)) { win = XWINDOW (f->minibuffer_window); - WINDOW_LEFT (win) = FRAME_LEFT_BORDER_END (f) - + FRAME_LEFT_GUTTER_BOUNDS (f); + WINDOW_LEFT (win) = FRAME_PANED_LEFT_EDGE (f); } } @@ -2035,7 +2048,7 @@ { /* zero out all slots. */ #ifdef NEW_GC - f->frame_data = alloc_lrecord_type (struct x_frame, &lrecord_x_frame); + f->frame_data = XX_FRAME (ALLOC_NORMAL_LISP_OBJECT (x_frame)); #else /* not NEW_GC */ f->frame_data = xnew_and_zero (struct x_frame); #endif /* not NEW_GC */ @@ -2119,9 +2132,13 @@ static void x_init_frame_3 (struct frame *f) { - /* Pop up the frame. */ - + /* #### NOTE: This whole business of splitting frame initialization into + #### different functions is somewhat messy. The latest one seems a good + #### place to initialize the edit widget's position because we're sure + #### that the frame is now relalized. -- dvl */ + x_popup_frame (f); + x_get_frame_text_position (f); } static void @@ -2748,7 +2765,7 @@ syms_of_frame_x (void) { #ifdef NEW_GC - INIT_LRECORD_IMPLEMENTATION (x_frame); + INIT_LISP_OBJECT (x_frame); #endif /* NEW_GC */ DEFSYMBOL (Qoverride_redirect);