(trunk gtk) #996: make status location configurable; default to bottom of window as per Gnome HiG

This commit is contained in:
Charles Kerr 2008-12-25 16:17:08 +00:00
parent c7bcae2272
commit 25550f03e4
3 changed files with 68 additions and 52 deletions

View File

@ -70,6 +70,7 @@ tr_prefs_init_global( void )
pref_int_set_default ( PREF_KEY_MAIN_WINDOW_WIDTH, 300 ); pref_int_set_default ( PREF_KEY_MAIN_WINDOW_WIDTH, 300 );
pref_int_set_default ( PREF_KEY_MAIN_WINDOW_X, 50 ); pref_int_set_default ( PREF_KEY_MAIN_WINDOW_X, 50 );
pref_int_set_default ( PREF_KEY_MAIN_WINDOW_Y, 50 ); pref_int_set_default ( PREF_KEY_MAIN_WINDOW_Y, 50 );
pref_string_set_default ( PREF_KEY_MAIN_WINDOW_LAYOUT_ORDER, "menu,toolbar,filter,list,statusbar" );
str = NULL; str = NULL;
#if GLIB_CHECK_VERSION( 2, 14, 0 ) #if GLIB_CHECK_VERSION( 2, 14, 0 )

View File

@ -21,33 +21,33 @@ GtkWidget * tr_prefs_dialog_new( GObject * core,
/* if you add a key here, you /must/ add its /* if you add a key here, you /must/ add its
* default in tr_prefs_init_global( void ) */ * default in tr_prefs_init_global( void ) */
#define PREF_KEY_SCHED_LIMIT_ENABLED "sched-limit-enabled" #define PREF_KEY_SCHED_LIMIT_ENABLED "sched-limit-enabled"
#define PREF_KEY_SCHED_BEGIN "sched-begin" #define PREF_KEY_SCHED_BEGIN "sched-begin"
#define PREF_KEY_SCHED_END "sched-end" #define PREF_KEY_SCHED_END "sched-end"
#define PREF_KEY_SCHED_DL_LIMIT "sched-download-limit" #define PREF_KEY_SCHED_DL_LIMIT "sched-download-limit"
#define PREF_KEY_SCHED_UL_LIMIT "sched-upload-limit" #define PREF_KEY_SCHED_UL_LIMIT "sched-upload-limit"
#define PREF_KEY_OPTIONS_PROMPT "show-options-window" #define PREF_KEY_OPTIONS_PROMPT "show-options-window"
#define PREF_KEY_OPEN_DIALOG_FOLDER "open-dialog-dir" #define PREF_KEY_OPEN_DIALOG_FOLDER "open-dialog-dir"
#define PREF_KEY_INHIBIT_HIBERNATION "inhibit-desktop-hibernation" #define PREF_KEY_INHIBIT_HIBERNATION "inhibit-desktop-hibernation"
#define PREF_KEY_DIR_WATCH "watch-dir" #define PREF_KEY_DIR_WATCH "watch-dir"
#define PREF_KEY_DIR_WATCH_ENABLED "watch-dir-enabled" #define PREF_KEY_DIR_WATCH_ENABLED "watch-dir-enabled"
#define PREF_KEY_SHOW_TRAY_ICON "show-notification-area-icon" #define PREF_KEY_SHOW_TRAY_ICON "show-notification-area-icon"
#define PREF_KEY_START "start-added-torrents" #define PREF_KEY_START "start-added-torrents"
#define PREF_KEY_TRASH_ORIGINAL "trash-original-torrent-files" #define PREF_KEY_TRASH_ORIGINAL "trash-original-torrent-files"
#define PREF_KEY_ASKQUIT "prompt-before-exit" #define PREF_KEY_ASKQUIT "prompt-before-exit"
#define PREF_KEY_SORT_MODE "sort-mode" #define PREF_KEY_SORT_MODE "sort-mode"
#define PREF_KEY_SORT_REVERSED "sort-reversed" #define PREF_KEY_SORT_REVERSED "sort-reversed"
#define PREF_KEY_MINIMAL_VIEW "minimal-view" #define PREF_KEY_MINIMAL_VIEW "minimal-view"
#define PREF_KEY_FILTERBAR "show-filterbar" #define PREF_KEY_FILTERBAR "show-filterbar"
#define PREF_KEY_STATUSBAR "show-statusbar" #define PREF_KEY_STATUSBAR "show-statusbar"
#define PREF_KEY_STATUSBAR_STATS "statusbar-stats" #define PREF_KEY_STATUSBAR_STATS "statusbar-stats"
#define PREF_KEY_TOOLBAR "show-toolbar" #define PREF_KEY_TOOLBAR "show-toolbar"
#define PREF_KEY_BLOCKLIST_UPDATES_ENABLED "blocklist-updates-enabled" #define PREF_KEY_BLOCKLIST_UPDATES_ENABLED "blocklist-updates-enabled"
#define PREF_KEY_MAIN_WINDOW_HEIGHT "main-window-height" #define PREF_KEY_MAIN_WINDOW_LAYOUT_ORDER "main-window-layout-order"
#define PREF_KEY_MAIN_WINDOW_WIDTH "main-window-width" #define PREF_KEY_MAIN_WINDOW_HEIGHT "main-window-height"
#define PREF_KEY_MAIN_WINDOW_X "main-window-x" #define PREF_KEY_MAIN_WINDOW_WIDTH "main-window-width"
#define PREF_KEY_MAIN_WINDOW_Y "main-window-y" #define PREF_KEY_MAIN_WINDOW_X "main-window-x"
#define PREF_KEY_MAIN_WINDOW_Y "main-window-y"
void tr_prefs_init_global( void ); void tr_prefs_init_global( void );

View File

@ -498,16 +498,17 @@ onAskTrackerQueryTooltip( GtkWidget * widget UNUSED,
***/ ***/
GtkWidget * GtkWidget *
tr_window_new( GtkUIManager * ui_manager, tr_window_new( GtkUIManager * ui_mgr, TrCore * core )
TrCore * core )
{ {
int i, n; int i, n;
const char * pch; const char * pch;
PrivateData * p; PrivateData * p;
GtkWidget *mainmenu, *toolbar, *filter, *list, *status;
GtkWidget * vbox, *w, *self, *h, *c, *s, *image, *menu; GtkWidget * vbox, *w, *self, *h, *c, *s, *image, *menu;
GtkWindow * win; GtkWindow * win;
GSList * l; GSList * l;
GSList * toggles; GSList * toggles;
const char * filter_names[FILTER_MODE_QTY] = { const char * filter_names[FILTER_MODE_QTY] = {
/* show all torrents */ /* show all torrents */
N_( "A_ll" ), N_( "A_ll" ),
@ -537,20 +538,18 @@ tr_window_new( GtkUIManager * ui_manager,
gtk_window_set_title( win, g_get_application_name( ) ); gtk_window_set_title( win, g_get_application_name( ) );
gtk_window_set_role( win, "tr-main" ); gtk_window_set_role( win, "tr-main" );
gtk_window_set_default_size( win, gtk_window_set_default_size( win,
pref_int_get( PREF_KEY_MAIN_WINDOW_WIDTH ), pref_int_get( PREF_KEY_MAIN_WINDOW_WIDTH ),
pref_int_get( PREF_KEY_MAIN_WINDOW_HEIGHT ) ); pref_int_get( PREF_KEY_MAIN_WINDOW_HEIGHT ) );
gtk_window_move( win, pref_int_get( PREF_KEY_MAIN_WINDOW_X ), gtk_window_move( win, pref_int_get( PREF_KEY_MAIN_WINDOW_X ),
pref_int_get( PREF_KEY_MAIN_WINDOW_Y ) ); pref_int_get( PREF_KEY_MAIN_WINDOW_Y ) );
gtk_window_add_accel_group( win, gtk_window_add_accel_group( win, gtk_ui_manager_get_accel_group( ui_mgr ) );
gtk_ui_manager_get_accel_group( ui_manager ) );
/* window's main container */ /* window's main container */
vbox = gtk_vbox_new ( FALSE, 0 ); vbox = gtk_vbox_new ( FALSE, 0 );
gtk_container_add ( GTK_CONTAINER( self ), vbox ); gtk_container_add ( GTK_CONTAINER( self ), vbox );
/* main menu */ /* main menu */
w = action_get_widget( "/main-window-menu" ); w = mainmenu = action_get_widget( "/main-window-menu" );
gtk_box_pack_start( GTK_BOX( vbox ), w, FALSE, FALSE, 0 );
w = action_get_widget( "/main-window-menu/torrent-menu/update-tracker" ); w = action_get_widget( "/main-window-menu/torrent-menu/update-tracker" );
#if GTK_CHECK_VERSION( 2, 12, 0 ) #if GTK_CHECK_VERSION( 2, 12, 0 )
g_signal_connect( w, "query-tooltip", g_signal_connect( w, "query-tooltip",
@ -558,12 +557,11 @@ tr_window_new( GtkUIManager * ui_manager,
#endif #endif
/* toolbar */ /* toolbar */
w = p->toolbar = action_get_widget( "/main-window-toolbar" ); w = toolbar = p->toolbar = action_get_widget( "/main-window-toolbar" );
gtk_box_pack_start( GTK_BOX( vbox ), w, FALSE, FALSE, 0 );
/* filter */ /* filter */
toggles = NULL; toggles = NULL;
h = p->filter = gtk_hbox_new( FALSE, 0 ); h = filter = p->filter = gtk_hbox_new( FALSE, 0 );
gtk_container_set_border_width( GTK_CONTAINER( h ), GUI_PAD_SMALL ); gtk_container_set_border_width( GTK_CONTAINER( h ), GUI_PAD_SMALL );
for( i = 0; i < FILTER_MODE_QTY; ++i ) for( i = 0; i < FILTER_MODE_QTY; ++i )
{ {
@ -590,7 +588,6 @@ tr_window_new( GtkUIManager * ui_manager,
s ), SEXY_ICON_ENTRY_PRIMARY, s ), SEXY_ICON_ENTRY_PRIMARY,
TRUE ); TRUE );
gtk_box_pack_end( GTK_BOX( h ), s, FALSE, FALSE, 0 ); gtk_box_pack_end( GTK_BOX( h ), s, FALSE, FALSE, 0 );
gtk_box_pack_start( GTK_BOX( vbox ), h, FALSE, FALSE, 0 );
g_signal_connect( s, "changed", G_CALLBACK( filter_entry_changed ), p ); g_signal_connect( s, "changed", G_CALLBACK( filter_entry_changed ), p );
/* status menu */ /* status menu */
@ -614,7 +611,7 @@ tr_window_new( GtkUIManager * ui_manager,
} }
/* status */ /* status */
h = p->status = gtk_hbox_new( FALSE, GUI_PAD ); h = status = p->status = gtk_hbox_new( FALSE, GUI_PAD );
gtk_container_set_border_width( GTK_CONTAINER( h ), GUI_PAD ); gtk_container_set_border_width( GTK_CONTAINER( h ), GUI_PAD );
w = p->gutter_lb = gtk_label_new( "N Torrents" ); w = p->gutter_lb = gtk_label_new( "N Torrents" );
gtk_box_pack_start( GTK_BOX( h ), w, 0, 0, 0 ); gtk_box_pack_start( GTK_BOX( h ), w, 0, 0, 0 );
@ -641,7 +638,6 @@ tr_window_new( GtkUIManager * ui_manager,
gtk_box_pack_end( GTK_BOX( h ), w, FALSE, FALSE, 0 ); gtk_box_pack_end( GTK_BOX( h ), w, FALSE, FALSE, 0 );
g_signal_connect( w, "button-release-event", g_signal_connect( w, "button-release-event",
G_CALLBACK( onYinYangReleased ), p ); G_CALLBACK( onYinYangReleased ), p );
gtk_box_pack_start( GTK_BOX( vbox ), h, FALSE, FALSE, 0 );
menu = gtk_menu_new( ); menu = gtk_menu_new( );
l = NULL; l = NULL;
@ -650,27 +646,46 @@ tr_window_new( GtkUIManager * ui_manager,
const char * name = _( filter_text_names[i] ); const char * name = _( filter_text_names[i] );
GtkWidget * w = gtk_radio_menu_item_new_with_label ( l, name ); GtkWidget * w = gtk_radio_menu_item_new_with_label ( l, name );
l = gtk_radio_menu_item_get_group( GTK_RADIO_MENU_ITEM( w ) ); l = gtk_radio_menu_item_get_group( GTK_RADIO_MENU_ITEM( w ) );
g_object_set_data( G_OBJECT( g_object_set_data( G_OBJECT( w ), FILTER_TEXT_MODE_KEY,
w ), FILTER_TEXT_MODE_KEY, GINT_TO_POINTER( i ) ); GINT_TO_POINTER( i ) );
g_signal_connect( w, "toggled", G_CALLBACK( g_signal_connect( w, "toggled",
filter_text_toggled_cb ), p ); G_CALLBACK( filter_text_toggled_cb ), p );
gtk_menu_shell_append( GTK_MENU_SHELL( menu ), w ); gtk_menu_shell_append( GTK_MENU_SHELL( menu ), w );
gtk_widget_show( w ); gtk_widget_show( w );
} }
g_signal_connect( s, "icon-released", G_CALLBACK( g_signal_connect( s, "icon-released",
entry_icon_released ), menu ); G_CALLBACK( entry_icon_released ), menu );
/* workarea */ /* workarea */
p->view = makeview( p, core ); p->view = makeview( p, core );
w = p->scroll = gtk_scrolled_window_new( NULL, NULL ); w = list = p->scroll = gtk_scrolled_window_new( NULL, NULL );
gtk_scrolled_window_set_policy( GTK_SCROLLED_WINDOW( w ), gtk_scrolled_window_set_policy( GTK_SCROLLED_WINDOW( w ),
GTK_POLICY_NEVER, GTK_POLICY_NEVER, GTK_POLICY_AUTOMATIC );
GTK_POLICY_AUTOMATIC );
gtk_scrolled_window_set_shadow_type( GTK_SCROLLED_WINDOW( w ), gtk_scrolled_window_set_shadow_type( GTK_SCROLLED_WINDOW( w ),
GTK_SHADOW_IN ); GTK_SHADOW_IN );
gtk_container_add( GTK_CONTAINER( w ), p->view ); gtk_container_add( GTK_CONTAINER( w ), p->view );
gtk_box_pack_start( GTK_BOX( vbox ), w, TRUE, TRUE, 0 );
gtk_container_set_focus_child( GTK_CONTAINER( vbox ), w ); /* layout the widgets */
{
const char * str = pref_string_get( PREF_KEY_MAIN_WINDOW_LAYOUT_ORDER );
char ** tokens = g_strsplit( str, ",", -1 );
for( i=0; tokens && tokens[i]; ++i )
{
const char * key = tokens[i];
if( !strcmp( key, "menu" ) )
gtk_box_pack_start( GTK_BOX( vbox ), mainmenu, FALSE, FALSE, 0 );
else if( !strcmp( key, "toolbar" ) )
gtk_box_pack_start( GTK_BOX( vbox ), toolbar, FALSE, FALSE, 0 );
else if( !strcmp( key, "filter" ) )
gtk_box_pack_start( GTK_BOX( vbox ), filter, FALSE, FALSE, 0 );
else if( !strcmp( key, "list" ) )
gtk_box_pack_start( GTK_BOX( vbox ), list, TRUE, TRUE, 0 );
else if( !strcmp( key, "statusbar" ) )
gtk_box_pack_start( GTK_BOX( vbox ), status, FALSE, FALSE, 0 );
}
g_strfreev( tokens );
}
/* show all but the window */ /* show all but the window */
gtk_widget_show_all( vbox ); gtk_widget_show_all( vbox );