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 )
#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()
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);
#ifndef _DOLPHIN_APPLICATION_H
#define _DOLPHIN_APPLICATION_H
-#include <kapplication.h>
+#include <kuniqueapplication.h>
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:
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
#include "generalsettings.h"\r
#include "viewpropertiesdialog.h"\r
#include "viewproperties.h"\r
+#include "mainwindowadaptor.h"\r
\r
#include <kaction.h>\r
#include <kactioncollection.h>\r
#include <QSplitter>\r
#include <QDockWidget>\r
\r
-DolphinMainWindow::DolphinMainWindow() :\r
+DolphinMainWindow::DolphinMainWindow(int id) :\r
KMainWindow(0),\r
m_newMenu(0),\r
m_splitter(0),\r
- m_activeView(0)\r
+ m_activeView(0),\r
+ m_id(id)\r
{\r
setObjectName("Dolphin");\r
m_view[PrimaryIdx] = 0;\r
m_view[SecondaryIdx] = 0;\r
\r
+ new MainWindowAdaptor(this);\r
+ QDBusConnection::sessionBus().registerObject(QString("/dolphin/MainWindow%1").arg(m_id), this);\r
+\r
KonqUndoManager::incRef();\r
\r
KonqUndoManager* undoManager = KonqUndoManager::self();\r
emit activeViewChanged();\r
}\r
\r
+void DolphinMainWindow::changeUrl(const QString& url)\r
+{\r
+ if (activeView() != 0) {\r
+ activeView()->setUrl(KUrl(url));\r
+ }\r
+}\r
+\r
void DolphinMainWindow::slotViewModeChanged()\r
{\r
updateViewActions();\r
* @short Main window for Dolphin.
*
* Handles the menus, toolbars and Dolphin views.
- *
- * @author Peter Penz <peter.penz@gmx.at>
-*/
+ */
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();
*/
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
*/
void properties();
- /** Stores all settings and quits Dolphin. */
- void quit();
-
/**
* Shows the error information of the job \a job
* in the status bar.
void openNewMainWindow();
private:
- DolphinMainWindow();
+ DolphinMainWindow(int id);
void init();
void loadSettings();
KNewMenu* m_newMenu;
QSplitter* m_splitter;
DolphinView* m_activeView;
+ int m_id;
DolphinView* m_view[SecondaryIdx + 1];
#include <kcmdlineargs.h>
#include <klocale.h>
#include <krun.h>
+#include <QDBusInterface>
+#include <QDBusReply>
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",
KCmdLineArgs::init(argc, argv, &about);
KCmdLineArgs::addCmdLineOptions(options);
-
- DolphinApplication app;
+ DolphinApplication *app = 0;
+ if (DolphinApplication::start()) {
+ app = new DolphinApplication();
+ }
#warning TODO, SessionManagement
} 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();
+ }
}
--- /dev/null
+<!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>
--- /dev/null
+<!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>