Index: /trunk/src/VBox/Frontends/VirtualBox/src/logviewer/UIVMLogPage.cpp
===================================================================
--- /trunk/src/VBox/Frontends/VirtualBox/src/logviewer/UIVMLogPage.cpp	(revision 70577)
+++ /trunk/src/VBox/Frontends/VirtualBox/src/logviewer/UIVMLogPage.cpp	(revision 70578)
@@ -43,4 +43,5 @@
     , m_pTextEdit(0)
     , m_tabIndex(tabIndex)
+    , m_bFiltered(false)
 {
     prepare();
@@ -193,5 +194,5 @@
     for(int i = 0; i < m_bookmarkVector.size(); ++i)
     {
-        if(m_bookmarkVector.at(i).first)
+        if(m_bookmarkVector.at(i).first == bookmark.first)
         {
             index = i;
@@ -252,16 +253,19 @@
 }
 
-// void UIVMLogViewerWidget::sltCreateBookmarkAtCurrent()
-// {
-    // if (!currentTextEdit())
-    //     return;
-    // QWidget* viewport = currentTextEdit()->viewport();
-    // if (!viewport)
-    //     return;
-    // QPoint point(0.5 * viewport->width(), 0.5 * viewport->height());
-    // QTextBlock block = currentTextEdit()->cursorForPosition(point).block();
-    // LogBookmark bookmark;
-    // bookmark.first = block.firstLineNumber();
-    // bookmark.second = block.text();
-    // sltCreateBookmarkAtLine(bookmark);
-//}
+bool UIVMLogPage::isFiltered() const
+{
+    return m_bFiltered;
+}
+
+void UIVMLogPage::setFiltered(bool filtered)
+{
+    if(m_bFiltered == filtered)
+        return;
+    m_bFiltered = filtered;
+    if(m_pTextEdit)
+    {
+        m_pTextEdit->setShownTextIsFiltered(m_bFiltered);
+        m_pTextEdit->update();
+    }
+    emit sigLogPageFilteredChanged(m_bFiltered);
+}
Index: /trunk/src/VBox/Frontends/VirtualBox/src/logviewer/UIVMLogPage.h
===================================================================
--- /trunk/src/VBox/Frontends/VirtualBox/src/logviewer/UIVMLogPage.h	(revision 70577)
+++ /trunk/src/VBox/Frontends/VirtualBox/src/logviewer/UIVMLogPage.h	(revision 70578)
@@ -45,4 +45,5 @@
 
     void sigBookmarksUpdated();
+    void sigLogPageFilteredChanged(bool isFiltered);
 
 public:
@@ -82,5 +83,4 @@
 
     void deleteBookmark(int index);
-    void deleteBookmark(LogBookmark bookmark);
 
     const QVector<LogBookmark>& bookmarkVector() const;
@@ -89,5 +89,6 @@
     void scrollToBookmark(int bookmarkIndex);
 
-protected:
+    bool isFiltered() const;
+    void setFiltered(bool filtered);
 
 private slots:
@@ -97,4 +98,5 @@
 
 private:
+
     void prepare();
     void prepareWidgets();
@@ -102,4 +104,5 @@
     void retranslateUi();
     void updateTextEditBookmarkLineSet();
+    void deleteBookmark(LogBookmark bookmark);
 
     QHBoxLayout    *m_pMainLayout;
@@ -111,7 +114,9 @@
     /** This is the index of the tab containing this widget in UIVMLogViewerWidget. */
     int             m_tabIndex;
-
+    /** Stores the bookmarks of the logpage. All other bookmark related containers are updated wrt. this one. */
     QVector<LogBookmark> m_bookmarkVector;
-
+    /** Designates whether currently displayed text is log text or a filtered version of it. That is
+        if m_bFiltered is false than (m_strLog == m_pTextEdit->text()). */
+    bool m_bFiltered;
 };
 
Index: /trunk/src/VBox/Frontends/VirtualBox/src/logviewer/UIVMLogViewerFilterPanel.cpp
===================================================================
--- /trunk/src/VBox/Frontends/VirtualBox/src/logviewer/UIVMLogViewerFilterPanel.cpp	(revision 70577)
+++ /trunk/src/VBox/Frontends/VirtualBox/src/logviewer/UIVMLogViewerFilterPanel.cpp	(revision 70578)
@@ -217,5 +217,5 @@
     {
         document->setPlainText(*originalLogString);
-        emit sigFilterApplied();
+        emit sigFilterApplied(true /* isOriginalLog */);
         m_iFilteredLineCount = document->lineCount();
         return;
@@ -245,5 +245,5 @@
     pCurrentTextEdit->setTextCursor(cursor);
 
-    emit sigFilterApplied();
+    emit sigFilterApplied(false /* isOriginalLog */);
 }
 
Index: /trunk/src/VBox/Frontends/VirtualBox/src/logviewer/UIVMLogViewerFilterPanel.h
===================================================================
--- /trunk/src/VBox/Frontends/VirtualBox/src/logviewer/UIVMLogViewerFilterPanel.h	(revision 70577)
+++ /trunk/src/VBox/Frontends/VirtualBox/src/logviewer/UIVMLogViewerFilterPanel.h	(revision 70578)
@@ -42,6 +42,8 @@
 signals:
 
-    /* Notifies listeners that the filter has been applied. */
-    void sigFilterApplied();
+    /* Notifies listeners that the filter has been applied. @a isOriginalLog is true
+     if filter function returns early for some reason (no filter term etc.) and log page
+     content is set to original log file. @a isOriginalLog is false if content is reduced (filtered)*/
+    void sigFilterApplied(bool isOriginalLog);
 
 public:
Index: /trunk/src/VBox/Frontends/VirtualBox/src/logviewer/UIVMLogViewerTextEdit.cpp
===================================================================
--- /trunk/src/VBox/Frontends/VirtualBox/src/logviewer/UIVMLogViewerTextEdit.cpp	(revision 70577)
+++ /trunk/src/VBox/Frontends/VirtualBox/src/logviewer/UIVMLogViewerTextEdit.cpp	(revision 70578)
@@ -153,4 +153,5 @@
     , m_pLineNumberArea(0)
     , m_mouseCursorLine(-1)
+    , m_bShownTextIsFiltered(false)
 {
     setMouseTracking(true);
@@ -219,5 +220,6 @@
         if (block.isVisible() && bottom >= event->rect().top()) {
             QString number = QString::number(blockNumber + 1);
-            if (m_bookmarkLineSet.contains(blockNumber + 1))
+            /* Mark this line if it is bookmarked, but only if the text is not filtered. */
+            if (m_bookmarkLineSet.contains(blockNumber + 1) && !m_bShownTextIsFiltered)
             {
                 QPainterPath path;
@@ -245,4 +247,12 @@
 void UIVMLogViewerTextEdit::contextMenuEvent(QContextMenuEvent *pEvent)
 {
+    /* If shown text is filtered, do not create Bookmark action since
+       we disable all bookmarking related functionalities in this case. */
+    if(m_bShownTextIsFiltered)
+    {
+        QPlainTextEdit::contextMenuEvent(pEvent);
+        return;
+    }
+
     QMenu *menu = createStandardContextMenu();
     QAction *pAction = menu->addAction(tr("Bookmark"));
@@ -257,4 +267,27 @@
 
     delete menu;
+}
+
+void UIVMLogViewerTextEdit::paintEvent(QPaintEvent *pEvent)
+{
+    QPlainTextEdit::paintEvent(pEvent);
+    if (m_bShownTextIsFiltered && viewport())
+    {
+        int rectHeight = 24;
+        int rectWidth = 84;
+        int rectX = viewport()->width() - rectWidth;
+        int rectMargin = 4;
+        if(verticalScrollBar())
+            rectX -= verticalScrollBar()->width();
+        QPainter painter(viewport());
+        painter.fillRect(rectX, 0, rectWidth, rectHeight, QColor(125, 125, 125, 100));
+        QFont nFont(painter.font());
+        nFont.setPixelSize(rectHeight- 2 * rectMargin) ;
+        painter.setFont(nFont);
+        painter.setPen(QPen(QColor(255, 0, 0, 175), 1.8f));
+        painter.drawText(rectX + rectMargin, rectMargin, rectWidth, rectHeight,
+                         Qt::AlignLeft, "Filtered");
+        viewport()->update();
+    }
 }
 
@@ -359,4 +392,7 @@
 void UIVMLogViewerTextEdit::toggleBookmark(const QPair<int, QString>& bookmark)
 {
+    if(m_bShownTextIsFiltered)
+        return;
+
     int lineNumber = bookmark.first;
 
@@ -367,3 +403,10 @@
 }
 
+void UIVMLogViewerTextEdit::setShownTextIsFiltered(bool warning)
+{
+    if(m_bShownTextIsFiltered == warning)
+        return;
+    m_bShownTextIsFiltered = warning;
+}
+
 #include "UIVMLogViewerTextEdit.moc"
Index: /trunk/src/VBox/Frontends/VirtualBox/src/logviewer/UIVMLogViewerTextEdit.h
===================================================================
--- /trunk/src/VBox/Frontends/VirtualBox/src/logviewer/UIVMLogViewerTextEdit.h	(revision 70577)
+++ /trunk/src/VBox/Frontends/VirtualBox/src/logviewer/UIVMLogViewerTextEdit.h	(revision 70578)
@@ -25,5 +25,5 @@
 
 /* QPlainTextEdit extension for some addtional context menu items,
-   a special scrollbar, line number area, and bookmark support: */
+   a special scrollbar, line number area, and bookmarking support: */
 class UIVMLogViewerTextEdit : public QPlainTextEdit
 {
@@ -46,12 +46,13 @@
 
     void scrollToLine(int lineNumber);
-
     void setBookmarkLineSet(const QSet<int>& lineSet);
+    void setShownTextIsFiltered(bool warning);
 
 protected:
 
-    void contextMenuEvent(QContextMenuEvent *pEvent) /* override */;
-    void resizeEvent(QResizeEvent *pEvent) /* override */;
-    void mouseMoveEvent(QMouseEvent *pEvent) /* override */;
+    virtual void paintEvent(QPaintEvent *pEvent) /* override */;
+    virtual void contextMenuEvent(QContextMenuEvent *pEvent) /* override */;
+    virtual void resizeEvent(QResizeEvent *pEvent) /* override */;
+    virtual void mouseMoveEvent(QMouseEvent *pEvent) /* override */;
 
 private slots:
@@ -79,5 +80,8 @@
     /** Number of the line under the mouse cursor. */
     int                  m_mouseCursorLine;
-
+    /** If true the we draw a text near the top right corner of the text edit to warn
+        the user the text edit's content is filtered (as oppesed to whole log file content.
+        And we dont display bookmarks and adding/deleting bookmarks are disabled. */
+    bool                 m_bShownTextIsFiltered;
     friend class UILineNumberArea;
 };
Index: /trunk/src/VBox/Frontends/VirtualBox/src/logviewer/UIVMLogViewerWidget.cpp
===================================================================
--- /trunk/src/VBox/Frontends/VirtualBox/src/logviewer/UIVMLogViewerWidget.cpp	(revision 70577)
+++ /trunk/src/VBox/Frontends/VirtualBox/src/logviewer/UIVMLogViewerWidget.cpp	(revision 70578)
@@ -128,5 +128,5 @@
 }
 
-void UIVMLogViewerWidget::sltBoomarksUpdated()
+void UIVMLogViewerWidget::sltUpdateBookmarkPanel()
 {
     if(!currentLogPage() || !m_pBookmarksPanel)
@@ -275,9 +275,27 @@
 }
 
-void UIVMLogViewerWidget::sltFilterApplied()
-{
+void UIVMLogViewerWidget::sltFilterApplied(bool isOriginal)
+{
+    if(currentLogPage())
+        currentLogPage()->setFiltered(!isOriginal);
     /* Reapply the search to get highlighting etc. correctly */
     if (m_pSearchPanel && m_pSearchPanel->isVisible())
         m_pSearchPanel->refresh();
+}
+
+void UIVMLogViewerWidget::sltLogPageFilteredChanged(bool isFiltered)
+{
+    /* Disable bookmark panel since bookmarks are stored as line numbers within
+       the original log text and does not mean much in a reduced/filtered one. */
+    if(m_pBookmarksPanel)
+    {
+        if(isFiltered)
+        {
+            m_pBookmarksPanel->setEnabled(false);
+            m_pBookmarksPanel->setVisible(false);
+        }
+        else
+            m_pBookmarksPanel->setEnabled(true);
+    }
 }
 
@@ -743,5 +761,6 @@
     /* Create page-container: */
     UIVMLogPage* pLogPage = new UIVMLogPage(this);
-    connect(pLogPage, &UIVMLogPage::sigBookmarksUpdated, this, &UIVMLogViewerWidget::sltBoomarksUpdated);
+    connect(pLogPage, &UIVMLogPage::sigBookmarksUpdated, this, &UIVMLogViewerWidget::sltUpdateBookmarkPanel);
+    connect(pLogPage, &UIVMLogPage::sigLogPageFilteredChanged, this, &UIVMLogViewerWidget::sltLogPageFilteredChanged);
     AssertPtrReturnVoid(pLogPage);
     /* Set the file name only if we really have log file to read. */
Index: /trunk/src/VBox/Frontends/VirtualBox/src/logviewer/UIVMLogViewerWidget.h
===================================================================
--- /trunk/src/VBox/Frontends/VirtualBox/src/logviewer/UIVMLogViewerWidget.h	(revision 70577)
+++ /trunk/src/VBox/Frontends/VirtualBox/src/logviewer/UIVMLogViewerWidget.h	(revision 70578)
@@ -98,5 +98,5 @@
         void sltDeleteAllBookmarks();
         /** Manages bookmark panel update when bookmark vector is updated */
-        void sltBoomarksUpdated();
+        void sltUpdateBookmarkPanel();
         /* Makes the current UIVMLogPage to goto (scroll) its bookmark with index @a index. */
         void gotoBookmark(int bookmarkIndex);
@@ -108,5 +108,10 @@
     /** Handles the tab change of the logviewer. */
     void sltTabIndexChange(int tabIndex);
-    void sltFilterApplied();
+    /* if @a isOriginal true than the result of the filtering is equal to
+       the original log file for some reason. */
+    void sltFilterApplied(bool isOriginal);
+    /* Handles the UIVMLogPage signal which is emitted when isFiltered property
+       of UIVMLogPage is changed. */
+    void sltLogPageFilteredChanged(bool isFiltered);
 
 private:
