emacs-diffs
[Top][All Lists]
Advanced

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

master 912ae5d 1/3: Prevent BadValue errors when creating tiny xwidget v


From: Lars Ingebrigtsen
Subject: master 912ae5d 1/3: Prevent BadValue errors when creating tiny xwidget views
Date: Tue, 9 Nov 2021 19:17:32 -0500 (EST)

branch: master
commit 912ae5de928a5042a8ac77b80d743a6d8f7ed1e8
Author: Po Lu <luangruo@yahoo.com>
Commit: Lars Ingebrigtsen <larsi@gnus.org>

    Prevent BadValue errors when creating tiny xwidget views
    
    * src/xwidget.c (x_draw_glph_string): Avoid resizing xwidget views
    to an invalid size (bug#51707).
---
 src/xwidget.c | 20 ++++++++++++++++++--
 1 file changed, 18 insertions(+), 2 deletions(-)

diff --git a/src/xwidget.c b/src/xwidget.c
index d3a8d5e..fc76ce3 100644
--- a/src/xwidget.c
+++ b/src/xwidget.c
@@ -1439,6 +1439,13 @@ x_draw_xwidget_glyph_string (struct glyph_string *s)
       a.event_mask = (ExposureMask | ButtonPressMask | ButtonReleaseMask
                      | PointerMotionMask | EnterWindowMask | LeaveWindowMask);
 
+      if (clip_right - clip_left <= 0
+         || clip_bottom - clip_top <= 0)
+       {
+         unblock_input ();
+         return;
+       }
+
       xv->wdesc = XCreateWindow (xv->dpy, FRAME_X_WINDOW (s->f),
                                 x + clip_left, y + clip_top,
                                 clip_right - clip_left,
@@ -1484,8 +1491,17 @@ x_draw_xwidget_glyph_string (struct glyph_string *s)
 #ifdef USE_GTK
       if (!wdesc_was_none && !moved)
        {
-         XResizeWindow (xv->dpy, xv->wdesc, clip_right - clip_left,
-                        clip_bottom - clip_top);
+         if (clip_right - clip_left <= 0
+             || clip_bottom - clip_top <= 0)
+           {
+             XUnmapWindow (xv->dpy, xv->wdesc);
+             xv->hidden = true;
+           }
+         else
+           {
+             XResizeWindow (xv->dpy, xv->wdesc, clip_right - clip_left,
+                            clip_bottom - clip_top);
+           }
          XFlush (xv->dpy);
          cairo_xlib_surface_set_size (xv->cr_surface, clip_right - clip_left,
                                       clip_bottom - clip_top);



reply via email to

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