mirror of
https://invent.kde.org/system/dolphin
synced 2024-10-28 03:21:56 +00:00
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
This commit is contained in:
parent
fd43139134
commit
abf17941f7
|
@ -56,6 +56,12 @@ kde4_add_kcfg_files(dolphin_SRCS
|
||||||
iconsmodesettings.kcfgc
|
iconsmodesettings.kcfgc
|
||||||
detailsmodesettings.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})
|
kde4_add_executable(dolphin ${dolphin_SRCS})
|
||||||
|
|
||||||
target_link_libraries(dolphin ${KDE4_KDECORE_LIBS} ${KDE4_KDEPRINT_LIBS} konq )
|
target_link_libraries(dolphin ${KDE4_KDECORE_LIBS} ${KDE4_KDEPRINT_LIBS} konq )
|
||||||
|
|
|
@ -21,8 +21,15 @@
|
||||||
#include "dolphinapplication.h"
|
#include "dolphinapplication.h"
|
||||||
#include "dolphinmainwindow.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()
|
DolphinApplication::~DolphinApplication()
|
||||||
|
@ -40,13 +47,24 @@ DolphinApplication* DolphinApplication::app()
|
||||||
|
|
||||||
DolphinMainWindow* DolphinApplication::createMainWindow()
|
DolphinMainWindow* DolphinApplication::createMainWindow()
|
||||||
{
|
{
|
||||||
DolphinMainWindow* mainWindow = new DolphinMainWindow();
|
DolphinMainWindow* mainWindow = new DolphinMainWindow(m_lastId);
|
||||||
|
++m_lastId;
|
||||||
mainWindow->init();
|
mainWindow->init();
|
||||||
|
|
||||||
m_mainWindows.append(mainWindow);
|
m_mainWindows.append(mainWindow);
|
||||||
return 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)
|
void DolphinApplication::removeMainWindow(DolphinMainWindow* mainWindow)
|
||||||
{
|
{
|
||||||
m_mainWindows.removeAll(mainWindow);
|
m_mainWindows.removeAll(mainWindow);
|
||||||
|
|
|
@ -22,7 +22,7 @@
|
||||||
#ifndef _DOLPHIN_APPLICATION_H
|
#ifndef _DOLPHIN_APPLICATION_H
|
||||||
#define _DOLPHIN_APPLICATION_H
|
#define _DOLPHIN_APPLICATION_H
|
||||||
|
|
||||||
#include <kapplication.h>
|
#include <kuniqueapplication.h>
|
||||||
|
|
||||||
class DolphinMainWindow;
|
class DolphinMainWindow;
|
||||||
|
|
||||||
|
@ -32,9 +32,10 @@ class DolphinMainWindow;
|
||||||
* we will delete on application exit.
|
* we will delete on application exit.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
class DolphinApplication : public KApplication
|
class DolphinApplication : public KUniqueApplication
|
||||||
{
|
{
|
||||||
Q_OBJECT
|
Q_OBJECT
|
||||||
|
Q_CLASSINFO("D-Bus Interface", "org.kde.dolphin.Application")
|
||||||
friend class DolphinMainWindow;
|
friend class DolphinMainWindow;
|
||||||
|
|
||||||
public:
|
public:
|
||||||
|
@ -50,12 +51,16 @@ public:
|
||||||
DolphinMainWindow* createMainWindow();
|
DolphinMainWindow* createMainWindow();
|
||||||
void refreshMainWindows();
|
void refreshMainWindows();
|
||||||
|
|
||||||
|
public slots:
|
||||||
|
int openWindow(const QString& url);
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
/** Called by the DolphinMainWindow to deregister. */
|
/** Called by the DolphinMainWindow to deregister. */
|
||||||
void removeMainWindow(DolphinMainWindow* mainWindow);
|
void removeMainWindow(DolphinMainWindow* mainWindow);
|
||||||
|
|
||||||
private:
|
private:
|
||||||
QList<DolphinMainWindow*> m_mainWindows;
|
QList<DolphinMainWindow*> m_mainWindows;
|
||||||
|
int m_lastId;
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
|
@ -36,6 +36,7 @@
|
||||||
#include "generalsettings.h"
|
#include "generalsettings.h"
|
||||||
#include "viewpropertiesdialog.h"
|
#include "viewpropertiesdialog.h"
|
||||||
#include "viewproperties.h"
|
#include "viewproperties.h"
|
||||||
|
#include "mainwindowadaptor.h"
|
||||||
|
|
||||||
#include <kaction.h>
|
#include <kaction.h>
|
||||||
#include <kactioncollection.h>
|
#include <kactioncollection.h>
|
||||||
|
@ -70,16 +71,20 @@
|
||||||
#include <QSplitter>
|
#include <QSplitter>
|
||||||
#include <QDockWidget>
|
#include <QDockWidget>
|
||||||
|
|
||||||
DolphinMainWindow::DolphinMainWindow() :
|
DolphinMainWindow::DolphinMainWindow(int id) :
|
||||||
KMainWindow(0),
|
KMainWindow(0),
|
||||||
m_newMenu(0),
|
m_newMenu(0),
|
||||||
m_splitter(0),
|
m_splitter(0),
|
||||||
m_activeView(0)
|
m_activeView(0),
|
||||||
|
m_id(id)
|
||||||
{
|
{
|
||||||
setObjectName("Dolphin");
|
setObjectName("Dolphin");
|
||||||
m_view[PrimaryIdx] = 0;
|
m_view[PrimaryIdx] = 0;
|
||||||
m_view[SecondaryIdx] = 0;
|
m_view[SecondaryIdx] = 0;
|
||||||
|
|
||||||
|
new MainWindowAdaptor(this);
|
||||||
|
QDBusConnection::sessionBus().registerObject(QString("/dolphin/MainWindow%1").arg(m_id), this);
|
||||||
|
|
||||||
KonqUndoManager::incRef();
|
KonqUndoManager::incRef();
|
||||||
|
|
||||||
KonqUndoManager* undoManager = KonqUndoManager::self();
|
KonqUndoManager* undoManager = KonqUndoManager::self();
|
||||||
|
@ -231,6 +236,13 @@ void DolphinMainWindow::refreshViews()
|
||||||
emit activeViewChanged();
|
emit activeViewChanged();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void DolphinMainWindow::changeUrl(const QString& url)
|
||||||
|
{
|
||||||
|
if (activeView() != 0) {
|
||||||
|
activeView()->setUrl(KUrl(url));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
void DolphinMainWindow::slotViewModeChanged()
|
void DolphinMainWindow::slotViewModeChanged()
|
||||||
{
|
{
|
||||||
updateViewActions();
|
updateViewActions();
|
||||||
|
|
|
@ -47,13 +47,14 @@ class DolphinApplication;
|
||||||
* @short Main window for Dolphin.
|
* @short Main window for Dolphin.
|
||||||
*
|
*
|
||||||
* Handles the menus, toolbars and Dolphin views.
|
* Handles the menus, toolbars and Dolphin views.
|
||||||
*
|
*/
|
||||||
* @author Peter Penz <peter.penz@gmx.at>
|
|
||||||
*/
|
|
||||||
class DolphinMainWindow: public KMainWindow
|
class DolphinMainWindow: public KMainWindow
|
||||||
{
|
{
|
||||||
Q_OBJECT
|
Q_OBJECT
|
||||||
|
Q_CLASSINFO("D-Bus Interface", "org.kde.dolphin.MainWindow")
|
||||||
|
Q_PROPERTY(int id READ getId SCRIPTABLE true)
|
||||||
friend class DolphinApplication;
|
friend class DolphinApplication;
|
||||||
|
|
||||||
public:
|
public:
|
||||||
virtual ~DolphinMainWindow();
|
virtual ~DolphinMainWindow();
|
||||||
|
|
||||||
|
@ -97,6 +98,20 @@ public:
|
||||||
*/
|
*/
|
||||||
KNewMenu* newMenu() const { return m_newMenu; }
|
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:
|
signals:
|
||||||
/**
|
/**
|
||||||
* Is send if the active view has been changed in
|
* Is send if the active view has been changed in
|
||||||
|
@ -147,9 +162,6 @@ private slots:
|
||||||
*/
|
*/
|
||||||
void properties();
|
void properties();
|
||||||
|
|
||||||
/** Stores all settings and quits Dolphin. */
|
|
||||||
void quit();
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Shows the error information of the job \a job
|
* Shows the error information of the job \a job
|
||||||
* in the status bar.
|
* in the status bar.
|
||||||
|
@ -338,7 +350,7 @@ private slots:
|
||||||
void openNewMainWindow();
|
void openNewMainWindow();
|
||||||
|
|
||||||
private:
|
private:
|
||||||
DolphinMainWindow();
|
DolphinMainWindow(int id);
|
||||||
void init();
|
void init();
|
||||||
void loadSettings();
|
void loadSettings();
|
||||||
|
|
||||||
|
@ -392,6 +404,7 @@ private:
|
||||||
KNewMenu* m_newMenu;
|
KNewMenu* m_newMenu;
|
||||||
QSplitter* m_splitter;
|
QSplitter* m_splitter;
|
||||||
DolphinView* m_activeView;
|
DolphinView* m_activeView;
|
||||||
|
int m_id;
|
||||||
|
|
||||||
DolphinView* m_view[SecondaryIdx + 1];
|
DolphinView* m_view[SecondaryIdx + 1];
|
||||||
|
|
||||||
|
|
45
src/main.cpp
45
src/main.cpp
|
@ -24,6 +24,8 @@
|
||||||
#include <kcmdlineargs.h>
|
#include <kcmdlineargs.h>
|
||||||
#include <klocale.h>
|
#include <klocale.h>
|
||||||
#include <krun.h>
|
#include <krun.h>
|
||||||
|
#include <QDBusInterface>
|
||||||
|
#include <QDBusReply>
|
||||||
|
|
||||||
static KCmdLineOptions options[] =
|
static KCmdLineOptions options[] =
|
||||||
{
|
{
|
||||||
|
@ -31,6 +33,18 @@ static KCmdLineOptions options[] =
|
||||||
KCmdLineLastOption
|
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)
|
int main(int argc, char **argv)
|
||||||
{
|
{
|
||||||
KAboutData about("dolphin",
|
KAboutData about("dolphin",
|
||||||
|
@ -53,8 +67,10 @@ int main(int argc, char **argv)
|
||||||
|
|
||||||
KCmdLineArgs::init(argc, argv, &about);
|
KCmdLineArgs::init(argc, argv, &about);
|
||||||
KCmdLineArgs::addCmdLineOptions(options);
|
KCmdLineArgs::addCmdLineOptions(options);
|
||||||
|
DolphinApplication *app = 0;
|
||||||
DolphinApplication app;
|
if (DolphinApplication::start()) {
|
||||||
|
app = new DolphinApplication();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
#warning TODO, SessionManagement
|
#warning TODO, SessionManagement
|
||||||
|
@ -68,18 +84,17 @@ int main(int argc, char **argv)
|
||||||
} else {
|
} else {
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
KCmdLineArgs* args = KCmdLineArgs::parsedArgs();
|
KCmdLineArgs* args = KCmdLineArgs::parsedArgs();
|
||||||
if (args->count() > 0) {
|
if (args->count() > 0) {
|
||||||
for (int i = 0; i < args->count(); ++i) {
|
for (int i = 0; i < args->count(); ++i) {
|
||||||
DolphinMainWindow *win = app.createMainWindow();
|
openWindow(app, args->arg(i));
|
||||||
win->activeView()->setUrl(args->url(i));
|
|
||||||
win->show();
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
DolphinMainWindow* mainWin = app.createMainWindow();
|
|
||||||
mainWin->show();
|
|
||||||
}
|
}
|
||||||
args->clear();
|
}
|
||||||
|
else {
|
||||||
return app.exec();
|
openWindow(app);
|
||||||
|
}
|
||||||
|
args->clear();
|
||||||
|
if (app != 0) {
|
||||||
|
return app->exec();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
9
src/org.kde.dolphin.Application.xml
Normal file
9
src/org.kde.dolphin.Application.xml
Normal file
|
@ -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>
|
13
src/org.kde.dolphin.MainWindow.xml
Normal file
13
src/org.kde.dolphin.MainWindow.xml
Normal file
|
@ -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>
|
Loading…
Reference in a new issue