From 10e41144596fc9ced40fc349d9ecd099b1c2ea19 Mon Sep 17 00:00:00 2001 From: tpearson Date: Fri, 11 Dec 2009 20:21:27 +0000 Subject: Initial import of Trinity 3.5.11 to kdebase Extends krandrtray, adds iccconfig kcontrol module, adds run dialog autocomplete and lots of bugfixes Will need to check for commit warnings and repair as encountered Also needs full compile test git-svn-id: svn://anonsvn.kde.org/home/kde/branches/trinity/kdebase@1061475 283d02a7-25f6-0310-bc7c-ecb5cbfe19da --- konsole/konsole/TEHistory.cpp | 90 ++++++++++++++++++++----------------- konsole/konsole/TEHistory.h | 5 +++ konsole/konsole/TEPty.h | 7 +++ konsole/konsole/keytrans.cpp | 6 +-- konsole/konsole/konsole.cpp | 4 +- konsole/konsole/konsole_part.cpp | 10 +++++ konsole/konsole/konsole_part.h | 2 + konsole/konsole/konsole_wcwidth.cpp | 31 ++++++++++--- konsole/konsole/konsole_wcwidth.h | 4 +- konsole/other/su.desktop | 2 +- konsole/other/sumc.desktop | 2 +- 11 files changed, 107 insertions(+), 56 deletions(-) (limited to 'konsole') diff --git a/konsole/konsole/TEHistory.cpp b/konsole/konsole/TEHistory.cpp index 5a0ee5477..a24635acb 100644 --- a/konsole/konsole/TEHistory.cpp +++ b/konsole/konsole/TEHistory.cpp @@ -207,23 +207,24 @@ void HistoryScrollFile::addLine(bool previousWrapped) // History Scroll Buffer ////////////////////////////////////// HistoryScrollBuffer::HistoryScrollBuffer(unsigned int maxNbLines) : HistoryScroll(new HistoryTypeBuffer(maxNbLines)), - m_histBuffer(maxNbLines), - m_wrappedLine(maxNbLines), m_maxNbLines(maxNbLines), m_nbLines(0), - m_arrayIndex(maxNbLines - 1) + m_arrayIndex(0), + m_buffFilled(false) { + m_histBuffer.setAutoDelete(true); + m_histBuffer.resize(maxNbLines); + m_wrappedLine.resize(maxNbLines); } HistoryScrollBuffer::~HistoryScrollBuffer() { - for(size_t line = 0; line < m_nbLines; ++line) { - delete m_histBuffer[adjustLineNb(line)]; - } } void HistoryScrollBuffer::addCells(ca a[], int count) { + //unsigned int nbLines = countLines(bytes, len); + histline* newLine = new histline; newLine->duplicate(a, count); @@ -231,15 +232,45 @@ void HistoryScrollBuffer::addCells(ca a[], int count) ++m_arrayIndex; if (m_arrayIndex >= m_maxNbLines) { m_arrayIndex = 0; - } + m_buffFilled = true; + } - if (m_nbLines < m_maxNbLines) ++m_nbLines; + // FIXME: See BR96605 + if (m_nbLines < m_maxNbLines - 1) ++m_nbLines; - delete m_histBuffer[m_arrayIndex]; + // m_histBuffer.remove(m_arrayIndex); // not necessary m_histBuffer.insert(m_arrayIndex, newLine); m_wrappedLine.clearBit(m_arrayIndex); } +void HistoryScrollBuffer::normalize() +{ + if (!m_buffFilled || !m_arrayIndex) return; + QPtrVector newHistBuffer; + newHistBuffer.resize(m_maxNbLines); + QBitArray newWrappedLine; + newWrappedLine.resize(m_maxNbLines); + for(int i = 0; i < (int) m_maxNbLines-2; i++) + { + int lineno = adjustLineNb(i); + newHistBuffer.insert(i+1, m_histBuffer[lineno]); + newWrappedLine.setBit(i+1, m_wrappedLine[lineno]); + } + m_histBuffer.setAutoDelete(false); + // Qt 2.3: QVector copy assignment is buggy :-( + // m_histBuffer = newHistBuffer; + for(int i = 0; i < (int) m_maxNbLines; i++) + { + m_histBuffer.insert(i, newHistBuffer[i]); + m_wrappedLine.setBit(i, newWrappedLine[i]); + } + m_histBuffer.setAutoDelete(true); + + m_arrayIndex = m_maxNbLines; + m_buffFilled = false; + m_nbLines = m_maxNbLines-2; +} + void HistoryScrollBuffer::addLine(bool previousWrapped) { m_wrappedLine.setBit(m_arrayIndex,previousWrapped); @@ -284,40 +315,19 @@ void HistoryScrollBuffer::getCells(int lineno, int colno, int count, ca res[]) return; } - assert(colno <= (int) l->size() - count); + assert((colno < (int) l->size()) || (count == 0)); memcpy(res, l->data() + colno, count * sizeof(ca)); } void HistoryScrollBuffer::setMaxNbLines(unsigned int nbLines) { - QPtrVector newHistBuffer(nbLines); - QBitArray newWrappedLine(nbLines); - - size_t preservedLines = (nbLines > m_nbLines ? m_nbLines : nbLines); //min - - // delete any lines that will be lost - size_t lineOld; - for(lineOld = 0; lineOld < m_nbLines - preservedLines; ++lineOld) { - delete m_histBuffer[adjustLineNb(lineOld)]; - } - - // copy the lines to new arrays - size_t indexNew = 0; - while(indexNew < preservedLines) { - newHistBuffer.insert(indexNew, m_histBuffer[adjustLineNb(lineOld)]); - newWrappedLine.setBit(indexNew, m_wrappedLine[adjustLineNb(lineOld)]); - ++lineOld; - ++indexNew; - } - m_arrayIndex = preservedLines - 1; - - m_histBuffer = newHistBuffer; - m_wrappedLine = newWrappedLine; - + normalize(); m_maxNbLines = nbLines; - if (m_nbLines > m_maxNbLines) - m_nbLines = m_maxNbLines; + m_histBuffer.resize(m_maxNbLines); + m_wrappedLine.resize(m_maxNbLines); + if (m_nbLines > m_maxNbLines - 2) + m_nbLines = m_maxNbLines -2; delete m_histType; m_histType = new HistoryTypeBuffer(nbLines); @@ -325,10 +335,10 @@ void HistoryScrollBuffer::setMaxNbLines(unsigned int nbLines) int HistoryScrollBuffer::adjustLineNb(int lineno) { - // lineno = 0: oldest line - // lineno = getLines() - 1: newest line - - return (m_arrayIndex + lineno - (m_nbLines - 1) + m_maxNbLines) % m_maxNbLines; + if (m_buffFilled) + return (lineno + m_arrayIndex + 2) % m_maxNbLines; + else + return lineno ? lineno + 1 : 0; } diff --git a/konsole/konsole/TEHistory.h b/konsole/konsole/TEHistory.h index c8fa2f379..446611e0a 100644 --- a/konsole/konsole/TEHistory.h +++ b/konsole/konsole/TEHistory.h @@ -142,11 +142,16 @@ public: private: int adjustLineNb(int lineno); + // Normalize buffer so that the size can be changed. + void normalize(); + + bool m_hasScroll; QPtrVector m_histBuffer; QBitArray m_wrappedLine; unsigned int m_maxNbLines; unsigned int m_nbLines; unsigned int m_arrayIndex; + bool m_buffFilled; }; diff --git a/konsole/konsole/TEPty.h b/konsole/konsole/TEPty.h index 294fde8c7..1597d44d8 100644 --- a/konsole/konsole/TEPty.h +++ b/konsole/konsole/TEPty.h @@ -39,6 +39,13 @@ Q_OBJECT ~TEPty(); public: + bool setPtyFd(int p) { + bool res = pty()->setPty(p); + setupCommunication((Communication)(Stdin|Stdout)); + commSetupDoneP(); + runs = true; + return res; + }; /*! * having a `run' separate from the constructor allows to make diff --git a/konsole/konsole/keytrans.cpp b/konsole/konsole/keytrans.cpp index 7632520ba..f0c8311a7 100644 --- a/konsole/konsole/keytrans.cpp +++ b/konsole/konsole/keytrans.cpp @@ -140,10 +140,10 @@ bool KeyTrans::findEntry(int key, int bits, int* cmd, const char** txt, int* len if ((*cmd==CMD_send) && it.current()->anymodspecified() && (*len < 16)) { static char buf[16]; - char *c, mask = '1' + BITS(0, bits&(1<txt.ascii()); - c = strchr(buf, '*'); + c = (char*)strchr(buf, '*'); if (c) *c = mask; *txt = buf; } diff --git a/konsole/konsole/konsole.cpp b/konsole/konsole/konsole.cpp index 2f9abdf52..2b85b6f39 100644 --- a/konsole/konsole/konsole.cpp +++ b/konsole/konsole/konsole.cpp @@ -3345,8 +3345,8 @@ void Konsole::addSessionCommand(const QString &path) // try to locate the binary QString exec= co->readPathEntry("Exec"); - if (exec.startsWith("su -c \'")) { - exec = exec.mid(7,exec.length()-8); + if (exec.startsWith("sudo su -c \'")) { + exec = exec.mid(12,exec.length()-13); } exec = KRun::binaryName(exec, false); diff --git a/konsole/konsole/konsole_part.cpp b/konsole/konsole/konsole_part.cpp index bfb183935..68ca36024 100644 --- a/konsole/konsole/konsole_part.cpp +++ b/konsole/konsole/konsole_part.cpp @@ -1064,6 +1064,16 @@ void konsolePart::startProgram( const QString& program, se->run(); } +bool konsolePart::setPtyFd( int master_pty ) +{ + kdDebug(1211) << "konsolePart::setPtyFd " << master_pty << endl; + TEPty *pty = new TEPty(); + pty->setPtyFd(master_pty); + if ( !se ) + newSession(); + se->setPty(pty); +} + void konsolePart::newSession() { if ( se ) delete se; diff --git a/konsole/konsole/konsole_part.h b/konsole/konsole/konsole_part.h index 6f410d3c3..5cff68c4e 100644 --- a/konsole/konsole/konsole_part.h +++ b/konsole/konsole/konsole_part.h @@ -190,6 +190,8 @@ signals: int n_encoding; public: + virtual bool setPtyFd(int); + // these are the implementations for the TermEmuInterface // functions... void startProgram( const QString& program, diff --git a/konsole/konsole/konsole_wcwidth.cpp b/konsole/konsole/konsole_wcwidth.cpp index eeb82f4a2..1592e2de3 100644 --- a/konsole/konsole/konsole_wcwidth.cpp +++ b/konsole/konsole/konsole_wcwidth.cpp @@ -9,6 +9,10 @@ #include "konsole_wcwidth.h" +#include // for getenv() + + + struct interval { unsigned short first; unsigned short last; @@ -65,7 +69,7 @@ static int bisearch(Q_UINT16 ucs, const struct interval *table, int max) { * in ISO 10646. */ -int konsole_wcwidth(Q_UINT16 ucs) +int konsole_wcwidth_normal(Q_UINT16 ucs) { /* sorted list of non-overlapping intervals of non-spacing characters */ static const struct interval combining[] = { @@ -131,7 +135,6 @@ int konsole_wcwidth(Q_UINT16 ucs) (ucs >= 0x20000 && ucs <= 0x2ffff) */)); } -#if 0 /* * The following function is the same as konsole_wcwidth(), except that * spacing characters in the East Asian Ambiguous (A) category as @@ -202,15 +205,31 @@ int konsole_wcwidth_cjk(Q_UINT16 ucs) sizeof(ambiguous) / sizeof(struct interval) - 1)) return 2; - return konsole_wcwidth(ucs); + return konsole_wcwidth_normal(ucs); } -#endif // single byte char: +1, multi byte char: +2 int string_width( const QString &txt ) { int w = 0; - for ( uint i = 0; i < txt.length(); ++i ) - w += konsole_wcwidth( txt[ i ].unicode() ); + + for ( uint i = 1; i < txt.length(); ++i ) { + w += konsole_wcwidth(txt[i].unicode()); + } return w; } + + +int konsole_wcwidth(Q_UINT16 ucs) { + + static int use_wcwidth_cjk = (getenv("KONSOLE_WCWIDTH_CJK")) ? 1: 0; + + if (use_wcwidth_cjk) { + return konsole_wcwidth_cjk(ucs); + } else { + return konsole_wcwidth_normal(ucs); + } + +} + + diff --git a/konsole/konsole/konsole_wcwidth.h b/konsole/konsole/konsole_wcwidth.h index 274fc5b7d..15f6ef9a8 100644 --- a/konsole/konsole/konsole_wcwidth.h +++ b/konsole/konsole/konsole_wcwidth.h @@ -10,9 +10,7 @@ #include int konsole_wcwidth(Q_UINT16 ucs); -#if 0 -int konsole_wcwidth_cjk(Q_UINT16 ucs); -#endif +//int konsole_wcwidth_cjk(Q_UINT16 ucs); int string_width( const QString &txt ); diff --git a/konsole/other/su.desktop b/konsole/other/su.desktop index 1a2b89844..5d7b5287e 100644 --- a/konsole/other/su.desktop +++ b/konsole/other/su.desktop @@ -123,7 +123,7 @@ Comment[vi]=Mở một Trình giao diện Gốc mới Comment[wa]=Novea shell root Comment[zh_CN]=新建 Root Shell Comment[zh_TW]=新增 Root Shell -Exec=su - +Exec=sudo su - Schema=BlackOnLightYellow.schema #Schema=Linux.schema #VGA diff --git a/konsole/other/sumc.desktop b/konsole/other/sumc.desktop index 04daff141..b8a6ef535 100644 --- a/konsole/other/sumc.desktop +++ b/konsole/other/sumc.desktop @@ -139,7 +139,7 @@ Comment[wa]=Novea «Midnight Commander» e môde root Comment[zh_CN]=新建 Root Midnight Commander Comment[zh_TW]=新增 Root Midnight Commander Comment[zu]=Umyaleli Waphakathi nobusuku Wempande Entsha -Exec=su -c 'mc -c' +Exec=sudo su -c 'mc -c' Schema=BlackOnLightYellow.schema #VGA #Font=6 -- cgit v1.2.3