Index: Scribus/scribus/checkDocument.cpp
===================================================================
--- Scribus/scribus/checkDocument.cpp	(wersja 16076)
+++ Scribus/scribus/checkDocument.cpp	(kopia robocza)
@@ -183,6 +183,7 @@
        checkMode = checkNULL;
        languageChange();
        itemMap.clear();
+	posMap.clear();
        pageMap.clear();
        masterPageMap.clear();
        masterPageItemMap.clear();
@@ -198,7 +199,7 @@
        if (itemMap.contains(ite))
        {
                ScCore->primaryMainWindow()->closeActiveWindowMasterPageEditor();
-		emit selectElement(m_Doc->DocItems.at(itemMap[ite])->OwnPage, itemMap[ite]);
+		emit selectElement(m_Doc->DocItems.at(itemMap[ite])->OwnPage, itemMap[ite], posMap[ite]);
                return;
        }
        if (pageMap.contains(ite))
@@ -216,7 +217,7 @@
        {
                if (!m_Doc->masterPageMode())
                        emit selectMasterPage(m_Doc->MasterItems.at(masterPageItemMap[ite])->OnMasterPage);
-		emit selectElement(-1, masterPageItemMap[ite]);
+		emit selectElement(-1, masterPageItemMap[ite],0);
                return;
        }
 }
@@ -242,6 +243,7 @@
        reportDisplay->clear();
        reportDisplay->setSortingEnabled(false);
        itemMap.clear();
+	posMap.clear();
        pageMap.clear();
        masterPageMap.clear();
        masterPageItemMap.clear();
@@ -532,6 +534,7 @@
                                        {
                                                it3 = docItemErrorsIt.value().begin();
                                                buildItem(object, it3.key(), doc->DocItems.at(docItemErrorsIt.key()));
+						posMap.insert(object, it3.value());
                                        }
                                        else
                                        {
@@ -539,6 +542,7 @@
                                                {
                                                        QTreeWidgetItem * errorText = new QTreeWidgetItem( object);
                                                        buildItem(errorText, it3.key(), doc->DocItems.at(docItemErrorsIt.key()));
+							posMap.insert(object, it3.value());
                                                }
                                                object->setExpanded( true );
                                        }
Index: Scribus/scribus/scribus.cpp
===================================================================
--- Scribus/scribus/scribus.cpp	(wersja 16076)
+++ Scribus/scribus/scribus.cpp	(kopia robocza)
@@ -528,7 +528,7 @@
        connect( styleManager, SIGNAL(paletteShown(bool)), scrActions["editStyles"], SLOT(setChecked(bool)));
        styleManager->installEventFilter(this);

-	connect(docCheckerPalette, SIGNAL(selectElement(int, int)), this, SLOT(selectItemsFromOutlines(int, int)));
+	connect(docCheckerPalette, SIGNAL(selectElement(int, int, int)), this, SLOT(selectItemsFromOutlines(int, int, int)));
        connect(docCheckerPalette, SIGNAL(selectPage(int)), this, SLOT(selectPagesFromOutlines(int)));
        connect(docCheckerPalette, SIGNAL(selectMasterPage(QString)), this, SLOT(manageMasterPages(QString)));
        connect(outlinePalette, SIGNAL(selectElement(int, int, bool)), this, SLOT(selectItemsFromOutlines(int, int, bool)));
@@ -7606,6 +7606,49 @@
                }
        }
 }
