cleaner actions/prefs integration.

This commit is contained in:
Charles Kerr 2007-12-19 18:42:33 +00:00
parent a2e7d74898
commit b0e1a8b8cd
7 changed files with 55 additions and 59 deletions

View File

@ -16,6 +16,7 @@
#include <libtransmission/transmission.h>
#include "conf.h"
#include "torrent-inspector.h"
#include "tr_core.h"
#include "tr_prefs.h"
#include "lock.h"
#include "logo.h"
@ -24,9 +25,12 @@
extern void doAction (const char * action_name, gpointer user_data );
static TrCore * myCore = 0;
static GtkActionGroup * myGroup = 0;
static void action_cb ( GtkAction * a, gpointer user_data )
static void
action_cb ( GtkAction * a, gpointer user_data )
{
doAction ( gtk_action_get_name(a), user_data );
}
@ -66,11 +70,14 @@ static GtkRadioActionEntry sort_radio_entries[] =
};
static void
sort_changed_cb( GtkAction * action UNUSED, GtkRadioAction * current, gpointer user_data )
sort_changed_cb( GtkAction * action UNUSED,
GtkRadioAction * current,
gpointer user_data UNUSED )
{
const int i = gtk_radio_action_get_current_value( current );
const char * name = sort_radio_entries[i].name;
doAction ( name, user_data );
const char * key = PREF_KEY_SORT_MODE;
const int i = gtk_radio_action_get_current_value( current );
const char * val = sort_radio_entries[i].name;
tr_core_set_pref( myCore, key, val );
}
static GtkToggleActionEntry show_toggle_entries[] =
@ -81,12 +88,20 @@ static GtkToggleActionEntry show_toggle_entries[] =
N_("Show Message _Log"), NULL, NULL, G_CALLBACK(action_cb), FALSE }
};
static GtkToggleActionEntry persistent_toggle_entries[] =
static void
toggle_pref_cb ( GtkToggleAction * action, gpointer user_data UNUSED )
{
const char * key = gtk_action_get_name( GTK_ACTION( action ) );
const gboolean val = gtk_toggle_action_get_active( action );
tr_core_set_pref_bool( myCore, key, val );
}
static GtkToggleActionEntry pref_toggle_entries[] =
{
{ "minimal-view", NULL,
N_("_Minimal View"), "<control>M", NULL, G_CALLBACK(action_cb), FALSE },
{ "reverse-sort-order", NULL,
N_("_Reverse Sort Order"), NULL, NULL, G_CALLBACK(action_cb), FALSE }
N_("_Minimal View"), "<control>M", NULL, G_CALLBACK(toggle_pref_cb), FALSE },
{ "sort-reversed", NULL,
N_("_Reverse Sort Order"), NULL, NULL, G_CALLBACK(toggle_pref_cb), FALSE }
};
static GtkActionEntry entries[] =
@ -187,6 +202,12 @@ register_my_icons ( void )
static GtkUIManager * myUIManager = NULL;
void
actions_set_core( TrCore * core )
{
myCore = core;
}
void
actions_init( GtkUIManager * ui_manager, gpointer callback_user_data )
{
@ -226,19 +247,19 @@ actions_init( GtkUIManager * ui_manager, gpointer callback_user_data )
G_N_ELEMENTS(sort_radio_entries),
active,
G_CALLBACK(sort_changed_cb),
callback_user_data );
NULL );
gtk_action_group_add_toggle_actions( action_group,
show_toggle_entries,
G_N_ELEMENTS(show_toggle_entries),
callback_user_data );
for( i=0, n=G_N_ELEMENTS(persistent_toggle_entries); i<n; ++i )
persistent_toggle_entries[i].is_active = pref_flag_get( persistent_toggle_entries[i].name );
for( i=0, n=G_N_ELEMENTS(pref_toggle_entries); i<n; ++i )
pref_toggle_entries[i].is_active = pref_flag_get( pref_toggle_entries[i].name );
gtk_action_group_add_toggle_actions( action_group,
persistent_toggle_entries,
G_N_ELEMENTS(persistent_toggle_entries),
pref_toggle_entries,
G_N_ELEMENTS(pref_toggle_entries),
callback_user_data );
gtk_action_group_add_actions( action_group,

View File

@ -14,9 +14,12 @@
#define TR_ACTIONS_H
#include <gtk/gtk.h>
#include "tr_core.h"
void actions_init ( GtkUIManager * ui_manager, gpointer callback_user_data );
void actions_set_core( TrCore * core );
void action_activate ( const char * name );
void action_sensitize ( const char * name, gboolean b );

View File

@ -317,6 +317,8 @@ appsetup( TrWindow * wind, GList * args,
cbdata->closing = FALSE;
cbdata->errqueue = NULL;
actions_set_core( cbdata->core );
/* set up core handlers */
g_signal_connect( cbdata->core, "error", G_CALLBACK( coreerr ), cbdata );
g_signal_connect( cbdata->core, "directory-prompt",
@ -730,10 +732,6 @@ prefschanged( TrCore * core UNUSED, const char * key, gpointer data )
cbdata->icon = NULL;
}
}
else if( !strcmp( key, PREF_KEY_SORT_MODE ) || !strcmp( key, PREF_KEY_SORT_REVERSED ) )
{
tr_core_resort( cbdata->core );
}
else if( !strcmp( key, PREF_KEY_PEX ) )
{
gboolean enabled = pref_flag_get( key );
@ -1024,23 +1022,6 @@ doAction ( const char * action_name, gpointer user_data )
else
gtk_window_present (GTK_WINDOW(w));
}
else if( !strcmp( action_name, "sort-by-activity" )
|| !strcmp( action_name, "sort-by-date-added" )
|| !strcmp( action_name, "sort-by-name" )
|| !strcmp( action_name, "sort-by-progress" )
|| !strcmp( action_name, "sort-by-state" )
|| !strcmp( action_name, "sort-by-tracker" ) )
{
tr_core_set_pref( data->core, PREF_KEY_SORT_MODE, action_name );
}
else if( !strcmp( action_name, "reverse-sort-order" ) )
{
tr_core_toggle_pref_bool( data->core, PREF_KEY_SORT_REVERSED );
}
else if( !strcmp( action_name, "minimal-view" ) )
{
tr_core_toggle_pref_bool( data->core, PREF_KEY_MINIMAL_VIEW );
}
else g_error ("Unhandled action: %s", action_name );
if( changed )

View File

@ -318,13 +318,16 @@ setSort( TrCore * core, const char * mode, gboolean isReversed )
gtk_tree_sortable_set_sort_column_id( sortable, col, type );
}
void
tr_core_resort( TrCore * core )
static void
prefsChanged( TrCore * core, const char * key, gpointer data UNUSED )
{
char * mode = pref_string_get( PREF_KEY_SORT_MODE );
gboolean isReversed = pref_flag_get( PREF_KEY_SORT_REVERSED );
setSort( core, mode, isReversed );
g_free( mode );
if( !strcmp( key, PREF_KEY_SORT_MODE ) || !strcmp( key, PREF_KEY_SORT_REVERSED ) )
{
char * mode = pref_string_get( PREF_KEY_SORT_MODE );
gboolean isReversed = pref_flag_get( PREF_KEY_SORT_REVERSED );
setSort( core, mode, isReversed );
g_free( mode );
}
}
static void
@ -392,7 +395,9 @@ tr_core_get_type( void )
TrCore *
tr_core_new( void )
{
return g_object_new( TR_CORE_TYPE, NULL );
TrCore * core = TR_CORE( g_object_new( TR_CORE_TYPE, NULL ) );
g_signal_connect( core, "prefs-changed", G_CALLBACK(prefsChanged), NULL );
return core;
}
GtkTreeModel *
@ -697,15 +702,6 @@ tr_core_set_pref_bool( TrCore * self, const char * key, gboolean newval )
}
}
gboolean
tr_core_toggle_pref_bool( TrCore * core, const char * key )
{
const gboolean newval = !pref_flag_get( key );
pref_flag_set( key, newval );
commitPrefsChange( core, key );
return newval;
}
void
tr_core_set_pref_int( TrCore * self, const char * key, int newval )
{

View File

@ -162,8 +162,6 @@ tr_core_quit( TrCore * self );
void
tr_core_set_pref( TrCore * self, const char * key, const char * val );
gboolean
tr_core_toggle_pref_bool( TrCore * core, const char * key );
/* Set a boolean preference value, save the prefs file, and emit the
"prefs-changed" signal */
void
@ -174,9 +172,6 @@ tr_core_set_pref_bool( TrCore * self, const char * key, gboolean val );
void
tr_core_set_pref_int( TrCore * self, const char * key, int val );
void
tr_core_resort( TrCore * core );
/* column names for the model used to store torrent information */
/* keep this in sync with the type array in tr_core_init() in tr_core.c */
enum

View File

@ -32,7 +32,6 @@
#include "actions.h"
#include "hig.h"
#include "torrent-cell-renderer.h"
#include "tr_core.h"
#include "tr_torrent.h"
#include "tr_window.h"
#include "util.h"
@ -45,6 +44,7 @@ typedef struct
GtkWidget * ul_lb;
GtkWidget * dl_lb;
GtkTreeSelection * selection;
GtkCellRenderer * renderer;
}
PrivateData;
@ -91,7 +91,7 @@ makeview( PrivateData * p )
p->selection = gtk_tree_view_get_selection( GTK_TREE_VIEW(view) );
r = torrent_cell_renderer_new( );
p->renderer = r = torrent_cell_renderer_new( );
col = gtk_tree_view_column_new_with_attributes( _("Torrent"), r, "torrent", MC_TORRENT_RAW, NULL );
gtk_tree_view_column_set_sizing( col, GTK_TREE_VIEW_COLUMN_AUTOSIZE );
gtk_tree_view_append_column( GTK_TREE_VIEW( view ), col );

View File

@ -24,7 +24,7 @@ const char * fallback_ui_file =
" <menuitem action='sort-by-progress'/>\n"
" <menuitem action='sort-by-state'/>\n"
" <menuitem action='sort-by-tracker'/>\n"
" <menuitem action='reverse-sort-order'/>\n"
" <menuitem action='sort-reversed'/>\n"
" </menu>\n"
" <menu action='edit-menu'>\n"
" <menuitem action='select-all'/>\n"