# # Machekku Auto Copy on Select # # Version: 0.2 # Date: 2005-03-30 # # http://machekku.uaznia.net/jabber/psi/patches/ # # common.h | 3 +++ # msgmle.cpp | 24 ++++++++++++++++++++++++ # msgmle.h | 4 ++++ # options/opt_advanced-ui.ui | 8 ++++++++ # options/opt_advanced.cpp | 8 ++++++++ # psi_profiles.cpp | 3 +++ # 6 files changed, 50 insertions(+) # diff -X exclude -x src.pro -Naru psi_cvs-2005.03.29/psi/src/common.h psi-2005.03.29-autocopy/psi/src/common.h --- psi_cvs-2005.03.29/psi/src/common.h Mon Feb 28 16:45:12 2005 +++ psi-2005.03.29-autocopy/psi/src/common.h Wed Mar 30 00:36:40 2005 @@ -91,6 +91,9 @@ bool alwaysOnTop, noAwaySound, noAwayPopup, noUnlistedPopup, rosterAnim, autoVersion, autoVCardOnLogin, xmlConsoleOnLogin; bool useDock, dockDCstyle, dockHideMW, dockToolMW, isWMDock; bool smallChats, chatLineEdit, showJoins, useTabs, putTabsAtBottom, autoRosterSize, autoResolveNicksOnAdd; + bool autoCopy; // although this setting is ignored under linux, + // it is preserved in case user uses the same config file on different platforms + bool oldSmallChats; //Filthy hack, see chat code. int delChats, browser; diff -X exclude -x src.pro -Naru psi_cvs-2005.03.29/psi/src/msgmle.cpp psi-2005.03.29-autocopy/psi/src/msgmle.cpp --- psi_cvs-2005.03.29/psi/src/msgmle.cpp Sat Mar 5 09:13:48 2005 +++ psi-2005.03.29-autocopy/psi/src/msgmle.cpp Wed Mar 30 00:04:46 2005 @@ -37,6 +37,11 @@ setReadOnly(true); setUndoRedoEnabled(false); setHScrollBarMode(QScrollView::AlwaysOff); + +#ifndef Q_WS_X11 // linux has this feature built-in + connect(this, SIGNAL(copyAvailable(bool)), SLOT(autoCopy(bool))); +#endif + } ChatView::~ChatView() @@ -78,6 +83,25 @@ QTextEdit::resizeEvent(e); } + +/*! + Copies any selected text (from selection 0) to the clipboard + if option.autoCopy is TRUE, \a copyAvailable is TRUE + and ChatView is in read-only mode. + In any other case it does nothing. + + This slot is connected with copyAvailable(bool) signal + in ChatView's constructor. + + \sa copyAvailable() +*/ + +void ChatView::autoCopy(bool copyAvailable) +{ + if ( isReadOnly() && copyAvailable && option.autoCopy ) { + copy(); + } +} //---------------------------------------------------------------------------- // ChatEdit diff -X exclude -x src.pro -Naru psi_cvs-2005.03.29/psi/src/msgmle.h psi-2005.03.29-autocopy/psi/src/msgmle.h --- psi_cvs-2005.03.29/psi/src/msgmle.h Sat Mar 5 09:13:48 2005 +++ psi-2005.03.29-autocopy/psi/src/msgmle.h Wed Mar 30 00:05:06 2005 @@ -25,6 +25,7 @@ class ChatView : public PsiTextView { + Q_OBJECT public: ChatView(QWidget *parent, const char *name = 0); ~ChatView(); @@ -34,6 +35,9 @@ bool focusNextPrevChild(bool next); void keyPressEvent(QKeyEvent *); void resizeEvent(QResizeEvent *); + +protected slots: + void autoCopy(bool copyAvailable); }; class ChatEdit : public PsiTextView diff -X exclude -x src.pro -Naru psi_cvs-2005.03.29/psi/src/options/opt_advanced-ui.ui psi-2005.03.29-autocopy/psi/src/options/opt_advanced-ui.ui --- psi_cvs-2005.03.29/psi/src/options/opt_advanced-ui.ui Wed Oct 20 10:31:40 2004 +++ psi-2005.03.29-autocopy/psi/src/options/opt_advanced-ui.ui Tue Mar 29 23:16:08 2005 @@ -40,6 +40,14 @@ + ck_autocopy + + + Automatically copy selected text to clipboad + + + + ck_grabUrls diff -X exclude -x src.pro -Naru psi_cvs-2005.03.29/psi/src/options/opt_advanced.cpp psi-2005.03.29-autocopy/psi/src/options/opt_advanced.cpp --- psi_cvs-2005.03.29/psi/src/options/opt_advanced.cpp Wed Oct 20 10:31:40 2004 +++ psi-2005.03.29-autocopy/psi/src/options/opt_advanced.cpp Wed Mar 30 00:25:42 2005 @@ -32,9 +32,15 @@ w = new OptAdvancedUI(); OptAdvancedUI *d = (OptAdvancedUI *)w; +#ifdef Q_WS_X11 // auto-copy is a built-in feature on linux, we don't want user to use our own one + d->ck_autocopy->hide(); +#endif + QWhatsThis::add(d->ck_messageevents, tr("Enables the sending and requesting of message events such as " "'Contact is Typing', ...")); + QWhatsThis::add(d->ck_autocopy, + tr("Check this option if you want the selected text in incoming messages and chat log to be automatically copied to clipboard")); QWhatsThis::add(d->ck_singleclick, tr("Normally, a double-click on a contact will invoke the default action." " Check this option if you'd rather invoke with a single-click.")); @@ -74,6 +80,7 @@ OptAdvancedUI *d = (OptAdvancedUI *)w; opt->messageEvents = d->ck_messageevents->isChecked(); + opt->autoCopy = d->ck_autocopy->isChecked(); opt->singleclick = d->ck_singleclick->isChecked(); opt->jidComplete = d->ck_jidComplete->isChecked(); opt->grabUrls = d->ck_grabUrls->isChecked(); @@ -95,6 +102,7 @@ OptAdvancedUI *d = (OptAdvancedUI *)w; d->ck_messageevents->setChecked( opt->messageEvents ); + d->ck_autocopy->setChecked( opt->autoCopy ); d->ck_singleclick->setChecked( opt->singleclick ); d->ck_jidComplete->setChecked( opt->jidComplete ); d->ck_grabUrls->setChecked( opt->grabUrls ); diff -X exclude -x src.pro -Naru psi_cvs-2005.03.29/psi/src/psi_profiles.cpp psi-2005.03.29-autocopy/psi/src/psi_profiles.cpp --- psi_cvs-2005.03.29/psi/src/psi_profiles.cpp Wed Mar 16 13:42:42 2005 +++ psi-2005.03.29-autocopy/psi/src/psi_profiles.cpp Tue Mar 29 23:25:00 2005 @@ -405,6 +405,7 @@ prefs.autoResolveNicksOnAdd = false; prefs.chatBgImage = ""; prefs.rosterBgImage = ""; + prefs.autoCopy = false; prefs.sp.clear(); prefs.sp.set(QObject::tr("Away from desk"), QObject::tr("I am away from my desk. Leave a message.")); @@ -801,6 +802,7 @@ p_misc.appendChild(textTag(doc, "messageEvents", prefs.messageEvents)); p_misc.appendChild(textTag(doc, "lastPath", prefs.lastPath)); p_misc.appendChild(textTag(doc, "lastSavePath", prefs.lastSavePath)); + p_misc.appendChild(textTag(doc, "autoCopy", prefs.autoCopy)); } { QDomElement p_dock = doc.createElement("dock"); @@ -1349,6 +1351,7 @@ readBoolEntry(tag, "messageEvents", &prefs.messageEvents); readEntry(tag, "lastPath", &prefs.lastPath); readEntry(tag, "lastSavePath", &prefs.lastSavePath); + readBoolEntry(tag, "autoCopy", &prefs.autoCopy); } tag = findSubTag(p_general, "dock", &found);