* fileio.c (Fread_file_name): Pass Qt as fifth parameter to
[bpt/emacs.git] / src / widget.c
index ab4c4f8..57eef40 100644 (file)
@@ -183,8 +183,8 @@ get_default_char_pixel_size (ew, pixel_width, pixel_height)
      int* pixel_height;
 {
   struct frame* f = ew->emacs_frame.frame;
      int* pixel_height;
 {
   struct frame* f = ew->emacs_frame.frame;
-  *pixel_width = FONT_WIDTH (f->output_data.x->font);
-  *pixel_height = f->output_data.x->line_height;
+  *pixel_width = FRAME_COLUMN_WIDTH (f);
+  *pixel_height = FRAME_LINE_HEIGHT (f);
 }
 
 static void
 }
 
 static void
@@ -196,8 +196,8 @@ pixel_to_char_size (ew, pixel_width, pixel_height, char_width, char_height)
      int* char_height;
 {
   struct frame* f = ew->emacs_frame.frame;
      int* char_height;
 {
   struct frame* f = ew->emacs_frame.frame;
-  *char_width = PIXEL_TO_CHAR_WIDTH (f, (int) pixel_width);
-  *char_height = PIXEL_TO_CHAR_HEIGHT (f, (int) pixel_height);
+  *char_width = FRAME_PIXEL_WIDTH_TO_TEXT_COLS (f, (int) pixel_width);
+  *char_height = FRAME_PIXEL_HEIGHT_TO_TEXT_LINES (f, (int) pixel_height);
 }
 
 static void
 }
 
 static void
@@ -209,8 +209,8 @@ char_to_pixel_size (ew, char_width, char_height, pixel_width, pixel_height)
      Dimension* pixel_height;
 {
   struct frame* f = ew->emacs_frame.frame;
      Dimension* pixel_height;
 {
   struct frame* f = ew->emacs_frame.frame;
-  *pixel_width = CHAR_TO_PIXEL_WIDTH (f, char_width);
-  *pixel_height = CHAR_TO_PIXEL_HEIGHT (f, char_height);
+  *pixel_width = FRAME_TEXT_COLS_TO_PIXEL_WIDTH (f, char_width);
+  *pixel_height = FRAME_TEXT_LINES_TO_PIXEL_HEIGHT (f, char_height);
 }
 
 static void
 }
 
 static void
@@ -296,7 +296,7 @@ set_frame_size (ew)
      (the menubar and the parent of the menubar and all that sort of thing
      are managed by lwlib.)
 
      (the menubar and the parent of the menubar and all that sort of thing
      are managed by lwlib.)
 
-     The EmacsShell widget is simply a replacement for the Shell widget 
+     The EmacsShell widget is simply a replacement for the Shell widget
      which is able to deal with using an externally-supplied window instead
      of always creating its own.  It is not actually emacs specific, and
      should possibly have class "Shell" instead of "EmacsShell" to simplify
      which is able to deal with using an externally-supplied window instead
      of always creating its own.  It is not actually emacs specific, and
      should possibly have class "Shell" instead of "EmacsShell" to simplify
@@ -305,15 +305,15 @@ set_frame_size (ew)
    */
 
   /* Hairily merged geometry */
    */
 
   /* Hairily merged geometry */
-  unsigned int w = ew->emacs_frame.frame->width;
-  unsigned int h = ew->emacs_frame.frame->height;
-  
+  unsigned int w = FRAME_COLS (ew->emacs_frame.frame);
+  unsigned int h = FRAME_LINES (ew->emacs_frame.frame);
+
   Widget wmshell = get_wm_shell ((Widget) ew);
   /* Each Emacs shell is now independent and top-level.  */
   Widget wmshell = get_wm_shell ((Widget) ew);
   /* Each Emacs shell is now independent and top-level.  */
-  
+
   if (! XtIsSubclass (wmshell, shellWidgetClass)) abort ();
 
   if (! XtIsSubclass (wmshell, shellWidgetClass)) abort ();
 
