Version: 3.0.3 (using KDE KDE 3.2.2) Installed from: Compiled From Sources Compiler: gcc3.2 OS: Linux Please refer to: http://www.ics.uci.edu/~savoiu/kdevelop.png I use a rather 'odd' color scheme. This has the unfortunate effect of rendering the output for the 'Application' tab rather hard to read since only the window background seems to respect the selected KDE color scheme. Similarly for the 'Grep' tab. Ideally tabs should either respect the KDE color scheme or alter both foreground/background colors.
*** Bug 78929 has been marked as a duplicate of this bug. ***
when i change the color scheme here, the window background isn't even respected. I get white on black as if i was using the kde default color scheme. Ideally, all the color settings should be respected.
KDevelop 3.3.91 also has this problem in the Frame Stack (but only for the function names column not frame numbers one).
Fixed recently by Matthew Woelke
The issue in comment #3 still exists. See attachment.
Created attachment 18991 [details] Snapshot of stack frames with background color problem
SVN commit 615311 by apaku: Don't use hardcoded colors, this messes up KDE styling. Volodya: If you think you really need 2 colors in the listview, lets discuss this on the list and see what color role may fit the purpose. BUG: 81278 CCMAIL: kdevelop-devel@kdevelop.org M +29 -66 framestackwidget.cpp M +7 -16 framestackwidget.h --- branches/kdevelop/3.4/languages/cpp/debugger/framestackwidget.cpp #615310:615311 @@ -38,7 +38,7 @@ { FramestackWidget::FramestackWidget(GDBController* controller, - QWidget *parent, + QWidget *parent, const char *name, WFlags f) : QListView(parent, name, f), viewedThread_(0), @@ -129,7 +129,7 @@ { switch(e) { - case GDBController::program_state_changed: + case GDBController::program_state_changed: kdDebug(9012) << "Clearning framestack\n"; clear(); @@ -139,17 +139,17 @@ this, &FramestackWidget::handleThreadList)); break; - - case GDBController::thread_or_frame_changed: + case GDBController::thread_or_frame_changed: + if (viewedThread_) { // For non-threaded programs frame switch is no-op // as far as framestack is concerned. // FIXME: but need to highlight the current frame. - - if (ThreadStackItem* item + + if (ThreadStackItem* item = findThread(controller_->currentThread())) { viewedThread_ = item; @@ -164,12 +164,12 @@ break; - case GDBController::program_exited: - case GDBController::debugger_exited: + case GDBController::program_exited: + case GDBController::debugger_exited: { clear(); break; - } + } case GDBController::debugger_busy: case GDBController::debugger_ready: case GDBController::shared_library_loaded: @@ -186,8 +186,8 @@ controller_->addCommand( new GDBCommand(QString("-stack-info-depth %1").arg(max_frame+1), - this, - &FramestackWidget::handleStackDepth)); + this, + &FramestackWidget::handleStackDepth)); } void FramestackWidget::handleStackDepth(const GDBMI::ResultRecord& r) @@ -202,7 +202,7 @@ controller_->addCommandToFront( new GDBCommand(QString("-stack-list-frames %1 %2") .arg(minFrame_).arg(maxFrame_), - this, &FramestackWidget::parseGDBBacktraceList)); + this, &FramestackWidget::parseGDBBacktraceList)); } void FramestackWidget::getBacktraceForThread(int threadNo) @@ -217,7 +217,7 @@ viewedThread_ = findThread(threadNo); } - + getBacktrace(); if (viewedThread_) @@ -231,11 +231,11 @@ void FramestackWidget::handleThreadList(const GDBMI::ResultRecord& r) { - // Gdb reply is: + // Gdb reply is: // ^done,thread-ids={thread-id="3",thread-id="2",thread-id="1"}, // which syntactically is a tuple, but one has to access it // by index anyway. - const GDBMI::TupleValue& ids = + const GDBMI::TupleValue& ids = dynamic_cast<const GDBMI::TupleValue&>(r["thread-ids"]); if (ids.results.size() > 1) @@ -244,14 +244,14 @@ // Note that this sequence of command will be executed in strict // sequences, so no other view can add its command in between and // get state for a wrong thread. - + // Really threaded program. for(unsigned i = 0, e = ids.results.size(); i != e; ++i) { QString id = ids.results[i]->value->literal(); controller_->addCommand( - new GDBCommand(QString("-thread-select %1").arg(id).ascii(), + new GDBCommand(QString("-thread-select %1").arg(id).ascii(), this, &FramestackWidget::handleThread)); } @@ -261,7 +261,7 @@ } // Get backtrace for the current thread. We need to do this - // here, and not in event handler for program_state_changed, + // here, and not in event handler for program_state_changed, // viewedThread_ is initialized by 'handleThread' before // backtrace handler is called. getBacktrace(); @@ -276,7 +276,7 @@ QString func_column; QString args_column; QString source_column; - + formatFrame(r["frame"], func_column, source_column); ThreadStackItem* thread = new ThreadStackItem(this, id_num); @@ -298,7 +298,7 @@ if (!r.hasField("stack")) return; - const GDBMI::Value& frames = r["stack"]; + const GDBMI::Value& frames = r["stack"]; if (frames.empty()) return; @@ -306,7 +306,7 @@ Q_ASSERT(dynamic_cast<const GDBMI::ListValue*>(&frames)); // Remove "..." item, if there's one. - QListViewItem* last; + QListViewItem* last; if (viewedThread_) { last = viewedThread_->firstChild(); @@ -314,7 +314,7 @@ while(last->nextSibling()) last = last->nextSibling(); } - else + else { last = lastItem(); } @@ -325,7 +325,7 @@ for(unsigned i = 0, e = frames.size(); i != e; ++i) { const GDBMI::Value& frame = frames[i]; - + // For now, just produce string simular to gdb // console output. In future we might have a table, // or something better. @@ -341,7 +341,7 @@ name_column = "#" + level_s; formatFrame(frame, func_column, source_column); - + FrameStackItem* item; if (viewedThread_) item = new FrameStackItem(viewedThread_, level, name_column); @@ -350,7 +350,7 @@ lastLevel = level; item->setText(1, func_column); - item->setText(2, source_column); + item->setText(2, source_column); } if (has_more_frames) { @@ -452,25 +452,11 @@ } } - -void FramestackWidget::drawContentsOffset( QPainter * p, int ox, int oy, - int cx, int cy, int cw, int ch ) -{ - QListView::drawContentsOffset(p, ox, oy, cx, cy, cw, ch); - - int s1_x = header()->sectionPos(1); - int s1_w = header()->sectionSize(1); - - QRect section1(s1_x, contentsHeight(), s1_w, viewport()->height()); - - p->fillRect(section1, QColor("#e4f4fe")); -} - // ************************************************************************** // ************************************************************************** // ************************************************************************** -FrameStackItem::FrameStackItem(FramestackWidget *parent, +FrameStackItem::FrameStackItem(FramestackWidget *parent, unsigned frameNo, const QString &name) : QListViewItem(parent, parent->lastChild()), @@ -482,7 +468,7 @@ // ************************************************************************** -FrameStackItem::FrameStackItem(ThreadStackItem *parent, +FrameStackItem::FrameStackItem(ThreadStackItem *parent, unsigned frameNo, const QString &name) : QListViewItem(parent, parent->lastChild()), @@ -512,7 +498,7 @@ // ************************************************************************** void FrameStackItem::setOpen(bool open) -{ +{ #if 0 if (open) { @@ -569,7 +555,7 @@ // Imagine you have 20 frames and you want to find one blocked on // mutex. You don't want a new source file to be opened for each - // thread you open to find if that's the one you want to debug. + // thread you open to find if that's the one you want to debug. ((FramestackWidget*)listView())->getBacktraceForThread(threadNo()); } @@ -589,31 +575,8 @@ QListViewItem::setOpen(open); } -void FrameStackItem::paintCell(QPainter * p, const QColorGroup & cg, - int column, int width, int align ) -{ - QColorGroup cg2(cg); - if (column % 2) - { - cg2.setColor(QColorGroup::Base, QColor("#e4f4fe")); - } - QListViewItem::paintCell(p, cg2, column, width, align); } -void ThreadStackItem::paintCell(QPainter * p, const QColorGroup & cg, - int column, int width, int align ) -{ - QColorGroup cg2(cg); - if (column % 2) - { - cg2.setColor(QColorGroup::Base, QColor("#e4f4fe")); - } - QListViewItem::paintCell(p, cg2, column, width, align); -} - - -} - /***************************************************************************/ /***************************************************************************/ /***************************************************************************/ --- branches/kdevelop/3.4/languages/cpp/debugger/framestackwidget.h #615310:615311 @@ -33,15 +33,13 @@ class ThreadStackItem : public QListViewItem { public: - ThreadStackItem(FramestackWidget *parent, + ThreadStackItem(FramestackWidget *parent, unsigned threadNo); virtual ~ThreadStackItem(); void setOpen(bool open); QListViewItem *lastChild() const; - void paintCell(QPainter * p, const QColorGroup & cg, - int column, int width, int align ); int threadNo() { return threadNo_; } @@ -59,10 +57,10 @@ class FrameStackItem : public QListViewItem { public: - FrameStackItem(FramestackWidget *parent, + FrameStackItem(FramestackWidget *parent, unsigned frameNo, const QString &name); - FrameStackItem(ThreadStackItem *parent, + FrameStackItem(ThreadStackItem *parent, unsigned frameNo, const QString &name); virtual ~FrameStackItem(); @@ -70,8 +68,6 @@ void setOpen(bool open); QListViewItem *lastChild() const; - void paintCell(QPainter * p, const QColorGroup & cg, - int column, int width, int align ); int frameNo() { return frameNo_; } @@ -95,25 +91,20 @@ public: FramestackWidget( GDBController* controller, - QWidget *parent=0, + QWidget *parent=0, const char *name=0, WFlags f=0 ); virtual ~FramestackWidget(); QListViewItem *lastChild() const; - + ThreadStackItem *findThread(int threadNo); FrameStackItem *findFrame(int frameNo, int threadNo); int viewedThread() { return viewedThread_ ? viewedThread_->threadNo() : -1; } -protected: - void drawContentsOffset( QPainter * p, int ox, int oy, - int cx, int cy, int cw, int ch ); - - private: /** Given gdb's 'frame' information, compute decent textual representation for display. @@ -124,7 +115,7 @@ QString& func_column, QString& source_column); - /** Cause gdb to produce backtrace for the current thread. + /** Cause gdb to produce backtrace for the current thread. GDB reply will be route to parseArg and parseGDBBacktraceList, and will show up under viewedThread_ (if there are threads), or @@ -137,7 +128,7 @@ Switches viewedThread_ to the specified thread, switches gdb thread, call getBacktrace(), and switches the current thread back. - */ + */ void getBacktraceForThread(int threadNo); friend class ThreadStackItem;