summaryrefslogtreecommitdiffstats
path: root/ksnapshot
diff options
context:
space:
mode:
Diffstat (limited to 'ksnapshot')
-rw-r--r--ksnapshot/ksnapshot.cpp80
-rw-r--r--ksnapshot/ksnapshot.h10
-rw-r--r--ksnapshot/ksnapshotwidget.ui42
-rw-r--r--ksnapshot/ksnapshotwidget.ui.h5
4 files changed, 134 insertions, 3 deletions
diff --git a/ksnapshot/ksnapshot.cpp b/ksnapshot/ksnapshot.cpp
index ad5df57c..c0ab9dd3 100644
--- a/ksnapshot/ksnapshot.cpp
+++ b/ksnapshot/ksnapshot.cpp
@@ -6,6 +6,7 @@
* (c) Aaron J. Seigo 2002
* (c) Nadeem Hasan 2003
* (c) Bernd Brandstetter 2004
+ * (c) Emanoil Kotsev 2023
*
* Released under the LGPL see file LICENSE for details.
*/
@@ -35,6 +36,9 @@
#include <tdepopupmenu.h>
#include <kpushbutton.h>
#include <tdestartupinfo.h>
+#include <kiconloader.h>
+#include <kprocess.h>
+#include <krun.h>
#include <tqcursor.h>
#include <tqregexp.h>
@@ -78,6 +82,7 @@ KSnapshot::KSnapshot(TQWidget *parent, const char *name, bool grabCurrent)
connect( mainWidget, TQT_SIGNAL( saveClicked() ), TQT_SLOT( slotSaveAs() ) );
connect( mainWidget, TQT_SIGNAL( printClicked() ), TQT_SLOT( slotPrint() ) );
connect( mainWidget, TQT_SIGNAL( copyClicked() ), TQT_SLOT( slotCopy() ) );
+ connect( mainWidget, TQT_SIGNAL( openWithKPClicked() ), TQT_SLOT( slotOpenWithKP() ) );
grabber->show();
grabber->grabMouse( waitCursor );
@@ -115,6 +120,24 @@ KSnapshot::KSnapshot(TQWidget *parent, const char *name, bool grabCurrent)
TQPushButton *helpButton = actionButton( Help );
helpButton->setPopup(helpMenu->menu());
+ // Populate Open With... menu
+ TDEPopupMenu *popupOpenWith = new TDEPopupMenu(this);
+ openWithOffers = TDETrader::self()->query("image/png", "Type == 'Application'");
+ int i = 0;
+ for (TDETrader::OfferList::Iterator it = openWithOffers.begin(); it != openWithOffers.end(); ++it)
+ {
+ popupOpenWith->insertItem(SmallIcon((*it)->icon()), (*it)->name(), i);
+ ++i; // we need menu ids to match with OfferList indexes
+ }
+ mainWidget->btnOpenWith->setPopup(popupOpenWith);
+ connect(popupOpenWith, SIGNAL(activated(int)), this, SLOT(slotOpenWith(int)));
+
+ // Check for KolourPaint availability
+ KService::Ptr kpaint = KService::serviceByDesktopName("kolourpaint");
+ if (!kpaint) {
+ mainWidget->btnOpenWithKP->hide();
+ }
+
TDEAccel* accel = new TDEAccel(this);
accel->insert(TDEStdAccel::Quit, TQT_TQOBJECT(kapp), TQT_SLOT(quit()));
accel->insert( "QuickSave", i18n("Quick Save Snapshot &As..."),
@@ -359,6 +382,63 @@ void KSnapshot::slotWindowGrabbed( const TQPixmap &pix )
show();
}
+void KSnapshot::slotOpenWith(int id)
+{
+ openWithExternalApp(*openWithOffers[id]);
+}
+
+void KSnapshot::slotOpenWithKP() {
+ KService::Ptr kpaint = KService::serviceByDesktopName("kolourpaint");
+ if (kpaint) {
+ openWithExternalApp(*kpaint);
+ }
+}
+
+static KTempFile *tmpFile = nullptr;
+
+void KSnapshot::openWithExternalApp(const KService &service) {
+ // Write snapshot to temporary file
+ bool ok = false;
+ tmpFile = new KTempFile;
+ if (tmpFile->status() == 0) {
+ if (snapshot.save(tmpFile->file(), "PNG")) {
+ if (tmpFile->close()) {
+ ok = true;
+ }
+ }
+ }
+
+ if (!ok) {
+ KMessageBox::error(this, i18n("KSnapshot was unable to create "
+ "temporary file."),
+ i18n("Unable to save image"));
+ return;
+ }
+
+ // Launch application
+ KURL::List list;
+ list.append(tmpFile->name());
+ TQStringList args = KRun::processDesktopExec(service, list, false, false);
+
+ TDEProcess *externalApp = new TDEProcess;
+ *externalApp << args;
+ connect(externalApp, SIGNAL(processExited(TDEProcess*)),
+ this, SLOT(slotExternalAppClosed()));
+
+ if (!externalApp->start(TDEProcess::OwnGroup)) {
+ KMessageBox::error(this, i18n("Cannot start %1!").arg(service.name()));
+ return;
+ }
+}
+
+void KSnapshot::slotExternalAppClosed() {
+ snapshot.load(tmpFile->name());
+ updatePreview();
+ tmpFile->unlink();
+ delete tmpFile;
+ tmpFile = nullptr;
+}
+
void KSnapshot::closeEvent( TQCloseEvent * e )
{
TDEConfig *conf=TDEGlobal::config();
diff --git a/ksnapshot/ksnapshot.h b/ksnapshot/ksnapshot.h
index 1146a718..5d1edac7 100644
--- a/ksnapshot/ksnapshot.h
+++ b/ksnapshot/ksnapshot.h
@@ -14,6 +14,7 @@
#include <tdeglobalsettings.h>
#include <kdialogbase.h>
#include <kurl.h>
+#include <ktrader.h>
class RegionGrabber;
class KSnapshotWidget;
@@ -21,7 +22,6 @@ class KSnapshotWidget;
class KSnapshotPreview : public TQLabel
{
Q_OBJECT
-
public:
KSnapshotPreview(TQWidget *parent, const char *name = 0)
@@ -90,7 +90,6 @@ class KSnapshotPreview : public TQLabel
class KSnapshot : public KDialogBase, virtual public KSnapshotIface
{
Q_OBJECT
-
public:
KSnapshot(TQWidget *parent= 0, const char *name= 0, bool grabCurrent=false);
@@ -107,6 +106,9 @@ protected slots:
void slotSaveAs();
void slotCopy();
void slotPrint();
+ void slotOpenWith(int id);
+ void slotOpenWithKP();
+ void slotExternalAppClosed();
void slotMovePointer( int x, int y );
void setTime(int newTime);
@@ -120,7 +122,7 @@ protected:
virtual void closeEvent( TQCloseEvent * e );
void resizeEvent(TQResizeEvent*);
bool eventFilter( TQObject*, TQEvent* );
-
+
private slots:
void grabTimerDone();
void slotDragSnapshot();
@@ -131,6 +133,7 @@ private slots:
private:
bool save( const KURL& url );
+ void openWithExternalApp(const KService &service);
void performGrab();
void autoincFilename();
int grabMode();
@@ -144,6 +147,7 @@ private:
KSnapshotWidget *mainWidget;
RegionGrabber *rgnGrab;
bool modified;
+ TDETrader::OfferList openWithOffers;
};
#endif // KSNAPSHOT_H
diff --git a/ksnapshot/ksnapshotwidget.ui b/ksnapshot/ksnapshotwidget.ui
index 245d433b..c2dbf4fd 100644
--- a/ksnapshot/ksnapshotwidget.ui
+++ b/ksnapshot/ksnapshotwidget.ui
@@ -242,6 +242,34 @@ If &lt;i&gt;no delay&lt;/i&gt; is set, the program will wait for a mouse click b
<string>Click this button to print the current screenshot.</string>
</property>
</widget>
+ <widget class="KPushButton">
+ <property name="name">
+ <cstring>btnOpenWithKP</cstring>
+ </property>
+ <property name="text">
+ <string>Open in &amp;KolourPaint</string>
+ </property>
+ <property name="whatsThis" stdset="0">
+ <string>Click this button to edit the snapshot in KolourPaint.</string>
+ </property>
+ <property name="iconSet">
+ <iconset>"kolourpaint"</iconset>
+ </property>
+ </widget>
+ <widget class="KPushButton">
+ <property name="name">
+ <cstring>btnOpenWith</cstring>
+ </property>
+ <property name="text">
+ <string>Open &amp;with...</string>
+ </property>
+ <property name="iconSet">
+ <iconset>"document-open"</iconset>
+ </property>
+ <property name="whatsThis" stdset="0">
+ <string>Click this button to open the snapshot in another application.</string>
+ </property>
+ </widget>
</vbox>
</widget>
</grid>
@@ -290,6 +318,18 @@ If &lt;i&gt;no delay&lt;/i&gt; is set, the program will wait for a mouse click b
<slot>slotPrintClicked()</slot>
</connection>
<connection>
+ <sender>btnOpenWithKP</sender>
+ <signal>clicked()</signal>
+ <receiver>KSnapshotWidget</receiver>
+ <slot>slotOpenWithKPClicked()</slot>
+ </connection>
+ <connection>
+ <sender>btnOpenWith</sender>
+ <signal>clicked()</signal>
+ <receiver>KSnapshotWidget</receiver>
+ <slot>slotOpenWithClicked()</slot>
+ </connection>
+ <connection>
<sender>btnSave</sender>
<signal>clicked()</signal>
<receiver>KSnapshotWidget</receiver>
@@ -328,6 +368,7 @@ If &lt;i&gt;no delay&lt;/i&gt; is set, the program will wait for a mouse click b
<signal>saveClicked()</signal>
<signal>copyClicked()</signal>
<signal>printClicked()</signal>
+ <signal>openWithKPClicked()</signal>
<signal>startImageDrag()</signal>
</Q_SIGNALS>
<Q_SLOTS>
@@ -337,6 +378,7 @@ If &lt;i&gt;no delay&lt;/i&gt; is set, the program will wait for a mouse click b
<slot access="protected" specifier="non virtual">slotCopyClicked()</slot>
<slot access="protected" specifier="non virtual">slotPrintClicked()</slot>
<slot access="protected" specifier="non virtual">slotStartDrag()</slot>
+ <slot access="protected" specifier="non virtual">slotOpenWithKPClicked()</slot>
<slot specifier="non virtual" returnType="int">previewWidth()</slot>
<slot specifier="non virtual" returnType="int">previewHeight()</slot>
</Q_SLOTS>
diff --git a/ksnapshot/ksnapshotwidget.ui.h b/ksnapshot/ksnapshotwidget.ui.h
index 921accc9..55a3c6bb 100644
--- a/ksnapshot/ksnapshotwidget.ui.h
+++ b/ksnapshot/ksnapshotwidget.ui.h
@@ -136,3 +136,8 @@ void KSnapshotWidget::slotCopyClicked()
{
emit copyClicked();
}
+
+void KSnapshotWidget::slotOpenWithKPClicked()
+{
+ emit openWithKPClicked();
+}