Changeset 5605


Ignore:
Timestamp:
Apr 13, 2008, 2:56:26 AM (14 years ago)
Author:
charles
Message:

(gtk) #307: inhibit/prevent hibernation when downloading

Location:
trunk
Files:
8 edited

Legend:

Unmodified
Added
Removed
  • trunk/configure.ac

    r5520 r5605  
    1616WX_MINIMUM=2.6.0
    1717LIBNOTIFY_MINIMUM=0.4.4
     18DBUS_GLIB_MINIMUM=0.70
    1819AC_SUBST(GIO_MINIMUM)
    1920AC_SUBST(GLIB_MINIMUM)
     
    2122AC_SUBST(WX_MINIMUM)
    2223AC_SUBST(LIBNOTIFY_MINIMUM)
     24AC_SUBST(DBUS_GLIB_MINIMUM)
    2325
    2426AC_PROG_CC
     
    117119fi
    118120
     121PKG_CHECK_MODULES([DBUS_GLIB],
     122                  [dbus-glib-1 >= $DBUS_GLIB_MINIMUM],
     123                  [use_dbus_glib=yes],
     124                  [use_dbus_glib=no])
     125AC_SUBST(DBUS_GLIB_LIBS)
     126AC_SUBST(DBUS_GLIB_CFLAGS)
     127if test "x$use_dbus_glib" = "xyes"; then
     128    AC_DEFINE([HAVE_DBUS_GLIB], 1)
     129fi
     130
    119131AC_CHECK_HEADERS([libintl.h])
    120132IT_PROG_INTLTOOL([0.23],[no-xml])
     
    290302        Build BeOS client:          ${build_beos}
    291303        Build GTK+ client:          ${build_gtk}
     304          ... gio support:          ${use_gio}
     305          ... dbus-glib support:    ${use_dbus_glib}
    292306          ... libnotify support:    ${use_libnotify}
    293           ... gio support:          ${use_gio}
    294307        Build OS X client:          ${build_darwin}
    295308        Build wxWidgets client:     ${build_wx}
  • trunk/gtk/Makefile.am

    r5496 r5605  
    1212    $(PTHREAD_CFLAGS) \
    1313    $(GIO_CFLAGS) \
     14    $(DBUS_GLIB_CFLAGS) \
    1415    $(LIBNOTIFY_CFLAGS)
    1516
     
    7677    $(GIO_LIBS) \
    7778    $(LIBNOTIFY_LIBS) \
     79    $(DBUS_GLIB_LIBS) \
    7880    $(OPENSSL_LIBS) \
    7981    $(PTHREAD_LIBS) -lm
  • trunk/gtk/main.c

    r5584 r5605  
    264264main( int argc, char ** argv )
    265265{
     266    gboolean do_inhibit;
     267    guint inhibit_cookie;
    266268    char * err;
    267269    struct cbdata * cbdata;
     
    339341    }
    340342
     343    do_inhibit = pref_flag_get( PREF_KEY_INHIBIT_HIBERNATION );
     344    if( do_inhibit )
     345        inhibit_cookie = gtr_inhibit_hibernation( );
     346
    341347    gtk_main();
     348
     349    if( do_inhibit )
     350        gtr_uninhibit_hibernation( inhibit_cookie );
    342351
    343352    return 0;
  • trunk/gtk/tr-prefs.c

    r5595 r5605  
    4444
    4545    pref_int_set_default    ( PREF_KEY_PEER_SOCKET_TOS, TR_DEFAULT_PEER_SOCKET_TOS );
    46 
     46    pref_flag_set_default   ( PREF_KEY_INHIBIT_HIBERNATION, TRUE );
    4747    pref_flag_set_default   ( PREF_KEY_BLOCKLIST_ENABLED, FALSE );
    4848
  • trunk/gtk/tr-prefs.h

    r5588 r5605  
    2828#define PREF_KEY_DIR_DEFAULT            "default-download-directory"
    2929#define PREF_KEY_OPEN_DIALOG_FOLDER     "open-dialog-folder"
     30#define PREF_KEY_INHIBIT_HIBERNATION    "inhibit-hibernation"
    3031#define PREF_KEY_DIR_WATCH              "watch-folder"
    3132#define PREF_KEY_DIR_WATCH_ENABLED      "watch-folder-enabled"
  • trunk/gtk/util.c

    r5583 r5605  
    3333#include <gio/gio.h> /* g_file_trash() */
    3434#endif
     35#ifdef HAVE_DBUS_GLIB
     36#include <dbus/dbus-glib.h>
     37#endif
    3538
    3639#include <libevent/evhttp.h>
    3740
    3841#include <libtransmission/transmission.h> /* TR_RATIO_NA, TR_RATIO_INF */
     42#include <libtransmission/utils.h> /* tr_inf */
    3943
    4044#include "conf.h"
     
    462466    }
    463467}
     468
     469#ifdef HAVE_DBUS_GLIB
     470static DBusGProxy*
     471get_hibernation_inhibit_proxy( void )
     472{
     473    GError * error = NULL;
     474    DBusGConnection * conn;
     475
     476    conn = dbus_g_bus_get( DBUS_BUS_SESSION, &error );
     477    if( error )
     478    {
     479        g_warning ("DBUS cannot connect : %s", error->message);
     480        g_error_free (error);
     481        return NULL;
     482    }
     483
     484    return dbus_g_proxy_new_for_name (conn,
     485               "org.freedesktop.PowerManagement",
     486               "/org/freedesktop/PowerManagement/Inhibit",
     487               "org.freedesktop.PowerManagement.Inhibit" );
     488}
     489#endif
     490
     491guint
     492gtr_inhibit_hibernation( void )
     493{
     494    guint inhibit_cookie = 0;
     495#ifdef HAVE_DBUS_GLIB
     496    DBusGProxy * proxy = get_hibernation_inhibit_proxy( );
     497    if( proxy )
     498    {
     499        GError * error = NULL;
     500        const char * application = _( "Transmission Bittorrent Client" );
     501        const char * reason = _( "BitTorrent Activity" );
     502        gboolean success = dbus_g_proxy_call( proxy, "Inhibit", &error,
     503                                              G_TYPE_STRING, application,
     504                                              G_TYPE_STRING, reason,
     505                                              G_TYPE_INVALID,
     506                                              G_TYPE_UINT, &inhibit_cookie,
     507                                              G_TYPE_INVALID );
     508        if( success )
     509            tr_inf( _( "Desktop hibernation disabled while Transmission is running" ) );
     510        else {
     511            tr_err( _( "Couldn't disable desktop hibernation: %s." ), error->message );
     512            g_error_free( error );
     513        }
     514
     515        g_object_unref( G_OBJECT( proxy ) );
     516    }
     517#endif
     518    return inhibit_cookie;
     519}
     520
     521void
     522gtr_uninhibit_hibernation( guint inhibit_cookie )
     523{
     524#ifdef HAVE_DBUS_GLIB
     525    DBusGProxy * proxy = get_hibernation_inhibit_proxy( );
     526    if( proxy )
     527    {
     528        GError * error = NULL;
     529        gboolean success = dbus_g_proxy_call( proxy, "UnInhibit", &error,
     530                                              G_TYPE_UINT, inhibit_cookie,
     531                                              G_TYPE_INVALID,
     532                                              G_TYPE_INVALID );
     533        if( !success ) {
     534            g_warning( "Couldn't uninhibit the system from suspending: %s.", error->message );
     535            g_error_free( error );
     536        }
     537
     538        g_object_unref( G_OBJECT( proxy ) );
     539    }
     540#endif
     541}
  • trunk/gtk/util.h

    r5583 r5605  
    8686void gtr_open_file( const char * path );
    8787
     88guint gtr_inhibit_hibernation( void );
     89
     90void gtr_uninhibit_hibernation( guint );
     91
    8892#ifdef GTK_MAJOR_VERSION
    8993
  • trunk/transmission.spec.in

    r5100 r5605  
    1616BuildRequires: gtk2-devel >= @GTK_REQUIRED@
    1717BuildRequires: libnotify-devel >= @LIBNOTIFY_REQUIRED@
     18BuildRequires: dbus-glib-devel >= @DBUS_GLIB_REQUIRED@
    1819
    1920Requires: glib2 >= @GLIB_REQUIRED@
    2021Requires: gtk2 >= @GTK_REQUIRED@
    2122Requires: libnotify >= @LIBNOTIFY_REQUIRED@
     23Requires: dbus-glib >= @DBUS_GLIB_REQUIRED@
    2224
    2325Provides: %{name}
Note: See TracChangeset for help on using the changeset viewer.