emacs-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: master 30dbdecd4a: * src/xterm.c: Add a small writeup on input handl


From: martin rudalics
Subject: Re: master 30dbdecd4a: * src/xterm.c: Add a small writeup on input handling on X.
Date: Sat, 15 Jan 2022 10:31:17 +0100

> Martin in particular should
> write a paragraph or two about how frames are resized on X, since I
> think he knows quite a bit more than I do about that part of the code.

I can do that but note that most of the frame resizing code is shared
among X and other backends - in particular, the necessity to call
change_frame_size, set delayed_size_change there, call adjust_frame_size
eventually ...


While we're here - two questions related to size hints.  The first
concerns the x_wm_set_size_hint version in xterm.c.  _My_ version of it
currently starts as


#ifndef USE_GTK
void
x_wm_set_size_hint (struct frame *f, long flags, bool user_position, bool 
base_size)
{
  XSizeHints size_hints;
  Window window = FRAME_OUTER_WINDOW (f);

  if (!window)
    return;

  /* 2021 REMIX: Don't call widget_update_wm_size_hints here since on
     GNOME shell get_wm_shell may fail to produce the wmshell widget.
     As a consequence, no size hints get set before we issue our resize
     request, mutter (presumably) refuses to resize the outer window as
     requested and we end up with a wrong initial frame size.

     It's not clear whether other calls of update_wm_hints are affected
     as well but not calling widget_update_wm_size_hints here seems
     sufficient to fix the bug.  */

/** #ifdef USE_X_TOOLKIT **/
/**   if (f->output_data.x->widget) **/
/**     { **/
/**       widget_update_wm_size_hints (f->output_data.x->widget); **/
/**       return; **/
/**     } **/
/** #endif **/

  /* Setting PMaxSize caused various problems.  */
  size_hints.flags = PResizeInc | PMinSize /* | PMaxSize */;


Can you see any necessity to call widget_update_wm_size_hints here?


The second question is with XSetWMSizeHints in emacsgtkfixed.c: _My_
version of its starts as

/* Override the X function so we can intercept Gtk+ 3 calls.
   Use our values for min_width/height so that KDE don't freak out
   (Bug#8919), and so users can resize our frames as they wish.

   2021 REMIX: But do override only if x_gtk_override_size_hints is true
   (the default).  If x_gtk_override_size_hints is false, proceed with
   the original specification so shrinking frames with a specified
   minimum size works as intended (Bug#46963) and Emacs is always
   informed of the real sizes the WM reserves for its windows.

   We really should default x_gtk_override_size_hints to nil by default,
   but this can be done only after sufficient experience has been
   gathered, in particular on KDE.  Ideally, the code below will be
   dropped, the sooner the better.  */

void
XSetWMSizeHints (Display *d, Window w, XSizeHints *hints, Atom prop)
{
  struct x_display_info *dpyinfo = x_display_info_for_display (d);
  struct frame *f = x_top_window_to_frame (dpyinfo, w);
  long data[18];

  data[0] = hints->flags;
  ...
  data[17] = hints->win_gravity;

  if (x_gtk_override_size_hints && hints->flags & PMinSize && f)
    {
#ifdef HAVE_PGTK
      int w = f->output_data.pgtk->size_hints.min_width;
      int h = f->output_data.pgtk->size_hints.min_height;
#else
      int w = f->output_data.x->size_hints.min_width;
      int h = f->output_data.x->size_hints.min_height;
#endif
      data[5] = w;
      data[6] = h;
    }

Do you think we could eventually drop that overriding code invented by
Jan back then?  BTW one of these

#ifndef HAVE_PGTK
#ifdef HAVE_PGTK
#else
#endif
#endif

in that code should be eliminated - but I don't know which.

Thanks for your efforts, martin



reply via email to

[Prev in Thread] Current Thread [Next in Thread]