-  /* We don't need this for the moment. The geometry is computed in 
+  /* We don't need this for the moment. The geometry is computed in
      xfns.c.  */
 #if 0
   /* If the EmacsFrame doesn't have a geometry but the shell does,
      xfns.c.  */
 #if 0
   /* If the EmacsFrame doesn't have a geometry but the shell does,
@@ -326,20 +326,20 @@ set_frame_size (ew)
      this bogus? I'm not sure.) */
   if (!ew->emacs_frame.iconic)
     XtVaGetValues (wmshell, XtNiconic, &ew->emacs_frame.iconic, NULL);
      this bogus? I'm not sure.) */
   if (!ew->emacs_frame.iconic)
     XtVaGetValues (wmshell, XtNiconic, &ew->emacs_frame.iconic, NULL);
-  
-  
+
+
   {
     char *geom = 0;
     XtVaGetValues (app_shell, XtNgeometry, &geom, NULL);
     if (geom)
       app_flags = XParseGeometry (geom, &app_x, &app_y, &app_w, &app_h);
   }
   {
     char *geom = 0;
     XtVaGetValues (app_shell, XtNgeometry, &geom, NULL);
     if (geom)
       app_flags = XParseGeometry (geom, &app_x, &app_y, &app_w, &app_h);
   }
-  
+
   if (ew->emacs_frame.geometry)
     frame_flags = XParseGeometry (ew->emacs_frame.geometry,
                                   &frame_x, &frame_y,
                                   &frame_w, &frame_h);
   if (ew->emacs_frame.geometry)
     frame_flags = XParseGeometry (ew->emacs_frame.geometry,
                                   &frame_x, &frame_y,
                                   &frame_w, &frame_h);
-  
+
   if (first_frame_p)
     {
       /* If this is the first frame created:
   if (first_frame_p)
     {
       /* If this is the first frame created:
@@ -420,7 +420,7 @@ set_frame_size (ew)
     }
 #endif /* 0 */
   {
     }
 #endif /* 0 */
   {
-    struct frame* frame = ew->emacs_frame.frame;
+    struct frame *f = ew->emacs_frame.frame;
     Dimension pixel_width, pixel_height;
 
     /* Take into account the size of the scrollbar.  Always use the
     Dimension pixel_width, pixel_height;
 
     /* Take into account the size of the scrollbar.  Always use the
@@ -428,15 +428,16 @@ set_frame_size (ew)
        might end up with a frame width that is not a multiple of the
        frame's character width which is bad for vertically split
        windows.  */
        might end up with a frame width that is not a multiple of the
        frame's character width which is bad for vertically split
        windows.  */
-    frame->output_data.x->vertical_scroll_bar_extra
-      = (!FRAME_HAS_VERTICAL_SCROLL_BARS (frame)
-        ? 0
-        : (FRAME_SCROLL_BAR_COLS (frame)
-           * FONT_WIDTH (frame->output_data.x->font)));
+    f->scroll_bar_actual_width
+      = FRAME_SCROLL_BAR_COLS (f) * FRAME_COLUMN_WIDTH (f);
 
 
-    x_compute_fringe_widths (frame, 0);
+    compute_fringe_widths (f, 0);
 
 
-    change_frame_size (frame, h, w, 1, 0, 0);
+#if 0 /* This can run Lisp code, and it is dangerous to give
+        out the frame to Lisp code before it officially exists.
+        This is handled in Fx_create_frame so not needed here.  */
+    change_frame_size (f, h, w, 1, 0, 0);
+#endif
     char_to_pixel_size (ew, w, h, &pixel_width, &pixel_height);
     ew->core.width = pixel_width;
     ew->core.height = pixel_height;
     char_to_pixel_size (ew, w, h, &pixel_width, &pixel_height);
     ew->core.width = pixel_width;
     ew->core.height = pixel_height;
@@ -512,7 +513,7 @@ update_wm_hints (ew)
                      &char_width, &char_height);
   char_to_pixel_size (ew, char_width, char_height,
                      &rounded_width, &rounded_height);
                      &char_width, &char_height);
   char_to_pixel_size (ew, char_width, char_height,
                      &rounded_width, &rounded_height);
-  get_default_char_pixel_size (ew, &cw, &ch); 
+  get_default_char_pixel_size (ew, &cw, &ch);
 
   base_width = (wmshell->core.width - ew->core.width
                + (rounded_width - (char_width * cw)));
 
   base_width = (wmshell->core.width - ew->core.width
                + (rounded_width - (char_width * cw)));
