Ticket #4862: fix-duplicate-session.patch

File fix-duplicate-session.patch, 2.8 KB (added by orps, 10 years ago)
  • transmission-2.51

    old new MyApp :: MyApp( int& argc, char ** argv ): 
    248248    new TrDBusAdaptor( this );
    249249    QDBusConnection bus = QDBusConnection::sessionBus();
    250250    if( !bus.registerService( DBUS_SERVICE ) )
     251    {
    251252        std::cerr << "couldn't register " << qPrintable(DBUS_SERVICE) << std::endl;
     253        exit( 1 );
     254    }
    252255    if( !bus.registerObject( DBUS_OBJECT_PATH, this ) )
     256    {
    253257        std::cerr << "couldn't register " << qPrintable(DBUS_OBJECT_PATH) << std::endl;
     258        exit( 1 );
     259    }
    254260}
    255261
    256262/* these functions are for popping up desktop notifications */
    MyApp :: raise( ) 
    439445    QApplication :: alert ( myWindow );
    440446}
    441447
     448void
     449MyApp :: restore( )
     450{
     451    if ( myWindow->isMinimized( ) )
     452        myWindow->setWindowState( myWindow->windowState() & ~Qt::WindowMinimized | Qt::WindowActive );
     453}
     454
    442455bool
    443456MyApp :: notify( const QString& title, const QString& body ) const
    444457{
    MyApp :: notify( const QString& title, const QString& body ) const 
    467480****
    468481***/
    469482
     483bool
     484restoreExistSession( )
     485{
     486    QDBusConnection bus = QDBusConnection::sessionBus();
     487    QDBusMessage request = QDBusMessage::createMethodCall( DBUS_SERVICE,
     488                                                           DBUS_OBJECT_PATH,
     489                                                           DBUS_INTERFACE,
     490                                                           QString::fromAscii("RestoreWindow") );
     491    QDBusMessage response = bus.call( request );
     492    QList<QVariant> arguments = response.arguments( );
     493    return ( (arguments.size()==1) && arguments[0].toBool() );
     494}
     495
    470496int
    471497main( int argc, char * argv[] )
    472498{
    main( int argc, char * argv[] ) 
    479505        if( c == TR_OPT_UNK )
    480506            addme.append( optarg );
    481507
     508    if ( restoreExistSession( ) )
     509        return 0;
     510
    482511    // try to delegate the work to an existing copy of Transmission
    483512    // before starting ourselves...
    484513    bool delegated = false;
  • transmission-2.51

    old new class MyApp: public QApplication 
    3737
    3838    public:
    3939        void raise( );
     40        void restore( );
    4041        bool notify( const QString& title, const QString& body ) const;
    4142
    4243    public:
  • qt/dbus-adaptor.cc

    old new TrDBusAdaptor :: PresentWindow( ) 
    2828}
    2929
    3030bool
     31TrDBusAdaptor :: RestoreWindow( )
     32{
     33    myApp->restore( );
     34    return true;
     35}
     36
     37bool
    3138TrDBusAdaptor :: AddMetainfo( const QString& key )
    3239{
    3340    AddData addme( key );
  • qt/dbus-adaptor.h

    old new class TrDBusAdaptor: public QDBusAbstractAdaptor 
    3131
    3232  public slots:
    3333    bool PresentWindow();
     34    bool RestoreWindow();
    3435    bool AddMetainfo( const QString& );
    3536};
    3637