+void ScribusMainWindow::selectItemsFromOutlines(int Page, int Item, int cPos)
+{
+	if (HaveDoc && doc->appMode == modeEditClip)
+		view->requestMode(submodeEndNodeEdit);
+	activateWindow();
+	view->Deselect(true);
+	if ((Page != -1) && (Page != static_cast<int>(doc->currentPage()->pageNr())))
+		view->GotoPage(Page);
+	doc->m_Selection->delaySignalsOn();
+	view->SelectItemNr(Item, true, false);
+	doc->m_Selection->delaySignalsOff();
+	doc->m_Selection->connectItemToGUI();
+	if (doc->m_Selection->count() != 0)
+	{
+		PageItem *currItem = doc->m_Selection->itemAt(0);
+	 	double rotation=currItem->rotation();
+		if ( rotation != 0.0 )
+		{
+			double MPI180=1.0/(180.0*M_PI);
+			double y1 = sin(rotation*MPI180) * currItem->width();
+			double x1 = cos(rotation*MPI180) * currItem->width();
+			double y2 = sin((rotation+90.0)*MPI180) * currItem->height();
+			double x2 = cos((rotation+90.0)*MPI180) * currItem->height();
+			double mx = currItem->xPos() + ((x1 + x2)/2.0);
+			double my = currItem->yPos() + ((y1 + y2)/2.0);
+			view->SetCCPo(mx, my);
+		}
+		else
+		{
+			view->SetCCPo(currItem->xPos() + currItem->width() / 2.0, currItem->yPos() + currItem->height() / 2.0);
+		}
+		//FIX ME - all above is the same as in selectItemsFromOutlines(int Page, int Item, bool single)
+		//maybe we should make this as separate privet method called in these both slots?
+		// placing cursor at position of error for text
+		// for Missing Glyphs, in future for widows/orphans and RGB text error items
+		if (currItem->isTextFrame())
+		{
+			view->requestMode(modeEdit);
+			currItem->CPos = cPos;
+			currItem->update();
+		}
+	}
+}

 void ScribusMainWindow::selectPagesFromOutlines(int Page)
 {
Index: Scribus/scribus/checkDocument.h
===================================================================
--- Scribus/scribus/checkDocument.h	(wersja 16076)
+++ Scribus/scribus/checkDocument.h	(kopia robocza)
@@ -78,7 +78,7 @@
 signals:
        //void rescan();
        //! \brief Signal emitted when user selects any page item in error list.
-	void selectElement(int, int);
+	void selectElement(int, int, int);
        //! \brief Signal emitted when user selects any page in error list.
        void selectPage(int);
        //! \brief Signal emitted when user selects any master page in error list.
@@ -100,6 +100,8 @@
 private:
        //! \brief Mappping Page Item - item nr.
        QMap<QTreeWidgetItem*, int> itemMap;
+	//! \brief Mappping Page Item - cursor position in item
+	QMap<QTreeWidgetItem*, int> posMap;
        //! \brief Mappping Page - page nr.
        QMap<QTreeWidgetItem*, int> pageMap;
        //! \brief Mappping Master Page - MP nr.
Index: Scribus/scribus/documentchecker.cpp
===================================================================
--- Scribus/scribus/documentchecker.cpp	(wersja 16076)
+++ Scribus/scribus/documentchecker.cpp	(kopia robocza)
@@ -280,7 +280,7 @@
                                                }
                                                chr = chstr[0].unicode();
                                                if ((!currItem->itemText.charStyle(e).font().canRender(chr)) && (checkerSettings.checkGlyphs))
-							itemError.insert(MissingGlyph, 0);
+							itemError.insert(MissingGlyph, e);
                                        }
                                        for (int t1 = 0; t1 < currItem->itemText.defaultStyle().tabValues().count(); t1++)
                                        {
@@ -294,7 +294,7 @@
                                                }
                                                chr = chstr[0].unicode();
                                                if ((!currItem->itemText.charStyle(e).font().canRender(chr)) && (checkerSettings.checkGlyphs))
-							itemError.insert(MissingGlyph, 0);
+							itemError.insert(MissingGlyph, e);
                                        }
                                        continue;
                                }
@@ -303,12 +303,12 @@
                                        for (uint numco = 0x30; numco < 0x3A; ++numco)
                                        {
                                                if ((!currItem->itemText.charStyle(e).font().canRender(numco)) && (checkerSettings.checkGlyphs))
-							itemError.insert(MissingGlyph, 0);
+							itemError.insert(MissingGlyph, e);
                                        }
                                        continue;
                                }
                                if ((!currItem->itemText.charStyle(e).font().canRender(chr)) && (checkerSettings.checkGlyphs))
-					itemError.insert(MissingGlyph, 0);
+					itemError.insert(MissingGlyph, e);
                        }
 #endif
                }
Index: Scribus/scribus/scribus.h
===================================================================
--- Scribus/scribus/scribus.h	(wersja 16076)
+++ Scribus/scribus/scribus.h	(kopia robocza)
@@ -488,6 +488,7 @@
        void setAbsValue(int a);
        void selectItemsFromOutlines(PageItem *ite);
        void selectItemsFromOutlines(int Page, int Item, bool single = false);
+	void selectItemsFromOutlines(int Page, int Item, int cPos);
        void selectPagesFromOutlines(int Page);
        void doPrintPreview();
        void printPreview();
