diff --git a/libretroshare/src/retroshare/rsnotify.h b/libretroshare/src/retroshare/rsnotify.h index 0743a676d..b458aead5 100644 --- a/libretroshare/src/retroshare/rsnotify.h +++ b/libretroshare/src/retroshare/rsnotify.h @@ -49,8 +49,8 @@ const uint32_t RS_SYSTRAY_GROUP_MSG = 0x0010; /* CHAT flags are here - so they are in the same place as * other Notify flags... not used by libretroshare though */ -const uint32_t RS_CHAT_OPEN_NEW = 0x0001; -const uint32_t RS_CHAT_REOPEN = 0x0002; +const uint32_t RS_CHAT_OPEN = 0x0001; +//const uint32_t free = 0x0002; const uint32_t RS_CHAT_FOCUS = 0x0004; const uint32_t RS_FEED_TYPE_PEER = 0x0010; diff --git a/retroshare-gui/src/gui/MainWindow.cpp b/retroshare-gui/src/gui/MainWindow.cpp index ac4946f4e..258f15796 100644 --- a/retroshare-gui/src/gui/MainWindow.cpp +++ b/retroshare-gui/src/gui/MainWindow.cpp @@ -918,7 +918,7 @@ void MainWindow::trayIconChatClicked(QSystemTrayIcon::ActivationReason e) PopupChatDialog *pcd = NULL; std::list ids; if (rsMsgs->getPrivateChatQueueIds(true, ids) && ids.size()) { - pcd = PopupChatDialog::getPrivateChat(ids.front(), RS_CHAT_OPEN_NEW | RS_CHAT_REOPEN | RS_CHAT_FOCUS); + pcd = PopupChatDialog::getPrivateChat(ids.front(), RS_CHAT_OPEN | RS_CHAT_FOCUS); } if (pcd == NULL) { diff --git a/retroshare-gui/src/gui/PeersDialog.cpp b/retroshare-gui/src/gui/PeersDialog.cpp index 2e08313d0..d11c8d05f 100644 --- a/retroshare-gui/src/gui/PeersDialog.cpp +++ b/retroshare-gui/src/gui/PeersDialog.cpp @@ -1350,7 +1350,7 @@ void PeersDialog::updatePeerStatusString(const QString& peer_id,const QString& s { if(is_private_chat) { - PopupChatDialog *pcd = PopupChatDialog::getPrivateChat(peer_id.toStdString(), 0); + PopupChatDialog *pcd = PopupChatDialog::getExistingInstance(peer_id.toStdString()); if (pcd) { pcd->updateStatusString(peer_id, status_string); } diff --git a/retroshare-gui/src/gui/chat/PopupChatDialog.cpp b/retroshare-gui/src/gui/chat/PopupChatDialog.cpp index de2bc3b2a..ff18baae0 100644 --- a/retroshare-gui/src/gui/chat/PopupChatDialog.cpp +++ b/retroshare-gui/src/gui/chat/PopupChatDialog.cpp @@ -98,7 +98,9 @@ PopupChatDialog::PopupChatDialog(std::string id, const QString name, QWidget *pa { /* Invoke Qt Designer generated QObject setup routine */ ui.setupUi(this); - + + firstShow = true; + Settings->loadWidgetInformation(this); this->move(qrand()%100, qrand()%100); //avoid to stack multiple popup chat windows on the same position @@ -269,84 +271,48 @@ void PopupChatDialog::processSettings(bool bLoad) Settings->endGroup(); } +/*static*/ PopupChatDialog *PopupChatDialog::getExistingInstance(std::string id) +{ + std::map::iterator it; + if (chatDialogs.end() != (it = chatDialogs.find(id))) { + /* exists already */ + return it->second; + } + + return NULL; +} + /*static*/ PopupChatDialog *PopupChatDialog::getPrivateChat(std::string id, uint chatflags) { /* see if it exists already */ - PopupChatDialog *popupchatdialog = NULL; - bool show = false; - - if (chatflags & RS_CHAT_REOPEN) - { - show = true; -#ifdef PEERS_DEBUG - std::cerr << "reopen flag so: enable SHOW popupchatdialog()" << std::endl; -#endif - } - - std::map::iterator it; - if (chatDialogs.end() != (it = chatDialogs.find(id))) - { - /* exists already */ - popupchatdialog = it->second; - } - else - { - - if (chatflags & RS_CHAT_OPEN_NEW) - { + PopupChatDialog *popupchatdialog = getExistingInstance(id); + if (popupchatdialog) { + if (popupchatdialog->isVisible() == false && (chatflags & RS_CHAT_OPEN) == 0) { + /* Window exists, but is hidden ... don't show it */ + return popupchatdialog; + } + } else { + if (chatflags & RS_CHAT_OPEN) { RsPeerDetails sslDetails; if (rsPeers->getPeerDetails(id, sslDetails)) { popupchatdialog = new PopupChatDialog(id, PeerDefs::nameWithLocation(sslDetails)); chatDialogs[id] = popupchatdialog; -#ifdef PEERS_DEBUG - std::cerr << "new chat so: enable SHOW popupchatdialog()" << std::endl; -#endif - - show = true; } } } - if (show && popupchatdialog) - { -#ifdef PEERS_DEBUG - std::cerr << "SHOWING popupchatdialog()" << std::endl; -#endif + if (popupchatdialog == NULL) { + return NULL; + } + if (chatflags & RS_CHAT_FOCUS) { + popupchatdialog->show(); + popupchatdialog->getfocus(); + } else { if (popupchatdialog->isVisible() == false) { - if (chatflags & RS_CHAT_FOCUS) { - popupchatdialog->show(); - } else { - popupchatdialog->showMinimized(); - } + popupchatdialog->showMinimized(); } - } - - /* now only do these if the window is visible */ - if (popupchatdialog && popupchatdialog->isVisible()) - { - if (chatflags & RS_CHAT_FOCUS) - { -#ifdef PEERS_DEBUG - std::cerr << "focus chat flag so: GETFOCUS popupchatdialog()" << std::endl; -#endif - - popupchatdialog->getfocus(); - } - else - { -#ifdef PEERS_DEBUG - std::cerr << "no focus chat flag so: FLASH popupchatdialog()" << std::endl; -#endif - - popupchatdialog->flash(); - } - } - else - { -#ifdef PEERS_DEBUG - std::cerr << "not visible ... so leave popupchatdialog()" << std::endl; -#endif + QApplication::alert(popupchatdialog); } return popupchatdialog; @@ -417,14 +383,14 @@ void PopupChatDialog::chatFriend(std::string id) RsPeerDetails sslDetails; if (rsPeers->getPeerDetails(*it, sslDetails)) { if (sslDetails.state & RS_PEER_STATE_CONNECTED) { - getPrivateChat(*it, RS_CHAT_OPEN_NEW | RS_CHAT_REOPEN | RS_CHAT_FOCUS); + getPrivateChat(*it, RS_CHAT_OPEN | RS_CHAT_FOCUS); return; } } } } else { if (detail.state & RS_PEER_STATE_CONNECTED) { - getPrivateChat(id, RS_CHAT_OPEN_NEW | RS_CHAT_REOPEN | RS_CHAT_FOCUS); + getPrivateChat(id, RS_CHAT_OPEN | RS_CHAT_FOCUS); return; } firstId = id; @@ -437,7 +403,7 @@ void PopupChatDialog::chatFriend(std::string id) MessageComposer::msgFriend(id, false); } else { if (firstId.empty() == false) { - getPrivateChat(firstId, RS_CHAT_OPEN_NEW | RS_CHAT_REOPEN | RS_CHAT_FOCUS); + getPrivateChat(firstId, RS_CHAT_OPEN | RS_CHAT_FOCUS); } } } @@ -502,42 +468,12 @@ void PopupChatDialog::updateStatusString(const QString& peer_id, const QString& QTimer::singleShot(5000,this,SLOT(resetStatusBar())) ; } -/** - Overloads the default show() slot so we can set opacity*/ - -void PopupChatDialog::show() -{ - - if(!this->isVisible()) { - QMainWindow::show(); - } else { - //QMainWindow::activateWindow(); - //setWindowState(windowState() & ~Qt::WindowMinimized | Qt::WindowActive); - //QMainWindow::raise(); - } - -} - void PopupChatDialog::getfocus() { - - QMainWindow::activateWindow(); - setWindowState((windowState() & (~Qt::WindowMinimized)) | Qt::WindowActive); - QMainWindow::raise(); -} - -void PopupChatDialog::flash() -{ - - if(!this->isVisible()) { - //QMainWindow::show(); - } else { - // Want to reduce the interference on other applications. - //QMainWindow::activateWindow(); - //setWindowState(windowState() & ~Qt::WindowMinimized | Qt::WindowActive); - //QMainWindow::raise(); - } - + activateWindow(); + setWindowState((windowState() & (~Qt::WindowMinimized)) | Qt::WindowActive); + raise(); + ui.chattextEdit->setFocus(); } void PopupChatDialog::showEvent(QShowEvent *event) @@ -545,6 +481,14 @@ void PopupChatDialog::showEvent(QShowEvent *event) if (m_bInsertOnVisible) { insertChatMsgs(); } + + if (firstShow) { + firstShow = false; + + // Workaround: now the scroll position is correct calculated + QScrollBar *scrollbar = ui.textBrowser->verticalScrollBar(); + scrollbar->setValue(scrollbar->maximum()); + } } void PopupChatDialog::closeEvent (QCloseEvent * event) @@ -694,6 +638,10 @@ void PopupChatDialog::addChatMsg(bool incoming, const std::string &id, const QSt ui.textBrowser->append(formatMsg); + /* Scroll to the end */ + QScrollBar *scrollbar = ui.textBrowser->verticalScrollBar(); + scrollbar->setValue(scrollbar->maximum()); + resetStatusBar() ; } diff --git a/retroshare-gui/src/gui/chat/PopupChatDialog.h b/retroshare-gui/src/gui/chat/PopupChatDialog.h index 8fc94e0b4..c0ea3d938 100644 --- a/retroshare-gui/src/gui/chat/PopupChatDialog.h +++ b/retroshare-gui/src/gui/chat/PopupChatDialog.h @@ -43,115 +43,111 @@ public: enum enumChatType { TYPE_NORMAL, TYPE_HISTORY, TYPE_OFFLINE }; public: - static PopupChatDialog *getPrivateChat(std::string id, uint chatflags); - static void cleanupChat(); - static void chatFriend(std::string id); - static void updateAllAvatars(); - static void privateChatChanged(int list, int type); + static PopupChatDialog *getExistingInstance(std::string id); + static PopupChatDialog *getPrivateChat(std::string id, uint chatflags); + static void cleanupChat(); + static void chatFriend(std::string id); + static void updateAllAvatars(); + static void privateChatChanged(int list, int type); - void updatePeerAvatar(const std::string&); + void updatePeerAvatar(const std::string&); public slots: - /** Overloaded QWidget.show */ - void show(); + void getfocus(); + void pasteLink() ; + void contextMenu(QPoint) ; - void getfocus(); - void flash(); - void pasteLink() ; - void contextMenu(QPoint) ; + void smileyWidget(); + void addSmiley(); - void smileyWidget(); - void addSmiley(); + void fileHashingFinished(AttachFileItem* file); - void fileHashingFinished(AttachFileItem* file); + void resetStatusBar() ; + void updateStatusTyping() ; + void updateStatusString(const QString& peer_id, const QString& statusString) ; + void anchorClicked (const QUrl &); - void resetStatusBar() ; - void updateStatusTyping() ; - void updateStatusString(const QString& peer_id, const QString& statusString) ; - void anchorClicked (const QUrl &); - - void updateStatus(const QString &peer_id, int status); + void updateStatus(const QString &peer_id, int status); protected: - /** Default constructor */ - PopupChatDialog(std::string id, const QString name, QWidget *parent = 0, Qt::WFlags flags = 0); - /** Default destructor */ - ~PopupChatDialog(); + /** Default constructor */ + PopupChatDialog(std::string id, const QString name, QWidget *parent = 0, Qt::WFlags flags = 0); + /** Default destructor */ + ~PopupChatDialog(); - void closeEvent (QCloseEvent * event); - void showEvent (QShowEvent * event); - virtual void dragEnterEvent(QDragEnterEvent *event); - virtual void dropEvent(QDropEvent *event); + void closeEvent (QCloseEvent * event); + void showEvent (QShowEvent * event); + virtual void dragEnterEvent(QDragEnterEvent *event); + virtual void dropEvent(QDropEvent *event); - bool eventFilter(QObject *obj, QEvent *ev); + bool eventFilter(QObject *obj, QEvent *ev); - void insertChatMsgs(); - void addChatMsg(bool incoming, const std::string &id, const QString &name, const QDateTime &sendTime, const QDateTime &recvTime, const QString &message, enumChatType chatType, bool addToHistory); + void insertChatMsgs(); + void addChatMsg(bool incoming, const std::string &id, const QString &name, const QDateTime &sendTime, const QDateTime &recvTime, const QString &message, enumChatType chatType, bool addToHistory); - void updateAvatar(); + void updateAvatar(); - QPixmap picture; + QPixmap picture; private slots: - void on_actionMessageHistory_triggered(); - void addExtraFile(); - void addExtraPicture(); - void showAvatarFrame(bool show); - void on_closeInfoFrameButton_clicked(); + void on_actionMessageHistory_triggered(); + void addExtraFile(); + void addExtraPicture(); + void showAvatarFrame(bool show); + void on_closeInfoFrameButton_clicked(); - void setColor(); - void getFont(); - void setFont(); - - void sendChat(); + void setColor(); + void getFont(); + void setFont(); - void updatePeersCustomStateString(const QString& peer_id, const QString& status_string) ; - void getAvatar(); + void sendChat(); - void on_actionClear_Chat_triggered(); + void updatePeersCustomStateString(const QString& peer_id, const QString& status_string) ; + void getAvatar(); - bool fileSave(); - bool fileSaveAs(); - void clearOfflineMessages(); + void on_actionClear_Chat_triggered(); + bool fileSave(); + bool fileSaveAs(); + void clearOfflineMessages(); private: + void setCurrentFileName(const QString &fileName); - void setCurrentFileName(const QString &fileName); + void colorChanged(const QColor &c); + void fontChanged(const QFont &font); + void addAttachment(std::string,int flag); + void processSettings(bool bLoad); - void colorChanged(const QColor &c); - void fontChanged(const QFont &font); - void addAttachment(std::string,int flag); - void processSettings(bool bLoad); + void onPrivateChatChanged(int list, int type, bool initial = false); - void onPrivateChatChanged(int list, int type, bool initial = false); + QAction *actionTextBold; + QAction *actionTextUnderline; + QAction *actionTextItalic; + QAction *pasteLinkAct ; - QAction *actionTextBold; - QAction *actionTextUnderline; - QAction *actionTextItalic; - QAction *pasteLinkAct ; + std::string dialogId; + QString dialogName; + unsigned int lastChatTime; + std::string lastChatName; - std::string dialogId; - QString dialogName; - unsigned int lastChatTime; - std::string lastChatName; + time_t last_status_send_time ; + QColor mCurrentColor; + QFont mCurrentFont; - time_t last_status_send_time ; - QColor mCurrentColor; - QFont mCurrentFont; + std::list m_savedOfflineChat; + QString wholeChat; + QString fileName; - std::list m_savedOfflineChat; - QString wholeChat; - QString fileName; + bool m_bInsertOnVisible; + IMHistoryKeeper historyKeeper; + ChatStyle style; + bool m_manualDelete; - bool m_bInsertOnVisible; - IMHistoryKeeper historyKeeper; - ChatStyle style; - bool m_manualDelete; - - /** Qt Designer generated object */ - Ui::PopupChatDialog ui; + bool firstShow; + /** Qt Designer generated object */ + Ui::PopupChatDialog ui; }; #endif diff --git a/retroshare-gui/src/gui/settings/NotifyPage.cpp b/retroshare-gui/src/gui/settings/NotifyPage.cpp index eca10859b..cfb8e4df2 100755 --- a/retroshare-gui/src/gui/settings/NotifyPage.cpp +++ b/retroshare-gui/src/gui/settings/NotifyPage.cpp @@ -98,9 +98,7 @@ NotifyPage::save(QString &errmsg) newsflags |= RS_FEED_TYPE_CHAT; if (ui.chat_NewWindow->isChecked()) - chatflags |= RS_CHAT_OPEN_NEW; - if (ui.chat_Reopen->isChecked()) - chatflags |= RS_CHAT_REOPEN; + chatflags |= RS_CHAT_OPEN; if (ui.chat_Focus->isChecked()) chatflags |= RS_CHAT_FOCUS; @@ -150,8 +148,7 @@ void NotifyPage::load() ui.notify_Messages->setChecked(newsflags & RS_FEED_TYPE_MSG); ui.notify_Chat->setChecked(newsflags & RS_FEED_TYPE_CHAT); - ui.chat_NewWindow->setChecked(chatflags & RS_CHAT_OPEN_NEW); - ui.chat_Reopen->setChecked(chatflags & RS_CHAT_REOPEN); + ui.chat_NewWindow->setChecked(chatflags & RS_CHAT_OPEN); ui.chat_Focus->setChecked(chatflags & RS_CHAT_FOCUS); ui.systray_GroupChat->setChecked(Settings->getDisplayTrayGroupChat()); diff --git a/retroshare-gui/src/gui/settings/NotifyPage.ui b/retroshare-gui/src/gui/settings/NotifyPage.ui index a69ba7d26..cc8c11ccf 100755 --- a/retroshare-gui/src/gui/settings/NotifyPage.ui +++ b/retroshare-gui/src/gui/settings/NotifyPage.ui @@ -667,14 +667,7 @@ - Open Window for new Peer Chat - - - - - - - Reopen if closed by user: + Open Window for new chat diff --git a/retroshare-gui/src/gui/settings/rsharesettings.cpp b/retroshare-gui/src/gui/settings/rsharesettings.cpp index 9a15abcb9..ccef1392b 100644 --- a/retroshare-gui/src/gui/settings/rsharesettings.cpp +++ b/retroshare-gui/src/gui/settings/rsharesettings.cpp @@ -119,8 +119,7 @@ void RshareSettings::initSettings() /* defaults here are not ideal.... but dusent matter */ - uint defChat = (RS_CHAT_OPEN_NEW | - RS_CHAT_REOPEN ); + uint defChat = RS_CHAT_OPEN; // This is not default... RS_CHAT_FOCUS. uint defNotify = (RS_POPUP_CONNECT | RS_POPUP_MSG | diff --git a/retroshare-gui/src/lang/retroshare_de.qm b/retroshare-gui/src/lang/retroshare_de.qm index a854b92eb..daf5abf78 100644 Binary files a/retroshare-gui/src/lang/retroshare_de.qm and b/retroshare-gui/src/lang/retroshare_de.qm differ diff --git a/retroshare-gui/src/lang/retroshare_de.ts b/retroshare-gui/src/lang/retroshare_de.ts index 270b16274..9f2b5c6c0 100644 --- a/retroshare-gui/src/lang/retroshare_de.ts +++ b/retroshare-gui/src/lang/retroshare_de.ts @@ -630,7 +630,7 @@ p, li { white-space: pre-wrap; } Formular - + <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><style type="text/css"> p, li { white-space: pre-wrap; } @@ -653,7 +653,12 @@ p, li { white-space: pre-wrap; } Kanal abbestellen - + + Comment + Kommentar + + + Remove Item Beitrag löschen @@ -664,7 +669,7 @@ p, li { white-space: pre-wrap; } Erweitern - + Comments here Kommentare hier @@ -4255,7 +4260,7 @@ Fill in your GPG password when asked, to sign your new key. GraphWidget - + Click and drag the nodes around, and zoom with the mouse wheel or the '+' and '-' keys @@ -5319,18 +5324,18 @@ Bitte gib etwas Speicher frei und drücke OK. MessageComposer - + Compose Verfassen - + Contacts Kontakte - + Search for Name: Suche Name: @@ -5360,12 +5365,12 @@ Bitte gib etwas Speicher frei und drücke OK. >> Bcc - + Subject: Betreff: - + Paragraph Absatz @@ -5461,7 +5466,7 @@ Bitte gib etwas Speicher frei und drücke OK. Setzt Schriftart auf Codestil - + To An @@ -5476,7 +5481,7 @@ Bitte gib etwas Speicher frei und drücke OK. Bcc - + Recommended Files Empfohlene Dateien @@ -5550,7 +5555,7 @@ Bitte gib etwas Speicher frei und drücke OK. Blockquote hinzufügen - + &Left &Links @@ -5571,19 +5576,19 @@ Bitte gib etwas Speicher frei und drücke OK. - + Save Message Nachricht speichern - + Message has not been Sent. Do you want to save message to draft box? Nachricht wurde noch nicht gesendet. Möchtest Du die Nachricht in den Entwürfen speichern? - + Re: Re: @@ -5594,17 +5599,17 @@ Möchtest Du die Nachricht in den Entwürfen speichern? - + RetroShare - + Do you want to send the message without a subject ? Möchtest Du die Nachricht ohne Betreff senden ? - + Please insert at least one recipient. Bitte geben sie mindestens einen Empfänger ein. @@ -5619,7 +5624,7 @@ Möchtest Du die Nachricht in den Entwürfen speichern? Unbekannter Freund - + &File &Datei @@ -5724,7 +5729,7 @@ Möchtest Du die Nachricht in den Entwürfen speichern? &Format - + Open File... Datei öffnen... @@ -5767,17 +5772,17 @@ Willst Du die Nachricht speichern ? Zusätzliche Datei hinzufügen - + Friend Recommendation(s) Freundempfehlung(en) - + No Title Kein Titel - + I recommend a good friend of me, you can trust him too when you trust me. <br> Copy friend link and paste to Friends list Ich empfehle Dir einen guten Freund von mir. Du kannst ihm vertrauen, wenn Du mir vertraust. <br> Kopiere den Link und füge ihn in der Freundesliste ein @@ -5867,7 +5872,7 @@ Willst Du die Nachricht speichern ? MessagesDialog - + New Message Neue Nachricht @@ -5975,15 +5980,15 @@ p, li { white-space: pre-wrap; } - + Inbox Posteingang - - + + Outbox Postausgang @@ -5995,7 +6000,7 @@ p, li { white-space: pre-wrap; } - + Sent Gesendet @@ -6057,13 +6062,13 @@ p, li { white-space: pre-wrap; } Speichern unter... - + Print Document Dokument drucken - + Subject Betreff @@ -6132,7 +6137,7 @@ p, li { white-space: pre-wrap; } Empfohlene Dateien einblenden - + Save as... Speichern unter... @@ -6142,7 +6147,7 @@ p, li { white-space: pre-wrap; } HTML-Dateien (*.htm *.html);;Alle Dateien (*) - + Reply to All Allen antworten @@ -6182,7 +6187,7 @@ p, li { white-space: pre-wrap; } - + Trash Papierkorb @@ -6198,7 +6203,7 @@ p, li { white-space: pre-wrap; } Ordner - + Remove All Tags Alle Schlagwörter entfernen @@ -6229,13 +6234,13 @@ p, li { white-space: pre-wrap; } - + Drafts Entwürfe - + To An @@ -6245,7 +6250,7 @@ p, li { white-space: pre-wrap; } Editieren... - + @@ -6472,7 +6477,7 @@ p, li { white-space: pre-wrap; } NetworkDialog - + Select a pem/pqi File Wählen einer PEM- oder PQI-Datei @@ -7062,18 +7067,25 @@ p, li { white-space: pre-wrap; } - Open Window for new Peer Chat - Öffne Fenster für neuen Peer + Open Window for new chat + Öffne Fenster für neuen Chat + + + Open Window for new Peer Chat + Öffne Fenster für neuen Peer + + + Reopen if closed by user + Wiederöffnen, wenn von Benutzer geschlossen - Reopen if closed by user: - Wiederöffnen, wenn von Benutzer geschlossen: + Wiederöffnen, wenn von Benutzer geschlossen: Grab Focus when chat arrives - Fokus auf neue Chatfenster legen + Fokus auf neues Chatfenster legen @@ -7086,7 +7098,7 @@ p, li { white-space: pre-wrap; } Zeige Systemabschnitts-Nachricht an - + Add feeds at end Feeds am Ende anfügen @@ -7974,7 +7986,7 @@ p, li { white-space: pre-wrap; } PopupChatDialog - + Hide Avatar Avatar verstecken @@ -8052,7 +8064,7 @@ p, li { white-space: pre-wrap; } Deaktiviere Emoticons - + Paste retroshare Link RetroShare Link einfügen @@ -8072,7 +8084,7 @@ p, li { white-space: pre-wrap; } Wähle dein Avatar Bild aus - + Add Extra File Zusätzlich eine Datei hinzufügen @@ -8109,7 +8121,7 @@ p, li { white-space: pre-wrap; } Text Datei (*.txt );;Alle Dateien (*) - + Your Friend is offline Do you want to send them a Message instead Dein Freund ist Offline willst du ihm stattdessen eine Nachricht senden @@ -8126,7 +8138,7 @@ Do you want to send them a Message instead - + is Idle and may not reply antwortet möglicherweise nicht, da der Status auf "Untätig" gesetzt wurde @@ -8146,7 +8158,7 @@ Do you want to send them a Message instead ist Offline. - + is typing... tippt... @@ -8156,12 +8168,12 @@ Do you want to send them a Message instead Schliessen - + RetroShare - + Friend not Online Freund ist nicht online @@ -8733,7 +8745,7 @@ p, li { white-space: pre-wrap; } Die Verarbeitung der Links ist noch nicht implementiert. Bitte kopiere den Link stattdessen. - + Deny friend Blockiere Freund