all messages for Emacs-related lists mirrored at yhetil.org
 help / color / mirror / code / Atom feed
From: martin rudalics <rudalics@gmx.at>
To: Dmitry Gutov <dgutov@yandex.ru>, tumashu <tumashu@163.com>
Cc: "emacs-devel@gnu.org" <emacs-devel@gnu.org>
Subject: Re: Emacs's set-frame-size can not work well with gnome-shell?
Date: Thu, 13 Feb 2020 19:42:52 +0100	[thread overview]
Message-ID: <4c0993c7-0583-8573-60c5-ab0a92121fd3@gmx.at> (raw)
In-Reply-To: <5e28c37f-95a9-a5ae-d73c-b5bb769154c0@yandex.ru>

[-- Attachment #1: Type: text/plain, Size: 1337 bytes --]

 > Just the previous version of the patch with the same filename. The one in this email:
 >
 > https://lists.gnu.org/archive/html/emacs-devel/2020-01/msg00971.html

This one adjusted our windows before issuing the resize request so it
was cheating, in some sense.  It turned out here that we have to issue a
gdk_window_resize request instead of a gtk_window_resize request in
order to have mutter respond at all.  In addition, we have to process
ConfigureNotify differently.  The attached use_gdk_resize.diff does that
so you should be able to run a normal 'set-frame-size' and be able to
resize the child frame within its initial size.  Making the child frame
sufficiently large initially, the patch can handle all resizes here.
It's not a feasible solution and breaks redisplay with xfwm4 though.

I also attach a second patch called hide-child-frame-during-resize.diff
which does nothing else but hiding a child frame during resizing.  You
have to toggle 'x-gtk-hide-child-frame-during-resize' to make it work.
It will cause flicker but is probably the one only thing we could do for
Emacs 27.

Neither of these solutions is practicable so we still have to contact
the mutter people.  Unfortunately, there are probably a number of
additional issues as well so in their present form Emacs and mutter are
not really compatible.

martin

[-- Warning: decoded text below may be mangled, UTF-8 assumed --]
[-- Attachment #2: use_gdk_resize.diff --]
[-- Type: text/x-patch; name="use_gdk_resize.diff", Size: 1676 bytes --]

diff --git a/src/gtkutil.c b/src/gtkutil.c
index 6308c38f16..a77810141a 100644
--- a/src/gtkutil.c
+++ b/src/gtkutil.c
@@ -997,12 +997,13 @@ xg_frame_set_char_size (struct frame *f, int width, int height)
     }
   else
     {
+      GdkWindow *gwin = gtk_widget_get_window (FRAME_GTK_OUTER_WIDGET (f));
+
       frame_size_history_add
 	(f, Qxg_frame_set_char_size_3, width, height,
 	 list2i (totalwidth, totalheight));

-      gtk_window_resize (GTK_WINDOW (FRAME_GTK_OUTER_WIDGET (f)),
-			 totalwidth, totalheight);
+      gdk_window_resize (gwin, (gint)totalwidth, (gint)totalheight);
       fullscreen = Qnil;
     }

diff --git a/src/xterm.c b/src/xterm.c
index 21d99f0c7b..a90e3e0a98 100644
--- a/src/xterm.c
+++ b/src/xterm.c
@@ -8953,6 +8953,22 @@ handle_one_xevent (struct x_display_info *dpyinfo,
 #ifdef USE_CAIRO
 	  x_cr_update_surface_desired_size (f, configureEvent.xconfigure.width,
 					    configureEvent.xconfigure.height);
+#endif
+          f = 0;
+        }
+      else if (f && FRAME_PARENT_FRAME (f)
+	       && (configureEvent.xconfigure.width != FRAME_PIXEL_WIDTH (f)
+		   || configureEvent.xconfigure.height != FRAME_PIXEL_HEIGHT (f)))
+        {
+          block_input ();
+          if (FRAME_X_DOUBLE_BUFFERED_P (f))
+            font_drop_xrender_surfaces (f);
+          unblock_input ();
+          xg_frame_resized (f, configureEvent.xconfigure.width,
+                            configureEvent.xconfigure.height);
+#ifdef USE_CAIRO
+	  x_cr_update_surface_desired_size (f, configureEvent.xconfigure.width,
+					    configureEvent.xconfigure.height);
 #endif
           f = 0;
         }

[-- Warning: decoded text below may be mangled, UTF-8 assumed --]
[-- Attachment #3: hide-child-frame-during-resize.diff --]
[-- Type: text/x-patch; name="hide-child-frame-during-resize.diff", Size: 2362 bytes --]

diff --git a/src/gtkutil.c b/src/gtkutil.c
index 6308c38f16..0b2f597c2b 100644
--- a/src/gtkutil.c
+++ b/src/gtkutil.c
@@ -953,6 +953,7 @@ xg_frame_set_char_size (struct frame *f, int width, int height)
   int totalheight
     = pixelheight + FRAME_TOOLBAR_HEIGHT (f) + FRAME_MENUBAR_HEIGHT (f);
   int totalwidth = pixelwidth + FRAME_TOOLBAR_WIDTH (f);
+  bool was_visible = false;

   if (FRAME_PIXEL_HEIGHT (f) == 0)
     return;
@@ -1001,8 +1002,28 @@ xg_frame_set_char_size (struct frame *f, int width, int height)
 	(f, Qxg_frame_set_char_size_3, width, height,
 	 list2i (totalwidth, totalheight));

+      if (FRAME_PARENT_FRAME (f) && FRAME_VISIBLE_P (f)
+	  && x_gtk_hide_child_frame_during_resize)
+	{
+	  was_visible = true;
+	  block_input ();
+	  gtk_widget_hide (FRAME_GTK_OUTER_WIDGET (f));
+	  unblock_input ();
+	}
+
       gtk_window_resize (GTK_WINDOW (FRAME_GTK_OUTER_WIDGET (f)),
 			 totalwidth, totalheight);
+
+      if (was_visible)
+	{
+	  block_input ();
+	  gtk_widget_show_all (FRAME_GTK_OUTER_WIDGET (f));
+	  /* Let's hope the following is not needed.  */
+/** 	  XMoveWindow (FRAME_X_DISPLAY (f), FRAME_OUTER_WINDOW (f), **/
+/** 		       f->left_pos, f->top_pos); **/
+	  unblock_input ();
+	}
+
       fullscreen = Qnil;
     }

@@ -1016,7 +1037,7 @@ xg_frame_set_char_size (struct frame *f, int width, int height)
      size as fast as possible.
      For unmapped windows, we can set rows/cols.  When
      the frame is mapped again we will (hopefully) get the correct size.  */
-  if (FRAME_VISIBLE_P (f))
+  if (FRAME_VISIBLE_P (f) && !was_visible)
     {
       /* Must call this to flush out events */
       (void)gtk_events_pending ();
diff --git a/src/xterm.c b/src/xterm.c
index 21d99f0c7b..95109baf46 100644
--- a/src/xterm.c
+++ b/src/xterm.c
@@ -13747,4 +13747,9 @@ syms_of_xterm (void)
 consuming frame position adjustments.  In newer versions of GTK, Emacs
 always uses gtk_window_move and ignores the value of this variable.  */);
   x_gtk_use_window_move = true;
+
+  DEFVAR_BOOL ("x-gtk-hide-child-frame-during-resize", x_gtk_hide_child_frame_during_resize,
+    doc: /* Non-nil means hide child frame during resize.
+Set this only if your window manager refuses to resize child frames.  */);
+  x_gtk_hide_child_frame_during_resize = false;
 }

  reply	other threads:[~2020-02-13 18:42 UTC|newest]

