Ticket #1788: gtk-ratiolimit.patch
File gtk-ratiolimit.patch, 9.8 KB (added by JasonBorden, 12 years ago) |
---|
-
gtk/conf.c
diff -ruN Transmission/gtk/conf.c Transmission-jb/gtk/conf.c
old new 200 200 pref_int_set( key, value ); 201 201 } 202 202 203 double 204 pref_double_get( const char * key ) 205 { 206 double d = 0.0; 207 208 tr_bencDictFindDouble( getPrefs( ), key, &d ); 209 return d; 210 } 211 212 void 213 pref_double_set( const char * key, 214 double value ) 215 { 216 tr_bencDictAddDouble( getPrefs( ), key, value ); 217 } 218 219 void 220 pref_double_set_default( const char * key, 221 double value ) 222 { 223 if ( !tr_bencDictFind( getPrefs( ), key ) ) 224 pref_double_set( key, value ); 225 } 226 203 227 /*** 204 228 **** 205 229 ***/ -
gtk/conf.h
diff -ruN Transmission/gtk/conf.h Transmission-jb/gtk/conf.h
old new 32 32 void pref_int_set ( const char * key, int64_t value ); 33 33 void pref_int_set_default ( const char * key, int64_t value ); 34 34 35 double pref_double_get ( const char * key ); 36 void pref_double_set ( const char * key, double value ); 37 void pref_double_set_default( const char * key, double value ); 38 35 39 gboolean pref_flag_get ( const char * key ); 36 40 void pref_flag_set ( const char * key, gboolean value ); 37 41 void pref_flag_set_default ( const char * key, gboolean value ); -
gtk/details.c
diff -ruN Transmission/gtk/details.c Transmission-jb/gtk/details.c
old new 1171 1171 } 1172 1172 1173 1173 static void 1174 ratio_toggled_cb( GtkToggleButton *tb, 1175 gpointer gtor ) 1176 { 1177 tr_torrent * tor = tr_torrent_handle( gtor ); 1178 1179 tr_torrentSetRatioLimited( tor, gtk_toggle_button_get_active( tb ) ); 1180 } 1181 1182 static void 1174 1183 sensitize_from_check_cb( GtkToggleButton *toggle, 1175 1184 gpointer w ) 1176 1185 { … … 1190 1199 } 1191 1200 1192 1201 static void 1202 setRatioLimit( GtkSpinButton* spin, 1203 gpointer gtor ) 1204 { 1205 tr_torrent * tor = tr_torrent_handle ( gtor ); 1206 float ratio = gtk_spin_button_get_value ( spin ); 1207 1208 tr_torrentSetRatioLimit( tor, ratio ); 1209 } 1210 1211 static void 1193 1212 ul_speed_spun_cb( GtkSpinButton *spin, 1194 1213 gpointer gtor ) 1195 1214 { … … 1204 1223 } 1205 1224 1206 1225 static void 1226 ratio_spun_cb( GtkSpinButton *spin, 1227 gpointer gtor ) 1228 { 1229 setRatioLimit( spin, gtor ); 1230 } 1231 1232 static void 1207 1233 max_peers_spun_cb( GtkSpinButton * spin, 1208 1234 gpointer gtor ) 1209 1235 { … … 1217 1243 { 1218 1244 uint16_t maxConnectedPeers; 1219 1245 int i, row; 1246 double d; 1220 1247 gboolean b; 1221 1248 GtkWidget * t, *w, *tb; 1222 1249 tr_torrent * tor = tr_torrent_handle ( gtor ); … … 1263 1290 sensitize_from_check_cb ( GTK_TOGGLE_BUTTON( tb ), w ); 1264 1291 hig_workarea_add_row_w ( t, &row, tb, w, NULL ); 1265 1292 1293 tb = 1294 gtk_check_button_new_with_mnemonic( _( 1295 "Limit seeding _ratio:" ) ); 1296 1297 b = tr_torrentIsRatioLimited( tor ); 1298 gtk_toggle_button_set_active ( GTK_TOGGLE_BUTTON( tb ), b ); 1299 g_signal_connect ( tb, "toggled", G_CALLBACK( 1300 ratio_toggled_cb ), gtor ); 1301 1302 d = tr_torrentGetRatioLimit( tor ); 1303 w = gtk_spin_button_new_with_range( 0.5, INT_MAX, .05 ); 1304 gtk_spin_button_set_digits( GTK_SPIN_BUTTON( w ), 2); 1305 gtk_spin_button_set_value( GTK_SPIN_BUTTON( w ), d ); 1306 1307 g_signal_connect ( w, "value-changed", G_CALLBACK( 1308 ratio_spun_cb ), gtor ); 1309 g_signal_connect ( tb, "toggled", G_CALLBACK( 1310 sensitize_from_check_cb ), w ); 1311 sensitize_from_check_cb ( GTK_TOGGLE_BUTTON( tb ), w ); 1312 hig_workarea_add_row_w ( t, &row, tb, w, NULL ); 1313 1266 1314 hig_workarea_add_section_divider ( t, &row ); 1267 1315 hig_workarea_add_section_title ( t, &row, _( "Peer Connections" ) ); 1268 1316 -
gtk/main.c
diff -ruN Transmission/gtk/main.c Transmission-jb/gtk/main.c
old new 1082 1082 const int limit = pref_int_get( key ); 1083 1083 tr_sessionSetSpeedLimit( tr, TR_UP, limit ); 1084 1084 } 1085 else if( !strcmp( key, TR_PREFS_KEY_RATIO_ENABLED ) ) 1086 { 1087 const gboolean b = pref_flag_get( key ); 1088 tr_sessionSetRatioLimited( tr, b ); 1089 } 1090 else if( !strcmp( key, TR_PREFS_KEY_RATIO ) ) 1091 { 1092 const double limit = pref_double_get( key ); 1093 tr_sessionSetRatioLimit( tr, limit ); 1094 } 1085 1095 else if( !strncmp( key, "sched-", 6 ) ) 1086 1096 { 1087 1097 updateScheduledLimits( tr ); -
gtk/tr-core.c
diff -ruN Transmission/gtk/tr-core.c Transmission-jb/gtk/tr-core.c
old new 1270 1270 } 1271 1271 } 1272 1272 1273 void 1274 tr_core_set_pref_double( TrCore * self, 1275 const char * key, 1276 double newval ) 1277 { 1278 const double oldval = pref_double_get( key ); 1279 1280 if( oldval != newval ) 1281 { 1282 pref_double_set( key, newval ); 1283 commitPrefsChange( self, key ); 1284 } 1285 } 1286 -
gtk/tr-core.h
diff -ruN Transmission/gtk/tr-core.h Transmission-jb/gtk/tr-core.h
old new 204 204 const char * key, 205 205 int val ); 206 206 207 /* Set a double preference value, save the prefs file, and emit the 208 "prefs-changed" signal */ 209 void tr_core_set_pref_double( TrCore * self, 210 const char * key, 211 double val ); 207 212 208 213 /** 209 214 *** -
gtk/tr-prefs.c
diff -ruN Transmission/gtk/tr-prefs.c Transmission-jb/gtk/tr-prefs.c
old new 145 145 { 146 146 gpointer core; 147 147 GTimer * last_change; 148 gboolean isDouble; 148 149 }; 149 150 150 151 static void … … 168 169 { 169 170 /* update the core */ 170 171 const char * key = g_object_get_data( o, PREF_KEY ); 171 const int value = gtk_spin_button_get_value_as_int( 172 GTK_SPIN_BUTTON( spin ) ); 173 tr_core_set_pref_int( TR_CORE( data->core ), key, value ); 172 if (data->isDouble) 173 { 174 const double value = gtk_spin_button_get_value( GTK_SPIN_BUTTON( spin ) ); 175 tr_core_set_pref_double( TR_CORE( data->core ), key, value ); 176 } 177 else 178 { 179 const int value = gtk_spin_button_get_value_as_int( 180 GTK_SPIN_BUTTON( spin ) ); 181 tr_core_set_pref_int( TR_CORE( data->core ), key, value ); 182 } 174 183 175 184 /* cleanup */ 176 185 g_object_set_data( o, IDLE_DATA, NULL ); … … 183 192 184 193 static void 185 194 spun_cb( GtkSpinButton * w, 186 gpointer core ) 195 gpointer core, 196 gboolean isDouble ) 187 197 { 188 198 /* user may be spinning through many values, so let's hold off 189 199 for a moment to keep from flooding the core with changes */ … … 195 205 data = g_new( struct spin_idle_data, 1 ); 196 206 data->core = core; 197 207 data->last_change = g_timer_new( ); 208 data->isDouble = isDouble; 198 209 g_object_set_data_full( o, IDLE_DATA, data, spin_idle_data_free ); 199 210 g_object_ref( G_OBJECT( o ) ); 200 211 g_timeout_add( 100, spun_cb_idle, w ); … … 202 213 g_timer_start( data->last_change ); 203 214 } 204 215 216 static void 217 spun_cb_int( GtkSpinButton * w, 218 gpointer core ) 219 { 220 spun_cb( w, core, FALSE ); 221 } 222 223 static void 224 spun_cb_double( GtkSpinButton * w, 225 gpointer core ) 226 { 227 spun_cb( w, core, TRUE ); 228 } 229 205 230 static GtkWidget* 206 231 new_spin_button( const char * key, 207 232 gpointer core, … … 215 240 key ), g_free ); 216 241 gtk_spin_button_set_digits( GTK_SPIN_BUTTON( w ), 0 ); 217 242 gtk_spin_button_set_value( GTK_SPIN_BUTTON( w ), pref_int_get( key ) ); 218 g_signal_connect( w, "value-changed", G_CALLBACK( spun_cb ), core ); 243 g_signal_connect( w, "value-changed", G_CALLBACK( spun_cb_int ), core ); 244 return w; 245 } 246 247 static GtkWidget* 248 new_spin_button_double( const char * key, 249 gpointer core, 250 double low, 251 double high, 252 double step ) 253 { 254 GtkWidget * w = gtk_spin_button_new_with_range( low, high, step ); 255 256 g_object_set_data_full( G_OBJECT( w ), PREF_KEY, g_strdup( 257 key ), g_free ); 258 gtk_spin_button_set_digits( GTK_SPIN_BUTTON( w ), 2 ); 259 gtk_spin_button_set_value( GTK_SPIN_BUTTON( w ), pref_double_get( key ) ); 260 g_signal_connect( w, "value-changed", G_CALLBACK( spun_cb_double ), core ); 219 261 return w; 220 262 } 221 263 … … 1120 1162 g_signal_connect( w, "toggled", G_CALLBACK( target_cb ), w2 ); 1121 1163 hig_workarea_add_row_w( t, &row, w, w2, NULL ); 1122 1164 1165 s = _( "Default seeding _ratio limit:" ); 1166 w = new_check_button( s, TR_PREFS_KEY_RATIO_ENABLED, core ); 1167 w2 = new_spin_button_double( TR_PREFS_KEY_RATIO, core, .5, INT_MAX, .05 ); 1168 gtk_widget_set_sensitive( GTK_WIDGET( w2 ), pref_flag_get( TR_PREFS_KEY_RATIO_ENABLED ) ); 1169 g_signal_connect( w, "toggled", G_CALLBACK( target_cb ), w2 ); 1170 hig_workarea_add_row_w( t, &row, w, w2, NULL ); 1171 1123 1172 hig_workarea_add_section_divider( t, &row ); 1124 1173 hig_workarea_add_section_title( t, &row, _( "Scheduled Limits" ) ); 1125 1174