@@ -527,7 +528,7 @@ update_wm_hints (ew)
   XtVaSetValues (wmshell,
                 XtNbaseWidth, (XtArgVal) base_width,
                 XtNbaseHeight, (XtArgVal) base_height,
   XtVaSetValues (wmshell,
                 XtNbaseWidth, (XtArgVal) base_width,
                 XtNbaseHeight, (XtArgVal) base_height,
-                XtNwidthInc, (XtArgVal) cw, 
+                XtNwidthInc, (XtArgVal) cw,
                 XtNheightInc, (XtArgVal) ch,
                 XtNminWidth, (XtArgVal) (base_width + min_cols * cw),
                 XtNminHeight, (XtArgVal) (base_height + min_rows * ch),
                 XtNheightInc, (XtArgVal) ch,
                 XtNminWidth, (XtArgVal) (base_width + min_cols * cw),
                 XtNminHeight, (XtArgVal) (base_height + min_rows * ch),
@@ -641,10 +642,11 @@ static void
 update_various_frame_slots (ew)
      EmacsFrame ew;
 {
 update_various_frame_slots (ew)
      EmacsFrame ew;
 {
-  struct x_output *x = ew->emacs_frame.frame->output_data.x;
-  x->pixel_height = ew->core.height + x->menubar_height;
-  x->pixel_width = ew->core.width;
-  x->internal_border_width = ew->emacs_frame.internal_border_width;
+  struct frame *f = ew->emacs_frame.frame;
+  struct x_output *x = f->output_data.x;
+  FRAME_PIXEL_HEIGHT (f) = ew->core.height + x->menubar_height;
+  FRAME_PIXEL_WIDTH (f) = ew->core.width;
+  f->internal_border_width = ew->emacs_frame.internal_border_width;
 
 }
 
 
 }
 
@@ -652,18 +654,19 @@ static void
 update_from_various_frame_slots (ew)
      EmacsFrame ew;
 {
 update_from_various_frame_slots (ew)
      EmacsFrame ew;
 {
-  struct x_output *x = ew->emacs_frame.frame->output_data.x;
-  ew->core.height = x->pixel_height - x->menubar_height;
-  ew->core.width = x->pixel_width;
+  struct frame *f = ew->emacs_frame.frame;
+  struct x_output *x = f->output_data.x;
+  ew->core.height = FRAME_PIXEL_HEIGHT (f) - x->menubar_height;
+  ew->core.width = FRAME_PIXEL_WIDTH (f);
   ew->core.background_pixel = x->background_pixel;
   ew->core.background_pixel = x->background_pixel;
-  ew->emacs_frame.internal_border_width = x->internal_border_width;
+  ew->emacs_frame.internal_border_width = f->internal_border_width;
   ew->emacs_frame.font = x->font;
   ew->emacs_frame.foreground_pixel = x->foreground_pixel;
   ew->emacs_frame.cursor_color = x->cursor_pixel;
   ew->core.border_pixel = x->border_pixel;
 }
 
   ew->emacs_frame.font = x->font;
   ew->emacs_frame.foreground_pixel = x->foreground_pixel;
   ew->emacs_frame.cursor_color = x->cursor_pixel;
   ew->core.border_pixel = x->border_pixel;
 }
 
-static void 
+static void
 EmacsFrameInitialize (request, new, dum1, dum2)
      Widget request;
      Widget new;
 EmacsFrameInitialize (request, new, dum1, dum2)
      Widget request;
      Widget new;
@@ -702,7 +705,7 @@ EmacsFrameInitialize (request, new, dum1, dum2)
     face_res.default_addr = 0;
     XtGetSubresources ((Widget) ew, (XtPointer) &f, "default", "Face",
                       &face_res, 1, NULL, 0);
     face_res.default_addr = 0;
     XtGetSubresources ((Widget) ew, (XtPointer) &f, "default", "Face",
                       &face_res, 1, NULL, 0);
-      
+
     if (f)
        ew->emacs_frame.font = f;
     else if (! ew->emacs_frame.font)
     if (f)
        ew->emacs_frame.font = f;
     else if (! ew->emacs_frame.font)
@@ -713,11 +716,11 @@ EmacsFrameInitialize (request, new, dum1, dum2)
   }
 
 /* Update the font field in frame */
   }
 
 /* Update the font field in frame */
