Changeset 10863
Legend:
- Unmodified
- Added
- Removed
-
trunk/gtk/main.c
r10855 r10863 677 677 678 678 static void 679 onCoreBusy( TrCore * core UNUSED, gboolean busy, struct cbdata * c ) 680 { 681 tr_window_set_busy( c->wind, busy ); 682 } 683 684 static void 679 685 appsetup( TrWindow * wind, 680 686 GSList * torrentFiles, … … 704 710 705 711 /* 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 ); 713 717 714 718 /* add torrents from command-line and saved state */ … … 1014 1018 ++filename; 1015 1019 } 1016 1017 g_debug( "got from drag: [%s]", filename );1018 1020 1019 1021 if( g_file_test( filename, G_FILE_TEST_EXISTS ) ) -
trunk/gtk/msgwin.c
r10130 r10863 22 22 #include "conf.h" 23 23 #include "hig.h" 24 #include "tr-core.h" 24 25 #include "msgwin.h" 25 #include "tr-core.h"26 26 #include "tr-prefs.h" 27 27 #include "util.h" -
trunk/gtk/msgwin.h
r9868 r10863 14 14 #define TG_MSGWIN_H 15 15 16 struct TrCore; 17 18 GtkWidget * msgwin_new( struct TrCore * core ); 16 GtkWidget * msgwin_new( TrCore * core ); 19 17 20 18 #endif -
trunk/gtk/tr-core.c
r10855 r10863 52 52 #include "actions.h" 53 53 54 static void maybeInhibitHibernation( TrCore * core ); 54 /*** 55 **** 56 ***/ 57 58 enum 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 71 static guint core_signals[LAST_SIGNAL] = { 0 }; 72 73 static void maybeInhibitHibernation( TrCore * core ); 55 74 56 75 static gboolean our_instance_adds_remote_torrents = FALSE; … … 70 89 gboolean dbus_error; 71 90 guint inhibit_cookie; 91 gint busy_count; 72 92 GtkTreeModel * model; 73 93 tr_session * session; … … 101 121 { 102 122 GObjectClass * gobject_class; 103 TrCoreClass * cc;104 123 105 124 g_type_class_add_private( g_class, sizeof( struct TrCorePrivate ) ); … … 108 127 gobject_class->dispose = tr_core_dispose; 109 128 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 ); 159 198 160 199 #ifdef HAVE_DBUS_GLIB … … 188 227 189 228 /*** 229 **** 230 ***/ 231 232 static tr_bool 233 coreIsBusy( TrCore * core ) 234 { 235 return core->priv->busy_count > 0; 236 } 237 238 static void 239 emitBusy( TrCore * core ) 240 { 241 g_signal_emit( core, core_signals[BUSY_SIGNAL], 0, coreIsBusy( core ) ); 242 } 243 244 static void 245 coreAddToBusy( 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 255 static void coreIncBusy( TrCore * core ) { coreAddToBusy( core, 1 ); } 256 static void coreDecBusy( TrCore * core ) { coreAddToBusy( core, -1 ); } 257 258 /*** 190 259 **** SORTING 191 260 ***/ … … 866 935 867 936 int 868 tr_core_load( TrCore * self, 869 gboolean forcePaused ) 937 tr_core_load( TrCore * self, gboolean forcePaused ) 870 938 { 871 939 int i; … … 890 958 } 891 959 960 /*** 961 **** 962 ***/ 963 892 964 static void 893 965 emitBlocklistUpdated( TrCore * core, int ruleCount ) 894 966 { 895 g_signal_emit( core, TR_CORE_GET_CLASS( core )->blocklistSignal, 0, ruleCount );967 g_signal_emit( core, core_signals[BLOCKLIST_SIGNAL], 0, ruleCount ); 896 968 } 897 969 … … 899 971 emitPortTested( TrCore * core, gboolean isOpen ) 900 972 { 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 976 static void 977 tr_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 ); 910 980 } 911 981 … … 932 1002 default: 933 1003 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 ); 935 1005 else { 936 1006 tr_session * session = tr_core_session( core ); … … 1045 1115 1046 1116 /* cleanup */ 1117 coreDecBusy( data->core ); 1047 1118 g_free( data->url ); 1048 1119 g_free( data ); … … 1098 1169 data->core = core; 1099 1170 data->url = g_strdup( url ); 1171 coreIncBusy( data->core ); 1100 1172 tr_webRun( session, url, NULL, onURLDone, data ); 1101 1173 } … … 1315 1387 tr_core_quit( TrCore * core ) 1316 1388 { 1317 g_signal_emit( core, TR_CORE_GET_CLASS( core )->quitsig, 0 );1389 g_signal_emit( core, core_signals[QUIT_SIGNAL], 0 ); 1318 1390 } 1319 1391 … … 1451 1523 1452 1524 static void 1453 commitPrefsChange( TrCore * core, 1454 const char * key ) 1455 { 1456 g_signal_emit( core, TR_CORE_GET_CLASS( core )->prefsig, 0, key ); 1525 commitPrefsChange( TrCore * core, const char * key ) 1526 { 1527 g_signal_emit( core, core_signals[PREFS_SIGNAL], 0, key ); 1457 1528 pref_save( tr_core_session( core ) ); 1458 1529 } 1459 1530 1460 1531 void 1461 tr_core_set_pref( TrCore * self, 1462 const char * key, 1463 const char * newval ) 1532 tr_core_set_pref( TrCore * self, const char * key, const char * newval ) 1464 1533 { 1465 1534 const char * oldval = pref_string_get( key ); -
trunk/gtk/tr-core.h
r10717 r10863 44 44 TrCoreClass ) 45 45 46 typedef struct TrCore 47 { 48 GObject parent; 46 typedef struct _TrCore 47 { 48 GObject parent; 49 49 50 struct TrCorePrivate * priv; 50 51 } 51 52 TrCore; 52 53 typedef struct TrCoreClass54 {55 GObjectClass parent;56 57 /* "blocklist-updated" signal with a callback type of58 void (*callback )( TrCore*, int ruleCount, gpointer userData ). */59 int blocklistSignal;60 61 /* "port-tested" signal with a callback type of62 void( *callback )( TrCore*, gboolean isOpen, gpointer userData ). */63 int portSignal;64 65 /* "error" signal with a callback type of66 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 of70 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;83 53 84 54 enum tr_core_err … … 88 58 TR_CORE_ERR_NO_MORE_TORRENTS = 1000 /* finished adding a batch */ 89 59 }; 60 61 typedef 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 } 73 TrCoreClass; 90 74 91 75 GType tr_core_get_type( void ); -
trunk/gtk/tr-window.c
r10856 r10863 886 886 } 887 887 888 void 889 tr_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 31 31 typedef GtkWindow TrWindow; 32 32 33 GtkTreeSelection * tr_window_get_selection( TrWindow * wind);33 GtkTreeSelection * tr_window_get_selection( TrWindow * ); 34 34 35 35 GtkWidget * tr_window_new( GtkUIManager * uim, TrCore * core ); 36 36 37 void tr_window_update( TrWindow * wind ); 37 void tr_window_update( TrWindow * ); 38 39 void tr_window_set_busy( TrWindow *, gboolean isBusy ); 38 40 39 41 #endif
Note: See TracChangeset
for help on using the changeset viewer.