Page Menu
Home
FreeBSD
Search
Configure Global Search
Log In
Files
F160896678
D9758.diff
No One
Temporary
Actions
View File
Edit File
Delete File
View Transforms
Subscribe
Mute Notifications
Flag For Later
Award Token
Size
10 KB
Referenced Files
None
Subscribers
None
D9758.diff
View Options
Index: head/x11/konsole/Makefile
===================================================================
--- head/x11/konsole/Makefile
+++ head/x11/konsole/Makefile
@@ -2,6 +2,7 @@
PORTNAME= konsole
PORTVERSION= ${KDE4_VERSION}
+PORTREVISION= 1
CATEGORIES= x11 kde kde-kde4
MAINTAINER= kde@FreeBSD.org
Index: head/x11/konsole/files/patch-src_History.h
===================================================================
--- head/x11/konsole/files/patch-src_History.h
+++ head/x11/konsole/files/patch-src_History.h
@@ -0,0 +1,44 @@
+* Change to 64bit types for scrollback fixes in History.cpp
+*
+--- src/History.h.orig 2014-11-01 04:17:02 UTC
++++ src/History.h
+@@ -46,9 +46,9 @@ public:
+ HistoryFile();
+ virtual ~HistoryFile();
+
+- virtual void add(const unsigned char* bytes, int len);
+- virtual void get(unsigned char* bytes, int len, int loc);
+- virtual int len() const;
++ virtual void add(const char* bytes, qint64 len);
++ virtual void get(char* bytes, qint64 len, qint64 loc);
++ virtual qint64 len() const;
+
+ //mmaps the file in read-only mode
+ void map();
+@@ -59,12 +59,11 @@ public:
+
+
+ private:
+- int _fd;
+- int _length;
++ qint64 _length;
+ QTemporaryFile _tmpFile;
+
+ //pointer to start of mmap'ed file data, or 0 if the file is not mmap'ed
+- char* _fileMap;
++ uchar* _fileMap;
+
+ //incremented whenever 'add' is called and decremented whenever
+ //'get' is called.
+@@ -139,9 +138,9 @@ public:
+ virtual void addLine(bool previousWrapped = false);
+
+ private:
+- int startOfLine(int lineno);
++ qint64 startOfLine(int lineno);
+
+- HistoryFile _index; // lines Row(int)
++ HistoryFile _index; // lines Row(qint64)
+ HistoryFile _cells; // text Row(Character)
+ HistoryFile _lineflags; // flags Row(unsigned char)
+ };
Index: head/x11/konsole/files/patch-src_History.cpp
===================================================================
--- head/x11/konsole/files/patch-src_History.cpp
+++ head/x11/konsole/files/patch-src_History.cpp
@@ -0,0 +1,214 @@
+* Revamp the file-based "unlimited" scrollback code to remove limits
+* caused by 32bit file offsets. Use Qt's I/O functions which are
+* buffered and use 64bit offsets. Use Qt's map instead of direct mmap
+* to ensure consistency. Prevent wrap-around of readWriteBalance.
+*
+--- src/History.cpp.orig 2014-11-01 04:17:02 UTC
++++ src/History.cpp
+@@ -25,9 +25,6 @@
+ #include <stdlib.h>
+ #include <stdio.h>
+ #include <sys/types.h>
+-#include <sys/mman.h>
+-#include <unistd.h>
+-#include <errno.h>
+
+ // KDE
+ #include <kde_file.h>
+@@ -56,8 +53,7 @@ using namespace Konsole;
+
+ // History File ///////////////////////////////////////////
+ HistoryFile::HistoryFile()
+- : _fd(-1),
+- _length(0),
++ : _length(0),
+ _fileMap(0),
+ _readWriteBalance(0)
+ {
+@@ -66,7 +62,6 @@ HistoryFile::HistoryFile()
+ _tmpFile.setFileTemplate(tmpFormat);
+ if (_tmpFile.open()) {
+ _tmpFile.setAutoRemove(true);
+- _fd = _tmpFile.handle();
+ }
+ }
+
+@@ -83,23 +78,26 @@ void HistoryFile::map()
+ {
+ Q_ASSERT(_fileMap == 0);
+
+- _fileMap = (char*)mmap(0 , _length , PROT_READ , MAP_PRIVATE , _fd , 0);
++ if (_tmpFile.flush()) {
++ Q_ASSERT(_tmpFile.size() >= _length);
++ _fileMap = _tmpFile.map(0, _length);
++ }
+
+ //if mmap'ing fails, fall back to the read-lseek combination
+- if (_fileMap == MAP_FAILED) {
++ if (_fileMap == 0) {
+ _readWriteBalance = 0;
+- _fileMap = 0;
+- kWarning() << "mmap'ing history failed. errno = " << errno;
++ perror("HistoryFile::map failed");
+ }
+ }
+
+ void HistoryFile::unmap()
+ {
+- int result = munmap(_fileMap , _length);
+- Q_ASSERT(result == 0);
+- Q_UNUSED(result);
++ Q_ASSERT(_fileMap != 0);
+
+- _fileMap = 0;
++ if (_tmpFile.unmap(_fileMap))
++ _fileMap = 0;
++
++ Q_ASSERT(_fileMap == 0);
+ }
+
+ bool HistoryFile::isMapped() const
+@@ -107,21 +105,21 @@ bool HistoryFile::isMapped() const
+ return (_fileMap != 0);
+ }
+
+-void HistoryFile::add(const unsigned char* buffer, int count)
++void HistoryFile::add(const char* buffer, qint64 count)
+ {
+ if (_fileMap)
+ unmap();
+
+- _readWriteBalance++;
++ if (_readWriteBalance < INT_MAX)
++ _readWriteBalance++;
+
+- int rc = 0;
++ qint64 rc = 0;
+
+- rc = KDE_lseek(_fd, _length, SEEK_SET);
+- if (rc < 0) {
++ if (!_tmpFile.seek(_length)) {
+ perror("HistoryFile::add.seek");
+ return;
+ }
+- rc = write(_fd, buffer, count);
++ rc = _tmpFile.write(buffer, count);
+ if (rc < 0) {
+ perror("HistoryFile::add.write");
+ return;
+@@ -129,30 +127,32 @@ void HistoryFile::add(const unsigned cha
+ _length += rc;
+ }
+
+-void HistoryFile::get(unsigned char* buffer, int size, int loc)
++void HistoryFile::get(char* buffer, qint64 size, qint64 loc)
+ {
++ if (loc < 0 || size < 0 || loc + size > _length) {
++ fprintf(stderr, "getHist(...,%lld,%lld): invalid args.\n", size, loc);
++ return;
++ }
++
+ //count number of get() calls vs. number of add() calls.
+ //If there are many more get() calls compared with add()
+ //calls (decided by using MAP_THRESHOLD) then mmap the log
+ //file to improve performance.
+- _readWriteBalance--;
++ if (_readWriteBalance > INT_MIN)
++ _readWriteBalance--;
+ if (!_fileMap && _readWriteBalance < MAP_THRESHOLD)
+ map();
+
+ if (_fileMap) {
+- for (int i = 0; i < size; i++)
+- buffer[i] = _fileMap[loc + i];
++ memcpy(buffer, _fileMap + loc, size);
+ } else {
+- int rc = 0;
++ qint64 rc = 0;
+
+- if (loc < 0 || size < 0 || loc + size > _length)
+- fprintf(stderr, "getHist(...,%d,%d): invalid args.\n", size, loc);
+- rc = KDE_lseek(_fd, loc, SEEK_SET);
+- if (rc < 0) {
++ if (!_tmpFile.seek(loc)) {
+ perror("HistoryFile::get.seek");
+ return;
+ }
+- rc = read(_fd, buffer, size);
++ rc = _tmpFile.read(buffer, size);
+ if (rc < 0) {
+ perror("HistoryFile::get.read");
+ return;
+@@ -160,7 +160,7 @@ void HistoryFile::get(unsigned char* buf
+ }
+ }
+
+-int HistoryFile::len() const
++qint64 HistoryFile::len() const
+ {
+ return _length;
+ }
+@@ -206,7 +206,7 @@ HistoryScrollFile::~HistoryScrollFile()
+
+ int HistoryScrollFile::getLines()
+ {
+- return _index.len() / sizeof(int);
++ return _index.len() / sizeof(qint64);
+ }
+
+ int HistoryScrollFile::getLineLen(int lineno)
+@@ -218,21 +218,18 @@ bool HistoryScrollFile::isWrappedLine(in
+ {
+ if (lineno >= 0 && lineno <= getLines()) {
+ unsigned char flag;
+- _lineflags.get((unsigned char*)&flag, sizeof(unsigned char), (lineno)*sizeof(unsigned char));
++ _lineflags.get((char*)&flag, sizeof(unsigned char), (lineno)*sizeof(unsigned char));
+ return flag;
+ }
+ return false;
+ }
+
+-int HistoryScrollFile::startOfLine(int lineno)
++qint64 HistoryScrollFile::startOfLine(int lineno)
+ {
+ if (lineno <= 0) return 0;
+ if (lineno <= getLines()) {
+- if (!_index.isMapped())
+- _index.map();
+-
+- int res;
+- _index.get((unsigned char*)&res, sizeof(int), (lineno - 1)*sizeof(int));
++ qint64 res;
++ _index.get((char*)&res, sizeof(qint64), (lineno - 1)*sizeof(qint64));
+ return res;
+ }
+ return _cells.len();
+@@ -240,23 +237,20 @@ int HistoryScrollFile::startOfLine(int l
+
+ void HistoryScrollFile::getCells(int lineno, int colno, int count, Character res[])
+ {
+- _cells.get((unsigned char*)res, count * sizeof(Character), startOfLine(lineno) + colno * sizeof(Character));
++ _cells.get((char*)res, count * sizeof(Character), startOfLine(lineno) + colno * sizeof(Character));
+ }
+
+ void HistoryScrollFile::addCells(const Character text[], int count)
+ {
+- _cells.add((unsigned char*)text, count * sizeof(Character));
++ _cells.add((char*)text, count * sizeof(Character));
+ }
+
+ void HistoryScrollFile::addLine(bool previousWrapped)
+ {
+- if (_index.isMapped())
+- _index.unmap();
+-
+- int locn = _cells.len();
+- _index.add((unsigned char*)&locn, sizeof(int));
++ qint64 locn = _cells.len();
++ _index.add((char*)&locn, sizeof(qint64));
+ unsigned char flags = previousWrapped ? 0x01 : 0x00;
+- _lineflags.add((unsigned char*)&flags, sizeof(unsigned char));
++ _lineflags.add((char*)&flags, sizeof(unsigned char));
+ }
+
+ // History Scroll None //////////////////////////////////////
Index: head/x11/konsole/files/patch-src_ProcessInfo.cpp
===================================================================
--- head/x11/konsole/files/patch-src_ProcessInfo.cpp
+++ head/x11/konsole/files/patch-src_ProcessInfo.cpp
@@ -1,3 +1,13 @@
+* Fix handling of symlinked homedir
+*
+* Fix readArguments to get all instead of only the first
+*
+* Implement readEnvironment for FreeBSD
+*
+* Fix args parsing for remote (SSH) sessions
+*
+* Add %U (user@) for remote sessions
+*
--- src/ProcessInfo.cpp.orig 2014-11-01 04:17:02 UTC
+++ src/ProcessInfo.cpp
@@ -60,6 +60,9 @@
Index: head/x11/konsole/files/patch-src_TerminalDisplay.cpp
===================================================================
--- head/x11/konsole/files/patch-src_TerminalDisplay.cpp
+++ head/x11/konsole/files/patch-src_TerminalDisplay.cpp
@@ -0,0 +1,31 @@
+From 5fd1276b8d024a5a2670ff60753c9760a2ff7ca7 Mon Sep 17 00:00:00 2001
+From: Feng Chao <chaofeng111@gmail.com>
+Date: Sun, 3 Aug 2014 21:18:52 +0800
+Subject: Fix Bug 318453 - Blinking cursor of "fullwidth" character are
+ "halfwidth"
+
+Calculate the character width at current blinking cursor.
+
+BUG: 318453
+---
+ src/TerminalDisplay.cpp | 4 +++-
+ 1 file changed, 3 insertions(+), 1 deletion(-)
+
+diff --git src/TerminalDisplay.cpp src/TerminalDisplay.cpp
+index 4d5bd8a..fd0f6b0 100644
+--- src/TerminalDisplay.cpp
++++ src/TerminalDisplay.cpp
+@@ -1600,7 +1600,9 @@ void TerminalDisplay::blinkCursorEvent()
+
+ void TerminalDisplay::updateCursor()
+ {
+- QRect cursorRect = imageToWidget(QRect(cursorPosition(), QSize(1, 1)));
++ int cursorLocation = loc(cursorPosition().x(), cursorPosition().y());
++ int charWidth = konsole_wcwidth(_image[cursorLocation].character);
++ QRect cursorRect = imageToWidget(QRect(cursorPosition(), QSize(charWidth, 1)));
+ update(cursorRect);
+ }
+
+--
+cgit v0.11.2
+
File Metadata
Details
Attached
Mime Type
text/plain
Expires
Mon, Jun 29, 8:15 PM (2 h, 15 m)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
34471465
Default Alt Text
D9758.diff (10 KB)
Attached To
Mode
D9758: Improve the "unlimited" scrollback in x11/konsole to be less limited
Attached
Detach File
Event Timeline
Log In to Comment