Changeset 10863


Ignore:
Timestamp:
Jun 26, 2010, 3:55:19 PM (12 years ago)
Author:
charles
Message:

(trunk gtk) #3346 "busy icon needed while processing request" -- added.

Location:
trunk/gtk
Files:
7 edited

Legend:

Unmodified
Added
Removed
  • trunk/gtk/main.c

    r10855 r10863  
    677677
    678678static void
     679onCoreBusy( TrCore * core UNUSED, gboolean busy, struct cbdata * c )
     680{
     681    tr_window_set_busy( c->wind, busy );
     682}
     683
     684static void
    679685appsetup( TrWindow *      wind,
    680686          GSList *        torrentFiles,
     
    704710
    705711    /* set up core handlers */
    706     g_signal_connect( cbdata->core, "error", G_CALLBACK( coreerr ), cbdata );
    707     g_signal_connect( cbdata->core, "add-torrent-prompt",
    708                       G_CALLBACK( onAddTorrent ), cbdata );
    709     g_signal_connect_swapped( cbdata->core, "quit",
    710                               G_CALLBACK( wannaquit ), cbdata );
    711     g_signal_connect( cbdata->core, "prefs-changed",
    712                       G_CALLBACK( prefschanged ), cbdata );
     712    g_signal_connect( cbdata->core, "busy", G_CALLBACK( onCoreBusy ), cbdata );
     713    g_signal_connect( cbdata->core, "add-error", G_CALLBACK( coreerr ), cbdata );
     714    g_signal_connect( cbdata->core, "add-prompt", G_CALLBACK( onAddTorrent ), cbdata );
     715    g_signal_connect( cbdata->core, "prefs-changed", G_CALLBACK( prefschanged ), cbdata );
     716    g_signal_connect_swapped( cbdata->core, "quit", G_CALLBACK( wannaquit ), cbdata );
    713717
    714718    /* add torrents from command-line and saved state */
     
    10141018                    ++filename;
    10151019            }
    1016 
    1017             g_debug( "got from drag: [%s]", filename );
    10181020
    10191021            if( g_file_test( filename, G_FILE_TEST_EXISTS ) )
  • trunk/gtk/msgwin.c

    r10130 r10863  
    2222#include "conf.h"
    2323#include "hig.h"
     24#include "tr-core.h"
    2425#include "msgwin.h"
    25 #include "tr-core.h"
    2626#include "tr-prefs.h"
    2727#include "util.h"
  • trunk/gtk/msgwin.h

    r9868 r10863  
    1414#define TG_MSGWIN_H
    1515
    16 struct TrCore;
    17 
    18 GtkWidget * msgwin_new( struct TrCore * core );
     16GtkWidget * msgwin_new( TrCore * core );
    1917
    2018#endif
  • trunk/gtk/tr-core.c

    r10855 r10863  
    5252#include "actions.h"
    5353
    54 static void     maybeInhibitHibernation( TrCore * core );
     54/***
     55****
     56***/
     57
     58enum
     59{
     60  ADD_ERROR_SIGNAL,
     61  ADD_PROMPT_SIGNAL,
     62  BLOCKLIST_SIGNAL,
     63  BUSY_SIGNAL,
     64  PORT_SIGNAL,
     65  PREFS_SIGNAL,
     66  QUIT_SIGNAL,
     67
     68  LAST_SIGNAL
     69};
     70
     71static guint core_signals[LAST_SIGNAL] = { 0 };
     72
     73static void maybeInhibitHibernation( TrCore * core );
    5574
    5675static gboolean our_instance_adds_remote_torrents = FALSE;
     
    7089    gboolean        dbus_error;
    7190    guint           inhibit_cookie;
     91    gint            busy_count;
    7292    GtkTreeModel *  model;
    7393    tr_session *    session;
     
    101121{
    102122    GObjectClass * gobject_class;
    103     TrCoreClass *  cc;
    104123
    105124    g_type_class_add_private( g_class, sizeof( struct TrCorePrivate ) );
     
    108127    gobject_class->dispose = tr_core_dispose;
    109128
    110     cc = TR_CORE_CLASS( g_class );
    111 
    112     cc->blocklistSignal = g_signal_new( "blocklist-updated",          /* name */
    113                                         G_TYPE_FROM_CLASS( g_class ), /* applies to TrCore */
    114                                         G_SIGNAL_RUN_FIRST,           /* when to invoke */
    115                                         0, NULL, NULL,                /* accumulator */
    116                                         g_cclosure_marshal_VOID__INT, /* marshaler */
    117                                         G_TYPE_NONE,                  /* return type */
    118                                         1, G_TYPE_INT );              /* signal arguments */
    119 
    120     cc->portSignal = g_signal_new( "port-tested",
    121                                    G_TYPE_FROM_CLASS( g_class ),
    122                                    G_SIGNAL_RUN_LAST,
    123                                    0, NULL, NULL,
    124                                    g_cclosure_marshal_VOID__BOOLEAN,
    125                                    G_TYPE_NONE,
    126                                    1, G_TYPE_BOOLEAN );
    127 
    128     cc->errsig = g_signal_new( "error",
    129                                G_TYPE_FROM_CLASS( g_class ),
    130                                G_SIGNAL_RUN_LAST,
    131                                0, NULL, NULL,
    132                                g_cclosure_marshal_VOID__UINT_POINTER,
    133                                G_TYPE_NONE,
    134                                2, G_TYPE_UINT, G_TYPE_POINTER );
    135 
    136     cc->promptsig = g_signal_new( "add-torrent-prompt",
    137                                   G_TYPE_FROM_CLASS( g_class ),
    138                                   G_SIGNAL_RUN_LAST,
    139                                   0, NULL, NULL,
    140                                   g_cclosure_marshal_VOID__POINTER,
    141                                   G_TYPE_NONE,
    142                                   1, G_TYPE_POINTER );
    143 
    144     cc->quitsig = g_signal_new( "quit",
    145                                 G_TYPE_FROM_CLASS( g_class ),
    146                                 G_SIGNAL_RUN_LAST,
    147                                 0, NULL, NULL,
    148                                 g_cclosure_marshal_VOID__VOID,
    149                                 G_TYPE_NONE,
    150                                 0 );
    151 
    152     cc->prefsig = g_signal_new( "prefs-changed",
    153                                 G_TYPE_FROM_CLASS( g_class ),
    154                                 G_SIGNAL_RUN_LAST,
    155                                 0, NULL, NULL,
    156                                 g_cclosure_marshal_VOID__STRING,
    157                                 G_TYPE_NONE,
    158                                 1, G_TYPE_STRING );
     129    core_signals[ADD_ERROR_SIGNAL] = g_signal_new(
     130        "add-error",
     131        G_TYPE_FROM_CLASS( g_class ),
     132        G_SIGNAL_RUN_LAST,
     133        G_STRUCT_OFFSET(TrCoreClass, add_error),
     134        NULL, NULL,
     135        g_cclosure_marshal_VOID__UINT_POINTER,
     136        G_TYPE_NONE,
     137        2, G_TYPE_UINT, G_TYPE_POINTER );
     138
     139    core_signals[ADD_PROMPT_SIGNAL] = g_signal_new(
     140        "add-prompt",
     141        G_TYPE_FROM_CLASS( g_class ),
     142        G_SIGNAL_RUN_LAST,
     143        G_STRUCT_OFFSET(TrCoreClass, add_prompt),
     144        NULL, NULL,
     145        g_cclosure_marshal_VOID__POINTER,
     146        G_TYPE_NONE,
     147        1, G_TYPE_POINTER );
     148
     149    core_signals[BUSY_SIGNAL] = g_signal_new(
     150        "busy",                             /* signal name */
     151        G_TYPE_FROM_CLASS( g_class ),       /* applies to TrCore */
     152        G_SIGNAL_RUN_FIRST,                 /* when to invoke */
     153        G_STRUCT_OFFSET(TrCoreClass, busy), /* class_offset */
     154        NULL, NULL,                         /* accumulator */
     155        g_cclosure_marshal_VOID__BOOLEAN    /* marshaler */,
     156        G_TYPE_NONE,                        /* return type */
     157        1, G_TYPE_BOOLEAN );                /* signal arguments */
     158
     159    core_signals[BLOCKLIST_SIGNAL] = g_signal_new(
     160        "blocklist-updated",                          /* signal name */
     161        G_TYPE_FROM_CLASS( g_class ),                     /* applies to TrCore */
     162        G_SIGNAL_RUN_FIRST,                               /* when to invoke */
     163        G_STRUCT_OFFSET(TrCoreClass, blocklist_updated),  /* class_offset */
     164        NULL, NULL,                                       /* accumulator */
     165        g_cclosure_marshal_VOID__INT,                     /* marshaler */
     166        G_TYPE_NONE,                                      /* return type */
     167        1, G_TYPE_INT );                                  /* signal arguments */
     168
     169    core_signals[PORT_SIGNAL] = g_signal_new(
     170        "port-tested",
     171        G_TYPE_FROM_CLASS( g_class ),
     172        G_SIGNAL_RUN_LAST,
     173        G_STRUCT_OFFSET(TrCoreClass, port_tested),
     174        NULL, NULL,
     175        g_cclosure_marshal_VOID__BOOLEAN,
     176        G_TYPE_NONE,
     177        1, G_TYPE_BOOLEAN );
     178
     179    core_signals[QUIT_SIGNAL] = g_signal_new(
     180        "quit",
     181        G_TYPE_FROM_CLASS( g_class ),
     182        G_SIGNAL_RUN_LAST,
     183        G_STRUCT_OFFSET(TrCoreClass, quit),
     184        NULL, NULL,
     185        g_cclosure_marshal_VOID__VOID,
     186        G_TYPE_NONE,
     187        0 );
     188
     189    core_signals[PREFS_SIGNAL] = g_signal_new(
     190        "prefs-changed",
     191        G_TYPE_FROM_CLASS( g_class ),
     192        G_SIGNAL_RUN_LAST,
     193        G_STRUCT_OFFSET(TrCoreClass, prefs_changed),
     194        NULL, NULL,
     195        g_cclosure_marshal_VOID__STRING,
     196        G_TYPE_NONE,
     197        1, G_TYPE_STRING );
    159198
    160199#ifdef HAVE_DBUS_GLIB
     
    188227
    189228/***
     229****
     230***/
     231
     232static tr_bool
     233coreIsBusy( TrCore * core )
     234{
     235    return core->priv->busy_count > 0;
     236}
     237
     238static void
     239emitBusy( TrCore * core )
     240{
     241    g_signal_emit( core, core_signals[BUSY_SIGNAL], 0, coreIsBusy( core ) );
     242}
     243
     244static void
     245coreAddToBusy( TrCore * core, int addMe )
     246{
     247    const tr_bool wasBusy = coreIsBusy( core );
     248
     249    core->priv->busy_count += addMe;
     250
     251    if( wasBusy != coreIsBusy( core ) )
     252        emitBusy( core );
     253}
     254
     255static void coreIncBusy( TrCore * core ) { coreAddToBusy( core, 1 ); }
     256static void coreDecBusy( TrCore * core ) { coreAddToBusy( core, -1 ); }
     257
     258/***
    190259****  SORTING
    191260***/
     
    866935
    867936int
    868 tr_core_load( TrCore * self,
    869               gboolean forcePaused )
     937tr_core_load( TrCore * self, gboolean forcePaused )
    870938{
    871939    int           i;
     
    890958}
    891959
     960/***
     961****
     962***/
     963
    892964static void
    893965emitBlocklistUpdated( TrCore * core, int ruleCount )
    894966{
    895     g_signal_emit( core, TR_CORE_GET_CLASS( core )->blocklistSignal, 0, ruleCount );
     967    g_signal_emit( core, core_signals[BLOCKLIST_SIGNAL], 0, ruleCount );
    896968}
    897969
     
    899971emitPortTested( TrCore * core, gboolean isOpen )
    900972{
    901     g_signal_emit( core, TR_CORE_GET_CLASS( core )->portSignal, 0, isOpen );
    902 }
    903 
    904 static void
    905 tr_core_errsig( TrCore *         core,
    906                 enum tr_core_err type,
    907                 const char *     msg )
    908 {
    909     g_signal_emit( core, TR_CORE_GET_CLASS( core )->errsig, 0, type, msg );
     973    g_signal_emit( core, core_signals[PORT_SIGNAL], 0, isOpen );
     974}
     975
     976static void
     977tr_core_errsig( TrCore * core, enum tr_core_err type, const char * msg )
     978{
     979    g_signal_emit( core, core_signals[ADD_ERROR_SIGNAL], 0, type, msg );
    910980}
    911981
     
    9321002        default:
    9331003            if( doPrompt )
    934                 g_signal_emit( core, TR_CORE_GET_CLASS( core )->promptsig, 0, ctor );
     1004                g_signal_emit( core, core_signals[ADD_PROMPT_SIGNAL], 0, ctor );
    9351005            else {
    9361006                tr_session * session = tr_core_session( core );
     
    10451115
    10461116    /* cleanup */
     1117    coreDecBusy( data->core );
    10471118    g_free( data->url );
    10481119    g_free( data );
     
    10981169        data->core = core;
    10991170        data->url = g_strdup( url );
     1171        coreIncBusy( data->core );
    11001172        tr_webRun( session, url, NULL, onURLDone, data );
    11011173    }
     
    13151387tr_core_quit( TrCore * core )
    13161388{
    1317     g_signal_emit( core, TR_CORE_GET_CLASS( core )->quitsig, 0 );
     1389    g_signal_emit( core, core_signals[QUIT_SIGNAL], 0 );
    13181390}
    13191391
     
    14511523
    14521524static void
    1453 commitPrefsChange( TrCore *     core,
    1454                    const char * key )
    1455 {
    1456     g_signal_emit( core, TR_CORE_GET_CLASS( core )->prefsig, 0, key );
     1525commitPrefsChange( TrCore * core, const char * key )
     1526{
     1527    g_signal_emit( core, core_signals[PREFS_SIGNAL], 0, key );
    14571528    pref_save( tr_core_session( core ) );
    14581529}
    14591530
    14601531void
    1461 tr_core_set_pref( TrCore *     self,
    1462                   const char * key,
    1463                   const char * newval )
     1532tr_core_set_pref( TrCore * self, const char * key, const char * newval )
    14641533{
    14651534    const char * oldval = pref_string_get( key );
  • trunk/gtk/tr-core.h

    r10717 r10863  
    4444                                                         TrCoreClass )
    4545
    46 typedef struct TrCore
    47 {
    48     GObject    parent;
     46typedef struct _TrCore
     47{
     48    GObject parent;
     49
    4950    struct TrCorePrivate  * priv;
    5051}
    5152TrCore;
    52 
    53 typedef struct TrCoreClass
    54 {
    55     GObjectClass    parent;
    56 
    57     /* "blocklist-updated" signal with a callback type of
    58         void (*callback )( TrCore*, int ruleCount, gpointer userData ). */
    59     int blocklistSignal;
    60 
    61     /* "port-tested" signal with a callback type of
    62        void( *callback )( TrCore*, gboolean isOpen, gpointer userData ). */
    63     int portSignal;
    64 
    65     /* "error" signal with a callback type of
    66        void( *callback )( TrCore*, enum tr_core_err, const char * humanReadable, gpointer userData ). */
    67     int errsig;
    68 
    69     /* "add-torrent-prompt" signal with a callback type of
    70        void ( *callback)( TrCore *, gpointer ctor, gpointer userData )
    71        The handler assumes ownership of ctor and must free when done */
    72     int promptsig;
    73 
    74     /* "quit" signal:
    75        void handler( TrCore *, gpointer ) */
    76     int quitsig;
    77 
    78     /* "prefs-changed" signal:
    79        void handler( TrCore *, int, gpointer ) */
    80     int prefsig;
    81 }
    82 TrCoreClass;
    8353
    8454enum tr_core_err
     
    8858    TR_CORE_ERR_NO_MORE_TORRENTS = 1000 /* finished adding a batch */
    8959};
     60
     61typedef struct _TrCoreClass
     62{
     63    GObjectClass parent_class;
     64
     65    void (* add_error)         (TrCore*, enum tr_core_err, const char * name);
     66    void (* add_prompt)        (TrCore*, gpointer ctor);
     67    void (* blocklist_updated) (TrCore*, int ruleCount );
     68    void (* busy)              (TrCore*, gboolean isBusy);
     69    void (* prefs_changed)     (TrCore*, const char* key);
     70    void (* port_tested)       (TrCore*, gboolean isOpen);
     71    void (* quit)              (TrCore*);
     72}
     73TrCoreClass;
    9074
    9175GType          tr_core_get_type( void );
  • trunk/gtk/tr-window.c

    r10856 r10863  
    886886}
    887887
     888void
     889tr_window_set_busy( TrWindow * w, gboolean isBusy )
     890{
     891    if( w && gtk_widget_get_realized( GTK_WIDGET( w ) ) )
     892    {   
     893        GdkDisplay * display = gtk_widget_get_display( GTK_WIDGET( w ) );
     894        GdkCursor * cursor = isBusy ? gdk_cursor_new_for_display( display, GDK_WATCH ) : NULL;
     895
     896        gdk_window_set_cursor( GTK_WIDGET(w)->window, cursor );
     897        gdk_display_flush( display );
     898
     899        if( cursor )
     900            gdk_cursor_unref( cursor );
     901    }
     902}
  • trunk/gtk/tr-window.h

    r6997 r10863  
    3131typedef GtkWindow TrWindow;
    3232
    33 GtkTreeSelection * tr_window_get_selection( TrWindow* wind );
     33GtkTreeSelection * tr_window_get_selection( TrWindow * );
    3434
    3535GtkWidget        * tr_window_new( GtkUIManager * uim, TrCore * core );
    3636
    37 void               tr_window_update( TrWindow * wind );
     37void               tr_window_update( TrWindow * );
     38
     39void               tr_window_set_busy( TrWindow *, gboolean isBusy );
    3840
    3941#endif
Note: See TracChangeset for help on using the changeset viewer.