[haiku-commits] haiku.r1alpha4: hrevr1alpha4-44607 - src/preferences/media build/jam src/tests/system/kernel/cache src/apps/drivesetup src/apps/sudoku

  • From: leavengood@xxxxxxxxx
  • To: haiku-commits@xxxxxxxxxxxxx
  • Date: Mon, 24 Sep 2012 05:25:11 +0200 (CEST)

hrevr1alpha4-44607 adds 14 changesets to branch 'r1alpha4'
old head: 560f50437bba9579738bc92e0e90ef3ed8fff085
new head: 64911a689adf3fb7ce10f18d7c6a0ac1d8befc75

----------------------------------------------------------------------------

cd9795d: Tracker: Moving columns could make an horizontal scrollbar appear

                                [ Philippe Saint-Pierre <stpere@xxxxxxxxx> ]

b4962fe: Added drag & drop of disk/partition paths; drag a list item to 
terminal, pe, etc. and release to copy the path. (ticket #8872)
  
  Signed-off-by: Stephan Aßmus <superstippi@xxxxxx>

                                     [ Jacob Waterman <jwlhc172@xxxxxxxxx> ]

65ff809: Small cleanups to dragging partition entries code.

                                      [ Stephan Aßmus <superstippi@xxxxxx> ]

a7056fa: Refactored the stripping of debug symbols to be a per-archive basis.
  
  Setting 'HAIKU_STRIP_DEBUG_FROM_OPTIONAL_PACKAGES = 1' will enable the
  mechanism. By default all packages will be stripped. Passing anything
  other than '1' or 'true' in the InstallOptionalHaikuImagePackage call
  will disable it for a particular package.

                                        [ Matt Madia <mattmadia@xxxxxxxxx> ]

0e63108: Updated comment.

                                        [ Matt Madia <mattmadia@xxxxxxxxx> ]

66647c4: Ensure that wpa_supplicant does not get stripped. See #8603 for 
history.

                                        [ Matt Madia <mattmadia@xxxxxxxxx> ]

6a69e0c: Re-enable stripping of debug symbols for @alpha-*, @nightly-*
  
  For a GCC 2 hybrid image, this brings the size down from 781MiB to 743MiB.

                                        [ Matt Madia <mattmadia@xxxxxxxxx> ]

072771e: cache_abort_sub_transaction() did not maintain num_blocks.
  
  * When a block was only used in a sub-transaction, it was thrown away,
    but the transaction::num_blocks field was not decremented.
  * This caused transactions never considered finished which eventually
    led to bug #8942. This does not explain the disk corruption occurring
    in #8969, though.

                                   [ Axel Dörfler <axeld@xxxxxxxxxxxxxxxx> ]

c9b21d2: Extract demo packages to /boot. Added image package.

                                        [ Humdinger <humdingerb@xxxxxxxxx> ]

7f96ce1: Fixed saving the column state to a message.
  
  * This fixes copy/pasting the column state when the "display-as"
    feature is used.

                                   [ Axel Dörfler <axeld@xxxxxxxxxxxxxxxx> ]

7adf516: Reset controller::active_codec on uninit.
  
  * The controller structure is static, so if you closed the device,
    and the driver failed to initialize correctly (ie. finds no codec)
    on the second try, it would have crashed accessing an already freed
    codec.
  * Not sure why it fails to detect any codecs on second open, yet,
    though.

                                   [ Axel Dörfler <axeld@xxxxxxxxxxxxxxxx> ]

59592d6: Don't start showing the hint for each solved number.
  
  * Instead, only keep it visible when the user made it visible.
  * Minor cleanup.

                                   [ Axel Dörfler <axeld@xxxxxxxxxxxxxxxx> ]

5a00495: Cleanup.
  
  * Sort methods like they are declared in the header.
  * Fixed a number of coding style violations and other oddities.

                                   [ Axel Dörfler <axeld@xxxxxxxxxxxxxxxx> ]

64911a6: Always set a minimum size for the list view.
  
  * Otherwise it doesn't look good when the media server is just
    being launched (so there are no nodes yet).

                                   [ Axel Dörfler <axeld@xxxxxxxxxxxxxxxx> ]

----------------------------------------------------------------------------

17 files changed, 369 insertions(+), 297 deletions(-)
build/jam/HaikuCD                                  |    2 -
build/jam/HaikuImage                               |    2 -
build/jam/ImageRules                               |   31 +-
build/jam/OptionalPackages                         |   20 +-
build/jam/ReleaseBuildProfiles                     |    2 +
build/jam/UserBuildConfig.ReadMe                   |    1 +
build/scripts/build_haiku_image                    |    6 +-
.../kernel/drivers/audio/hda/hda_controller.cpp    |    1 +
src/apps/drivesetup/PartitionList.cpp              |   41 +-
src/apps/drivesetup/PartitionList.h                |    5 +
src/apps/sudoku/SudokuView.cpp                     |   13 +-
src/kits/tracker/PoseView.cpp                      |    3 +-
src/kits/tracker/ViewState.cpp                     |    3 +-
src/preferences/media/MediaWindow.cpp              |  442 ++++++++--------
src/preferences/media/MediaWindow.h                |   54 +-
src/system/kernel/cache/block_cache.cpp            |    2 +
src/tests/system/kernel/cache/block_cache_test.cpp |   38 +-

############################################################################

Commit:      cd9795d5b4d68ffbf033f500d0d43551c474bb7f
URL:         http://cgit.haiku-os.org/haiku/commit/?id=cd9795d
Author:      Philippe Saint-Pierre <stpere@xxxxxxxxx>
Date:        Sat Sep 15 23:29:12 2012 UTC
Committer:   Ryan Leavengood <leavengood@xxxxxxxxx>
Commit-Date: Mon Sep 24 02:44:47 2012 UTC

Tracker: Moving columns could make an horizontal scrollbar appear

----------------------------------------------------------------------------

diff --git a/src/kits/tracker/PoseView.cpp b/src/kits/tracker/PoseView.cpp
index ec2f087..5e228fc 100644
--- a/src/kits/tracker/PoseView.cpp
+++ b/src/kits/tracker/PoseView.cpp
@@ -9324,7 +9324,8 @@ BPoseView::MoveColumnTo(BColumn* src, BColumn* dest)
                BColumn* column = fColumnList->ItemAt(index);
                column->SetOffset(offset);
                last = column;
-               offset = last->Offset() + last->Width() + 
kTitleColumnExtraMargin;
+               offset = last->Offset() + last->Width() + 
kTitleColumnExtraMargin
+                       - kRoomForLine / 2;
        }
 
        // invalidate everything to the right of miny

############################################################################

Commit:      b4962fe9f8d74e828f17ea891473d6e647d41fdd
URL:         http://cgit.haiku-os.org/haiku/commit/?id=b4962fe
Author:      Jacob Waterman <jwlhc172@xxxxxxxxx>
Date:        Thu Aug 23 16:11:33 2012 UTC
Committer:   Ryan Leavengood <leavengood@xxxxxxxxx>
Commit-Date: Mon Sep 24 02:45:37 2012 UTC

Ticket:      https://dev.haiku-os.org/ticket/8872

Added drag & drop of disk/partition paths; drag a list item to terminal, pe, 
etc. and release to copy the path. (ticket #8872)

Signed-off-by: Stephan Aßmus <superstippi@xxxxxx>

----------------------------------------------------------------------------

diff --git a/src/apps/drivesetup/PartitionList.cpp 
b/src/apps/drivesetup/PartitionList.cpp
index 49b9b84..b2e2a60 100644
--- a/src/apps/drivesetup/PartitionList.cpp
+++ b/src/apps/drivesetup/PartitionList.cpp
@@ -224,7 +224,7 @@ PartitionListRow::PartitionListRow(BPartition* partition)
                if (partition->ContainsFileSystem())
                        SetField(new BStringField(partition->Type()), 
kFilesystemColumn);
                else
-                       SetField(new BStringField(kUnavailableString), 
kFilesystemColumn);              
+                       SetField(new BStringField(kUnavailableString), 
kFilesystemColumn);
                SetField(new BStringField(kUnavailableString), 
kVolumeNameColumn);
        }
 
@@ -250,7 +250,7 @@ PartitionListRow::PartitionListRow(BPartition* partition)
 
                        delete_driver_settings(handle);
                }
-               
+
                SetField(new BStringField(parameters), kParametersColumn);
        } else {
                SetField(new BStringField(kUnavailableString), 
kParametersColumn);
@@ -281,6 +281,19 @@ PartitionListRow::PartitionListRow(partition_id parentID, 
partition_id id,
 }
 
 
+const char*
+PartitionListRow::DevicePath()
+{
+       BBitmapStringField* stringField
+               = dynamic_cast<BBitmapStringField*>(GetField(kDeviceColumn));
+
+       if (stringField == NULL)
+               return "";
+
+       return stringField->String();
+}
+
+
 // #pragma mark - PartitionListView
 
 
@@ -312,6 +325,30 @@ PartitionListView::AttachedToWindow()
 }
 
 
+bool
+PartitionListView::InitiateDrag(BPoint rowPoint, bool wasSelected)
+{
+       PartitionListRow* draggedRow
+               = dynamic_cast<PartitionListRow*>(RowAt(rowPoint));
+       if (draggedRow != NULL) {
+               BRect draggedRowRect;
+               GetRowRect(draggedRow, &draggedRowRect);
+
+               const char* draggedPath = draggedRow->DevicePath();
+               if (draggedPath != NULL) {
+                       BMessage *drag = new BMessage(B_MIME_DATA);
+                       drag->AddData("text/plain", B_MIME_TYPE, draggedPath, 
strlen(draggedPath));
+
+                       DragMessage(drag, draggedRowRect, NULL);
+
+                       return true;
+               }
+       }
+
+       return false;
+}
+
+
 PartitionListRow*
 PartitionListView::FindRow(partition_id id, PartitionListRow* parent)
 {
diff --git a/src/apps/drivesetup/PartitionList.h 
b/src/apps/drivesetup/PartitionList.h
index c3319ce..f4e504e 100644
--- a/src/apps/drivesetup/PartitionList.h
+++ b/src/apps/drivesetup/PartitionList.h
@@ -77,6 +77,8 @@ public:
                                                                        { 
return fOffset; }
                        off_t                           Size() const
                                                                        { 
return fSize; }
+
+                       const char*                     DevicePath();
 private:
                        partition_id            fPartitionID;
                        partition_id            fParentID;
@@ -93,6 +95,8 @@ public:
 
        virtual void                            AttachedToWindow();
 
+       virtual bool                            InitiateDrag(BPoint rowPoint, 
bool wasSelected);
+
                        PartitionListRow*       FindRow(partition_id id,
                                                                        
PartitionListRow* parent = NULL);
                        PartitionListRow*       AddPartition(BPartition* 
partition);

############################################################################

Commit:      65ff80987a31c8fbfb3fe037ccb36e5589bc59db
URL:         http://cgit.haiku-os.org/haiku/commit/?id=65ff809
Author:      Stephan Aßmus <superstippi@xxxxxx>
Date:        Sun Sep 16 09:11:40 2012 UTC
Committer:   Ryan Leavengood <leavengood@xxxxxxxxx>
Commit-Date: Mon Sep 24 02:45:39 2012 UTC

Small cleanups to dragging partition entries code.

----------------------------------------------------------------------------

diff --git a/src/apps/drivesetup/PartitionList.cpp 
b/src/apps/drivesetup/PartitionList.cpp
index b2e2a60..f711aa3 100644
--- a/src/apps/drivesetup/PartitionList.cpp
+++ b/src/apps/drivesetup/PartitionList.cpp
@@ -288,7 +288,7 @@ PartitionListRow::DevicePath()
                = dynamic_cast<BBitmapStringField*>(GetField(kDeviceColumn));
 
        if (stringField == NULL)
-               return "";
+               return NULL;
 
        return stringField->String();
 }
@@ -330,22 +330,22 @@ PartitionListView::InitiateDrag(BPoint rowPoint, bool 
wasSelected)
 {
        PartitionListRow* draggedRow
                = dynamic_cast<PartitionListRow*>(RowAt(rowPoint));
-       if (draggedRow != NULL) {
-               BRect draggedRowRect;
-               GetRowRect(draggedRow, &draggedRowRect);
+       if (draggedRow == NULL)
+               return false;
 
-               const char* draggedPath = draggedRow->DevicePath();
-               if (draggedPath != NULL) {
-                       BMessage *drag = new BMessage(B_MIME_DATA);
-                       drag->AddData("text/plain", B_MIME_TYPE, draggedPath, 
strlen(draggedPath));
+       const char* draggedPath = draggedRow->DevicePath();
+       if (draggedPath == NULL)
+               return false;
 
-                       DragMessage(drag, draggedRowRect, NULL);
+       BRect draggedRowRect;
+       GetRowRect(draggedRow, &draggedRowRect);
 
-                       return true;
-               }
-       }
+       BMessage dragMessage(B_MIME_DATA);
+       dragMessage.AddData("text/plain", B_MIME_TYPE, draggedPath,
+               strlen(draggedPath));
 
-       return false;
+       DragMessage(&dragMessage, draggedRowRect, NULL);
+       return true;
 }
 
 
diff --git a/src/apps/drivesetup/PartitionList.h 
b/src/apps/drivesetup/PartitionList.h
index f4e504e..8ed7952 100644
--- a/src/apps/drivesetup/PartitionList.h
+++ b/src/apps/drivesetup/PartitionList.h
@@ -79,6 +79,7 @@ public:
                                                                        { 
return fSize; }
 
                        const char*                     DevicePath();
+
 private:
                        partition_id            fPartitionID;
                        partition_id            fParentID;

############################################################################

Commit:      a7056faafa58e2fd7287e76db0f73b3951cd0f6c
URL:         http://cgit.haiku-os.org/haiku/commit/?id=a7056fa
Author:      Matt Madia <mattmadia@xxxxxxxxx>
Date:        Sun Sep 16 23:41:24 2012 UTC
Committer:   Ryan Leavengood <leavengood@xxxxxxxxx>
Commit-Date: Mon Sep 24 02:46:13 2012 UTC

Refactored the stripping of debug symbols to be a per-archive basis.

Setting 'HAIKU_STRIP_DEBUG_FROM_OPTIONAL_PACKAGES = 1' will enable the
mechanism. By default all packages will be stripped. Passing anything
other than '1' or 'true' in the InstallOptionalHaikuImagePackage call
will disable it for a particular package.

----------------------------------------------------------------------------

diff --git a/build/jam/HaikuCD b/build/jam/HaikuCD
index e88ba3b..d77e752 100644
--- a/build/jam/HaikuCD
+++ b/build/jam/HaikuCD
@@ -28,8 +28,6 @@ AddVariableToScript $(script) : isCD : 1 ;
 AddVariableToScript $(script) : cdLabel : $(HAIKU_CD_LABEL) ;
 AddVariableToScript $(script) : addBuildCompatibilityLibDir
        : $(HOST_ADD_BUILD_COMPATIBILITY_LIB_DIR) ;
-AddVariableToScript $(script) : stripOptionalPackageDebugSymbols
-       : $(HAIKU_STRIP_DEBUG_FROM_OPTIONAL_PACKAGES) ;
 AddTargetVariableToScript $(script) : <build>addattr ;
 AddTargetVariableToScript $(script) : <build>copyattr ;
 AddTargetVariableToScript $(script) : <build>rc ;
diff --git a/build/jam/HaikuImage b/build/jam/HaikuImage
index 81e9f08..759a1c8 100644
--- a/build/jam/HaikuImage
+++ b/build/jam/HaikuImage
@@ -892,8 +892,6 @@ AddVariableToScript $(script) : addBuildCompatibilityLibDir
        : $(HOST_ADD_BUILD_COMPATIBILITY_LIB_DIR) ;
 AddVariableToScript $(script) : dontClearImage : $(HAIKU_DONT_CLEAR_IMAGE) ;
 AddVariableToScript $(script) : updateOnly : [ IsUpdateHaikuImageOnly ] ;
-AddVariableToScript $(script) : stripOptionalPackageDebugSymbols
-       : $(HAIKU_STRIP_DEBUG_FROM_OPTIONAL_PACKAGES) ;
 AddTargetVariableToScript $(script) : <build>addattr ;
 AddTargetVariableToScript $(script) : <build>bfs_shell : bfsShell ;
 AddTargetVariableToScript $(script) : <build>fs_shell_command : fsShellCommand 
;
diff --git a/build/jam/ImageRules b/build/jam/ImageRules
index 48ebb82..c227540 100644
--- a/build/jam/ImageRules
+++ b/build/jam/ImageRules
@@ -283,16 +283,17 @@ rule CopyDirectoryToContainer container : directoryTokens 
: sourceDirectory
 }
 
 rule ExtractArchiveToContainer container : directoryTokens : archiveFile
-       : extractedSubDir
+       : extractedSubDir : stripDebugSymbols
 {
        # ExtractArchiveToContainer <container> : <directory> : <archiveFile>
-       #       : <extractedSubDir> ;
+       #       : <extractedSubDir> : <stripDebugSymbols> ;
 
        local directory = [ AddDirectoryToContainer $(container)
                : $(directoryTokens) ] ;
 
        ARCHIVE_FILES_TO_INSTALL on $(directory) += $(archiveFile) ;
        ARCHIVE_SUBDIR_TO_INSTALL_FROM on $(archiveFile) = $(extractedSubDir) ;
+       ARCHIVE_FILES_TO_STRIP on $(archiveFile) = $(stripDebugSymbols) ;
 }
 
 rule AddDriversToContainer container : relativeDirectoryTokens : targets
@@ -607,6 +608,11 @@ rule CreateContainerExtractFilesScript container : script
                        ARCHIVE_SUBDIR_TO_INSTALL_FROM on $(dummyTarget) =
                                $(extractedSubDir:E=.) ;
 
