mirror of
https://github.com/gnustep/libs-gui.git
synced 2025-06-04 13:10:41 +00:00
2015-09-13 Fred Kiefer <FredKiefer@gmx.de>
* Source/NSTextView.m: Invalidate insertion point timer in dealloc. * Source/NSToolbarItem.m: Check for drawing rect within bounds before drawing toolbar item. Patch by Marcian Lytwyn <gna@advcsi.com>. 2015-09-10 Doug Simons <doug.simons@testplant.com> and Paul Landers <paul.landers@testplant.com> * Source/NSLayoutManager.m: Fix a bug that would try to adjust the length of the selected range to a negative number, leading to an exception and eventual crashes. git-svn-id: svn+ssh://svn.gna.org/svn/gnustep/libs/gui/trunk@38986 72102866-910b-0410-8b05-ffd578937521
This commit is contained in:
parent
d2302076ad
commit
2f1ec7948f
4 changed files with 54 additions and 30 deletions
17
ChangeLog
17
ChangeLog
|
@ -1,3 +1,17 @@
|
||||||
|
2015-09-13 Fred Kiefer <FredKiefer@gmx.de>
|
||||||
|
|
||||||
|
* Source/NSTextView.m: Invalidate insertion point timer in
|
||||||
|
dealloc.
|
||||||
|
* Source/NSToolbarItem.m: Check for drawing rect within bounds
|
||||||
|
before drawing toolbar item.
|
||||||
|
Patch by Marcian Lytwyn <gna@advcsi.com>.
|
||||||
|
|
||||||
|
2015-09-10 Doug Simons <doug.simons@testplant.com> and Paul Landers <paul.landers@testplant.com>
|
||||||
|
|
||||||
|
* Source/NSLayoutManager.m: Fix a bug that would try to adjust
|
||||||
|
the length of the selected range to a negative number, leading
|
||||||
|
to an exception and eventual crashes.
|
||||||
|
|
||||||
2015-08-28 Riccardo Mottola <rm@gnu.org>
|
2015-08-28 Riccardo Mottola <rm@gnu.org>
|
||||||
|
|
||||||
* Source/NSView.m
|
* Source/NSView.m
|
||||||
|
@ -6,7 +20,8 @@
|
||||||
|
|
||||||
* Headers/AppKit/NSWindow.h
|
* Headers/AppKit/NSWindow.h
|
||||||
* Source/NSWindow.m
|
* Source/NSWindow.m
|
||||||
Constants and methods for Exposé and other features we don't have and perhaps never will
|
Constants and methods for Exposé and other features we don't have
|
||||||
|
and perhaps never will.
|
||||||
|
|
||||||
2015-08-26 Fred Kiefer <FredKiefer@gmx.de>
|
2015-08-26 Fred Kiefer <FredKiefer@gmx.de>
|
||||||
|
|
||||||
|
|
|
@ -2915,7 +2915,7 @@ no_soft_invalidation:
|
||||||
(of selection, wrt range, before change)
|
(of selection, wrt range, before change)
|
||||||
--------------------------
|
--------------------------
|
||||||
after after location += lengthChange;
|
after after location += lengthChange;
|
||||||
in after length = NSMaxRange(sel)-NSMaxRange(range)-lengthChange; location=NSMaxRange(range);
|
in after length = NSMaxRange(sel)-(NSMaxRange(range)-lengthChange); location=NSMaxRange(range);
|
||||||
in in length = 0; location=NSMaxRange(range);
|
in in length = 0; location=NSMaxRange(range);
|
||||||
before after length += lengthChange;
|
before after length += lengthChange;
|
||||||
before in length = range.location-location;
|
before in length = range.location-location;
|
||||||
|
@ -2937,7 +2937,7 @@ no_soft_invalidation:
|
||||||
{
|
{
|
||||||
if (NSMaxRange(_selected_range) > NSMaxRange(range) - lengthChange)
|
if (NSMaxRange(_selected_range) > NSMaxRange(range) - lengthChange)
|
||||||
{ /* in after */
|
{ /* in after */
|
||||||
newRange.length = NSMaxRange(_selected_range) - NSMaxRange(range) - lengthChange;
|
newRange.length = NSMaxRange(_selected_range) - (NSMaxRange(range) - lengthChange);
|
||||||
newRange.location = NSMaxRange(range);
|
newRange.location = NSMaxRange(range);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
|
@ -2958,6 +2958,12 @@ no_soft_invalidation:
|
||||||
{ /* before before */
|
{ /* before before */
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* sanity check */
|
||||||
|
if (NSMaxRange(newRange) > [_textStorage length])
|
||||||
|
{
|
||||||
|
newRange = NSMakeRange(MIN(range.location, [_textStorage length]), 0);
|
||||||
|
}
|
||||||
|
|
||||||
/* If there are text views attached to us, let them handle the
|
/* If there are text views attached to us, let them handle the
|
||||||
change. */
|
change. */
|
||||||
if ([self firstTextView])
|
if ([self firstTextView])
|
||||||
|
|
|
@ -141,6 +141,8 @@ Interface for a bunch of internal methods that need to be cleaned up.
|
||||||
* Used to implement the blinking insertion point
|
* Used to implement the blinking insertion point
|
||||||
*/
|
*/
|
||||||
- (void) _blink: (NSTimer *)t;
|
- (void) _blink: (NSTimer *)t;
|
||||||
|
- (void) _stopInsertionTimer;
|
||||||
|
- (void) _startInsertionTimer;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* these NSLayoutManager- like method is here only informally
|
* these NSLayoutManager- like method is here only informally
|
||||||
|
@ -1118,6 +1120,7 @@ that makes decoding and encoding compatible with the old code.
|
||||||
name: NSTextDidChangeNotification
|
name: NSTextDidChangeNotification
|
||||||
object: self];
|
object: self];
|
||||||
[_textCheckingTimer invalidate];
|
[_textCheckingTimer invalidate];
|
||||||
|
[self _stopInsertionTimer];
|
||||||
|
|
||||||
[[NSRunLoop currentRunLoop] cancelPerformSelector: @selector(_updateState:)
|
[[NSRunLoop currentRunLoop] cancelPerformSelector: @selector(_updateState:)
|
||||||
target: self
|
target: self
|
||||||
|
@ -4178,32 +4181,6 @@ Figure out how the additional layout stuff is supposed to work.
|
||||||
return nil;
|
return nil;
|
||||||
}
|
}
|
||||||
|
|
||||||
- (void) _stopInsertionTimer
|
|
||||||
{
|
|
||||||
if (_insertionPointTimer != nil)
|
|
||||||
{
|
|
||||||
[_insertionPointTimer invalidate];
|
|
||||||
DESTROY(_insertionPointTimer);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
- (void) _startInsertionTimer
|
|
||||||
{
|
|
||||||
if (_insertionPointTimer != nil)
|
|
||||||
{
|
|
||||||
NSWarnMLog(@"Starting insertion timer with existing one running");
|
|
||||||
[self _stopInsertionTimer];
|
|
||||||
}
|
|
||||||
_insertionPointTimer = [NSTimer scheduledTimerWithTimeInterval: 0.5
|
|
||||||
target: self
|
|
||||||
selector: @selector(_blink:)
|
|
||||||
userInfo: nil
|
|
||||||
repeats: YES];
|
|
||||||
[[NSRunLoop currentRunLoop] addTimer: _insertionPointTimer
|
|
||||||
forMode: NSModalPanelRunLoopMode];
|
|
||||||
RETAIN(_insertionPointTimer);
|
|
||||||
}
|
|
||||||
|
|
||||||
- (void) updateInsertionPointStateAndRestartTimer: (BOOL)restartFlag
|
- (void) updateInsertionPointStateAndRestartTimer: (BOOL)restartFlag
|
||||||
{
|
{
|
||||||
NSRect new;
|
NSRect new;
|
||||||
|
@ -6167,6 +6144,32 @@ or add guards
|
||||||
[self displayIfNeeded];
|
[self displayIfNeeded];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
- (void) _stopInsertionTimer
|
||||||
|
{
|
||||||
|
if (_insertionPointTimer != nil)
|
||||||
|
{
|
||||||
|
[_insertionPointTimer invalidate];
|
||||||
|
DESTROY(_insertionPointTimer);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
- (void) _startInsertionTimer
|
||||||
|
{
|
||||||
|
if (_insertionPointTimer != nil)
|
||||||
|
{
|
||||||
|
NSWarnMLog(@"Starting insertion timer with existing one running");
|
||||||
|
[self _stopInsertionTimer];
|
||||||
|
}
|
||||||
|
_insertionPointTimer = [NSTimer scheduledTimerWithTimeInterval: 0.5
|
||||||
|
target: self
|
||||||
|
selector: @selector(_blink:)
|
||||||
|
userInfo: nil
|
||||||
|
repeats: YES];
|
||||||
|
[[NSRunLoop currentRunLoop] addTimer: _insertionPointTimer
|
||||||
|
forMode: NSModalPanelRunLoopMode];
|
||||||
|
RETAIN(_insertionPointTimer);
|
||||||
|
}
|
||||||
|
|
||||||
- (NSRect) rectForCharacterRange: (NSRange)aRange
|
- (NSRect) rectForCharacterRange: (NSRange)aRange
|
||||||
{
|
{
|
||||||
NSRange glyphRange;
|
NSRange glyphRange;
|
||||||
|
|
|
@ -536,7 +536,7 @@ NSString *GSMovableToolbarItemPboardType = @"GSMovableToolbarItemPboardType";
|
||||||
|
|
||||||
- (void) drawRect: (NSRect)rect
|
- (void) drawRect: (NSRect)rect
|
||||||
{
|
{
|
||||||
if (_showLabel)
|
if (_showLabel && NSIntersectsRect(rect, [self bounds]))
|
||||||
{
|
{
|
||||||
NSAttributedString *attrString;
|
NSAttributedString *attrString;
|
||||||
NSDictionary *attr;
|
NSDictionary *attr;
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue