┌   ┐
54
└   ┘

summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorPeter Penz <[email protected]>2007-02-18 17:01:36 +0000
committerPeter Penz <[email protected]>2007-02-18 17:01:36 +0000
commitabf17941f7a052d25788d2f2f3c84e5aae935e29 (patch)
tree4f89cd4d58b0b6033cc91f2eb14c02291f8c3a1c /src
parentfd43139134da394e413c5d7d5518275379e67798 (diff)
Dolphin is now a KUniqueApplication. A lot of thanks go to Oscar Blumberg, who submitted this patch.
svn path=/trunk/KDE/kdebase/apps/; revision=634862
Diffstat (limited to 'src')
-rw-r--r--src/CMakeLists.txt6
-rw-r--r--src/dolphinapplication.cpp22
-rw-r--r--src/dolphinapplication.h9
-rw-r--r--src/dolphinmainwindow.cpp16
-rw-r--r--src/dolphinmainwindow.h27
-rw-r--r--src/main.cpp45
-rw-r--r--src/org.kde.dolphin.Application.xml9
-rw-r--r--src/org.kde.dolphin.MainWindow.xml13
8 files changed, 119 insertions, 28 deletions
diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt
index b2ea5561f..ba6ed88fa 100644
--- a/src/CMakeLists.txt
+++ b/src/CMakeLists.txt
@@ -56,6 +56,12 @@ kde4_add_kcfg_files(dolphin_SRCS
iconsmodesettings.kcfgc
detailsmodesettings.kcfgc )
+qt4_add_dbus_adaptor(dolphin_SRCS
+ org.kde.dolphin.Application.xml
+ dolphinapplication.h DolphinApplication)
+qt4_add_dbus_adaptor(dolphin_SRCS
+ org.kde.dolphin.MainWindow.xml
+ dolphinmainwindow.h DolphinMainWindow)
kde4_add_executable(dolphin ${dolphin_SRCS})
target_link_libraries(dolphin ${KDE4_KDECORE_LIBS} ${KDE4_KDEPRINT_LIBS} konq )
diff --git a/src/dolphinapplication.cpp b/src/dolphinapplication.cpp
index 439a6fd21..cad005630 100644
--- a/src/dolphinapplication.cpp
+++ b/src/dolphinapplication.cpp
@@ -21,8 +21,15 @@
#include "dolphinapplication.h"
#include "dolphinmainwindow.h"
-DolphinApplication::DolphinApplication()
+#include <applicationadaptor.h>
+#include <kurl.h>
+#include <QDBusConnection>
+
+DolphinApplication::DolphinApplication() :
+ m_lastId(0)
{
+ new ApplicationAdaptor(this);
+ QDBusConnection::sessionBus().registerObject("/dolphin/Application", this);
}
DolphinApplication::~DolphinApplication()
@@ -40,13 +47,24 @@ DolphinApplication* DolphinApplication::app()
DolphinMainWindow* DolphinApplication::createMainWindow()
{
- DolphinMainWindow* mainWindow = new DolphinMainWindow();
+ DolphinMainWindow* mainWindow = new DolphinMainWindow(m_lastId);
+ ++m_lastId;
mainWindow->init();
m_mainWindows.append(mainWindow);
return mainWindow;
}
+int DolphinApplication::openWindow(const QString& url)
+{
+ DolphinMainWindow* win = createMainWindow();
+ if ((win->activeView() != 0) && !url.isEmpty()) {
+ win->activeView()->setUrl(KUrl(url));
+ }
+ win->show();
+ return win->getId();
+}
+
void DolphinApplication::removeMainWindow(DolphinMainWindow* mainWindow)
{
m_mainWindows.removeAll(mainWindow);
diff --git a/src/dolphinapplication.h b/src/dolphinapplication.h
index fc1a564c8..fa6a1ceee 100644
--- a/src/dolphinapplication.h
+++ b/src/dolphinapplication.h
@@ -22,7 +22,7 @@
#ifndef _DOLPHIN_APPLICATION_H
#define _DOLPHIN_APPLICATION_H
-#include <kapplication.h>
+#include <kuniqueapplication.h>
class DolphinMainWindow;
@@ -32,9 +32,10 @@ class DolphinMainWindow;
* we will delete on application exit.
*/
-class DolphinApplication : public KApplication
+class DolphinApplication : public KUniqueApplication
{
Q_OBJECT
+ Q_CLASSINFO("D-Bus Interface", "org.kde.dolphin.Application")
friend class DolphinMainWindow;
public:
@@ -50,12 +51,16 @@ public:
DolphinMainWindow* createMainWindow();
void refreshMainWindows();
+public slots:
+ int openWindow(const QString& url);
+
protected:
/** Called by the DolphinMainWindow to deregister. */
void removeMainWindow(DolphinMainWindow* mainWindow);
private:
QList<DolphinMainWindow*> m_mainWindows;
+ int m_lastId;
};
#endif
diff --git a/src/dolphinmainwindow.cpp b/src/dolphinmainwindow.cpp
index bd91de09a..a25c61038 100644
--- a/src/dolphinmainwindow.cpp
+++ b/src/dolphinmainwindow.cpp
@@ -36,6 +36,7 @@
#include "generalsettings.h"
#include "viewpropertiesdialog.h"
#include "viewproperties.h"
+#include "mainwindowadaptor.h"
#include <kaction.h>
#include <kactioncollection.h>
@@ -70,16 +71,20 @@
#include <QSplitter>
#include <QDockWidget>
-DolphinMainWindow::DolphinMainWindow() :
+DolphinMainWindow::DolphinMainWindow(int id) :
KMainWindow(0),
m_newMenu(0),
m_splitter(0),
- m_activeView(0)
+ m_activeView(0),
+ m_id(id)
{
setObjectName("Dolphin");
m_view[PrimaryIdx] = 0;
m_view[SecondaryIdx] = 0;
+ new MainWindowAdaptor(this);
+ QDBusConnection::sessionBus().registerObject(QString("/dolphin/MainWindow%1").arg(m_id), this);
+
KonqUndoManager::incRef();
KonqUndoManager* undoManager = KonqUndoManager::self();
@@ -231,6 +236,13 @@ void DolphinMainWindow::refreshViews()
emit activeViewChanged();
}
+void DolphinMainWindow::changeUrl(const QString& url)
+{
+ if (activeView() != 0) {
+ activeView()->setUrl(KUrl(url));
+ }
+}
+
void DolphinMainWindow::slotViewModeChanged()
{
updateViewActions();
diff --git a/src/dolphinmainwindow.h b/src/dolphinmainwindow.h
index 4cfe31077..7a71b685c 100644
--- a/src/dolphinmainwindow.h
+++ b/src/dolphinmainwindow.h
@@ -47,13 +47,14 @@ class DolphinApplication;
* @short Main window for Dolphin.
*
* Handles the menus, toolbars and Dolphin views.
- *
- * @author Peter Penz <[email protected]>
-*/
+ */
class DolphinMainWindow: public KMainWindow
{
Q_OBJECT
+ Q_CLASSINFO("D-Bus Interface", "org.kde.dolphin.MainWindow")
+ Q_PROPERTY(int id READ getId SCRIPTABLE true)
friend class DolphinApplication;
+
public:
virtual ~DolphinMainWindow();
@@ -97,6 +98,20 @@ public:
*/
KNewMenu* newMenu() const { return m_newMenu; }
+public slots:
+ /**
+ * Returns the main windows ID, mainly used throught DBus.
+ */
+ int getId() const { return m_id; }
+
+ /**
+ * Changes the URL of the current active DolphinView to \a url.
+ */
+ void changeUrl(const QString& url);
+
+ /** Stores all settings and quits Dolphin. */
+ void quit();
+
signals:
/**
* Is send if the active view has been changed in
@@ -147,9 +162,6 @@ private slots:
*/
void properties();
- /** Stores all settings and quits Dolphin. */
- void quit();
-
/**
* Shows the error information of the job \a job
* in the status bar.
@@ -338,7 +350,7 @@ private slots:
void openNewMainWindow();
private:
- DolphinMainWindow();
+ DolphinMainWindow(int id);
void init();
void loadSettings();
@@ -392,6 +404,7 @@ private:
KNewMenu* m_newMenu;
QSplitter* m_splitter;
DolphinView* m_activeView;
+ int m_id;
DolphinView* m_view[SecondaryIdx + 1];
diff --git a/src/main.cpp b/src/main.cpp
index f5a51ee30..9de7b609a 100644
--- a/src/main.cpp
+++ b/src/main.cpp
@@ -24,6 +24,8 @@
#include <kcmdlineargs.h>
#include <klocale.h>
#include <krun.h>
+#include <QDBusInterface>
+#include <QDBusReply>
static KCmdLineOptions options[] =
{
@@ -31,6 +33,18 @@ static KCmdLineOptions options[] =
KCmdLineLastOption
};
+void openWindow(DolphinApplication* app, const QString& url = QString())
+{
+ if (app != 0) {
+ app->openWindow(url);
+ return;
+ }
+
+ static QDBusInterface dbusIface("org.kde.dolphin", "/dolphin/Application", "",
+ QDBusConnection::connectToBus(QDBusConnection::SessionBus, "session_bus"));
+ QDBusReply<int> reply = dbusIface.call("openWindow", url);
+}
+
int main(int argc, char **argv)
{
KAboutData about("dolphin",
@@ -53,8 +67,10 @@ int main(int argc, char **argv)
KCmdLineArgs::init(argc, argv, &about);
KCmdLineArgs::addCmdLineOptions(options);
-
- DolphinApplication app;
+ DolphinApplication *app = 0;
+ if (DolphinApplication::start()) {
+ app = new DolphinApplication();
+ }
#warning TODO, SessionManagement
@@ -68,18 +84,17 @@ int main(int argc, char **argv)
} else {
#endif
- KCmdLineArgs* args = KCmdLineArgs::parsedArgs();
- if (args->count() > 0) {
- for (int i = 0; i < args->count(); ++i) {
- DolphinMainWindow *win = app.createMainWindow();
- win->activeView()->setUrl(args->url(i));
- win->show();
- }
- } else {
- DolphinMainWindow* mainWin = app.createMainWindow();
- mainWin->show();
+ KCmdLineArgs* args = KCmdLineArgs::parsedArgs();
+ if (args->count() > 0) {
+ for (int i = 0; i < args->count(); ++i) {
+ openWindow(app, args->arg(i));
}
- args->clear();
-
- return app.exec();
+ }
+ else {
+ openWindow(app);
+ }
+ args->clear();
+ if (app != 0) {
+ return app->exec();
+ }
}
diff --git a/src/org.kde.dolphin.Application.xml b/src/org.kde.dolphin.Application.xml
new file mode 100644
index 000000000..2b8c5316a
--- /dev/null
+++ b/src/org.kde.dolphin.Application.xml
@@ -0,0 +1,9 @@
+<!DOCTYPE node PUBLIC "-//freedesktop//DTD D-BUS Object Introspection 1.0//EN" "http://www.freedesktop.org/standards/dbus/1.0/introspect.dtd">
+<node>
+ <interface name="org.kde.dolphin.Application">
+ <method name="openWindow">
+ <arg type="i" direction="out"/>
+ <arg name="url" type="s" direction="in"/>
+ </method>
+ </interface>
+</node>
diff --git a/src/org.kde.dolphin.MainWindow.xml b/src/org.kde.dolphin.MainWindow.xml
new file mode 100644
index 000000000..b05b25298
--- /dev/null
+++ b/src/org.kde.dolphin.MainWindow.xml
@@ -0,0 +1,13 @@
+<!DOCTYPE node PUBLIC "-//freedesktop//DTD D-BUS Object Introspection 1.0//EN" "http://www.freedesktop.org/standards/dbus/1.0/introspect.dtd">
+<node>
+ <interface name="org.kde.dolphin.MainWindow">
+ <method name="getId">
+ <arg type="i" direction="out"/>
+ </method>
+ <method name="changeUrl">
+ <arg name="url" type="s" direction="in"/>
+ </method>
+ <method name="quit">
+ </method>
+ </interface>
+</node>