+                       local stripDebugSymbols = [ on $(archiveFile)
+                               return $(ARCHIVE_FILES_TO_STRIP) ] ;
+                       STRIP_DEBUG_SYMBOLS_FROM_ARCHIVE on $(dummyTarget) =
+                               $(stripDebugSymbols) ;
+
                        Depends $(dummyTarget) : $(initScript) $(archiveFile)
                                $(serializationDependency) ;
                        Depends $(script) : $(dummyTarget) ;
@@ -622,7 +628,8 @@ rule CreateContainerExtractFilesScript container : script
 actions AddExtractFileToContainerExtractFilesScript
 {
        echo extractFile "\"$(2[2])\"" "\"$(TARGET_DIR)\"" \
-               "\"$(ARCHIVE_SUBDIR_TO_INSTALL_FROM)\"" >> $(2[1])
+               "\"$(ARCHIVE_SUBDIR_TO_INSTALL_FROM)\"" \
+               "\"$(STRIP_DEBUG_SYMBOLS_FROM_ARCHIVE)\"" >> $(2[1])
 }
 
 
@@ -729,7 +736,7 @@ rule AddWifiFirmwareToHaikuImage driver : package : archive 
: extract
 }
 
 rule ExtractArchiveToHaikuImage dirTokens : archiveFile : alwaysUpdate
-       : extractedSubDir
+       : extractedSubDir : stripDebugSymbols
 {
        # ExtractArchiveToHaikuImage <dirTokens> : <archiveFile> : 
<alwaysUpdate>
        #       : <extractedSubDir> ;
@@ -738,7 +745,7 @@ rule ExtractArchiveToHaikuImage dirTokens : archiveFile : 
alwaysUpdate
        # requested.
        if ! [ IsUpdateHaikuImageOnly ] || $(alwaysUpdate) {
                ExtractArchiveToContainer $(HAIKU_IMAGE_CONTAINER_NAME) : 
$(dirTokens)
-                       : $(archiveFile) : $(extractedSubDir) ;
+                       : $(archiveFile) : $(extractedSubDir) : 
$(stripDebugSymbols) ;
        }
 }
 
@@ -825,6 +832,7 @@ rule InstallSourceArchive file : url
 }
 
 rule InstallOptionalHaikuImagePackage package : url : dirTokens : isCDPackage
+       : stripDebugSymbols
 {
        # download archive file
        local archiveFile = [ DownloadFile $(package) : $(url) ] ;
@@ -835,8 +843,17 @@ rule InstallOptionalHaikuImagePackage package : url : 
dirTokens : isCDPackage
                # copy onto image
                AddFilesToHaikuImage _packages_ : $(archiveFile) ;
        } else {
+               if $(HAIKU_STRIP_DEBUG_FROM_OPTIONAL_PACKAGES) = 1 {
+                       stripDebugSymbols ?= 1 ;
+                       # The script will only test for = 1. This is in case 
someone
+                       # manually set the flag 'true'
+                       if $(stripDebugSymbols) = true {
+                               stripDebugSymbols = 1 ;
+                       }
+               }
                # extract onto image
-               ExtractArchiveToHaikuImage $(dirTokens) : $(archiveFile) ;
+               ExtractArchiveToHaikuImage $(dirTokens) : $(archiveFile)
+                       : : : $(stripDebugSymbols) ;
        }
 }
 
@@ -1472,7 +1489,7 @@ actions BuildCDBootPPCImage1 bind MAPS
        || \
        genisoimage -v -hfs -part -map $(MAPS) -no-desktop -hfs-volid bootimg \
                -V bootimg -hfs-bless $(HAIKU_OUTPUT_DIR)/cd/ppc -prep-boot \
-               ppc/$(>[2]:D=) -r -o $(<) $(HAIKU_OUTPUT_DIR)/cd 
+               ppc/$(>[2]:D=) -r -o $(<) $(HAIKU_OUTPUT_DIR)/cd
        #$(RM) -R $(HAIKU_OUTPUT_DIR)/cd
 }
 
diff --git a/build/scripts/build_haiku_image b/build/scripts/build_haiku_image
index d6001f9..155e5f6 100755
--- a/build/scripts/build_haiku_image
+++ b/build/scripts/build_haiku_image
@@ -16,7 +16,6 @@ set -o errexit
 # dontClearImage
 # isVMwareImage
 # optionalPackageDescriptions
-# stripOptionalPackageDebugSymbols
 #
 # addattr
 # copyattr
