emacs-diffs
[Top][All Lists]
Advanced

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

[Emacs-diffs] emacs-25 55a28d8: ; Fixed visual bell artifact problem on


From: Anders Lindgren
Subject: [Emacs-diffs] emacs-25 55a28d8: ; Fixed visual bell artifact problem on NextStep.
Date: Sat, 02 Jan 2016 14:57:12 +0000

branch: emacs-25
commit 55a28d8a1b1981d8469b39c68488f1848e8601b2
Author: Anders Lindgren <address@hidden>
Commit: Anders Lindgren <address@hidden>

    ; Fixed visual bell artifact problem on NextStep.
    
    * src/nsterm.m (EmacsBell): Add feature to remove visual bell
      unconditionally.
      (hide_bell): New function.
      (ns_copy_bits): Hide visible bell before scrolling the frame content.
---
 src/nsterm.m |   35 +++++++++++++++++++++++++++++++++--
 1 files changed, 33 insertions(+), 2 deletions(-)

diff --git a/src/nsterm.m b/src/nsterm.m
index 0510f8e..b270e0e 100644
--- a/src/nsterm.m
+++ b/src/nsterm.m
@@ -1150,9 +1150,11 @@ ns_clip_to_row (struct window *w, struct glyph_row *row,
 {
   // Number of currently active bell:s.
   unsigned int nestCount;
+  bool isAttached;
 }
 - (void)show:(NSView *)view;
 - (void)hide;
+- (void)remove;
 @end
 
 @implementation EmacsBell
@@ -1162,6 +1164,7 @@ ns_clip_to_row (struct window *w, struct glyph_row *row,
   if ((self = [super init]))
     {
       nestCount = 0;
+      isAttached = false;
       self.image = [NSImage imageNamed:NSImageNameCaution];
     }
   return self;
@@ -1183,6 +1186,7 @@ ns_clip_to_row (struct window *w, struct glyph_row *row,
       [self setFrameOrigin:pos];
       [self setFrameSize:self.image.size];
 
+      isAttached = true;
       [[[view window] contentView] addSubview:self
                                    positioned:NSWindowAbove
                                    relativeTo:nil];
@@ -1199,17 +1203,31 @@ ns_clip_to_row (struct window *w, struct glyph_row *row,
   // Note: Trace output from this method isn't shown, reason unknown.
   // NSTRACE ("[EmacsBell hide]");
 
-  --nestCount;
+  if (nestCount > 0)
+    --nestCount;
 
   // Remove the image once the last bell became inactive.
   if (nestCount == 0)
     {
+      [self remove];
+    }
+}
+
+
+-(void)remove
+{
+  if (isAttached)
+    {
       [self removeFromSuperview];
+      isAttached = false;
     }
 }
 
 @end
 
+
+static EmacsBell * bell_view = nil;
+
 static void
 ns_ring_bell (struct frame *f)
 /* --------------------------------------------------------------------------
@@ -1222,7 +1240,6 @@ ns_ring_bell (struct frame *f)
       struct frame *frame = SELECTED_FRAME ();
       NSView *view;
 
-      static EmacsBell * bell_view = nil;
       if (bell_view == nil)
         {
           bell_view = [[EmacsBell alloc] init];
@@ -1246,6 +1263,18 @@ ns_ring_bell (struct frame *f)
 }
 
 
+static void hide_bell ()
+/* --------------------------------------------------------------------------
+     Ensure the bell is hidden.
+   -------------------------------------------------------------------------- 
*/
+{
+  if (bell_view != nil)
+    {
+      [bell_view remove];
+    }
+}
+
+
 /* ==========================================================================
 
     Frame / window manager related functions
@@ -2328,6 +2357,8 @@ ns_copy_bits (struct frame *f, NSRect src, NSRect dest)
 {
   if (FRAME_NS_VIEW (f))
     {
+      hide_bell();              // Ensure the bell image isn't scrolled.
+
       ns_focus (f, &dest, 1);
       [FRAME_NS_VIEW (f) scrollRect: src
                                  by: NSMakeSize (dest.origin.x - src.origin.x,



reply via email to

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