Thread overview: 197+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2020-01-10  2:34 Emacs's set-frame-size can not work well with gnome-shell? tumashu
2020-01-10  9:56 ` martin rudalics
2020-01-11  1:29   ` tumashu
2020-01-11  7:50     ` martin rudalics
2020-01-11  9:56       ` Dmitry Gutov
2020-01-11 10:19         ` martin rudalics
2020-01-11 10:21           ` Dmitry Gutov
2020-01-11 10:35             ` martin rudalics
2020-01-11 11:21               ` Dmitry Gutov
2020-01-11 13:45                 ` martin rudalics
2020-01-14  2:09                   ` Dmitry Gutov
2020-01-14 15:50                     ` martin rudalics
2020-01-15  1:31                       ` Dmitry Gutov
2020-01-15  8:08                         ` martin rudalics
2020-01-15 23:53                           ` Dmitry Gutov
2020-01-16  8:03                             ` martin rudalics
2020-01-16  8:15                               ` Dmitry Gutov
2020-01-16  9:18                                 ` martin rudalics
2020-01-16  9:27                                   ` Dmitry Gutov
2020-01-16  9:44                                     ` martin rudalics
2020-01-16 10:12                                       ` Dmitry Gutov
2020-01-16 10:22                                         ` martin rudalics
2020-01-16 15:03                                           ` Dmitry Gutov
2020-01-16 18:33                                             ` martin rudalics
     [not found]                                               ` <15405719-d58d-44db-f1df-ad3bb272b2fc@yandex.ru>
     [not found]                                                 ` <aba0683f-466c-76cf-9024-e18bfc9fdc94@gmx.at>
2020-01-18  2:05                                                   ` Dmitry Gutov
2020-01-18  2:29                                                     ` Dmitry Gutov
2020-01-18  8:34                                                       ` martin rudalics
2020-01-18 12:27                                                         ` Dmitry Gutov
2020-01-18 13:48                                                           ` martin rudalics
2020-01-19  2:45                                                             ` Dmitry Gutov
2020-01-19  8:52                                                               ` martin rudalics
2020-01-20 14:14                                                                 ` Dmitry Gutov
2020-01-20 15:57                                                                   ` martin rudalics
2020-01-20 22:20                                                                     ` Dmitry Gutov
2020-01-21  8:29                                                                       ` martin rudalics
2020-01-21 11:36                                                                         ` Dmitry Gutov
2020-01-21 16:11                                                                           ` martin rudalics
2020-01-21 21:33                                                                             ` Dmitry Gutov
2020-01-22  9:07                                                                               ` martin rudalics
2020-01-22 10:57                                                                                 ` Dmitry Gutov
2020-01-18  8:32                                                     ` martin rudalics
2020-01-20 13:37                                                       ` Dmitry Gutov
2020-01-20 15:57                                                         ` martin rudalics
2020-01-20 23:02                                                           ` Dmitry Gutov
2020-01-21  8:29                                                             ` martin rudalics
2020-01-21 12:11                                                               ` Dmitry Gutov
2020-01-21 16:12                                                                 ` martin rudalics
2020-01-21 22:26                                                                   ` Dmitry Gutov
2020-01-22  9:08                                                                     ` martin rudalics
2020-01-22 11:35                                                                       ` Dmitry Gutov
2020-01-22 13:18                                                                         ` tumashu
2020-01-22 13:32                                                                           ` Dmitry Gutov
2020-01-22 16:19                                                                             ` Eli Zaretskii
2020-01-22 17:36                                                                             ` martin rudalics
2020-01-22 21:15                                                                               ` Dmitry Gutov
2020-01-25  8:41                                                                                 ` martin rudalics
2020-01-25 10:09                                                                                   ` Dmitry Gutov
2020-01-25 12:10                                                                                     ` martin rudalics
2020-01-26 11:59                                                                                       ` Dmitry Gutov
2020-01-26 17:38                                                                                         ` martin rudalics
2020-01-26 20:50                                                                                           ` Dmitry Gutov
2020-01-28  9:46                                                                                             ` martin rudalics
2020-01-28 15:19                                                                                               ` Dmitry Gutov
2020-01-28 16:20                                                                                                 ` martin rudalics
2020-01-30  2:14                                                                                                   ` Dmitry Gutov
2020-01-27 19:17                                                                                           ` martin rudalics
2020-01-27 21:15                                                                                             ` Dmitry Gutov
2020-01-28  9:47                                                                                               ` martin rudalics
2020-01-30  2:10                                                                                                 ` Dmitry Gutov
2020-01-30  9:38                                                                                                   ` martin rudalics
2020-01-30 17:21                                                                                                     ` martin rudalics
2020-01-30 18:15                                                                                                       ` Dmitry Gutov
2020-01-30 18:41                                                                                                         ` martin rudalics
2020-01-31  1:22                                                                                                           ` Dmitry Gutov
2020-01-31  9:29                                                                                                             ` martin rudalics
2020-01-31 11:52                                                                                                               ` Dmitry Gutov
2020-01-31 15:44                                                                                                                 ` martin rudalics
2020-01-31 22:22                                                                                                                   ` Dmitry Gutov
2020-02-01  9:35                                                                                                                     ` martin rudalics
2020-02-05  1:39                                                                                                                       ` Dmitry Gutov
2020-02-05  9:15                                                                                                                         ` martin rudalics
2020-02-10  7:06                                                                                                                           ` Dmitry Gutov
2020-02-10 17:53                                                                                                                             ` martin rudalics
2020-02-10 22:40                                                                                                                               ` Dmitry Gutov
2020-02-10  7:22                                                                                                                           ` Dmitry Gutov
2020-02-10 17:54                                                                                                                             ` martin rudalics
2020-02-10 22:49                                                                                                                               ` Dmitry Gutov
2020-02-13 18:42                                                                                                                                 ` martin rudalics [this message]
2020-02-13 23:48                                                                                                                                   ` Dmitry Gutov
2020-02-14  8:48                                                                                                                                     ` martin rudalics
2020-02-15 22:31                                                                                                                                       ` Dmitry Gutov
2020-02-16 10:01                                                                                                                                         ` martin rudalics
2020-02-16 20:47                                                                                                                                           ` Dmitry Gutov
2020-02-17 18:20                                                                                                                                             ` martin rudalics
2020-02-21 11:03                                                                                                                                               ` Dmitry Gutov
2020-02-21 11:13                                                                                                                                                 ` Dmitry Gutov
2020-02-21 16:08                                                                                                                                                   ` martin rudalics
2020-02-24  0:11                                                                                                                                                     ` Dmitry Gutov
2020-02-26 17:30                                                                                                                                                       ` martin rudalics
2020-02-28 16:32                                                                                                                                                         ` martin rudalics
2020-03-03 13:50                                                                                                                                                           ` Dmitry Gutov
2020-03-03 14:40                                                                                                                                                             ` martin rudalics
2020-03-03 18:27                                                                                                                                                               ` Dmitry Gutov
2020-03-04 17:29                                                                                                                                                                 ` martin rudalics
2020-03-06 23:38                                                                                                                                                                   ` Dmitry Gutov
2020-03-07  0:07                                                                                                                                                                   ` Dmitry Gutov
2020-03-06 23:03                                                                                                                                                         ` Dmitry Gutov
2020-02-16 23:01                                                                                                                                           ` Dmitry Gutov
2020-02-17 18:21                                                                                                                                             ` martin rudalics
2020-02-21 14:18                                                                                                                                               ` Dmitry Gutov
2020-02-21 16:08                                                                                                                                                 ` martin rudalics
2020-02-23  9:22                                                                                                                                                   ` Dmitry Gutov
2020-02-26 17:30                                                                                                                                                     ` martin rudalics
2020-03-06 23:32                                                                                                                                                       ` Dmitry Gutov
2020-03-09  9:03                                                                                                                                                         ` martin rudalics
2020-03-12  0:22                                                                                                                                                           ` Dmitry Gutov
2020-03-12  8:23                                                                                                                                                             ` martin rudalics
2020-03-13 16:57                                                                                                                                                               ` Dmitry Gutov
2020-03-13 17:46                                                                                                                                                                 ` martin rudalics
2020-03-16 19:51                                                                                                                                                                   ` Dmitry Gutov
2020-03-17  9:38                                                                                                                                                                     ` martin rudalics
2020-03-17 11:22                                                                                                                                                                       ` Dmitry Gutov
2020-03-31 17:04                                                                                                                                                                         ` martin rudalics
2020-04-03 11:09                                                                                                                                                                           ` Eli Zaretskii
2020-04-03 15:08                                                                                                                                                                             ` martin rudalics
2020-04-03 16:08                                                                                                                                                                               ` martin rudalics
2020-04-03 19:07                                                                                                                                                                               ` Dmitry Gutov
2020-04-04  8:51                                                                                                                                                                               ` Eli Zaretskii
2020-04-04  9:02                                                                                                                                                                                 ` martin rudalics
2020-04-04  9:30                                                                                                                                                                                   ` Eli Zaretskii
2020-04-06  9:03                                                                                                                                                                                     ` martin rudalics
2020-04-06 13:26                                                                                                                                                                                       ` Eli Zaretskii
2020-04-07  8:32                                                                                                                                                                                         ` martin rudalics
2020-04-07 14:04                                                                                                                                                                                           ` Eli Zaretskii
2020-04-06 18:36                                                                                                                                                                                       ` Dmitry Gutov
2020-04-07  8:33                                                                                                                                                                                         ` martin rudalics
2020-04-07 13:19                                                                                                                                                                                           ` Dmitry Gutov
2020-04-12  6:44                                                                                                                                                                           ` Andreas Schwab
2020-04-12  7:23                                                                                                                                                                             ` Eli Zaretskii
2020-04-12  7:37                                                                                                                                                                               ` Andreas Schwab
2020-04-12  8:03                                                                                                                                                                             ` martin rudalics
2020-04-06 22:51                                                                                                                                                               ` Dmitry Gutov
2020-04-07  8:33                                                                                                                                                                 ` martin rudalics
2020-04-07 14:25                                                                                                                                                                   ` Dmitry Gutov
2020-04-07 14:39                                                                                                                                                                     ` Robert Pluim
2020-04-07 14:50                                                                                                                                                                       ` Dmitry Gutov
2020-04-07 15:37                                                                                                                                                                         ` Robert Pluim
2020-04-07 19:25                                                                                                                                                                           ` Dmitry Gutov
2020-04-08  7:59                                                                                                                                                                             ` Robert Pluim
2020-04-08 10:37                                                                                                                                                                               ` Dmitry Gutov
2020-04-08 12:12                                                                                                                                                                                 ` Robert Pluim
2020-04-08  8:31                                                                                                                                                                   ` Support
2020-04-08  8:45                                                                                                                                                                     ` martin rudalics
2020-04-08  9:03                                                                                                                                                                       ` Adrián Medraño Calvo
2020-04-08  9:25                                                                                                                                                                         ` martin rudalics
2020-02-14  9:52                                                                                                                                     ` martin rudalics
2020-02-15 22:49                                                                                                                                       ` Dmitry Gutov
2020-02-16 10:01                                                                                                                                         ` martin rudalics
2020-01-27 23:20                                                                                           ` Dmitry Gutov
2020-01-27 23:32                                                                                             ` Dmitry Gutov
2020-01-28  9:48                                                                                               ` martin rudalics
2020-01-28 15:39                                                                                                 ` Dmitry Gutov
2020-01-28 16:20                                                                                                   ` martin rudalics
2020-01-28  9:48                                                                                             ` martin rudalics
2020-01-28 15:51                                                                                               ` Dmitry Gutov
2020-01-22 17:35                                                                         ` martin rudalics
2020-01-22 22:40                                                                           ` tumashu
2020-01-25  8:41                                                                             ` martin rudalics
2020-01-25 10:17                                                                               ` Dmitry Gutov
2020-01-25 10:29                                                                                 ` Eli Zaretskii
2020-01-25 10:52                                                                                   ` Dmitry Gutov
2020-01-25 12:11                                                                                 ` martin rudalics
2020-01-25 23:01                                                                                   ` Dmitry Gutov
2020-01-26  8:43                                                                                     ` martin rudalics
2020-01-26 11:02                                                                                       ` Dmitry Gutov
2020-01-26 15:32                                                                                         ` martin rudalics
2020-01-26 21:35                                                                                           ` Dmitry Gutov
2020-01-28  9:46                                                                                             ` martin rudalics
2020-01-30  2:23                                                                                               ` Dmitry Gutov
2020-01-30  9:38                                                                                                 ` martin rudalics
2020-01-30 17:32                                                                                                   ` Dmitry Gutov
2020-01-30 18:04                                                                                                     ` martin rudalics
2020-01-30 17:42                                                                                                   ` Dmitry Gutov
2020-01-30 18:04                                                                                                     ` martin rudalics
2020-01-26 11:03                                                                                   ` Dmitry Gutov
2020-01-23  0:21                                                                           ` Dmitry Gutov
2020-01-23  0:39                                                                             ` tumashu
2020-01-25  8:42                                                                             ` martin rudalics
2020-01-16  0:04                       ` Dmitry Gutov
2020-01-16  8:04                         ` martin rudalics
2020-01-16  8:25                           ` Dmitry Gutov
2020-01-11 10:36       ` tumashu
2020-01-11 13:45         ` martin rudalics
  -- strict thread matches above, loose matches on Subject: below --
2020-01-22  8:04 tumashu
2020-01-22  9:09 ` martin rudalics
2020-01-22 10:03   ` tumashu
2020-01-22 17:33     ` martin rudalics
2020-01-22 15:55 ` Eli Zaretskii

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=4c0993c7-0583-8573-60c5-ab0a92121fd3@gmx.at \
    --to=rudalics@gmx.at \
    --cc=dgutov@yandex.ru \
    --cc=emacs-devel@gnu.org \
    --cc=tumashu@163.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
Code repositories for project(s) associated with this external index

	https://git.savannah.gnu.org/cgit/emacs.git
	https://git.savannah.gnu.org/cgit/emacs/org-mode.git

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.