-  ew->emacs_frame.frame->output_data.x->font = ew->emacs_frame.font;
+  FRAME_FONT (ew->emacs_frame.frame) = ew->emacs_frame.font;
 #endif
 
   update_from_various_frame_slots (ew);
 #endif
 
   update_from_various_frame_slots (ew);
-  set_frame_size (ew); 
+  set_frame_size (ew);
 /*create_frame_gcs (ew);
   setup_frame_gcs (ew);
   update_various_frame_slots (ew); */
 /*create_frame_gcs (ew);
   setup_frame_gcs (ew);
   update_various_frame_slots (ew); */
@@ -741,7 +744,7 @@ EmacsFrameRealize (widget, mask, attrs)
   *mask |= CWEventMask;
   XtCreateWindow (widget, InputOutput, (Visual *)CopyFromParent, *mask,
                  attrs);
   *mask |= CWEventMask;
   XtCreateWindow (widget, InputOutput, (Visual *)CopyFromParent, *mask,
                  attrs);
-  update_wm_hints (ew); 
+  update_wm_hints (ew);
 }
 
 extern void free_frame_faces (/* struct frame * */);
 }
 
 extern void free_frame_faces (/* struct frame * */);
@@ -755,7 +758,6 @@ EmacsFrameDestroy (widget)
 
   if (! s) abort ();
   if (! s->output_data.x) abort ();
 
   if (! s) abort ();
   if (! s->output_data.x) abort ();
-  if (! s->output_data.x->normal_gc) abort ();
 
   BLOCK_INPUT;
   x_free_gcs (s);
 
   BLOCK_INPUT;
   x_free_gcs (s);
@@ -777,7 +779,7 @@ EmacsFrameResize (widget)
 
   pixel_to_char_size (ew, ew->core.width, ew->core.height, &columns, &rows);
   change_frame_size (f, rows, columns, 0, 1, 0);
 
   pixel_to_char_size (ew, ew->core.width, ew->core.height, &columns, &rows);
   change_frame_size (f, rows, columns, 0, 1, 0);
-  update_wm_hints (ew); 
+  update_wm_hints (ew);
   update_various_frame_slots (ew);
 
   cancel_mouse_face (f);
   update_various_frame_slots (ew);
 
   cancel_mouse_face (f);
@@ -802,14 +804,14 @@ EmacsFrameSetValues (cur_widget, req_widget, new_widget, dum1, dum2)
   int char_width, char_height;
   Dimension pixel_width;
   Dimension pixel_height;
   int char_width, char_height;
   Dimension pixel_width;
   Dimension pixel_height;
-  
+
   has_to_recompute_gcs = (cur->emacs_frame.font != new->emacs_frame.font
                          || (cur->emacs_frame.foreground_pixel
                              != new->emacs_frame.foreground_pixel)
                          || (cur->core.background_pixel
                              != new->core.background_pixel)
                          );
   has_to_recompute_gcs = (cur->emacs_frame.font != new->emacs_frame.font
                          || (cur->emacs_frame.foreground_pixel
                              != new->emacs_frame.foreground_pixel)
                          || (cur->core.background_pixel
                              != new->core.background_pixel)
                          );
-  
+
   has_to_recompute_size = (cur->emacs_frame.font != new->emacs_frame.font
                           && cur->core.width == new->core.width
                           && cur->core.height == new->core.height);
   has_to_recompute_size = (cur->emacs_frame.font != new->emacs_frame.font
                           && cur->core.width == new->core.width
                           && cur->core.height == new->core.height);
@@ -821,7 +823,7 @@ EmacsFrameSetValues (cur_widget, req_widget, new_widget, dum1, dum2)
       setup_frame_gcs (new);
       needs_a_refresh = True;
     }
       setup_frame_gcs (new);
       needs_a_refresh = True;
     }
