Browse Source

Merge pull request #900 from glassez/btf

Bringing the AddNewTorrentDialog to the front.
adaptive-webui-19844
sledgehammer999 11 years ago
parent
commit
2b03f2382a
  1. 7
      src/addnewtorrentdialog.cpp
  2. 3
      src/addnewtorrentdialog.h
  3. 11
      src/main.cpp
  4. 16
      src/mainwindow.cpp
  5. 47
      src/qtsingleapp/qtlocalpeer.cpp
  6. 3
      src/qtsingleapp/qtlocalpeer.h
  7. 6
      src/qtsingleapp/qtsingleapplication.cpp
  8. 4
      src/qtsingleapp/qtsingleapplication.h

7
src/addnewtorrentdialog.cpp

@ -140,6 +140,13 @@ void AddNewTorrentDialog::showMagnet(const QString& link)
dlg.exec(); dlg.exec();
} }
void AddNewTorrentDialog::showEvent(QShowEvent *event) {
QDialog::showEvent(event);
activateWindow();
raise();
}
void AddNewTorrentDialog::showAdvancedSettings(bool show) void AddNewTorrentDialog::showAdvancedSettings(bool show)
{ {
if (show) { if (show) {

3
src/addnewtorrentdialog.h

@ -56,6 +56,9 @@ public:
static void showTorrent(const QString& torrent_path, const QString& from_url = QString()); static void showTorrent(const QString& torrent_path, const QString& from_url = QString());
static void showMagnet(const QString& torrent_link); static void showMagnet(const QString& torrent_link);
protected:
void showEvent(QShowEvent *event);
private slots: private slots:
void showAdvancedSettings(bool show); void showAdvancedSettings(bool show);
void displayContentTreeMenu(const QPoint&); void displayContentTreeMenu(const QPoint&);

11
src/main.cpp

@ -75,6 +75,10 @@ Q_IMPORT_PLUGIN(qico)
#include "misc.h" #include "misc.h"
#include "preferences.h" #include "preferences.h"
#if defined(Q_OS_WIN) && !defined(QBT_HAS_GETCURRENTPID)
#error You seem to have updated QtSingleApplication without porting our custom QtSingleApplication::getRunningPid() function. Please see previous version to understate how it works.
#endif
class UsageDisplay: public QObject { class UsageDisplay: public QObject {
Q_OBJECT Q_OBJECT
@ -206,6 +210,13 @@ int main(int argc, char *argv[]) {
if (app.isRunning()) { if (app.isRunning()) {
qDebug("qBittorrent is already running for this user."); qDebug("qBittorrent is already running for this user.");
// Read torrents given on command line // Read torrents given on command line
#ifdef Q_OS_WIN
DWORD pid = (DWORD)app.getRunningPid();
if (pid > 0) {
BOOL b = AllowSetForegroundWindow(pid);
qDebug("AllowSetForegroundWindow() returns %s", b ? "TRUE" : "FALSE");
}
#endif
QStringList torrentCmdLine = app.arguments(); QStringList torrentCmdLine = app.arguments();
//Pass program parameters if any //Pass program parameters if any
QString message; QString message;

16
src/mainwindow.cpp

@ -263,14 +263,8 @@ MainWindow::MainWindow(QWidget *parent, const QStringList& torrentCmdLine) : QMa
// Load Window state and sizes // Load Window state and sizes
readSettings(); readSettings();
if (!ui_locked) { if (systrayIcon) {
if (pref.startMinimized() && systrayIcon) { if (!(pref.startMinimized() || ui_locked)) {
show();
minimizeWindow();
// XXX: Using showMinimized() makes it impossible to restore
// the window if "Minimize to systray" is enabled.
//showMinimized();
} else {
show(); show();
activateWindow(); activateWindow();
raise(); raise();
@ -323,12 +317,16 @@ MainWindow::MainWindow(QWidget *parent, const QStringList& torrentCmdLine) : QMa
#endif #endif
// Make sure the Window is visible if we don't have a tray icon // Make sure the Window is visible if we don't have a tray icon
if (!systrayIcon && isHidden()) { if (!systrayIcon) {
if (pref.startMinimized()) {
showMinimized();
} else {
show(); show();
activateWindow(); activateWindow();
raise(); raise();
} }
} }
}
void MainWindow::deleteBTSession() { void MainWindow::deleteBTSession() {
guiUpdater->stop(); guiUpdater->stop();

47
src/qtsingleapp/qtlocalpeer.cpp

@ -201,8 +201,55 @@ void QtLocalPeer::receiveConnection()
return; return;
} }
QString message(QString::fromUtf8(uMsg)); QString message(QString::fromUtf8(uMsg));
#ifdef Q_OS_WIN
if (message == "qbt://pid") {
qint64 pid = GetCurrentProcessId();
socket->write((const char *)&pid, sizeof pid);
} else {
socket->write(ack, qstrlen(ack)); socket->write(ack, qstrlen(ack));
}
#else
socket->write(ack, qstrlen(ack));
#endif
socket->waitForBytesWritten(1000); socket->waitForBytesWritten(1000);
delete socket; delete socket;
#ifdef Q_OS_WIN
if (message == "qbt://pid")
return;
#endif
emit messageReceived(message); //### (might take a long time to return) emit messageReceived(message); //### (might take a long time to return)
} }
#ifdef Q_OS_WIN
qint64 QtLocalPeer::getRunningPid() {
if (!isClient())
return 0;
QLocalSocket socket;
bool connOk = false;
for (int i = 0; i < 2; i++) {
// Try twice, in case the other instance is just starting up
socket.connectToServer(socketName);
connOk = socket.waitForConnected(5000/2);
if (connOk || i)
break;
Sleep(250);
}
if (!connOk) return -1;
const char* msg = "qbt://pid";
QDataStream ds(&socket);
ds.writeBytes(msg, qstrlen(msg));
bool res = socket.waitForBytesWritten(5000) && socket.waitForReadyRead(5000);
if (!res) return -1;
DWORD pid;
qint64 pid_size = sizeof pid;
while (socket.bytesAvailable() < pid_size)
socket.waitForReadyRead();
if (socket.read((char *)&pid, pid_size) < pid_size)
return -1;
return pid;
}
#endif

3
src/qtsingleapp/qtlocalpeer.h

@ -64,6 +64,9 @@ public:
bool sendMessage(const QString &message, int timeout); bool sendMessage(const QString &message, int timeout);
QString applicationId() const QString applicationId() const
{ return id; } { return id; }
#ifdef Q_OS_WIN
qint64 getRunningPid();
#endif
Q_SIGNALS: Q_SIGNALS:
void messageReceived(const QString &message); void messageReceived(const QString &message);

6
src/qtsingleapp/qtsingleapplication.cpp

@ -349,3 +349,9 @@ void QtSingleApplication::activateWindow()
\obsolete \obsolete
*/ */
#ifdef Q_OS_WIN
qint64 QtSingleApplication::getRunningPid() {
return peer->getRunningPid();
}
#endif

4
src/qtsingleapp/qtsingleapplication.h

@ -88,6 +88,10 @@ public:
// Obsolete: // Obsolete:
void initialize(bool dummy = true) void initialize(bool dummy = true)
{ isRunning(); Q_UNUSED(dummy) } { isRunning(); Q_UNUSED(dummy) }
#ifdef Q_OS_WIN
#define QBT_HAS_GETCURRENTPID
qint64 getRunningPid();
#endif
public Q_SLOTS: public Q_SLOTS:
bool sendMessage(const QString &message, int timeout = 5000); bool sendMessage(const QString &message, int timeout = 5000);

Loading…
Cancel
Save