From 9b64b5d24114743378bd72d9bf150ef514b23b09 Mon Sep 17 00:00:00 2001 From: Rene Gollent Date: Tue, 6 Nov 2012 13:26:41 +0100 Subject: [PATCH 1/5] Add TODO note. --- .../debugger/user_interface/gui/team_window/VariablesView.cpp | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/apps/debugger/user_interface/gui/team_window/VariablesView.cpp b/src/apps/debugger/user_interface/gui/team_window/VariablesView.cpp index 87a34bef24..e5a6be1c50 100644 --- a/src/apps/debugger/user_interface/gui/team_window/VariablesView.cpp +++ b/src/apps/debugger/user_interface/gui/team_window/VariablesView.cpp @@ -1679,6 +1679,8 @@ VariablesView::MessageReceived(BMessage* message) break; } + // TODO: we need to also persist/restore the casted state + // in VariableViewState node->NodeChild()->SetNode(valueNode); break; } From 7bcbf187d0197d78ce4b2b15f2747f8ae1d6093a Mon Sep 17 00:00:00 2001 From: Rene Gollent Date: Tue, 6 Nov 2012 16:29:19 +0100 Subject: [PATCH 2/5] Optimize column preferred width calculation a bit. Move calculating the width of the column title itself out to OutlineView::GetColumnPreferredWidth(). Previously, each pass would compute the width of both the field itself and the column title, leading to considerable redundant work. Also, take outline level indent into account in the resulting width. Should improve performance a bit. --- src/kits/interface/ColumnListView.cpp | 17 +++++++++++------ src/kits/interface/ColumnTypes.cpp | 10 ++-------- 2 files changed, 13 insertions(+), 14 deletions(-) diff --git a/src/kits/interface/ColumnListView.cpp b/src/kits/interface/ColumnListView.cpp index 2462cb94a3..09168c7fc3 100644 --- a/src/kits/interface/ColumnListView.cpp +++ b/src/kits/interface/ColumnListView.cpp @@ -62,6 +62,7 @@ All rights reserved. #include #include #include +#include #include #include @@ -4783,16 +4784,20 @@ float OutlineView::GetColumnPreferredWidth(BColumn* column) { float preferred = 0.0; - for (RecursiveOutlineIterator iterator(&fRows); iterator.CurrentRow(); - iterator.GoToNext()) { - BRow* row = iterator.CurrentRow(); + for (RecursiveOutlineIterator iterator(&fRows); BRow* row = + iterator.CurrentRow(); iterator.GoToNext()) { BField* field = row->GetField(column->fFieldID); if (field) { - float width = column->GetPreferredWidth(field, this); - if (preferred < width) - preferred = width; + float width = column->GetPreferredWidth(field, this) + + iterator.CurrentLevel() * kOutlineLevelIndent; + preferred = max_c(preferred, width); } } + + BString name; + column->GetColumnName(&name); + preferred = max_c(preferred, StringWidth(name)); + // Constrain to preferred width. This makes the method do a little // more than asked, but it's for convenience. if (preferred < column->MinWidth()) diff --git a/src/kits/interface/ColumnTypes.cpp b/src/kits/interface/ColumnTypes.cpp index ef3404fee6..432476f23e 100644 --- a/src/kits/interface/ColumnTypes.cpp +++ b/src/kits/interface/ColumnTypes.cpp @@ -106,9 +106,7 @@ BTitledColumn::FontHeight() const float BTitledColumn::GetPreferredWidth(BField *_field, BView* parent) const { - BFont font; - parent->GetFont(&font); - return font.StringWidth(fTitle.String()) + 2 * kTEXT_MARGIN; + return parent->StringWidth(fTitle.String()) + 2 * kTEXT_MARGIN; } @@ -202,11 +200,7 @@ float BStringColumn::GetPreferredWidth(BField *_field, BView* parent) const { BStringField* field = static_cast(_field); - BFont font; - parent->GetFont(&font); - float width = font.StringWidth(field->String()) + 2 * kTEXT_MARGIN; - float parentWidth = BTitledColumn::GetPreferredWidth(_field, parent); - return max_c(width, parentWidth); + return parent->StringWidth(field->String()) + 2 * kTEXT_MARGIN; } From 8ddec5b565ddd1ed108a39425f42df348b215c75 Mon Sep 17 00:00:00 2001 From: Jerome Duval Date: Tue, 6 Nov 2012 19:40:47 +0100 Subject: [PATCH 3/5] vm_page_allocate_page_run: fix previous commit * remove superfluous codes * when aligning, sPhysicalPageOffset would be substracted twice +alpha4 Signed-off-by: Ingo Weinhold --- src/system/kernel/vm/vm_page.cpp | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/src/system/kernel/vm/vm_page.cpp b/src/system/kernel/vm/vm_page.cpp index 29df4e1a92..007aacdae9 100644 --- a/src/system/kernel/vm/vm_page.cpp +++ b/src/system/kernel/vm/vm_page.cpp @@ -3862,9 +3862,8 @@ vm_page_allocate_page_run(uint32 flags, page_num_t length, page_num_t offsetStart = start + sPhysicalPageOffset; // enforce alignment - if (alignmentMask != 0 && (offsetStart & alignmentMask) != 0) { - offsetStart = ((offsetStart + alignmentMask) & ~alignmentMask) - - sPhysicalPageOffset; + if ((offsetStart & alignmentMask) != 0) { + offsetStart = (offsetStart + alignmentMask) & ~alignmentMask; } // enforce boundary @@ -3919,7 +3918,7 @@ vm_page_allocate_page_run(uint32 flags, page_num_t length, freeClearQueueLocker.Lock(); } - start += max_c(i, alignmentMask) + 1; + start += i + 1; } } From 6078d891b4d0a31a04e00095fb123021685e4029 Mon Sep 17 00:00:00 2001 From: czeidler Date: Tue, 6 Nov 2012 20:08:22 +0100 Subject: [PATCH 4/5] Move stacked windows to a different workspace correctly. When moving a window of a stacked window group to a different workspace all windows in the stack have to be moved. This fixes #8855. --- src/servers/app/Desktop.cpp | 59 +++++++++++++------ src/servers/app/stackandtile/StackAndTile.cpp | 11 ++-- 2 files changed, 47 insertions(+), 23 deletions(-) diff --git a/src/servers/app/Desktop.cpp b/src/servers/app/Desktop.cpp index 3b280e2c50..7c74093605 100644 --- a/src/servers/app/Desktop.cpp +++ b/src/servers/app/Desktop.cpp @@ -1357,21 +1357,30 @@ Desktop::MoveWindowBy(Window* window, float x, float y, int32 workspace) AutoWriteLocker _(fWindowLock); Window* topWindow = window->TopLayerStackWindow(); - if (topWindow) + if (topWindow != NULL) window = topWindow; if (workspace == -1) workspace = fCurrentWorkspace; if (!window->IsVisible() || workspace != fCurrentWorkspace) { if (workspace != fCurrentWorkspace) { - // move the window on another workspace - this doesn't change it's - // current position - if (window->Anchor(workspace).position == kInvalidWindowPosition) - window->Anchor(workspace).position = window->Frame().LeftTop(); + WindowStack* stack = window->GetWindowStack(); + if (stack != NULL) { + for (int32 s = 0; s < stack->CountWindows(); s++) { + Window* stackWindow = stack->WindowAt(s); + // move the window on another workspace - this doesn't + // change it's current position + if (stackWindow->Anchor(workspace).position + == kInvalidWindowPosition) { + stackWindow->Anchor(workspace).position + = stackWindow->Frame().LeftTop(); + } - window->Anchor(workspace).position += BPoint(x, y); - window->SetCurrentWorkspace(workspace); - _WindowChanged(window); + stackWindow->Anchor(workspace).position += BPoint(x, y); + stackWindow->SetCurrentWorkspace(workspace); + _WindowChanged(stackWindow); + } + } } else window->MoveBy((int32)x, (int32)y); @@ -1532,11 +1541,16 @@ Desktop::SetWindowWorkspaces(Window* window, uint32 workspaces) if (window->IsNormal() && workspaces == B_CURRENT_WORKSPACE) workspaces = workspace_to_workspaces(CurrentWorkspace()); - uint32 oldWorkspaces = window->Workspaces(); - - window->WorkspacesChanged(oldWorkspaces, workspaces); - _ChangeWindowWorkspaces(window, oldWorkspaces, workspaces); + WindowStack* stack = window->GetWindowStack(); + if (stack != NULL) { + for (int32 s = 0; s < stack->CountWindows(); s++) { + window = stack->LayerOrder().ItemAt(s); + uint32 oldWorkspaces = window->Workspaces(); + window->WorkspacesChanged(oldWorkspaces, workspaces); + _ChangeWindowWorkspaces(window, oldWorkspaces, workspaces); + } + } UnlockAllWindows(); } @@ -3415,18 +3429,25 @@ Desktop::_SetWorkspace(int32 index, bool moveFocusWindow) // But only normal windows are following uint32 oldWorkspaces = movedWindow->Workspaces(); - _Windows(previousIndex).RemoveWindow(movedWindow); - _Windows(index).AddWindow(movedWindow, - movedWindow->Frontmost(_Windows(index).FirstWindow(), - index)); + WindowStack* stack = movedWindow->GetWindowStack(); + if (stack != NULL) { + for (int32 s = 0; s < stack->CountWindows(); s++) { + Window* stackWindow = stack->LayerOrder().ItemAt(s); + _Windows(previousIndex).RemoveWindow(stackWindow); + _Windows(index).AddWindow(stackWindow, + stackWindow->Frontmost( + _Windows(index).FirstWindow(), index)); + + // send B_WORKSPACES_CHANGED message + stackWindow->WorkspacesChanged(oldWorkspaces, + stackWindow->Workspaces()); + } + } // TODO: subset windows will always flicker this way movedMouseEventWindow = true; - // send B_WORKSPACES_CHANGED message - movedWindow->WorkspacesChanged(oldWorkspaces, - movedWindow->Workspaces()); NotifyWindowWorkspacesChanged(movedWindow, movedWindow->Workspaces()); } else { diff --git a/src/servers/app/stackandtile/StackAndTile.cpp b/src/servers/app/stackandtile/StackAndTile.cpp index 8568f71965..40de05443d 100644 --- a/src/servers/app/stackandtile/StackAndTile.cpp +++ b/src/servers/app/stackandtile/StackAndTile.cpp @@ -368,10 +368,13 @@ StackAndTile::WindowWorkspacesChanged(Window* window, uint32 workspaces) if (desktop == NULL) return; - for (int i = 0; i < group->CountItems(); i++) { - SATWindow* listWindow = group->WindowAt(i); - if (listWindow != satWindow) - desktop->SetWindowWorkspaces(listWindow->GetWindow(), workspaces); + const WindowAreaList& areaList = group->GetAreaList(); + for (int32 i = 0; i < areaList.CountItems(); i++) { + WindowArea* area = areaList.ItemAt(i); + if (area->WindowList().HasItem(satWindow)) + continue; + SATWindow* topWindow = area->TopWindow(); + desktop->SetWindowWorkspaces(topWindow->GetWindow(), workspaces); } } From 7c0097cb42cc182bc42c14b11b6785a7848e7a45 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fran=C3=A7ois=20Revol?= Date: Tue, 6 Nov 2012 20:14:08 +0100 Subject: [PATCH 5/5] Even some more FDT/OF refs... --- docs/develop/ports/arm/urls.txt | 3 +++ 1 file changed, 3 insertions(+) diff --git a/docs/develop/ports/arm/urls.txt b/docs/develop/ports/arm/urls.txt index abaef44273..68a41c21f6 100644 --- a/docs/develop/ports/arm/urls.txt +++ b/docs/develop/ports/arm/urls.txt @@ -5,4 +5,7 @@ http://elinux.org/images/4/4e/Glikely-powerpc-porting-guide.pdf http://ols.fedoraproject.org/OLS/Reprints-2008/likely2-reprint.pdf http://www.bsdcan.org/2010/schedule/events/171.en.html http://www.devicetree.org/ (unofficial bindings) +http://www.devicetree.org/Device_Tree_Usage http://elinux.org/Device_Trees +* OF +http://www.openfirmware.info/Bindings