Changeset 435

Show
Ignore:
Timestamp:
10/20/06 12:51:52 (2 years ago)
Author:
kickback
Message:

sweep: make most accels editable. creates new file ~/.sweep/keybindings. removed accel info from transport bar tooltips (they could go out of sync and are static themselves)

Files:

Legend:

Unmodified
Added
Removed
Modified
Copied
Moved
  • sweep/trunk/src/interface.c

    r279 r435  
    5353 
    5454 
    55  
     55void init_accels (void) 
     56
     57  gchar * accels_path; 
     58  
     59  accels_path = (char *)g_get_home_dir (); 
     60  accels_path = g_strconcat (accels_path, "/.sweep/keybindings", NULL); 
     61  gtk_accel_map_load (accels_path); 
     62         
     63
     64 
     65void save_accels (void) 
     66
     67  gchar * accels_path; 
     68  
     69  accels_path = (char *)g_get_home_dir (); 
     70  accels_path = g_strconcat (accels_path, "/.sweep/keybindings", NULL); 
     71  gtk_accel_map_save (accels_path); 
     72         
     73
    5674 
    5775 
  • sweep/trunk/src/interface.h

    r279 r435  
    5454void  
    5555attach_window_close_accel(GtkWindow *window); 
     56void 
     57init_accels (void); 
     58 
     59void 
     60save_accels (void); 
    5661 
    5762#endif /* __INTERFACE_H__ */ 
  • sweep/trunk/src/main.c

    r434 r435  
    218218    g_idle_add ((GSourceFunc)initial_sample_ask, NULL); 
    219219  } 
    220  
     220   
    221221  /* initialise preferences */ 
    222222  prefs_init (); 
     
    230230  /* initialise styles */ 
    231231  init_styles (); 
     232   
     233  /* initialise key bindings (accelerators) */ 
     234  init_accels (); 
    232235 
    233236  /* initialise devices */ 
     
    244247#endif 
    245248 
     249 
     250   
    246251  gtk_main (); 
     252 
    247253 
    248254  /* close preferences database */ 
    249255  prefs_close (); 
     256   
     257  /* save key bindings */ 
     258  save_accels (); 
    250259 
    251260  exit (0); 
  • sweep/trunk/src/notes.c

    r290 r435  
    5252  float pitch; 
    5353  guint  accel_key; 
     54  char accel_basename [4]; 
    5455}; 
    5556 
     
    5859static sw_noteplay notes [] = 
    5960{ 
    60   { N_("C3") , 0.500000, GDK_z }, 
    61   { N_("C#3"), 0.529732, GDK_s }, 
    62   { N_("D3") , 0.561231, GDK_x }, 
    63   { N_("Eb3"), 0.594604, GDK_d }, 
    64   { N_("E3") , 0.629961, GDK_c }, 
    65   { N_("F3") , 0.667420, GDK_v }, 
    66   { N_("F#3"), 0.707107, GDK_g }, 
    67   { N_("G3") , 0.749154, GDK_b }, 
    68   { N_("G#3"), 0.793701, GDK_h }, 
    69   { N_("A3") , 0.840896, GDK_n }, 
    70   { N_("Bb3"), 0.890899, GDK_j }, 
    71   { N_("B3") , 0.943874, GDK_m }, 
     61  { N_("C3") , 0.500000, GDK_z, "C3" }, 
     62  { N_("C#3"), 0.529732, GDK_s, "C#3"}, 
     63  { N_("D3") , 0.561231, GDK_x, "D3" }, 
     64  { N_("Eb3"), 0.594604, GDK_d, "Eb3"}, 
     65  { N_("E3") , 0.629961, GDK_c, "E3" }, 
     66  { N_("F3") , 0.667420, GDK_v, "F3" }, 
     67  { N_("F#3"), 0.707107, GDK_g, "F#3"}, 
     68  { N_("G3") , 0.749154, GDK_b, "G3" }, 
     69  { N_("G#3"), 0.793701, GDK_h, "G#3"}, 
     70  { N_("A3") , 0.840896, GDK_n, "A3" }, 
     71  { N_("Bb3"), 0.890899, GDK_j, "Bb3"}, 
     72  { N_("B3") , 0.943874, GDK_m, "B3" }, 
    7273 
    73   { N_("C4") , 1.000000, GDK_q }, 
     74  { N_("C4") , 1.000000, GDK_q, "C4" }, 
    7475 
    75   { N_("C#4"), 1.059463, GDK_2 }, 
    76   { N_("D4") , 1.122462, GDK_w }, 
    77   { N_("Eb4"), 1.189207, GDK_3 }, 
    78   { N_("E4") , 1.259921, GDK_e }, 
    79   { N_("F4") , 1.334840, GDK_r }, 
    80   { N_("F#4"), 1.414214, GDK_5 }, 
    81   { N_("G4") , 1.498307, GDK_t }, 
    82   { N_("G#4"), 1.587401, GDK_6 }, 
    83   { N_("A4") , 1.681793, GDK_y }, 
    84   { N_("Bb4"), 1.781797, GDK_7 }, 
    85   { N_("B4") , 1.887749, GDK_u }, 
     76  { N_("C#4"), 1.059463, GDK_2, "C#4"}, 
     77  { N_("D4") , 1.122462, GDK_w, "D4" }, 
     78  { N_("Eb4"), 1.189207, GDK_3, "Eb4"}, 
     79  { N_("E4") , 1.259921, GDK_e, "E4" }, 
     80  { N_("F4") , 1.334840, GDK_r, "F4" }, 
     81  { N_("F#4"), 1.414214, GDK_5, "F#4"}, 
     82  { N_("G4") , 1.498307, GDK_t, "G4" }, 
     83  { N_("G#4"), 1.587401, GDK_6, "G#4"}, 
     84  { N_("A4") , 1.681793, GDK_y, "A4" }, 
     85  { N_("Bb4"), 1.781797, GDK_7, "Bb4"}, 
     86  { N_("B4") , 1.887749, GDK_u, "B4" }, 
    8687 
    87   { N_("C5") , 2.000000, GDK_i }, 
    88   { N_("C#5"), 2.118926, GDK_9 }, 
    89   { N_("D5") , 2.244924, GDK_o }, 
    90   { N_("D#5"), 2.378414, GDK_0 }, 
    91   { N_("E5") , 2.519842, GDK_p }, 
     88  { N_("C5") , 2.000000, GDK_i, "C5" }, 
     89  { N_("C#5"), 2.118926, GDK_9, "C#5"}, 
     90  { N_("D5") , 2.244924, GDK_o, "D5" }, 
     91  { N_("D#5"), 2.378414, GDK_0, "D#5"}, 
     92  { N_("E5") , 2.519842, GDK_p, "E5" }, 
    9293#if 0 
    93   { N_("F5") , 2.669680, GDK_bracketleft }, 
    94   { N_("F#5"), 2.828427, GDK_None }, 
    95   { N_("G5") , 2.996614, GDK_None }, 
    96   { N_("G#5"), 3.174802, GDK_None }, 
    97   { N_("A5") , 3.363586, GDK_None }, 
    98   { N_("Bb5"), 3.563595, GDK_None }, 
    99   { N_("B5") , 3.775497, GDK_None }, 
     94  { N_("F5") , 2.669680, GDK_bracketleft, "F5" }, 
     95  { N_("F#5"), 2.828427, GDK_None, "F#5" }, 
     96  { N_("G5") , 2.996614, GDK_None, "G5" }, 
     97  { N_("G#5"), 3.174802, GDK_None, "G#5" }, 
     98  { N_("A5") , 3.363586, GDK_None, "A5" }, 
     99  { N_("Bb5"), 3.563595, GDK_None, "Bb5" }, 
     100  { N_("B5") , 3.775497, GDK_None, "B5" }, 
    100101#endif 
    101102 
     
    109110  GtkWidget *menuitem; 
    110111  int k; 
     112  gchar * tmpchar; 
    111113 
    112114  for (k = 0 ; k < sizeof (notes) / sizeof (notes [0]) ; k++) { 
    113115    menuitem = gtk_menu_item_new_with_label (_(notes [k].name)); 
    114116    gtk_menu_append (GTK_MENU(subsubmenu), menuitem); 
     117        gtk_menu_set_accel_group(GTK_MENU(subsubmenu), accel_group); 
    115118    g_signal_connect (G_OBJECT(menuitem), "activate", 
    116119                        G_CALLBACK(play_view_note_cb), view); 
    117     gtk_widget_show (menuitem); 
    118     gtk_widget_add_accelerator (menuitem, "activate", accel_group, 
    119 notes [k].accel_key, 0, 
    120                                 GTK_ACCEL_VISIBLE); 
     120    tmpchar = g_strdup_printf("<Sweep-View>/Playback/Play Note/%s", 
     121                               notes[k].accel_basename); 
     122           
     123    gtk_menu_item_set_accel_path (GTK_MENU_ITEM(menuitem), tmpchar); 
     124        gtk_accel_map_add_entry  ( tmpchar, notes[k].accel_key, 0); 
    121125 
    122126    g_object_set_data (G_OBJECT(menuitem), "default",  
    123127                              GINT_TO_POINTER(k)); 
     128        gtk_widget_show (menuitem); 
    124129  } 
    125130 
     
    150155 
    151156} 
    152  
  • sweep/trunk/src/record.c

    r272 r435  
    435435    window = gtk_window_new(GTK_WINDOW_TOPLEVEL); 
    436436    sweep_set_window_icon (GTK_WINDOW(window)); 
    437     rec_dialog = window; 
    438          
     437 
     438        attach_window_close_accel(GTK_WINDOW(window)); 
     439    rec_dialog = window;        
     440           
    439441    main_vbox = gtk_vbox_new (FALSE, 0); 
    440442    gtk_container_add (GTK_CONTAINER(window), main_vbox); 
     
    450452    g_signal_connect (G_OBJECT(rec_dialog), "destroy", 
    451453                       G_CALLBACK(rec_dialog_destroy), head); 
    452 /*  FIXME: what's the equiv of gtk_accel_group_add 
    453     gtk_accel_group_add (accel_group, GDK_w, GDK_CONTROL_MASK, 0, 
    454                          GTK_OBJECT(rec_dialog), "hide"); 
    455 */ 
     454 
    456455    hbox = gtk_hbox_new (FALSE, 8); 
    457456    gtk_box_pack_start (GTK_BOX(main_vbox), hbox, FALSE, TRUE, 8); 
  • sweep/trunk/src/view.c

    r370 r435  
    104104#endif 
    105105 
     106static GtkWidget * create_view_menu_item(GtkWidget * menu, gchar * label, 
     107                                                  gchar * accel_path, gpointer callback, gboolean nomodify, 
     108                                                                                                  guint accel_key, GdkModifierType accel_mods, gpointer user_data); 
     109 
    106110void 
    107111view_set_vzoom (sw_view * view, sw_audio_t low, sw_audio_t high); 
     
    177181                     G_CALLBACK(apply_procedure_cb), pi); 
    178182  gtk_widget_show(menuitem); 
    179  
    180   if (accel_group && proc->accel_key) { 
    181     gtk_widget_add_accelerator (menuitem, "activate", accel_group, 
     183/* these accels are not editable */ 
     184 /*   gtk_widget_add_accelerator (menuitem, "activate", accel_group, 
    182185                                proc->accel_key, proc->accel_mods, 
    183                                 GTK_ACCEL_VISIBLE); 
    184   } 
    185  
     186                                GTK_ACCEL_VISIBLE); */ 
    186187} 
    187188 
     
    271272  GList * gl; 
    272273  int old_channels, channels; 
     274  GtkAccelGroup *accel_group; 
    273275 
    274276  channels = view->sample->sounddata->format->channels; 
     
    298300  /* Create the new channelops submenu */ 
    299301  submenu = gtk_menu_new (); 
     302  accel_group = GTK_ACCEL_GROUP(g_object_get_data(G_OBJECT(view->window), "accel_group")); 
     303  gtk_menu_set_accel_group (GTK_MENU (submenu), accel_group); 
     304 
    300305   
    301306  g_object_set_data (G_OBJECT(submenu), "default", GINT_TO_POINTER(channels)); 
    302307                             
    303308  if (channels == 1) { 
    304     menuitem = gtk_menu_item_new_with_label(_("Duplicate to stereo")); 
    305     gtk_menu_append(GTK_MENU(submenu), menuitem); 
    306     g_signal_connect (G_OBJECT(menuitem), "activate", 
    307                        G_CALLBACK(dup_stereo_cb), view); 
    308     gtk_widget_show(menuitem); 
    309      
    310     NOMODIFY(menuitem); 
     309        menuitem = create_view_menu_item (submenu, _("Duplicate to stereo"),  
     310                                       "<Sweep-View>/Sample/Channels/Duplicate to stereo", 
     311                                       dup_stereo_cb, TRUE, 
     312                                       0, 0, view);  
     313      view->channelops_widgets = 
     314      g_list_append (view->channelops_widgets, menuitem); 
     315 
     316    menuitem = create_view_menu_item (submenu, _("Duplicate to multichannel"),  
     317                                       "<Sweep-View>/Channels/Duplicate to multichannel", 
     318                                       dup_channels_dialog_new_cb, TRUE, 
     319                                       0, 0, view);   
    311320    view->channelops_widgets = 
    312321      g_list_append (view->channelops_widgets, menuitem); 
    313  
    314     menuitem = gtk_menu_item_new_with_label(_("Duplicate to multichannel")); 
    315     gtk_menu_append(GTK_MENU(submenu), menuitem); 
    316     g_signal_connect (G_OBJECT(menuitem), "activate", 
    317                        G_CALLBACK(dup_channels_dialog_new_cb), view); 
    318     gtk_widget_show(menuitem); 
    319      
    320     NOMODIFY(menuitem); 
     322           
     323  } 
     324 
     325  if (channels == 2) { 
     326           
     327        menuitem = create_view_menu_item (submenu, _("Swap left and right"),  
     328                                       "<Sweep-View>/Sample/Channels/Swap left and right", 
     329                                       stereo_swap_cb, TRUE, 
     330                                       0, 0, view);  
    321331    view->channelops_widgets = 
    322332      g_list_append (view->channelops_widgets, menuitem); 
    323   } 
    324  
    325   if (channels == 2) { 
    326     menuitem = gtk_menu_item_new_with_label(_("Swap left and right")); 
    327     gtk_menu_append(GTK_MENU(submenu), menuitem); 
    328     g_signal_connect (G_OBJECT(menuitem), "activate", 
    329                        G_CALLBACK(stereo_swap_cb), view); 
    330     gtk_widget_show(menuitem); 
    331      
    332     NOMODIFY(menuitem); 
     333 
     334           
     335        menuitem = create_view_menu_item (submenu, _("Remove left channel"),  
     336                                       "<Sweep-View>/Sample/Channels/Remove left channel", 
     337                                       remove_left_cb, TRUE, 
     338                                       0, 0, view); 
    333339    view->channelops_widgets = 
    334340      g_list_append (view->channelops_widgets, menuitem); 
    335341 
    336     menuitem = gtk_menu_item_new_with_label(_("Remove left channel")); 
    337     gtk_menu_append(GTK_MENU(submenu), menuitem); 
    338     g_signal_connect (G_OBJECT(menuitem), "activate", 
    339                        G_CALLBACK(remove_left_cb), view); 
    340     gtk_widget_show(menuitem); 
    341      
    342     NOMODIFY(menuitem); 
     342           
     343        menuitem = create_view_menu_item (submenu, _("Remove right channel"),  
     344                                       "<Sweep-View>/Sample/Channels/Remove right channel", 
     345                                       remove_right_cb, TRUE, 
     346                                       0, 0, view);        
    343347    view->channelops_widgets = 
    344348      g_list_append (view->channelops_widgets, menuitem); 
    345349 
    346     menuitem = gtk_menu_item_new_with_label(_("Remove right channel")); 
    347     gtk_menu_append(GTK_MENU(submenu), menuitem); 
    348     g_signal_connect (G_OBJECT(menuitem), "activate", 
    349                        G_CALLBACK(remove_right_cb), view); 
    350     gtk_widget_show(menuitem); 
    351      
    352     NOMODIFY(menuitem); 
     350  } 
     351 
     352  if (channels > 1) { 
     353           
     354        menuitem = create_view_menu_item (submenu, _("Mix down to mono"),  
     355                                       "<Sweep-View>/Sample/Channels/Mix down to mono", 
     356                                       mono_mixdown_cb, TRUE, 
     357                                       0, 0, view);                
    353358    view->channelops_widgets = 
    354359      g_list_append (view->channelops_widgets, menuitem); 
    355  
    356   } 
    357  
    358   if (channels > 1) { 
    359     menuitem = gtk_menu_item_new_with_label(_("Mix down to mono")); 
    360     gtk_menu_append(GTK_MENU(submenu), menuitem); 
    361     g_signal_connect (G_OBJECT(menuitem), "activate", 
    362                        G_CALLBACK(mono_mixdown_cb), view); 
    363     gtk_widget_show(menuitem); 
    364      
    365     NOMODIFY(menuitem); 
    366     view->channelops_widgets = 
    367       g_list_append (view->channelops_widgets, menuitem); 
    368   } 
    369  
    370   menuitem = gtk_menu_item_new_with_label(_("Add/Remove channels")); 
    371   gtk_menu_append(GTK_MENU(submenu), menuitem); 
    372   g_signal_connect (G_OBJECT(menuitem), "activate", 
    373                      G_CALLBACK(channels_dialog_new_cb), view); 
    374   gtk_widget_show(menuitem); 
    375    
    376   NOMODIFY(menuitem); 
     360  } 
     361 
     362         
     363  menuitem = create_view_menu_item (submenu, _("Add/Remove channels"),  
     364                                       "<Sweep-View>/Sample/Channels/Add/Remove channels", 
     365                                       channels_dialog_new_cb, TRUE, 
     366                                       0, 0, view);      
     367 
    377368  view->channelops_widgets = 
    378369    g_list_append (view->channelops_widgets, menuitem); 
     
    387378} 
    388379 
     380/* 
     381 * Convenience function to Create and setup individual menuitems 
     382 */ 
     383 
     384static GtkWidget * create_view_menu_item(GtkWidget * menu, gchar * label, 
     385                                                  gchar * accel_path, gpointer callback, gboolean nomodify, 
     386                                                                                                  guint accel_key, GdkModifierType accel_mods, gpointer user_data) 
     387{ 
     388        GtkWidget * menuitem; 
     389         
     390        menuitem = gtk_menu_item_new_with_label(label); 
     391        /* register accel path enabling runtime changes by the user */ 
     392        gtk_menu_item_set_accel_path (GTK_MENU_ITEM(menuitem), accel_path); 
     393        gtk_menu_append(GTK_MENU(menu), menuitem); 
     394         g_signal_connect (G_OBJECT(menuitem), "activate", 
     395                     G_CALLBACK(callback), user_data); 
     396         
     397    /* register default key binding (if one is supplied */ 
     398        if (accel_key) 
     399                 gtk_accel_map_add_entry  (accel_path, accel_key, accel_mods); 
     400 
     401/*      if (nomodify) 
     402          NOMODIFY(menuitem); 
     403        */ 
     404        gtk_widget_show(menuitem); 
     405                 
     406        return menuitem;                                                           
     407} 
    389408 
    390409/* 
     
    409428  /* Create a GtkAccelGroup and add it to the window. */ 
    410429  accel_group = gtk_accel_group_new(); 
     430  g_object_set_data(G_OBJECT(view->window), "accel_group", accel_group); 
    411431#if 0 
    412432  if (GTK_IS_MENU(m)) 
     
    419439  gtk_widget_show(menuitem); 
    420440  submenu = gtk_menu_new(); 
     441  gtk_menu_set_accel_group (GTK_MENU (submenu), accel_group); 
     442 
    421443  gtk_menu_item_set_submenu(GTK_MENU_ITEM(menuitem), submenu); 
    422444 
    423   menuitem = gtk_menu_item_new_with_label(_("New ...")); 
    424   gtk_menu_append(GTK_MENU(submenu), menuitem); 
    425   g_signal_connect (G_OBJECT(menuitem), "activate", 
    426                      G_CALLBACK(sample_new_empty_cb), view); 
    427   gtk_widget_show(menuitem); 
    428   gtk_widget_add_accelerator (menuitem, "activate", accel_group, 
    429                               GDK_n, GDK_CONTROL_MASK, 
    430                               GTK_ACCEL_VISIBLE); 
    431  
    432   menuitem = gtk_menu_item_new_with_label(_("Open ...")); 
    433   gtk_menu_append(GTK_MENU(submenu), menuitem); 
    434   g_signal_connect (G_OBJECT(menuitem), "activate", 
    435                      G_CALLBACK(sample_load_cb), s); 
    436   gtk_widget_show(menuitem); 
    437   gtk_widget_add_accelerator (menuitem, "activate", accel_group, 
    438                               GDK_o, GDK_CONTROL_MASK, 
    439                               GTK_ACCEL_VISIBLE); 
    440  
    441   menuitem = gtk_menu_item_new_with_label(_("Save")); 
    442   gtk_menu_append(GTK_MENU(submenu), menuitem); 
    443   g_signal_connect (G_OBJECT(menuitem), "activate", 
    444                      G_CALLBACK(sample_save_cb), view); 
    445   gtk_widget_show(menuitem); 
    446   gtk_widget_add_accelerator (menuitem, "activate", accel_group, 
    447                               GDK_s, GDK_CONTROL_MASK, 
    448                               GTK_ACCEL_VISIBLE); 
    449  
    450   NOMODIFY(menuitem); 
    451  
    452   menuitem = gtk_menu_item_new_with_label(_("Save As ...")); 
    453   gtk_menu_append(GTK_MENU(submenu), menuitem); 
    454   g_signal_connect (G_OBJECT(menuitem), "activate", 
    455                      G_CALLBACK(sample_save_as_cb), view); 
    456   gtk_widget_show(menuitem); 
    457  
    458   NOMODIFY(menuitem); 
    459  
    460   menuitem = gtk_menu_item_new_with_label(_("Revert")); 
    461   gtk_menu_append(GTK_MENU(submenu), menuitem); 
    462   g_signal_connect (G_OBJECT(menuitem), "activate", 
    463                      G_CALLBACK(sample_revert_cb), view); 
    464   gtk_widget_show(menuitem); 
    465  
    466   NOMODIFY(menuitem); 
     445  create_view_menu_item (submenu, _("New ..."), "<Sweep-View>/File/New ...", 
     446                                                  sample_new_empty_cb, FALSE, 
     447                                                                                                  GDK_n, GDK_CONTROL_MASK, view); 
     448    
     449  create_view_menu_item (submenu, _("Open ..."), "<Sweep-View>/File/Open ...", 
     450                                                  sample_load_cb, FALSE, 
     451                                                                                                  GDK_o, GDK_CONTROL_MASK, view); 
     452   
     453  create_view_menu_item (submenu, _("Save"), "<Sweep-View>/File/Save", 
     454                                                  sample_save_cb, TRUE, 
     455                                                                                                  GDK_s, GDK_CONTROL_MASK, view); 
     456                                                                                                   
     457  create_view_menu_item (submenu, _("Save As ..."), "<Sweep-View>/File/Save As ...", 
     458                                                  sample_save_as_cb, TRUE, 
     459                                                                                                  0, 0, view); 
     460 
     461  create_view_menu_item (submenu, _("Revert"), "<Sweep-View>/File/Revert", 
     462                                                  sample_revert_cb, TRUE, 
     463                                                                                                  0, 0, view); 
    467464 
    468465  menuitem = gtk_menu_item_new(); /* Separator */ 
     
    470467  gtk_widget_show(menuitem); 
    471468 
    472   menuitem = gtk_menu_item_new_with_label(_("Properties ...")); 
    473   gtk_menu_append(GTK_MENU(submenu), menuitem); 
    474   g_signal_connect (G_OBJECT(menuitem), "activate", 
    475                      G_CALLBACK(show_info_dialog_cb), view); 
    476   gtk_widget_show(menuitem); 
    477  
     469  create_view_menu_item (submenu, _("Properties ..."), "<Sweep-View>/File/Properties ...", 
     470                                                  show_info_dialog_cb, FALSE, 
     471                                                                                                  0, 0, view); 
    478472 
    479473  menuitem = gtk_menu_item_new(); /* Separator */ 
    480474  gtk_menu_append(GTK_MENU(submenu), menuitem); 
    481475  gtk_widget_show(menuitem); 
    482  
    483   menuitem = gtk_menu_item_new_with_label(_("Close")); 
    484   gtk_menu_append(GTK_MENU(submenu), menuitem); 
    485   g_signal_connect (G_OBJECT(menuitem), "activate", 
    486                      G_CALLBACK(view_close_cb), s); 
    487   gtk_widget_show(menuitem); 
    488   gtk_widget_add_accelerator (menuitem, "activate", accel_group, 
    489                               GDK_w, GDK_CONTROL_MASK, 
    490                               GTK_ACCEL_VISIBLE); 
    491  
    492   menuitem = gtk_menu_item_new_with_label(_("Quit")); 
    493   gtk_menu_append(GTK_MENU(submenu), menuitem); 
    494   g_signal_connect (G_OBJECT(menuitem), "activate", 
    495                      G_CALLBACK(exit_cb), s); 
    496   gtk_widget_show(menuitem); 
    497   gtk_widget_add_accelerator (menuitem, "activate", accel_group, 
    498                               GDK_q, GDK_CONTROL_MASK, 
    499                               GTK_ACCEL_VISIBLE); 
     476   
     477  create_view_menu_item (submenu, _("Close"), "<Sweep-View>/File/Close", 
     478                                                  exit_cb, FALSE, 
     479                                                                                                  GDK_q, GDK_CONTROL_MASK, s); 
     480 
     481  create_view_menu_item (submenu, _("Quit"), "<Sweep-View>/File/Quit", 
     482                                                  view_close_cb, FALSE, 
     483                                                                                                  GDK_w, GDK_CONTROL_MASK, s); 
     484                                                                                                   
    500485 
    501486  /* Edit */ 
     
    504489  gtk_widget_show(menuitem); 
    505490  submenu = gtk_menu_new(); 
     491  gtk_menu_set_accel_group (GTK_MENU (submenu), accel_group); 
     492  gtk_menu_item_set_accel_path (GTK_MENU_ITEM(menuitem), "<Sweep-View>/Edit"); 
    506493  gtk_menu_item_set_submenu(GTK_MENU_ITEM(menuitem), submenu); 
    507494 
    508   menuitem = gtk_menu_item_new_with_label(_("Cancel")); 
    509   gtk_menu_append(GTK_MENU(submenu), menuitem); 
    510   g_signal_connect (G_OBJECT(menuitem), "activate", 
    511                      G_CALLBACK(cancel_cb), view); 
    512   gtk_widget_show(menuitem); 
    513   gtk_widget_add_accelerator (menuitem, "activate", accel_group, 
    514                               GDK_Escape, GDK_BUTTON1_MASK, 
    515                               GTK_ACCEL_VISIBLE); 
     495  menuitem = create_view_menu_item (submenu, _("Cancel"), "<Sweep-View>/Edit/Cancel", 
     496                                                  cancel_cb, TRUE, 
     497                                                                                                  GDK_Escape, GDK_BUTTON1_MASK, view); 
    516498  NOREADY(menuitem); 
    517  
    518   menuitem = gtk_menu_item_new_with_label(_("Undo")); 
    519   gtk_menu_append(GTK_MENU(submenu), menuitem); 
    520   g_signal_connect (G_OBJECT(menuitem), "activate", 
    521                      G_CALLBACK(undo_cb), view); 
    522   gtk_widget_show(menuitem); 
    523   gtk_widget_add_accelerator (menuitem, "activate", accel_group, 
    524                               GDK_z, GDK_CONTROL_MASK, 
    525                               GTK_ACCEL_VISIBLE); 
    526  
    527   NOMODIFY(menuitem); 
    528  
    529   menuitem = gtk_menu_item_new_with_label(_("Redo")); 
    530   gtk_menu_append(GTK_MENU(submenu), menuitem); 
    531   g_signal_connect (G_OBJECT(menuitem), "activate", 
    532                      G_CALLBACK(redo_cb), view); 
    533   gtk_widget_show(menuitem); 
    534   gtk_widget_add_accelerator (menuitem, "activate", accel_group, 
    535                               GDK_r, GDK_CONTROL_MASK, 
    536                               GTK_ACCEL_VISIBLE); 
    537  
    538   NOMODIFY(menuitem); 
    539  
    540   menuitem = gtk_menu_item_new_with_label(_("Show history ...")); 
    541   gtk_menu_append(GTK_MENU(submenu), menuitem); 
    542   g_signal_connect (G_OBJECT(menuitem), "activate", 
    543                      G_CALLBACK(show_undo_dialog_cb), view); 
    544   gtk_widget_show(menuitem); 
     499   
     500  create_view_menu_item (submenu, _("Undo"), "<Sweep-View>/Edit/Undo", 
     501                                                  undo_cb, TRUE, 
     502                                                                                                  GDK_z, GDK_CONTROL_MASK, view); 
     503   
     504  create_view_menu_item (submenu, _("Redo"), "<Sweep-View>/Edit/Redo", 
     505                                                  redo_cb, TRUE, 
     506                                                                                                  GDK_r, GDK_CONTROL_MASK, view); 
     507   
     508  create_view_menu_item (submenu, _("Show history ..."), "<Sweep-View>/Edit/Show history ...", 
     509                                                  show_undo_dialog_cb, FALSE, 
     510                                                                                                  0, 0, view); 
    545511 
    546512  menuitem = gtk_menu_item_new(); /* Separator */ 
    547513  gtk_menu_append(GTK_MENU(submenu), menuitem); 
    548514  gtk_widget_show(menuitem); 
    549  
    550   menuitem = gtk_menu_item_new_with_label(_("Delete")); 
    551   gtk_menu_append(GTK_MENU(submenu), menuitem); 
    552   g_signal_connect (G_OBJECT(menuitem), "activate", 
    553                      G_CALLBACK(delete_cb), view); 
    554   gtk_widget_show(menuitem); 
    555  
    556   NOMODIFY(menuitem); 
    557  
    558   menuitem = gtk_menu_item_new_with_label(_("Cut")); 
    559   gtk_menu_append(GTK_MENU(submenu), menuitem); 
    560   g_signal_connect (G_OBJECT(menuitem), "activate", 
    561                      G_CALLBACK(cut_cb), view); 
    562   gtk_widget_show(menuitem); 
    563   gtk_widget_add_accelerator (menuitem, "activate", accel_group, 
    564                               GDK_x, GDK_CONTROL_MASK, 
    565                               GTK_ACCEL_VISIBLE); 
    566   NOMODIFY(menuitem); 
    567  
    568   menuitem = gtk_menu_item_new_with_label(_("Copy")); 
    569   gtk_menu_append(GTK_MENU(submenu), menuitem); 
    570   g_signal_connect (G_OBJECT(menuitem), "activate", 
    571                      G_CALLBACK(copy_cb), view); 
    572   gtk_widget_show(menuitem); 
    573   gtk_widget_add_accelerator (menuitem, "activate", accel_group, 
    574                               GDK_c, GDK_CONTROL_MASK, 
    575                               GTK_ACCEL_VISIBLE); 
    576   NOMODIFY(menuitem); 
    577  
    578   menuitem = gtk_menu_item_new_with_label(_("Clear")); 
    579   gtk_menu_append(GTK_MENU(submenu), menuitem); 
    580   g_signal_connect (G_OBJECT(menuitem), "activate", 
    581                      G_CALLBACK(clear_cb), view); 
    582   gtk_widget_show(menuitem); 
    583 #if 0 
    584   gtk_widget_add_accelerator (menuitem, "activate", accel_group, 
    585                               GDK_Delete, GDK_BUTTON1_MASK, 
    586                               GTK_ACCEL_VISIBLE); 
    587 #endif 
    588   NOMODIFY(menuitem); 
    589  
    590   menuitem = gtk_menu_item_new_with_label(_("Crop")); 
    591   gtk_menu_append(GTK_MENU(submenu), menuitem); 
    592   g_signal_connect (G_OBJECT(menuitem), "activate", 
    593                      G_CALLBACK(crop_cb), view); 
    594   gtk_widget_show(menuitem); 
    595 #if 0 
    596   gtk_widget_add_accelerator (menuitem, "activate", accel_group, 
    597                               GDK_Delete, GDK_BUTTON1_MASK, 
    598                               GTK_ACCEL_VISIBLE); 
    599 #endif 
    600   NOMODIFY(menuitem); 
     515   
     516  create_view_menu_item (submenu, _("Delete"), "<Sweep-View>/Edit/Delete", 
     517                                                  delete_cb, TRUE, 
     518                                                                                                  0, 0, view); 
     519                                                                                                   
     520  create_view_menu_item (submenu, _("Cut"), "<Sweep-View>/Edit/Cut", 
     521                                                  cut_cb, TRUE, 
     522                                                                                                  GDK_x, GDK_CONTROL_MASK, view);                                                                                                  
     523                                                                                                   
     524  create_view_menu_item (submenu, _("Copy"), "<Sweep-View>/Edit/Copy", 
     525                                                  copy_cb, TRUE, 
     526                                                                                                  GDK_c, GDK_CONTROL_MASK, view);        
     527  
     528  create_view_menu_item (submenu, _("Clear"), "<Sweep-View>/Edit/Clear", 
     529                                                  clear_cb, TRUE, 
     530                                                                                                  0, 0, view);   
     531 
     532  create_view_menu_item (submenu, _("Crop"), "<Sweep-View>/Edit/Crop", 
     533                                                  crop_cb, TRUE, 
     534                                                                                                  0, 0, view); 
    601535 
    602536  menuitem = gtk_menu_item_new(); /* Separator */ 
     
    604538  gtk_widget_show(menuitem); 
    605539 
    606   menuitem = gtk_menu_item_new_with_label(_("Paste: Insert")); 
    607   gtk_menu_append(GTK_MENU(submenu), menuitem); 
    608   g_signal_connect (G_OBJECT(menuitem), "activate", 
    609                      G_CALLBACK(paste_cb), view); 
    610   gtk_widget_show(menuitem); 
    611   gtk_widget_add_accelerator (menuitem, "activate", accel_group, 
    612                               GDK_v, GDK_CONTROL_MASK, 
    613                               GTK_ACCEL_VISIBLE); 
    614   NOMODIFY(menuitem); 
    615  
    616   menuitem = gtk_menu_item_new_with_label(_("Paste: Mix")); 
    617   gtk_menu_append(GTK_MENU(submenu), menuitem); 
    618   g_signal_connect (G_OBJECT(menuitem), "activate", 
    619                      G_CALLBACK(paste_mix_cb), view); 
    620   gtk_widget_show(menuitem); 
    621   gtk_widget_add_accelerator (menuitem, "activate", accel_group, 
    622                               GDK_m, GDK_CONTROL_MASK, 
    623                               GTK_ACCEL_VISIBLE); 
    624   NOMODIFY(menuitem); 
    625  
    626   menuitem = gtk_menu_item_new_with_label(_("Paste: Crossfade")); 
    627   gtk_menu_append(GTK_MENU(submenu), menuitem); 
    628   g_signal_connect (G_OBJECT(menuitem), "activate", 
    629                      G_CALLBACK(paste_xfade_cb), view); 
    630   gtk_widget_show(menuitem); 
    631   gtk_widget_add_accelerator (menuitem, "activate", accel_group, 
    632                               GDK_f, GDK_CONTROL_MASK, 
    633                               GTK_ACCEL_VISIBLE); 
    634   NOMODIFY(menuitem); 
    635  
    636   menuitem = gtk_menu_item_new_with_label(_("Paste as New")); 
    637   gtk_menu_append(GTK_MENU(submenu), menuitem); 
    638   g_signal_connect (G_OBJECT(menuitem), "activate", 
    639                      G_CALLBACK(paste_as_new_cb), view); 
    640   gtk_widget_show(menuitem); 
    641   gtk_widget_add_accelerator (menuitem, "activate", accel_group, 
    642                               GDK_e, GDK_CONTROL_MASK, 
    643                               GTK_ACCEL_VISIBLE); 
    644   NOMODIFY(menuitem); 
     540  create_view_menu_item (submenu, _("Paste: Insert"), "<Sweep-View>/Edit/Paste: Insert", 
     541                                                  paste_cb, TRUE, 
     542                                                                                                  GDK_v, GDK_CONTROL_MASK, view); 
     543 
     544  create_view_menu_item (submenu, _("Paste: Mix"), "<Sweep-View>/Edit/Paste: Mix", 
     545                                                  paste_mix_cb, TRUE, 
     546                                                                                                  GDK_m, GDK_CONTROL_MASK, view); 
     547                                                                                                   
     548  create_view_menu_item (submenu, _("Paste: Crossfade"), "<Sweep-View>/Edit/Paste: Crossfade", 
     549                                                  paste_xfade_cb, TRUE, 
     550                                                                                                  GDK_f, GDK_CONTROL_MASK, view); 
     551                                                                                                   
     552  create_view_menu_item (submenu, _("Paste as New"), "<Sweep-View>/Edit/Paste as New", 
     553                                                  paste_as_new_cb, TRUE, 
     554                                                                                                  GDK_e, GDK_CONTROL_MASK, view); 
    645555 
    646556  menuitem = gtk_menu_item_new(); /* Separator */ 
     
    648558  gtk_widget_show(menuitem); 
    649559 
    650   menuitem = gtk_menu_item_new_with_label(_("Preview Cut/Cursor")); 
    651   gtk_menu_append(GTK_MENU(submenu), menuitem); 
    652   g_signal_connect (G_OBJECT(menuitem), "activate", 
    653                      G_CALLBACK(preview_cut_cb), view); 
    654   gtk_widget_show(menuitem); 
    655   gtk_widget_add_accelerator (menuitem, "activate", accel_group, 
    656                               GDK_k, GDK_CONTROL_MASK, 
    657                               GTK_ACCEL_VISIBLE); 
    658  
    659   menuitem = gtk_menu_item_new_with_label(_("Pre-roll to Cursor")); 
    660   gtk_menu_append(GTK_MENU(submenu), menuitem); 
    661   g_signal_connect (G_OBJECT(menuitem), "activate", 
    662                      G_CALLBACK(preroll_cb), view); 
    663   gtk_widget_show(menuitem); 
    664   gtk_widget_add_accelerator (menuitem, "activate", accel_group, 
    665                               GDK_k, GDK_SHIFT_MASK|GDK_CONTROL_MASK, 
    666                               GTK_ACCEL_VISIBLE); 
     560  create_view_menu_item (submenu, _("Preview Cut/Cursor"), "<Sweep-View>/Edit/Preview Cut-Cursor", 
     561                                                  preview_cut_cb, FALSE, 
     562                                                                                                  GDK_k, GDK_CONTROL_MASK, view); 
     563 
     564  create_view_menu_item (submenu, _("Pre-roll to Cursor"), "<Sweep-View>/Edit/Pre-roll to Cursor", 
     565                                                  preroll_cb, FALSE, 
     566                                                                                                  GDK_k, GDK_SHIFT_MASK|GDK_CONTROL_MASK, view); 
     567 
    667568 
    668569  /* Select */ 
     
    671572  gtk_widget_show(menuitem); 
    672573  submenu = gtk_menu_new(); 
     574  gtk_menu_set_accel_group (GTK_MENU (submenu), accel_group); 
     575 
    673576  gtk_menu_item_set_submenu(GTK_MENU_ITEM(menuitem), submenu); 
    674577 
    675   menuitem = gtk_menu_item_new_with_label(_("Invert")); 
    676   gtk_menu_append(GTK_MENU(submenu), menuitem); 
    677   g_signal_connect (G_OBJECT(menuitem), "activate", 
    678                      G_CALLBACK(select_invert_cb), s); 
    679   gtk_widget_show(menuitem); 
    680   gtk_widget_add_accelerator (menuitem, "activate", accel_group, 
    681                               GDK_i, GDK_CONTROL_MASK, GTK_ACCEL_VISIBLE); 
    682   NOMODIFY(menuitem); 
    683  
    684   menuitem = gtk_menu_item_new_with_label(_("All")); 
    685   gtk_menu_append(GTK_MENU(submenu), menuitem); 
    686   g_signal_connect (G_OBJECT(menuitem), "activate", 
    687                      G_CALLBACK(select_all_cb), s); 
    688   gtk_widget_show(menuitem); 
    689   gtk_widget_add_accelerator (menuitem, "activate", accel_group, 
    690                               GDK_a, GDK_CONTROL_MASK, GTK_ACCEL_VISIBLE); 
    691   NOMODIFY(menuitem); 
    692  
    693   menuitem = gtk_menu_item_new_with_label(_("None")); 
    694   gtk_menu_append(GTK_MENU(submenu), menuitem); 
    695   g_signal_connect (G_OBJECT(menuitem), "activate", 
    696                      G_CALLBACK(select_none_cb), s); 
    697   gtk_widget_show(menuitem); 
    698   gtk_widget_add_accelerator (menuitem, "activate", accel_group, 
    699                               GDK_a, GDK_SHIFT_MASK|GDK_CONTROL_MASK, 
    700                               GTK_ACCEL_VISIBLE); 
    701   NOMODIFY(menuitem); 
     578  create_view_menu_item (submenu, _("Invert"), "<Sweep-View>/Select/Invert", 
     579                                                  select_invert_cb, TRUE, 
     580                                                                                                  GDK_i, GDK_CONTROL_MASK, s); 
     581 
     582  create_view_menu_item (submenu, _("All"), "<Sweep-View>/Select/All", 
     583                                                  select_all_cb, TRUE, 
     584                                                                                                  GDK_a, GDK_CONTROL_MASK, s); 
     585 
     586  create_view_menu_item (submenu, _("None"), "<Sweep-View>/Select/None", 
     587                                                  select_none_cb, TRUE, 
     588                                                                                                  GDK_a, GDK_SHIFT_MASK|GDK_CONTROL_MASK, s); 
    702589 
    703590  menuitem = gtk_menu_item_new(); /* Separator */ 
     
    705592  gtk_widget_show(menuitem); 
    706593 
    707   menuitem = gtk_menu_item_new_with_label(_("Halve")); 
    708   gtk_menu_append(GTK_MENU(submenu), menuitem); 
    709   g_signal_connect (G_OBJECT(menuitem), "activate", 
    710                      G_CALLBACK(selection_halve_cb), s); 
    711   gtk_widget_show(menuitem); 
    712   gtk_widget_add_accelerator (menuitem, "activate", accel_group, 
    713                               GDK_semicolon, GDK_BUTTON1_MASK, 
    714                               GTK_ACCEL_VISIBLE); 
    715   NOMODIFY(menuitem); 
    716  
    717   menuitem = gtk_menu_item_new_with_label(_("Double")); 
    718   gtk_menu_append(GTK_MENU(submenu), menuitem); 
    719   g_signal_connect (G_OBJECT(menuitem), "activate", 
    720                      G_CALLBACK(selection_double_cb), s); 
    721   gtk_widget_show(menuitem); 
    722   gtk_widget_add_accelerator (menuitem, "activate", accel_group, 
    723                               GDK_quoteright, GDK_BUTTON1_MASK, 
    724                               GTK_ACCEL_VISIBLE); 
    725   NOMODIFY(menuitem); 
    726  
    727   menuitem = gtk_menu_item_new_with_label(_("Shift left")); 
    728   gtk_menu_append(GTK_MENU(submenu), menuitem); 
    729   g_signal_connect (G_OBJECT(menuitem), "activate", 
    730                      G_CALLBACK(select_shift_left_cb), s); 
    731   gtk_widget_show(menuitem); 
    732   gtk_widget_add_accelerator (menuitem, "activate", accel_group, 
    733                               GDK_less, GDK_BUTTON1_MASK, 
    734                               GTK_ACCEL_VISIBLE); 
    735   NOMODIFY(menuitem); 
    736  
    737   menuitem = gtk_menu_item_new_with_label(_("Shift right")); 
    738   gtk_menu_append(GTK_MENU(submenu), menuitem); 
    739   g_signal_connect (G_OBJECT(menuitem), "activate", 
    740                      G_CALLBACK(select_shift_right_cb), s); 
    741   gtk_widget_show(menuitem); 
    742   gtk_widget_add_accelerator (menuitem, "activate", accel_group, 
    743                               GDK_greater, GDK_BUTTON1_MASK, 
    744                               GTK_ACCEL_VISIBLE); 
    745   NOMODIFY(menuitem); 
     594  create_view_menu_item (submenu, _("Halve"), "<Sweep-View>/Select/Halve", 
     595                                                  selection_halve_cb, TRUE, 
     596                                                                                                  GDK_semicolon, GDK_BUTTON1_MASK, s);  
     597                                                                                                   
     598  create_view_menu_item (submenu, _("Double"), "<Sweep-View>/Select/Double", 
     599                                                  selection_double_cb, TRUE, 
     600                                                                                                  GDK_quoteright, GDK_BUTTON1_MASK, s);  
     601                                                                                                   
     602  create_view_menu_item (submenu, _("Shift left"), "<Sweep-View>/Select/Shift left", 
     603                                                  select_shift_left_cb, TRUE, 
     604                                                                                                  GDK_less, GDK_BUTTON1_MASK, s);  
     605 
     606  create_view_menu_item (submenu, _("Shift right"), "<Sweep-View>/Select/Shift right", 
     607                &n