]> cloud.milkyroute.net Git - dolphin.git/commitdiff
Dolphin is now a KUniqueApplication. A lot of thanks go to Oscar Blumberg, who submit...
authorPeter Penz <peter.penz19@gmail.com>
Sun, 18 Feb 2007 17:01:36 +0000 (17:01 +0000)
committerPeter Penz <peter.penz19@gmail.com>
Sun, 18 Feb 2007 17:01:36 +0000 (17:01 +0000)
svn path=/trunk/KDE/kdebase/apps/; revision=634862

src/CMakeLists.txt
src/dolphinapplication.cpp
src/dolphinapplication.h
src/dolphinmainwindow.cpp
src/dolphinmainwindow.h
src/main.cpp
src/org.kde.dolphin.Application.xml [new file with mode: 0644]
src/org.kde.dolphin.MainWindow.xml [new file with mode: 0644]

index b2ea5561f3804731c0c1b810c6240c25656e80b6..ba6ed88fadddef865fc3f933832342acb7131ecd 100644 (file)
@@ -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 )
index 439a6fd2181d03dc6e8f26335ed85b503ab9f6e1..cad0056304588a5bf9db5f4ae2906e6e990acc49 100644 (file)
 #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);
index fc1a564c897d9bea252ef0f11a524890e48d2913..fa6a1ceeefb6f0b7399b49d6accfaaaf5f5941be 100644 (file)
@@ -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
index bd91de09a340e264dbb6e0939ff61f3d3300b4bf..a25c61038194f1bc6fba2660bc5da3ecdaba4340 100644 (file)
@@ -36,6 +36,7 @@
 #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
@@ -231,6 +236,13 @@ void DolphinMainWindow::refreshViews()
     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
index 4cfe31077138480461569740c886ecd1e12e5d81..7a71b685c2905801308b1d10ab0fea543be405f6 100644 (file)
@@ -47,13 +47,14 @@ class DolphinApplication;
  * @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();
 
@@ -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];
 
index f5a51ee30bf5f924be21372cb6adec820a94e511..9de7b609a4accd9c560eec9c0de94c6835283c81 100644 (file)
@@ -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 (file)
index 0000000..2b8c531
--- /dev/null
@@ -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 (file)
index 0000000..b05b252
--- /dev/null
@@ -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>