Merge branch 'master' into app_server
Conflicts: src/kits/app/Roster.cpp
This commit is contained in:
@@ -26,7 +26,7 @@ SYSTEM_BIN = [ FFilterByBuildFeatures
|
||||
route
|
||||
safemode screen_blanker screeninfo screenmode setarch setmime settype
|
||||
setversion setvolume shutdown
|
||||
strace su sysinfo
|
||||
strace su sysinfo system_time
|
||||
tcptester telnet telnetd top
|
||||
traceroute trash
|
||||
unchop unmount
|
||||
|
||||
@@ -21,7 +21,6 @@ AddFilesToPackage develop lib : kernel.so : _KERNEL_ ;
|
||||
# additional libraries
|
||||
local developmentLibs =
|
||||
<revisioned>libroot_debug.so
|
||||
<revisioned>libroot_guarded.so
|
||||
;
|
||||
|
||||
AddFilesToPackage lib : $(developmentLibs) ;
|
||||
|
||||
@@ -22,7 +22,7 @@ RemotePackageRepository HaikuPorts
|
||||
apr_util_devel-1.4.1-4
|
||||
autoconf-2.69-6
|
||||
automake-1.13.1-4
|
||||
bash-4.3.39-1
|
||||
bash-4.3.42-1
|
||||
beam-1.2-1
|
||||
bepdf-1.2.0-1
|
||||
bescreencapture-1.9.4-1
|
||||
@@ -37,12 +37,12 @@ RemotePackageRepository HaikuPorts
|
||||
clang-3.4-3
|
||||
clang_analysis-3.4-3
|
||||
clipdinger-0.4-1
|
||||
cmake-3.0.0_rc3-1
|
||||
cmake-3.3.1-1
|
||||
coreutils-8.24-1
|
||||
cpio-2.10-1
|
||||
ctags-5.8-3
|
||||
curl-7.43.0-1
|
||||
curl_devel-7.43.0-1
|
||||
curl-7.44.0-1
|
||||
curl_devel-7.44.0-1
|
||||
cvs-1.12.13.1-6
|
||||
cvsps-2.2b1-1
|
||||
diffutils-3.3-2
|
||||
@@ -90,8 +90,8 @@ RemotePackageRepository HaikuPorts
|
||||
gutenprint-5.2.10-1
|
||||
gutenprint_devel-5.2.10-1
|
||||
gzip-1.6-2
|
||||
haikuwebkit-1.4.10-1
|
||||
haikuwebkit_devel-1.4.10-1
|
||||
haikuwebkit-1.4.12-1
|
||||
haikuwebkit_devel-1.4.12-1
|
||||
help2man-1.46.6-1
|
||||
htmldoc-1.8.27-3
|
||||
icu-55.1-4
|
||||
@@ -124,8 +124,8 @@ RemotePackageRepository HaikuPorts
|
||||
liblayout_devel-1.4.2-1
|
||||
libogg-1.3.0-2
|
||||
libogg_devel-1.3.0-2
|
||||
libpcap-1.7.3-1
|
||||
libpcap_devel-1.7.3-1
|
||||
libpcap-1.7.4-1
|
||||
libpcap_devel-1.7.4-1
|
||||
libpcre-8.21-5
|
||||
libpcre_devel-8.21-5
|
||||
libpng-1.5.22-1
|
||||
@@ -175,12 +175,14 @@ RemotePackageRepository HaikuPorts
|
||||
mpc_devel-1.0.3-1
|
||||
mpfr-3.1.3-1
|
||||
mpfr_devel-3.1.3-1
|
||||
mpg123-1.22.3-1
|
||||
mpg123_devel-1.22.3-1
|
||||
mpg123-1.22.4-1
|
||||
mpg123_devel-1.22.4-1
|
||||
nano-2.4.2-1
|
||||
nasm-2.11.08-1
|
||||
ncurses-5.9-10
|
||||
ncurses_devel-5.9-10
|
||||
ncurses6-6.0-1
|
||||
ncurses6_devel-6.0-1
|
||||
neon-0.29.6-7
|
||||
neon_devel-0.29.6-7
|
||||
netcat-1.10-1
|
||||
@@ -218,7 +220,7 @@ RemotePackageRepository HaikuPorts
|
||||
subversion-1.6.18-6
|
||||
subversion_devel-1.6.18-6
|
||||
tar-1.27.1-2
|
||||
tcpdump-4.7.4-1
|
||||
tcpdump-4.7.4-2
|
||||
texinfo-4.13a-7
|
||||
tiff-3.9.6-2
|
||||
tiff_devel-3.9.6-2
|
||||
@@ -226,7 +228,7 @@ RemotePackageRepository HaikuPorts
|
||||
tinyxml-2.6.2-1
|
||||
tinyxml_devel-2.6.2-1
|
||||
transmission-2.84-3
|
||||
unrar-5.1.5-1
|
||||
unrar-5.3.2-1
|
||||
unzip-6.0-2
|
||||
vision-0.9.7.r949-3
|
||||
vim-7.4-1
|
||||
@@ -236,7 +238,7 @@ RemotePackageRepository HaikuPorts
|
||||
xml_parser-2.36-1
|
||||
xz_utils-5.0.8-2
|
||||
xz_utils_devel-5.0.8-2
|
||||
yasm-1.2.0-3
|
||||
yasm-1.3.0-1
|
||||
zip-3.0-2
|
||||
zlib-1.2.8-4
|
||||
zlib_devel-1.2.8-4
|
||||
@@ -245,8 +247,8 @@ RemotePackageRepository HaikuPorts
|
||||
binutils_x86_gcc2-2.17_2013_04_21-2
|
||||
bzip2_x86_gcc2-1.0.6-5
|
||||
bzip2_x86_gcc2_devel-1.0.6-5
|
||||
curl_x86_gcc2-7.43.0-1
|
||||
curl_x86_gcc2_devel-7.43.0-1
|
||||
curl_x86_gcc2-7.44.0-1
|
||||
curl_x86_gcc2_devel-7.44.0-1
|
||||
expat_x86_gcc2-2.1.0-1
|
||||
expat_x86_gcc2_devel-2.1.0-1
|
||||
ffmpeg_x86_gcc2-0.10.2-4
|
||||
@@ -303,6 +305,8 @@ RemotePackageRepository HaikuPorts
|
||||
mesa_x86_gcc2_swrast-7.9.2-5
|
||||
ncurses_x86_gcc2-5.9-10
|
||||
ncurses_x86_gcc2_devel-5.9-10
|
||||
ncurses6_x86_gcc2-6.0-1
|
||||
ncurses6_x86_gcc2_devel-6.0-1
|
||||
openssl_x86_gcc2-1.0.0s-1
|
||||
openssl_x86_gcc2_devel-1.0.0s-1
|
||||
pkgconfig_x86_gcc2-0.27.1-2
|
||||
@@ -419,6 +423,7 @@ RemotePackageRepository HaikuPorts
|
||||
nano
|
||||
nasm
|
||||
ncurses
|
||||
ncurses6
|
||||
neon
|
||||
netcat
|
||||
openssh
|
||||
|
||||
@@ -23,7 +23,7 @@ RemotePackageRepository HaikuPorts
|
||||
apr_util_devel-1.5.4-1
|
||||
autoconf-2.69-6
|
||||
automake-1.13.1-4
|
||||
bash-4.3.39-1
|
||||
bash-4.3.42-1
|
||||
# bepdf-1.1.1~beta5_2013_04_28-1
|
||||
binutils-2.25_12015_07_31-1
|
||||
bison-2.6.5-1
|
||||
@@ -59,13 +59,13 @@ RemotePackageRepository HaikuPorts
|
||||
clang-3.5.1-1
|
||||
clang_analysis-3.5.1-1
|
||||
clipdinger-0.4-1
|
||||
cmake-3.2.3-1
|
||||
cmake-3.3.1-1
|
||||
coreutils-8.24-1
|
||||
cppunit-1.12.1-2
|
||||
cppunit_devel-1.12.1-2
|
||||
ctags-5.8-3
|
||||
curl-7.43.0-1
|
||||
curl_devel-7.43.0-1
|
||||
curl-7.44.0-1
|
||||
curl_devel-7.44.0-1
|
||||
cvs-1.12.13.1-6
|
||||
diffutils-3.3-2
|
||||
dos2unix-7.2.2-1
|
||||
@@ -88,8 +88,9 @@ RemotePackageRepository HaikuPorts
|
||||
fontconfig-2.11.1-3
|
||||
fontconfig_devel-2.11.1-3
|
||||
fossil-1.33-1
|
||||
freetype-2.6-1
|
||||
freetype_devel-2.6-1
|
||||
freeciv-2.5.1-1
|
||||
freetype-2.6-2
|
||||
freetype_devel-2.6-2
|
||||
fribidi-0.19.6-2
|
||||
fribidi_devel-0.19.6-2
|
||||
gawk-4.1.0-2
|
||||
@@ -128,17 +129,17 @@ RemotePackageRepository HaikuPorts
|
||||
gutenprint-5.2.10-1
|
||||
gutenprint_devel-5.2.10-1
|
||||
gzip-1.6-2
|
||||
haikuwebkit-1.4.10-1
|
||||
haikuwebkit_devel-1.4.10-1
|
||||
haikuwebkit-1.4.12-1
|
||||
haikuwebkit_devel-1.4.12-1
|
||||
handbrake-0.10.1-1
|
||||
harfbuzz-0.9.40-1
|
||||
harfbuzz_devel-0.9.40-1
|
||||
help2man-1.46.6-1
|
||||
htmldoc-1.8.27-3
|
||||
icu-55.1-3
|
||||
icu_devel-55.1-3
|
||||
icu54-54.1-1
|
||||
icu54_devel-54.1-1
|
||||
icu-55.1-5
|
||||
icu_devel-55.1-5
|
||||
icu54-54.1-2
|
||||
icu54_devel-54.1-2
|
||||
intltool-0.40.6-4
|
||||
jam-2.5_2012_10_12-2
|
||||
jasper-1.900.1-4
|
||||
@@ -153,6 +154,8 @@ RemotePackageRepository HaikuPorts
|
||||
lcms-2.7-1
|
||||
lcms_devel-2.7-1
|
||||
less-451-4
|
||||
libasr-1.0.2-1
|
||||
libasr_devel-1.0.2-1
|
||||
libass-0.12.2-1
|
||||
libass_devel-0.12.2-1
|
||||
libassuan-2.2.0-1
|
||||
@@ -177,6 +180,10 @@ RemotePackageRepository HaikuPorts
|
||||
libicns_devel-0.8.1-1
|
||||
libiconv-1.13.1-6
|
||||
libiconv_devel-1.13.1-6
|
||||
libmad-0.15.1b-2
|
||||
libmad_devel-0.15.1b-2
|
||||
libmikmod-3.3.7-1
|
||||
libmikmod_devel-3.3.7-1
|
||||
libmkv-0.6.5.1-3
|
||||
libmkv_devel-0.6.5.1-3
|
||||
libmp4v2-2.0.0-2
|
||||
@@ -185,8 +192,8 @@ RemotePackageRepository HaikuPorts
|
||||
libmpeg2_devel-0.5.1-3
|
||||
libogg-1.3.0-2
|
||||
libogg_devel-1.3.0-2
|
||||
libpcap-1.7.3-1
|
||||
libpcap_devel-1.7.3-1
|
||||
libpcap-1.7.4-1
|
||||
libpcap_devel-1.7.4-1
|
||||
libpcre-8.21-5
|
||||
libpcre_devel-8.21-5
|
||||
libpng-1.5.22-1
|
||||
@@ -248,12 +255,14 @@ RemotePackageRepository HaikuPorts
|
||||
mpc_devel-1.0.3-1
|
||||
mpfr-3.1.3-1
|
||||
mpfr_devel-3.1.3-1
|
||||
mpg123-1.22.3-1
|
||||
mpg123_devel-1.22.3-1
|
||||
mpg123-1.22.4-1
|
||||
mpg123_devel-1.22.4-1
|
||||
nano-2.4.2-1
|
||||
nasm-2.11.08-1
|
||||
ncurses-5.9-10
|
||||
ncurses_devel-5.9-10
|
||||
ncurses6-6.0-1
|
||||
ncurses6_devel-6.0-1
|
||||
neon-0.29.6-7
|
||||
neon_devel-0.29.6-7
|
||||
netcat-1.10-1
|
||||
@@ -285,6 +294,10 @@ RemotePackageRepository HaikuPorts
|
||||
sdl_gfx_devel-2.0.25-2
|
||||
sdl_image-1.2.12-5
|
||||
sdl_image_devel-1.2.12-5
|
||||
sdl_mixer-1.2.12-6
|
||||
sdl_mixer_devel-1.2.12-6
|
||||
sdl_ttf-2.0.11-2
|
||||
sdl_ttf_devel-2.0.11-2
|
||||
sed-4.2.1-6
|
||||
serf-1.3.7-1
|
||||
serf_devel-1.3.7-1
|
||||
@@ -298,7 +311,7 @@ RemotePackageRepository HaikuPorts
|
||||
subversion-1.8.11-1
|
||||
subversion_devel-1.8.11-1
|
||||
tar-1.27.1-2
|
||||
tcpdump-4.7.4-1
|
||||
tcpdump-4.7.4-2
|
||||
texinfo-4.13a-7
|
||||
tiff-3.9.6-2
|
||||
tiff_devel-3.9.6-2
|
||||
@@ -306,7 +319,7 @@ RemotePackageRepository HaikuPorts
|
||||
tinyxml-2.6.2-1
|
||||
tinyxml_devel-2.6.2-1
|
||||
transmission-2.84-3
|
||||
unrar-5.1.5-1
|
||||
unrar-5.3.2-1
|
||||
unzip-6.0-2
|
||||
vim-7.4-2
|
||||
vision-0.9.7.r949-3
|
||||
@@ -318,7 +331,7 @@ RemotePackageRepository HaikuPorts
|
||||
x264_devel-20140308-1
|
||||
xz_utils-5.0.8-2
|
||||
xz_utils_devel-5.0.8-2
|
||||
yasm-1.2.0-3
|
||||
yasm-1.3.0-1
|
||||
zip-3.0-2
|
||||
zlib-1.2.8-4
|
||||
zlib_devel-1.2.8-4
|
||||
@@ -358,6 +371,7 @@ RemotePackageRepository HaikuPorts
|
||||
flex
|
||||
fontconfig
|
||||
fossil
|
||||
freeciv
|
||||
freetype
|
||||
fribidi
|
||||
gawk
|
||||
@@ -392,6 +406,7 @@ RemotePackageRepository HaikuPorts
|
||||
lame
|
||||
lcms
|
||||
less
|
||||
libasr
|
||||
libass
|
||||
libassuan
|
||||
libbluray
|
||||
@@ -404,6 +419,8 @@ RemotePackageRepository HaikuPorts
|
||||
libgpg_error
|
||||
libicns
|
||||
libiconv
|
||||
libmad
|
||||
libmikmod
|
||||
libmkv
|
||||
libmp4v2
|
||||
libmpeg2
|
||||
@@ -444,6 +461,7 @@ RemotePackageRepository HaikuPorts
|
||||
nano
|
||||
nasm
|
||||
ncurses
|
||||
ncurses6
|
||||
neon
|
||||
netcat
|
||||
ninja
|
||||
@@ -466,6 +484,8 @@ RemotePackageRepository HaikuPorts
|
||||
scons
|
||||
sdl_gfx
|
||||
sdl_image
|
||||
sdl_mixer
|
||||
sdl_ttf
|
||||
sed
|
||||
serf
|
||||
sharutils
|
||||
|
||||
@@ -14,6 +14,8 @@ RemotePackageRepository HaikuPorts
|
||||
droid-113-1
|
||||
flare_x86_data-0.19-3
|
||||
freedroidrpg_x86_data-0.15.1-1
|
||||
gws-0.1.8-1
|
||||
haikuporter-1.0.0-1
|
||||
hub-1.12.4-1
|
||||
openttd_gfx-0.4.7-1
|
||||
openttd_msx-0.3.1-1
|
||||
@@ -43,7 +45,7 @@ RemotePackageRepository HaikuPorts
|
||||
autoconf-2.69-5
|
||||
automake-1.13.1-4
|
||||
avra-1.3.0-1
|
||||
bash-4.3.39-1
|
||||
bash-4.3.42-1
|
||||
beae-1.2-3
|
||||
beam-1.2-1
|
||||
becjk-1.0.1-1
|
||||
@@ -52,7 +54,7 @@ RemotePackageRepository HaikuPorts
|
||||
belife-1.0.0-2
|
||||
bemines-1.0b2-1
|
||||
bepdf-1.2.0-1
|
||||
bepodder-1.3.0-1
|
||||
bepodder-1.3.0-2
|
||||
bescreencapture-1.9.4-1
|
||||
bezilla-2.0.0.22-1
|
||||
binutils-2.17_2013_04_21-2
|
||||
@@ -79,8 +81,8 @@ RemotePackageRepository HaikuPorts
|
||||
ctags-5.8-3
|
||||
colors-2.3-1
|
||||
coreutils-8.24-1
|
||||
curl-7.43.0-1
|
||||
curl_devel-7.43.0-1
|
||||
curl-7.44.0-1
|
||||
curl_devel-7.44.0-1
|
||||
cvs-1.12.13.1-6
|
||||
d52-3.4.1-1
|
||||
desknotes-1.1-4
|
||||
@@ -162,6 +164,7 @@ RemotePackageRepository HaikuPorts
|
||||
gperf-3.0.4-1
|
||||
gpgme-1.5.2-2
|
||||
gpgme_devel-1.5.2-2
|
||||
grafx2-2.5-2
|
||||
grep-2.20-1
|
||||
groff-1.20.1-3
|
||||
gtk_doc-1.20-1
|
||||
@@ -182,6 +185,7 @@ RemotePackageRepository HaikuPorts
|
||||
imagemagick_devel-6.8.9_8-1
|
||||
intltool-0.40.6-4
|
||||
itstool-2.0.2-1
|
||||
jabber4haiku-1.2.1-1
|
||||
jam-2.5_2012_10_12-2
|
||||
jasper-1.900.1-4
|
||||
jasper_devel-1.900.1-4
|
||||
@@ -260,8 +264,8 @@ RemotePackageRepository HaikuPorts
|
||||
libogg_devel-1.3.0-2
|
||||
libpaper-1.1.24-1
|
||||
libpaper_devel-1.1.24-1
|
||||
libpcap-1.7.3-1
|
||||
libpcap_devel-1.7.3-1
|
||||
libpcap-1.7.4-1
|
||||
libpcap_devel-1.7.4-1
|
||||
libpcre-8.21-5
|
||||
libpcre_devel-8.21-5
|
||||
libpng-1.5.22-1
|
||||
@@ -308,15 +312,15 @@ RemotePackageRepository HaikuPorts
|
||||
libxml2-2.8.0-9
|
||||
libxml2_devel-2.8.0-9
|
||||
libxml2_python-2.8.0-9
|
||||
libxslt-1.1.28-4
|
||||
libxslt_devel-1.1.28-4
|
||||
libxslt-1.1.28-5
|
||||
libxslt_devel-1.1.28-5
|
||||
libzip-0.11.2-1
|
||||
libzip_devel-0.11.2-1
|
||||
lighttpd-1.4.35-2
|
||||
lighttpd_devel-1.4.35-2
|
||||
links-2.8-1
|
||||
lmarbles-1.0.8-2
|
||||
lnlauncher-1.1.2-1
|
||||
lnlauncher-1.1.2-2
|
||||
ltris-1.0.19-1
|
||||
lua-5.2.1-6
|
||||
lua_devel-5.2.1-6
|
||||
@@ -343,8 +347,8 @@ RemotePackageRepository HaikuPorts
|
||||
moe-1.1.2-1
|
||||
mog-0.63.1548-1
|
||||
most-pre5.1_15-1
|
||||
mpg123-1.22.3-1
|
||||
mpg123_devel-1.22.3-1
|
||||
mpg123-1.22.4-1
|
||||
mpg123_devel-1.22.4-1
|
||||
mtr-0.73-1
|
||||
multitalk-1.4-1
|
||||
mupdf-1.7-1
|
||||
@@ -356,6 +360,8 @@ RemotePackageRepository HaikuPorts
|
||||
nasm-2.11.08-1
|
||||
ncurses-5.9-9
|
||||
ncurses_devel-5.9-9
|
||||
ncurses6-6.0-1
|
||||
ncurses6_devel-6.0-1
|
||||
neon-0.29.6-6
|
||||
neon_devel-0.29.6-6
|
||||
netcat-1.10-1
|
||||
@@ -464,7 +470,7 @@ RemotePackageRepository HaikuPorts
|
||||
tar-1.26-6
|
||||
tcl-8.5.18-1
|
||||
tcl_devel-8.5.18-1
|
||||
tcpdump-4.7.4-1
|
||||
tcpdump-4.7.4-2
|
||||
texinfo-4.13a-7
|
||||
tiff-3.9.6-2
|
||||
tiff_devel-3.9.6-2
|
||||
@@ -474,7 +480,7 @@ RemotePackageRepository HaikuPorts
|
||||
twolame-0.3.13-1
|
||||
twolame_devel-0.3.13-1
|
||||
ubertuber-0.9.11-1
|
||||
unrar-5.2.6-1
|
||||
unrar-5.3.2-1
|
||||
unzip-6.0-2
|
||||
util_macros-1.19.0-2
|
||||
vasm-1.7c-1
|
||||
@@ -499,7 +505,7 @@ RemotePackageRepository HaikuPorts
|
||||
xrick-021212-2
|
||||
yab-1.7.5-2
|
||||
yab_ide-2.2.5-1
|
||||
yasm-1.2.0-3
|
||||
yasm-1.3.0-1
|
||||
zip-3.0-2
|
||||
zlib-1.2.8-4
|
||||
zlib_devel-1.2.8-4
|
||||
@@ -547,14 +553,16 @@ RemotePackageRepository HaikuPorts
|
||||
burnitnow_x86-0.1.0-1
|
||||
bzip2_x86-1.0.6-5
|
||||
bzip2_x86_devel-1.0.6-5
|
||||
cairo_x86-1.12.18-1
|
||||
cairo_x86_devel-1.12.18-1
|
||||
capstone_x86-3.0.4-1
|
||||
capstone_x86_devel-3.0.4-1
|
||||
cmake_x86-3.2.3-1
|
||||
cmake_x86-3.3.1-1
|
||||
confuse_x86-2.7-2
|
||||
confuse_x86_devel-2.7-2
|
||||
copynametoclipboard-1.0.1-2
|
||||
curl_x86-7.43.0-1
|
||||
curl_x86_devel-7.43.0-1
|
||||
curl_x86-7.44.0-1
|
||||
curl_x86_devel-7.44.0-1
|
||||
cvsps_x86-2.2b1-1
|
||||
dbus_x86-1.8.6-1
|
||||
dbus_x86_devel-1.8.6-1
|
||||
@@ -584,8 +592,8 @@ RemotePackageRepository HaikuPorts
|
||||
flare_x86-0.19-3
|
||||
fluidsynth_x86-1.1.6-2
|
||||
fluidsynth_x86_devel-1.1.6-2
|
||||
fontconfig_x86-2.11.1-2
|
||||
fontconfig_x86_devel-2.11.1-2
|
||||
fontconfig_x86-2.11.1-3
|
||||
fontconfig_x86_devel-2.11.1-3
|
||||
freedroidrpg_x86-0.15.1-1
|
||||
freetype_x86-2.6-1
|
||||
freetype_x86_devel-2.6-1
|
||||
@@ -595,6 +603,8 @@ RemotePackageRepository HaikuPorts
|
||||
gcc_x86_syslibs-4.8.5_2015_07_11-2
|
||||
gcc_x86_syslibs_devel-4.8.5_2015_07_11-2
|
||||
gcc6809_x86-4.6.1-2
|
||||
gdk_pixbuf_x86-2.31.5-1
|
||||
gdk_pixbuf_x86_devel-2.31.5-1
|
||||
gettext_x86-0.18.1.1-6
|
||||
gettext_x86_libintl-0.18.1.1-6
|
||||
giflib_x86-5.1.0-1
|
||||
@@ -616,8 +626,8 @@ RemotePackageRepository HaikuPorts
|
||||
graphite2_x86_devel-1.2.4-1
|
||||
guilib_x86-1.2.1-1
|
||||
guilib_x86_devel-1.2.1-1
|
||||
haikuwebkit_x86-1.4.11-1
|
||||
haikuwebkit_x86_devel-1.4.11-1
|
||||
haikuwebkit_x86-1.4.12-1
|
||||
haikuwebkit_x86_devel-1.4.12-1
|
||||
harfbuzz_x86-0.9.39-1
|
||||
harfbuzz_x86_devel-0.9.39-1
|
||||
icu_x86-55.1-1
|
||||
@@ -721,6 +731,8 @@ RemotePackageRepository HaikuPorts
|
||||
libtheora_x86_devel-1.1.1-2
|
||||
libtool_x86-2.4.2-1
|
||||
libtool_x86_libltdl-2.4.2-1
|
||||
libtorrent_rasterbar_x86-1.0.6-1
|
||||
libtorrent_rasterbar_x86_devel-1.0.6-1
|
||||
libusb_x86-1.0.18-1
|
||||
libusb_x86_devel-1.0.18-1
|
||||
libuuid_x86-1.0.3-2
|
||||
@@ -733,8 +745,8 @@ RemotePackageRepository HaikuPorts
|
||||
libwebp_x86_devel-0.4.1-1
|
||||
libxml2_x86-2.9.2-1
|
||||
libxml2_x86_devel-2.9.2-1
|
||||
libxslt_x86-1.1.28-2
|
||||
libxslt_x86_devel-1.1.28-2
|
||||
libxslt_x86-1.1.28-5
|
||||
libxslt_x86_devel-1.1.28-5
|
||||
libzip_x86-0.11.2-1
|
||||
libzip_x86_devel-0.11.2-1
|
||||
llvm_x86-3.5.2-1
|
||||
@@ -759,8 +771,8 @@ RemotePackageRepository HaikuPorts
|
||||
mpd_x86-0.18.12_git-1
|
||||
mpfr_x86-3.1.3-1
|
||||
mpfr_x86_devel-3.1.3-1
|
||||
mpg123_x86-1.22.3-1
|
||||
mpg123_x86_devel-1.22.3-1
|
||||
mpg123_x86-1.22.4-1
|
||||
mpg123_x86_devel-1.22.4-1
|
||||
mplayer_x86-1.1.1-3
|
||||
mupdf_x86-1.7-1
|
||||
mupdf_x86_devel-1.7-1
|
||||
@@ -768,6 +780,8 @@ RemotePackageRepository HaikuPorts
|
||||
musicpc_x86-0.26-1
|
||||
ncurses_x86-5.9-9
|
||||
ncurses_x86_devel-5.9-9
|
||||
ncurses6_x86-6.0-1
|
||||
ncurses6_x86_devel-6.0-1
|
||||
ninja_x86-1.5.1-2
|
||||
ocp_x86-0.1.21_git-1
|
||||
openal_x86-1.13.0-2
|
||||
@@ -780,6 +794,8 @@ RemotePackageRepository HaikuPorts
|
||||
openssl_x86-1.0.0s-1
|
||||
openssl_x86_devel-1.0.0s-1
|
||||
openttd_x86-1.3.3-1
|
||||
pango_x86-1.37.0-1
|
||||
pango_x86_devel-1.37.0-1
|
||||
pciutils_x86-3.2.1-1
|
||||
pciutils_x86_devel-3.2.1-1
|
||||
physfs_x86-2.0.3-1
|
||||
@@ -792,6 +808,7 @@ RemotePackageRepository HaikuPorts
|
||||
protrekkr_x86-2.5.4-2
|
||||
popt_x86-1.16-1
|
||||
popt_x86_devel-1.16-1
|
||||
qbittorrent_x86-3.2.3-2
|
||||
qemu_x86-2.1.2-1
|
||||
qca2_x86-2.0.3-1
|
||||
qca2_x86_devel-2.0.3-1
|
||||
@@ -799,7 +816,7 @@ RemotePackageRepository HaikuPorts
|
||||
qjson_x86_devel-0.8.1-1
|
||||
qmplay2_x86-15.05.30-2
|
||||
quassel_x86-0.10.0-2
|
||||
quicklaunch-0.9.10-1
|
||||
quicklaunch-0.9.11-1
|
||||
qupzilla_x86-1.8.6-1
|
||||
radare2_x86-0.9.9-1
|
||||
radare2_x86_devel-0.9.9-1
|
||||
@@ -854,6 +871,8 @@ RemotePackageRepository HaikuPorts
|
||||
vacuum_x86-1.2.5-1
|
||||
vcmi_x86-0.94-1
|
||||
wizznic_x86-0.9.9-2
|
||||
xmlroff_x86-0.6.2-2
|
||||
xmlroff_x86_devel-0.6.2-2
|
||||
xz_utils_x86-5.0.8-2
|
||||
xz_utils_x86_devel-5.0.8-2
|
||||
zlib_x86-1.2.8-4
|
||||
@@ -908,6 +927,7 @@ RemotePackageRepository HaikuPorts
|
||||
burnitnow_x86
|
||||
bzip2
|
||||
bzr
|
||||
cairo_x86
|
||||
canna
|
||||
capitalbe
|
||||
capstone_x86
|
||||
@@ -988,6 +1008,7 @@ RemotePackageRepository HaikuPorts
|
||||
gettext
|
||||
gettext_x86
|
||||
gdb
|
||||
gdk_pixbuf_x86
|
||||
giflib
|
||||
git
|
||||
glew
|
||||
@@ -1002,6 +1023,7 @@ RemotePackageRepository HaikuPorts
|
||||
gperf
|
||||
gpgme
|
||||
gpgme_x86
|
||||
grafx2
|
||||
graphite2_x86
|
||||
grep
|
||||
groff
|
||||
@@ -1010,6 +1032,7 @@ RemotePackageRepository HaikuPorts
|
||||
gutenprint
|
||||
gyp
|
||||
gzip
|
||||
haikuporter
|
||||
haikuwebkit_x86
|
||||
harfbuzz_x86
|
||||
help2man
|
||||
@@ -1021,6 +1044,7 @@ RemotePackageRepository HaikuPorts
|
||||
imagemagick
|
||||
intltool
|
||||
itstool
|
||||
jabber4haiku
|
||||
jam
|
||||
jasper
|
||||
jbig2dec
|
||||
@@ -1106,6 +1130,7 @@ RemotePackageRepository HaikuPorts
|
||||
libtheora
|
||||
libtool
|
||||
libtool_x86
|
||||
libtorrent_rasterbar_x86
|
||||
libunistring
|
||||
libusb
|
||||
libusb_x86
|
||||
@@ -1172,6 +1197,7 @@ RemotePackageRepository HaikuPorts
|
||||
nano
|
||||
nasm
|
||||
ncurses
|
||||
ncurses6
|
||||
neon
|
||||
netcat
|
||||
netpulse
|
||||
@@ -1189,6 +1215,7 @@ RemotePackageRepository HaikuPorts
|
||||
openttd_x86
|
||||
p7zip
|
||||
paladin
|
||||
pango_x86
|
||||
paragui
|
||||
patch
|
||||
pciutils
|
||||
@@ -1217,6 +1244,7 @@ RemotePackageRepository HaikuPorts
|
||||
python_setuptools
|
||||
python_twisted
|
||||
python_zope.interface
|
||||
qbittorrent_x86
|
||||
qemacs
|
||||
qemu_x86
|
||||
qca2_x86
|
||||
@@ -1305,6 +1333,7 @@ RemotePackageRepository HaikuPorts
|
||||
yasm
|
||||
youtube_dl
|
||||
xcb_proto
|
||||
xmlroff_x86
|
||||
xmlto
|
||||
xml_parser
|
||||
xproto
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
Enable query support BFS_Initialize_Parameter Activer le support des requêtes
|
||||
2048 (Recommended) BFS_Initialize_Parameter 2048 (Recommandé)
|
||||
8192 (Mostly large files) BFS_Initialize_Parameter 8192 (Surtout des gros fichiers)
|
||||
Disabling query support may speed up certain file system operations, but should only be used if one is absolutely certain that one will not need queries.\nAny volume that is intended for booting Haiku must have query support enabled. BFS_Initialize_Parameter Désactiver le support des requête peut accélérer certaines opérations du système de fichiers, mais vous devez être certains de ne jamais avoir besoin des requêtes.\nTout volume destiné à amorcer Haiku doit avoir le support des requête activé.
|
||||
Disabling query support may speed up certain file system operations, but should only be used if one is absolutely certain that one will not need queries.\nAny volume that is intended for booting Haiku must have query support enabled. BFS_Initialize_Parameter Désactiver le support des requêtes peut accélérer certaines opérations du système de fichiers, mais vous devez être certain de ne jamais avoir besoin des requêtes.\nTout volume destiné à amorcer Haiku doit avoir le support des requêtes activé.
|
||||
1024 (Mostly small files) BFS_Initialize_Parameter 1024 (Surtout des petits fichiers)
|
||||
Blocksize: BFS_Initialize_Parameter Taille de bloc :
|
||||
Name: BFS_Initialize_Parameter Nom :
|
||||
|
||||
@@ -7,7 +7,7 @@ Output mapping AudioMixer Correspondances de sorties
|
||||
Allow input channel remapping AudioMixer Autoriser la réassignation des canaux d’entrées
|
||||
Resampling algorithm AudioMixer Algorithme de ré-échantillonnage
|
||||
Attenuate mixer output by 3dB (like BeOS R5) AudioMixer Atténuer la sortie du mélangeur de 3 dB (comme BeOS R5)
|
||||
Display balance control for stereo connections AudioMixer Afficher le contrôle de balance pour des connexions stéréo
|
||||
Display balance control for stereo connections AudioMixer Afficher le contrôle de balance pour les connexions stéréo
|
||||
To output AudioMixer Vers la sortie
|
||||
not connected AudioMixer débranché
|
||||
Refuse input format changes AudioMixer Refuser les changements de formats d’entrées
|
||||
@@ -17,11 +17,11 @@ dB AudioMixer dB
|
||||
Gain controls AudioMixer Contrôles de gain
|
||||
Input mapping AudioMixer Correspondances d’entrées
|
||||
Mute AudioMixer Sourdine
|
||||
Input channel destinations AudioMixer Destination des canaux d’entrées
|
||||
Input channel destinations AudioMixer Destinations des canaux d’entrées
|
||||
To master AudioMixer Vers la sortie principale
|
||||
Master output AudioMixer Sortie principale
|
||||
Setup AudioMixer Réglages
|
||||
Use non linear gain sliders (like BeOS R5) AudioMixer Utiliser les curseurs de gain non-linéaire (comme BeOS R5)
|
||||
Use non linear gain sliders (like BeOS R5) AudioMixer Utiliser les curseurs de gain non-linéaires (comme BeOS R5)
|
||||
Gain AudioMixer Gain
|
||||
Allow output channel remapping AudioMixer Autoriser la réassignation des canaux de sorties
|
||||
Physical input channels AudioMixer Canaux d’entrées physiques
|
||||
|
||||
@@ -1,2 +1,10 @@
|
||||
1 hungarian x-vnd.Haiku-DNSClientService 3886749326
|
||||
1 hungarian x-vnd.Haiku-DNSClientService 2825577357
|
||||
DNS settings DNSClientServiceAddOn DNS-beállítások
|
||||
Move down DNSSettingsView Mozgatás lefelé
|
||||
DNS settings DNSSettingsView DNS-beállítások
|
||||
Remove DNSSettingsView Eltávolítás
|
||||
Domain: DNSSettingsView Tartomány:
|
||||
Add DNSSettingsView Hozzáad
|
||||
Server: DNSSettingsView Kiszolgáló:
|
||||
Move up DNSSettingsView Mozgatás felfelé
|
||||
Apply DNSSettingsView Alkalmaz
|
||||
|
||||
@@ -0,0 +1,2 @@
|
||||
1 hungarian x-vnd.Haiku-IPv4Interface 2854844856
|
||||
IPv4 IPv4InterfaceAddOn IPv4
|
||||
@@ -0,0 +1,2 @@
|
||||
1 hungarian x-vnd.Haiku-IPv6Interface 1391114020
|
||||
IPv6 IPv6InterfaceAddOn IPv6
|
||||
@@ -1,4 +1,4 @@
|
||||
1 russian x-vnd.Haiku-About 14540716
|
||||
1 russian x-vnd.Haiku-About 3251436090
|
||||
Copyright © 1999-2010 by the authors of Gutenprint. All rights reserved. AboutView Все права защищены © 1999-2010 авторы Gutenprint.
|
||||
Copyright © 1996-2002, 2006 David Turner, Robert Wilhelm and Werner Lemberg. AboutView Все права защищены © 1996-2002, 2006 David Turner, Robert Wilhelm и Werner Lemberg.
|
||||
Past website & marketing:\n AboutView Старый вебсайт и маркетинг:\n
|
||||
@@ -8,6 +8,7 @@ Copyright © 1996-2005 Julian R Seward. All rights reserved. AboutView Все
|
||||
%d MiB total AboutView Всего %d МБ
|
||||
Michael Phipps (project founder)\n\n AboutView Michael Phipps (основателю проекта)\n\n
|
||||
%d MiB used (%d%%) AboutView %d МБ использовано (%d%%)
|
||||
Contains software from the GNU Project, released under the GPL and LGPL licenses:\nGNU C Library, GNU coretools, diffutils, findutils, sharutils, gawk, bison, m4, make, wget, ncurses, termcap, Bourne Again Shell.\nCopyright © The Free Software Foundation. AboutView Содержит программное обеспечение из проекта GNU, выпущен под лицензиями GPL и LGPL:\nGNU библиотека, GNU coretools, diffutils, findutils, sharutils, gawk, bison, m4, make, wget, ncurses, termcap, Bourne Again Shell.\n\nВсе права защищены © Фонд свободного программного обеспечения.
|
||||
AboutSystem System name О системе
|
||||
Copyright © 2003 Peter Hanappe and others. AboutView Все права защищены © 2003 Peter Hanappe и другие.
|
||||
Copyright © 1994-1997 Mark Kilgard. All rights reserved. AboutView Все права защищены © 1994-1997 Mark Kilgard.
|
||||
@@ -40,6 +41,7 @@ Copyright © 1996-1997 Jeff Prosise. All rights reserved. AboutView Все пр
|
||||
Copyright © 2006-2012 Kentaro Fukuchi AboutView Все права защищены © 2006-2012 Kentaro Fukuchi
|
||||
Copyright © 1994-2009, Thomas G. Lane, Guido Vollbeding. This software is based in part on the work of the Independent JPEG Group. AboutView Все права защищены © 1994-2009, Thomas G. Lane, Guido Vollbeding. Это программное обеспечение частично основано на работе Independent JPEG Group.
|
||||
Past maintainers:\n AboutView Предыдущие разработчики:\n
|
||||
Contains software from the FreeBSD Project, released under the BSD license:\nftpd, ping, telnet, telnetd, traceroute\nCopyright © 1994-2008 The FreeBSD Project. All rights reserved. AboutView Содержит программное обеспечение из проекта FreeBSD, выпущен под лицензией BSD:\ncal, ftpd, ping, telnet, telnetd, tracerout\nВсе права защищены © 1994-2008 Проект FreeBSD.
|
||||
GNU GPL v3 AboutWindow GNU GPL v3
|
||||
\n\nSpecial thanks to:\n AboutView \n\nОсобая благодарность:\n
|
||||
\n…and probably some more we forgot to mention (sorry!)\n\n AboutView \n…а также те, кого мы забыли упомянуть (простите!)\n\n
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
1 russian x-vnd.Haiku-DriveSetup 1450212098
|
||||
1 russian x-vnd.Haiku-DriveSetup 2321187933
|
||||
DriveSetup System name Разметка диска
|
||||
Could not acquire partitioning information. MainWindow Невозможно получить информацию о разделах.
|
||||
Cancel AbstractParametersPanel Отмена
|
||||
@@ -44,6 +44,7 @@ Change ChangeParametersPanel Изменить
|
||||
Are you sure you want to write the changes back to disk now?\n\nAll data on the disk %s will be irretrievably lost if you do so! MainWindow Вы уверены, что хотите записать изменения на диск прямо сейчас?\n\nВсе данные на диске %s будут безвозвратно потеряны, если вы продолжите!
|
||||
Are you sure you want to delete the selected partition?\n\nAll data on the partition will be irretrievably lost if you do so! MainWindow Вы уверены, что хотите удалить выбранный раздел?\n\nВсе данные на этом разделе будут безвозвратно потеряны, если вы продолжите!
|
||||
Create… MainWindow Создать…
|
||||
Are you sure you want to format a raw disk? (Most people initialize the disk with a partitioning system first) You will be asked again before changes are written to the disk. MainWindow Вы уверены, что хотите отформатировать весь диск? (Обычно на диске сначала создаются разделы) Повторный запрос будет выдан непосредственно перед записью изменений на диск.
|
||||
The disk has been successfully initialized.\n MainWindow Диск был успешно инициализирован.\n
|
||||
Could not unmount partition %s. MainWindow Невозможно отключить раздел %s.
|
||||
Failed to change the parameters of the partition. No changes have been written to disk. MainWindow Не удалось изменить параметры раздела. Изменения не были записаны на диск.
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
1 portuguese (brazil) x-vnd.Haiku-HaikuDepot 3134988464
|
||||
1 portuguese (brazil) x-vnd.Haiku-HaikuDepot 4123398005
|
||||
Name PackageListView Nome
|
||||
Available packages MainWindow Pacotes disponíveis
|
||||
Open %DeskbarLink% PackageManager Abrir %DeskbarLink%
|
||||
@@ -133,6 +133,7 @@ If you do not provide an email address, you will not be able to reset your passw
|
||||
Authentication failed. Connection to the service failed. UserLoginWindow Autenticação falhou. Conexão ao serviço falhou.
|
||||
Cancel RatePackageWindow Cancelar
|
||||
Package action failed PackageInfoView Ação do pacote falhou
|
||||
OK UserLoginWindow OK
|
||||
Send RatePackageWindow Enviar
|
||||
Failed to create account UserLoginWindow Falhou ao criar conta
|
||||
There are problems with the data you entered:\n\n UserLoginWindow Existem problemas com os dados que você inseriu:\n\n
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
1 russian x-vnd.Haiku-HaikuDepot 3588353727
|
||||
1 russian x-vnd.Haiku-HaikuDepot 4273323974
|
||||
Name PackageListView Имя
|
||||
Available packages MainWindow Доступные пакеты
|
||||
Open %DeskbarLink% PackageManager Открыть %DeskbarLink%
|
||||
@@ -53,6 +53,7 @@ The user name needs to be at least 3 letters long. UserLoginWindow Имя по
|
||||
Log in UserLoginWindow Войти…
|
||||
Repeat pass phrase: UserLoginWindow Повторить пароль:
|
||||
Ratings PackageInfoView Оценки
|
||||
But none could be listed here, sorry. UserLoginWindow Но не удалось определить с какими именно, извините.
|
||||
System & Utilities Model Система и утилиты
|
||||
Inactive PackageListView Неактивный
|
||||
Refresh depots MainWindow Обновить склады
|
||||
@@ -89,6 +90,7 @@ Failed to create or update rating: %s\n RatePackageWindow Не удалось
|
||||
You need to be logged into an account before you can rate packages. MainWindow Вы должны войти в свою учётную запись перед тем как оценить пакет.
|
||||
It responded with: RatePackageWindow Он ответил так:
|
||||
User name: UserLoginWindow Имя пользователя:
|
||||
User Menu MainWindow Меню пользователя
|
||||
Unstable but usable RatePackageWindow Нестабилен, но пригодный для использования
|
||||
The email address appears to be malformed. UserLoginWindow Некорректный адрес электронной почты.
|
||||
Games Model Игры
|
||||
@@ -131,6 +133,7 @@ If you do not provide an email address, you will not be able to reset your passw
|
||||
It responded with: UserLoginWindow Он ответил так:
|
||||
Authentication failed. Connection to the service failed. UserLoginWindow Неверный логин/пароль. Соединение с сервисом прервано.
|
||||
Cancel RatePackageWindow Отмена
|
||||
Package action failed PackageInfoView Действие с пакетом не удалось.
|
||||
OK UserLoginWindow OK
|
||||
Send RatePackageWindow Отправить
|
||||
- no package size -
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
1 hungarian x-vnd.Be-MAIL 233997769
|
||||
1 hungarian x-vnd.Be-MAIL 1310033600
|
||||
View Mail Nézet
|
||||
%d - Date Mail %d - dátum
|
||||
Attach attributes: Mail Jellemzők csatolása:
|
||||
@@ -146,6 +146,7 @@ Open attachment Mail Megnyitás
|
||||
sent B_USER_DIRECTORY/mail/sent Elküldött
|
||||
(Date unavailable) Mail (A dátum nem elérhető)
|
||||
Put your favorite e-mail queries and query templates in this folder. Mail Helyezze a kedvenc lekérdezéseket és a lekérdezési sablonokat ebbe a mappába.
|
||||
Spam Mail Levélszemét
|
||||
Reply Mail Válasz
|
||||
From: Mail Feladó:
|
||||
Couldn't open this signature. Sorry. Mail Sajnálom, de nem nyitható meg ez az aláírás.
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
1 polish x-vnd.Be-MAIL 233997769
|
||||
1 polish x-vnd.Be-MAIL 1310033600
|
||||
View Mail Widok
|
||||
%d - Date Mail %d - Data
|
||||
Attach attributes: Mail Dołączaj atrybuty:
|
||||
@@ -146,6 +146,7 @@ Open attachment Mail Otwórz załącznik
|
||||
sent B_USER_DIRECTORY/mail/sent sent
|
||||
(Date unavailable) Mail (Data niedostępna)
|
||||
Put your favorite e-mail queries and query templates in this folder. Mail Umieść swoje ulubione zapytania wiadomości i szablony zapytań w tym katalogu.
|
||||
Spam Mail Spam
|
||||
Reply Mail Odpowiedz
|
||||
From: Mail Od:
|
||||
Couldn't open this signature. Sorry. Mail Nie można otworzyć tej sygnaturki. Przepraszamy.
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
1 russian x-vnd.Be-MAIL 233997769
|
||||
1 russian x-vnd.Be-MAIL 1310033600
|
||||
View Mail Вид
|
||||
%d - Date Mail %d - Дата
|
||||
Attach attributes: Mail Прикрепление атрибутов:
|
||||
@@ -146,6 +146,7 @@ Open attachment Mail Открыть вложение
|
||||
sent B_USER_DIRECTORY/mail/sent Отправленные
|
||||
(Date unavailable) Mail (Дата недоступна)
|
||||
Put your favorite e-mail queries and query templates in this folder. Mail Перенесите в эту папку ваши почтовые запросы.
|
||||
Spam Mail Спам
|
||||
Reply Mail Ответить
|
||||
From: Mail От:
|
||||
Couldn't open this signature. Sorry. Mail Невозможно открыть эту подпись. Извините.
|
||||
|
||||
@@ -1,6 +1,8 @@
|
||||
1 russian x-vnd.Haiku-MediaConverter 3111641182
|
||||
1 russian x-vnd.Haiku-MediaConverter 341686525
|
||||
Video using parameters form settings MediaConverter Видео использует параметры из настроек
|
||||
{0, plural, one{The file was not recognized as a supported media file:} other{# files were not recognized as supported media files:}} MediaConverter {0, plural, one{Файл не был распознан как поддерживаемый медиафайл:} few{# файла не были распознаны как поддерживаемые медиафайлы:} other{# файлов не было распознано как поддерживаемые медиафайлы:}}
|
||||
Video encoding: MediaConverter Кодирование видео:
|
||||
%u x %u, %.2ffps MediaFileInfo Width x Height, fps %u x %u, %.2fкадр/с
|
||||
Error read audio frame %lld MediaConverter Ошибка чтения аудио кадра %lld
|
||||
No audio Audio codecs list Без аудио
|
||||
Error MediaConverter Ошибка
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
1 russian x-vnd.Haiku-Terminal 235954604
|
||||
1 russian x-vnd.Haiku-Terminal 2918699501
|
||||
Not found. Terminal TermWindow Текст не найден
|
||||
Switch Terminals Terminal TermWindow Переключить терминалы
|
||||
Change directory Terminal TermView Сменить каталог
|
||||
@@ -34,6 +34,7 @@ Settings Terminal TermWindow Настройки
|
||||
Window size Terminal TermWindow Размер окна
|
||||
Selected text Terminal AppearancePrefView Выделенного текста
|
||||
Find Terminal FindWindow Найти
|
||||
The pattern specifying the window titles. The following placeholders\ncan be used: Terminal AppearancePrefView Этот шаблон описывает заголовки окна.\nВозможно использовать следующие переменные:\n
|
||||
Appearance Terminal PrefWindow Внешний вид
|
||||
Tab title: Terminal AppearancePrefView Заголовок вкладки:
|
||||
OK Terminal SetTitleWindow ОК
|
||||
@@ -76,6 +77,7 @@ Midnight Terminal colors scheme Полночь
|
||||
Decrease Terminal TermWindow Уменьшить
|
||||
Default Terminal colors scheme По умолчанию
|
||||
Create link here Terminal TermView Создать ссылку здесь
|
||||
The pattern specifying the tab titles. The following placeholders\ncan be used: Terminal AppearancePrefView Этот шаблон описывает заголовки вкладок.\nВозможно использовать следующие переменные:
|
||||
Close Terminal TermWindow Закрыть
|
||||
Text Terminal AppearancePrefView Текста
|
||||
Clear all Terminal TermWindow Очистить всё
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
1 german x-vnd.Haiku-libtracker 3987439873
|
||||
1 german x-vnd.Haiku-libtracker 1787267522
|
||||
OK WidgetAttributeText OK
|
||||
Add-ons FilePanelPriv Add-ons
|
||||
Mount settings… ContainerWindow Einhänge-Einstellungen…
|
||||
@@ -19,6 +19,7 @@ Modified QueryPoseView Geändert
|
||||
Created ContainerWindow Erstellt
|
||||
Error %error loading add-On %name. ContainerWindow Fehler %error beim Laden von Add-On %name.
|
||||
If you %ifYouDoAction the settings folder, %osName may not behave properly!\n\nAre you sure you want to do this? FSUtils Wird der Settings-Ordner %ifYouDoAction, kann %osName vielleicht nicht mehr fehlerfrei arbeiten!
|
||||
Skip all FSUtils Alle überspringen
|
||||
contains SelectionWindow enthält
|
||||
Sorry, you can't save things at the root of your system. FilePanelPriv Im Root-Verzeichnis des Systems kann leider nichts gespeichert werden.
|
||||
Show shared volumes on Desktop SettingsView Netzwerk-Laufwerke auf dem Desktop zeigen
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
1 french x-vnd.Haiku-libtracker 4204393626
|
||||
1 french x-vnd.Haiku-libtracker 2004221275
|
||||
OK WidgetAttributeText OK
|
||||
Add-ons FilePanelPriv Extensions
|
||||
Mount settings… ContainerWindow Réglages du montage…
|
||||
@@ -19,6 +19,7 @@ Modified QueryPoseView Modifié
|
||||
Created ContainerWindow Créé
|
||||
Error %error loading add-On %name. ContainerWindow Erreur %error au chargement de l’extension %name.
|
||||
If you %ifYouDoAction the settings folder, %osName may not behave properly!\n\nAre you sure you want to do this? FSUtils Si vous %ifYouDoAction le dossier des réglages, %osName pourrait ne pas se comporter correctement !\n\nÊtes vous sûr de vouloir effectuer cette opération ?
|
||||
Skip all FSUtils Tout ignorer
|
||||
contains SelectionWindow contient
|
||||
Sorry, you can't save things at the root of your system. FilePanelPriv Désolé, vous ne pouvez rien sauvegarder à la racine de votre système.
|
||||
Show shared volumes on Desktop SettingsView Afficher les volumes partagés sur le Bureau
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
1 hungarian x-vnd.Haiku-libtracker 4204393626
|
||||
1 hungarian x-vnd.Haiku-libtracker 2004221275
|
||||
OK WidgetAttributeText Rendben
|
||||
Add-ons FilePanelPriv Kiegészítők
|
||||
Mount settings… ContainerWindow Csatolási beállítások…
|
||||
@@ -19,6 +19,7 @@ Modified QueryPoseView Módosítva
|
||||
Created ContainerWindow Létrehozva
|
||||
Error %error loading add-On %name. ContainerWindow Hiba a bővítmény (%name) betöltése közben: %error.
|
||||
If you %ifYouDoAction the settings folder, %osName may not behave properly!\n\nAre you sure you want to do this? FSUtils Ha %ifYouDoAction a beállítások mappát, akkor lehet, hogy a %osName nem fog megfelelően működni!\n\nBiztosan folytatni akarja?
|
||||
Skip all FSUtils Mindet kihagyja
|
||||
contains SelectionWindow tartalmaz
|
||||
Sorry, you can't save things at the root of your system. FilePanelPriv Sajnos nem lehet a rendszer gyökérmappájába menteni.
|
||||
Show shared volumes on Desktop SettingsView Megosztott lemezek megjelenítése az Asztalon
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
1 japanese x-vnd.Haiku-libtracker 4204393626
|
||||
1 japanese x-vnd.Haiku-libtracker 2004221275
|
||||
OK WidgetAttributeText OK
|
||||
Add-ons FilePanelPriv アドオン
|
||||
Mount settings… ContainerWindow マウント設定…
|
||||
@@ -19,6 +19,7 @@ Modified QueryPoseView 更新日時
|
||||
Created ContainerWindow 作成日時
|
||||
Error %error loading add-On %name. ContainerWindow %nameアドオンの読み込み中に%errorエラーが発生
|
||||
If you %ifYouDoAction the settings folder, %osName may not behave properly!\n\nAre you sure you want to do this? FSUtils settings フォルダーを%ifYouDoActionした場合、%osName が正常に動作しなくなる可能性があります。\n\n続けますか?
|
||||
Skip all FSUtils すべてスキップ
|
||||
contains SelectionWindow 含む
|
||||
Sorry, you can't save things at the root of your system. FilePanelPriv システムのルートフォルダーに保存は許可されていません。
|
||||
Show shared volumes on Desktop SettingsView 共有ディスクをデスクトップに表示する
|
||||
|
||||
@@ -316,6 +316,16 @@
|
||||
entry_cache_add() function when it encounters an entry that might not yet
|
||||
be known to the entry cache and entry_cache_remove() when a directory
|
||||
entry has been removed.
|
||||
The entry cache can also be used for negative caching. If the file system
|
||||
determines that the requested entry is not present during a lookup, it can
|
||||
cache this lookup failure by calling entry_cache_add_missing(). Further
|
||||
calls to fs_vnode_ops::lookup() for the missing entry will then be
|
||||
avoided.
|
||||
Note that it is safe to call entry_cache_add() and
|
||||
entry_cache_add_missing() with the same directory/name pair previously
|
||||
given to either function to update a cache entry, without needing to call
|
||||
entry_cache_remove() first. It is also safe to call entry_cache_remove()
|
||||
for pairs that have never been added to the cache.
|
||||
*/
|
||||
|
||||
// TODO:
|
||||
|
||||
@@ -408,7 +408,7 @@ int32 button_index = alert->Go();
|
||||
|
||||
/*!
|
||||
\fn BTextView* BAlert::TextView() const
|
||||
\brief Returns a TextView containing the text of the Alert.
|
||||
\brief Returns the Alert's TextView.
|
||||
|
||||
\since BeOS R3
|
||||
*/
|
||||
|
||||
@@ -183,7 +183,9 @@ private:
|
||||
const BList* messageList, int argc,
|
||||
const char* const* args,
|
||||
const char** environment,
|
||||
team_id* appTeam) const;
|
||||
team_id* appTeam,
|
||||
thread_id* appThread,
|
||||
bool launchSuspended) const;
|
||||
|
||||
status_t _UpdateActiveApp(team_id team) const;
|
||||
|
||||
|
||||
@@ -104,6 +104,8 @@ extern status_t file_map_translate(void *map, off_t offset, size_t size,
|
||||
/* entry cache */
|
||||
extern status_t entry_cache_add(dev_t mountID, ino_t dirID, const char* name,
|
||||
ino_t nodeID);
|
||||
extern status_t entry_cache_add_missing(dev_t mountID, ino_t dirID,
|
||||
const char* name);
|
||||
extern status_t entry_cache_remove(dev_t mountID, ino_t dirID,
|
||||
const char* name);
|
||||
|
||||
|
||||
@@ -10,8 +10,7 @@ class BList;
|
||||
class BMidiLocalProducer;
|
||||
class BMidiLocalConsumer;
|
||||
|
||||
class BMidi
|
||||
{
|
||||
class BMidi {
|
||||
public:
|
||||
|
||||
BMidi();
|
||||
|
||||
@@ -15,6 +15,8 @@
|
||||
/* Synthesizer things */
|
||||
|
||||
#define B_SYNTH_DIRECTORY B_SYSTEM_DATA_DIRECTORY
|
||||
|
||||
/* Deprecated */
|
||||
#define B_BIG_SYNTH_FILE "synth/big_synth.sy"
|
||||
#define B_LITTLE_SYNTH_FILE "synth/little_synth.sy"
|
||||
|
||||
|
||||
@@ -9,8 +9,7 @@ class BMidiProducer;
|
||||
|
||||
namespace BPrivate { class BMidiPortGlue; }
|
||||
|
||||
class BMidiPort : public BMidi
|
||||
{
|
||||
class BMidiPort : public BMidi {
|
||||
public:
|
||||
|
||||
BMidiPort(const char* name = NULL);
|
||||
|
||||
@@ -12,8 +12,7 @@ class BFile;
|
||||
class BList;
|
||||
class BMidiEvent;
|
||||
|
||||
class BMidiStore : public BMidi
|
||||
{
|
||||
class BMidiStore : public BMidi {
|
||||
public:
|
||||
|
||||
BMidiStore();
|
||||
|
||||
@@ -9,8 +9,7 @@
|
||||
|
||||
class BSynth;
|
||||
|
||||
class BMidiSynth : public BMidi
|
||||
{
|
||||
class BMidiSynth : public BMidi {
|
||||
public:
|
||||
|
||||
BMidiSynth();
|
||||
|
||||
@@ -10,8 +10,7 @@ typedef void (*synth_file_hook)(int32 arg);
|
||||
|
||||
class BMidiStore;
|
||||
|
||||
class BMidiSynthFile : public BMidiSynth
|
||||
{
|
||||
class BMidiSynthFile : public BMidiSynth {
|
||||
public:
|
||||
|
||||
BMidiSynthFile();
|
||||
|
||||
@@ -6,8 +6,7 @@
|
||||
#include <Midi.h>
|
||||
#include <stdio.h>
|
||||
|
||||
class BMidiText : public BMidi
|
||||
{
|
||||
class BMidiText : public BMidi {
|
||||
public:
|
||||
|
||||
BMidiText();
|
||||
|
||||
@@ -3,7 +3,7 @@
|
||||
* Distributed under the terms of the MIT License.
|
||||
*/
|
||||
|
||||
/* Include guards are omitted, as assert.h is required
|
||||
/* Include guards are only on part of the file, as assert.h is required
|
||||
to support being included multiple times.
|
||||
|
||||
E.g. the following is required to be valid:
|
||||
@@ -24,6 +24,9 @@
|
||||
#ifndef NDEBUG
|
||||
/* defining NDEBUG disables assert() functionality */
|
||||
|
||||
#ifndef _ASSERT_H_
|
||||
#define _ASSERT_H_
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
@@ -40,6 +43,8 @@ extern void __assert_perror_fail(int error, const char *file,
|
||||
}
|
||||
#endif
|
||||
|
||||
#endif /* !_ASSERT_H_ */
|
||||
|
||||
#define assert(assertion) \
|
||||
((assertion) ? (void)0 : __assert_fail(#assertion, __FILE__, __LINE__, __PRETTY_FUNCTION__))
|
||||
|
||||
|
||||
@@ -30,9 +30,10 @@ class BRoster::Private {
|
||||
|
||||
status_t Launch(const char* mimeType, const entry_ref* ref,
|
||||
const BList* messageList, int argc, const char* const* args,
|
||||
const char** environment, team_id* appTeam)
|
||||
const char** environment, team_id* appTeam,
|
||||
thread_id* appThread, bool launchSuspended)
|
||||
{ return fRoster->_LaunchApp(mimeType, ref, messageList, argc,
|
||||
args, environment, appTeam); }
|
||||
args, environment, appTeam, appThread, launchSuspended); }
|
||||
|
||||
status_t ShutDown(bool reboot, bool confirm, bool synchronous)
|
||||
{ return fRoster->_ShutDown(reboot, confirm, synchronous); }
|
||||
|
||||
@@ -871,6 +871,7 @@
|
||||
|
||||
/* entry cache */
|
||||
#define entry_cache_add fssh_entry_cache_add
|
||||
#define entry_cache_add_missing fssh_entry_cache_add_missing
|
||||
#define entry_cache_remove fssh_entry_cache_remove
|
||||
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
@@ -126,6 +126,8 @@ extern fssh_status_t fssh_file_map_translate(void *_map, fssh_off_t offset,
|
||||
extern fssh_status_t fssh_entry_cache_add(fssh_dev_t mountID,
|
||||
fssh_ino_t dirID, const char* name,
|
||||
fssh_ino_t nodeID);
|
||||
extern fssh_status_t fssh_entry_cache_add_missing(fssh_dev_t mountID,
|
||||
fssh_ino_t dirID, const char* name);
|
||||
extern fssh_status_t fssh_entry_cache_remove(fssh_dev_t mountID,
|
||||
fssh_ino_t dirID, const char* name);
|
||||
|
||||
|
||||
@@ -0,0 +1,168 @@
|
||||
/*
|
||||
* Copyright 2004 DarkWyrm <[email protected]>
|
||||
* Copyright 2013 FeemanLou
|
||||
* Copyright 2014-2015 Haiku, Inc. All rights reserved.
|
||||
*
|
||||
* Distributed under the terms of the MIT license.
|
||||
*
|
||||
* Originally written by DarkWyrm <[email protected]>
|
||||
* Updated by FreemanLou as part of Google GCI 2013
|
||||
*
|
||||
* Authors:
|
||||
* DarkWyrm, [email protected]
|
||||
* FeemanLou
|
||||
* John Scipione, [email protected]
|
||||
*/
|
||||
#ifndef _ABSTRACT_SPINNER_H
|
||||
#define _ABSTRACT_SPINNER_H
|
||||
|
||||
|
||||
#include <Control.h>
|
||||
|
||||
|
||||
typedef enum {
|
||||
SPINNER_BUTTON_HORIZONTAL_ARROWS,
|
||||
SPINNER_BUTTON_VERTICAL_ARROWS,
|
||||
SPINNER_BUTTON_PLUS_MINUS
|
||||
} spinner_button_style;
|
||||
|
||||
|
||||
class BTextView;
|
||||
class SpinnerButton;
|
||||
class SpinnerTextView;
|
||||
|
||||
|
||||
/*! BAbstractSpinner provides an input whose value can be nudged up or down
|
||||
by way of two small buttons on the right.
|
||||
*/
|
||||
class BAbstractSpinner : public BControl {
|
||||
public:
|
||||
BAbstractSpinner(BRect frame, const char* name,
|
||||
const char* label, BMessage* message,
|
||||
uint32 resizingMode = B_FOLLOW_LEFT | B_FOLLOW_TOP,
|
||||
uint32 flags = B_WILL_DRAW | B_NAVIGABLE);
|
||||
BAbstractSpinner(const char* name, const char* label,
|
||||
BMessage* message,
|
||||
uint32 flags = B_WILL_DRAW | B_NAVIGABLE);
|
||||
BAbstractSpinner(BMessage* data);
|
||||
virtual ~BAbstractSpinner();
|
||||
|
||||
static BArchivable* Instantiate(BMessage* data);
|
||||
virtual status_t Archive(BMessage* data, bool deep = true) const;
|
||||
|
||||
virtual status_t GetSupportedSuites(BMessage* message);
|
||||
virtual BHandler* ResolveSpecifier(BMessage* message, int32 index,
|
||||
BMessage* specifier, int32 form,
|
||||
const char* property);
|
||||
|
||||
virtual void AttachedToWindow();
|
||||
virtual void Draw(BRect updateRect);
|
||||
virtual void FrameResized(float width, float height);
|
||||
virtual void ValueChanged();
|
||||
|
||||
virtual void Decrement() = 0;
|
||||
virtual void Increment() = 0;
|
||||
virtual void MakeFocus(bool focus = true);
|
||||
virtual void ResizeToPreferred();
|
||||
virtual void SetFlags(uint32 flags);
|
||||
virtual void WindowActivated(bool active);
|
||||
|
||||
alignment Alignment() const { return fAlignment; };
|
||||
virtual void SetAlignment(alignment align);
|
||||
|
||||
spinner_button_style ButtonStyle() const { return fButtonStyle; };
|
||||
virtual void SetButtonStyle(spinner_button_style buttonStyle);
|
||||
|
||||
float Divider() const { return fDivider; };
|
||||
virtual void SetDivider(float position);
|
||||
|
||||
virtual void SetEnabled(bool enable);
|
||||
|
||||
virtual void SetLabel(const char* label);
|
||||
|
||||
virtual void SetValueFromText() = 0;
|
||||
|
||||
bool IsDecrementEnabled() const;
|
||||
virtual void SetDecrementEnabled(bool enable);
|
||||
|
||||
bool IsIncrementEnabled() const;
|
||||
virtual void SetIncrementEnabled(bool enable);
|
||||
|
||||
virtual BSize MinSize();
|
||||
virtual BSize MaxSize();
|
||||
virtual BSize PreferredSize();
|
||||
virtual BAlignment LayoutAlignment();
|
||||
|
||||
BLayoutItem* CreateLabelLayoutItem();
|
||||
BLayoutItem* CreateTextViewLayoutItem();
|
||||
|
||||
BTextView* TextView() const;
|
||||
|
||||
private:
|
||||
// FBC padding
|
||||
virtual void _ReservedAbstractSpinner20();
|
||||
virtual void _ReservedAbstractSpinner19();
|
||||
virtual void _ReservedAbstractSpinner18();
|
||||
virtual void _ReservedAbstractSpinner17();
|
||||
virtual void _ReservedAbstractSpinner16();
|
||||
virtual void _ReservedAbstractSpinner15();
|
||||
virtual void _ReservedAbstractSpinner14();
|
||||
virtual void _ReservedAbstractSpinner13();
|
||||
virtual void _ReservedAbstractSpinner12();
|
||||
virtual void _ReservedAbstractSpinner11();
|
||||
virtual void _ReservedAbstractSpinner10();
|
||||
virtual void _ReservedAbstractSpinner9();
|
||||
virtual void _ReservedAbstractSpinner8();
|
||||
virtual void _ReservedAbstractSpinner7();
|
||||
virtual void _ReservedAbstractSpinner6();
|
||||
virtual void _ReservedAbstractSpinner5();
|
||||
virtual void _ReservedAbstractSpinner4();
|
||||
virtual void _ReservedAbstractSpinner3();
|
||||
virtual void _ReservedAbstractSpinner2();
|
||||
virtual void _ReservedAbstractSpinner1();
|
||||
|
||||
protected:
|
||||
virtual status_t AllArchived(BMessage* into) const;
|
||||
virtual status_t AllUnarchived(const BMessage* from);
|
||||
|
||||
virtual void LayoutInvalidated(bool descendants);
|
||||
virtual void DoLayout();
|
||||
|
||||
private:
|
||||
class LabelLayoutItem;
|
||||
class TextViewLayoutItem;
|
||||
struct LayoutData;
|
||||
|
||||
friend class SpinnerButton;
|
||||
friend class SpinnerTextView;
|
||||
|
||||
friend class LabelLayoutItem;
|
||||
friend class TextViewLayoutItem;
|
||||
friend struct LayoutData;
|
||||
|
||||
void _DrawLabel(BRect updateRect);
|
||||
void _DrawTextView(BRect updateRect);
|
||||
void _InitObject();
|
||||
void _LayoutTextView();
|
||||
void _UpdateFrame();
|
||||
void _UpdateTextViewColors(bool enable);
|
||||
void _ValidateLayoutData();
|
||||
|
||||
BAbstractSpinner& operator=(const BAbstractSpinner& other);
|
||||
|
||||
alignment fAlignment;
|
||||
spinner_button_style fButtonStyle;
|
||||
float fDivider;
|
||||
|
||||
LayoutData* fLayoutData;
|
||||
|
||||
SpinnerTextView* fTextView;
|
||||
SpinnerButton* fIncrement;
|
||||
SpinnerButton* fDecrement;
|
||||
|
||||
// FBC padding
|
||||
uint32 _reserved[20];
|
||||
};
|
||||
|
||||
|
||||
#endif // _ABSTRACT_SPINNER_H
|
||||
@@ -0,0 +1,96 @@
|
||||
/*
|
||||
* Copyright 2015 Haiku, Inc. All rights reserved.
|
||||
* Distributed under the terms of the MIT license.
|
||||
*
|
||||
* Authors:
|
||||
* John Scipione, [email protected]
|
||||
*/
|
||||
#ifndef _DECIMAL_SPINNER_H
|
||||
#define _DECIMAL_SPINNER_H
|
||||
|
||||
|
||||
#include <Spinner.h>
|
||||
|
||||
|
||||
class BDecimalSpinner : public BAbstractSpinner {
|
||||
public:
|
||||
BDecimalSpinner(BRect frame, const char* name,
|
||||
const char* label, BMessage* message,
|
||||
uint32 resizingMode = B_FOLLOW_LEFT | B_FOLLOW_TOP,
|
||||
uint32 flags = B_WILL_DRAW | B_NAVIGABLE);
|
||||
BDecimalSpinner(const char* name, const char* label,
|
||||
BMessage* message,
|
||||
uint32 flags = B_WILL_DRAW | B_NAVIGABLE);
|
||||
BDecimalSpinner(BMessage* data);
|
||||
virtual ~BDecimalSpinner();
|
||||
|
||||
static BArchivable* Instantiate(BMessage* data);
|
||||
virtual status_t Archive(BMessage* data, bool deep = true) const;
|
||||
|
||||
virtual status_t GetSupportedSuites(BMessage* message);
|
||||
|
||||
virtual void AttachedToWindow();
|
||||
|
||||
virtual void Increment();
|
||||
virtual void Decrement();
|
||||
|
||||
virtual void SetEnabled(bool enable);
|
||||
|
||||
uint32 Precision() const { return fPrecision; };
|
||||
virtual void SetPrecision(uint32 precision) { fPrecision = precision; };
|
||||
|
||||
double MaxValue() const { return fMaxValue; }
|
||||
virtual void SetMaxValue(double max);
|
||||
|
||||
double MinValue() const { return fMinValue; }
|
||||
virtual void SetMinValue(double min);
|
||||
|
||||
void Range(double* min, double* max);
|
||||
virtual void SetRange(double min, double max);
|
||||
|
||||
double Step() const { return fStep; }
|
||||
virtual void SetStep(double step) { fStep = step; };
|
||||
|
||||
double Value() const { return fValue; };
|
||||
virtual void SetValue(int32 value);
|
||||
virtual void SetValue(double value);
|
||||
virtual void SetValueFromText();
|
||||
|
||||
private:
|
||||
// FBC padding
|
||||
virtual void _ReservedDecimalSpinner20();
|
||||
virtual void _ReservedDecimalSpinner19();
|
||||
virtual void _ReservedDecimalSpinner18();
|
||||
virtual void _ReservedDecimalSpinner17();
|
||||
virtual void _ReservedDecimalSpinner16();
|
||||
virtual void _ReservedDecimalSpinner15();
|
||||
virtual void _ReservedDecimalSpinner14();
|
||||
virtual void _ReservedDecimalSpinner13();
|
||||
virtual void _ReservedDecimalSpinner12();
|
||||
virtual void _ReservedDecimalSpinner11();
|
||||
virtual void _ReservedDecimalSpinner10();
|
||||
virtual void _ReservedDecimalSpinner9();
|
||||
virtual void _ReservedDecimalSpinner8();
|
||||
virtual void _ReservedDecimalSpinner7();
|
||||
virtual void _ReservedDecimalSpinner6();
|
||||
virtual void _ReservedDecimalSpinner5();
|
||||
virtual void _ReservedDecimalSpinner4();
|
||||
virtual void _ReservedDecimalSpinner3();
|
||||
virtual void _ReservedDecimalSpinner2();
|
||||
virtual void _ReservedDecimalSpinner1();
|
||||
|
||||
private:
|
||||
void _InitObject();
|
||||
|
||||
double fMinValue;
|
||||
double fMaxValue;
|
||||
double fStep;
|
||||
double fValue;
|
||||
uint32 fPrecision;
|
||||
|
||||
// FBC padding
|
||||
uint32 _reserved[20];
|
||||
};
|
||||
|
||||
|
||||
#endif // _DECIMAL_SPINNER_H
|
||||
@@ -0,0 +1,87 @@
|
||||
/*
|
||||
* Copyright 2015 Haiku, Inc. All rights reserved.
|
||||
* Distributed under the terms of the MIT license.
|
||||
*
|
||||
* Authors:
|
||||
* John Scipione, [email protected]
|
||||
*/
|
||||
#ifndef _SPINNER_H
|
||||
#define _SPINNER_H
|
||||
|
||||
|
||||
#include <AbstractSpinner.h>
|
||||
|
||||
|
||||
class BSpinner : public BAbstractSpinner {
|
||||
public:
|
||||
BSpinner(BRect frame, const char* name,
|
||||
const char* label, BMessage* message,
|
||||
uint32 resizingMode = B_FOLLOW_LEFT | B_FOLLOW_TOP,
|
||||
uint32 flags = B_WILL_DRAW | B_NAVIGABLE);
|
||||
BSpinner(const char* name, const char* label,
|
||||
BMessage* message,
|
||||
uint32 flags = B_WILL_DRAW | B_NAVIGABLE);
|
||||
BSpinner(BMessage* data);
|
||||
virtual ~BSpinner();
|
||||
|
||||
static BArchivable* Instantiate(BMessage* data);
|
||||
virtual status_t Archive(BMessage* data, bool deep = true) const;
|
||||
|
||||
virtual void Increment();
|
||||
virtual void Decrement();
|
||||
|
||||
virtual status_t GetSupportedSuites(BMessage* message);
|
||||
|
||||
virtual void AttachedToWindow();
|
||||
|
||||
virtual void SetEnabled(bool enable);
|
||||
|
||||
int32 MaxValue() const { return fMaxValue; }
|
||||
virtual void SetMaxValue(int32 max);
|
||||
|
||||
int32 MinValue() const { return fMinValue; }
|
||||
virtual void SetMinValue(int32 min);
|
||||
|
||||
void Range(int32* min, int32* max);
|
||||
virtual void SetRange(int32 min, int32 max);
|
||||
|
||||
int32 Value() const { return fValue; };
|
||||
virtual void SetValue(int32 value);
|
||||
virtual void SetValueFromText();
|
||||
|
||||
private:
|
||||
// FBC padding
|
||||
virtual void _ReservedSpinner20();
|
||||
virtual void _ReservedSpinner19();
|
||||
virtual void _ReservedSpinner18();
|
||||
virtual void _ReservedSpinner17();
|
||||
virtual void _ReservedSpinner16();
|
||||
virtual void _ReservedSpinner15();
|
||||
virtual void _ReservedSpinner14();
|
||||
virtual void _ReservedSpinner13();
|
||||
virtual void _ReservedSpinner12();
|
||||
virtual void _ReservedSpinner11();
|
||||
virtual void _ReservedSpinner10();
|
||||
virtual void _ReservedSpinner9();
|
||||
virtual void _ReservedSpinner8();
|
||||
virtual void _ReservedSpinner7();
|
||||
virtual void _ReservedSpinner6();
|
||||
virtual void _ReservedSpinner5();
|
||||
virtual void _ReservedSpinner4();
|
||||
virtual void _ReservedSpinner3();
|
||||
virtual void _ReservedSpinner2();
|
||||
virtual void _ReservedSpinner1();
|
||||
|
||||
private:
|
||||
void _InitObject();
|
||||
|
||||
int32 fMinValue;
|
||||
int32 fMaxValue;
|
||||
int32 fValue;
|
||||
|
||||
// FBC padding
|
||||
uint32 _reserved[20];
|
||||
};
|
||||
|
||||
|
||||
#endif // _SPINNER_H
|
||||
@@ -302,7 +302,7 @@ thread_is_blocked(Thread* thread)
|
||||
especially with a client lock that uses the thread blocking API. After a
|
||||
blocked thread has been interrupted or the the time out occurred it cannot
|
||||
acquire the client lock (or any other lock using the thread blocking API)
|
||||
without first making sure that the thread doesn't still appears to be
|
||||
without first making sure that the thread doesn't still appear to be
|
||||
waiting to other client code. Otherwise another thread could try to unblock
|
||||
it which could erroneously unblock the thread while already waiting on the
|
||||
client lock. So usually when interruptions or timeouts are possible a
|
||||
|
||||
@@ -33,8 +33,8 @@ status_t __flatten_process_args(const char* const* args, int32 argCount,
|
||||
char*** _flatArgs, size_t* _flatSize);
|
||||
void _call_atexit_hooks_for_range(addr_t start, addr_t size);
|
||||
void __init_env(const struct user_space_program_args *args);
|
||||
void __init_env_post_heap(void);
|
||||
status_t __init_heap(void);
|
||||
void __init_heap_post_env(void);
|
||||
void __heap_terminate_after(void);
|
||||
|
||||
void __init_time(addr_t commPageTable);
|
||||
|
||||
@@ -37,6 +37,8 @@ public:
|
||||
BMediaRosterEx(status_t* out_error);
|
||||
virtual ~BMediaRosterEx();
|
||||
|
||||
virtual void Quit();
|
||||
|
||||
status_t SaveNodeConfiguration(BMediaNode* node);
|
||||
status_t LoadNodeConfiguration(media_addon_id addonid,
|
||||
int32 flavorid, BMessage* out_msg);
|
||||
|
||||
@@ -0,0 +1,24 @@
|
||||
/*
|
||||
* Copyright 2015 Haiku, Inc. All rights reserved.
|
||||
* Distributed under the terms of the MIT License.
|
||||
*/
|
||||
|
||||
#ifndef MIDI_SETTINGS_PRIVATE_H_
|
||||
#define MIDI_SETTINGS_PRIVATE_H_
|
||||
|
||||
#include <StorageDefs.h>
|
||||
#include <SupportDefs.h>
|
||||
|
||||
namespace BPrivate {
|
||||
|
||||
struct midi_settings {
|
||||
char soundfont_file[B_FILE_NAME_LENGTH];
|
||||
};
|
||||
|
||||
status_t read_midi_settings(struct midi_settings* settings);
|
||||
status_t write_midi_settings(struct midi_settings settings);
|
||||
|
||||
};
|
||||
|
||||
|
||||
#endif /* MIDI_SETTINGS_PRIVATE_H_ */
|
||||
@@ -38,7 +38,8 @@ enum {
|
||||
CAP_PMD = (1 << 15), // PIO Multiple DRQ Block
|
||||
CAP_SSC = (1 << 14), // Slumber State Capable
|
||||
CAP_PSC = (1 << 13), // Partial State Capable
|
||||
CAP_NCS_MASK = 0x1f, // Number of Command Slots (zero-based number)
|
||||
CAP_NCS_MASK = 0x1f, // Number of Command Slots
|
||||
// (zero-based number)
|
||||
CAP_NCS_SHIFT = 8,
|
||||
CAP_CCCS = (1 << 7), // Command Completion Coalescing Supported
|
||||
CAP_EMS = (1 << 6), // Enclosure Management Supported
|
||||
@@ -73,12 +74,33 @@ enum {
|
||||
INT_SDB = (1 << 3), // Set Device Bits Interrupt/Enable
|
||||
INT_DS = (1 << 2), // DMA Setup FIS Interrupt/Enable
|
||||
INT_PS = (1 << 1), // PIO Setup FIS Interrupt/Enable
|
||||
INT_DHR = (1 << 0), // Device to Host Register FIS Interrupt/Enable
|
||||
INT_DHR = (1 << 0), // Device to Host Register FIS
|
||||
// Interrupt/Enable
|
||||
};
|
||||
|
||||
|
||||
// Device Detection Initialization
|
||||
#define SATA_CONTROL_DET_SHIFT 0
|
||||
#define SATA_CONTROL_DET_MASK 0x0000000f
|
||||
|
||||
#define DET_NO_INITIALIZATION 0x0
|
||||
#define DET_INITIALIZATION 0x1
|
||||
|
||||
// Speed Allowed
|
||||
#define SATA_CONTROL_SPD_SHIFT 4
|
||||
#define SATA_CONTROL_SPD_MASK 0x000000f0
|
||||
|
||||
// Interface Power Management Transitions Allowed
|
||||
#define SATA_CONTROL_IPM_SHIFT 8
|
||||
#define SATA_CONTROL_IPM_MASK 0x00000f00
|
||||
|
||||
#define IPM_TRANSITIONS_TO_PARTIAL_DISABLED 0x1
|
||||
#define IPM_TRANSITIONS_TO_SLUMBER_DISABLED 0x2
|
||||
|
||||
|
||||
typedef struct {
|
||||
uint32 clb; // Command List Base Address (alignment 1024 byte)
|
||||
uint32 clb; // Command List Base Address
|
||||
// (alignment 1024 byte)
|
||||
uint32 clbu; // Command List Base Address Upper 32-Bits
|
||||
uint32 fb; // FIS Base Address (alignment 256 byte)
|
||||
uint32 fbu; // FIS Base Address Upper 32-Bits
|
||||
@@ -181,7 +203,8 @@ enum {
|
||||
|
||||
enum {
|
||||
CAP2_DESO = (1 << 5), // DevSleep Entrance from Slumber Only
|
||||
CAP2_SADM = (1 << 4), // Supports Aggressive Device Sleep Management
|
||||
CAP2_SADM = (1 << 4), // Supports Aggressive Device Sleep
|
||||
// Management
|
||||
CAP2_SDS = (1 << 3), // Supports Device Sleep
|
||||
CAP2_APST = (1 << 2), // Automatic Partial to Slumber Transitions
|
||||
CAP2_NVMP = (1 << 1), // NVMHCI Present
|
||||
@@ -232,7 +255,8 @@ typedef struct {
|
||||
uint16 c : 1; // Clear Busy upon R_OK
|
||||
uint16 : 1;
|
||||
uint16 pmp : 4; // Port Multiplier Port
|
||||
uint16 prdtl; // physical region description table length;
|
||||
uint16 prdtl; // physical region description table
|
||||
// length;
|
||||
} _PACKED;
|
||||
uint32 prdtl_flags_cfl;
|
||||
} _PACKED;
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright 2008-2014 Haiku, Inc. All rights reserved.
|
||||
* Copyright 2008-2015 Haiku, Inc. All rights reserved.
|
||||
* Copyright 2007-2009, Marcus Overhagen. All rights reserved.
|
||||
* Distributed under the terms of the MIT License.
|
||||
*/
|
||||
@@ -110,7 +110,9 @@ AHCIPort::Init1()
|
||||
// prdt follows after command table
|
||||
|
||||
// disable transitions to partial or slumber state
|
||||
fRegs->sctl |= 0x300;
|
||||
fRegs->sctl = (fRegs->sctl & ~SATA_CONTROL_IPM_MASK)
|
||||
| (IPM_TRANSITIONS_TO_PARTIAL_DISABLED
|
||||
| IPM_TRANSITIONS_TO_SLUMBER_DISABLED) << SATA_CONTROL_IPM_SHIFT;
|
||||
|
||||
// clear IRQ status bits
|
||||
fRegs->is = fRegs->is;
|
||||
@@ -156,7 +158,12 @@ AHCIPort::Init2()
|
||||
TRACE("is 0x%08" B_PRIx32 "\n", fRegs->is);
|
||||
TRACE("cmd 0x%08" B_PRIx32 "\n", fRegs->cmd);
|
||||
TRACE("ssts 0x%08" B_PRIx32 "\n", fRegs->ssts);
|
||||
TRACE("sctl 0x%08" B_PRIx32 "\n", fRegs->sctl);
|
||||
TRACE("sctl.ipm 0x%02" B_PRIx32 "\n",
|
||||
(fRegs->sctl & SATA_CONTROL_IPM_MASK) >> SATA_CONTROL_IPM_SHIFT);
|
||||
TRACE("sctl.spd 0x%02" B_PRIx32 "\n",
|
||||
(fRegs->sctl & SATA_CONTROL_SPD_MASK) >> SATA_CONTROL_SPD_SHIFT);
|
||||
TRACE("sctl.det 0x%02" B_PRIx32 "\n",
|
||||
(fRegs->sctl & SATA_CONTROL_DET_MASK) >> SATA_CONTROL_DET_SHIFT);
|
||||
TRACE("serr 0x%08" B_PRIx32 "\n", fRegs->serr);
|
||||
TRACE("sact 0x%08" B_PRIx32 "\n", fRegs->sact);
|
||||
TRACE("tfd 0x%08" B_PRIx32 "\n", fRegs->tfd);
|
||||
@@ -208,23 +215,13 @@ AHCIPort::Uninit()
|
||||
void
|
||||
AHCIPort::ResetDevice()
|
||||
{
|
||||
if (fRegs->cmd & PORT_CMD_ST)
|
||||
TRACE("AHCIPort::ResetDevice PORT_CMD_ST set, behaviour undefined\n");
|
||||
|
||||
// perform a hard reset
|
||||
fRegs->sctl = (fRegs->sctl & ~0xf) | 1;
|
||||
FlushPostedWrites();
|
||||
spin(1100);
|
||||
fRegs->sctl &= ~0xf;
|
||||
FlushPostedWrites();
|
||||
_HardReset();
|
||||
|
||||
if (wait_until_set(&fRegs->ssts, 0x1, 100000) < B_OK) {
|
||||
if (wait_until_set(&fRegs->ssts, 0x1, 100000) < B_OK)
|
||||
TRACE("AHCIPort::ResetDevice port %d no device detected\n", fIndex);
|
||||
}
|
||||
|
||||
// clear error bits
|
||||
fRegs->serr = fRegs->serr;
|
||||
FlushPostedWrites();
|
||||
_ClearErrorRegister();
|
||||
|
||||
if (fRegs->ssts & 1) {
|
||||
if (wait_until_set(&fRegs->ssts, 0x3, 500000) < B_OK) {
|
||||
@@ -233,9 +230,7 @@ AHCIPort::ResetDevice()
|
||||
}
|
||||
}
|
||||
|
||||
// clear error bits
|
||||
fRegs->serr = fRegs->serr;
|
||||
FlushPostedWrites();
|
||||
_ClearErrorRegister();
|
||||
}
|
||||
|
||||
|
||||
@@ -364,10 +359,15 @@ AHCIPort::InterruptErrorHandler(uint32 is)
|
||||
TRACE("AHCIPort::InterruptErrorHandler port %d, fCommandsActive 0x%08"
|
||||
B_PRIx32 ", is 0x%08" B_PRIx32 ", ci 0x%08" B_PRIx32 "\n", fIndex,
|
||||
fCommandsActive, is, ci);
|
||||
|
||||
TRACE("ssts 0x%08" B_PRIx32 ", sctl 0x%08" B_PRIx32 ", serr 0x%08"
|
||||
B_PRIx32 ", sact 0x%08" B_PRIx32 "\n",
|
||||
fRegs->ssts, fRegs->sctl, fRegs->serr, fRegs->sact);
|
||||
TRACE("ssts 0x%08" B_PRIx32 "\n", fRegs->ssts);
|
||||
TRACE("sctl.ipm 0x%02" B_PRIx32 "\n",
|
||||
(fRegs->sctl & SATA_CONTROL_IPM_MASK) >> SATA_CONTROL_IPM_SHIFT);
|
||||
TRACE("sctl.spd 0x%02" B_PRIx32 "\n",
|
||||
(fRegs->sctl & SATA_CONTROL_SPD_MASK) >> SATA_CONTROL_SPD_SHIFT);
|
||||
TRACE("sctl.det 0x%02" B_PRIx32 "\n",
|
||||
(fRegs->sctl & SATA_CONTROL_DET_MASK) >> SATA_CONTROL_DET_SHIFT);
|
||||
TRACE("serr 0x%08" B_PRIx32 "\n", fRegs->serr);
|
||||
TRACE("sact 0x%08" B_PRIx32 "\n", fRegs->sact);
|
||||
}
|
||||
|
||||
// read and clear SError
|
||||
@@ -413,7 +413,13 @@ AHCIPort::InterruptErrorHandler(uint32 is)
|
||||
}
|
||||
if (is & PORT_INT_PC) {
|
||||
TRACE("Port Connect Change\n");
|
||||
// fResetPort = true;
|
||||
// Spec v1.3, §6.2.2.3 Recovery of Unsolicited COMINIT
|
||||
|
||||
// perform a hard reset
|
||||
_HardReset();
|
||||
|
||||
// clear error bits to clear PxSERR.DIAG.X
|
||||
_ClearErrorRegister();
|
||||
}
|
||||
if (is & PORT_INT_UF) {
|
||||
TRACE("Unknown FIS\n");
|
||||
@@ -1224,3 +1230,31 @@ AHCIPort::ScsiGetRestrictions(bool* isATAPI, bool* noAutoSense,
|
||||
"maxBlocks %" B_PRIu32 "\n", fIndex, *isATAPI, *noAutoSense,
|
||||
*maxBlocks);
|
||||
}
|
||||
|
||||
|
||||
void
|
||||
AHCIPort::_HardReset()
|
||||
{
|
||||
if ((fRegs->cmd & PORT_CMD_ST) != 0) {
|
||||
// We shouldn't perform a reset, but at least document it
|
||||
TRACE("AHCIPort::_HardReset() PORT_CMD_ST set, behaviour undefined\n");
|
||||
}
|
||||
|
||||
fRegs->sctl = (fRegs->sctl & ~SATA_CONTROL_DET_MASK)
|
||||
| DET_INITIALIZATION << SATA_CONTROL_DET_SHIFT;
|
||||
FlushPostedWrites();
|
||||
spin(1100);
|
||||
// You must wait 1ms at minimum
|
||||
fRegs->sctl = (fRegs->sctl & ~SATA_CONTROL_DET_MASK)
|
||||
| DET_NO_INITIALIZATION << SATA_CONTROL_DET_SHIFT;
|
||||
FlushPostedWrites();
|
||||
}
|
||||
|
||||
|
||||
void
|
||||
AHCIPort::_ClearErrorRegister()
|
||||
{
|
||||
// clear error bits
|
||||
fRegs->serr = fRegs->serr;
|
||||
FlushPostedWrites();
|
||||
}
|
||||
|
||||
@@ -51,6 +51,8 @@ private:
|
||||
status_t WaitForTransfer(int *tfd, bigtime_t timeout);
|
||||
void FinishTransfer();
|
||||
|
||||
inline void _HardReset();
|
||||
inline void _ClearErrorRegister();
|
||||
|
||||
// uint8 * SetCommandFis(volatile command_list_entry *cmd, volatile fis *fis, const void *data, size_t dataSize);
|
||||
status_t FillPrdTable(volatile prd *prdTable, int *prdCount, int prdMax, const void *data, size_t dataSize);
|
||||
|
||||
@@ -229,11 +229,12 @@ const struct supported_device {
|
||||
{0x6767, 5, 0, RADEON_CAICOS, CHIP_STD, "Radeon HD Caicos"},
|
||||
{0x6768, 5, 0, RADEON_CAICOS, CHIP_STD, "Radeon HD Caicos"},
|
||||
{0x6770, 5, 0, RADEON_CAICOS, CHIP_STD, "Radeon HD 6400"},
|
||||
{0x6778, 5, 0, RADEON_CAICOS, CHIP_STD, "Radeon HD Caicos"},
|
||||
{0x6779, 5, 0, RADEON_CAICOS, CHIP_STD, "Radeon HD 6450"},
|
||||
{0x6778, 5, 0, RADEON_CAICOS, CHIP_STD, "Radeon HD 7470/8470"},
|
||||
{0x6779, 5, 0, RADEON_CAICOS, CHIP_STD, "Radeon HD 6450/7450/8450"},
|
||||
{0x68fa, 5, 0, RADEON_CAICOS, CHIP_STD, "Radeon HD 7350"},
|
||||
{0x677b, 5, 0, RADEON_CAICOS, CHIP_STD, "Radeon HD 7400"},
|
||||
{0x6772, 5, 0, RADEON_CAICOS, CHIP_APU, "Radeon HD 7400A"},
|
||||
{0x6771, 5, 0, RADEON_CAICOS, CHIP_STD, "Radeon HD 8490"},
|
||||
// Turks
|
||||
{0x6740, 5, 0, RADEON_TURKS, CHIP_MOBILE, "Radeon HD 6770M"},
|
||||
{0x6741, 5, 0, RADEON_TURKS, CHIP_MOBILE, "Radeon HD 6650M"},
|
||||
|
||||
@@ -587,6 +587,9 @@ bfs_lookup(fs_volume* _volume, fs_vnode* _directory, const char* file,
|
||||
status = tree->Find((uint8*)file, (uint16)strlen(file), _vnodeID);
|
||||
if (status != B_OK) {
|
||||
//PRINT(("bfs_walk() could not find %Ld:\"%s\": %s\n", directory->BlockNumber(), file, strerror(status)));
|
||||
if (status == B_ENTRY_NOT_FOUND)
|
||||
entry_cache_add_missing(volume->ID(), directory->ID(), file);
|
||||
|
||||
return status;
|
||||
}
|
||||
|
||||
|
||||
@@ -17,6 +17,13 @@ entry_cache_add(dev_t mountID, ino_t dirID, const char* name, ino_t nodeID)
|
||||
}
|
||||
|
||||
|
||||
status_t
|
||||
entry_cache_add_missing(dev_t mountID, ino_t dirID, const char* name)
|
||||
{
|
||||
return B_OK;
|
||||
}
|
||||
|
||||
|
||||
status_t
|
||||
entry_cache_remove(dev_t mountID, ino_t dirID, const char* name)
|
||||
{
|
||||
|
||||
@@ -445,6 +445,8 @@ InterfaceAddress::_Init(net_interface* netInterface, net_domain* netDomain)
|
||||
|
||||
Interface::Interface(const char* interfaceName,
|
||||
net_device_interface* deviceInterface)
|
||||
:
|
||||
fBusy(false)
|
||||
{
|
||||
TRACE("Interface %p: new \"%s\", device interface %p\n", this,
|
||||
interfaceName, deviceInterface);
|
||||
@@ -933,13 +935,13 @@ Interface::SetDown()
|
||||
if ((flags & IFF_UP) == 0)
|
||||
return;
|
||||
|
||||
// TODO: We acquire also the net_interfaces lock here
|
||||
// to avoid a lock inversion in the ipv6 protocol implementation
|
||||
// (see ticket #9377).
|
||||
// A better solution would be to avoid locking the interface lock (fLock)
|
||||
// when calling the lower layers.
|
||||
RecursiveLocker interfacesLocker(sLock);
|
||||
RecursiveLocker locker(fLock);
|
||||
|
||||
if (IsBusy())
|
||||
return;
|
||||
|
||||
SetBusy(true);
|
||||
interfacesLocker.Unlock();
|
||||
|
||||
DatalinkTable::Iterator iterator = fDatalinkTable.GetIterator();
|
||||
while (domain_datalink* datalink = iterator.Next()) {
|
||||
@@ -947,6 +949,8 @@ Interface::SetDown()
|
||||
}
|
||||
|
||||
flags &= ~IFF_UP;
|
||||
|
||||
SetBusy(false);
|
||||
}
|
||||
|
||||
|
||||
@@ -1076,10 +1080,11 @@ Interface::_SetUp()
|
||||
if (status != B_OK)
|
||||
return status;
|
||||
|
||||
RecursiveLocker interfacesLocker(sLock);
|
||||
SetBusy(true);
|
||||
interfacesLocker.Unlock();
|
||||
|
||||
// Propagate flag to all datalink protocols
|
||||
|
||||
RecursiveLocker locker(fLock);
|
||||
|
||||
DatalinkTable::Iterator iterator = fDatalinkTable.GetIterator();
|
||||
while (domain_datalink* datalink = iterator.Next()) {
|
||||
status = datalink->first_info->interface_up(datalink->first_protocol);
|
||||
@@ -1097,6 +1102,7 @@ Interface::_SetUp()
|
||||
}
|
||||
|
||||
down_device_interface(fDeviceInterface);
|
||||
SetBusy(false);
|
||||
return status;
|
||||
}
|
||||
}
|
||||
@@ -1109,6 +1115,8 @@ Interface::_SetUp()
|
||||
}
|
||||
|
||||
flags |= IFF_UP;
|
||||
SetBusy(false);
|
||||
|
||||
return B_OK;
|
||||
}
|
||||
|
||||
@@ -1409,7 +1417,7 @@ get_interface(net_domain* domain, uint32 index)
|
||||
interface = sInterfaces.First();
|
||||
else
|
||||
interface = find_interface(index);
|
||||
if (interface == NULL)
|
||||
if (interface == NULL || interface->IsBusy())
|
||||
return NULL;
|
||||
|
||||
if (interface->CreateDomainDatalinkIfNeeded(domain) != B_OK)
|
||||
@@ -1426,7 +1434,7 @@ get_interface(net_domain* domain, const char* name)
|
||||
RecursiveLocker locker(sLock);
|
||||
|
||||
Interface* interface = find_interface(name);
|
||||
if (interface == NULL)
|
||||
if (interface == NULL || interface->IsBusy())
|
||||
return NULL;
|
||||
|
||||
if (interface->CreateDomainDatalinkIfNeeded(domain) != B_OK)
|
||||
@@ -1445,6 +1453,8 @@ get_interface_for_device(net_domain* domain, uint32 index)
|
||||
InterfaceList::Iterator iterator = sInterfaces.GetIterator();
|
||||
while (Interface* interface = iterator.Next()) {
|
||||
if (interface->device->index == index) {
|
||||
if (interface->IsBusy())
|
||||
return NULL;
|
||||
if (interface->CreateDomainDatalinkIfNeeded(domain) != B_OK)
|
||||
return NULL;
|
||||
|
||||
@@ -1470,6 +1480,8 @@ get_interface_for_link(net_domain* domain, const sockaddr* _linkAddress)
|
||||
|
||||
InterfaceList::Iterator iterator = sInterfaces.GetIterator();
|
||||
while (Interface* interface = iterator.Next()) {
|
||||
if (interface->IsBusy())
|
||||
continue;
|
||||
// Test if the hardware address matches, or if the given interface
|
||||
// matches, or if at least the index matches.
|
||||
if ((linkAddress.sdl_alen == interface->device->address.length
|
||||
@@ -1479,6 +1491,8 @@ get_interface_for_link(net_domain* domain, const sockaddr* _linkAddress)
|
||||
&& !strcmp(interface->name, (const char*)linkAddress.sdl_data))
|
||||
|| (linkAddress.sdl_nlen == 0 && linkAddress.sdl_alen == 0
|
||||
&& linkAddress.sdl_index == interface->index)) {
|
||||
if (interface->IsBusy())
|
||||
return NULL;
|
||||
if (interface->CreateDomainDatalinkIfNeeded(domain) != B_OK)
|
||||
return NULL;
|
||||
|
||||
@@ -1516,6 +1530,9 @@ get_interface_address_for_destination(net_domain* domain,
|
||||
|
||||
InterfaceList::Iterator iterator = sInterfaces.GetIterator();
|
||||
while (Interface* interface = iterator.Next()) {
|
||||
if (interface->IsBusy())
|
||||
continue;
|
||||
|
||||
InterfaceAddress* address
|
||||
= interface->AddressForDestination(domain, destination);
|
||||
if (address != NULL)
|
||||
@@ -1543,6 +1560,8 @@ get_interface_address_for_link(net_domain* domain, const sockaddr* address,
|
||||
|
||||
InterfaceList::Iterator iterator = sInterfaces.GetIterator();
|
||||
while (Interface* interface = iterator.Next()) {
|
||||
if (interface->IsBusy())
|
||||
continue;
|
||||
// Test if the hardware address matches, or if the given interface
|
||||
// matches, or if at least the index matches.
|
||||
if (linkAddress.sdl_alen == interface->device->address.length
|
||||
|
||||
@@ -152,6 +152,9 @@ public:
|
||||
domain_datalink* DomainDatalink(net_domain* domain)
|
||||
{ return DomainDatalink(domain->family); }
|
||||
|
||||
inline void SetBusy(bool busy) { atomic_set(&fBusy, busy ? 1 : 0); };
|
||||
inline bool IsBusy() const { return atomic_get((int32*)&fBusy) == 1 ;};
|
||||
|
||||
#if ENABLE_DEBUGGER_COMMANDS
|
||||
void Dump() const;
|
||||
#endif
|
||||
@@ -166,6 +169,7 @@ private:
|
||||
|
||||
private:
|
||||
recursive_lock fLock;
|
||||
int32 fBusy;
|
||||
net_device_interface* fDeviceInterface;
|
||||
AddressList fAddresses;
|
||||
DatalinkTable fDatalinkTable;
|
||||
|
||||
@@ -57,6 +57,10 @@
|
||||
// Otherwise the alternative code could simply be removed from this file.
|
||||
#endif
|
||||
|
||||
#if LIBAVCODEC_VERSION_INT > ((54 << 16) | (50 << 8))
|
||||
typedef AVCodecID CodecID;
|
||||
#endif
|
||||
|
||||
|
||||
struct wave_format_ex {
|
||||
uint16 format_tag;
|
||||
@@ -409,10 +413,10 @@ AVCodecDecoder::_NegotiateAudioOutputFormat(media_format* inOutFormat)
|
||||
if (fRawDecodedAudio->opaque == NULL)
|
||||
return B_NO_MEMORY;
|
||||
|
||||
TRACE(" bit_rate = %d, sample_rate = %d, channels = %d, init = %d, "
|
||||
TRACE(" bit_rate = %d, sample_rate = %d, channels = %d, "
|
||||
"output frame size: %d, count: %ld, rate: %.2f\n",
|
||||
fContext->bit_rate, fContext->sample_rate, fContext->channels,
|
||||
result, fOutputFrameSize, fOutputFrameCount, fOutputFrameRate);
|
||||
fOutputFrameSize, fOutputFrameCount, fOutputFrameRate);
|
||||
|
||||
return B_OK;
|
||||
}
|
||||
@@ -716,7 +720,7 @@ AVCodecDecoder::_DecodeNextAudioFrame()
|
||||
dump_ffframe_audio(fRawDecodedAudio, "ffaudi");
|
||||
#endif
|
||||
|
||||
TRACE_AUDIO(" frame count: %lld current: %lld\n",
|
||||
TRACE_AUDIO(" frame count: %ld current: %lld\n",
|
||||
fRawDecodedAudio->nb_samples, fFrame);
|
||||
|
||||
return B_OK;
|
||||
@@ -1193,7 +1197,7 @@ AVCodecDecoder::_DecodeNextVideoFrame()
|
||||
fRawDecodedPicture, &gotVideoFrame, &fTempPacket);
|
||||
if (encodedDataSizeInBytes < 0) {
|
||||
TRACE("[v] AVCodecDecoder: ignoring error in decoding frame %lld:"
|
||||
" %d\n", fFrame, len);
|
||||
" %d\n", fFrame, encodedDataSizeInBytes);
|
||||
// NOTE: An error from avcodec_decode_video2() is ignored by the
|
||||
// FFMPEG 0.10.2 example decoding_encoding.c. Only the packet
|
||||
// buffers are flushed accordingly
|
||||
|
||||
@@ -40,9 +40,9 @@ AVCodecEncoder::AVCodecEncoder(uint32 codecID, int bitRateScale)
|
||||
:
|
||||
Encoder(),
|
||||
fBitRateScale(bitRateScale),
|
||||
fCodecID((enum CodecID)codecID),
|
||||
fCodecID((CodecID)codecID),
|
||||
fCodec(NULL),
|
||||
fOwnContext(avcodec_alloc_context()),
|
||||
fOwnContext(avcodec_alloc_context3(NULL)),
|
||||
fContext(fOwnContext),
|
||||
fCodecInitStatus(CODEC_INIT_NEEDED),
|
||||
|
||||
@@ -494,7 +494,7 @@ AVCodecEncoder::_OpenCodecIfNeeded()
|
||||
fContext->strict_std_compliance = -2;
|
||||
|
||||
// Open the codec
|
||||
int result = avcodec_open(fContext, fCodec);
|
||||
int result = avcodec_open2(fContext, fCodec, NULL);
|
||||
if (result >= 0)
|
||||
fCodecInitStatus = CODEC_INIT_DONE;
|
||||
else
|
||||
@@ -591,43 +591,78 @@ status_t
|
||||
AVCodecEncoder::_EncodeAudio(const uint8* buffer, size_t bufferSize,
|
||||
int64 frameCount, media_encode_info* info)
|
||||
{
|
||||
// Encode one audio chunk/frame. The bufferSize has already been adapted
|
||||
// to the needed size for fContext->frame_size, or we are writing raw
|
||||
// audio.
|
||||
int usedBytes = avcodec_encode_audio(fContext, fChunkBuffer,
|
||||
bufferSize, reinterpret_cast<const short*>(buffer));
|
||||
status_t ret;
|
||||
|
||||
if (usedBytes < 0) {
|
||||
TRACE(" avcodec_encode_audio() failed: %d\n", usedBytes);
|
||||
// Encode one audio chunk/frame.
|
||||
AVPacket packet;
|
||||
av_init_packet(&packet);
|
||||
// By leaving these NULL, we let the encoder allocate memory as it needs.
|
||||
// This way we don't risk iving a too small buffer.
|
||||
packet.data = NULL;
|
||||
packet.size = 0;
|
||||
|
||||
// We need to wrap our input data into an AVFrame structure.
|
||||
AVFrame frame;
|
||||
int gotPacket = 0;
|
||||
|
||||
if (buffer) {
|
||||
avcodec_get_frame_defaults(&frame);
|
||||
|
||||
frame.nb_samples = frameCount;
|
||||
|
||||
ret = avcodec_fill_audio_frame(&frame, fContext->channels,
|
||||
fContext->sample_fmt, (const uint8_t *) buffer, bufferSize, 1);
|
||||
|
||||
if (ret != 0)
|
||||
return B_ERROR;
|
||||
}
|
||||
if (usedBytes == 0)
|
||||
return B_OK;
|
||||
|
||||
// // Maybe we need to use this PTS to calculate start_time:
|
||||
// if (fContext->coded_frame->pts != kNoPTSValue) {
|
||||
// TRACE(" codec frame PTS: %lld (codec time_base: %d/%d)\n",
|
||||
// fContext->coded_frame->pts, fContext->time_base.num,
|
||||
// fContext->time_base.den);
|
||||
// } else {
|
||||
// TRACE(" codec frame PTS: N/A (codec time_base: %d/%d)\n",
|
||||
// fContext->time_base.num, fContext->time_base.den);
|
||||
// }
|
||||
|
||||
// Setup media_encode_info, most important is the time stamp.
|
||||
info->start_time = (bigtime_t)(fFramesWritten * 1000000LL
|
||||
/* Set the presentation time of the frame */
|
||||
frame.pts = (bigtime_t)(fFramesWritten * 1000000LL
|
||||
/ fInputFormat.u.raw_audio.frame_rate);
|
||||
info->flags = B_MEDIA_KEY_FRAME;
|
||||
fFramesWritten += frame.nb_samples;
|
||||
|
||||
// Write the chunk
|
||||
status_t ret = WriteChunk(fChunkBuffer, usedBytes, info);
|
||||
if (ret != B_OK) {
|
||||
TRACE(" error writing chunk: %s\n", strerror(ret));
|
||||
return ret;
|
||||
ret = avcodec_encode_audio2(fContext, &packet, &frame, &gotPacket);
|
||||
} else {
|
||||
// If called with NULL, ask the encoder to flush any buffers it may
|
||||
// have pending.
|
||||
ret = avcodec_encode_audio2(fContext, &packet, NULL, &gotPacket);
|
||||
}
|
||||
|
||||
if (buffer && frame.extended_data != frame.data)
|
||||
av_freep(&frame.extended_data);
|
||||
|
||||
if (ret != 0) {
|
||||
TRACE(" avcodec_encode_audio() failed: %ld\n", ret);
|
||||
return B_ERROR;
|
||||
}
|
||||
|
||||
fFramesWritten += frameCount;
|
||||
|
||||
if (gotPacket) {
|
||||
if (fContext->coded_frame) {
|
||||
// Store information about the coded frame in the context.
|
||||
fContext->coded_frame->pts = packet.pts;
|
||||
fContext->coded_frame->key_frame = !!(packet.flags & AV_PKT_FLAG_KEY);
|
||||
}
|
||||
|
||||
// Setup media_encode_info, most important is the time stamp.
|
||||
info->start_time = packet.pts;
|
||||
|
||||
if (packet.flags & AV_PKT_FLAG_KEY)
|
||||
info->flags = B_MEDIA_KEY_FRAME;
|
||||
else
|
||||
info->flags = 0;
|
||||
|
||||
// We got a packet out of the encoder, write it to the output stream
|
||||
ret = WriteChunk(packet.data, packet.size, info);
|
||||
if (ret != B_OK) {
|
||||
TRACE(" error writing chunk: %s\n", strerror(ret));
|
||||
av_free_packet(&packet);
|
||||
return ret;
|
||||
}
|
||||
}
|
||||
|
||||
av_free_packet(&packet);
|
||||
return B_OK;
|
||||
}
|
||||
|
||||
|
||||
@@ -17,6 +17,11 @@ extern "C" {
|
||||
#include "EncoderPlugin.h"
|
||||
|
||||
|
||||
#if LIBAVCODEC_VERSION_INT > ((54 << 16) | (50 << 8))
|
||||
typedef AVCodecID CodecID;
|
||||
#endif
|
||||
|
||||
|
||||
class AVCodecEncoder : public Encoder {
|
||||
public:
|
||||
AVCodecEncoder(uint32 codecID,
|
||||
|
||||
@@ -257,7 +257,7 @@ StreamBase::Open()
|
||||
fContext->pb = fIOContext;
|
||||
|
||||
// Allocate our context and probe the input format
|
||||
if (avformat_open_input(&fContext, "", NULL, NULL) < 0) {
|
||||
if (avformat_open_input(&fContext, ".mod", NULL, NULL) < 0) {
|
||||
TRACE("StreamBase::Open() - avformat_open_input() failed!\n");
|
||||
// avformat_open_input() frees the context in case of failure
|
||||
fContext = NULL;
|
||||
@@ -1505,7 +1505,7 @@ AVFormatReader::Sniff(int32* _streamCount)
|
||||
streamDeleter.Detach();
|
||||
|
||||
#ifdef TRACE_AVFORMAT_READER
|
||||
dump_format(const_cast<AVFormatContext*>(stream->Context()), 0, "", 0);
|
||||
av_dump_format(const_cast<AVFormatContext*>(stream->Context()), 0, "", 0);
|
||||
#endif
|
||||
|
||||
if (_streamCount != NULL)
|
||||
|
||||
@@ -53,6 +53,9 @@ static const size_t kIOBufferSize = 64 * 1024;
|
||||
#define OPEN_CODEC_CONTEXT 1
|
||||
#define GET_CONTEXT_DEFAULTS 0
|
||||
|
||||
#if LIBAVCODEC_VERSION_INT > ((54 << 16) | (50 << 8))
|
||||
typedef AVCodecID CodecID;
|
||||
#endif
|
||||
|
||||
// #pragma mark - AVFormatWriter::StreamCookie
|
||||
|
||||
@@ -109,7 +112,8 @@ AVFormatWriter::StreamCookie::Init(media_format* format,
|
||||
BAutolock _(fStreamLock);
|
||||
|
||||
fPacket.stream_index = fContext->nb_streams;
|
||||
fStream = av_new_stream(fContext, fPacket.stream_index);
|
||||
fStream = avformat_new_stream(fContext, NULL);
|
||||
fStream->id = fPacket.stream_index;
|
||||
|
||||
if (fStream == NULL) {
|
||||
TRACE(" failed to add new stream\n");
|
||||
@@ -200,6 +204,10 @@ AVFormatWriter::StreamCookie::Init(media_format* format,
|
||||
// Now negociate the actual format with the encoder
|
||||
// First check if the requested format is acceptable
|
||||
AVCodec* codec = avcodec_find_encoder(fStream->codec->codec_id);
|
||||
|
||||
if (codec == NULL)
|
||||
return B_MEDIA_BAD_FORMAT;
|
||||
|
||||
const enum AVSampleFormat *p = codec->sample_fmts;
|
||||
for (; *p != -1; p++) {
|
||||
if (*p == fStream->codec->sample_fmt)
|
||||
@@ -466,7 +474,7 @@ AVFormatWriter::CommitHeader()
|
||||
AVCodecContext* codecContext = stream->codec;
|
||||
codecContext->strict_std_compliance = -2;
|
||||
AVCodec* codec = avcodec_find_encoder(codecContext->codec_id);
|
||||
if (codec == NULL || avcodec_open(codecContext, codec) < 0) {
|
||||
if (codec == NULL || avcodec_open2(codecContext, codec, NULL) < 0) {
|
||||
TRACE(" stream[%u] - failed to open AVCodecContext\n", i);
|
||||
}
|
||||
TRACE(" stream[%u] time_base: (%d/%d), codec->time_base: (%d/%d)\n",
|
||||
|
||||
@@ -11,9 +11,15 @@ extern "C" {
|
||||
#include "avformat.h"
|
||||
}
|
||||
|
||||
|
||||
#if LIBAVCODEC_VERSION_INT > ((54 << 16) | (50 << 8))
|
||||
typedef AVCodecID CodecID;
|
||||
#endif
|
||||
|
||||
|
||||
//XXX: newer versions have it in libavformat/internal.h
|
||||
typedef struct AVCodecTag {
|
||||
enum CodecID id;
|
||||
CodecID id;
|
||||
unsigned int tag;
|
||||
} AVCodecTag;
|
||||
|
||||
|
||||
@@ -13,6 +13,11 @@ extern "C" {
|
||||
}
|
||||
|
||||
|
||||
#if LIBAVCODEC_VERSION_INT > ((54 << 16) | (50 << 8))
|
||||
typedef AVCodecID CodecID;
|
||||
#endif
|
||||
|
||||
|
||||
struct EncoderDescription {
|
||||
media_codec_info codec_info;
|
||||
media_format_family format_family;
|
||||
|
||||
@@ -318,6 +318,62 @@ const media_file_format gMuxerTable[] = {
|
||||
"webm",
|
||||
{ 0 }
|
||||
},
|
||||
{
|
||||
media_file_format::B_READABLE
|
||||
| media_file_format::B_KNOWS_RAW_AUDIO
|
||||
| media_file_format::B_KNOWS_ENCODED_AUDIO,
|
||||
{ 0 },
|
||||
B_MISC_FORMAT_FAMILY,
|
||||
100,
|
||||
{ 0 },
|
||||
"audio/xm",
|
||||
"Fast Tracker eXtended Module",
|
||||
"xm",
|
||||
"xm",
|
||||
{ 0 }
|
||||
},
|
||||
{
|
||||
media_file_format::B_READABLE
|
||||
| media_file_format::B_KNOWS_RAW_AUDIO
|
||||
| media_file_format::B_KNOWS_ENCODED_AUDIO,
|
||||
{ 0 },
|
||||
B_MISC_FORMAT_FAMILY,
|
||||
100,
|
||||
{ 0 },
|
||||
"audio/s3m",
|
||||
"Scream Tracker 3",
|
||||
"s3m",
|
||||
"s3m",
|
||||
{ 0 }
|
||||
},
|
||||
{
|
||||
media_file_format::B_READABLE
|
||||
| media_file_format::B_KNOWS_RAW_AUDIO
|
||||
| media_file_format::B_KNOWS_ENCODED_AUDIO,
|
||||
{ 0 },
|
||||
B_MISC_FORMAT_FAMILY,
|
||||
100,
|
||||
{ 0 },
|
||||
"audio/it",
|
||||
"Impulse Tracker",
|
||||
"it",
|
||||
"it",
|
||||
{ 0 }
|
||||
},
|
||||
{
|
||||
media_file_format::B_READABLE
|
||||
| media_file_format::B_KNOWS_RAW_AUDIO
|
||||
| media_file_format::B_KNOWS_ENCODED_AUDIO,
|
||||
{ 0 },
|
||||
B_MISC_FORMAT_FAMILY,
|
||||
100,
|
||||
{ 0 },
|
||||
"audio/x-mod",
|
||||
"Protracker MOD",
|
||||
"mod",
|
||||
"mod",
|
||||
{ 0 }
|
||||
},
|
||||
};
|
||||
|
||||
const size_t gMuxerCount = sizeof(gMuxerTable) / sizeof(media_file_format);
|
||||
|
||||
@@ -42,7 +42,7 @@ printf("ReadyToRun()\n");
|
||||
{
|
||||
printf("ArgvReceived()\n");
|
||||
for (int32 i = 0; i < argc; i++)
|
||||
printf(" arg %ld: \"%s\"\n", i, argv[i]);
|
||||
printf(" arg %" B_PRId32 ": \"%s\"\n", i, argv[i]);
|
||||
|
||||
for (int32 i = 1; i < argc; i++) {
|
||||
PathDataSource* dataSource = new(std::nothrow) PathDataSource;
|
||||
|
||||
@@ -59,7 +59,7 @@ BigtimeChartAxisLegendSource::GetAxisLegends(const ChartDataRange& range,
|
||||
decomposed_bigtime decomposed;
|
||||
decompose_time(time, decomposed);
|
||||
char buffer[128];
|
||||
snprintf(buffer, sizeof(buffer), "%02lld:%02d:%02d.%06d",
|
||||
snprintf(buffer, sizeof(buffer), "%02" B_PRIu64 ":%02d:%02d.%06d",
|
||||
decomposed.hours, decomposed.minutes, decomposed.seconds,
|
||||
decomposed.micros);
|
||||
// TODO: Drop superfluous micro seconds digits, or even microseconds and seconds
|
||||
|
||||
@@ -89,7 +89,7 @@ LegendChartAxis::_FilterLegends(int32 totalSize, int32 spacing,
|
||||
// Filter out all higher level legends colliding with lower level or
|
||||
// preceeding same-level legends. We iterate backwards from the lower to
|
||||
// the higher levels
|
||||
for (int32 level = std::max(minLevel, 0L); level <= maxLevel;) {
|
||||
for (int32 level = std::max(minLevel, (int32)0); level <= maxLevel;) {
|
||||
legendCount = fLegends.CountItems();
|
||||
|
||||
// get the first legend position/end
|
||||
|
||||
@@ -60,7 +60,7 @@ NanotimeChartAxisLegendSource::GetAxisLegends(const ChartDataRange& range,
|
||||
decomposed_nanotime decomposed;
|
||||
decompose_time(time, decomposed);
|
||||
char buffer[128];
|
||||
snprintf(buffer, sizeof(buffer), "%02lld:%02d:%02d.%09d",
|
||||
snprintf(buffer, sizeof(buffer), "%02" B_PRId64 ":%02d:%02d.%09d",
|
||||
decomposed.hours, decomposed.minutes, decomposed.seconds,
|
||||
decomposed.nanos);
|
||||
// TODO: Drop superfluous nanoseconds digits, or even nanoseconds and seconds
|
||||
|
||||
@@ -68,11 +68,11 @@ MainWindow::GeneralPage::SetModel(Model* model)
|
||||
fIdleTimeView->SetText(buffer);
|
||||
|
||||
// team count
|
||||
snprintf(buffer, sizeof(buffer), "%ld", fModel->CountTeams());
|
||||
snprintf(buffer, sizeof(buffer), "%" B_PRId32, fModel->CountTeams());
|
||||
fTeamCountView->SetText(buffer);
|
||||
|
||||
// threads
|
||||
snprintf(buffer, sizeof(buffer), "%ld", fModel->CountThreads());
|
||||
snprintf(buffer, sizeof(buffer), "%" B_PRId32, fModel->CountThreads());
|
||||
fThreadCountView->SetText(buffer);
|
||||
} else {
|
||||
fDataSourceView->SetText("");
|
||||
|
||||
@@ -318,7 +318,7 @@ protected:
|
||||
int32 lineHeight = (int32)fFontInfo.lineHeight;
|
||||
minLine = (int32)rect.top / lineHeight;
|
||||
maxLine = ((int32)ceilf(rect.bottom) + lineHeight - 1) / lineHeight;
|
||||
minLine = std::max(minLine, 0L);
|
||||
minLine = std::max(minLine, (int32)0);
|
||||
maxLine = std::min(maxLine, CountLines() - 1);
|
||||
}
|
||||
|
||||
@@ -1449,7 +1449,8 @@ printf("failed to read event!\n");
|
||||
Model::ThreadSchedulingState* thread = fState.LookupThread(
|
||||
event->thread);
|
||||
if (thread == NULL) {
|
||||
printf("Schedule event for unknown thread: %ld\n", event->thread);
|
||||
printf("Schedule event for unknown thread: %" B_PRId32 "\n",
|
||||
event->thread);
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -1464,8 +1465,8 @@ printf("failed to read event!\n");
|
||||
|
||||
thread = fState.LookupThread(event->previous_thread);
|
||||
if (thread == NULL) {
|
||||
printf("Schedule event for unknown previous thread: %ld\n",
|
||||
event->previous_thread);
|
||||
printf("Schedule event for unknown previous thread: %" B_PRId32
|
||||
"\n", event->previous_thread);
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -1529,8 +1530,8 @@ printf("failed to read event!\n");
|
||||
Model::ThreadSchedulingState* thread = fState.LookupThread(
|
||||
event->thread);
|
||||
if (thread == NULL) {
|
||||
printf("Enqueued in run queue event for unknown thread: %ld\n",
|
||||
event->thread);
|
||||
printf("Enqueued in run queue event for unknown thread: %" B_PRId32
|
||||
"\n", event->thread);
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -1559,8 +1560,8 @@ printf("failed to read event!\n");
|
||||
Model::ThreadSchedulingState* thread = fState.LookupThread(
|
||||
event->thread);
|
||||
if (thread == NULL) {
|
||||
printf("Removed from run queue event for unknown thread: %ld\n",
|
||||
event->thread);
|
||||
printf("Removed from run queue event for unknown thread: %" B_PRId32
|
||||
"\n", event->thread);
|
||||
return;
|
||||
}
|
||||
|
||||
|
||||
@@ -51,8 +51,8 @@ public:
|
||||
{
|
||||
char buffer[128];
|
||||
Model::Team* team = thread->GetTeam();
|
||||
snprintf(buffer, sizeof(buffer), "%s (%ld)", team->Name(),
|
||||
team->ID());
|
||||
snprintf(buffer, sizeof(buffer), "%s (%" B_PRId32 ")",
|
||||
team->Name(), team->ID());
|
||||
value.SetTo(buffer);
|
||||
return true;
|
||||
}
|
||||
|
||||
@@ -55,7 +55,7 @@ ThreadWindow::GeneralPage::SetModel(Model* model, Model::Thread* thread)
|
||||
|
||||
// ID
|
||||
char buffer[128];
|
||||
snprintf(buffer, sizeof(buffer), "%ld", fThread->ID());
|
||||
snprintf(buffer, sizeof(buffer), "%" B_PRId32, fThread->ID());
|
||||
fThreadIDView->SetText(buffer);
|
||||
|
||||
// team
|
||||
@@ -65,28 +65,28 @@ ThreadWindow::GeneralPage::SetModel(Model* model, Model::Thread* thread)
|
||||
char timeBuffer[64];
|
||||
format_nanotime(fThread->TotalRunTime(), timeBuffer,
|
||||
sizeof(timeBuffer));
|
||||
snprintf(buffer, sizeof(buffer), "%s (%lld)", timeBuffer,
|
||||
snprintf(buffer, sizeof(buffer), "%s (%" B_PRId64 ")", timeBuffer,
|
||||
fThread->Runs());
|
||||
fRunTimeView->SetText(buffer);
|
||||
|
||||
// wait time
|
||||
format_nanotime(fThread->TotalWaitTime(), timeBuffer,
|
||||
sizeof(timeBuffer));
|
||||
snprintf(buffer, sizeof(buffer), "%s (%lld)", timeBuffer,
|
||||
snprintf(buffer, sizeof(buffer), "%s (%" B_PRId64 ")", timeBuffer,
|
||||
fThread->Waits());
|
||||
fWaitTimeView->SetText(buffer);
|
||||
|
||||
// latencies
|
||||
format_nanotime(fThread->TotalLatency(), timeBuffer,
|
||||
sizeof(timeBuffer));
|
||||
snprintf(buffer, sizeof(buffer), "%s (%lld)", timeBuffer,
|
||||
snprintf(buffer, sizeof(buffer), "%s (%" B_PRId64 ")", timeBuffer,
|
||||
fThread->Latencies());
|
||||
fLatencyView->SetText(buffer);
|
||||
|
||||
// preemptions
|
||||
format_nanotime(fThread->TotalRerunTime(), timeBuffer,
|
||||
sizeof(timeBuffer));
|
||||
snprintf(buffer, sizeof(buffer), "%s (%lld)", timeBuffer,
|
||||
snprintf(buffer, sizeof(buffer), "%s (%" B_PRId64 ")", timeBuffer,
|
||||
fThread->Preemptions());
|
||||
fPreemptionView->SetText(buffer);
|
||||
|
||||
|
||||
@@ -27,8 +27,8 @@ static BString
|
||||
get_window_name(Model::Thread* thread)
|
||||
{
|
||||
char buffer[1024];
|
||||
snprintf(buffer, sizeof(buffer), "Thread: %s (%ld)", thread->Name(),
|
||||
thread->ID());
|
||||
snprintf(buffer, sizeof(buffer), "Thread: %s (%" B_PRId32 ")",
|
||||
thread->Name(), thread->ID());
|
||||
return BString(buffer);
|
||||
}
|
||||
|
||||
|
||||
@@ -785,7 +785,7 @@ Model::AddTeam(const system_profiler_team_added* event, nanotime_t time)
|
||||
{
|
||||
Team* team = TeamByID(event->team);
|
||||
if (team != NULL) {
|
||||
fprintf(stderr, "Duplicate team: %ld\n", event->team);
|
||||
fprintf(stderr, "Duplicate team: %" B_PRId32 "\n", event->team);
|
||||
// TODO: User feedback!
|
||||
return team;
|
||||
}
|
||||
@@ -830,7 +830,7 @@ Model::AddThread(const system_profiler_thread_added* event, nanotime_t time)
|
||||
// check whether we do already know the thread
|
||||
Thread* thread = ThreadByID(event->thread);
|
||||
if (thread != NULL) {
|
||||
fprintf(stderr, "Duplicate thread: %ld\n", event->thread);
|
||||
fprintf(stderr, "Duplicate thread: %" B_PRId32 "\n", event->thread);
|
||||
// TODO: User feedback!
|
||||
return thread;
|
||||
}
|
||||
@@ -838,7 +838,7 @@ Model::AddThread(const system_profiler_thread_added* event, nanotime_t time)
|
||||
// get its team
|
||||
Team* team = TeamByID(event->team);
|
||||
if (team == NULL) {
|
||||
fprintf(stderr, "No team for thread: %ld\n", event->thread);
|
||||
fprintf(stderr, "No team for thread: %" B_PRId32 "\n", event->thread);
|
||||
return NULL;
|
||||
}
|
||||
|
||||
|
||||
@@ -721,9 +721,9 @@ ModelLoader::_ProcessEvent(uint32 event, uint32 cpu, const void* buffer,
|
||||
break;
|
||||
|
||||
default:
|
||||
printf("unsupported event type %lu, size: %lu\n", event, size);
|
||||
printf("unsupported event type %" B_PRIu32 ", size: %" B_PRIuSIZE
|
||||
"\n", event, size);
|
||||
return B_BAD_DATA;
|
||||
break;
|
||||
}
|
||||
|
||||
return B_OK;
|
||||
@@ -889,8 +889,10 @@ ModelLoader::_HandleTeamRemoved(system_profiler_team_removed* event)
|
||||
{
|
||||
if (Model::Team* team = fModel->TeamByID(event->team))
|
||||
team->SetDeletionTime(fState->LastEventTime());
|
||||
else
|
||||
printf("Warning: Removed event for unknown team: %ld\n", event->team);
|
||||
else {
|
||||
printf("Warning: Removed event for unknown team: %" B_PRId32 "\n",
|
||||
event->team);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -913,7 +915,7 @@ ModelLoader::_HandleThreadRemoved(system_profiler_thread_removed* event)
|
||||
{
|
||||
ExtendedThreadSchedulingState* thread = fState->LookupThread(event->thread);
|
||||
if (thread == NULL) {
|
||||
printf("Warning: Removed event for unknown thread: %ld\n",
|
||||
printf("Warning: Removed event for unknown thread: %" B_PRId32 "\n",
|
||||
event->thread);
|
||||
thread = _AddUnknownThread(event->thread);
|
||||
}
|
||||
@@ -931,7 +933,7 @@ ModelLoader::_HandleThreadScheduled(uint32 cpu,
|
||||
|
||||
ExtendedThreadSchedulingState* thread = fState->LookupThread(event->thread);
|
||||
if (thread == NULL) {
|
||||
printf("Warning: Schedule event for unknown thread: %ld\n",
|
||||
printf("Warning: Schedule event for unknown thread: %" B_PRId32 "\n",
|
||||
event->thread);
|
||||
thread = _AddUnknownThread(event->thread);
|
||||
return;
|
||||
@@ -966,8 +968,8 @@ ModelLoader::_HandleThreadScheduled(uint32 cpu,
|
||||
|
||||
thread = fState->LookupThread(event->previous_thread);
|
||||
if (thread == NULL) {
|
||||
printf("Warning: Schedule event for unknown previous thread: %ld\n",
|
||||
event->previous_thread);
|
||||
printf("Warning: Schedule event for unknown previous thread: %" B_PRId32
|
||||
"\n", event->previous_thread);
|
||||
thread = _AddUnknownThread(event->previous_thread);
|
||||
}
|
||||
|
||||
@@ -1035,8 +1037,8 @@ ModelLoader::_HandleThreadEnqueuedInRunQueue(
|
||||
|
||||
ExtendedThreadSchedulingState* thread = fState->LookupThread(event->thread);
|
||||
if (thread == NULL) {
|
||||
printf("Warning: Enqueued in run queue event for unknown thread: %ld\n",
|
||||
event->thread);
|
||||
printf("Warning: Enqueued in run queue event for unknown thread: %"
|
||||
B_PRId32 "\n", event->thread);
|
||||
thread = _AddUnknownThread(event->thread);
|
||||
}
|
||||
|
||||
@@ -1073,7 +1075,7 @@ ModelLoader::_HandleThreadRemovedFromRunQueue(uint32 cpu,
|
||||
ExtendedThreadSchedulingState* thread = fState->LookupThread(event->thread);
|
||||
if (thread == NULL) {
|
||||
printf("Warning: Removed from run queue event for unknown thread: "
|
||||
"%ld\n", event->thread);
|
||||
"%" B_PRId32 "\n", event->thread);
|
||||
thread = _AddUnknownThread(event->thread);
|
||||
}
|
||||
|
||||
@@ -1112,8 +1114,8 @@ ModelLoader::_HandleIOSchedulerAdded(system_profiler_io_scheduler_added* event)
|
||||
{
|
||||
Model::IOScheduler* scheduler = fModel->IOSchedulerByID(event->scheduler);
|
||||
if (scheduler != NULL) {
|
||||
printf("Warning: Duplicate added event for I/O scheduler %ld\n",
|
||||
event->scheduler);
|
||||
printf("Warning: Duplicate added event for I/O scheduler %" B_PRId32
|
||||
"\n", event->scheduler);
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -1134,12 +1136,13 @@ ModelLoader::_HandleIORequestScheduled(io_request_scheduled* event)
|
||||
|
||||
ExtendedThreadSchedulingState* thread = fState->LookupThread(event->thread);
|
||||
if (thread == NULL) {
|
||||
printf("Warning: I/O request for unknown thread %ld\n", event->thread);
|
||||
printf("Warning: I/O request for unknown thread %" B_PRId32 "\n",
|
||||
event->thread);
|
||||
thread = _AddUnknownThread(event->thread);
|
||||
}
|
||||
|
||||
if (fModel->IOSchedulerByID(event->scheduler) == NULL) {
|
||||
printf("Warning: I/O requests for unknown scheduler %ld\n",
|
||||
printf("Warning: I/O requests for unknown scheduler %" B_PRId32 "\n",
|
||||
event->scheduler);
|
||||
// TODO: Add state for unknown scheduler, as we do for threads.
|
||||
return;
|
||||
@@ -1307,8 +1310,8 @@ ModelLoader::_AddThreadWaitObject(ExtendedThreadSchedulingState* thread,
|
||||
= fModel->WaitObjectGroupFor(type, object);
|
||||
if (waitObjectGroup == NULL) {
|
||||
// The algorithm should prevent this case.
|
||||
printf("ModelLoader::_AddThreadWaitObject(): Unknown wait object: type: %lu, "
|
||||
"object: %#lx\n", type, object);
|
||||
printf("ModelLoader::_AddThreadWaitObject(): Unknown wait object: type:"
|
||||
" %" B_PRIu32 ", " "object: %#" B_PRIxADDR "\n", type, object);
|
||||
return;
|
||||
}
|
||||
|
||||
|
||||
@@ -114,9 +114,9 @@ ThreadModelLoader::_Load()
|
||||
|
||||
// create the groups
|
||||
int32 waitObjectCount = waitObjects.CountItems();
|
||||
printf("%ld wait objects\n", waitObjectCount);
|
||||
printf("%" B_PRId32 " wait objects\n", waitObjectCount);
|
||||
for (int32 i = 0; i < waitObjectCount;) {
|
||||
printf("new wait object group at %ld\n", i);
|
||||
printf("new wait object group at %" B_PRId32 "\n", i);
|
||||
// collect the objects for this group
|
||||
Model::ThreadWaitObject* firstObject = waitObjects.ItemAt(i);
|
||||
int32 k = i + 1;
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
/*
|
||||
* Copyright 2009-2012, Ingo Weinhold, ingo_weinhold@gmx.de.
|
||||
* Copyright 2011-2014, Rene Gollent, rene@gollent.com.
|
||||
* Copyright 2011-2015, Rene Gollent, rene@gollent.com.
|
||||
* Distributed under the terms of the MIT License.
|
||||
*/
|
||||
|
||||
@@ -26,6 +26,7 @@
|
||||
#include "GraphicalUserInterface.h"
|
||||
#include "ImageDebugLoadingStateHandlerRoster.h"
|
||||
#include "MessageCodes.h"
|
||||
#include "ReportUserInterface.h"
|
||||
#include "SettingsManager.h"
|
||||
#include "SignalSet.h"
|
||||
#include "StartTeamWindow.h"
|
||||
@@ -143,7 +144,6 @@ parse_arguments(int argc, const char* const* argv, bool noOutput,
|
||||
|
||||
case 's':
|
||||
{
|
||||
options.useCLI = true;
|
||||
options.saveReport = true;
|
||||
options.reportPath = optarg;
|
||||
break;
|
||||
@@ -393,6 +393,21 @@ private:
|
||||
};
|
||||
|
||||
|
||||
class ReportDebugger : private TeamDebugger::Listener {
|
||||
public:
|
||||
ReportDebugger();
|
||||
~ReportDebugger();
|
||||
bool Run(const Options& options);
|
||||
|
||||
private:
|
||||
// TeamDebugger::Listener
|
||||
virtual void TeamDebuggerStarted(TeamDebugger* debugger);
|
||||
virtual void TeamDebuggerRestartRequested(
|
||||
TeamDebugger* debugger);
|
||||
virtual void TeamDebuggerQuit(TeamDebugger* debugger);
|
||||
};
|
||||
|
||||
|
||||
// #pragma mark - Debugger application class
|
||||
|
||||
|
||||
@@ -723,8 +738,7 @@ CliDebugger::Run(const Options& options)
|
||||
|
||||
// create the command line UI
|
||||
CommandLineUserInterface* userInterface
|
||||
= new(std::nothrow) CommandLineUserInterface(options.saveReport,
|
||||
options.reportPath, options.thread);
|
||||
= new(std::nothrow) CommandLineUserInterface();
|
||||
if (userInterface == NULL) {
|
||||
fprintf(stderr, "Error: Out of memory!\n");
|
||||
return false;
|
||||
@@ -774,6 +788,89 @@ CliDebugger::TeamDebuggerQuit(TeamDebugger* debugger)
|
||||
}
|
||||
|
||||
|
||||
// #pragma mark - ReportDebugger
|
||||
|
||||
|
||||
ReportDebugger::ReportDebugger()
|
||||
{
|
||||
}
|
||||
|
||||
|
||||
ReportDebugger::~ReportDebugger()
|
||||
{
|
||||
}
|
||||
|
||||
|
||||
bool
|
||||
ReportDebugger::Run(const Options& options)
|
||||
{
|
||||
// initialize global objects and settings manager
|
||||
status_t error = global_init();
|
||||
if (error != B_OK) {
|
||||
fprintf(stderr, "Error: Global initialization failed: %s\n",
|
||||
strerror(error));
|
||||
return false;
|
||||
}
|
||||
|
||||
SettingsManager settingsManager;
|
||||
error = settingsManager.Init();
|
||||
if (error != B_OK) {
|
||||
fprintf(stderr, "Error: Settings manager initialization failed: "
|
||||
"%s\n", strerror(error));
|
||||
return false;
|
||||
}
|
||||
|
||||
// create the report UI
|
||||
ReportUserInterface* userInterface
|
||||
= new(std::nothrow) ReportUserInterface(options.thread, options.reportPath);
|
||||
if (userInterface == NULL) {
|
||||
fprintf(stderr, "Error: Out of memory!\n");
|
||||
return false;
|
||||
}
|
||||
BReference<UserInterface> userInterfaceReference(userInterface, true);
|
||||
|
||||
// get/run the program to be debugged and start the team debugger
|
||||
DebuggedProgramInfo programInfo;
|
||||
if (!get_debugged_program(options, programInfo))
|
||||
return false;
|
||||
|
||||
TeamDebugger* teamDebugger = start_team_debugger(programInfo.team,
|
||||
&settingsManager, this, programInfo.thread,
|
||||
programInfo.commandLineArgc, programInfo.commandLineArgv,
|
||||
programInfo.stopInMain, userInterface);
|
||||
if (teamDebugger == NULL)
|
||||
return false;
|
||||
|
||||
thread_id teamDebuggerThread = teamDebugger->Thread();
|
||||
|
||||
// run the input loop
|
||||
userInterface->Run();
|
||||
|
||||
// wait for the team debugger thread to terminate
|
||||
wait_for_thread(teamDebuggerThread, NULL);
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
|
||||
void
|
||||
ReportDebugger::TeamDebuggerStarted(TeamDebugger* debugger)
|
||||
{
|
||||
}
|
||||
|
||||
|
||||
void
|
||||
ReportDebugger::TeamDebuggerRestartRequested(TeamDebugger* debugger)
|
||||
{
|
||||
}
|
||||
|
||||
|
||||
void
|
||||
ReportDebugger::TeamDebuggerQuit(TeamDebugger* debugger)
|
||||
{
|
||||
}
|
||||
|
||||
|
||||
// #pragma mark -
|
||||
|
||||
|
||||
@@ -792,6 +889,9 @@ main(int argc, const char* const* argv)
|
||||
if (options.useCLI) {
|
||||
CliDebugger debugger;
|
||||
return debugger.Run(options) ? 0 : 1;
|
||||
} else if (options.saveReport) {
|
||||
ReportDebugger debugger;
|
||||
return debugger.Run(options) ? 0 : 1;
|
||||
}
|
||||
|
||||
Debugger app;
|
||||
|
||||
@@ -46,6 +46,7 @@ SEARCH_SOURCE += [ FDirName $(SUBDIR) user_interface gui teams_window ] ;
|
||||
SEARCH_SOURCE += [ FDirName $(SUBDIR) user_interface gui utility_windows ] ;
|
||||
SEARCH_SOURCE += [ FDirName $(SUBDIR) user_interface gui util ] ;
|
||||
SEARCH_SOURCE += [ FDirName $(SUBDIR) user_interface gui value ] ;
|
||||
SEARCH_SOURCE += [ FDirName $(SUBDIR) user_interface report ] ;
|
||||
SEARCH_SOURCE += [ FDirName $(SUBDIR) user_interface util ] ;
|
||||
SEARCH_SOURCE += [ FDirName $(SUBDIR) util ] ;
|
||||
SEARCH_SOURCE += [ FDirName $(SUBDIR) value ] ;
|
||||
@@ -321,6 +322,9 @@ local sources =
|
||||
TableCellValueRenderer.cpp
|
||||
TableCellValueRendererUtils.cpp
|
||||
|
||||
# user_interface/report
|
||||
ReportUserInterface.cpp
|
||||
|
||||
# user_interface/util
|
||||
UiUtils.cpp
|
||||
|
||||
|
||||
@@ -13,6 +13,7 @@
|
||||
#include <new>
|
||||
|
||||
#include <Entry.h>
|
||||
#include <InterfaceDefs.h>
|
||||
#include <Message.h>
|
||||
#include <StringList.h>
|
||||
|
||||
@@ -1369,10 +1370,37 @@ TeamDebugger::UserInterfaceQuitRequested(QuitOption quitOption)
|
||||
}
|
||||
|
||||
|
||||
void
|
||||
TeamDebugger::JobStarted(Job* job)
|
||||
{
|
||||
BString description(job->GetDescription());
|
||||
if (!description.IsEmpty()) {
|
||||
description.Append(B_UTF8_ELLIPSIS);
|
||||
fUserInterface->NotifyBackgroundWorkStatus(description.String());
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
void
|
||||
TeamDebugger::JobDone(Job* job)
|
||||
{
|
||||
TRACE_JOBS("TeamDebugger::JobDone(%p)\n", job);
|
||||
_ResetUserBackgroundStatusIfNeeded();
|
||||
}
|
||||
|
||||
|
||||
void
|
||||
TeamDebugger::JobWaitingForInput(Job* job)
|
||||
{
|
||||
LoadImageDebugInfoJob* infoJob = dynamic_cast<LoadImageDebugInfoJob*>(job);
|
||||
|
||||
if (infoJob == NULL)
|
||||
return;
|
||||
|
||||
BMessage message(MSG_DEBUG_INFO_NEEDS_USER_INPUT);
|
||||
message.AddPointer("job", infoJob);
|
||||
message.AddPointer("state", infoJob->GetLoadingState());
|
||||
PostMessage(&message);
|
||||
}
|
||||
|
||||
|
||||
@@ -1381,6 +1409,7 @@ TeamDebugger::JobFailed(Job* job)
|
||||
{
|
||||
TRACE_JOBS("TeamDebugger::JobFailed(%p)\n", job);
|
||||
// TODO: notify user
|
||||
_ResetUserBackgroundStatusIfNeeded();
|
||||
}
|
||||
|
||||
|
||||
@@ -1390,20 +1419,7 @@ TeamDebugger::JobAborted(Job* job)
|
||||
TRACE_JOBS("TeamDebugger::JobAborted(%p)\n", job);
|
||||
// TODO: For a stack frame source loader thread we should reset the
|
||||
// loading state! Asynchronously due to locking order.
|
||||
}
|
||||
|
||||
|
||||
void
|
||||
TeamDebugger::ImageDebugInfoJobNeedsUserInput(Job* job,
|
||||
ImageDebugInfoLoadingState* state)
|
||||
{
|
||||
TRACE_JOBS("TeamDebugger::DebugInfoJobNeedsUserInput(%p, %p)\n",
|
||||
job, state);
|
||||
|
||||
BMessage message(MSG_DEBUG_INFO_NEEDS_USER_INPUT);
|
||||
message.AddPointer("job", job);
|
||||
message.AddPointer("state", state);
|
||||
PostMessage(&message);
|
||||
_ResetUserBackgroundStatusIfNeeded();
|
||||
}
|
||||
|
||||
|
||||
@@ -1908,7 +1924,6 @@ TeamDebugger::_HandleImageDebugInfoChanged(image_id imageID)
|
||||
|
||||
bool handlePostExecSetup = fExecPending && image->Type() == B_APP_IMAGE
|
||||
&& state != IMAGE_DEBUG_INFO_LOADING;
|
||||
|
||||
// this needs to be done first so that breakpoints are loaded.
|
||||
// otherwise, UpdateImageBreakpoints() won't find the appropriate
|
||||
// UserBreakpoints to create/install instances for.
|
||||
@@ -1922,6 +1937,7 @@ TeamDebugger::_HandleImageDebugInfoChanged(image_id imageID)
|
||||
|
||||
if (state == IMAGE_DEBUG_INFO_LOADED
|
||||
|| state == IMAGE_DEBUG_INFO_UNAVAILABLE) {
|
||||
|
||||
// update breakpoints in the image
|
||||
fBreakpointManager->UpdateImageBreakpoints(image);
|
||||
|
||||
@@ -2486,6 +2502,14 @@ TeamDebugger::_NotifyUser(const char* title, const char* text,...)
|
||||
}
|
||||
|
||||
|
||||
void
|
||||
TeamDebugger::_ResetUserBackgroundStatusIfNeeded()
|
||||
{
|
||||
if (!fWorker->HasPendingJobs())
|
||||
fUserInterface->NotifyBackgroundWorkStatus("Ready.");
|
||||
}
|
||||
|
||||
|
||||
// #pragma mark - Listener
|
||||
|
||||
|
||||
|
||||
@@ -32,8 +32,7 @@ class WatchpointManager;
|
||||
|
||||
|
||||
class TeamDebugger : public BLooper, private UserInterfaceListener,
|
||||
private JobListener, private ImageDebugInfoJobListener,
|
||||
private Team::Listener {
|
||||
private JobListener, private Team::Listener {
|
||||
public:
|
||||
class Listener;
|
||||
|
||||
@@ -134,13 +133,12 @@ private:
|
||||
QuitOption quitOption);
|
||||
|
||||
// JobListener
|
||||
virtual void JobStarted(Job* job);
|
||||
virtual void JobDone(Job* job);
|
||||
virtual void JobWaitingForInput(Job* job);
|
||||
virtual void JobFailed(Job* job);
|
||||
virtual void JobAborted(Job* job);
|
||||
|
||||
virtual void ImageDebugInfoJobNeedsUserInput(Job* job,
|
||||
ImageDebugInfoLoadingState* state);
|
||||
|
||||
// Team::Listener
|
||||
virtual void ThreadStateChanged(
|
||||
const ::Team::ThreadEvent& event);
|
||||
@@ -235,6 +233,11 @@ private:
|
||||
void _NotifyUser(const char* title,
|
||||
const char* text,...);
|
||||
|
||||
void _ResetUserBackgroundStatusIfNeeded();
|
||||
// updates user interface to
|
||||
// ready/completed message
|
||||
// for background work status
|
||||
|
||||
private:
|
||||
Listener* fListener;
|
||||
SettingsManager* fSettingsManager;
|
||||
|
||||
@@ -76,14 +76,13 @@ private:
|
||||
|
||||
|
||||
ThreadHandler::ThreadHandler(Thread* thread, Worker* worker,
|
||||
DebuggerInterface* debuggerInterface,
|
||||
ImageDebugInfoJobListener* listener,
|
||||
DebuggerInterface* debuggerInterface, JobListener* jobListener,
|
||||
BreakpointManager* breakpointManager)
|
||||
:
|
||||
fThread(thread),
|
||||
fWorker(worker),
|
||||
fDebuggerInterface(debuggerInterface),
|
||||
fDebugInfoJobListener(listener),
|
||||
fJobListener(jobListener),
|
||||
fBreakpointManager(breakpointManager),
|
||||
fStepMode(STEP_NONE),
|
||||
fStepStatement(NULL),
|
||||
@@ -113,7 +112,7 @@ void
|
||||
ThreadHandler::Init()
|
||||
{
|
||||
fWorker->ScheduleJob(new(std::nothrow) GetThreadStateJob(fDebuggerInterface,
|
||||
fThread));
|
||||
fThread), fJobListener);
|
||||
fConditionWaitSem = create_sem(0, "breakpoint condition waiter");
|
||||
}
|
||||
|
||||
@@ -458,7 +457,8 @@ ThreadHandler::HandleThreadStateChanged()
|
||||
if (fThread->State() == THREAD_STATE_STOPPED
|
||||
&& fThread->GetCpuState() == NULL) {
|
||||
fWorker->ScheduleJob(
|
||||
new(std::nothrow) GetCpuStateJob(fDebuggerInterface, fThread));
|
||||
new(std::nothrow) GetCpuStateJob(fDebuggerInterface, fThread),
|
||||
fJobListener);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -475,8 +475,8 @@ ThreadHandler::HandleCpuStateChanged()
|
||||
if (fThread->GetCpuState() != NULL && fThread->GetStackTrace() == NULL) {
|
||||
fWorker->ScheduleJob(
|
||||
new(std::nothrow) GetStackTraceJob(fDebuggerInterface,
|
||||
fDebugInfoJobListener, fDebuggerInterface->GetArchitecture(),
|
||||
fThread));
|
||||
fJobListener, fDebuggerInterface->GetArchitecture(),
|
||||
fThread), fJobListener);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -954,7 +954,8 @@ ThreadHandler::_HandleBreakpointConditionIfNeeded(CpuState* cpuState)
|
||||
|
||||
status_t error = fWorker->ScheduleJob(
|
||||
new(std::nothrow) ExpressionEvaluationJob(fThread->GetTeam(),
|
||||
fDebuggerInterface, language, expressionInfo, frame, fThread));
|
||||
fDebuggerInterface, language, expressionInfo, frame, fThread),
|
||||
fJobListener);
|
||||
|
||||
BPrivate::ObjectDeleter<ExpressionEvaluationListener> deleter(
|
||||
listener);
|
||||
|
||||
@@ -20,6 +20,7 @@ class BreakpointManager;
|
||||
class DebuggerInterface;
|
||||
class ExpressionResult;
|
||||
class ImageDebugInfoJobListener;
|
||||
class JobListener;
|
||||
class StackFrame;
|
||||
class Statement;
|
||||
class Worker;
|
||||
@@ -30,7 +31,7 @@ class ThreadHandler : public BReferenceable, private ImageDebugInfoProvider,
|
||||
public:
|
||||
ThreadHandler(Thread* thread, Worker* worker,
|
||||
DebuggerInterface* debuggerInterface,
|
||||
ImageDebugInfoJobListener* listener,
|
||||
JobListener* listener,
|
||||
BreakpointManager* breakpointManager);
|
||||
~ThreadHandler();
|
||||
|
||||
@@ -117,7 +118,7 @@ private:
|
||||
Thread* fThread;
|
||||
Worker* fWorker;
|
||||
DebuggerInterface* fDebuggerInterface;
|
||||
ImageDebugInfoJobListener* fDebugInfoJobListener;
|
||||
JobListener* fJobListener;
|
||||
BreakpointManager* fBreakpointManager;
|
||||
uint32 fStepMode;
|
||||
Statement* fStepStatement;
|
||||
|
||||
@@ -9,6 +9,7 @@
|
||||
#include <sys/wait.h>
|
||||
|
||||
#include <Entry.h>
|
||||
#include <InterfaceDefs.h>
|
||||
#include <Path.h>
|
||||
#include <package/solver/Solver.h>
|
||||
#include <package/solver/SolverPackage.h>
|
||||
@@ -108,6 +109,10 @@ DwarfLoadingStateHandler::HandleState(
|
||||
BString command;
|
||||
command.SetToFormat("/bin/pkgman install -y %s",
|
||||
requiredPackage.String());
|
||||
BString notification;
|
||||
notification.SetToFormat("Installing package %s" B_UTF8_ELLIPSIS,
|
||||
requiredPackage.String());
|
||||
interface->NotifyBackgroundWorkStatus(notification);
|
||||
int error = system(command.String());
|
||||
if (interface->IsInteractive()) {
|
||||
if (WIFEXITED(error)) {
|
||||
|
||||
@@ -18,12 +18,11 @@
|
||||
|
||||
|
||||
GetStackTraceJob::GetStackTraceJob(DebuggerInterface* debuggerInterface,
|
||||
ImageDebugInfoJobListener* listener, Architecture* architecture,
|
||||
Thread* thread)
|
||||
JobListener* listener, Architecture* architecture, Thread* thread)
|
||||
:
|
||||
fKey(thread, JOB_TYPE_GET_STACK_TRACE),
|
||||
fDebuggerInterface(debuggerInterface),
|
||||
fDebugInfoJobListener(listener),
|
||||
fJobListener(listener),
|
||||
fArchitecture(architecture),
|
||||
fThread(thread)
|
||||
{
|
||||
@@ -32,6 +31,9 @@ GetStackTraceJob::GetStackTraceJob(DebuggerInterface* debuggerInterface,
|
||||
fCpuState = fThread->GetCpuState();
|
||||
if (fCpuState != NULL)
|
||||
fCpuState->AcquireReference();
|
||||
|
||||
|
||||
SetDescription("Retrieving stack trace for thread %" B_PRId32, fThread->ID());
|
||||
}
|
||||
|
||||
|
||||
@@ -84,7 +86,7 @@ GetStackTraceJob::GetImageDebugInfo(Image* image, ImageDebugInfo*& _info)
|
||||
// schedule a job, if not loaded
|
||||
ImageDebugInfo* info;
|
||||
status_t error = LoadImageDebugInfoJob::ScheduleIfNecessary(GetWorker(),
|
||||
image, fDebugInfoJobListener, &info);
|
||||
image, fJobListener, &info);
|
||||
if (error != B_OK)
|
||||
return error;
|
||||
|
||||
|
||||
@@ -92,19 +92,11 @@ private:
|
||||
};
|
||||
|
||||
|
||||
class ImageDebugInfoJobListener {
|
||||
public:
|
||||
virtual ~ImageDebugInfoJobListener();
|
||||
virtual void ImageDebugInfoJobNeedsUserInput(Job* job,
|
||||
ImageDebugInfoLoadingState* state);
|
||||
};
|
||||
|
||||
|
||||
class GetStackTraceJob : public Job, private ImageDebugInfoProvider {
|
||||
public:
|
||||
GetStackTraceJob(
|
||||
DebuggerInterface* debuggerInterface,
|
||||
ImageDebugInfoJobListener* listener,
|
||||
JobListener* jobListener,
|
||||
Architecture* architecture, Thread* thread);
|
||||
virtual ~GetStackTraceJob();
|
||||
|
||||
@@ -119,7 +111,7 @@ private:
|
||||
private:
|
||||
SimpleJobKey fKey;
|
||||
DebuggerInterface* fDebuggerInterface;
|
||||
ImageDebugInfoJobListener* fDebugInfoJobListener;
|
||||
JobListener* fJobListener;
|
||||
Architecture* fArchitecture;
|
||||
Thread* fThread;
|
||||
CpuState* fCpuState;
|
||||
@@ -128,8 +120,7 @@ private:
|
||||
|
||||
class LoadImageDebugInfoJob : public Job {
|
||||
public:
|
||||
LoadImageDebugInfoJob(Image* image,
|
||||
ImageDebugInfoJobListener* listener);
|
||||
LoadImageDebugInfoJob(Image* image);
|
||||
virtual ~LoadImageDebugInfoJob();
|
||||
|
||||
virtual const JobKey& Key() const;
|
||||
@@ -137,7 +128,7 @@ public:
|
||||
|
||||
static status_t ScheduleIfNecessary(Worker* worker,
|
||||
Image* image,
|
||||
ImageDebugInfoJobListener* listener,
|
||||
JobListener* jobListener,
|
||||
ImageDebugInfo** _imageDebugInfo = NULL);
|
||||
// If already loaded returns a
|
||||
// reference, if desired. If not loaded
|
||||
@@ -146,19 +137,16 @@ public:
|
||||
// if scheduling the job failed, or the
|
||||
// debug info already failed to load
|
||||
// earlier.
|
||||
private:
|
||||
void NotifyUserInputListener();
|
||||
|
||||
private:
|
||||
typedef BObjectList<ImageDebugInfoJobListener> ListenerList;
|
||||
|
||||
ImageDebugInfoLoadingState*
|
||||
GetLoadingState()
|
||||
{ return &fState; }
|
||||
|
||||
private:
|
||||
SimpleJobKey fKey;
|
||||
Image* fImage;
|
||||
ImageDebugInfoLoadingState
|
||||
fState;
|
||||
ImageDebugInfoJobListener* fListener;
|
||||
};
|
||||
|
||||
|
||||
|
||||
@@ -14,33 +14,19 @@
|
||||
#include "Team.h"
|
||||
|
||||
|
||||
// #pragma mark - ImageDebugInfoJobListener
|
||||
|
||||
|
||||
ImageDebugInfoJobListener::~ImageDebugInfoJobListener()
|
||||
{
|
||||
}
|
||||
|
||||
|
||||
void
|
||||
ImageDebugInfoJobListener::ImageDebugInfoJobNeedsUserInput(Job* job,
|
||||
ImageDebugInfoLoadingState* state)
|
||||
{
|
||||
}
|
||||
|
||||
|
||||
// #pragma mark - LoadImageDebugInfoJob
|
||||
|
||||
|
||||
LoadImageDebugInfoJob::LoadImageDebugInfoJob(Image* image,
|
||||
ImageDebugInfoJobListener* listener)
|
||||
LoadImageDebugInfoJob::LoadImageDebugInfoJob(Image* image)
|
||||
:
|
||||
fKey(image, JOB_TYPE_LOAD_IMAGE_DEBUG_INFO),
|
||||
fImage(image),
|
||||
fState(),
|
||||
fListener(listener)
|
||||
fState()
|
||||
{
|
||||
fImage->AcquireReference();
|
||||
|
||||
SetDescription("Loading debugging information for %s",
|
||||
fImage->Name().String());
|
||||
}
|
||||
|
||||
|
||||
@@ -74,7 +60,6 @@ LoadImageDebugInfoJob::Do()
|
||||
locker.Lock();
|
||||
|
||||
if (fState.UserInputRequired()) {
|
||||
NotifyUserInputListener();
|
||||
return WaitForUserInput();
|
||||
} else if (error == B_OK) {
|
||||
error = fImage->SetImageDebugInfo(debugInfo, IMAGE_DEBUG_INFO_LOADED);
|
||||
@@ -88,7 +73,7 @@ LoadImageDebugInfoJob::Do()
|
||||
|
||||
/*static*/ status_t
|
||||
LoadImageDebugInfoJob::ScheduleIfNecessary(Worker* worker, Image* image,
|
||||
ImageDebugInfoJobListener* listener, ImageDebugInfo** _imageDebugInfo)
|
||||
JobListener* listener, ImageDebugInfo** _imageDebugInfo)
|
||||
{
|
||||
AutoLocker<Team> teamLocker(image->GetTeam());
|
||||
|
||||
@@ -113,12 +98,12 @@ LoadImageDebugInfoJob::ScheduleIfNecessary(Worker* worker, Image* image,
|
||||
return B_ERROR;
|
||||
|
||||
// schedule a job
|
||||
LoadImageDebugInfoJob* job = new(std::nothrow) LoadImageDebugInfoJob(image,
|
||||
listener);
|
||||
LoadImageDebugInfoJob* job = new(std::nothrow) LoadImageDebugInfoJob(
|
||||
image);
|
||||
if (job == NULL)
|
||||
return B_NO_MEMORY;
|
||||
|
||||
status_t error = worker->ScheduleJob(job);
|
||||
status_t error = worker->ScheduleJob(job, listener);
|
||||
if (error != B_OK) {
|
||||
image->SetImageDebugInfo(NULL, IMAGE_DEBUG_INFO_UNAVAILABLE);
|
||||
return error;
|
||||
@@ -130,12 +115,3 @@ LoadImageDebugInfoJob::ScheduleIfNecessary(Worker* worker, Image* image,
|
||||
*_imageDebugInfo = NULL;
|
||||
return B_OK;
|
||||
}
|
||||
|
||||
|
||||
void
|
||||
LoadImageDebugInfoJob::NotifyUserInputListener()
|
||||
{
|
||||
if (fListener != NULL)
|
||||
fListener->ImageDebugInfoJobNeedsUserInput(this, &fState);
|
||||
}
|
||||
|
||||
|
||||
@@ -30,6 +30,9 @@ LoadSourceCodeJob::LoadSourceCodeJob(
|
||||
fLoadForFunction(loadForFunction)
|
||||
{
|
||||
fFunctionInstance->AcquireReference();
|
||||
|
||||
SetDescription("Loading source code for function %s",
|
||||
fFunctionInstance->PrettyName().String());
|
||||
}
|
||||
|
||||
|
||||
|
||||
@@ -66,6 +66,15 @@ public:
|
||||
virtual void NotifyUser(const char* title,
|
||||
const char* message,
|
||||
user_notification_type type) = 0;
|
||||
virtual void NotifyBackgroundWorkStatus(const char* message)
|
||||
= 0;
|
||||
// this is used to inform the user about
|
||||
// background processing work, but doesn't
|
||||
// otherwise require any form of
|
||||
// user interaction, i.e. for a status bar
|
||||
// to indicate that debug information is
|
||||
// being parsed.
|
||||
|
||||
virtual int32 SynchronouslyAskUser(const char* title,
|
||||
const char* message, const char* choice1,
|
||||
const char* choice2, const char* choice3)
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright 2012-2014, Rene Gollent, rene@gollent.com.
|
||||
* Copyright 2012-2015, Rene Gollent, rene@gollent.com.
|
||||
* Copyright 2012, Ingo Weinhold, ingo_weinhold@gmx.de.
|
||||
* Distributed under the terms of the MIT License.
|
||||
*/
|
||||
@@ -98,7 +98,6 @@ CliContext::CliContext()
|
||||
fInputLoopWaitingForEvents(0),
|
||||
fEventsOccurred(0),
|
||||
fInputLoopWaiting(false),
|
||||
fInteractive(true),
|
||||
fTerminating(false),
|
||||
fCurrentThread(NULL),
|
||||
fCurrentStackTrace(NULL),
|
||||
@@ -219,13 +218,6 @@ CliContext::Terminating()
|
||||
}
|
||||
|
||||
|
||||
void
|
||||
CliContext::SetInteractive(bool interactive)
|
||||
{
|
||||
fInteractive = interactive;
|
||||
}
|
||||
|
||||
|
||||
thread_id
|
||||
CliContext::CurrentThreadID() const
|
||||
{
|
||||
@@ -415,6 +407,7 @@ CliContext::ProcessPendingEvents()
|
||||
|
||||
switch (event->Type()) {
|
||||
case EVENT_QUIT:
|
||||
case EVENT_DEBUG_REPORT_CHANGED:
|
||||
case EVENT_USER_INTERRUPT:
|
||||
break;
|
||||
case EVENT_THREAD_ADDED:
|
||||
@@ -453,13 +446,6 @@ CliContext::ProcessPendingEvents()
|
||||
if (fExpressionValue != NULL)
|
||||
fExpressionValue->AcquireReference();
|
||||
break;
|
||||
case EVENT_DEBUG_REPORT_CHANGED:
|
||||
if (!IsInteractive()) {
|
||||
Terminating();
|
||||
QuitSession(true);
|
||||
}
|
||||
break;
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
/*
|
||||
* Copyright 2012, Ingo Weinhold, ingo_weinhold@gmx.de.
|
||||
* Copyright 2014, Rene Gollent, rene@gollent.com.
|
||||
* Copyright 2014-2015, Rene Gollent, rene@gollent.com.
|
||||
* Distributed under the terms of the MIT License.
|
||||
*/
|
||||
#ifndef CLI_CONTEXT_H
|
||||
@@ -57,9 +57,6 @@ public:
|
||||
|
||||
bool IsTerminating() const { return fTerminating; }
|
||||
|
||||
bool IsInteractive() const { return fInteractive; }
|
||||
void SetInteractive(bool interactive);
|
||||
|
||||
// service methods for the input loop thread follow
|
||||
|
||||
Team* GetTeam() const { return fTeam; }
|
||||
@@ -150,7 +147,6 @@ private:
|
||||
uint32 fInputLoopWaitingForEvents;
|
||||
uint32 fEventsOccurred;
|
||||
bool fInputLoopWaiting;
|
||||
bool fInteractive;
|
||||
volatile bool fTerminating;
|
||||
|
||||
Thread* fCurrentThread;
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright 2011-2014, Rene Gollent, rene@gollent.com.
|
||||
* Copyright 2011-2015, Rene Gollent, rene@gollent.com.
|
||||
* Copyright 2012, Ingo Weinhold, ingo_weinhold@gmx.de.
|
||||
* Distributed under the terms of the MIT License.
|
||||
*/
|
||||
@@ -93,13 +93,9 @@ private:
|
||||
// #pragma mark - CommandLineUserInterface
|
||||
|
||||
|
||||
CommandLineUserInterface::CommandLineUserInterface(bool saveReport,
|
||||
const char* reportPath, thread_id reportTargetThread)
|
||||
CommandLineUserInterface::CommandLineUserInterface()
|
||||
:
|
||||
fCommands(20, true),
|
||||
fReportPath(reportPath),
|
||||
fSaveReport(saveReport),
|
||||
fReportTargetThread(reportTargetThread),
|
||||
fShowSemaphore(-1),
|
||||
fShown(false),
|
||||
fTerminating(false)
|
||||
@@ -128,8 +124,6 @@ CommandLineUserInterface::Init(Team* team, UserInterfaceListener* listener)
|
||||
if (error != B_OK)
|
||||
return error;
|
||||
|
||||
fContext.SetInteractive(!fSaveReport);
|
||||
|
||||
error = _RegisterCommands();
|
||||
if (error != B_OK)
|
||||
return error;
|
||||
@@ -138,8 +132,6 @@ CommandLineUserInterface::Init(Team* team, UserInterfaceListener* listener)
|
||||
if (fShowSemaphore < 0)
|
||||
return fShowSemaphore;
|
||||
|
||||
team->AddListener(this);
|
||||
|
||||
return B_OK;
|
||||
}
|
||||
|
||||
@@ -176,9 +168,7 @@ CommandLineUserInterface::Terminate()
|
||||
bool
|
||||
CommandLineUserInterface::IsInteractive() const
|
||||
{
|
||||
// if we were invoked solely for the purpose of saving a crash report,
|
||||
// then we're not taking user input into account.
|
||||
return !fSaveReport;
|
||||
return true;
|
||||
}
|
||||
|
||||
|
||||
@@ -203,6 +193,12 @@ CommandLineUserInterface::NotifyUser(const char* title, const char* message,
|
||||
}
|
||||
|
||||
|
||||
void
|
||||
CommandLineUserInterface::NotifyBackgroundWorkStatus(const char* message)
|
||||
{
|
||||
}
|
||||
|
||||
|
||||
int32
|
||||
CommandLineUserInterface::SynchronouslyAskUser(const char* title,
|
||||
const char* message, const char* choice1, const char* choice2,
|
||||
@@ -231,43 +227,12 @@ CommandLineUserInterface::Run()
|
||||
if (error != B_OK)
|
||||
return;
|
||||
|
||||
if (fSaveReport) {
|
||||
ArgumentVector args;
|
||||
char buffer[256];
|
||||
const char* parseErrorLocation;
|
||||
if (_ReportTargetThreadStopNeeded()) {
|
||||
snprintf(buffer, sizeof(buffer), "stop %" B_PRId32,
|
||||
fReportTargetThread);
|
||||
args.Parse(buffer, &parseErrorLocation);
|
||||
_ExecuteCommand(args.ArgumentCount(), args.Arguments());
|
||||
} else
|
||||
_SubmitSaveReport();
|
||||
}
|
||||
|
||||
_InputLoop();
|
||||
// Release the Show() semaphore to signal Terminate().
|
||||
release_sem(fShowSemaphore);
|
||||
}
|
||||
|
||||
|
||||
void
|
||||
CommandLineUserInterface::ThreadStateChanged(const Team::ThreadEvent& event)
|
||||
{
|
||||
if (fSaveReport) {
|
||||
Thread* thread = event.GetThread();
|
||||
// If we were asked to attach/report on a specific thread
|
||||
// rather than a team, and said thread was still
|
||||
// running, when we attached, we need to wait for its corresponding
|
||||
// stop state before generating a report, else we might not get its
|
||||
// stack trace.
|
||||
if (thread->ID() == fReportTargetThread
|
||||
&& thread->State() == THREAD_STATE_STOPPED) {
|
||||
_SubmitSaveReport();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/*static*/ status_t
|
||||
CommandLineUserInterface::_InputLoopEntry(void* data)
|
||||
{
|
||||
@@ -467,32 +432,3 @@ CommandLineUserInterface::_CompareCommandEntries(const CommandEntry* command1,
|
||||
{
|
||||
return ::Compare(command1->Name(), command2->Name());
|
||||
}
|
||||
|
||||
|
||||
bool
|
||||
CommandLineUserInterface::_ReportTargetThreadStopNeeded() const
|
||||
{
|
||||
if (fReportTargetThread < 0)
|
||||
return false;
|
||||
|
||||
Team* team = fContext.GetTeam();
|
||||
AutoLocker<Team> teamLocker(team);
|
||||
Thread* thread = team->ThreadByID(fReportTargetThread);
|
||||
if (thread == NULL)
|
||||
return false;
|
||||
|
||||
return thread->State() != THREAD_STATE_STOPPED;
|
||||
}
|
||||
|
||||
|
||||
void
|
||||
CommandLineUserInterface::_SubmitSaveReport()
|
||||
{
|
||||
ArgumentVector args;
|
||||
char buffer[256];
|
||||
const char* parseErrorLocation;
|
||||
snprintf(buffer, sizeof(buffer), "save-report %s",
|
||||
fReportPath != NULL ? fReportPath : "");
|
||||
args.Parse(buffer, &parseErrorLocation);
|
||||
_ExecuteCommand(args.ArgumentCount(), args.Arguments());
|
||||
}
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright 2011-2014, Rene Gollent, rene@gollent.com.
|
||||
* Copyright 2011-2015, Rene Gollent, rene@gollent.com.
|
||||
* Copyright 2012, Ingo Weinhold, ingo_weinhold@gmx.de.
|
||||
* Distributed under the terms of the MIT License.
|
||||
*/
|
||||
@@ -17,12 +17,9 @@
|
||||
class CliCommand;
|
||||
|
||||
|
||||
class CommandLineUserInterface : public UserInterface,
|
||||
public ::Team::Listener {
|
||||
class CommandLineUserInterface : public UserInterface {
|
||||
public:
|
||||
CommandLineUserInterface(bool saveReport,
|
||||
const char* reportPath,
|
||||
thread_id reportTargetThread);
|
||||
CommandLineUserInterface();
|
||||
virtual ~CommandLineUserInterface();
|
||||
|
||||
virtual const char* ID() const;
|
||||
@@ -42,6 +39,8 @@ public:
|
||||
virtual void NotifyUser(const char* title,
|
||||
const char* message,
|
||||
user_notification_type type);
|
||||
virtual void NotifyBackgroundWorkStatus(
|
||||
const char* message);
|
||||
virtual int32 SynchronouslyAskUser(const char* title,
|
||||
const char* message, const char* choice1,
|
||||
const char* choice2, const char* choice3);
|
||||
@@ -52,10 +51,6 @@ public:
|
||||
// everything has been set up. Enters the
|
||||
// input loop.
|
||||
|
||||
// Team::Listener
|
||||
virtual void ThreadStateChanged(
|
||||
const Team::ThreadEvent& event);
|
||||
|
||||
private:
|
||||
struct CommandEntry;
|
||||
typedef BObjectList<CommandEntry> CommandList;
|
||||
@@ -80,15 +75,9 @@ private:
|
||||
const CommandEntry* command1,
|
||||
const CommandEntry* command2);
|
||||
|
||||
bool _ReportTargetThreadStopNeeded() const;
|
||||
void _SubmitSaveReport();
|
||||
|
||||
private:
|
||||
CliContext fContext;
|
||||
CommandList fCommands;
|
||||
const char* fReportPath;
|
||||
bool fSaveReport;
|
||||
thread_id fReportTargetThread;
|
||||
sem_id fShowSemaphore;
|
||||
bool fShown;
|
||||
volatile bool fTerminating;
|
||||
|
||||
@@ -248,6 +248,13 @@ GraphicalUserInterface::NotifyUser(const char* title, const char* message,
|
||||
}
|
||||
|
||||
|
||||
void
|
||||
GraphicalUserInterface::NotifyBackgroundWorkStatus(const char* message)
|
||||
{
|
||||
fTeamWindow->DisplayBackgroundStatus(message);
|
||||
}
|
||||
|
||||
|
||||
int32
|
||||
GraphicalUserInterface::SynchronouslyAskUser(const char* title,
|
||||
const char* message, const char* choice1, const char* choice2,
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
/*
|
||||
* Copyright 2009, Ingo Weinhold, ingo_weinhold@gmx.de.
|
||||
* Copyright 2014, Rene Gollent, rene@gollent.com.
|
||||
* Copyright 2014-2015, Rene Gollent, rene@gollent.com.
|
||||
* Distributed under the terms of the MIT License.
|
||||
*/
|
||||
#ifndef GRAPHICAL_USER_INTERFACE_H
|
||||
@@ -38,6 +38,8 @@ public:
|
||||
virtual void NotifyUser(const char* title,
|
||||
const char* message,
|
||||
user_notification_type type);
|
||||
virtual void NotifyBackgroundWorkStatus(
|
||||
const char* message);
|
||||
virtual int32 SynchronouslyAskUser(const char* title,
|
||||
const char* message, const char* choice1,
|
||||
const char* choice2, const char* choice3);
|
||||
|
||||
@@ -74,7 +74,8 @@ enum {
|
||||
MSG_LOCATE_SOURCE_IF_NEEDED = 'lsin',
|
||||
MSG_SOURCE_ENTRY_QUERY_COMPLETE = 'seqc',
|
||||
MSG_CLEAR_STACK_TRACE = 'clst',
|
||||
MSG_HANDLE_LOAD_SETTINGS = 'hlst'
|
||||
MSG_HANDLE_LOAD_SETTINGS = 'hlst',
|
||||
MSG_UPDATE_STATUS_BAR = 'upsb'
|
||||
};
|
||||
|
||||
|
||||
@@ -133,6 +134,7 @@ TeamWindow::TeamWindow(::Team* team, UserInterfaceListener* listener)
|
||||
fStepOutButton(NULL),
|
||||
fMenuBar(NULL),
|
||||
fSourcePathView(NULL),
|
||||
fStatusBarView(NULL),
|
||||
fConsoleOutputView(NULL),
|
||||
fFunctionSplitView(NULL),
|
||||
fSourceSplitView(NULL),
|
||||
@@ -525,6 +527,13 @@ TeamWindow::MessageReceived(BMessage* message)
|
||||
_LoadSettings(settings);
|
||||
break;
|
||||
}
|
||||
case MSG_UPDATE_STATUS_BAR:
|
||||
{
|
||||
const char* messageText;
|
||||
if (message->FindString("message", &messageText) == B_OK)
|
||||
fStatusBarView->SetText(messageText);
|
||||
break;
|
||||
}
|
||||
case MSG_TEAM_RENAMED:
|
||||
{
|
||||
_UpdateTitle();
|
||||
@@ -725,6 +734,15 @@ TeamWindow::SaveSettings(GuiTeamUiSettings* settings)
|
||||
}
|
||||
|
||||
|
||||
void
|
||||
TeamWindow::DisplayBackgroundStatus(const char* message)
|
||||
{
|
||||
BMessage updateMessage(MSG_UPDATE_STATUS_BAR);
|
||||
updateMessage.AddString("message", message);
|
||||
PostMessage(&updateMessage);
|
||||
}
|
||||
|
||||
|
||||
void
|
||||
TeamWindow::ThreadSelectionChanged(::Thread* thread)
|
||||
{
|
||||
@@ -995,7 +1013,11 @@ TeamWindow::_Init()
|
||||
.SetInsets(0.0)
|
||||
.Add(fConsoleOutputView = ConsoleOutputView::Create())
|
||||
.End()
|
||||
.End();
|
||||
.End()
|
||||
.Add(fStatusBarView = new BStringView("status", "Ready."));
|
||||
|
||||
fStatusBarView->SetExplicitMinSize(BSize(50.0, B_SIZE_UNSET));
|
||||
fStatusBarView->SetExplicitMaxSize(BSize(B_SIZE_UNLIMITED, B_SIZE_UNSET));
|
||||
|
||||
// add source view
|
||||
sourceScrollView->SetTarget(fSourceView = SourceView::Create(fTeam, this));
|
||||
|
||||
@@ -71,6 +71,8 @@ public:
|
||||
status_t SaveSettings(
|
||||
GuiTeamUiSettings* settings);
|
||||
|
||||
void DisplayBackgroundStatus(const char* message);
|
||||
|
||||
|
||||
private:
|
||||
enum ActiveSourceObject {
|
||||
@@ -228,6 +230,7 @@ private:
|
||||
BButton* fStepOutButton;
|
||||
BMenuBar* fMenuBar;
|
||||
BStringView* fSourcePathView;
|
||||
BStringView* fStatusBarView;
|
||||
ConsoleOutputView* fConsoleOutputView;
|
||||
BSplitView* fFunctionSplitView;
|
||||
BSplitView* fSourceSplitView;
|
||||
|
||||
@@ -0,0 +1,233 @@
|
||||
/*
|
||||
* Copyright 2015, Rene Gollent, rene@gollent.com.
|
||||
* Distributed under the terms of the MIT License.
|
||||
*/
|
||||
|
||||
|
||||
#include "ReportUserInterface.h"
|
||||
|
||||
#include <stdio.h>
|
||||
|
||||
#include <Entry.h>
|
||||
#include <FindDirectory.h>
|
||||
#include <Path.h>
|
||||
|
||||
#include <AutoLocker.h>
|
||||
|
||||
#include "MessageCodes.h"
|
||||
#include "UiUtils.h"
|
||||
|
||||
|
||||
ReportUserInterface::ReportUserInterface(thread_id targetThread,
|
||||
const char* reportPath)
|
||||
:
|
||||
fTeam(NULL),
|
||||
fListener(NULL),
|
||||
fTargetThread(targetThread),
|
||||
fReportPath(reportPath),
|
||||
fShowSemaphore(-1),
|
||||
fReportSemaphore(-1),
|
||||
fShown(false),
|
||||
fTerminating(false)
|
||||
{
|
||||
}
|
||||
|
||||
|
||||
ReportUserInterface::~ReportUserInterface()
|
||||
{
|
||||
if (fShowSemaphore >= 0)
|
||||
delete_sem(fShowSemaphore);
|
||||
|
||||
fTeam->RemoveListener(this);
|
||||
}
|
||||
|
||||
|
||||
const char*
|
||||
ReportUserInterface::ID() const
|
||||
{
|
||||
return "ReportUserInterface";
|
||||
}
|
||||
|
||||
|
||||
status_t
|
||||
ReportUserInterface::Init(Team* team, UserInterfaceListener* listener)
|
||||
{
|
||||
fShowSemaphore = create_sem(0, "show report");
|
||||
if (fShowSemaphore < 0)
|
||||
return fShowSemaphore;
|
||||
|
||||
fReportSemaphore = create_sem(0, "report generator wait");
|
||||
if (fReportSemaphore < 0)
|
||||
return fReportSemaphore;
|
||||
|
||||
fTeam = team;
|
||||
fListener = listener;
|
||||
|
||||
fTeam->AddListener(this);
|
||||
|
||||
return B_OK;
|
||||
}
|
||||
|
||||
|
||||
void
|
||||
ReportUserInterface::Show()
|
||||
{
|
||||
fShown = true;
|
||||
release_sem(fShowSemaphore);
|
||||
}
|
||||
|
||||
|
||||
void
|
||||
ReportUserInterface::Terminate()
|
||||
{
|
||||
fTerminating = true;
|
||||
}
|
||||
|
||||
|
||||
bool
|
||||
ReportUserInterface::IsInteractive() const
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
|
||||
status_t
|
||||
ReportUserInterface::LoadSettings(const TeamUiSettings* settings)
|
||||
{
|
||||
return B_OK;
|
||||
}
|
||||
|
||||
|
||||
status_t
|
||||
ReportUserInterface::SaveSettings(TeamUiSettings*& settings) const
|
||||
{
|
||||
return B_OK;
|
||||
}
|
||||
|
||||
|
||||
void
|
||||
ReportUserInterface::NotifyUser(const char* title, const char* message,
|
||||
user_notification_type type)
|
||||
{
|
||||
}
|
||||
|
||||
|
||||
void
|
||||
ReportUserInterface::NotifyBackgroundWorkStatus(const char* message)
|
||||
{
|
||||
}
|
||||
|
||||
|
||||
int32
|
||||
ReportUserInterface::SynchronouslyAskUser(const char* title,
|
||||
const char* message, const char* choice1, const char* choice2,
|
||||
const char* choice3)
|
||||
{
|
||||
return -1;
|
||||
}
|
||||
|
||||
|
||||
status_t
|
||||
ReportUserInterface::SynchronouslyAskUserForFile(entry_ref* _ref)
|
||||
{
|
||||
return B_UNSUPPORTED;
|
||||
}
|
||||
|
||||
|
||||
void
|
||||
ReportUserInterface::Run()
|
||||
{
|
||||
// Wait for the Show() semaphore to be released.
|
||||
status_t error;
|
||||
do {
|
||||
error = acquire_sem(fShowSemaphore);
|
||||
} while (error == B_INTERRUPTED);
|
||||
|
||||
if (error != B_OK)
|
||||
return;
|
||||
|
||||
bool waitNeeded = false;
|
||||
if (fTargetThread > 0) {
|
||||
AutoLocker< ::Team> teamLocker(fTeam);
|
||||
::Thread* thread = fTeam->ThreadByID(fTargetThread);
|
||||
if (thread == NULL)
|
||||
waitNeeded = true;
|
||||
else if (thread->State() != THREAD_STATE_STOPPED) {
|
||||
waitNeeded = true;
|
||||
fListener->ThreadActionRequested(fTargetThread, MSG_THREAD_STOP);
|
||||
}
|
||||
}
|
||||
|
||||
if (waitNeeded) {
|
||||
do {
|
||||
error = acquire_sem(fShowSemaphore);
|
||||
} while (error == B_INTERRUPTED);
|
||||
|
||||
if (error != B_OK)
|
||||
return;
|
||||
}
|
||||
|
||||
entry_ref ref;
|
||||
if (fReportPath != NULL && fReportPath[0] == '/') {
|
||||
error = get_ref_for_path(fReportPath, &ref);
|
||||
} else {
|
||||
char filename[B_FILE_NAME_LENGTH];
|
||||
if (fReportPath != NULL)
|
||||
strlcpy(filename, fReportPath, sizeof(filename));
|
||||
else
|
||||
UiUtils::ReportNameForTeam(fTeam, filename, sizeof(filename));
|
||||
|
||||
BPath path;
|
||||
error = find_directory(B_DESKTOP_DIRECTORY, &path);
|
||||
if (error == B_OK)
|
||||
error = path.Append(filename);
|
||||
if (error == B_OK)
|
||||
error = get_ref_for_path(path.Path(), &ref);
|
||||
}
|
||||
|
||||
if (error != B_OK)
|
||||
printf("Unable to get ref for report path %s\n", strerror(error));
|
||||
else {
|
||||
fListener->DebugReportRequested(&ref);
|
||||
|
||||
do {
|
||||
error = acquire_sem(fReportSemaphore);
|
||||
} while (error == B_INTERRUPTED);
|
||||
}
|
||||
|
||||
fListener->UserInterfaceQuitRequested(
|
||||
UserInterfaceListener::QUIT_OPTION_ASK_KILL_TEAM);
|
||||
}
|
||||
|
||||
|
||||
void
|
||||
ReportUserInterface::ThreadAdded(const Team::ThreadEvent& event)
|
||||
{
|
||||
::Thread* thread = event.GetThread();
|
||||
if (thread->ID() != fTargetThread)
|
||||
return;
|
||||
|
||||
if (thread->State() != THREAD_STATE_STOPPED)
|
||||
fListener->ThreadActionRequested(thread->ID(), MSG_THREAD_STOP);
|
||||
else
|
||||
release_sem(fShowSemaphore);
|
||||
}
|
||||
|
||||
|
||||
void
|
||||
ReportUserInterface::ThreadStateChanged(const Team::ThreadEvent& event)
|
||||
{
|
||||
::Thread* thread = event.GetThread();
|
||||
if (thread->ID() != fTargetThread)
|
||||
return;
|
||||
else if (thread->State() == THREAD_STATE_STOPPED)
|
||||
release_sem(fShowSemaphore);
|
||||
}
|
||||
|
||||
|
||||
void
|
||||
ReportUserInterface::DebugReportChanged(const Team::DebugReportEvent& event)
|
||||
{
|
||||
printf("Debug report saved to %s\n", event.GetReportPath());
|
||||
release_sem(fReportSemaphore);
|
||||
}
|
||||
@@ -0,0 +1,66 @@
|
||||
/*
|
||||
* Copyright 2015, Rene Gollent, rene@gollent.com.
|
||||
* Distributed under the terms of the MIT License.
|
||||
*/
|
||||
#ifndef REPORT_USER_INTERFACE_H
|
||||
#define REPORT_USER_INTERFACE_H
|
||||
|
||||
|
||||
#include <ObjectList.h>
|
||||
#include <String.h>
|
||||
|
||||
#include "UserInterface.h"
|
||||
#include "Team.h"
|
||||
|
||||
|
||||
class ReportUserInterface : public UserInterface,
|
||||
private Team::Listener {
|
||||
public:
|
||||
ReportUserInterface(thread_id targetThread,
|
||||
const char* reportPath);
|
||||
virtual ~ReportUserInterface();
|
||||
|
||||
virtual const char* ID() const;
|
||||
|
||||
virtual status_t Init(Team* team,
|
||||
UserInterfaceListener* listener);
|
||||
virtual void Show();
|
||||
virtual void Terminate();
|
||||
|
||||
virtual bool IsInteractive() const;
|
||||
|
||||
virtual status_t LoadSettings(const TeamUiSettings* settings);
|
||||
virtual status_t SaveSettings(TeamUiSettings*& settings) const;
|
||||
|
||||
virtual void NotifyUser(const char* title,
|
||||
const char* message,
|
||||
user_notification_type type);
|
||||
virtual void NotifyBackgroundWorkStatus(
|
||||
const char* message);
|
||||
virtual int32 SynchronouslyAskUser(const char* title,
|
||||
const char* message, const char* choice1,
|
||||
const char* choice2, const char* choice3);
|
||||
virtual status_t SynchronouslyAskUserForFile(entry_ref* _ref);
|
||||
|
||||
void Run();
|
||||
|
||||
// Team::Listener
|
||||
virtual void ThreadAdded(const Team::ThreadEvent& event);
|
||||
virtual void ThreadStateChanged(
|
||||
const Team::ThreadEvent& event);
|
||||
virtual void DebugReportChanged(
|
||||
const Team::DebugReportEvent& event);
|
||||
|
||||
private:
|
||||
::Team* fTeam;
|
||||
UserInterfaceListener* fListener;
|
||||
thread_id fTargetThread;
|
||||
const char* fReportPath;
|
||||
sem_id fShowSemaphore;
|
||||
sem_id fReportSemaphore;
|
||||
bool fShown;
|
||||
volatile bool fTerminating;
|
||||
};
|
||||
|
||||
|
||||
#endif // REPORT_USER_INTERFACE_H
|
||||
@@ -70,12 +70,24 @@ JobListener::~JobListener()
|
||||
}
|
||||
|
||||
|
||||
void
|
||||
JobListener::JobStarted(Job* job)
|
||||
{
|
||||
}
|
||||
|
||||
|
||||
void
|
||||
JobListener::JobDone(Job* job)
|
||||
{
|
||||
}
|
||||
|
||||
|
||||
void
|
||||
JobListener::JobWaitingForInput(Job* job)
|
||||
{
|
||||
}
|
||||
|
||||
|
||||
void
|
||||
JobListener::JobFailed(Job* job)
|
||||
{
|
||||
@@ -121,6 +133,15 @@ Job::WaitForUserInput()
|
||||
}
|
||||
|
||||
|
||||
void
|
||||
Job::SetDescription(const char* format, ...)
|
||||
{
|
||||
va_list args;
|
||||
va_start(args, format);
|
||||
fDescription.SetToFormatVarArgs(format, args);
|
||||
}
|
||||
|
||||
|
||||
void
|
||||
Job::SetWorker(Worker* worker)
|
||||
{
|
||||
@@ -179,6 +200,13 @@ Job::NotifyListeners()
|
||||
for (int32 i = count - 1; i >= 0; i--) {
|
||||
JobListener* listener = fListeners.ItemAt(i);
|
||||
switch (fState) {
|
||||
case JOB_STATE_ACTIVE:
|
||||
listener->JobStarted(this);
|
||||
break;
|
||||
case JOB_STATE_WAITING:
|
||||
if (fWaitStatus == JOB_USER_INPUT_WAITING)
|
||||
listener->JobWaitingForInput(this);
|
||||
break;
|
||||
case JOB_STATE_SUCCEEDED:
|
||||
listener->JobDone(this);
|
||||
break;
|
||||
@@ -342,6 +370,14 @@ Worker::ResumeJob(Job* job)
|
||||
}
|
||||
|
||||
|
||||
bool
|
||||
Worker::HasPendingJobs()
|
||||
{
|
||||
AutoLocker<Worker> locker(this);
|
||||
return !fJobs.IsEmpty();
|
||||
}
|
||||
|
||||
|
||||
status_t
|
||||
Worker::AddListener(const JobKey& key, JobListener* listener)
|
||||
{
|
||||
@@ -395,6 +431,7 @@ Worker::WaitForUserInput(Job* waitingJob)
|
||||
return B_INTERRUPTED;
|
||||
|
||||
waitingJob->SetWaitStatus(JOB_USER_INPUT_WAITING);
|
||||
waitingJob->NotifyListeners();
|
||||
fSuspendedJobs.Add(waitingJob);
|
||||
|
||||
return B_OK;
|
||||
@@ -451,6 +488,7 @@ Worker::_ProcessJobs()
|
||||
// process the next job
|
||||
if (Job* job = fUnscheduledJobs.RemoveHead()) {
|
||||
job->SetState(JOB_STATE_ACTIVE);
|
||||
job->NotifyListeners();
|
||||
|
||||
locker.Unlock();
|
||||
status_t error = job->Do();
|
||||
|
||||
@@ -10,6 +10,7 @@
|
||||
|
||||
#include <ObjectList.h>
|
||||
#include <Referenceable.h>
|
||||
#include <String.h>
|
||||
#include <util/DoublyLinkedList.h>
|
||||
#include <util/OpenHashTable.h>
|
||||
|
||||
@@ -69,7 +70,9 @@ class JobListener {
|
||||
public:
|
||||
virtual ~JobListener();
|
||||
|
||||
virtual void JobStarted(Job* job);
|
||||
virtual void JobDone(Job* job);
|
||||
virtual void JobWaitingForInput(Job* job);
|
||||
virtual void JobFailed(Job* job);
|
||||
virtual void JobAborted(Job* job);
|
||||
};
|
||||
@@ -89,9 +92,13 @@ public:
|
||||
Worker* GetWorker() const { return fWorker; }
|
||||
job_state State() const { return fState; }
|
||||
|
||||
const BString& GetDescription() const
|
||||
{ return fDescription; }
|
||||
|
||||
protected:
|
||||
job_wait_status WaitFor(const JobKey& key);
|
||||
status_t WaitForUserInput();
|
||||
void SetDescription(const char* format, ...);
|
||||
|
||||
private:
|
||||
friend class Worker;
|
||||
@@ -122,6 +129,7 @@ private:
|
||||
JobList fDependentJobs;
|
||||
job_wait_status fWaitStatus;
|
||||
ListenerList fListeners;
|
||||
BString fDescription;
|
||||
|
||||
public:
|
||||
Job* fNext;
|
||||
@@ -149,6 +157,8 @@ public:
|
||||
// only valid for jobs that are
|
||||
// suspended pending user input
|
||||
|
||||
bool HasPendingJobs();
|
||||
|
||||
status_t AddListener(const JobKey& key,
|
||||
JobListener* listener);
|
||||
void RemoveListener(const JobKey& key,
|
||||
|
||||
@@ -10,8 +10,6 @@
|
||||
|
||||
#include "PreferencesWindow.h"
|
||||
|
||||
#include <ctype.h>
|
||||
|
||||
#include <Box.h>
|
||||
#include <Button.h>
|
||||
#include <Catalog.h>
|
||||
@@ -31,7 +29,7 @@
|
||||
#include <Screen.h>
|
||||
#include <Slider.h>
|
||||
#include <SpaceLayoutItem.h>
|
||||
#include <TextControl.h>
|
||||
#include <Spinner.h>
|
||||
#include <View.h>
|
||||
|
||||
#include "BarApp.h"
|
||||
@@ -66,11 +64,11 @@ PreferencesWindow::PreferencesWindow(BRect frame)
|
||||
fMenuRecentFolders = new BCheckBox(B_TRANSLATE("Recent folders:"),
|
||||
new BMessage(kUpdateRecentCounts));
|
||||
|
||||
fMenuRecentDocumentCount = new BTextControl(NULL, NULL,
|
||||
fMenuRecentDocumentCount = new BSpinner("recent documents", NULL,
|
||||
new BMessage(kUpdateRecentCounts));
|
||||
fMenuRecentApplicationCount = new BTextControl(NULL, NULL,
|
||||
fMenuRecentApplicationCount = new BSpinner("recent applications", NULL,
|
||||
new BMessage(kUpdateRecentCounts));
|
||||
fMenuRecentFolderCount = new BTextControl(NULL, NULL,
|
||||
fMenuRecentFolderCount = new BSpinner("recent folders", NULL,
|
||||
new BMessage(kUpdateRecentCounts));
|
||||
|
||||
// Applications controls
|
||||
@@ -103,46 +101,20 @@ PreferencesWindow::PreferencesWindow(BRect frame)
|
||||
new BMessage(kAutoHide));
|
||||
|
||||
// Menu settings
|
||||
BTextView* docTextView = fMenuRecentDocumentCount->TextView();
|
||||
BTextView* appTextView = fMenuRecentApplicationCount->TextView();
|
||||
BTextView* folderTextView = fMenuRecentFolderCount->TextView();
|
||||
|
||||
for (int32 i = 0; i < 256; i++) {
|
||||
if (!isdigit(i)) {
|
||||
docTextView->DisallowChar(i);
|
||||
appTextView->DisallowChar(i);
|
||||
folderTextView->DisallowChar(i);
|
||||
}
|
||||
}
|
||||
|
||||
docTextView->SetMaxBytes(4);
|
||||
appTextView->SetMaxBytes(4);
|
||||
folderTextView->SetMaxBytes(4);
|
||||
|
||||
int32 docCount = fSettings.recentDocsCount;
|
||||
int32 appCount = fSettings.recentAppsCount;
|
||||
int32 folderCount = fSettings.recentFoldersCount;
|
||||
|
||||
fMenuRecentDocuments->SetValue(fSettings.recentDocsEnabled);
|
||||
fMenuRecentDocumentCount->SetEnabled(fSettings.recentDocsEnabled);
|
||||
fMenuRecentDocumentCount->SetRange(0, 50);
|
||||
fMenuRecentDocumentCount->SetValue(fSettings.recentDocsCount);
|
||||
|
||||
fMenuRecentApplications->SetValue(fSettings.recentAppsEnabled);
|
||||
fMenuRecentApplicationCount->SetEnabled(fSettings.recentAppsEnabled);
|
||||
fMenuRecentApplicationCount->SetRange(0, 50);
|
||||
fMenuRecentApplicationCount->SetValue(fSettings.recentAppsCount);
|
||||
|
||||
fMenuRecentFolders->SetValue(fSettings.recentFoldersEnabled);
|
||||
fMenuRecentFolderCount->SetEnabled(fSettings.recentFoldersEnabled);
|
||||
|
||||
BString docString;
|
||||
BString appString;
|
||||
BString folderString;
|
||||
|
||||
docString << docCount;
|
||||
appString << appCount;
|
||||
folderString << folderCount;
|
||||
|
||||
fMenuRecentDocumentCount->SetText(docString.String());
|
||||
fMenuRecentApplicationCount->SetText(appString.String());
|
||||
fMenuRecentFolderCount->SetText(folderString.String());
|
||||
fMenuRecentFolderCount->SetRange(0, 50);
|
||||
fMenuRecentFolderCount->SetValue(fSettings.recentFoldersCount);
|
||||
|
||||
// Applications settings
|
||||
fAppsSort->SetValue(fSettings.sortRunningApps);
|
||||
@@ -516,21 +488,15 @@ PreferencesWindow::_UpdatePreferences(desk_settings* settings)
|
||||
updateRecentCounts = true;
|
||||
}
|
||||
if (current->recentDocsCount != settings->recentDocsCount) {
|
||||
BString docString;
|
||||
docString << settings->recentDocsCount;
|
||||
fMenuRecentDocumentCount->SetText(docString.String());
|
||||
fMenuRecentDocumentCount->SetValue(settings->recentDocsCount);
|
||||
updateRecentCounts = true;
|
||||
}
|
||||
if (current->recentFoldersCount != settings->recentFoldersCount) {
|
||||
BString folderString;
|
||||
folderString << settings->recentFoldersCount;
|
||||
fMenuRecentFolderCount->SetText(folderString.String());
|
||||
fMenuRecentFolderCount->SetValue(settings->recentFoldersCount);
|
||||
updateRecentCounts = true;
|
||||
}
|
||||
if (current->recentAppsCount != settings->recentAppsCount) {
|
||||
BString appString;
|
||||
appString << settings->recentAppsCount;
|
||||
fMenuRecentApplicationCount->SetText(appString.String());
|
||||
fMenuRecentApplicationCount->SetValue(settings->recentAppsCount);
|
||||
updateRecentCounts = true;
|
||||
}
|
||||
if (current->alwaysOnTop != settings->alwaysOnTop) {
|
||||
@@ -556,13 +522,9 @@ PreferencesWindow::_UpdateRecentCounts()
|
||||
{
|
||||
BMessage message(kUpdateRecentCounts);
|
||||
|
||||
int32 docCount = atoi(fMenuRecentDocumentCount->Text());
|
||||
int32 appCount = atoi(fMenuRecentApplicationCount->Text());
|
||||
int32 folderCount = atoi(fMenuRecentFolderCount->Text());
|
||||
|
||||
message.AddInt32("documents", max_c(0, docCount));
|
||||
message.AddInt32("applications", max_c(0, appCount));
|
||||
message.AddInt32("folders", max_c(0, folderCount));
|
||||
message.AddInt32("documents", fMenuRecentDocumentCount->Value());
|
||||
message.AddInt32("applications", fMenuRecentApplicationCount->Value());
|
||||
message.AddInt32("folders", fMenuRecentFolderCount->Value());
|
||||
|
||||
message.AddBool("documentsEnabled", fMenuRecentDocuments->Value());
|
||||
message.AddBool("applicationsEnabled", fMenuRecentApplications->Value());
|
||||
|
||||
@@ -34,7 +34,7 @@ class BFile;
|
||||
class BMessage;
|
||||
class BRadioButton;
|
||||
class BSlider;
|
||||
class BTextControl;
|
||||
class BSpinner;
|
||||
|
||||
class PreferencesWindow : public BWindow
|
||||
{
|
||||
@@ -67,9 +67,9 @@ private:
|
||||
BCheckBox* fMenuRecentApplications;
|
||||
BCheckBox* fMenuRecentFolders;
|
||||
|
||||
BTextControl* fMenuRecentDocumentCount;
|
||||
BTextControl* fMenuRecentApplicationCount;
|
||||
BTextControl* fMenuRecentFolderCount;
|
||||
BSpinner* fMenuRecentDocumentCount;
|
||||
BSpinner* fMenuRecentApplicationCount;
|
||||
BSpinner* fMenuRecentFolderCount;
|
||||
|
||||
BCheckBox* fAppsSort;
|
||||
BCheckBox* fAppsSortTrackerFirst;
|
||||
|
||||
@@ -239,7 +239,8 @@ private:
|
||||
PackageContentsView::PackageContentsView(const char* name)
|
||||
:
|
||||
BView("package_contents_view", B_WILL_DRAW),
|
||||
fPackageLock("package contents populator lock")
|
||||
fPackageLock("package contents populator lock"),
|
||||
fLastPackageState(NONE)
|
||||
{
|
||||
fContentListView = new BOutlineListView("content list view",
|
||||
B_SINGLE_SELECTION_LIST);
|
||||
@@ -283,8 +284,14 @@ PackageContentsView::AllAttached()
|
||||
void
|
||||
PackageContentsView::SetPackage(const PackageInfoRef& package)
|
||||
{
|
||||
if (fPackage == package)
|
||||
// When getting a ref to the same package, don't return when the
|
||||
// package state has changed, since in that case, we may now be able
|
||||
// to read contents where we previously could not. (For example, the
|
||||
// package has been installed.)
|
||||
if (fPackage == package
|
||||
&& (package.Get() == NULL || package->State() == fLastPackageState)) {
|
||||
return;
|
||||
}
|
||||
|
||||
// printf("PackageContentsView::SetPackage(%s)\n",
|
||||
// package.Get() != NULL ? package->Name().String() : "NULL");
|
||||
@@ -294,6 +301,7 @@ PackageContentsView::SetPackage(const PackageInfoRef& package)
|
||||
{
|
||||
BAutolock lock(&fPackageLock);
|
||||
fPackage = package;
|
||||
fLastPackageState = package.Get() != NULL ? package->State() : NONE;
|
||||
}
|
||||
release_sem_etc(fContentPopulatorSem, 1, 0);
|
||||
}
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user