@@ -158,10 +157,11 @@ stripDebugInfo()
 
 extractFile()
 {
-       # extractFile <archive> <directory>
+       # extractFile <archive> <directory> <extractedSubDir> 
<stripDebugSymbols>
        archiveFile=$1
        targetExtractedDir=$2
        extractedSubDir=$3
+       stripDebugSymbols=$4
 
        echo "Extracting $archiveFile ..."
 
@@ -188,7 +188,7 @@ extractFile()
                rm $extractDir/.OptionalPackageDescription
        fi
 
-       if [ "$stripOptionalPackageDebugSymbols" = "1" ]; then
+       if [ "$stripDebugSymbols" = "1" ]; then
                # strip executables in common/bin
                if [ -d $extractDir/common/bin ]; then
                        for file in `find $extractDir/common/bin -type f -a 
-perm +100 \

############################################################################

Commit:      0e63108c644dac111f9ec7c7886f4a84be2b3066
URL:         http://cgit.haiku-os.org/haiku/commit/?id=0e63108
Author:      Matt Madia <mattmadia@xxxxxxxxx>
Date:        Sun Sep 16 23:45:09 2012 UTC
Committer:   Ryan Leavengood <leavengood@xxxxxxxxx>
Commit-Date: Mon Sep 24 02:46:18 2012 UTC

Updated comment.

----------------------------------------------------------------------------

diff --git a/build/jam/UserBuildConfig.ReadMe b/build/jam/UserBuildConfig.ReadMe
index d1c9eb1..637de80 100644
--- a/build/jam/UserBuildConfig.ReadMe
+++ b/build/jam/UserBuildConfig.ReadMe
@@ -63,6 +63,7 @@ HAIKU_IMAGE_DIR               = /tmp ;
 HAIKU_IMAGE_SIZE       = 100 ;
 
 # Enable stripping the debug symbols from optional packages.
+# Note, some optional packages may override this to prevent stripping.
 HAIKU_STRIP_DEBUG_FROM_OPTIONAL_PACKAGES = 1 ;
 
 # Set image volume label to "Walter". Default label is "Haiku".

############################################################################

Commit:      66647c47bab22e076e627b7e668e21ed932031c6
URL:         http://cgit.haiku-os.org/haiku/commit/?id=66647c4
Author:      Matt Madia <mattmadia@xxxxxxxxx>
Date:        Sun Sep 16 23:45:44 2012 UTC
Committer:   Ryan Leavengood <leavengood@xxxxxxxxx>
Commit-Date: Mon Sep 24 02:46:22 2012 UTC

Ticket:      https://dev.haiku-os.org/ticket/8603

Ensure that wpa_supplicant does not get stripped. See #8603 for history.

----------------------------------------------------------------------------

diff --git a/build/jam/OptionalPackages b/build/jam/OptionalPackages
index f0067ec..c52c30e 100644
--- a/build/jam/OptionalPackages
+++ b/build/jam/OptionalPackages
@@ -849,7 +849,7 @@ if [ IsOptionalHaikuImagePackageAdded DevelopmentMin ] && 
$(TARGET_ARCH) = x86 {
        AddHeaderDirectoryToHaikuImage libs tiff : 3rdparty ;
        AddHeaderDirectoryToHaikuImage libs zlib : 3rdparty ;
 
-       CopyDirectoryToHaikuImage develop headers : 
+       CopyDirectoryToHaikuImage develop headers :
                [ FDirName $(HAIKU_FREETYPE_DIR) develop headers 3rdparty ] ;
        CopyDirectoryToHaikuImage develop headers : $(HAIKU_JPEG_HEADERS)
                : 3rdparty ;
@@ -2051,11 +2051,13 @@ if [ IsOptionalHaikuImagePackageAdded wpa_supplicant ] {
        } else if $(HAIKU_GCC_VERSION[1]) >= 4 {
                InstallOptionalHaikuImagePackage
                        wpa_supplicant-0.7.3-x86-gcc4-2012-04-03.zip
-                       : 
$(baseURL)/wpa_supplicant-0.7.3-x86-gcc4-2012-04-03.zip ;
+                       : 
$(baseURL)/wpa_supplicant-0.7.3-x86-gcc4-2012-04-03.zip
+                       : : : false ;
        } else {
                InstallOptionalHaikuImagePackage
                        wpa_supplicant-0.7.3-x86-gcc2-2012-04-03.zip
-                       : 
$(baseURL)/wpa_supplicant-0.7.3-x86-gcc2-2012-04-03.zip ;
+                       : 
$(baseURL)/wpa_supplicant-0.7.3-x86-gcc2-2012-04-03.zip
+                       : : : false ;
        }
 }
 

############################################################################

Commit:      6a69e0cad5aba3e6ae506d45f801c9e0b4a678fa
URL:         http://cgit.haiku-os.org/haiku/commit/?id=6a69e0c
Author:      Matt Madia <mattmadia@xxxxxxxxx>
Date:        Sun Sep 16 23:47:29 2012 UTC
Committer:   Ryan Leavengood <leavengood@xxxxxxxxx>
Commit-Date: Mon Sep 24 02:47:15 2012 UTC

Re-enable stripping of debug symbols for @alpha-*, @nightly-*

For a GCC 2 hybrid image, this brings the size down from 781MiB to 743MiB.

----------------------------------------------------------------------------

diff --git a/build/jam/ReleaseBuildProfiles b/build/jam/ReleaseBuildProfiles
index 8857651..8de37d9 100644
--- a/build/jam/ReleaseBuildProfiles
+++ b/build/jam/ReleaseBuildProfiles
@@ -16,6 +16,7 @@ switch $(HAIKU_BUILD_PROFILE) {
                HAIKU_ROOT_USER_REAL_NAME = "Yourself" ;
                AddGroupToHaikuImage party : 101 : user sshd ;
                HAIKU_IMAGE_HOST_NAME = shredder ;
+               HAIKU_STRIP_DEBUG_FROM_OPTIONAL_PACKAGES = 1 ;
                HAIKU_IMAGE_SIZE = 800 ;
 
                AddOptionalHaikuImagePackages TimGMSoundFont TrackerNewTemplates
@@ -37,6 +38,7 @@ switch $(HAIKU_BUILD_PROFILE) {
                HAIKU_ROOT_USER_NAME = user ;
                HAIKU_ROOT_USER_REAL_NAME = "Yourself" ;
                AddGroupToHaikuImage party : 101 : user sshd ;
+               HAIKU_STRIP_DEBUG_FROM_OPTIONAL_PACKAGES = 1 ;
                HAIKU_IMAGE_HOST_NAME = shredder ;
                HAIKU_IMAGE_SIZE = 600 ;
 

############################################################################

Commit:      072771e7cd0d0a64fa946130575b0856fff282ca
URL:         http://cgit.haiku-os.org/haiku/commit/?id=072771e
Author:      Axel Dörfler <axeld@xxxxxxxxxxxxxxxx>
Date:        Wed Sep 19 18:06:19 2012 UTC
Committer:   Ryan Leavengood <leavengood@xxxxxxxxx>
Commit-Date: Mon Sep 24 02:47:34 2012 UTC

Ticket:      https://dev.haiku-os.org/ticket/8942
Ticket:      https://dev.haiku-os.org/ticket/8969

cache_abort_sub_transaction() did not maintain num_blocks.

* When a block was only used in a sub-transaction, it was thrown away,
  but the transaction::num_blocks field was not decremented.
* This caused transactions never considered finished which eventually
  led to bug #8942. This does not explain the disk corruption occurring
  in #8969, though.

----------------------------------------------------------------------------

diff --git a/src/system/kernel/cache/block_cache.cpp 
b/src/system/kernel/cache/block_cache.cpp
index 22e20cc..b18dc1b 100644
--- a/src/system/kernel/cache/block_cache.cpp
+++ b/src/system/kernel/cache/block_cache.cpp
@@ -3059,6 +3059,8 @@ cache_abort_sub_transaction(void* _cache, int32 id)
 
                        block->transaction_next = NULL;
                        block->transaction = NULL;
+                       transaction->num_blocks--;
+
                        if (block->previous_transaction == NULL) {
                                cache->Free(block->original_data);
                                block->original_data = NULL;
diff --git a/src/tests/system/kernel/cache/block_cache_test.cpp 
b/src/tests/system/kernel/cache/block_cache_test.cpp
index d0b88f1..561f6ec 100644
--- a/src/tests/system/kernel/cache/block_cache_test.cpp
+++ b/src/tests/system/kernel/cache/block_cache_test.cpp
@@ -20,6 +20,8 @@
 
 #define TEST_BLOCKS(number, count) \
        test_blocks(number, count, __LINE__)
+#define TEST_TRANSACTION(id, num, mainNum, subNum) \
+       test_transaction(id, num, mainNum, subNum, __LINE__)
 
 #define TEST_BLOCK_DATA(block, number, type) \
        if ((block)->type ## _data != NULL && gBlocks[(number)]. type == 0) \
@@ -158,6 +160,28 @@ init_test_blocks()
 
 
 void
+test_transaction(int32 id, int32 numBlocks, int32 numMainBlocks,
+       int32 numSubBlocks, int32 line)
+{
+       MutexLocker locker(&gCache->lock);
+       cache_transaction* transaction = lookup_transaction(gCache, id);
+
+       if (numBlocks != transaction->num_blocks) {
+               error(line, "Transaction %d has wrong num_blocks (is %d, should 
be "
+                       "%d)!", id, transaction->num_blocks, numBlocks);
+       }
+       if (numMainBlocks != transaction->main_num_blocks) {
+               error(line, "Transaction %d has wrong num_blocks (is %d, should 
be "
+                       "%d)!", id, transaction->main_num_blocks, 
numMainBlocks);
+       }
+       if (numSubBlocks != transaction->sub_num_blocks) {
+               error(line, "Transaction %d has wrong num_blocks (is %d, should 
be "
+                       "%d)!", id, transaction->sub_num_blocks, numSubBlocks);
+       }
+}
+
+
+void
 test_blocks(off_t number, int32 count, int32 line)
 {
        printf("  %ld\n", gSubTest++);
@@ -391,7 +415,9 @@ test_abort_sub_transaction()
 
        block_cache_put(gCache, 1);
 
+       TEST_TRANSACTION(id, 2, 2, 1);
        cache_abort_sub_transaction(gCache, id);
+       TEST_TRANSACTION(id, 2, 2, 0);
 
        gBlocks[0].write = true;
        gBlocks[0].is_dirty = false;
@@ -417,7 +443,9 @@ test_abort_sub_transaction()
        gBlocks[1].is_dirty = true;
        TEST_BLOCKS(1, 1);
 
+       TEST_TRANSACTION(id, 1, 0, 0);
        cache_start_sub_transaction(gCache, id);
+       TEST_TRANSACTION(id, 1, 1, 0);
 
        gBlocks[0].present = true;
 
@@ -427,7 +455,9 @@ test_abort_sub_transaction()
 
        block_cache_put(gCache, 0);
 
+       TEST_TRANSACTION(id, 2, 1, 1);
        cache_abort_sub_transaction(gCache, id);
+       TEST_TRANSACTION(id, 1, 1, 0);
 
        gBlocks[0].write = false;
        gBlocks[0].is_dirty = false;
@@ -445,9 +475,6 @@ test_abort_sub_transaction()
 void
 test_block_cache_discard()
 {
-       // TODO: test transaction-less block caches
-       // TODO: test read-only block caches
-
        // Test transactions and block caches
 
        start_test("Discard in main");
@@ -469,11 +496,14 @@ test_block_cache_discard()
 
        gBlocks[2].present = false;
 
+       TEST_TRANSACTION(id, 1, 0, 0);
        block = block_cache_get_empty(gCache, 2, id);
+       TEST_TRANSACTION(id, 2, 0, 0);
        block_cache_discard(gCache, 2, 1);
        block_cache_put(gCache, 2);
 
        cache_end_transaction(gCache, id, NULL, NULL);
+       TEST_TRANSACTION(id, 1, 0, 0);
        cache_sync_transaction(gCache, id);
 
        start_test("Discard in sub");
@@ -606,6 +636,8 @@ main(int argc, char** argv)
 {
        block_cache_init();
 
+       // TODO: test transaction-less block caches
+       // TODO: test read-only block caches
        test_abort_transaction();
        test_abort_sub_transaction();
        test_block_cache_discard();

############################################################################

Commit:      c9b21d27156fcff930defc91f7bfaabe0f8475dd
URL:         http://cgit.haiku-os.org/haiku/commit/?id=c9b21d2
Author:      Humdinger <humdingerb@xxxxxxxxx>
Date:        Sat Sep 22 10:32:22 2012 UTC
Committer:   Ryan Leavengood <leavengood@xxxxxxxxx>
Commit-Date: Mon Sep 24 02:54:42 2012 UTC

Extract demo packages to /boot. Added image package.

----------------------------------------------------------------------------

diff --git a/build/jam/OptionalPackages b/build/jam/OptionalPackages
index c52c30e..10cbfbf 100644
--- a/build/jam/OptionalPackages
+++ b/build/jam/OptionalPackages
@@ -579,7 +579,7 @@ if [ IsOptionalHaikuImagePackageAdded CVS ] {
 if [ IsOptionalHaikuImagePackageAdded DemoPackage_Audio ] {
        InstallOptionalHaikuImagePackage DemoPackage_Audio-0.1-2012-02-19.zip
                : $(baseURL)/DemoPackage_Audio-0.1-2012-02-19.zip
-               : home ;
+               : ;
 }
 
 
@@ -587,15 +587,15 @@ if [ IsOptionalHaikuImagePackageAdded DemoPackage_Audio ] 
{
 if [ IsOptionalHaikuImagePackageAdded DemoPackage_Data ] {
        InstallOptionalHaikuImagePackage DemoPackage_Data-0.1-2012-02-19.zip
                : $(baseURL)/DemoPackage_Data-0.1-2012-02-19.zip
-               : home ;
+               : ;
 }
 
 
 # DemoPackage_Image
 if [ IsOptionalHaikuImagePackageAdded DemoPackage_Image ] {
-       InstallOptionalHaikuImagePackage DemoPackage_Image-0.1-2012-02-19.zip
-               : $(baseURL)/DemoPackage_Image-0.1-2012-02-19.zip
-               : home ;
+       InstallOptionalHaikuImagePackage DemoPackage_Image-0.2-2012-09-22.zip
+               : $(baseURL)/DemoPackage_Image-0.2-2012-09-22.zip
+               : ;
 }
 
 
@@ -603,7 +603,7 @@ if [ IsOptionalHaikuImagePackageAdded DemoPackage_Image ] {
 if [ IsOptionalHaikuImagePackageAdded DemoPackage_Video ] {
        InstallOptionalHaikuImagePackage DemoPackage_Video-0.1-2012-02-19.zip
                : $(baseURL)/DemoPackage_Video-0.1-2012-02-19.zip
-               : home ;
+               : ;
 }
 
 

############################################################################

Commit:      7f96ce148534a2ce8687e22c271d234bbb1ecb09
URL:         http://cgit.haiku-os.org/haiku/commit/?id=7f96ce1
Author:      Axel Dörfler <axeld@xxxxxxxxxxxxxxxx>
Date:        Sun Sep 23 06:30:35 2012 UTC
Committer:   Ryan Leavengood <leavengood@xxxxxxxxx>
Commit-Date: Mon Sep 24 02:55:33 2012 UTC

Fixed saving the column state to a message.

* This fixes copy/pasting the column state when the "display-as"
  feature is used.

----------------------------------------------------------------------------

diff --git a/src/kits/tracker/ViewState.cpp b/src/kits/tracker/ViewState.cpp
index 8ebaaf6..831ccf4 100644
--- a/src/kits/tracker/ViewState.cpp
+++ b/src/kits/tracker/ViewState.cpp
@@ -238,8 +238,7 @@ BColumn::ArchiveToMessage(BMessage &message) const
        message.AddString(kColumnAttrName, fAttrName);
        message.AddInt32(kColumnAttrHashName, static_cast<int32>(fAttrHash));
        message.AddInt32(kColumnAttrTypeName, static_cast<int32>(fAttrType));
-       if (fDisplayAs.Length() > 0)
-               message.AddString(kColumnDisplayAsName, fDisplayAs.String());
+       message.AddString(kColumnDisplayAsName, fDisplayAs.String());
        message.AddBool(kColumnStatFieldName, fStatField);
        message.AddBool(kColumnEditableName, fEditable);
 }

############################################################################

Commit:      7adf5162e73c55a592eed9026cc46160f91e9a0e
URL:         http://cgit.haiku-os.org/haiku/commit/?id=7adf516
Author:      Axel Dörfler <axeld@xxxxxxxxxxxxxxxx>
Date:        Sun Sep 23 09:16:28 2012 UTC
Committer:   Ryan Leavengood <leavengood@xxxxxxxxx>
Commit-Date: Mon Sep 24 02:55:55 2012 UTC

Reset controller::active_codec on uninit.

* The controller structure is static, so if you closed the device,
  and the driver failed to initialize correctly (ie. finds no codec)
  on the second try, it would have crashed accessing an already freed
  codec.
* Not sure why it fails to detect any codecs on second open, yet,
  though.

----------------------------------------------------------------------------

diff --git a/src/add-ons/kernel/drivers/audio/hda/hda_controller.cpp 
b/src/add-ons/kernel/drivers/audio/hda/hda_controller.cpp
index f3a6891..9c404ce 100644
--- a/src/add-ons/kernel/drivers/audio/hda/hda_controller.cpp
+++ b/src/add-ons/kernel/drivers/audio/hda/hda_controller.cpp
@@ -1006,5 +1006,6 @@ hda_hw_uninit(hda_controller* controller)
                if (controller->codecs[index] != NULL)
                        hda_codec_delete(controller->codecs[index]);
        }
+       controller->active_codec = NULL;
 }
 

############################################################################

Commit:      59592d6539421098c7d50be978fc24b2f8274511
URL:         http://cgit.haiku-os.org/haiku/commit/?id=59592d6
Author:      Axel Dörfler <axeld@xxxxxxxxxxxxxxxx>
Date:        Sun Sep 23 09:23:29 2012 UTC
Committer:   Ryan Leavengood <leavengood@xxxxxxxxx>
Commit-Date: Mon Sep 24 02:56:37 2012 UTC

Don't start showing the hint for each solved number.

* Instead, only keep it visible when the user made it visible.
* Minor cleanup.

----------------------------------------------------------------------------

diff --git a/src/apps/sudoku/SudokuView.cpp b/src/apps/sudoku/SudokuView.cpp
index 8d5d111..e595047 100644
--- a/src/apps/sudoku/SudokuView.cpp
+++ b/src/apps/sudoku/SudokuView.cpp
@@ -889,7 +889,7 @@ SudokuView::MouseDown(BPoint where)
                                fLastField = field;
                        }
 
-                       if (value + 1 != fValueHintValue)
+                       if (value + 1 != fValueHintValue && fValueHintValue != 
~0UL)
                                _SetValueHintValue(value + 1);
 
                        if (wasCompleted != fField->IsValueCompleted(value + 1))
@@ -1208,17 +1208,14 @@ SudokuView::_DrawHints(uint32 x, uint32 y)
        for (uint32 j = 0; j < fBlockSize; j++) {
                for (uint32 i = 0; i < fBlockSize; i++) {
                        uint32 value = j * fBlockSize + i;
-                       if (hintMask & (1UL << value)) {
-//                             if (value + 1 == fValueHintValue)
-//                                     SetHighColor(kValueHintBackgroundColor);
-//                             else
-                                       SetHighColor(kHintColor);
-                       }else {
+                       if ((hintMask & (1UL << value)) != 0) {
+                               SetHighColor(kHintColor);
+                       } else {
                                if (!showAll)
                                        continue;
 
                                if ((fHintFlags & kMarkValidHints) == 0
-                                       || validMask & (1UL << value))
+                                       || (validMask & (1UL << value)) != 0)
                                        SetHighColor(110, 110, 80);
                                else
                                        SetHighColor(180, 180, 120);

############################################################################

Commit:      5a00495b7d35e57b32d8de7a686e284367e4e099
URL:         http://cgit.haiku-os.org/haiku/commit/?id=5a00495
Author:      Axel Dörfler <axeld@xxxxxxxxxxxxxxxx>
Date:        Sun Sep 23 13:44:21 2012 UTC
Committer:   Ryan Leavengood <leavengood@xxxxxxxxx>
Commit-Date: Mon Sep 24 03:00:08 2012 UTC

Cleanup.

* Sort methods like they are declared in the header.
* Fixed a number of coding style violations and other oddities.

----------------------------------------------------------------------------

diff --git a/src/preferences/media/MediaWindow.cpp 
b/src/preferences/media/MediaWindow.cpp
index c283904..049b5cc 100644
--- a/src/preferences/media/MediaWindow.cpp
+++ b/src/preferences/media/MediaWindow.cpp
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2003-2010, Haiku, Inc.
+ * Copyright 2003-2012, Haiku, Inc.
  * Distributed under the terms of the MIT license.
  *
  * Authors:
@@ -148,7 +148,9 @@ MediaWindow::SmartNode::_FreeNode()
 }
 
 
-// MediaWindow - Constructor
+// #pragma mark -
+
+
 MediaWindow::MediaWindow(BRect frame)
        :
        BWindow(frame, B_TRANSLATE_SYSTEM_NAME("Media"), B_TITLED_WINDOW,
@@ -162,14 +164,7 @@ MediaWindow::MediaWindow(BRect frame)
        fAlert(NULL),
        fInitCheck(B_OK)
 {
-       InitWindow();
-}
-
-
-status_t
-MediaWindow::InitCheck()
-{
-       return fInitCheck;
+       _InitWindow();
 }
 
 
@@ -187,14 +182,20 @@ MediaWindow::~MediaWindow()
        BPath path;
        if (find_directory(B_USER_SETTINGS_DIRECTORY, &path) == B_OK) {
                path.Append(SETTINGS_FILE);
-               BFile file(path.Path(), 
B_READ_WRITE|B_CREATE_FILE|B_ERASE_FILE);
-               if (file.InitCheck()==B_OK) {
+               BFile file(path.Path(), B_READ_WRITE | B_CREATE_FILE | 
B_ERASE_FILE);
+               if (file.InitCheck() == B_OK)
                        file.Write(buffer, strlen(buffer));
-               }
        }
 }
 
 
+status_t
+MediaWindow::InitCheck()
+{
+       return fInitCheck;
+}
+
+
 void
 MediaWindow::SelectNode(const dormant_node_info* node)
 {
@@ -260,123 +261,91 @@ 
MediaWindow::UpdateOutputListItem(MediaListItem::media_type type,
 }
 
 
-void
-MediaWindow::_FindNodes()
+bool
+MediaWindow::QuitRequested()
 {
-       _FindNodes(B_MEDIA_RAW_AUDIO, B_PHYSICAL_OUTPUT, fAudioOutputs);
-       _FindNodes(B_MEDIA_RAW_AUDIO, B_PHYSICAL_INPUT, fAudioInputs);
-       _FindNodes(B_MEDIA_ENCODED_AUDIO, B_PHYSICAL_OUTPUT, fAudioOutputs);
-       _FindNodes(B_MEDIA_ENCODED_AUDIO, B_PHYSICAL_INPUT, fAudioInputs);
-       _FindNodes(B_MEDIA_RAW_VIDEO, B_PHYSICAL_OUTPUT, fVideoOutputs);
-       _FindNodes(B_MEDIA_RAW_VIDEO, B_PHYSICAL_INPUT, fVideoInputs);
-       _FindNodes(B_MEDIA_ENCODED_VIDEO, B_PHYSICAL_OUTPUT, fVideoOutputs);
-       _FindNodes(B_MEDIA_ENCODED_VIDEO, B_PHYSICAL_INPUT, fVideoInputs);
+       // stop watching the MediaRoster
+       fCurrentNode.SetTo(NULL);
+       be_app->PostMessage(B_QUIT_REQUESTED);
+       return true;
 }
 
 
 void
-MediaWindow::_FindNodes(media_type type, uint64 kind, NodeList& into)
-{
-       dormant_node_info node_info[64];
-       int32 node_info_count = 64;
-
-       media_format format;
-       media_format* nodeInputFormat = NULL, *nodeOutputFormat = NULL;
-       format.type = type;
-
-       // output nodes must be BBufferConsumers => they have an input format
-       // input nodes must be BBufferProducers => they have an output format
-       if (kind & B_PHYSICAL_OUTPUT)
-               nodeInputFormat = &format;
-       else if (kind & B_PHYSICAL_INPUT)
-               nodeOutputFormat = &format;
-       else
-               return;
-
-       BMediaRoster* roster = BMediaRoster::Roster();
-
-       if (roster->GetDormantNodes(node_info, &node_info_count, 
nodeInputFormat,
-               nodeOutputFormat, NULL, kind) != B_OK) {
-               // TODO: better error reporting!
-               fprintf(stderr, "error\n");
-               return;
-       }
-
-       for (int32 i = 0; i < node_info_count; i++) {
-               PRINT(("node : %s, media_addon %i, flavor_id %i\n",
-                       node_info[i].name, (int)node_info[i].addon,
-                       (int)node_info[i].flavor_id));
-
-               dormant_node_info* info = new dormant_node_info();
-               strncpy(info->name, node_info[i].name, B_MEDIA_NAME_LENGTH);
-               info->flavor_id = node_info[i].flavor_id;
-               info->addon = node_info[i].addon;
-               into.AddItem(info);
-       }
-}
-
-
-NodeListItem*
-MediaWindow::_FindNodeListItem(dormant_node_info* info)
+MediaWindow::MessageReceived(BMessage* message)
 {
-       NodeListItem audioItem(info, MediaListItem::AUDIO_TYPE);
-       NodeListItem videoItem(info, MediaListItem::VIDEO_TYPE);
-
-       NodeListItem::Comparator audioComparator(&audioItem);
-       NodeListItem::Comparator videoComparator(&videoItem);
-
-       for (int32 i = 0; i < fListView->CountItems(); i++) {
-               MediaListItem* item
-                       = static_cast<MediaListItem*>(fListView->ItemAt(i));
-               item->Accept(audioComparator);
-               if (audioComparator.result == 0)
-                       return static_cast<NodeListItem*>(item);
-
-               item->Accept(videoComparator);
-               if (videoComparator.result == 0)
-                       return static_cast<NodeListItem*>(item);
-       }
-       return NULL;
-}
-
+       switch (message->what) {
+               case ML_INIT_MEDIA:
+                       _InitMedia(false);
+                       break;
+               case ML_RESTART_MEDIA_SERVER:
+               {
+                       thread_id thread = 
spawn_thread(&MediaWindow::_RestartMediaServices,
+                               "restart_thread", B_NORMAL_PRIORITY, this);
+                       if (thread < 0)
+                               fprintf(stderr, "couldn't create restart 
thread\n");
+                       else
+                               resume_thread(thread);
+                       break;
+               }
+               case B_MEDIA_WEB_CHANGED:
+               case ML_SELECTED_NODE:
+               {
+                       PRINT_OBJECT(*message);
 
-void
-MediaWindow::_UpdateListViewMinWidth()
-{
-       float width = 0;
-       for (int32 i = 0; i < fListView->CountItems(); i++) {
-               BListItem* item = fListView->ItemAt(i);
-               width = max_c(width, item->Width());
-       }
-       fListView->SetExplicitMinSize(BSize(width, B_SIZE_UNSET));
-       fListView->InvalidateLayout();
-}
+                       MediaListItem* item = static_cast<MediaListItem*>(
+                                       
fListView->ItemAt(fListView->CurrentSelection()));
+                       if (item == NULL)
+                               break;
 
+                       fCurrentNode.SetTo(NULL);
+                       _ClearParamView();
+                       item->AlterWindow(this);
+                       break;
+               }
+               case B_SOME_APP_LAUNCHED:
+               {
+                       PRINT_OBJECT(*message);
+                       if (fAlert == NULL)
+                               break;
 
-void
-MediaWindow::_AddNodeItems(NodeList &list, MediaListItem::media_type type)
-{
-       int32 count = list.CountItems();
-       for (int32 i = 0; i < count; i++) {
-               dormant_node_info* info = list.ItemAt(i);
-               if (!_FindNodeListItem(info))
-                       fListView->AddItem(new NodeListItem(info, type));
+                       BString mimeSig;
+                       if (message->FindString("be:signature", &mimeSig) == 
B_OK
+                               && (mimeSig == "application/x-vnd.Be.addon-host"
+                                       || mimeSig == 
"application/x-vnd.Be.media-server")) {
+                               fAlert->Lock();
+                               fAlert->TextView()->SetText(
+                                       B_TRANSLATE("Starting media server" 
B_UTF8_ELLIPSIS));
+                               fAlert->Unlock();
+                       }
+                       break;
+               }
+               case B_SOME_APP_QUIT:
+               {
+                       PRINT_OBJECT(*message);
+                       BString mimeSig;
+                       if (message->FindString("be:signature", &mimeSig) == 
B_OK) {
+                               if (mimeSig == "application/x-vnd.Be.addon-host"
+                                       || mimeSig == 
"application/x-vnd.Be.media-server") {
+                                       BMediaRoster* roster = 
BMediaRoster::CurrentRoster();
+                                       if (roster != NULL && roster->Lock())
+                                               roster->Quit();
+                               }
+                       }
+                       break;
+               }
+               default:
+                       BWindow::MessageReceived(message);
+                       break;
        }
 }
 
 
-void
-MediaWindow::_EmptyNodeLists()
-{
-       fAudioOutputs.MakeEmpty();
-       fAudioInputs.MakeEmpty();
-       fVideoOutputs.MakeEmpty();
-       fVideoInputs.MakeEmpty();
-}
+// #pragma mark - private
 
 
 void
-MediaWindow::InitWindow()
+MediaWindow::_InitWindow()
 {
        fListView = new BListView("media_list_view");
        fListView->SetSelectionMessage(new BMessage(ML_SELECTED_NODE));
@@ -400,7 +369,6 @@ MediaWindow::InitWindow()
        fVideoView = new VideoSettingsView();
        fContentLayout->AddView(fVideoView);
 
-
        // Layout all views
        BLayoutBuilder::Group<>(this, B_HORIZONTAL)
                .SetInsets(B_USE_DEFAULT_SPACING, B_USE_DEFAULT_SPACING,
@@ -412,19 +380,16 @@ MediaWindow::InitWindow()
                        .Add(fContentLayout);
 
        // Start the window
-       fInitCheck = InitMedia(true);
+       fInitCheck = _InitMedia(true);
        if (fInitCheck != B_OK)
                PostMessage(B_QUIT_REQUESTED);
        else if (IsHidden())
-                       Show();
+               Show();
 }
 
 
-// #pragma mark -
-
-
 status_t
-MediaWindow::InitMedia(bool first)
+MediaWindow::_InitMedia(bool first)
 {
        status_t err = B_OK;
        BMediaRoster* roster = BMediaRoster::Roster(&err);
@@ -432,7 +397,7 @@ MediaWindow::InitMedia(bool first)
        if (first && err != B_OK) {
                BAlert* alert = new BAlert("start_media_server",
                        B_TRANSLATE("Could not connect to the media server.\n"
-                       "Would you like to start it ?"),
+                               "Would you like to start it ?"),
                        B_TRANSLATE("Quit"),
                        B_TRANSLATE("Start media server"), NULL,
                        B_WIDTH_AS_USUAL, B_WARNING_ALERT);
@@ -440,9 +405,8 @@ MediaWindow::InitMedia(bool first)
                if (alert->Go() == 0)
                        return B_ERROR;
 
-               fAlert = new MediaAlert(BRect(0, 0, 300, 60),
-                       "restart_alert", B_TRANSLATE(
-                               "Restarting media services\nStarting media 
server"
+               fAlert = new MediaAlert(BRect(0, 0, 300, 60), "restart_alert",
+                       B_TRANSLATE("Restarting media services\nStarting media 
server"
                                B_UTF8_ELLIPSIS "\n"));
                fAlert->Show();
 
@@ -454,7 +418,8 @@ MediaWindow::InitMedia(bool first)
        Lock();
 
        bool isVideoSelected = true;
-       if (!first && fListView->ItemAt(0) && 
fListView->ItemAt(0)->IsSelected())
+       if (!first && fListView->ItemAt(0) != NULL
+               && fListView->ItemAt(0)->IsSelected())
                isVideoSelected = false;
 
        if ((!first || (first && err) ) && fAlert) {
@@ -499,46 +464,44 @@ MediaWindow::InitMedia(bool first)
        _UpdateListViewMinWidth();
 
        // Set default nodes for our setting views
-       media_node default_node;
-       dormant_node_info node_info;
+       media_node defaultNode;
+       dormant_node_info nodeInfo;
        int32 outputID;
        BString outputName;
 
-       if (roster->GetAudioInput(&default_node) == B_OK) {
-               roster->GetDormantNodeFor(default_node, &node_info);
-               fAudioView->SetDefaultInput(&node_info);
+       if (roster->GetAudioInput(&defaultNode) == B_OK) {
+               roster->GetDormantNodeFor(defaultNode, &nodeInfo);
+               fAudioView->SetDefaultInput(&nodeInfo);
                        // this causes our listview to be updated as well
        }
 
-       if (roster->GetAudioOutput(&default_node, &outputID, 
&outputName)==B_OK) {
-               roster->GetDormantNodeFor(default_node, &node_info);
-               fAudioView->SetDefaultOutput(&node_info);
+       if (roster->GetAudioOutput(&defaultNode, &outputID, &outputName) == 
B_OK) {
+               roster->GetDormantNodeFor(defaultNode, &nodeInfo);
+               fAudioView->SetDefaultOutput(&nodeInfo);
                fAudioView->SetDefaultChannel(outputID);
                        // this causes our listview to be updated as well
        }
 
-       if (roster->GetVideoInput(&default_node)==B_OK) {
-               roster->GetDormantNodeFor(default_node, &node_info);
-               fVideoView->SetDefaultInput(&node_info);
+       if (roster->GetVideoInput(&defaultNode) == B_OK) {
+               roster->GetDormantNodeFor(defaultNode, &nodeInfo);
+               fVideoView->SetDefaultInput(&nodeInfo);
                        // this causes our listview to be updated as well
        }
 
-       if (roster->GetVideoOutput(&default_node)==B_OK) {
-               roster->GetDormantNodeFor(default_node, &node_info);
-               fVideoView->SetDefaultOutput(&node_info);
+       if (roster->GetVideoOutput(&defaultNode) == B_OK) {
+               roster->GetDormantNodeFor(defaultNode, &nodeInfo);
+               fVideoView->SetDefaultOutput(&nodeInfo);
                        // this causes our listview to be updated as well
        }
 
-       if (first) {
+       if (first)
                fListView->Select(fListView->IndexOf(mixer));
-       } else {
-               if (isVideoSelected)
-                       fListView->Select(fListView->IndexOf(video));
-               else
-                       fListView->Select(fListView->IndexOf(audio));
-       }
+       else if (isVideoSelected)
+               fListView->Select(fListView->IndexOf(video));
+       else
+               fListView->Select(fListView->IndexOf(audio));
 
-       if (fAlert) {
+       if (fAlert != NULL) {
                snooze(800000);
                fAlert->PostMessage(B_QUIT_REQUESTED);
        }
@@ -550,101 +513,123 @@ MediaWindow::InitMedia(bool first)
 }
 
 
-bool
-MediaWindow::QuitRequested()
+void
+MediaWindow::_FindNodes()
 {
-       // stop watching the MediaRoster
-       fCurrentNode.SetTo(NULL);
-       be_app->PostMessage(B_QUIT_REQUESTED);
-       return true;
+       _FindNodes(B_MEDIA_RAW_AUDIO, B_PHYSICAL_OUTPUT, fAudioOutputs);
+       _FindNodes(B_MEDIA_RAW_AUDIO, B_PHYSICAL_INPUT, fAudioInputs);
+       _FindNodes(B_MEDIA_ENCODED_AUDIO, B_PHYSICAL_OUTPUT, fAudioOutputs);
+       _FindNodes(B_MEDIA_ENCODED_AUDIO, B_PHYSICAL_INPUT, fAudioInputs);
+       _FindNodes(B_MEDIA_RAW_VIDEO, B_PHYSICAL_OUTPUT, fVideoOutputs);
+       _FindNodes(B_MEDIA_RAW_VIDEO, B_PHYSICAL_INPUT, fVideoInputs);
+       _FindNodes(B_MEDIA_ENCODED_VIDEO, B_PHYSICAL_OUTPUT, fVideoOutputs);
+       _FindNodes(B_MEDIA_ENCODED_VIDEO, B_PHYSICAL_INPUT, fVideoInputs);
 }
 
 
-// ErrorAlert -- Displays a BAlert Box with a Custom Error or Debug Message
 void
-ErrorAlert(char* errorMessage) {
-       printf("%s\n", errorMessage);
-       BAlert* alert = new BAlert("BAlert", errorMessage, B_TRANSLATE("OK"),
-               NULL, NULL, B_WIDTH_AS_USUAL, B_STOP_ALERT);
-       alert->SetFlags(alert->Flags() | B_CLOSE_ON_ESCAPE);
-       alert->Go();
-       exit(1);
+MediaWindow::_FindNodes(media_type type, uint64 kind, NodeList& into)
+{
+       dormant_node_info nodeInfo[64];
+       int32 nodeInfoCount = 64;
+
+       media_format format;
+       media_format* nodeInputFormat = NULL;
+       media_format* nodeOutputFormat = NULL;
+       format.type = type;
+
+       // output nodes must be BBufferConsumers => they have an input format
+       // input nodes must be BBufferProducers => they have an output format
+       if ((kind & B_PHYSICAL_OUTPUT) != 0)
+               nodeInputFormat = &format;
+       else if ((kind & B_PHYSICAL_INPUT) != 0)
+               nodeOutputFormat = &format;
+       else
+               return;
+
+       BMediaRoster* roster = BMediaRoster::Roster();
+
+       if (roster->GetDormantNodes(nodeInfo, &nodeInfoCount, nodeInputFormat,
+                       nodeOutputFormat, NULL, kind) != B_OK) {
+               // TODO: better error reporting!
+               fprintf(stderr, "error\n");
+               return;
+       }
+
+       for (int32 i = 0; i < nodeInfoCount; i++) {
+               PRINT(("node : %s, media_addon %i, flavor_id %i\n",
+                       nodeInfo[i].name, (int)nodeInfo[i].addon,
+                       (int)nodeInfo[i].flavor_id));
+
+               dormant_node_info* info = new dormant_node_info();
+               strncpy(info->name, nodeInfo[i].name, B_MEDIA_NAME_LENGTH);
+               info->flavor_id = nodeInfo[i].flavor_id;
+               info->addon = nodeInfo[i].addon;
+               into.AddItem(info);
+       }
 }
 
 
 void
-MediaWindow::MessageReceived(BMessage* message)
+MediaWindow::_AddNodeItems(NodeList& list, MediaListItem::media_type type)
 {
-       switch(message->what)
-       {
-               case ML_INIT_MEDIA:
-                       InitMedia(false);
-                       break;
-               case ML_RESTART_MEDIA_SERVER:
-               {
-                       thread_id thread = 
spawn_thread(&MediaWindow::RestartMediaServices,
-                               "restart_thread", B_NORMAL_PRIORITY, this);
-                       if (thread < B_OK)
-                               fprintf(stderr, "couldn't create restart 
thread\n");
-                       else
-                               resume_thread(thread);
-                       break;
-               }
-               case B_MEDIA_WEB_CHANGED:
-               case ML_SELECTED_NODE:
-               {
-                       PRINT_OBJECT(*message);
+       int32 count = list.CountItems();
+       for (int32 i = 0; i < count; i++) {
+               dormant_node_info* info = list.ItemAt(i);
+               if (_FindNodeListItem(info) == NULL)
+                       fListView->AddItem(new NodeListItem(info, type));
+       }
+}
 
-                       MediaListItem* item = static_cast<MediaListItem*>(
-                                       
fListView->ItemAt(fListView->CurrentSelection()));
-                       if (!item)
-                               break;
 
-                       fCurrentNode.SetTo(NULL);
-                       _ClearParamView();
-                       item->AlterWindow(this);
-                       break;
-               }
-               case B_SOME_APP_LAUNCHED:
-                       {
-                               PRINT_OBJECT(*message);
-                               if (!fAlert)
-                                       break;
-
-                               BString mimeSig;
-                               if (message->FindString("be:signature", 
&mimeSig) == B_OK
-                                       && (mimeSig == 
"application/x-vnd.Be.addon-host"
-                                               || mimeSig == 
"application/x-vnd.Be.media-server")) {
-                                       fAlert->Lock();
-                                       fAlert->TextView()->SetText(
-                                               B_TRANSLATE("Starting media 
server" B_UTF8_ELLIPSIS));
-                                       fAlert->Unlock();
-                               }
-                       }
-                       break;
-               case B_SOME_APP_QUIT:
-                       {
-                               PRINT_OBJECT(*message);
-                               BString mimeSig;
-                               if (message->FindString("be:signature", 
&mimeSig) == B_OK) {
-                                       if (mimeSig == 
"application/x-vnd.Be.addon-host"
-                                               || mimeSig == 
"application/x-vnd.Be.media-server") {
-                                               BMediaRoster* roster = 
BMediaRoster::CurrentRoster();
-                                               if (roster && roster->Lock())
-                                                       roster->Quit();
-                                       }
-                               }
+void
+MediaWindow::_EmptyNodeLists()
+{
+       fAudioOutputs.MakeEmpty();
+       fAudioInputs.MakeEmpty();
+       fVideoOutputs.MakeEmpty();
+       fVideoInputs.MakeEmpty();
+}
 
-                       }
-                       break;
-               default:
-                       BWindow::MessageReceived(message);
-                       break;
+
+NodeListItem*
+MediaWindow::_FindNodeListItem(dormant_node_info* info)
+{
+       NodeListItem audioItem(info, MediaListItem::AUDIO_TYPE);
+       NodeListItem videoItem(info, MediaListItem::VIDEO_TYPE);
+
+       NodeListItem::Comparator audioComparator(&audioItem);
+       NodeListItem::Comparator videoComparator(&videoItem);
+
+       for (int32 i = 0; i < fListView->CountItems(); i++) {
+               MediaListItem* item = 
static_cast<MediaListItem*>(fListView->ItemAt(i));
+               item->Accept(audioComparator);
+               if (audioComparator.result == 0)
+                       return static_cast<NodeListItem*>(item);
+
+               item->Accept(videoComparator);
+               if (videoComparator.result == 0)
+                       return static_cast<NodeListItem*>(item);
        }
+       return NULL;
 }
 
+
+void
+MediaWindow::_UpdateListViewMinWidth()
+{
+       float width = 0;
+       for (int32 i = 0; i < fListView->CountItems(); i++) {
+               BListItem* item = fListView->ItemAt(i);
+               width = max_c(width, item->Width());
+       }
+       fListView->SetExplicitMinSize(BSize(width, B_SIZE_UNSET));
+       fListView->InvalidateLayout();
+}
+
+
 status_t
-MediaWindow::RestartMediaServices(void* data)
+MediaWindow::_RestartMediaServices(void* data)
 {
        MediaWindow* window = (MediaWindow*)data;
        window->fAlert = new MediaAlert(BRect(0, 0, 300, 60),
@@ -653,7 +638,7 @@ MediaWindow::RestartMediaServices(void* data)
 
        window->fAlert->Show();
 
-       shutdown_media_server(B_INFINITE_TIMEOUT, MediaWindow::UpdateProgress,
+       shutdown_media_server(B_INFINITE_TIMEOUT, MediaWindow::_UpdateProgress,
                window->fAlert);
 
        {
@@ -669,7 +654,7 @@ MediaWindow::RestartMediaServices(void* data)
 
 
 bool
-MediaWindow::UpdateProgress(int stage, const char * message, void * cookie)
+MediaWindow::_UpdateProgress(int stage, const char* message, void* cookie)
 {
        MediaAlert* alert = static_cast<MediaAlert*>(cookie);
        PRINT(("stage : %i\n", stage));
diff --git a/src/preferences/media/MediaWindow.h 
b/src/preferences/media/MediaWindow.h
index ec3967d..7b03aa2 100644
--- a/src/preferences/media/MediaWindow.h
+++ b/src/preferences/media/MediaWindow.h
@@ -1,19 +1,13 @@
-// ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~
-//
-//     Copyright (c) 2003, OpenBeOS
-//
-//  This software is part of the OpenBeOS distribution and is covered 
-//  by the OpenBeOS license.
-//
-//
-//  File:        MediaWindow.h
-//  Author:      Sikosis, Jérôme Duval
-//  Description: Media Preferences
-//  Created :    June 25, 2003
-// 
-// ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~
-#ifndef __MEDIAWINDOWS_H__
-#define __MEDIAWINDOWS_H__
+/*
+ * Copyright 2003-2012, Haiku, Inc.
+ * Distributed under the terms of the MIT license.
+ *
+ * Authors:
+ *             Sikosis, Jérôme Duval
+ *             yourpalal, Alex Wilson
+ */
+#ifndef MEDIA_WINDOW_H
+#define MEDIA_WINDOW_H
 
 
 #include <ListView.h>
@@ -35,14 +29,13 @@
 
 class BCardLayout;
 class BSeparatorView;
-// struct dormant_node_info;
 
 
-class MediaWindow : public BWindow
-{
+class MediaWindow : public BWindow {
 public:
                                                                
MediaWindow(BRect frame);
                                                                ~MediaWindow();
+
                status_t                        InitCheck();
 
        // methods to be called by MediaListItems...
@@ -63,24 +56,23 @@ public:
     virtual    void                            MessageReceived(BMessage* 
message);
 
 private:
-
        typedef BObjectList<dormant_node_info> NodeList;
 
+                       void                            _InitWindow();
+                       status_t                        _InitMedia(bool first);
 
-                       status_t                        InitMedia(bool first);
                        void                            _FindNodes();
                        void                            _FindNodes(media_type 
type, uint64 kind,
-                                                                       
NodeList& into);        
+                                                                       
NodeList& into);
                        void                            _AddNodeItems(NodeList 
&from,
                                                                        
MediaListItem::media_type type);
                        void                            _EmptyNodeLists();
                        void                            
_UpdateListViewMinWidth();
 
                        NodeListItem*           
_FindNodeListItem(dormant_node_info* info);
-                       void                            InitWindow();
 
-       static  status_t                        RestartMediaServices(void* 
data);
-       static  bool                            UpdateProgress(int stage, const 
char * message,
+       static  status_t                        _RestartMediaServices(void* 
data);
+       static  bool                            _UpdateProgress(int stage, 
const char * message,
                                                                        void * 
cookie);
 
                        void                            _ClearParamView();
@@ -90,6 +82,7 @@ private:
        struct SmartNode {
                                                                SmartNode(const 
BMessenger& notifyHandler);
                                                                ~SmartNode();
+
                        void                            SetTo(const 
dormant_node_info* node);
                        void                            SetTo(const media_node& 
node);
                        bool                            IsSet();
@@ -100,24 +93,25 @@ private:
                        media_node*                     fNode;
                        BMessenger                      fMessenger;
        };
-       
+
                        BListView*                      fListView;
                        BSeparatorView*         fTitleView;
                        BCardLayout*            fContentLayout;
                        AudioSettingsView*      fAudioView;
                        VideoSettingsView*      fVideoView;
-                           
+
                        SmartNode                       fCurrentNode;
                        BParameterWeb*          fParamWeb;
-                       
+
 
                        NodeList                        fAudioInputs;
                        NodeList                        fAudioOutputs;
                        NodeList                        fVideoInputs;
                        NodeList                        fVideoOutputs;
-       
+
                        MediaAlert*                     fAlert;
                        status_t                        fInitCheck;
 };
 
-#endif
+
+#endif // MEDIA_WINDOW_H

############################################################################

Revision:    hrevr1alpha4-44607
Commit:      64911a689adf3fb7ce10f18d7c6a0ac1d8befc75
URL:         http://cgit.haiku-os.org/haiku/commit/?id=64911a6
Author:      Axel Dörfler <axeld@xxxxxxxxxxxxxxxx>
Date:        Sun Sep 23 13:50:42 2012 UTC
Committer:   Ryan Leavengood <leavengood@xxxxxxxxx>
Commit-Date: Mon Sep 24 03:00:10 2012 UTC

Always set a minimum size for the list view.

* Otherwise it doesn't look good when the media server is just
  being launched (so there are no nodes yet).

----------------------------------------------------------------------------

diff --git a/src/preferences/media/MediaWindow.cpp 
b/src/preferences/media/MediaWindow.cpp
index 049b5cc..9590cb9 100644
--- a/src/preferences/media/MediaWindow.cpp
+++ b/src/preferences/media/MediaWindow.cpp
@@ -349,6 +349,7 @@ MediaWindow::_InitWindow()
 {
        fListView = new BListView("media_list_view");
        fListView->SetSelectionMessage(new BMessage(ML_SELECTED_NODE));
+       fListView->SetExplicitMinSize(BSize(140, B_SIZE_UNSET));
 
        // Add ScrollView to Media Menu for pretty border
        BScrollView* scrollView = new BScrollView("listscroller",


Other related posts:

  • » [haiku-commits] haiku.r1alpha4: hrevr1alpha4-44607 - src/preferences/media build/jam src/tests/system/kernel/cache src/apps/drivesetup src/apps/sudoku - leavengood