-                         
+
   if (has_to_recompute_size)
     {
       pixel_width = new->core.width;
   if (has_to_recompute_size)
     {
       pixel_width = new->core.width;
@@ -902,16 +904,14 @@ EmacsFrameSetCharSize (widget, columns, rows)
   EmacsFrame ew = (EmacsFrame) widget;
   Dimension pixel_width, pixel_height;
   struct frame *f = ew->emacs_frame.frame;
   EmacsFrame ew = (EmacsFrame) widget;
   Dimension pixel_width, pixel_height;
   struct frame *f = ew->emacs_frame.frame;
-  
+
   if (columns < 3) columns = 3;  /* no way buddy */
 
   check_frame_size (f, &rows, &columns);
   if (columns < 3) columns = 3;  /* no way buddy */
 
   check_frame_size (f, &rows, &columns);
-  f->output_data.x->vertical_scroll_bar_extra
-    = (!FRAME_HAS_VERTICAL_SCROLL_BARS (f)
-       ? 0
-       : (FRAME_SCROLL_BAR_COLS (f) * FONT_WIDTH (f->output_data.x->font)));
+  f->scroll_bar_actual_width
+    = FRAME_SCROLL_BAR_COLS (f) * FRAME_COLUMN_WIDTH (f);
 
 
-  x_compute_fringe_widths (f, 0);
+  compute_fringe_widths (f, 0);
 
   char_to_pixel_size (ew, columns, rows, &pixel_width, &pixel_height);
 
 
   char_to_pixel_size (ew, columns, rows, &pixel_width, &pixel_height);
 
@@ -919,7 +919,7 @@ EmacsFrameSetCharSize (widget, columns, rows)
   /* Something is really strange here wrt to the border width:
      Apparently, XtNwidth and XtNheight include the border, so we have
      to add it here.  But the XtNborderWidth set for the widgets has
   /* Something is really strange here wrt to the border width:
      Apparently, XtNwidth and XtNheight include the border, so we have
      to add it here.  But the XtNborderWidth set for the widgets has
-     no similarity to what f->output_data.x->border_width is set to.  */
+     no similarity to what f->border_width is set to.  */
   XtVaGetValues (widget, XtNborderWidth, &border_width, NULL);
   pixel_height += 2 * border_width;
   pixel_width += 2 * border_width;
   XtVaGetValues (widget, XtNborderWidth, &border_width, NULL);
   pixel_height += 2 * border_width;
   pixel_width += 2 * border_width;
@@ -964,11 +964,13 @@ EmacsFrameSetCharSize (widget, columns, rows)
 #ifdef SIGIO
       sigblock (sigmask (SIGIO));
 #endif
 #ifdef SIGIO
       sigblock (sigmask (SIGIO));
 #endif
-      
+
       /* Do parents first, otherwise LessTif's geometry management
         enters an infinite loop (as of 2000-01-15).  This is fixed in
         later versions of LessTif (as of 2001-03-13); I'll leave it
         as is because I think it can't do any harm.  */
       /* Do parents first, otherwise LessTif's geometry management
         enters an infinite loop (as of 2000-01-15).  This is fixed in
         later versions of LessTif (as of 2001-03-13); I'll leave it
         as is because I think it can't do any harm.  */
+      /* In April 2002, simon.marshall@misys.com reports the problem
+        seems not to occur any longer.  */
       XtVaSetValues (f->output_data.x->widget,
                     XtNheight, (XtArgVal) (outer_widget_height + hdelta),
                     XtNwidth, (XtArgVal) (outer_widget_width + wdelta),
       XtVaSetValues (f->output_data.x->widget,
                     XtNheight, (XtArgVal) (outer_widget_height + hdelta),
                     XtNwidth, (XtArgVal) (outer_widget_width + wdelta),
@@ -985,7 +987,7 @@ EmacsFrameSetCharSize (widget, columns, rows)
       sigunblock (sigmask (SIGIO));
 #endif
       turn_on_atimers (1);
       sigunblock (sigmask (SIGIO));
 #endif
       turn_on_atimers (1);
-      
+
       lw_refigure_widget (f->output_data.x->column_widget, True);
 
       update_hints_inhibit = 0;
       lw_refigure_widget (f->output_data.x->column_widget, True);
 
       update_hints_inhibit = 0;
@@ -1011,6 +1013,8 @@ widget_store_internal_border (widget)
   EmacsFrame ew = (EmacsFrame) widget;
   FRAME_PTR f = ew->emacs_frame.frame;
 
   EmacsFrame ew = (EmacsFrame) widget;
   FRAME_PTR f = ew->emacs_frame.frame;
 
-  ew->emacs_frame.internal_border_width
-    = f->output_data.x->internal_border_width;
+  ew->emacs_frame.internal_border_width = f->internal_border_width;
 }
 }
+
+/* arch-tag: 931d28e5-0d59-405a-8325-7d475d0a13d9
+   (do not change this comment) */