Changeset 505

Show
Ignore:
Timestamp:
09/27/07 02:14:18 (4 years ago)
Author:
kickback
Message:

sweep-jack-testing: sync with trunk

Files:

Legend:

Unmodified
Added
Removed
Modified
Copied
Moved
  • sweep/branches/sweep-jack-testing/ChangeLog

    r355 r505  
     1Tue Jan 30 00:00:00 GMT 2007 Peter Shorthose <kickback@users.sourceforge.net> 
     2 
     3        * ALSA is now the default driver. see README.OSS for oss 
     4        * minimum supported gtk version raised to 2.4  
     5        * added the "hand tool" for panning the display with inertia 
     6          (Radoslaw Korzeniewski) 
     7        * can now open multiple files via the gtk file selector 
     8        * implemented accel editing via the usual gtk method 
     9        * added tdb lock override (Takashi Iwai) 
     10        * remove support for libsndfile0 (Erik de Castro Lopo) 
     11        * remove direct flac support as it's supported by libsndfile now 
     12          (Erik de Castro Lopo) 
     13        * added a new splash screen (Pascal Klein) 
     14        * fix segfault when closing windows while others were still loading 
     15        * other bugs addressed and changes made. run "svn log" on a copy of svn 
     16          trunk for details, or check http://trac.metadecks.org/timeline 
     17        * released 0.9.2 
     18 
    119Mon Jan 30 23:58:00 GMT 2006 Peter Shorthose <kickback@users.sourceforge.net> 
    220 
  • sweep/branches/sweep-jack-testing/Makefile.am

    r355 r505  
    1414 
    1515EXTRA_DIST = config.rpath mkinstalldirs  $(desktop_DATA) $(pkgdata_DATA)  $(pixmap_DATA) \ 
    16              sweep.spec README.Solaris README.ALSA README.i18n acconfig.h TODO 
     16             sweep.spec README.Solaris README.ALSA README.i18n TODO 
    1717 
    1818MAINTAINERCLEANFILES = Makefile.in aclocal.m4 configure config.h.in \ 
  • sweep/branches/sweep-jack-testing/NEWS

    r355 r505  
     1Tue Jan 30 2007 -- Version 0.9.2 
     2-------------------------------- 
     3 
     4New in this release: 
     5 
     6        * ALSA is now the default driver. see README.OSS for oss 
     7        * minimum supported gtk version raised to 2.4  
     8        * added the "hand tool" for panning the display with inertia 
     9          (Radoslaw Korzeniewski) 
     10        * can now open multiple files via the gtk file selector 
     11        * implemented accel editing via the usual gtk method 
     12        * added tdb lock override (Takashi Iwai) 
     13        * remove support for libsndfile0 (Erik de Castro Lopo) 
     14        * remove direct flac support as it's supported by libsndfile now 
     15          (Erik de Castro Lopo) 
     16        * added a new splash screen (Pascal Klein) 
     17        * fix segfault when closing windows while others were still loading 
     18        * other bugs addressed and changes made. run "svn log" on a copy of svn 
     19          trunk for details, or check http://trac.metadecks.org/timeline 
     20        * released 0.9.2 
     21 
     22 
    123Mon Jan 30 2006 -- Version 0.9.1 
    224-------------------------------- 
  • sweep/branches/sweep-jack-testing/README

    r287 r505  
    3434REQUIRED: 
    3535 
    36         * GTK+ 2.0, (version 2.2.0 or higher) standard in most  
     36        * GTK+ 2.0, (version 2.4.0 or higher) standard in most  
    3737          distributions and available from: 
    3838 
  • sweep/branches/sweep-jack-testing/README.ALSA

    r124 r505  
     1Sun Jun 25 2006 
     2--------------- 
     3 
     4the default driver is now the ALSA driver. see README.OSS for  
     5information on using the OSS driver instead.  
     6 
    17Wed Apr 30 2003 
    28--------------- 
  • sweep/branches/sweep-jack-testing/TODO

    r355 r505  
    33 
    44        * JACK support 
    5         * FLAC support 
    65        * caching of undo data on disk 
    76        * sample bank management 
     
    1110        * LADSPA browser 
    1211        * modular drivers 
    13  
    14 Done 
    15 ---- 
    16  
    17         * ALSA 0.9 support 
    18         * Ogg Vorbis support 
    19         * MP3 support (read-only) 
    20         * GTK2 port 
  • sweep/branches/sweep-jack-testing/acinclude.m4

    r62 r505  
    1010dnl Test for AUDIOFILE, and define AUDIOFILE_CFLAGS and AUDIOFILE_LIBS 
    1111dnl 
    12 AC_DEFUN(AM_PATH_AUDIOFILE
     12AC_DEFUN([AM_PATH_AUDIOFILE]
    1313[dnl  
    1414dnl Get the cflags and libraries from the audiofile-config script 
  • sweep/branches/sweep-jack-testing/configure.ac

    r355 r505  
    11dnl Process this file with autoconf to produce a configure script. 
    22 
     3dnl Require minimum autoconf version 
     4AC_PREREQ(2.50) 
     5 
    36AC_INIT(configure.ac) 
    4 AM_INIT_AUTOMAKE(sweep, 0.9.1
     7AM_INIT_AUTOMAKE(sweep, 0.9.2
    58AM_CONFIG_HEADER(config.h) 
    69 
     
    6467dnl 
    6568 
    66 PKG_CHECK_MODULES(GTK, gtk+-2.0 >=  2.2.0, HAVE_GTK="yes", sweep_config_ok="no") 
     69PKG_CHECK_MODULES(GTK, gtk+-2.0 >=  2.4.0, HAVE_GTK="yes", sweep_config_ok="no") 
    6770AC_SUBST(GTK_CFLAGS) 
    6871AC_SUBST(GTK_LIBS) 
     
    8992dnl 
    9093 
    91 LIBSNDFILE_VERSION="???" 
    92  
    93 # !!! libsndfile0 backport 
    94  
    95 ac_enable_libsndfile0=no 
    96 AC_ARG_ENABLE(libsndfile0, 
    97      [  --enable-libsndfile0    enable building against libsndfile version 0], 
    98      [ ac_enable_libsndfile0=yes ]) 
    99  
    100 if test "x${ac_enable_libsndfile0}" != xno ; then 
    101  
    102   HAVE_LIBSNDFILE1="ignore" 
    103  
    104   AC_CHECK_LIB(sndfile, sf_open_read, HAVE_LIBSNDFILE0="yes") 
    105   AC_CHECK_LIB(sndfile, sf_command, HAVE_LIBSNDFILE0="yes") 
    106  
    107   if test "x$HAVE_LIBSNDFILE0" = xyes ; then 
    108     SNDFILE_LIBS="-lsndfile" 
    109     AC_SUBST(SNDFILE_LIBS) 
    110     LIBSNDFILE_VERSION="0" 
    111   else 
    112     AC_MSG_ERROR([ 
    113 *** 
    114 *** You have explicitly enabled to build against libsndfile version 0, 
    115 *** but there is no compatible version of libsndfile version 0 installed. 
    116 *** 
    117 *** To continue this build, you must first install libsndfile version 
    118 *** 0.27.0 or 0.28.0. 
    119 *** 
    120 *** Note that unless you are building against an older system distribution, 
    121 *** it is highly recommended that you install and build against 
    122 *** libsndfile version 1. 
    123 *** 
    124 ]) 
    125   fi 
    126  
    127 else # !!! 
    128  
    12994PKG_CHECK_MODULES(SNDFILE, sndfile >= 1.0.0, 
    13095                  HAVE_LIBSNDFILE1="yes", HAVE_LIBSNDFILE1="no") 
     
    13398  AC_DEFINE([HAVE_LIBSNDFILE1], [], [Define if we have libsndfile1.]) 
    13499  AC_SUBST(SNDFILE_LIBS) 
    135   LIBSNDFILE_VERSION="1" 
    136100else 
    137101  sweep_config_ok="no" 
    138102  AC_CHECK_LIB(sndfile, sf_open, HAVE_LIBSNDFILE1="maybe") 
    139   AC_CHECK_LIB(sndfile, sf_open_read, HAVE_LIBSNDFILE0="yes") 
    140103fi 
    141104 
     
    161124  fi 
    162125fi 
    163  
    164 fi # !!! libsndfile0 backport 
    165126 
    166127AC_CHECK_SIZEOF(off_t,1) 
     
    362323 
    363324 
    364 ac_enable_alsa=no 
     325ac_enable_alsa=yes 
    365326AC_ARG_ENABLE(alsa, 
    366      [  --enable-alsa           enable use of ALSA, and disable use of OSS ], 
    367      [ ac_enable_alsa=yes ]) 
     327     [  --disable-alsa           Disable ALSA, and enable use of OSS], 
     328     [ ac_enable_alsa=no ]) 
    368329 
    369330if test "x${ac_enable_alsa}" != xno ; then 
     
    387348     [ ac_enable_jack_playback=yes ]) 
    388349          
    389 if test "x${ac_enable_jack_playback}" = xyes && test "x${ac_enable_alsa}" = xyes ; then 
    390 AC_MSG_ERROR([ 
    391 *** 
    392 *** You cannot supply both --enable-alsa and --enable-jack-playback 
    393 *** together. you must choose one or the other. 
    394 *** 
    395 ]) 
    396 fi 
    397  
    398 if test "x${ac_enable_jack_playback}" = xyes && test "x${ac_enable_alsa}" != xyes ; then 
     350 
     351if test "x${ac_enable_jack_playback}" = xyes; then 
    399352 
    400353PKG_CHECK_MODULES(JACK, jack >= 0.100.0,, [AC_MSG_ERROR([ 
     
    470423 
    471424 
     425AC_ARG_ENABLE(gcc-werror, 
     426        AC_HELP_STRING([--enable-gcc-werror], [enable -Werror in all Makefiles])) 
     427 
    472428dnl Use -Wall if we have gcc. 
    473429dnl changequote(,)dnl 
    474430if test "x$ac_cv_prog_gcc" = xyes ; then 
    475431  CFLAGS="$CFLAGS -Wall" 
     432 
     433  if test x$enable_gcc_werror = "xyes" ; then 
     434    CFLAGS="$CFLAGS -Werror" 
     435        fi 
     436 
    476437fi 
    477438dnl changequote([,])dnl 
     
    571532]) 
    572533fi 
    573 if test "x$HAVE_LIBSNDFILE0" = xyes ; then 
    574     AC_MSG_RESULT([ 
    575       Development files missing: Your system appears to have an old 
    576       version of libsndfile (below 1.0.0) installed. 
    577 ]) 
    578 fi 
    579534 
    580535if test "x$HAVE_ALSA" = xmaybe ; then 
     
    669624intl/Makefile 
    670625po/Makefile.in 
     626doc/sweep.1 
    671627]) 
    672628 
     
    679635**     Experimental code: ....... ${ac_enable_experimental} 
    680636**     Audio device handling: ... $sweep_config_driver 
    681 **     PCM: libsndfile version .. $LIBSNDFILE_VERSION 
     637**     PCM: libsndfile .......... $HAVE_LIBSNDFILE1 
    682638**     Ogg Vorbis support: ...... $HAVE_VORBIS 
    683639**     MPEG (MP3) loading: ...... $HAVE_MAD 
  • sweep/branches/sweep-jack-testing/doc/Makefile.am

    r85 r505  
    33man_MANS = sweep.1 
    44 
    5 EXTRA_DIST = $(man_MANS) plugin_writers_guide.txt 
     5EXTRA_DIST = $(man_MANS) sweep.1.in plugin_writers_guide.txt 
    66 
  • sweep/branches/sweep-jack-testing/include/sweep/sweep_selection.h

    r124 r505  
    2424sw_sel * 
    2525sel_new (sw_framecount_t start, sw_framecount_t end); 
     26 
     27void 
     28sel_free (sw_sel * sel); 
    2629 
    2730sw_sel * 
  • sweep/branches/sweep-jack-testing/include/sweep/sweep_types.h

    r124 r505  
    112112 
    113113  gpointer data; 
    114  
     114  GMutex * data_mutex; /* Mutex for access to sample data */ 
     115         
    115116  GList * sels;     /* selection: list of sw_sels */ 
    116117  GMutex * sels_mutex; /* Mutex for access to sels */ 
  • sweep/branches/sweep-jack-testing/intl/localcharset.c

    r183 r505  
    327327 
    328328  /* Woe32 has a function returning the locale's codepage as a number.  */ 
    329   sprintf (buf, "CP%u", GetACP ()); 
     329  snprintf (buf, sizeof (buf), "CP%u", GetACP ()); 
    330330  codeset = buf; 
    331331 
     
    378378      else 
    379379        { 
    380           sprintf (buf, "CP%u", cp[0]); 
     380          snprintf (buf, sizeof (buf), "CP%u", cp[0]); 
    381381          codeset = buf; 
    382382        } 
  • sweep/branches/sweep-jack-testing/intl/printf.c

    r183 r505  
    126126  va_start (args, format); 
    127127  retval = libintl_vprintf (format, args); 
    128   va_end (args); 
    129   return retval; 
    130 } 
    131  
    132 DLL_EXPORTED 
    133 int 
    134 libintl_vsprintf (char *resultbuf, const char *format, va_list args) 
    135 { 
    136   if (strchr (format, '$') == NULL) 
    137     return vsprintf (resultbuf, format, args); 
    138   else 
    139     { 
    140       size_t length = (size_t) ~0 / (4 * sizeof (char)); 
    141       char *result = libintl_vasnprintf (resultbuf, &length, format, args); 
    142       if (result != resultbuf) 
    143         { 
    144           free (result); 
    145           return -1; 
    146         } 
    147       else 
    148         return length; 
    149     } 
    150 } 
    151  
    152 DLL_EXPORTED 
    153 int 
    154 libintl_sprintf (char *resultbuf, const char *format, ...) 
    155 { 
    156   va_list args; 
    157   int retval; 
    158  
    159   va_start (args, format); 
    160   retval = libintl_vsprintf (resultbuf, format, args); 
    161128  va_end (args); 
    162129  return retval; 
  • sweep/branches/sweep-jack-testing/intl/vasnprintf.c

    r183 r505  
    1 /* vsprintf with automatic memory allocation. 
     1/* vasnprintf with automatic memory allocation. 
    22   Copyright (C) 1999, 2002-2005 Free Software Foundation, Inc. 
    33 
     
    3838#endif 
    3939 
    40 #include <stdio.h>      /* snprintf(), sprintf() */ 
     40#include <stdio.h>      /* snprintf() */ 
    4141#include <stdlib.h>     /* abort(), malloc(), realloc(), free() */ 
    4242#include <string.h>     /* memcpy(), strlen() */ 
     
    149149 
    150150    /* Allocate a small buffer that will hold a directive passed to 
    151        sprintf or snprintf.  */ 
     151       snprintf.  */ 
    152152    buf_neededlength = 
    153153      xsum4 (7, d.max_width_length, d.max_precision_length, 6); 
     
    272272                unsigned int prefix_count; 
    273273                int prefixes[2]; 
    274 #if !USE_SNPRINTF 
    275                 size_t tmp_length; 
    276                 CHAR_T tmpbuf[700]; 
    277                 CHAR_T *tmp; 
    278  
    279                 /* Allocate a temporary buffer of sufficient size for calling 
    280                    sprintf.  */ 
    281                 { 
    282                   size_t width; 
    283                   size_t precision; 
    284  
    285                   width = 0; 
    286                   if (dp->width_start != dp->width_end) 
    287                     { 
    288                       if (dp->width_arg_index != ARG_NONE) 
    289                         { 
    290                           int arg; 
    291  
    292                           if (!(a.arg[dp->width_arg_index].type == TYPE_INT)) 
    293                             abort (); 
    294                           arg = a.arg[dp->width_arg_index].a.a_int; 
    295                           width = (arg < 0 ? (unsigned int) (-arg) : arg); 
    296                         } 
    297                       else 
    298                         { 
    299                           const CHAR_T *digitp = dp->width_start; 
    300  
    301                           do 
    302                             width = xsum (xtimes (width, 10), *digitp++ - '0'); 
    303                           while (digitp != dp->width_end); 
    304                         } 
    305                     } 
    306  
    307                   precision = 6; 
    308                   if (dp->precision_start != dp->precision_end) 
    309                     { 
    310                       if (dp->precision_arg_index != ARG_NONE) 
    311                         { 
    312                           int arg; 
    313  
    314                           if (!(a.arg[dp->precision_arg_index].type == TYPE_INT)) 
    315                             abort (); 
    316                           arg = a.arg[dp->precision_arg_index].a.a_int; 
    317                           precision = (arg < 0 ? 0 : arg); 
    318                         } 
    319                       else 
    320                         { 
    321                           const CHAR_T *digitp = dp->precision_start + 1; 
    322  
    323                           precision = 0; 
    324                           while (digitp != dp->precision_end) 
    325                             precision = xsum (xtimes (precision, 10), *digitp++ - '0'); 
    326                         } 
    327                     } 
    328  
    329                   switch (dp->conversion) 
    330                     { 
    331  
    332                     case 'd': case 'i': case 'u': 
    333 # ifdef HAVE_LONG_LONG 
    334                       if (type == TYPE_LONGLONGINT || type == TYPE_ULONGLONGINT) 
    335                         tmp_length = 
    336                           (unsigned int) (sizeof (unsigned long long) * CHAR_BIT 
    337                                           * 0.30103 /* binary -> decimal */ 
    338                                           * 2 /* estimate for FLAG_GROUP */ 
    339                                          ) 
    340                           + 1 /* turn floor into ceil */ 
    341                           + 1; /* account for leading sign */ 
    342                       else 
    343 # endif 
    344                       if (type == TYPE_LONGINT || type == TYPE_ULONGINT) 
    345                         tmp_length = 
    346                           (unsigned int) (sizeof (unsigned long) * CHAR_BIT 
    347                                           * 0.30103 /* binary -> decimal */ 
    348                                           * 2 /* estimate for FLAG_GROUP */ 
    349                                          ) 
    350                           + 1 /* turn floor into ceil */ 
    351                           + 1; /* account for leading sign */ 
    352                       else 
    353                         tmp_length = 
    354                           (unsigned int) (sizeof (unsigned int) * CHAR_BIT 
    355                                           * 0.30103 /* binary -> decimal */ 
    356                                           * 2 /* estimate for FLAG_GROUP */ 
    357                                          ) 
    358                           + 1 /* turn floor into ceil */ 
    359                           + 1; /* account for leading sign */ 
    360                       break; 
    361  
    362                     case 'o': 
    363 # ifdef HAVE_LONG_LONG 
    364                       if (type == TYPE_LONGLONGINT || type == TYPE_ULONGLONGINT) 
    365                         tmp_length = 
    366                           (unsigned int) (sizeof (unsigned long long) * CHAR_BIT 
    367                                           * 0.333334 /* binary -> octal */ 
    368                                          ) 
    369                           + 1 /* turn floor into ceil */ 
    370                           + 1; /* account for leading sign */ 
    371                       else 
    372 # endif 
    373                       if (type == TYPE_LONGINT || type == TYPE_ULONGINT) 
    374                         tmp_length = 
    375                           (unsigned int) (sizeof (unsigned long) * CHAR_BIT 
    376                                           * 0.333334 /* binary -> octal */ 
    377                                          ) 
    378                           + 1 /* turn floor into ceil */ 
    379                           + 1; /* account for leading sign */ 
    380                       else 
    381                         tmp_length = 
    382                           (unsigned int) (sizeof (unsigned int) * CHAR_BIT 
    383                                           * 0.333334 /* binary -> octal */ 
    384                                          ) 
    385                           + 1 /* turn floor into ceil */ 
    386                           + 1; /* account for leading sign */ 
    387                       break; 
    388  
    389                     case 'x': case 'X': 
    390 # ifdef HAVE_LONG_LONG 
    391                       if (type == TYPE_LONGLONGINT || type == TYPE_ULONGLONGINT) 
    392                         tmp_length = 
    393                           (unsigned int) (sizeof (unsigned long long) * CHAR_BIT 
    394                                           * 0.25 /* binary -> hexadecimal */ 
    395                                          ) 
    396                           + 1 /* turn floor into ceil */ 
    397                           + 2; /* account for leading sign or alternate form */ 
    398                       else 
    399 # endif 
    400                       if (type == TYPE_LONGINT || type == TYPE_ULONGINT) 
    401                         tmp_length = 
    402                           (unsigned int) (sizeof (unsigned long) * CHAR_BIT 
    403                                           * 0.25 /* binary -> hexadecimal */ 
    404                                          ) 
    405                           + 1 /* turn floor into ceil */ 
    406                           + 2; /* account for leading sign or alternate form */ 
    407                       else 
    408                         tmp_length = 
    409                           (unsigned int) (sizeof (unsigned int) * CHAR_BIT 
    410                                           * 0.25 /* binary -> hexadecimal */ 
    411                                          ) 
    412                           + 1 /* turn floor into ceil */ 
    413                           + 2; /* account for leading sign or alternate form */ 
    414                       break; 
    415  
    416                     case 'f': case 'F': 
    417 # ifdef HAVE_LONG_DOUBLE 
    418                       if (type == TYPE_LONGDOUBLE) 
    419                         tmp_length = 
    420                           (unsigned int) (LDBL_MAX_EXP 
    421                                           * 0.30103 /* binary -> decimal */ 
    422                                           * 2 /* estimate for FLAG_GROUP */ 
    423                                          ) 
    424                           + 1 /* turn floor into ceil */ 
    425                           + 10; /* sign, decimal point etc. */ 
    426                       else 
    427 # endif 
    428                         tmp_length = 
    429                           (unsigned int) (DBL_MAX_EXP 
    430                                           * 0.30103 /* binary -> decimal */ 
    431                                           * 2 /* estimate for FLAG_GROUP */ 
    432                                          ) 
    433                           + 1 /* turn floor into ceil */ 
    434                           + 10; /* sign, decimal point etc. */ 
    435                       tmp_length = xsum (tmp_length, precision); 
    436                       break; 
    437  
    438                     case 'e': case 'E': case 'g': case 'G': 
    439                     case 'a': case 'A': 
    440                       tmp_length = 
    441                         12; /* sign, decimal point, exponent etc. */ 
    442                       tmp_length = xsum (tmp_length, precision); 
    443                       break; 
    444  
    445                     case 'c': 
    446 # if defined HAVE_WINT_T && !WIDE_CHAR_VERSION 
    447                       if (type == TYPE_WIDE_CHAR) 
    448                         tmp_length = MB_CUR_MAX; 
    449                       else 
    450 # endif 
    451                         tmp_length = 1; 
    452                       break; 
    453  
    454                     case 's': 
    455 # ifdef HAVE_WCHAR_T 
    456                       if (type == TYPE_WIDE_STRING) 
    457                         { 
    458                           tmp_length = 
    459                             local_wcslen (a.arg[dp->arg_index].a.a_wide_string); 
    460  
    461 #  if !WIDE_CHAR_VERSION 
    462                           tmp_length = xtimes (tmp_length, MB_CUR_MAX); 
    463 #  endif 
    464                         } 
    465                       else 
    466 # endif 
    467                         tmp_length = strlen (a.arg[dp->arg_index].a.a_string); 
    468                       break; 
    469  
    470                     case 'p': 
    471                       tmp_length = 
    472                         (unsigned int) (sizeof (void *) * CHAR_BIT 
    473                                         * 0.25 /* binary -> hexadecimal */ 
    474                                        ) 
    475                           + 1 /* turn floor into ceil */ 
    476                           + 2; /* account for leading 0x */ 
    477                       break; 
    478  
    479                     default: 
    480                       abort (); 
    481                     } 
    482  
    483                   if (tmp_length < width) 
    484                     tmp_length = width; 
    485  
    486                   tmp_length = xsum (tmp_length, 1); /* account for trailing NUL */ 
    487                 } 
    488  
    489                 if (tmp_length <= sizeof (tmpbuf) / sizeof (CHAR_T)) 
    490                   tmp = tmpbuf; 
    491                 else 
    492                   { 
    493                     size_t tmp_memsize = xtimes (tmp_length, sizeof (CHAR_T)); 
    494  
    495                     if (size_overflow_p (tmp_memsize)) 
    496                       /* Overflow, would lead to out of memory.  */ 
    497                       goto out_of_memory; 
    498                     tmp = (CHAR_T *) malloc (tmp_memsize); 
    499                     if (tmp == NULL) 
    500                       /* Out of memory.  */ 
    501                       goto out_of_memory; 
    502                   } 
    503 #endif 
    504  
    505                 /* Construct the format string for calling snprintf or 
    506                    sprintf.  */ 
     274 
     275                /* Construct the format string for calling snprintf.  */ 
    507276                p = buf; 
    508277                *p++ = '%'; 
     
    567336#endif 
    568337 
    569                 /* Construct the arguments for calling snprintf or sprintf.  */ 
     338                /* Construct the arguments for calling snprintf.  */ 
    570339                prefix_count = 0; 
    571340                if (dp->width_arg_index != ARG_NONE) 
     
    615384                                             prefixes[0], prefixes[1], arg, \ 
    616385                                             &count);                       \ 
    617                         break;                                              \ 
    618                       default:                                              \ 
    619                         abort ();                                           \ 
    620                       } 
    621 #else 
    622 # define SNPRINTF_BUF(arg) \ 
    623                     switch (prefix_count)                                   \ 
    624                       {                                                     \ 
    625                       case 0:                                               \ 
    626                         count = sprintf (tmp, buf, arg);                    \ 
    627                         break;                                              \ 
    628                       case 1:                                               \ 
    629                         count = sprintf (tmp, buf, prefixes[0], arg);       \ 
    630                         break;                                              \ 
    631                       case 2:                                               \ 
    632                         count = sprintf (tmp, buf, prefixes[0], prefixes[1],\ 
    633                                          arg);                              \ 
    634386                        break;                                              \ 
    635387                      default:                                              \ 
     
    835587                      } 
    836588 
    837 #if USE_SNPRINTF 
    838                     /* The snprintf() result did fit.  */ 
    839 #else 
    840                     /* Append the sprintf() result.  */ 
    841                     memcpy (result + length, tmp, count * sizeof (CHAR_T)); 
    842                     if (tmp != tmpbuf) 
    843                       free (tmp); 
    844 #endif 
    845  
    846589                    length += count; 
    847590                    break; 
  • sweep/branches/sweep-jack-testing/m4/speex.m4

    r148 r505  
    88dnl Test for libspeex, and define SPEEX_CFLAGS and SPEEX_LIBS 
    99dnl 
    10 AC_DEFUN(XIPH_PATH_SPEEX
     10AC_DEFUN([XIPH_PATH_SPEEX]
    1111[dnl  
    1212dnl Get the cflags and libraries 
  • sweep/branches/sweep-jack-testing/plugins/byenergy/Makefile.am

    r355 r505  
    1515        mkdir -p $(DESTDIR)/$(libdir) 
    1616        $(INSTALL_PROGRAM) .libs/libbyenergy.so $(DESTDIR)/$(libdir); 
     17 
     18uninstall: 
     19        rm -f $(DESTDIR)/$(libdir)/libbyenergy.so 
  • sweep/branches/sweep-jack-testing/plugins/echo/Makefile.am

    r355 r505  
    1515        mkdir -p $(DESTDIR)/$(libdir) 
    1616        $(INSTALL_PROGRAM) .libs/libecho.so $(DESTDIR)/$(libdir); 
     17 
     18uninstall: 
     19        rm -f $(DESTDIR)/$(libdir)/libecho.so 
  • sweep/branches/sweep-jack-testing/plugins/fade/Makefile.am

    r355 r505  
    1414        mkdir -p $(DESTDIR)/$(libdir) 
    1515        $(INSTALL_PROGRAM) .libs/libfade.so $(DESTDIR)/$(libdir); 
     16 
     17uninstall: 
     18        rm -f $(DESTDIR)/$(libdir)/libfade.so 
     19 
  • sweep/branches/sweep-jack-testing/plugins/ladspa/Makefile.am

    r355 r505  
    1515        mkdir -p $(DESTDIR)/$(libdir) 
    1616        $(INSTALL_PROGRAM) .libs/libladspameta.so $(DESTDIR)/$(libdir); 
     17 
     18uninstall: 
     19        rm -f $(DESTDIR)/$(libdir)/libladspameta.so 
  • sweep/branches/sweep-jack-testing/plugins/normalise/Makefile.am

    r355 r505  
    1414        mkdir -p $(DESTDIR)/$(libdir) 
    1515        $(INSTALL_PROGRAM) .libs/libnormalise.so $(DESTDIR)/$(libdir); 
     16 
     17uninstall: 
     18        rm -f $(DESTDIR)/$(libdir)/libnormalise.so 
  • sweep/branches/sweep-jack-testing/plugins/reverse/Makefile.am

    r355 r505  
    1515        mkdir -p $(DESTDIR)/$(libdir) 
    1616        $(INSTALL_PROGRAM) .libs/libreverse.so $(DESTDIR)/$(libdir); 
     17 
     18uninstall: 
     19        rm -f $(DESTDIR)/$(libdir)/libreverse.so 
  • sweep/branches/sweep-jack-testing/src/Makefile.am

    r356 r505  
    3737        file_dialogs.c file_dialogs.h \ 
    3838        file_sndfile.h \ 
    39         file_sndfile0.c \ 
    4039        file_sndfile1.c \ 
    4140        file_mad.c \ 
  • sweep/branches/sweep-jack-testing/src/about_dialog.c

    r355 r505  
    8585    gtk_box_pack_start(GTK_BOX(vbox), about_ebox, TRUE, TRUE, 0); 
    8686    gtk_widget_show(about_ebox); 
    87     sprintf(buf2, "%s/sweep_splash.png", PACKAGE_DATA_DIR); 
     87    snprintf(buf2, sizeof (buf2), "%s/sweep_splash.png", PACKAGE_DATA_DIR); 
    8888    about_image = gtk_image_new_from_file (buf2); 
    8989    gtk_container_add(GTK_CONTAINER(about_ebox), about_image); 
  • sweep/branches/sweep-jack-testing/src/cursors.c

    r124 r505  
    4141#include "../pixmaps/zoom_out.xbm" 
    4242#include "../pixmaps/zoom_out_mask.xbm" 
     43#include "../pixmaps/cursor-openhand.xbm" 
     44#include "../pixmaps/cursor-openhand_mask.xbm" 
     45#include "../pixmaps/cursor-closedhand.xbm" 
     46#include "../pixmaps/cursor-closedhand_mask.xbm" 
    4347 
    4448GdkCursor * sweep_cursors[SWEEP_CURSOR_MAX]; 
     
    101105  sweep_cursors[SWEEP_CURSOR_NOISE] = gdk_cursor_new (GDK_SPRAYCAN); 
    102106 
     107 
    103108  create_bitmap_and_mask_from_xpm (&bitmap, &mask, horiz_xpm); 
    104109   
    105110  sweep_cursors[SWEEP_CURSOR_HORIZ] = 
    106111    gdk_cursor_new_from_pixmap (bitmap, mask, &white, &black, 8, 8); 
     112 
    107113 
    108114  create_bitmap_and_mask_from_xpm (&bitmap, &mask, horiz_plus_xpm); 
     
    111117    gdk_cursor_new_from_pixmap (bitmap, mask, &white, &black, 8, 8); 
    112118 
     119 
    113120  create_bitmap_and_mask_from_xpm (&bitmap, &mask, horiz_minus_xpm); 
    114121   
    115122  sweep_cursors[SWEEP_CURSOR_HORIZ_MINUS] = 
    116123    gdk_cursor_new_from_pixmap (bitmap, mask, &white, &black, 8, 8); 
     124 
    117125 
    118126  bitmap = 
     
    139147 
    140148  bitmap = 
    141     gdk_bitmap_create_from_data (NULL, needle_bits, 
     149    gdk_bitmap_create_from_data (NULL, (const gchar *) needle_bits, 
    142150                                 needle_width, needle_height); 
    143151  mask = 
    144     gdk_bitmap_create_from_data (NULL, needle_mask_bits, 
     152    gdk_bitmap_create_from_data (NULL, (const gchar *) needle_mask_bits, 
    145153                                 needle_mask_width, needle_mask_height); 
    146154 
     
    151159 
    152160  bitmap = 
    153     gdk_bitmap_create_from_data (NULL, hand_bits, 
     161    gdk_bitmap_create_from_data (NULL, (const gchar *) hand_bits, 
    154162                                 hand_width, hand_height); 
    155163  mask = 
    156     gdk_bitmap_create_from_data (NULL, hand_mask_bits, 
     164    gdk_bitmap_create_from_data (NULL, (const gchar *) hand_mask_bits, 
    157165                                 hand_mask_width, hand_mask_height); 
    158166 
     
    162170 
    163171 
     172  bitmap = 
     173    gdk_bitmap_create_from_data (NULL, (const gchar *) cursor_openhand_bits, 
     174                                 cursor_openhand_width, cursor_openhand_height); 
     175  mask = 
     176    gdk_bitmap_create_from_data (NULL, (const gchar *) cursor_openhand_mask_bits, 
     177                                 cursor_openhand_mask_width, cursor_openhand_mask_height); 
     178 
     179  sweep_cursors[SWEEP_CURSOR_HAND_OPEN] = 
     180    gdk_cursor_new_from_pixmap (bitmap, mask, &black, &white, 
     181                                cursor_openhand_x_hot, cursor_openhand_y_hot); 
     182 
     183 
     184  bitmap = 
     185    gdk_bitmap_create_from_data (NULL, (const gchar *) cursor_closedhand_bits, 
     186                                 cursor_closedhand_width, cursor_closedhand_height); 
     187  mask = 
     188    gdk_bitmap_create_from_data (NULL, (const gchar *) cursor_closedhand_mask_bits, 
     189                                 cursor_closedhand_mask_width, cursor_closedhand_mask_height); 
     190 
     191  sweep_cursors[SWEEP_CURSOR_HAND_CLOSE] = 
     192    gdk_cursor_new_from_pixmap (bitmap, mask, &black, &white, 
     193                                cursor_closedhand_x_hot, cursor_closedhand_y_hot); 
     194 
     195 
    164196} 
  • sweep/branches/sweep-jack-testing/src/cursors.h

    r124 r505  
    3333  SWEEP_CURSOR_PENCIL, 
    3434  SWEEP_CURSOR_NOISE, 
     35  SWEEP_CURSOR_HAND_OPEN, 
     36  SWEEP_CURSOR_HAND_CLOSE, 
    3537  SWEEP_CURSOR_MAX 
    3638}; 
  • sweep/branches/sweep-jack-testing/src/driver.c

    r367 r505  
    9797  char * main_dev; 
    9898 
    99   main_dev = prefs_get_string (DEV_KEY); 
     99  main_dev = prefs_get_string (pref->primary_device_key); 
    100100 
    101101  if (main_dev == NULL) return pcmio_get_default_main_dev(); 
     
    109109  char * monitor_dev; 
    110110 
    111   monitor_dev = prefs_get_string (MONITOR_DEV_KEY); 
     111  monitor_dev = prefs_get_string (pref->monitor_device_key); 
    112112 
    113113  if (monitor_dev == NULL) return pcmio_get_default_monitor_dev (); 
     
    132132  int * log_frags; 
    133133 
    134   log_frags = prefs_get_int (LOG_FRAGS_KEY); 
    135  
     134  log_frags = prefs_get_int (pref->log_frags_key); 
    136135  if (log_frags == NULL) return DEFAULT_LOG_FRAGS; 
    137136  else return (*log_frags); 
     
    165164  adj = g_object_get_data (G_OBJECT(dialog), "buff_adj"); 
    166165 
    167   prefs_set_int (LOG_FRAGS_KEY, adj->value); 
     166  prefs_set_int (pref->log_frags_key, adj->value); 
    168167 
    169168  main_dev = 
    170169    gtk_entry_get_text (GTK_ENTRY(GTK_COMBO(main_combo)->entry)); 
    171170 
    172   prefs_set_string (DEV_KEY, (gchar *)main_dev); 
     171  prefs_set_string (pref->primary_device_key, (gchar *)main_dev); 
    173172 
    174173  if (monitor_checked (dialog)) { 
    175174    monitor_dev = 
    176175      gtk_entry_get_text (GTK_ENTRY(GTK_COMBO(monitor_combo)->entry));  
    177     prefs_set_string (MONITOR_DEV_KEY, (gchar *)monitor_dev); 
     176    prefs_set_string (pref->monitor_device_key, (gchar *)monitor_dev); 
    178177 
    179178    prefs_set_int (USE_MONITOR_KEY, 1); 
     
    671670        if (pref->startup) 
    672671                return pref->startup(); 
     672    else 
     673        return 1; 
    673674} 
    674675 
     
    765766  play_mutex = g_mutex_new (); 
    766767         
    767        pref->startup(); 
     768  device_startup(); 
    768769         
    769        
     770
  • sweep/branches/sweep-jack-testing/src/driver.h

    r367 r505  
    5353  void (*drain) (sw_handle * handle); 
    5454  void (*close) (sw_handle * handle); 
    55 //GtkWidget (*preferences_dialog) (void); 
     55   
     56  char * primary_device_key; 
     57  char * monitor_device_key; 
     58  char * log_frags_key; 
    5659}; 
    5760 
  • sweep/branches/sweep-jack-testing/src/driver_alsa.c

    r367 r505  
    287287    handle->driver_rate = r; 
    288288    handle->driver_channels = c; 
     289         
     290    if (c < 1) { 
     291      fprintf (stderr, "sweep: alsa_setup: alsa says channels == %i\n", c); 
     292      return; 
     293    } 
    289294  } 
    290295 
     
    316321  int err; 
    317322 
    318   uframes = count / handle->driver_channels
     323  uframes = handle->driver_channels > 0 ? count / handle->driver_channels : 0
    319324 
    320325  err = snd_pcm_readi (pcm_handle, buf, uframes); 
     
    357362  /*printf ("sweep: alsa_write \n");*/ 
    358363 
    359   uframes = count / handle->driver_channels
     364  uframes = handle->driver_channels > 0 ? count / handle->driver_channels : 0
    360365  //printf ("sweep: alsa_write 1\n"); 
    361366 
     
    453458  alsa_device_flush, 
    454459  alsa_device_drain, 
    455   alsa_device_close 
     460  alsa_device_close, 
     461  "alsa_primary_device", 
     462  "alsa_monitor_device", 
     463  "alsa_log_frags" 
    456464}; 
    457465 
  • sweep/branches/sweep-jack-testing/src/driver_oss.c

    r367 r505  
    446446  drain_dev_dsp, 
    447447  close_dev_dsp, 
     448  "oss_primary_device", 
     449  "oss_monitor_device", 
     450  "oss_log_frags" 
    448451}; 
    449452 
  • sweep/branches/sweep-jack-testing/src/driver_solaris.c

    r367 r505  
    126126  drain_dev_audio, 
    127127  close_dev_audio, 
     128  "solaris_primary_device", 
     129  "solaris_monitor_device", 
     130  "solaris_log_frags" 
    128131}; 
    129132 
  • sweep/branches/sweep-jack-testing/src/file_dialogs.c

    r286 r505  
    279279sample_load_ok_cb(GtkWidget * widget, gpointer data) 
    280280{ 
    281   gchar *dir; 
    282  
    283   dir = (gchar *)gtk_file_selection_get_filename(GTK_FILE_SELECTION(data)); 
    284  
    285   sample_load(dir); 
     281  gchar **dir; 
     282  gint i; 
     283 
     284  dir = (gchar **)gtk_file_selection_get_selections(GTK_FILE_SELECTION(data)); 
     285  for( i = 0; dir[i]; i++) 
     286    { 
     287      sample_load(dir[i]); 
     288    } 
    286289 
    287290  gtk_widget_destroy(GTK_WIDGET(data)); 
     
    305308 
    306309  filesel = gtk_file_selection_new(_("Sweep: Load file")); 
     310  gtk_file_selection_set_select_multiple(GTK_FILE_SELECTION(filesel), TRUE); 
    307311  sweep_set_window_icon (GTK_WINDOW(filesel)); 
    308312  gtk_window_set_position (GTK_WINDOW (filesel), GTK_WIN_POS_CENTER); 
  • sweep/branches/sweep-jack-testing/src/file_mad.c

    r355 r505  
    230230 
    231231    if (info->nr_frames > sample->sounddata->nr_frames) { 
    232       sample->sounddata->data = 
    233         g_realloc (sample->sounddata->data, 
     232                g_mutex_lock(sample->sounddata->data_mutex); 
     233                 
     234                sample->sounddata->data = g_realloc(sample->sounddata->data, 
    234235                   frames_to_bytes (sample->sounddata->format, 
    235236                                    info->nr_frames)); 
     237            g_mutex_unlock(sample->sounddata->data_mutex); 
     238 
    236239    } 
    237240     
  • sweep/branches/sweep-jack-testing/src/file_speex.c

    r355 r505  
    289289      speex_decoder_ctl(st, SPEEX_SET_HANDLER, &callback); 
    290290    } 
    291   if (!*rate
     291  if (*rate==-1
    292292    *rate = header->rate; 
    293293  /* Adjust rate if --force-* options are used */ 
     
    344344  SpeexBits bits; 
    345345  int frame_size = 0; 
    346   int rate
     346  int rate = -1
    347347  int channels = -1; 
    348348  int extra_headers; 
     
    797797 
    798798  { 
    799     long bytes = op.bytes; 
     799    int bytes = op.bytes; 
    800800    op.packet = (unsigned char *) 
    801801      speex_header_to_packet (&header, &bytes); 
  • sweep/branches/sweep-jack-testing/src/interface.c

    r279 r505  
    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/branches/sweep-jack-testing/src/interface.h

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

    r230 r505  
    4646 
    4747extern void sweep_timeouts_init (void); 
    48  
     48extern gboolean ignore_failed_tdb_lock; 
    4949/* 
    5050 * initial_sample_load () 
     
    162162      show_version = TRUE; 
    163163      argv[i] = NULL; 
     164        } else if ((strcmp (argv[i], "--ignore-failed-lock") == 0)) { 
     165      ignore_failed_tdb_lock = TRUE; 
     166      argv[i] = NULL;                       
    164167#if 0 
    165168    } else if (strcmp (argv[i], "--no-toolbox") == 0) { 
     
    195198    g_print (_("  -v --version             Output version info.\n")); 
    196199    g_print (_("  --display <display>      Use the designated X display.\n")); 
     200    g_print (_("  --ignore-failed-lock     Continue when attempt to lock the\n" 
     201                      "                           preferences file fails.  For use when\n" 
     202                      "                           the users home directory is on an NFS\n" 
     203                          "                           file system. (possibly unsafe) \n" )); 
     204 
    197205#if 0 
    198206    g_print (_("  --no-toolbox             Do not show the toolbox window.\n")); 
     
    210218    g_idle_add ((GSourceFunc)initial_sample_ask, NULL); 
    211219  } 
    212  
     220   
    213221  /* initialise preferences */ 
    214222  prefs_init (); 
     
    222230  /* initialise styles */ 
    223231  init_styles (); 
     232   
     233  /* initialise key bindings (accelerators) */ 
     234  init_accels (); 
    224235 
    225236  /* initialise devices */ 
     
    236247#endif 
    237248 
     249 
     250   
    238251  gtk_main (); 
     252 
    239253 
    240254  /* close preferences database */ 
    241255  prefs_close (); 
     256   
     257  /* save key bindings */ 
     258  save_accels (); 
    242259 
    243260  exit (0); 
    244261} 
    245  
  • sweep/branches/sweep-jack-testing/src/notes.c

    r290 r505  
    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/branches/sweep-jack-testing/src/pcmio.h

    r124 r505  
    2424#include <glib.h> 
    2525 
    26 #define DEV_KEY "OSS_Device" 
    27 #define MONITOR_DEV_KEY "OSS_MonitorDevice" 
    28 #define LOG_FRAGS_KEY "OSS_Logfrags" 
    29  
    3026#define USE_MONITOR_KEY "UseMonitor" 
    3127 
  • sweep/branches/sweep-jack-testing/src/play.c

    r369 r505  
    8686static int pbuf_chans = 0, devbuf_chans = 0; 
    8787 
     88#ifdef DRIVER_JACK 
    8889extern jack_process_data_t *process_data; 
    89  
     90#endif 
    9091/* 
    9192 * update_playmarker () 
     
    191192      p = po - (gdouble)si; 
    192193      si *= f->channels; 
     194      g_mutex_lock(head->sample->sounddata->data_mutex); 
    193195 
    194196      if (interpolate) { 
    195197        si_next = si+f->channels; 
    196198        for (j = 0; j < f->channels; j++) { 
    197          buf[b] = head->gain * (d[si] * p + d[si_next] * (1 - p)); 
     199         buf[b] = head->gain * (((sw_audio_t *)head->sample->sounddata->data)[si] * p + ((sw_audio_t *)head->sample->sounddata->data)[si_next] * (1 - p)); 
    198200          if (do_smoothing) { 
    199201            sw_framecount_t b1, b2; 
     
    208210      } else { 
    209211        for (j = 0; j < f->channels; j++) { 
    210           buf[b] = head->gain * d[si]; 
     212         buf[b] = head->gain * ((sw_audio_t *)head->sample->sounddata->data)[si]; 
    211213          if (do_smoothing) { 
    212214            sw_framecount_t b1, b2; 
     
    220222        } 
    221223      } 
     224     g_mutex_unlock(head->sample->sounddata->data_mutex); 
    222225    } 
    223226 
  • sweep/branches/sweep-jack-testing/src/play.h

    r367 r505  
    2424#include "sweep_app.h" 
    2525#ifdef DRIVER_JACK 
     26int 
     27process_callback(jack_nframes_t nframes, void *data); 
     28 
    2629#include <jack/jack.h> 
    2730#endif 
     
    3033init_playback (void); 
    3134 
    32 int 
    33 process_callback(jack_nframes_t nframes, void *data); 
     35 
    3436 
    3537gboolean monitor_active(void); 
  • sweep/branches/sweep-jack-testing/src/preferences.c

    r355 r505  
    4040 
    4141static TDB_CONTEXT * prefs_tdb = NULL; 
     42gboolean ignore_failed_tdb_lock = FALSE; 
     43 
    4244 
    4345#define DIR_MODE (S_IRWXU) 
     
    110112 
    111113  if (prefs_tdb == NULL) { 
    112     perror (_("Error opening ~/.sweep/preferences.tdb")); 
     114           
     115        if (ignore_failed_tdb_lock == TRUE) 
     116        { 
     117      prefs_tdb = tdb_open (prefs_path, 0, TDB_NOLOCK, O_RDWR | O_CREAT, FILE_MODE); 
     118          if (prefs_tdb != NULL) { 
     119        fprintf(stderr,  "Warning: couldn't get lock to  ~/.sweep/preferences.tdb.\n" 
     120           "         opened without locking\n"); 
     121                  return; 
     122      }  
     123    } 
     124        perror (_("Error opening ~/.sweep/preferences.tdb")); 
    113125    exit (1); 
    114     return; 
    115126  } 
    116127} 
  • sweep/branches/sweep-jack-testing/src/question_dialogs.c

    r279 r505  
    136136  gtk_widget_show (label); 
    137137 
     138  /* New layout of buttons */ 
     139 
     140  gtk_button_box_set_layout (GTK_BUTTON_BOX(GTK_DIALOG(window)->action_area), GTK_BUTTONBOX_SPREAD); 
     141 
    138142  /* OK */ 
    139143 
     
    142146  GTK_WIDGET_SET_FLAGS (GTK_WIDGET (ok_button), GTK_CAN_DEFAULT); 
    143147  gtk_box_pack_start (GTK_BOX (GTK_DIALOG(window)->action_area), 
    144                       ok_button, FALSE, TRUE, 0); 
     148                      ok_button, TRUE, TRUE, 0); 
    145149  g_object_set_data (G_OBJECT(ok_button), "default", ok_callback); 
    146150  gtk_widget_show (ok_button); 
     
    156160    GTK_WIDGET_SET_FLAGS (GTK_WIDGET (button), GTK_CAN_DEFAULT); 
    157161    gtk_box_pack_start (GTK_BOX (GTK_DIALOG(window)->action_area), 
    158                         button, FALSE, TRUE, 0); 
     162                        button, TRUE, TRUE, 0); 
    159163    g_object_set_data (G_OBJECT(button), "default", no_callback); 
    160164    gtk_widget_show (button); 
  • sweep/branches/sweep-jack-testing/src/record.c

    r272 r505  
    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/branches/sweep-jack-testing/src/sample-display.c

    r355 r505  
    112112#define MARCH_INTERVAL 300 
    113113#define PULSE_INTERVAL 450 
     114#define HAND_SCROLL_INTERVAL 50 
    114115 
    115116extern sw_view * last_tmp_view; 
     
    200201  SELECTING_PENCIL, 
    201202  SELECTING_NOISE, 
     203  SELECTING_HAND, 
    202204}; 
    203205 
     
    487489    cursor = sweep_cursors[SWEEP_CURSOR_NOISE]; 
    488490    break; 
     491  case TOOL_HAND: 
     492    cursor = sweep_cursors[SWEEP_CURSOR_HAND_OPEN]; 
     493    break; 
    489494  default: 
    490495    cursor = NULL; 
     
    634639  s->height = h; 
    635640 
     641  window = GTK_WIDGET(s)->window; 
     642  visual = gdk_rgb_get_visual(); 
     643 
     644#if DOUBLE_BUFFER 
    636645  if(s->backing_pixmap) { 
    637646    g_object_unref(s->backing_pixmap); 
    638647  } 
    639   window = GTK_WIDGET(s)->window; 
    640   visual = gdk_rgb_get_visual(); 
    641  
    642648  s->backing_pixmap = gdk_pixmap_new (GTK_WIDGET(s)->window,   
    643649                                      w, h, visual->depth); 
     650#endif 
     651 
    644652} 
    645653 
     
    16161624 
    16171625  return FALSE; 
     1626} 
     1627 
     1628static gint 
     1629sample_display_hand_scroll (SampleDisplay * s) 
     1630{ 
     1631  gint new_win_start, win_length; 
     1632  gfloat step; 
     1633   
     1634  win_length = s->view->end - s->view->start; 
     1635 
     1636  step = win_length * 1.0 / s->width; 
     1637 
     1638  new_win_start = s->view->start + s->hand_scroll_delta * step; 
     1639   
     1640  new_win_start = CLAMP(new_win_start, 0, 
     1641                        s->view->sample->sounddata->nr_frames - 
     1642                        (s->view->end - s->view->start)); 
     1643 
     1644  if(new_win_start != s->view->start) { 
     1645    sample_display_set_window (s, 
     1646                               new_win_start, 
     1647                               new_win_start + win_length); 
     1648  } else { 
     1649          s->hand_scroll_delta = 0; 
     1650  } 
     1651/* 
     1652  g_print ("s->delta: %i new_win_start: %i\n", s->hand_scroll_delta, new_win_start); 
     1653*/ 
     1654  s->hand_scroll_delta *= 0.98; 
     1655 
     1656  return (s->hand_scroll_delta != 0); 
    16181657} 
    16191658 
     
    18781917 
    18791918static void 
     1919sample_display_handle_hand_motion (SampleDisplay * s, int x, int y) 
     1920{ 
     1921  gdouble move, vstart, vend; 
     1922  gdouble step = (gdouble)(s->view->end - s->view->start) / ((gdouble)s->width); 
     1923  GtkAdjustment * adj = GTK_ADJUSTMENT(s->view->adj); 
     1924  gint delta; 
     1925 
     1926  delta = s->view->hand_offset - x; 
     1927 
     1928  s->hand_scroll_delta *= 0.9; 
     1929 
     1930  if (abs (delta) > abs (s->hand_scroll_delta)) 
     1931          s->hand_scroll_delta = delta; 
     1932   
     1933  if (s->view->hand_offset != x){ 
     1934    move = s->view->hand_offset - x; 
     1935    move *= step; 
     1936 
     1937    vstart = s->view->start + move; 
     1938    vend = s->view->end + move; 
     1939 
     1940    if (vstart < 0){ 
     1941        vstart = 0; 
     1942        vend = adj->page_size; 
     1943    } 
     1944    if (vend > s->view->sample->sounddata->nr_frames){ 
     1945        vstart = s->view->sample->sounddata->nr_frames - adj->page_size;  
     1946        vend = s->view->sample->sounddata->nr_frames; 
     1947    } 
     1948     
     1949        vstart = ceil(vstart + (move < 0 ? 0.5 : -0.5)); 
     1950    vend = ceil(vend + (move < 0 ? 0.5 : -0.5)); 
     1951 
     1952    if (s->view->start != vstart && s->view->end != vend) 
     1953            s->view->hand_offset = x; 
     1954 
     1955    s->view->start = vstart; 
     1956    s->view->end = vend; 
     1957 
     1958    view_refresh_display(s->view); 
     1959 
     1960    gtk_adjustment_set_value( GTK_ADJUSTMENT(s->view->adj), vstart); 
     1961  } 
     1962} 
     1963 
     1964static void 
    18801965sample_display_handle_noise_motion (SampleDisplay * s, int x, int y) 
    18811966{ 
     
    20952180    gdk_window_get_pointer (event->window, &x, &y, &state); 
    20962181    sample_display_handle_playmarker_motion (s, x, y); 
    2097   } else if(s->selecting && event->button != last_button) { 
     2182  } else  
     2183  if(s->selecting && event->button != last_button) { 
    20982184    /* Cancel the current operation if a different button is pressed. */ 
    20992185    sample_display_clear_sel (s); 
    2100   } else if (last_tmp_view && last_tmp_view != s->view && 
    2101             event->button != last_button) { 
     2186  } else  
     2187  if (last_tmp_view && last_tmp_view != s->view && event->button != last_button) { 
    21022188    view_clear_last_tmp_view (); 
    21032189  } else { 
     
    21592245#endif 
    21602246        break; 
     2247      case TOOL_HAND: 
     2248            s->selecting = SELECTING_HAND; 
     2249            s->view->hand_offset = x; 
     2250            s->hand_scroll_delta = 0; 
     2251            if (s->hand_scroll_tag){ 
     2252                   g_source_remove (s->hand_scroll_tag); 
     2253                   s->hand_scroll_tag = 0; 
     2254            } 
     2255            SET_CURSOR(widget, HAND_CLOSE); 
     2256            sample_display_handle_hand_motion (s, x, y); 
     2257        break; 
    21612258      case TOOL_ZOOM: 
    2162         o = XPOS_TO_OFFSET(x); 
    2163         view_center_on (s->view, o); 
    2164         if (state & GDK_SHIFT_MASK) { 
    2165           view_zoom_out (s->view, 2.0); 
    2166         } else { 
    2167           view_zoom_in (s->view, 2.0); 
    2168        
     2259            o = XPOS_TO_OFFSET(x); 
     2260            view_center_on (s->view, o); 
     2261            if (state & GDK_SHIFT_MASK) { 
     2262              view_zoom_out (s->view, 2.0); 
     2263            } else { 
     2264              view_zoom_in (s->view, 2.0); 
     2265           
    21692266        break; 
    21702267      case TOOL_PENCIL: 
     
    22952392    if (s->meta_down) return TRUE; 
    22962393    break; 
     2394  case TOOL_HAND: 
     2395    s->view->hand_offset = -1; 
     2396 
     2397    s->hand_scroll_tag = g_timeout_add (HAND_SCROLL_INTERVAL, 
     2398                    (GSourceFunc)sample_display_hand_scroll, 
     2399                    s); 
     2400 
     2401    break; 
    22972402  case TOOL_MOVE: 
    22982403    break; 
     
    23512456        sample_display_handle_playmarker_motion (s, x, y); 
    23522457        break; 
     2458      case SELECTING_HAND: 
     2459            sample_display_handle_hand_motion (s, x, y); 
     2460            break; 
    23532461      case SELECTING_PENCIL: 
    23542462        sample_display_handle_pencil_motion (s, x, y); 
     
    28672975  s->pulsing_tag = 0; 
    28682976  s->pulse = FALSE; 
     2977  s->hand_scroll_tag = 0; 
    28692978  s->mouse_x = 0; 
    28702979  s->mouse_offset = 0; 
  • sweep/branches/sweep-jack-testing/src/sample-display.h

    r241 r505  
    9090  gboolean pulse; 
    9191 
     92  gint hand_scroll_tag;   /* gtk_timeout tag for natural hand scrolling */ 
     93  gint hand_scroll_delta; /* natural hand scrolling */ 
     94 
    9295  /* Window panning */ 
    9396  int selecting_x0;  /* the coordinate where the mouse was clicked */ 
  • sweep/branches/sweep-jack-testing/src/samplerate.c

    r236 r505  
    296296} 
    297297 
     298static gboolean samplerate_dialog_delete_event_cb( GtkWidget *widget, 
     299                              GdkEvent  *event, 
     300                              gpointer   data ) 
     301{ 
     302    samplerate_dialog_cancel_cb(widget, data); 
     303    return FALSE;  
     304} 
     305 
    298306static void 
    299307src_update_ok_button (GtkWidget * widget) 
     
    437445  gtk_window_set_title (GTK_WINDOW(dialog), _("Sweep: Resample")); 
    438446  gtk_window_set_position (GTK_WINDOW (dialog), GTK_WIN_POS_MOUSE); 
     447   
     448  g_signal_connect (G_OBJECT (dialog), "delete_event", G_CALLBACK (samplerate_dialog_delete_event_cb), sample); 
    439449 
    440450  main_vbox = GTK_DIALOG(dialog)->vbox; 
  • sweep/branches/sweep-jack-testing/src/sweep_app.h

    r124 r505  
    4545  TOOL_PENCIL, 
    4646  TOOL_NOISE, 
     47  TOOL_HAND 
    4748} sw_tool_t; 
    4849 
     
    8687 
    8788  gboolean following; /* whether or not to follow playmarker */ 
     89 
     90  gint hand_offset; 
    8891 
    8992  GtkWidget * window; 
  • sweep/branches/sweep-jack-testing/src/sweep_selection.c

    r124 r505  
    5050 
    5151  return sel; 
     52} 
     53 
     54void 
     55sel_free (sw_sel * sel) 
     56{ 
     57  if (!sel) 
     58        return; 
     59 
     60  g_free(sel); 
    5261} 
    5362 
  • sweep/branches/sweep-jack-testing/src/sweep_sounddata.c

    r124 r505  
    9292  s->sels = NULL; 
    9393  s->sels_mutex = g_mutex_new(); 
     94  s->data_mutex = g_mutex_new(); 
    9495 
    9596  return s; 
     
    99100sounddata_clear_selection (sw_sounddata * sounddata) 
    100101{ 
     102  GList * gl; 
     103  sw_sel * sel; 
     104 
     105  for (gl = sounddata->sels; gl; gl = gl->next){ 
     106          sel = (sw_sel*)gl->data; 
     107          sel_free(sel); 
     108  } 
     109 
    101110  g_list_free(sounddata->sels); 
    102111 
     
    120129    sounddata_clear_selection (sounddata); 
    121130    g_free (sounddata); 
     131    g_mutex_free(sounddata->data_mutex); 
    122132  } 
    123133} 
     
    243253 
    244254  /* Clear the old selection */ 
    245   g_list_free (sounddata->sels); 
     255  sounddata_clear_selection (sounddata); 
    246256 
    247257  /* Set the newly created (normalised) selection */ 
  • sweep/branches/sweep-jack-testing/src/tdb/tdb.h

    r196 r505  
    150150int tdb_chainunlock(TDB_CONTEXT *tdb, TDB_DATA key); 
    151151 
     152int tdb_chainlock_read(TDB_CONTEXT *tdb, TDB_DATA key); 
     153int tdb_chainunlock_read(TDB_CONTEXT *tdb, TDB_DATA key); 
     154 
    152155/* Debug functions. Not used in production. */ 
    153156void tdb_dump_all(TDB_CONTEXT *tdb); 
  • sweep/branches/sweep-jack-testing/src/time_ruler.c

    r278 r505  
    179179  gint ythickness; 
    180180  gint length, ideal_length; 
    181   gfloat lower, upper;                /* Upper and lower limits, in ruler units */ 
    182   gfloat increment, abs_increment; /* Number of pixels per unit */ 
     181  gdouble lower, upper;               /* Upper and lower limits, in ruler units */ 
     182  gdouble increment, abs_increment; /* Number of pixels per unit */ 
    183183  gint scale;                   /* Number of units per major unit */ 
    184   gfloat subd_incr; 
    185   gfloat start, end, cur; 
     184  gdouble subd_incr; 
     185  gdouble start, end, cur; 
    186186#define UNIT_STR_LEN 32 
    187187  gchar unit_str[UNIT_STR_LEN]; 
     
    236236    return; 
    237237 
    238   increment = (gfloat) width / (upper - lower); 
    239   abs_increment = (gfloat) fabs((double)increment); 
     238  increment = (gdouble) width / (upper - lower); 
     239  abs_increment = (gdouble) fabs((double)increment); 
    240240 
    241241  /* determine the scale 
     
    247247  snprint_time (unit_str, UNIT_STR_LEN, (sw_time_t)scale); 
    248248  /*  snprint_time_smpte (unit_str, UNIT_STR_LEN, (sw_time_t)scale, 10.0);*/ 
    249   /*  text_width = strlen (unit_str) * digit_height + 1;*/ 
    250   text_width = PANGO_PIXELS (ink_rect.width) + 2; 
     249 
     250 text_width = strlen (unit_str) * digit_height + 1; 
     251 
    251252  for (scale = 0; scale < MAXIMUM_SCALES; scale++) 
    252253    if (ruler_scale[scale] * abs_increment > 2 * text_width) 
     
    260261  for (i = MAXIMUM_SUBDIVIDE - 1; i >= 0; i--) 
    261262    { 
    262       subd_incr = (gfloat) ruler_scale[scale] /  
    263                   (gfloat) subdivide[i]; 
     263      subd_incr = (gdouble) ruler_scale[scale] /  
     264                  (gdouble) subdivide[i]; 
    264265      if (subd_incr * fabs(increment) <= MINIMUM_INCR)  
    265266        continue; 
     
    292293                         pos, height - length + ythickness); 
    293294 
    294           /* draw label */ 
     295          /* draw label */  
    295296          if (i == 0) 
    296297            { 
  • sweep/branches/sweep-jack-testing/src/view.c

    r285 r505  
    3939#include <sweep/sweep_typeconvert.h> 
    4040#include <sweep/sweep_sample.h> 
     41#include <sweep/sweep_undo.h> 
    4142 
    4243#include "view.h" 
     
    6566#define USER_GTKRC 
    6667 
    67 /*#define SCROLL_SMOOTHLY*/ 
     68/* #define SCROLL_SMOOTHLY */ 
    6869 
    6970/* Default initial dimensions. 
     
    103104#endif 
    104105 
     106static GtkWidget * create_view_menu_item(GtkWidget * menu, gchar * label, gchar * accel_path,  
     107                                                  sw_view *view,gpointer callback, gboolean nomodify, 
     108                                                                                                  guint accel_key, GdkModifierType accel_mods, gpointer user_data); 
     109 
    105110void 
    106111view_set_vzoom (sw_view * view, sw_audio_t low, sw_audio_t high); 
     
    176181                     G_CALLBACK(apply_procedure_cb), pi); 
    177182  gtk_widget_show(menuitem); 
    178  
    179   if (accel_group && proc->accel_key) { 
    180     gtk_widget_add_accelerator (menuitem, "activate", accel_group, 
     183/* these accels are not editable */ 
     184 /*   gtk_widget_add_accelerator (menuitem, "activate", accel_group, 
    181185                                proc->accel_key, proc->accel_mods, 
    182                                 GTK_ACCEL_VISIBLE); 
    183   } 
    184  
     186                                GTK_ACCEL_VISIBLE); */ 
    185187} 
    186188 
     
    270272  GList * gl; 
    271273  int old_channels, channels; 
     274  GtkAccelGroup *accel_group; 
    272275 
    273276  channels = view->sample->sounddata->format->channels; 
     
    297300  /* Create the new channelops submenu */ 
    298301  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 
    299305   
    300306  g_object_set_data (G_OBJECT(submenu), "default", GINT_TO_POINTER(channels)); 
    301307                             
    302308  if (channels == 1) { 
    303     menuitem = gtk_menu_item_new_with_label(_("Duplicate to stereo")); 
    304     gtk_menu_append(GTK_MENU(submenu), menuitem); 
    305     g_signal_connect (G_OBJECT(menuitem), "activate", 
    306                        G_CALLBACK(dup_stereo_cb), view); 
    307     gtk_widget_show(menuitem); 
    308      
    309     NOMODIFY(menuitem); 
     309        menuitem = create_view_menu_item (submenu, _("Duplicate to stereo"),  
     310                                       "<Sweep-View>/Sample/Channels/Duplicate to stereo", 
     311                                           view, 
     312                                       dup_stereo_cb, TRUE, 
     313                                       0, 0, view);  
     314      view->channelops_widgets = 
     315      g_list_append (view->channelops_widgets, menuitem); 
     316 
     317    menuitem = create_view_menu_item (submenu, _("Duplicate to multichannel"), 
     318                                       "<Sweep-View>/Channels/Duplicate to multichannel", 
     319                                           view, 
     320                                       dup_channels_dialog_new_cb, TRUE, 
     321                                       0, 0, view);   
    310322    view->channelops_widgets = 
    311323      g_list_append (view->channelops_widgets, menuitem); 
    312  
    313     menuitem = gtk_menu_item_new_with_label(_("Duplicate to multichannel")); 
    314     gtk_menu_append(GTK_MENU(submenu), menuitem); 
    315     g_signal_connect (G_OBJECT(menuitem), "activate", 
    316                        G_CALLBACK(dup_channels_dialog_new_cb), view); 
    317     gtk_widget_show(menuitem); 
    318      
    319     NOMODIFY(menuitem); 
     324           
     325  } 
     326 
     327  if (channels == 2) { 
     328           
     329        menuitem = create_view_menu_item (submenu, _("Swap left and right"),  
     330                                       "<Sweep-View>/Sample/Channels/Swap left and right", 
     331                                           view, 
     332                                       stereo_swap_cb, TRUE, 
     333                                       0, 0, view);  
    320334    view->channelops_widgets = 
    321335      g_list_append (view->channelops_widgets, menuitem); 
    322   } 
    323  
    324   if (channels == 2) { 
    325     menuitem = gtk_menu_item_new_with_label(_("Swap left and right")); 
    326     gtk_menu_append(GTK_MENU(submenu), menuitem); 
    327     g_signal_connect (G_OBJECT(menuitem), "activate", 
    328                        G_CALLBACK(stereo_swap_cb), view); 
    329     gtk_widget_show(menuitem); 
    330      
    331     NOMODIFY(menuitem); 
     336 
     337           
     338        menuitem = create_view_menu_item (submenu, _("Remove left channel"),  
     339                                       "<Sweep-View>/Sample/Channels/Remove left channel", 
     340                                           view, 
     341                                       remove_left_cb, TRUE, 
     342                                       0, 0, view); 
    332343    view->channelops_widgets = 
    333344      g_list_append (view->channelops_widgets, menuitem); 
    334345 
    335     menuitem = gtk_menu_item_new_with_label(_("Remove left channel")); 
    336     gtk_menu_append(GTK_MENU(submenu), menuitem); 
    337     g_signal_connect (G_OBJECT(menuitem), "activate", 
    338                        G_CALLBACK(remove_left_cb), view); 
    339     gtk_widget_show(menuitem); 
    340      
    341     NOMODIFY(menuitem); 
     346           
     347        menuitem = create_view_menu_item (submenu, _("Remove right channel"), 
     348                                       "<Sweep-View>/Sample/Channels/Remove right channel", 
     349                                           view, 
     350                                       remove_right_cb, TRUE, 
     351                                       0, 0, view);        
    342352    view->channelops_widgets = 
    343353      g_list_append (view->channelops_widgets, menuitem); 
    344354 
    345     menuitem = gtk_menu_item_new_with_label(_("Remove right channel")); 
    346     gtk_menu_append(GTK_MENU(submenu), menuitem); 
    347     g_signal_connect (G_OBJECT(menuitem), "activate", 
    348                        G_CALLBACK(remove_right_cb), view); 
    349     gtk_widget_show(menuitem); 
    350      
    351     NOMODIFY(menuitem); 
     355  } 
     356 
     357  if (channels > 1) { 
     358           
     359        menuitem = create_view_menu_item (submenu, _("Mix down to mono"), 
     360                                       "<Sweep-View>/Sample/Channels/Mix down to mono", 
     361                                           view, 
     362                                       mono_mixdown_cb, TRUE, 
     363                                       0, 0, view);                
    352364    view->channelops_widgets = 
    353365      g_list_append (view->channelops_widgets, menuitem); 
    354  
    355   } 
    356  
    357   if (channels > 1) { 
    358     menuitem = gtk_menu_item_new_with_label(_("Mix down to mono")); 
    359     gtk_menu_append(GTK_MENU(submenu), menuitem); 
    360     g_signal_connect (G_OBJECT(menuitem), "activate", 
    361                        G_CALLBACK(mono_mixdown_cb), view); 
    362     gtk_widget_show(menuitem); 
    363      
    364     NOMODIFY(menuitem); 
    365     view->channelops_widgets = 
    366       g_list_append (view->channelops_widgets, menuitem); 
    367   } 
    368  
    369   menuitem = gtk_menu_item_new_with_label(_("Add/Remove channels")); 
    370   gtk_menu_append(GTK_MENU(submenu), menuitem); 
    371   g_signal_connect (G_OBJECT(menuitem), "activate", 
    372                      G_CALLBACK(channels_dialog_new_cb), view); 
    373   gtk_widget_show(menuitem); 
    374    
    375   NOMODIFY(menuitem); 
     366  } 
     367 
     368         
     369  menuitem = create_view_menu_item (submenu, _("Add/Remove channels"),  
     370                                       "<Sweep-View>/Sample/Channels/Add/Remove channels", 
     371                                       view, 
     372                                       channels_dialog_new_cb, TRUE, 
     373                                       0, 0, view);      
     374 
    376375  view->channelops_widgets = 
    377376    g_list_append (view->channelops_widgets, menuitem); 
     
    386385} 
    387386 
     387/* 
     388 * Convenience function to Create and setup individual menuitems 
     389 */ 
     390 
     391static GtkWidget * create_view_menu_item(GtkWidget * menu, gchar * label, gchar * accel_path,  
     392                                                  sw_view *view,gpointer callback, gboolean nomodify, 
     393                                                                                                  guint accel_key, GdkModifierType accel_mods, gpointer user_data) 
     394{ 
     395        GtkWidget * menuitem; 
     396         
     397        menuitem = gtk_menu_item_new_with_label(label); 
     398        /* register accel path enabling runtime changes by the user */ 
     399        gtk_menu_item_set_accel_path (GTK_MENU_ITEM(menuitem), accel_path); 
     400        gtk_menu_append(GTK_MENU(menu), menuitem); 
     401         g_signal_connect (G_OBJECT(menuitem), "activate", 
     402                     G_CALLBACK(callback), user_data); 
     403         
     404    /* register default key binding (if one is supplied */ 
     405        if (accel_key) 
     406                 gtk_accel_map_add_entry  (accel_path, accel_key, accel_mods); 
     407 
     408        if (nomodify) 
     409          NOMODIFY(menuitem); 
     410         
     411        gtk_widget_show(menuitem); 
     412                 
     413        return menuitem;                                                           
     414} 
    388415 
    389416/* 
     
    408435  /* Create a GtkAccelGroup and add it to the window. */ 
    409436  accel_group = gtk_accel_group_new(); 
     437  g_object_set_data(G_OBJECT(view->window), "accel_group", accel_group); 
    410438#if 0 
    411439  if (GTK_IS_MENU(m)) 
     
    418446  gtk_widget_show(menuitem); 
    419447  submenu = gtk_menu_new(); 
     448  gtk_menu_set_accel_group (GTK_MENU (submenu), accel_group); 
     449 
    420450  gtk_menu_item_set_submenu(GTK_MENU_ITEM(menuitem), submenu); 
    421451 
    422   menuitem = gtk_menu_item_new_with_label(_("New ...")); 
    423   gtk_menu_append(GTK_MENU(submenu), menuitem); 
    424   g_signal_connect (G_OBJECT(menuitem), "activate", 
    425                      G_CALLBACK(sample_new_empty_cb), view); 
    426   gtk_widget_show(menuitem); 
    427   gtk_widget_add_accelerator (menuitem, "activate", accel_group, 
    428                               GDK_n, GDK_CONTROL_MASK, 
    429                               GTK_ACCEL_VISIBLE); 
    430  
    431   menuitem = gtk_menu_item_new_with_label(_("Open ...")); 
    432   gtk_menu_append(GTK_MENU(submenu), menuitem); 
    433   g_signal_connect (G_OBJECT(menuitem), "activate", 
    434                      G_CALLBACK(sample_load_cb), s); 
    435   gtk_widget_show(menuitem); 
    436   gtk_widget_add_accelerator (menuitem, "activate", accel_group, 
    437                               GDK_o, GDK_CONTROL_MASK, 
    438                               GTK_ACCEL_VISIBLE); 
    439  
    440   menuitem = gtk_menu_item_new_with_label(_("Save")); 
    441   gtk_menu_append(GTK_MENU(submenu), menuitem); 
    442   g_signal_connect (G_OBJECT(menuitem), "activate", 
    443                      G_CALLBACK(sample_save_cb), view); 
    444   gtk_widget_show(menuitem); 
    445   gtk_widget_add_accelerator (menuitem, "activate", accel_group, 
    446                               GDK_s, GDK_CONTROL_MASK, 
    447                               GTK_ACCEL_VISIBLE); 
    448  
    449   NOMODIFY(menuitem); 
    450  
    451   menuitem = gtk_menu_item_new_with_label(_("Save As ...")); 
    452   gtk_menu_append(GTK_MENU(submenu), menuitem); 
    453   g_signal_connect (G_OBJECT(menuitem), "activate", 
    454                      G_CALLBACK(sample_save_as_cb), view); 
    455   gtk_widget_show(menuitem); 
    456  
    457   NOMODIFY(menuitem); 
    458  
    459   menuitem = gtk_menu_item_new_with_label(_("Revert")); 
    460   gtk_menu_append(GTK_MENU(submenu), menuitem); 
    461   g_signal_connect (G_OBJECT(menuitem), "activate", 
    462                      G_CALLBACK(sample_revert_cb), view); 
    463   gtk_widget_show(menuitem); 
    464  
    465   NOMODIFY(menuitem); 
     452  create_view_menu_item (submenu, _("New ..."), "<Sweep-View>/File/New ...", view, 
     453                                                  sample_new_empty_cb, FALSE, 
     454                                                                                                  GDK_n, GDK_CONTROL_MASK, view); 
     455    
     456  create_view_menu_item (submenu, _("Open ..."), "<Sweep-View>/File/Open ...", view, 
     457                                                  sample_load_cb, FALSE, 
     458                                                                                                  GDK_o, GDK_CONTROL_MASK, view); 
     459   
     460  create_view_menu_item (submenu, _("Save"), "<Sweep-View>/File/Save", view, 
     461                                                  sample_save_cb, TRUE, 
     462                                                                                                  GDK_s, GDK_CONTROL_MASK, view); 
     463                                                                                                   
     464  create_view_menu_item (submenu, _("Save As ..."), "<Sweep-View>/File/Save As ...", view, 
     465                                                  sample_save_as_cb, TRUE, 
     466                                                                                                  0, 0, view); 
     467 
     468  create_view_menu_item (submenu, _("Revert"), "<Sweep-View>/File/Revert", view, 
     469                                                  sample_revert_cb, TRUE, 
     470                                                                                                  0, 0, view); 
    466471 
    467472  menuitem = gtk_menu_item_new(); /* Separator */ 
     
    469474  gtk_widget_show(menuitem); 
    470475 
    471   menuitem = gtk_menu_item_new_with_label(_("Properties ...")); 
    472   gtk_menu_append(GTK_MENU(submenu), menuitem); 
    473   g_signal_connect (G_OBJECT(menuitem), "activate", 
    474                      G_CALLBACK(show_info_dialog_cb), view); 
    475   gtk_widget_show(menuitem); 
    476  
     476  create_view_menu_item (submenu, _("Properties ..."), "<Sweep-View>/File/Properties ...", view, 
     477                                                  show_info_dialog_cb, FALSE, 
     478                                                                                                  0, 0, view); 
    477479 
    478480  menuitem = gtk_menu_item_new(); /* Separator */ 
    479481  gtk_menu_append(GTK_MENU(submenu), menuitem); 
    480482  gtk_widget_show(menuitem); 
    481  
    482   menuitem = gtk_menu_item_new_with_label(_("Close")); 
    483   gtk_menu_append(GTK_MENU(submenu), menuitem); 
    484   g_signal_connect (G_OBJECT(menuitem), "activate", 
    485                      G_CALLBACK(view_close_cb), s); 
    486   gtk_widget_show(menuitem); 
    487   gtk_widget_add_accelerator (menuitem, "activate", accel_group, 
    488                               GDK_w, GDK_CONTROL_MASK, 
    489                               GTK_ACCEL_VISIBLE); 
    490  
    491   menuitem = gtk_menu_item_new_with_label(_("Quit")); 
    492   gtk_menu_append(GTK_MENU(submenu), menuitem); 
    493   g_signal_connect (G_OBJECT(menuitem), "activate", 
    494                      G_CALLBACK(exit_cb), s); 
    495   gtk_widget_show(menuitem); 
    496   gtk_widget_add_accelerator (menuitem, "activate", accel_group, 
    497                               GDK_q, GDK_CONTROL_MASK, 
    498                               GTK_ACCEL_VISIBLE); 
     483   
     484  create_view_menu_item (submenu, _("Close"), "<Sweep-View>/File/Close", view, 
     485                                                  exit_cb, FALSE, 
     486                                                                                                  GDK_q, GDK_CONTROL_MASK, s); 
     487 
     488  create_view_menu_item (submenu, _("Quit"), "<Sweep-View>/File/Quit", view, 
     489                                                  view_close_cb, FALSE, 
     490                                                                                                  GDK_w, GDK_CONTROL_MASK, s); 
     491                                                                                                   
    499492 
    500493  /* Edit */ 
     
    503496  gtk_widget_show(menuitem); 
    504497  submenu = gtk_menu_new(); 
     498  gtk_menu_set_accel_group (GTK_MENU (submenu), accel_group); 
     499  gtk_menu_item_set_accel_path (GTK_MENU_ITEM(menuitem), "<Sweep-View>/Edit"); 
    505500  gtk_menu_item_set_submenu(GTK_MENU_ITEM(menuitem), submenu); 
    506501 
    507   menuitem = gtk_menu_item_new_with_label(_("Cancel")); 
    508   gtk_menu_append(GTK_MENU(submenu), menuitem); 
    509   g_signal_connect (G_OBJECT(menuitem), "activate", 
    510                      G_CALLBACK(cancel_cb), view); 
    511   gtk_widget_show(menuitem); 
    512   gtk_widget_add_accelerator (menuitem, "activate", accel_group, 
    513                               GDK_Escape, GDK_BUTTON1_MASK, 
    514                               GTK_ACCEL_VISIBLE); 
     502  menuitem = create_view_menu_item (submenu, _("Cancel"), "<Sweep-View>/Edit/Cancel", view, 
     503                                                  cancel_cb, FALSE, 
     504                                                                                                  GDK_Escape, GDK_BUTTON1_MASK, view); 
    515505  NOREADY(menuitem); 
    516  
    517   menuitem = gtk_menu_item_new_with_label(_("Undo")); 
    518   gtk_menu_append(GTK_MENU(submenu), menuitem); 
    519   g_signal_connect (G_OBJECT(menuitem), "activate", 
    520                      G_CALLBACK(undo_cb), view); 
    521   gtk_widget_show(menuitem); 
    522   gtk_widget_add_accelerator (menuitem, "activate", accel_group, 
    523                               GDK_z, GDK_CONTROL_MASK, 
    524                               GTK_ACCEL_VISIBLE); 
    525  
    526   NOMODIFY(menuitem); 
    527  
    528   menuitem = gtk_menu_item_new_with_label(_("Redo")); 
    529   gtk_menu_append(GTK_MENU(submenu), menuitem); 
    530   g_signal_connect (G_OBJECT(menuitem), "activate", 
    531                      G_CALLBACK(redo_cb), view); 
    532   gtk_widget_show(menuitem); 
    533   gtk_widget_add_accelerator (menuitem, "activate", accel_group, 
    534                               GDK_r, GDK_CONTROL_MASK, 
    535                               GTK_ACCEL_VISIBLE); 
    536  
    537   NOMODIFY(menuitem); 
    538  
    539   menuitem = gtk_menu_item_new_with_label(_("Show history ...")); 
    540   gtk_menu_append(GTK_MENU(submenu), menuitem); 
    541   g_signal_connect (G_OBJECT(menuitem), "activate", 
    542                      G_CALLBACK(show_undo_dialog_cb), view); 
    543   gtk_widget_show(menuitem); 
     506   
     507  create_view_menu_item (submenu, _("Undo"), "<Sweep-View>/Edit/Undo", view, 
     508                                                  undo_cb, TRUE, 
     509                                                                                                  GDK_z, GDK_CONTROL_MASK, view); 
     510   
     511  create_view_menu_item (submenu, _("Redo"), "<Sweep-View>/Edit/Redo", view, 
     512                                                  redo_cb, TRUE, 
     513                                                                                                  GDK_r, GDK_CONTROL_MASK, view); 
     514   
     515  create_view_menu_item (submenu, _("Show history ..."), "<Sweep-View>/Edit/Show history ...", view, 
     516                                                  show_undo_dialog_cb, FALSE, 
     517                                                                                                  0, 0, view); 
    544518 
    545519  menuitem = gtk_menu_item_new(); /* Separator */ 
    546520  gtk_menu_append(GTK_MENU(submenu), menuitem); 
    547521  gtk_widget_show(menuitem); 
    548  
    549   menuitem = gtk_menu_item_new_with_label(_("Delete")); 
    550   gtk_menu_append(GTK_MENU(submenu), menuitem); 
    551   g_signal_connect (G_OBJECT(menuitem), "activate", 
    552                      G_CALLBACK(delete_cb), view); 
    553   gtk_widget_show(menuitem); 
    554  
    555   NOMODIFY(menuitem); 
    556  
    557   menuitem = gtk_menu_item_new_with_label(_("Cut")); 
    558   gtk_menu_append(GTK_MENU(submenu), menuitem); 
    559   g_signal_connect (G_OBJECT(menuitem), "activate", 
    560                      G_CALLBACK(cut_cb), view); 
    561   gtk_widget_show(menuitem); 
    562   gtk_widget_add_accelerator (menuitem, "activate", accel_group, 
    563                               GDK_x, GDK_CONTROL_MASK, 
    564                               GTK_ACCEL_VISIBLE); 
    565   NOMODIFY(menuitem); 
    566  
    567   menuitem = gtk_menu_item_new_with_label(_("Copy")); 
    568   gtk_menu_append(GTK_MENU(submenu), menuitem); 
    569   g_signal_connect (G_OBJECT(menuitem), "activate", 
    570                      G_CALLBACK(copy_cb), view); 
    571   gtk_widget_show(menuitem); 
    572   gtk_widget_add_accelerator (menuitem, "activate", accel_group, 
    573                               GDK_c, GDK_CONTROL_MASK, 
    574                               GTK_ACCEL_VISIBLE); 
    575   NOMODIFY(menuitem); 
    576  
    577   menuitem = gtk_menu_item_new_with_label(_("Clear")); 
    578   gtk_menu_append(GTK_MENU(submenu), menuitem); 
    579   g_signal_connect (G_OBJECT(menuitem), "activate", 
    580                      G_CALLBACK(clear_cb), view); 
    581   gtk_widget_show(menuitem); 
    582 #if 0 
    583   gtk_widget_add_accelerator (menuitem, "activate", accel_group, 
    584                               GDK_Delete, GDK_BUTTON1_MASK, 
    585                               GTK_ACCEL_VISIBLE); 
    586 #endif 
    587   NOMODIFY(menuitem); 
    588  
    589   menuitem = gtk_menu_item_new_with_label(_("Crop")); 
    590   gtk_menu_append(GTK_MENU(submenu), menuitem); 
    591   g_signal_connect (G_OBJECT(menuitem), "activate", 
    592                      G_CALLBACK(crop_cb), view); 
    593   gtk_widget_show(menuitem); 
    594 #if 0 
    595   gtk_widget_add_accelerator (menuitem, "activate", accel_group, 
    596                               GDK_Delete, GDK_BUTTON1_MASK, 
    597                               GTK_ACCEL_VISIBLE); 
    598 #endif 
    599   NOMODIFY(menuitem); 
     522   
     523  create_view_menu_item (submenu, _("Delete"), "<Sweep-View>/Edit/Delete", view, 
     524                                                  delete_cb, TRUE, 
     525                                                                                                  0, 0, view); 
     526                                                                                                   
     527  create_view_menu_item (submenu, _("Cut"), "<Sweep-View>/Edit/Cut", view, 
     528                                                  cut_cb, TRUE, 
     529                                                                                                  GDK_x, GDK_CONTROL_MASK, view);                                                                                                  
     530                                                                                                   
     531  create_view_menu_item (submenu, _("Copy"), "<Sweep-View>/Edit/Copy", view, 
     532                                                  copy_cb, TRUE, 
     533                                                                                                  GDK_c, GDK_CONTROL_MASK, view);        
     534  
     535  create_view_menu_item (submenu, _("Clear"), "<Sweep-View>/Edit/Clear", view, 
     536                                                  clear_cb, TRUE, 
     537                                                                                                  0, 0, view);   
     538 
     539  create_view_menu_item (submenu, _("Crop"), "<Sweep-View>/Edit/Crop", view, 
     540                                                  crop_cb, TRUE, 
     541                                                                                                  0, 0, view); 
    600542 
    601543  menuitem = gtk_menu_item_new(); /* Separator */ 
     
    603545  gtk_widget_show(menuitem); 
    604546 
    605   menuitem = gtk_menu_item_new_with_label(_("Paste: Insert")); 
    606   gtk_menu_append(GTK_MENU(submenu), menuitem); 
    607   g_signal_connect (G_OBJECT(menuitem), "activate", 
    608                      G_CALLBACK(paste_cb), view); 
    609   gtk_widget_show(menuitem); 
    610   gtk_widget_add_accelerator (menuitem, "activate", accel_group, 
    611                               GDK_v, GDK_CONTROL_MASK, 
    612                               GTK_ACCEL_VISIBLE); 
    613   NOMODIFY(menuitem); 
    614  
    615   menuitem = gtk_menu_item_new_with_label(_("Paste: Mix")); 
    616   gtk_menu_append(GTK_MENU(submenu), menuitem); 
    617   g_signal_connect (G_OBJECT(menuitem), "activate", 
    618                      G_CALLBACK(paste_mix_cb), view); 
    619   gtk_widget_show(menuitem); 
    620   gtk_widget_add_accelerator (menuitem, "activate", accel_group, 
    621                               GDK_m, GDK_CONTROL_MASK, 
    622                               GTK_ACCEL_VISIBLE); 
    623   NOMODIFY(menuitem); 
    624  
    625   menuitem = gtk_menu_item_new_with_label(_("Paste: Crossfade")); 
    626   gtk_menu_append(GTK_MENU(submenu), menuitem); 
    627   g_signal_connect (G_OBJECT(menuitem), "activate", 
    628                      G_CALLBACK(paste_xfade_cb), view); 
    629   gtk_widget_show(menuitem); 
    630   gtk_widget_add_accelerator (menuitem, "activate", accel_group, 
    631                               GDK_f, GDK_CONTROL_MASK, 
    632                               GTK_ACCEL_VISIBLE); 
    633   NOMODIFY(menuitem); 
    634  
    635   menuitem = gtk_menu_item_new_with_label(_("Paste as New")); 
    636   gtk_menu_append(GTK_MENU(submenu), menuitem); 
    637   g_signal_connect (G_OBJECT(menuitem), "activate", 
    638                      G_CALLBACK(paste_as_new_cb), view); 
    639   gtk_widget_show(menuitem); 
    640   gtk_widget_add_accelerator (menuitem, "activate", accel_group, 
    641                               GDK_e, GDK_CONTROL_MASK, 
    642                               GTK_ACCEL_VISIBLE); 
    643   NOMODIFY(menuitem); 
     547  create_view_menu_item (submenu, _("Paste: Insert"), "<Sweep-View>/Edit/Paste: Insert", view, 
     548                                                  paste_cb, TRUE, 
     549                                                                                                  GDK_v, GDK_CONTROL_MASK, view); 
     550 
     551  create_view_menu_item (submenu, _("Paste: Mix"), "<Sweep-View>/Edit/Paste: Mix", view, 
     552                                                  paste_mix_cb, TRUE, 
     553                                                                                                  GDK_m, GDK_CONTROL_MASK, view); 
     554                                                                                                   
     555  create_view_menu_item (submenu, _("Paste: Crossfade"), "<Sweep-View>/Edit/Paste: Crossfade", view, 
     556                                                  paste_xfade_cb, TRUE, 
     557                                                                                                  GDK_f, GDK_CONTROL_MASK, view); 
     558                                                                                                   
     559  create_view_menu_item (submenu, _("Paste as New"), "<Sweep-View>/Edit/Paste as New", view, 
     560                                                  paste_as_new_cb, TRUE, 
     561                                                                                                  GDK_e, GDK_CONTROL_MASK, view); 
    644562 
    645563  menuitem = gtk_menu_item_new(); /* Separator */ 
     
    647565  gtk_widget_show(menuitem); 
    648566 
    649   menuitem = gtk_menu_item_new_with_label(_("Preview Cut/Cursor")); 
    650   gtk_menu_append(GTK_MENU(submenu), menuitem); 
    651   g_signal_connect (G_OBJECT(menuitem), "activate", 
    652                      G_CALLBACK(preview_cut_cb), view); 
    653   gtk_widget_show(menuitem); 
    654   gtk_widget_add_accelerator (menuitem, "activate", accel_group, 
    655                               GDK_k, GDK_CONTROL_MASK, 
    656                               GTK_ACCEL_VISIBLE); 
    657  
    658   menuitem = gtk_menu_item_new_with_label(_("Pre-roll to Cursor")); 
    659   gtk_menu_append(GTK_MENU(submenu), menuitem); 
    660   g_signal_connect (G_OBJECT(menuitem), "activate", 
    661                      G_CALLBACK(preroll_cb), view); 
    662   gtk_widget_show(menuitem); 
    663   gtk_widget_add_accelerator (menuitem, "activate", accel_group, 
    664                               GDK_k, GDK_SHIFT_MASK|GDK_CONTROL_MASK, 
    665                               GTK_ACCEL_VISIBLE); 
     567  create_view_menu_item (submenu, _("Preview Cut/Cursor"), "<Sweep-View>/Edit/Preview Cut-Cursor", view, 
     568                                                  preview_cut_cb, FALSE, 
     569                                                                                                  GDK_k, GDK_CONTROL_MASK, view); 
     570 
     571  create_view_menu_item (submenu, _("Pre-roll to Cursor"), "<Sweep-View>/Edit/Pre-roll to Cursor", view, 
     572                                                  preroll_cb, FALSE, 
     573                                                                                                  GDK_k, GDK_SHIFT_MASK|GDK_CONTROL_MASK, view); 
     574 
    666575 
    667576  /* Select */ 
     
    670579  gtk_widget_show(menuitem); 
    671580  submenu = gtk_menu_new(); 
     581  gtk_menu_set_accel_group (GTK_MENU (submenu), accel_group); 
     582 
    672583  gtk_menu_item_set_submenu(GTK_MENU_ITEM(menuitem), submenu); 
    673584 
    674   menuitem = gtk_menu_item_new_with_label(_("Invert")); 
    675   gtk_menu_append(GTK_MENU(submenu), menuitem); 
    676   g_signal_connect (G_OBJECT(menuitem), "activate", 
    677                      G_CALLBACK(select_invert_cb), s); 
    678   gtk_widget_show(menuitem); 
    679   gtk_widget_add_accelerator (menuitem, "activate", accel_group, 
    680                               GDK_i, GDK_CONTROL_MASK, GTK_ACCEL_VISIBLE); 
    681   NOMODIFY(menuitem); 
    682  
    683   menuitem = gtk_menu_item_new_with_label(_("All")); 
    684   gtk_menu_append(GTK_MENU(submenu), menuitem); 
    685   g_signal_connect (G_OBJECT(menuitem), "activate", 
    686                      G_CALLBACK(select_all_cb), s); 
    687   gtk_widget_show(menuitem); 
    688   gtk_widget_add_accelerator (menuitem, "activate", accel_group, 
    689                               GDK_a, GDK_CONTROL_MASK, GTK_ACCEL_VISIBLE); 
    690   NOMODIFY(menuitem); 
    691  
    692   menuitem = gtk_menu_item_new_with_label(_("None")); 
    693   gtk_menu_append(GTK_MENU(submenu), menuitem); 
    694   g_signal_connect (G_OBJECT(menuitem), "activate", 
    695                      G_CALLBACK(select_none_cb), s); 
    696   gtk_widget_show(menuitem); 
    697   gtk_widget_add_accelerator (menuitem, "activate", accel_group, 
    698                               GDK_a, GDK_SHIFT_MASK|GDK_CONTROL_MASK, 
    699                               GTK_ACCEL_VISIBLE); 
    700   NOMODIFY(menuitem); 
     585  create_view_menu_item (submenu, _("Invert"), "<Sweep-View>/Select/Invert", view, 
     586                                                  select_invert_cb, TRUE, 
     587                                                                                                  GDK_i, GDK_CONTROL_MASK, s); 
     588 
     589  create_view_menu_item (submenu, _("All"), "<Sweep-View>/Select/All", view, 
     590                                                  select_all_cb, TRUE, 
     591                                                                                                  GDK_a, GDK_CONTROL_MASK, s); 
     592 
     593  create_view_menu_item (submenu, _("None"), "<Sweep-View>/Select/None", view, 
     594                                                  select_none_cb, TRUE, 
     595                                                                                                  GDK_a, GDK_SHIFT_MASK|GDK_CONTROL_MASK, s); 
    701596 
    702597  menuitem = gtk_menu_item_new(); /* Separator */ 
     
    704599  gtk_widget_show(menuitem); 
    705600 
    706   menuitem = gtk_menu_item_new_with_label(_("Halve")); 
    707   gtk_menu_append(GTK_MENU(submenu), menuitem); 
    708   g_signal_connect (G_OBJECT(menuitem), "activate", 
    709                      G_CALLBACK(selection_halve_cb), s); 
    710   gtk_widget_show(menuitem); 
    711   gtk_widget_add_accelerator (menuitem, "activate", accel_group, 
    712                               GDK_semicolon, GDK_BUTTON1_MASK, 
    713                               GTK_ACCEL_VISIBLE); 
    714   NOMODIFY(menuitem); 
    715  
    716   menuitem = gtk_menu_item_new_with_label(_("Double")); 
    717   gtk_menu_append(GTK_MENU(submenu), menuitem); 
    718   g_signal_connect (G_OBJECT(menuitem), "activate", 
    719                      G_CALLBACK(selection_double_cb), s); 
    720   gtk_widget_show(menuitem); 
    721   gtk_widget_add_accelerator (menuitem, "activate", accel_group, 
    722                               GDK_quoteright, GDK_BUTTON1_MASK, 
    723                               GTK_ACCEL_VISIBLE); 
    724   NOMODIFY(menuitem); 
    725  
    726   menuitem = gtk_menu_item_new_with_label(_("Shift left")); 
    727   gtk_menu_append(GTK_MENU(submenu), menuitem); 
    728   g_signal_connect (G_OBJECT(menuitem), "activate", 
    729                      G_CALLBACK(select_shift_left_cb), s); 
    730   gtk_widget_show(menuitem); 
    731   gtk_widget_add_accelerator (menuitem, "activate", accel_group, 
    732                               GDK_less, GDK_BUTTON1_MASK, 
    733                               GTK_ACCEL_VISIBLE); 
    734   NOMODIFY(menuitem); 
    735  
    736   menuitem = gtk_menu_item_new_with_label(_("Shift right")); 
    737   gtk_menu_append(GTK_MENU(submenu), menuitem); 
    738   g_signal_connect (G_OBJECT(menuitem), "activate", 
    739                      G_CALLBACK(select_shift_right_cb), s); 
    740   gtk_widget_show(menuitem); 
    741   gtk_widget_add_accelerator (menuitem, "activate", accel_group, 
    742                               GDK_greater, GDK_BUTTON1_MASK, 
    743                               GTK_ACCEL_VISIBLE); 
    744   NOMODIFY(menuitem); 
     601  create_view_menu_item (submenu, _("Halve"), "<Sweep-View>/Select/Halve", view, 
     602                                                  selection_halve_cb, TRUE, 
     603                                                                                                  GDK_semicolon, GDK_BUTTON1_MASK, s);  
     604                                                                                                   
     605  create_view_menu_item (submenu, _("Double"), "<Sweep-View>/Select/Double", view, 
     606                                                  selection_double_cb, TRUE, 
     607                                                                                                  GDK_quoteright, GDK_BUTTON1_MASK, s);  
     608                                                                                                   
     609  create_view_menu_item (submenu, _("Shift left"), "<Sweep-View>/Select/Shift left", view, 
     610                                                  select_shift_left_cb, TRUE, 
     611                                                                                                  GDK_less, GDK_BUTTON1_MASK, s);  
     612 
     613  create_view_menu_item (submenu, _("Shift right"), "<Sweep-View>/Select/Shift right", view, 
     614                                                  select_shift_right_cb, TRUE, 
     615                                                                                                  GDK_greater, GDK_BUTTON1_MASK, s);  
    745616 
    746617  /* View */ 
     
    749620  gtk_widget_show(menuitem); 
    750621  submenu = gtk_menu_new(); 
     622  gtk_menu_set_accel_group (GTK_MENU (submenu), accel_group); 
    751623  gtk_menu_item_set_submenu(GTK_MENU_ITEM(menuitem), submenu); 
    752624 
    753  
    754625  menuitem = gtk_check_menu_item_new_with_label(_("Autoscroll: follow playback cursor")); 
     626  gtk_menu_item_set_accel_path(GTK_MENU_ITEM(menuitem), "<Sweep-View>/View/Autoscroll: follow playback cursor"); 
    755627  gtk_menu_append(GTK_MENU(submenu), menuitem); 
    756628  gtk_check_menu_item_set_active (GTK_CHECK_MENU_ITEM(menuitem), 
     
    761633  view->follow_checkmenu = menuitem; 
    762634 
     635  gtk_check_menu_item_set_active (GTK_CHECK_MENU_ITEM(menuitem), 
     636                                  view->following); 
     637  view->follow_checkmenu = menuitem; 
     638 
    763639  menuitem = gtk_menu_item_new(); /* Separator */ 
    764640  gtk_menu_append(GTK_MENU(submenu), menuitem); 
    765641  gtk_widget_show(menuitem); 
    766642 
    767  
    768   menuitem = gtk_menu_item_new_with_label(_("Center")); 
    769   gtk_menu_append(GTK_MENU(submenu), menuitem); 
    770   g_signal_connect (G_OBJECT(menuitem), "activate", 
    771                     G_CALLBACK(zoom_center_cb), s); 
    772   gtk_widget_show(menuitem); 
    773   gtk_widget_add_accelerator (menuitem, "activate", accel_group, 
    774                               GDK_slash, GDK_BUTTON1_MASK, 
    775                               GTK_ACCEL_VISIBLE); 
    776  
     643  create_view_menu_item (submenu, _("Center"), "<Sweep-View>/View/Center", view, 
     644                                                  zoom_center_cb, FALSE, 
     645                                                                                                  GDK_slash, GDK_BUTTON1_MASK, s);  
     646                                                                                                   
    777647  menuitem = gtk_menu_item_new(); /* Separator */ 
    778648  gtk_menu_append(GTK_MENU(submenu), menuitem); 
    779649  gtk_widget_show(menuitem); 
    780  
    781   menuitem = gtk_menu_item_new_with_label(_("Zoom in")); 
    782   gtk_menu_append(GTK_MENU(submenu), menuitem); 
    783   g_signal_connect (G_OBJECT(menuitem), "activate", 
    784                      G_CALLBACK(zoom_in_cb), view); 
    785   gtk_widget_show(menuitem); 
    786   gtk_widget_add_accelerator (menuitem, "activate", accel_group, 
    787                               GDK_equal, GDK_BUTTON1_MASK, 
    788                               GTK_ACCEL_VISIBLE); 
    789  
    790   menuitem = gtk_menu_item_new_with_label(_("Zoom out")); 
    791   gtk_menu_append(GTK_MENU(submenu), menuitem); 
    792   g_signal_connect (G_OBJECT(menuitem), "activate", 
    793                      G_CALLBACK(zoom_out_cb), view); 
    794   gtk_widget_show(menuitem); 
    795   gtk_widget_add_accelerator (menuitem, "activate", accel_group, 
    796                               GDK_minus, GDK_BUTTON1_MASK, 
    797                               GTK_ACCEL_VISIBLE); 
    798  
    799   menuitem = gtk_menu_item_new_with_label(_("Zoom to selection")); 
    800   gtk_menu_append(GTK_MENU(submenu), menuitem); 
    801   g_signal_connect (G_OBJECT(menuitem), "activate", 
    802                      G_CALLBACK(zoom_to_sel_cb), s); 
    803   gtk_widget_show(menuitem); 
     650   
     651  create_view_menu_item (submenu, _("Zoom in"), "<Sweep-View>/View/Zoom in", view, 
     652                                                  zoom_in_cb, FALSE, 
     653                                                                                                  GDK_equal, GDK_BUTTON1_MASK, view);  
     654 
     655  create_view_menu_item (submenu, _("Zoom out"), "<Sweep-View>/View/Zoom out", view, 
     656                                                  zoom_out_cb, FALSE, 
     657                                                                                                  GDK_minus, GDK_BUTTON1_MASK, view);  
     658 
     659  create_view_menu_item (submenu, _("Zoom to selection"), "<Sweep-View>/View/Zoom to selection", view, 
     660                                                  zoom_to_sel_cb, FALSE, 
     661                                                                                                  0, 0, s);  
     662 
    804663 
    805664#if 0 
    806   menuitem = gtk_menu_item_new_with_label(_("Left")); 
    807   gtk_menu_append(GTK_MENU(submenu), menuitem); 
    808   g_signal_connect (G_OBJECT(menuitem), "activate", 
    809                      G_CALLBACK(zoom_left_cb), s); 
    810   gtk_widget_show(menuitem); 
    811   gtk_widget_add_accelerator (menuitem, "activate", accel_group, 
    812                               GDK_Left, GDK_BUTTON1_MASK, 
    813                               GTK_ACCEL_VISIBLE); 
    814  
    815   menuitem = gtk_menu_item_new_with_label(_("Right")); 
    816   gtk_menu_append(GTK_MENU(submenu), menuitem); 
    817   g_signal_connect (G_OBJECT(menuitem), "activate", 
    818                      G_CALLBACK(zoom_right_cb), s); 
    819   gtk_widget_show(menuitem); 
    820   gtk_widget_add_accelerator (menuitem, "activate", accel_group, 
    821                               GDK_Right, GDK_BUTTON1_MASK, 
    822                               GTK_ACCEL_VISIBLE); 
     665  create_view_menu_item (submenu, _("Left"), "<Sweep-View>/View/Left", view, 
     666                                                  zoom_left_cb, FALSE, 
     667                                                                                                  GDK_Left, GDK_BUTTON1_MASK, s);  
     668 
     669  create_view_menu_item (submenu, _("Right"), "<Sweep-View>/View/Right", view, 
     670                                                  zoom_right_cb, FALSE, 
     671                                                                                                  GDK_Right, GDK_BUTTON1_MASK, s);  
    823672#endif 
    824673 
    825   menuitem = gtk_menu_item_new_with_label(_("Zoom normal")); 
    826   gtk_menu_append(GTK_MENU(submenu), menuitem); 
    827   g_signal_connect (G_OBJECT(menuitem), "activate", 
    828                     G_CALLBACK(zoom_norm_cb), s); 
    829   gtk_widget_show(menuitem); 
    830  
    831   menuitem = gtk_menu_item_new_with_label(_("Zoom all")); 
    832   gtk_menu_append(GTK_MENU(submenu), menuitem); 
    833   g_signal_connect (G_OBJECT(menuitem), "activate", 
    834                      G_CALLBACK(zoom_all_cb), view); 
    835   gtk_widget_show(menuitem); 
    836   gtk_widget_add_accelerator (menuitem, "activate", accel_group, 
    837                               GDK_1, GDK_CONTROL_MASK, 
    838                               GTK_ACCEL_VISIBLE); 
    839  
    840   menuitem = gtk_menu_item_new_with_label(_("1:1")); 
    841   gtk_menu_append(GTK_MENU(submenu), menuitem); 
    842   g_signal_connect (G_OBJECT(menuitem), "activate", 
    843                     G_CALLBACK(zoom_1to1_cb), s); 
    844   gtk_widget_show(menuitem); 
    845  
     674  create_view_menu_item (submenu, _("Zoom normal"), "<Sweep-View>/View/Zoom normal", view, 
     675                                                  zoom_norm_cb, FALSE, 
     676                                                                                                  0, 0, s);  
     677                                                                                                   
     678  create_view_menu_item (submenu, _("Zoom all"), "<Sweep-View>/View/Zoom all", view, 
     679                                                  zoom_all_cb, FALSE, 
     680                                                                                                  GDK_1, GDK_CONTROL_MASK, view);  
     681                                                                                                   
     682  create_view_menu_item (submenu, _("1:1"), "<Sweep-View>/View/1:1", view, 
     683                                                  zoom_1to1_cb, FALSE, 
     684                                                                                                  0, 0, s); 
    846685 
    847686  menuitem = gtk_menu_item_new(); /* Separator */ 
     
    855694  gtk_widget_show(menuitem); 
    856695  subsubmenu = gtk_menu_new(); 
     696  gtk_menu_set_accel_group (GTK_MENU (subsubmenu), accel_group); 
    857697  gtk_menu_item_set_submenu(GTK_MENU_ITEM(menuitem), subsubmenu); 
    858698 
    859 #define REMEMBER_AS(title,index) \ 
     699 
     700#define REMEMBER_AS(title,index,accel_path) \ 
    860701  menuitem = gtk_menu_item_new_with_label ((title));                         \ 
    861702  g_object_set_data (G_OBJECT(menuitem), "default", GINT_TO_POINTER((index))); \ 
     
    864705  g_signal_connect (G_OBJECT(menuitem), "activate",                       \ 
    865706                     G_CALLBACK(view_store_cb), view);                  \ 
    866   gtk_widget_add_accelerator (menuitem, "activate", accel_group,           
    867                              GDK_KP_##index, GDK_CONTROL_MASK,              \ 
    868                               GTK_ACCEL_VISIBLE); 
    869  
    870   REMEMBER_AS(_("Area 1"), 1); 
    871   REMEMBER_AS(_("Area 2"), 2); 
    872   REMEMBER_AS(_("Area 3"), 3); 
    873   REMEMBER_AS(_("Area 4"), 4); 
    874   REMEMBER_AS(_("Area 5"), 5); 
    875   REMEMBER_AS(_("Area 6"), 6); 
    876   REMEMBER_AS(_("Area 7"), 7); 
    877   REMEMBER_AS(_("Area 8"), 8); 
    878   REMEMBER_AS(_("Area 9"), 9); 
    879   REMEMBER_AS(_("Area 10"), 0); 
     707  gtk_menu_item_set_accel_path (GTK_MENU_ITEM(menuitem), accel_path);
     708  gtk_accel_map_add_entry  (accel_path,             \ 
     709                              GDK_KP_##index, GDK_CONTROL_MASK);  
     710 
     711  REMEMBER_AS(_("Area 1"), 1, "<Sweep-View>/View/Remember As/Area 1"); 
     712  REMEMBER_AS(_("Area 2"), 2, "<Sweep-View>/View/Remember As/Area 2"); 
     713  REMEMBER_AS(_("Area 3"), 3, "<Sweep-View>/View/Remember As/Area 3"); 
     714  REMEMBER_AS(_("Area 4"), 4, "<Sweep-View>/View/Remember As/Area 4"); 
     715  REMEMBER_AS(_("Area 5"), 5, "<Sweep-View>/View/Remember As/Area 5"); 
     716  REMEMBER_AS(_("Area 6"), 6, "<Sweep-View>/View/Remember As/Area 6"); 
     717  REMEMBER_AS(_("Area 7"), 7, "<Sweep-View>/View/Remember As/Area 7"); 
     718  REMEMBER_AS(_("Area 8"), 8, "<Sweep-View>/View/Remember As/Area 8"); 
     719  REMEMBER_AS(_("Area 9"), 9, "<Sweep-View>/View/Remember As/Area 9"); 
     720  REMEMBER_AS(_("Area 10"), 0, "<Sweep-View>/View/Remember As/Area 10"); 
    880721 
    881722  /* Retrieve view */ 
     
    885726  gtk_widget_show(menuitem); 
    886727  subsubmenu = gtk_menu_new(); 
     728  gtk_menu_set_accel_group (GTK_MENU (subsubmenu), accel_group); 
    887729  gtk_menu_item_set_submenu(GTK_MENU_ITEM(menuitem), subsubmenu); 
    888730 
    889 #define ZOOM_TO(title,index) \ 
     731#define ZOOM_TO(title,index,accel_path) \ 
    890732  menuitem = gtk_menu_item_new_with_label ((title));                         \ 
    891733  g_object_set_data (G_OBJECT(menuitem), "default", GINT_TO_POINTER((index))); \ 
     
    894736  g_signal_connect (G_OBJECT(menuitem), "activate",                       \ 
    895737                     G_CALLBACK(view_retrieve_cb), view);               \ 
    896   gtk_widget_add_accelerator (menuitem, "activate", accel_group,           
    897                              GDK_KP_##index, GDK_BUTTON1_MASK,                      \ 
    898                               GTK_ACCEL_VISIBLE); 
    899  
    900   ZOOM_TO(_("Area 1"), 1); 
    901   ZOOM_TO(_("Area 2"), 2); 
    902   ZOOM_TO(_("Area 3"), 3); 
    903   ZOOM_TO(_("Area 4"), 4); 
    904   ZOOM_TO(_("Area 5"), 5); 
    905   ZOOM_TO(_("Area 6"), 6); 
    906   ZOOM_TO(_("Area 7"), 7); 
    907   ZOOM_TO(_("Area 8"), 8); 
    908   ZOOM_TO(_("Area 9"), 9); 
    909   ZOOM_TO(_("Area 10"), 0); 
     738  gtk_menu_item_set_accel_path (GTK_MENU_ITEM(menuitem), accel_path);
     739  gtk_accel_map_add_entry  (accel_path,             \ 
     740                              GDK_KP_##index, GDK_BUTTON1_MASK); 
     741 
     742  ZOOM_TO(_("Area 1"), 1, "<Sweep-View>/View/Zoom To/Area 1"); 
     743  ZOOM_TO(_("Area 2"), 2, "<Sweep-View>/View/Zoom To/Area 2"); 
     744  ZOOM_TO(_("Area 3"), 3, "<Sweep-View>/View/Zoom To/Area 3"); 
     745  ZOOM_TO(_("Area 4"), 4, "<Sweep-View>/View/Zoom To/Area 4"); 
     746  ZOOM_TO(_("Area 5"), 5, "<Sweep-View>/View/Zoom To/Area 5"); 
     747  ZOOM_TO(_("Area 6"), 6, "<Sweep-View>/View/Zoom To/Area 6"); 
     748  ZOOM_TO(_("Area 7"), 7, "<Sweep-View>/View/Zoom To/Area 7"); 
     749  ZOOM_TO(_("Area 8"), 8, "<Sweep-View>/View/Zoom To/Area 8"); 
     750  ZOOM_TO(_("Area 9"), 9, "<Sweep-View>/View/Zoom To/Area 9"); 
     751  ZOOM_TO(_("Area 10"), 0, "<Sweep-View>/View/Zoom To/Area 10"); 
    910752 
    911753  menuitem = gtk_menu_item_new(); /* Separator */ 
    912754  gtk_menu_append(GTK_MENU(submenu), menuitem); 
    913755  gtk_widget_show(menuitem); 
    914  
     756                                                                                           
    915757  menuitem = gtk_menu_item_new_with_label(_("Color scheme")); 
    916758  gtk_menu_append(GTK_MENU(submenu), menuitem); 
     
    986828  gtk_menu_append(GTK_MENU(submenu), menuitem); 
    987829  gtk_widget_show(menuitem); 
    988  
    989   menuitem = gtk_menu_item_new_with_label(_("New View")); 
    990   gtk_menu_append(GTK_MENU(submenu), menuitem); 
    991   g_signal_connect (G_OBJECT(menuitem), "activate", 
    992                      G_CALLBACK(view_new_cb), s); 
    993   gtk_widget_show(menuitem); 
     830   
     831  create_view_menu_item (submenu, _("New View"), "<Sweep-View>/View/New View", view, 
     832                                                  view_new_cb, FALSE, 
     833                                                                                                  0, 0, s); 
    994834 
    995835  /* Sample */ 
     
    998838  gtk_widget_show(menuitem); 
    999839  submenu = gtk_menu_new(); 
     840  gtk_menu_set_accel_group (GTK_MENU (submenu), accel_group); 
    1000841  gtk_menu_item_set_submenu(GTK_MENU_ITEM(menuitem), submenu); 
    1001842 
     
    1009850 
    1010851#ifdef HAVE_LIBSAMPLERATE 
    1011   menuitem = gtk_menu_item_new_with_label(_("Resample ...")); 
    1012   gtk_menu_append(GTK_MENU(submenu), menuitem); 
    1013   g_signal_connect (G_OBJECT(menuitem), "activate", 
    1014                      G_CALLBACK(samplerate_dialog_new_cb), view); 
    1015   gtk_widget_show(menuitem); 
    1016  
    1017   NOMODIFY(menuitem); 
     852   
     853  create_view_menu_item (submenu, _("Resample ..."), "<Sweep-View>/Sample/Resample ...", view, 
     854                                                  samplerate_dialog_new_cb, TRUE, 
     855                                                                                                  0, 0, view); 
    1018856#endif 
    1019857 
     
    1021859  gtk_menu_append(GTK_MENU(submenu), menuitem); 
    1022860  gtk_widget_show(menuitem); 
    1023  
    1024   menuitem = gtk_menu_item_new_with_label(_("Duplicate")); 
    1025   gtk_menu_append(GTK_MENU(submenu), menuitem); 
    1026   g_signal_connect (G_OBJECT(menuitem), "activate", 
    1027                      G_CALLBACK(sample_new_copy_cb), s); 
    1028   gtk_widget_show(menuitem); 
    1029   gtk_widget_add_accelerator (menuitem, "activate", accel_group, 
    1030                               GDK_d, GDK_CONTROL_MASK, 
    1031                               GTK_ACCEL_VISIBLE); 
    1032   NOMODIFY(menuitem); 
     861   
     862  create_view_menu_item (submenu, _("Duplicate"), "<Sweep-View>/Sample/Duplicate", view, 
     863                                                  sample_new_copy_cb, TRUE, 
     864                                                                                                  GDK_d, GDK_CONTROL_MASK, s); 
    1033865 
    1034866  /* Filters */ 
     
    1046878  gtk_widget_show(menuitem); 
    1047879  submenu = gtk_menu_new(); 
     880  gtk_menu_set_accel_group (GTK_MENU (submenu), accel_group); 
    1048881  gtk_menu_item_set_submenu(GTK_MENU_ITEM(menuitem), submenu); 
    1049882 
    1050   menuitem = gtk_menu_item_new_with_label(_("Configure audio device ...")); 
    1051   gtk_menu_append(GTK_MENU(submenu), menuitem); 
    1052   g_signal_connect (G_OBJECT(menuitem), "activate"
    1053                      G_CALLBACK(device_config_cb), view); 
    1054   gtk_widget_show(menuitem); 
     883  create_view_menu_item (submenu, _("Configure audio device ..."), 
     884                                   "<Sweep-View>/Playback/Configure audio device ...", 
     885                                                                  view
     886                                   device_config_cb, FALSE, 
     887                                   0, 0, view); 
    1055888 
    1056889  menuitem = gtk_menu_item_new(); /* Separator */ 
     
    1062895  gtk_widget_show(menuitem); 
    1063896  subsubmenu = gtk_menu_new(); 
     897  gtk_menu_set_accel_group (GTK_MENU (subsubmenu), accel_group); 
    1064898  gtk_menu_item_set_submenu(GTK_MENU_ITEM(menuitem), subsubmenu); 
    1065899 
    1066900  NOALLOC(menuitem); 
    1067901 
    1068   menuitem = gtk_menu_item_new_with_label(_("Go to start of file")); 
    1069   gtk_menu_append(GTK_MENU(subsubmenu), menuitem); 
    1070   g_signal_connect (G_OBJECT(menuitem), "activate", 
    1071                      G_CALLBACK(goto_start_cb), view); 
    1072   gtk_widget_show(menuitem); 
    1073   gtk_widget_add_accelerator (menuitem, "activate", accel_group, 
    1074                               GDK_Home, GDK_CONTROL_MASK, 
    1075                               GTK_ACCEL_VISIBLE); 
    1076  
    1077   menuitem = gtk_menu_item_new_with_label(_("Go to start of window")); 
    1078   gtk_menu_append(GTK_MENU(subsubmenu), menuitem); 
    1079   g_signal_connect (G_OBJECT(menuitem), "activate", 
    1080                      G_CALLBACK(goto_start_of_view_cb), view); 
    1081   gtk_widget_show(menuitem); 
    1082   gtk_widget_add_accelerator (menuitem, "activate", accel_group, 
    1083                               GDK_Home, GDK_BUTTON1_MASK, 
    1084                               GTK_ACCEL_VISIBLE); 
    1085  
    1086  
    1087   menuitem = gtk_menu_item_new_with_label(_("Skip back")); 
    1088   gtk_menu_append(GTK_MENU(subsubmenu), menuitem); 
    1089   g_signal_connect (G_OBJECT(menuitem), "activate", 
    1090                      G_CALLBACK(page_back_cb), view); 
    1091   gtk_widget_show(menuitem); 
    1092   gtk_widget_add_accelerator (menuitem, "activate", accel_group, 
    1093                               GDK_Page_Up, GDK_BUTTON1_MASK, 
    1094                               GTK_ACCEL_VISIBLE); 
    1095  
    1096  
    1097   menuitem = gtk_menu_item_new_with_label(_("Skip forward")); 
    1098   gtk_menu_append(GTK_MENU(subsubmenu), menuitem); 
    1099   g_signal_connect (G_OBJECT(menuitem), "activate", 
    1100                      G_CALLBACK(page_fwd_cb), view); 
    1101   gtk_widget_show(menuitem); 
    1102   gtk_widget_add_accelerator (menuitem, "activate", accel_group, 
    1103                               GDK_Page_Down, GDK_BUTTON1_MASK, 
    1104                               GTK_ACCEL_VISIBLE); 
    1105  
    1106   menuitem = gtk_menu_item_new_with_label(_("Go to end of window")); 
    1107   gtk_menu_append(GTK_MENU(subsubmenu), menuitem); 
    1108   g_signal_connect (G_OBJECT(menuitem), "activate", 
    1109                      G_CALLBACK(goto_end_of_view_cb), view); 
    1110   gtk_widget_show(menuitem); 
    1111   gtk_widget_add_accelerator (menuitem, "activate", accel_group, 
    1112                               GDK_End, GDK_BUTTON1_MASK, 
    1113                               GTK_ACCEL_VISIBLE); 
    1114  
    1115   menuitem = gtk_menu_item_new_with_label(_("Go to end of file")); 
    1116   gtk_menu_append(GTK_MENU(subsubmenu), menuitem); 
    1117   g_signal_connect (G_OBJECT(menuitem), "activate", 
    1118                      G_CALLBACK(goto_end_cb), view); 
    1119   gtk_widget_show(menuitem); 
    1120   gtk_widget_add_accelerator (menuitem, "activate", accel_group, 
    1121                               GDK_End, GDK_CONTROL_MASK, 
    1122                               GTK_ACCEL_VISIBLE); 
     902  create_view_menu_item (subsubmenu, _("Go to start of file"), 
     903                                                 "<Sweep-View>/Playback/Transport/Go to start of file", 
     904                                                  view, 
     905                                                  goto_start_cb, FALSE, 
     906                                                                                                  GDK_Home, GDK_CONTROL_MASK, view); 
     907                                                                                                                                                                           
     908  create_view_menu_item (subsubmenu, _("Go to start of window"), "<Sweep-View>/Playback/Transport/Go to start of window", 
     909                                                  view, 
     910                                                  goto_start_of_view_cb, FALSE, 
     911                                                                                                  GDK_Home, GDK_BUTTON1_MASK, view); 
     912 
     913  create_view_menu_item (subsubmenu, _("Skip back"), "<Sweep-View>/Playback/Transport/Skip back", 
     914                                                  view, 
     915                                                  page_back_cb, FALSE, 
     916                                                                                                  GDK_Page_Up, GDK_BUTTON1_MASK, view); 
     917 
     918  create_view_menu_item (subsubmenu, _("Skip forward"), "<Sweep-View>/Playback/Transport/Skip forward", 
     919                                                  view, 
     920                                                  page_fwd_cb, FALSE, 
     921                                                                                                  GDK_Page_Down, GDK_BUTTON1_MASK, view); 
     922 
     923  create_view_menu_item (subsubmenu, _("Go to end of window"), "<Sweep-View>/Playback/Transport/Go to end of window", 
     924                                                  view, 
     925                                                  goto_end_of_view_cb, FALSE, 
     926                                                                                                  GDK_End, GDK_BUTTON1_MASK, view); 
     927 
     928  create_view_menu_item (subsubmenu, _("Go to end of file"), "<Sweep-View>/Playback/Transport/Go to end of file", 
     929                                                  view, 
     930                                                  goto_end_cb, FALSE, 
     931                                                                                                  GDK_End, GDK_CONTROL_MASK, view); 
    1123932 
    1124933  menuitem = gtk_menu_item_new(); /* Separator */ 
     
    1126935  gtk_widget_show(menuitem); 
    1127936 
    1128   menuitem = gtk_menu_item_new_with_label(_("Play selection")); 
    1129   gtk_menu_append(GTK_MENU(submenu), menuitem); 
    1130   g_signal_connect (G_OBJECT(menuitem), "activate", 
    1131                      G_CALLBACK(play_view_sel_cb), view); 
    1132   gtk_widget_show(menuitem); 
    1133   gtk_widget_add_accelerator (menuitem, "activate", accel_group, 
    1134                               GDK_space, GDK_BUTTON1_MASK, 
    1135                               GTK_ACCEL_VISIBLE); 
    1136  
     937  menuitem = create_view_menu_item (submenu, _("Play selection"), "<Sweep-View>/Playback/Transport/Play selection", 
     938                                                  view, 
     939                                                  play_view_sel_cb, FALSE, 
     940                                                                                                  GDK_space, GDK_BUTTON1_MASK, view); 
    1137941  NOALLOC(menuitem); 
    1138  
    1139   menuitem = gtk_menu_item_new_with_label(_("Play sample")); 
    1140   gtk_menu_append(GTK_MENU(submenu), menuitem); 
    1141   g_signal_connect (G_OBJECT(menuitem), "activate", 
    1142                      G_CALLBACK(play_view_cb), view); 
    1143   gtk_widget_show(menuitem); 
    1144   gtk_widget_add_accelerator (menuitem, "activate", accel_group, 
    1145                               GDK_space, GDK_CONTROL_MASK, 
    1146                               GTK_ACCEL_VISIBLE); 
     942   
     943  menuitem = create_view_menu_item (submenu, _("Play sample"), "<Sweep-View>/Playback/Transport/Play sample", 
     944                                                  view, 
     945                                                  play_view_cb, FALSE, 
     946                                                                                                  GDK_space, GDK_CONTROL_MASK, view); 
    1147947  NOALLOC(menuitem); 
    1148  
     948                                                                                   
    1149949  menuitem = gtk_menu_item_new_with_label(_("Play note")); 
    1150950  gtk_menu_append(GTK_MENU(submenu), menuitem); 
     
    1172972  g_signal_connect (G_OBJECT(menuitem), "activate", 
    1173973                     G_CALLBACK(monitor_toggle_cb), view); 
     974                          
     975  gtk_menu_item_set_accel_path (GTK_MENU_ITEM(menuitem),  
     976                               "<Sweep-View>/Playback/Transport/Toggle monitoring"); 
     977          
    1174978  gtk_widget_show(menuitem); 
    1175979  view->monitor_checkmenu = menuitem; 
     
    1181985  g_signal_connect (G_OBJECT(menuitem), "activate", 
    1182986                     G_CALLBACK(loop_toggle_cb), view); 
     987 
     988  gtk_menu_item_set_accel_path (GTK_MENU_ITEM(menuitem),  
     989                               "<Sweep-View>/Playback/Transport/Toggle looping");                 
    1183990  gtk_widget_show(menuitem); 
    1184991  view->loop_checkmenu = menuitem; 
     
    1190997  g_signal_connect (G_OBJECT(menuitem), "activate", 
    1191998                     G_CALLBACK(mute_toggle_cb), view); 
     999  gtk_menu_item_set_accel_path (GTK_MENU_ITEM(menuitem),  
     1000                               "<Sweep-View>/Playback/Transport/Toggle muting"); 
    11921001  gtk_widget_show(menuitem); 
    11931002  view->mute_checkmenu = menuitem; 
     
    12001009                     G_CALLBACK(playrev_toggle_cb), view); 
    12011010  gtk_widget_show(menuitem); 
    1202   gtk_widget_add_accelerator (menuitem, "activate", accel_group, 
    1203                               GDK_quoteleft, GDK_BUTTON1_MASK, 
    1204                               GTK_ACCEL_VISIBLE); 
     1011  gtk_menu_item_set_accel_path (GTK_MENU_ITEM(menuitem),  
     1012                               "<Sweep-View>/Playback/Transport/Toggle reverse playback"); 
     1013  gtk_accel_map_add_entry  ("<Sweep-View>/Playback/Transport/Toggle reverse playback", 
     1014                             GDK_quoteleft, GDK_BUTTON1_MASK);   
     1015 
    12051016  view->playrev_checkmenu = menuitem; 
    12061017 
     
    12091020  gtk_widget_show(menuitem); 
    12101021 
    1211  
    1212   menuitem = gtk_menu_item_new_with_label(_("Pause")); 
    1213   gtk_menu_append(GTK_MENU(submenu), menuitem); 
    1214   g_signal_connect (G_OBJECT(menuitem), "activate", 
    1215                      G_CALLBACK(pause_playback_cb), view); 
    1216   gtk_widget_show(menuitem); 
     1022  menuitem = create_view_menu_item (submenu, _("Pause"), "<Sweep-View>/Playback/Pause", view, 
     1023                                                  pause_playback_cb, FALSE, 
     1024                                                                                                  0, 0, view); 
    12171025  NOALLOC(menuitem); 
    12181026 
    1219   menuitem = gtk_menu_item_new_with_label(_("Stop")); 
    1220   gtk_menu_append(GTK_MENU(submenu), menuitem); 
    1221   g_signal_connect (G_OBJECT(menuitem), "activate", 
    1222                      G_CALLBACK(stop_playback_cb), view); 
    1223   gtk_widget_add_accelerator (menuitem, "activate", accel_group, 
    1224                               GDK_Return, GDK_BUTTON1_MASK, 
    1225                               GTK_ACCEL_VISIBLE); 
    1226   gtk_widget_show(menuitem); 
    1227  
     1027  menuitem = create_view_menu_item (submenu, _("Stop"), "<Sweep-View>/Playback/Stop", view, 
     1028                                                  stop_playback_cb, FALSE, 
     1029                                                                                                  GDK_Return, GDK_BUTTON1_MASK, view); 
    12281030  NOALLOC(menuitem); 
    1229  
     1031                                                                                                   
    12301032  menuitem = gtk_menu_item_new_with_label (_("Help")); 
    12311033  MENU_APPEND(m, menuitem); 
     
    15071309  sample_display_stop_marching_ants (SAMPLE_DISPLAY(view->display)); 
    15081310 
     1311  if (view->sample->op_progress_tag != -1) 
     1312    gtk_timeout_remove(view->sample->op_progress_tag); 
     1313  cancel_active_op (view->sample); 
    15091314  sample_remove_view(view->sample, view); 
    15101315  gtk_widget_destroy (GTK_WIDGET (view->display)); 
     
    20741879  view->tool_buttons = NULL; 
    20751880 
     1881  button = create_pixmap_button (window, hand_xpm, _("Hand tool"), 
     1882                                 style_light_grey, VIEW_TOOLBAR_TOGGLE_BUTTON, 
     1883                                 G_CALLBACK (view_set_tool_cb), NULL, NULL, view); 
     1884  g_object_set_data (G_OBJECT(button), "default", GINT_TO_POINTER(TOOL_HAND)); 
     1885  gtk_box_pack_start (GTK_BOX (tool_hbox), button, FALSE, FALSE, 0); 
     1886  gtk_widget_show (button); 
     1887  view->tool_buttons = g_list_append (view->tool_buttons, button); 
     1888 
    20761889  button = create_pixmap_button (window, select_xpm, _("Selector tool"), 
    20771890                                 style_light_grey, VIEW_TOOLBAR_TOGGLE_BUTTON, 
     
    25612374    = create_pixmap_button (window, playpaus_xpm, 
    25622375                            /* _("Play all / Pause    [Ctrl+Space / Enter]"),*/ 
    2563                             _("Play all / Pause    [Ctrl+Space]"), 
     2376                            _("Play all / Pause"), 
    25642377                            style_green_grey, VIEW_TOOLBAR_TOGGLE_BUTTON, 
    25652378                            G_CALLBACK (play_view_button_cb), 
    25662379                            NULL, NULL, view); 
    25672380                                 
    2568                 //@     gtk_widget_set_size_request     (button, 
    2569          //@                                   65, 
    2570           //@                                   50); 
    25712381  gtk_box_pack_start (GTK_BOX (tool_hbox), button, FALSE, TRUE, 0); 
    25722382  gtk_widget_show (button); 
     
    25812391    = create_pixmap_button (window, playpsel_xpm, 
    25822392                            /*_("Play selection / Pause    [Space / Enter]"),*/ 
    2583                             _("Play selection / Pause    [Space]"), 
     2393                            _("Play selection / Pause"), 
    25842394                            style_green_grey, VIEW_TOOLBAR_TOGGLE_BUTTON, 
    25852395                            G_CALLBACK (play_view_sel_button_cb), 
     
    25972407    = create_pixmap_button (window, stop_xpm, 
    25982408                            /*_("Stop playback    [Space]"),*/ 
    2599                             _("Stop playback    [Enter]"), 
     2409                            _("Stop playback"), 
    26002410                            style_green_grey, VIEW_TOOLBAR_BUTTON, 
    26012411                            G_CALLBACK (stop_playback_cb), 
     
    26142424  button 
    26152425    = create_pixmap_button (window, prevtrk_xpm, 
    2616                             _("Go to beginning    [Ctrl+Home]"), 
     2426                            _("Go to beginning"), 
    26172427                            style_green_grey, VIEW_TOOLBAR_BUTTON, 
    26182428                            G_CALLBACK (goto_start_cb), NULL, NULL, view); 
     
    26502460  button 
    26512461    = create_pixmap_button (window, nexttrk_xpm, 
    2652                             _("Go to the end    [Ctrl+End]"), 
     2462                            _("Go to the end"), 
    26532463                            style_green_grey, VIEW_TOOLBAR_BUTTON, 
    26542464                            G_CALLBACK (goto_end_cb), NULL, NULL, view); 
     
    35973407             s->pathname ? g_basename (s->pathname) : _("Untitled"), 
    35983408#endif 
    3599              100 * (view->end - view->start) / s->sounddata->nr_frames); 
     3409             s->progress_percent); 
    36003410  } else { 
    36013411    snprintf(buf, BUF_LEN, 
  • sweep/branches/sweep-jack-testing/src/view_pixmaps.h

    r124 r505  
    5353#include "../pixmaps/scrub.xpm" 
    5454#include "../pixmaps/select.xpm" 
     55#include "../pixmaps/hand.xpm" 
    5556#ifdef DEVEL_CODE 
    5657#include "../pixmaps/pencil.xpm"