Closed Bug 475030 Opened 16 years ago Closed 15 years ago

can't drag tab to other place on tabbar

Categories

(Firefox :: Tabbed Browser, defect)

3.5 Branch
defect
Not set
major

Tracking

()

VERIFIED FIXED
Firefox 3.6a1

People

(Reporter: Peter6, Assigned: Natch)

References

Details

(Keywords: regression, verified1.9.1)

Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.9.2a1pre) Gecko/20090123 Minefield/3.2a1pre ID:20090123033224

repro:
select a tab
try to drag it a position left or right

result:
nada happens
Flags: blocking-firefox3.1?
Version: Trunk → 3.1 Branch
WFM with a build that has this patch but might not include some other patches which landed today. I
Target Milestone: --- → Firefox 3.1b3
1. Pick one of your open tabs and attempt to move to the right or left one tab
position.
2. Note it does not move
3. Now take that same tab and move it past one tab either right or left, and it
now moves to the correct position, one tab to the right of where you wanted to
move it.
Nearly positive this was caused by bug 457651, specifically the second children tag.
Depends on: 457651
Blocks: 457651
No longer blocks: 471499
No longer depends on: 457651
OS: Windows XP → All
Hardware: x86 → All
More likely caused by the comments.  See bug 474964 comment 7.
Assignee: nobody → highmind63
For anyone having trouble reproducing this with a new profile, you initially need three or more tabs open.  With the three (unique) tabs open, attempt to drag and drop the first tab between the second and third tab.
I think this isuue is the CORE problem.
It is because the value of  gBrowser.mTabs[i].boxObject.screenX  is wrong. 

for (var i=0; i<gBrowser.mTabs.length; i++){
  alert(gBrowser.mTabs[i].boxObject.screenX);
}

A result does not increase sequentially.
(In reply to comment #7)
> I think this isuue is the CORE problem.
> It is because the value of  gBrowser.mTabs[i].boxObject.screenX  is wrong. 
> 
> for (var i=0; i<gBrowser.mTabs.length; i++){
>   alert(gBrowser.mTabs[i].boxObject.screenX);
> }
> 
> A result does not increase sequentially.

shouldn't there be a semicolon after i++?
(In reply to comment #8)
> (In reply to comment #7)
> > for (var i=0; i<gBrowser.mTabs.length; i++){
>
> shouldn't there be a semicolon after i++?

No
Although a basis is scarce I think the following will fix the issue. 
Line 253 in scrollbox.xml
-var elements = this.hasChildNodes() ?
+var elements = (this.hasChildNodes() && this.childNodes.length > 1 ) ?
I am sorry, I wrote the wrong place. 
Please ignore Comment #10 .
I also think it is the bug of core components. When four tabs <A>, <B>, <C> and <D> open and I move <D> between <A> and <B>, then, DOM Inspector sais:
<xul:box>
  #comment ( This is a hack to circumvent bug 472020, otherwise ... )
  <xul:tab/> (A)
  <tab/> (D)
  <tab/> (B)
  <tab/> (C)
  #comment ( This is to ensure anything extensions put here will ... )
  <xul:toolbarbutton/>
</xul:box>
but actual layout is <D><A><B><C>.
So was this fixed by the first patch in bug 474964 (landed 2009-01-23 16:48:05 PST)?
(In reply to comment #13)
> So was this fixed by the first patch in bug 474964 (landed 2009-01-23 16:48:05
> PST)?

No. I've merged the patch to my local Shiretoko, but it doesn't fix this bug.
I did some tests.

--------------------
gBrowser.removeAllTabsBut(gBrowser.selectedTab);
gBrowser.addTab('about:');
gBrowser.addTab('about:config');
gBrowser.addTab('about:buildconfig');
var tabs = gBrowser.mTabs;
var tab = gBrowser.mTabContainer.removeChild(tabs[2]);
tabs = gBrowser.mTabs;
gBrowser.mTabContainer.insertBefore(tab, tabs[1]);
--------------------
Then, the actual layout of tabs were broken. The inserted tab became leftmost tab unexpectedly.

--------------------
gBrowser.removeAllTabsBut(gBrowser.selectedTab);
gBrowser.addTab('about:');
gBrowser.addTab('about:config');
gBrowser.addTab('about:buildconfig');
var tabs = gBrowser.mTabs;
var tab = gBrowser.mTabContainer.removeChild(tabs[2]);
gBrowser.mTabContainer.appendChild(tab);
--------------------
Then, the actual layout was correct.

I think Gecko has a serious bug about layouting insertBefore()ed nodes.
(In reply to comment #13)
> So was this fixed by the first patch in bug 474964 (landed 2009-01-23 16:48:05
> PST)?

Yes, works with Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.9.2a1pre) Gecko/20090124 Minefield/3.2a1pre ID:20090124024054
Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.9.1b3pre) Gecko/20090124 Shiretoko/3.1b3pre

Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.9.1b3pre) Gecko/20090124 Shiretoko/3.1b3pre

Yes, this is fixed in the latest nightly now.
Status: NEW → RESOLVED
Closed: 15 years ago
Resolution: --- → FIXED
Depends on: 474964
Flags: blocking-firefox3.1?
Keywords: fixed1.9.1
Target Milestone: Firefox 3.1b3 → Firefox 3.2a1
I don't suppose some tests could be written for this?
Now both tests in comment #15 work correctly.
(Windows 2000, Mozilla/5.0 (Windows; U; Windows NT 5.0; en-US; rv:1.9.1b3pre) Gecko/20090124 Shiretoko/3.1b3pre)
Verified on trunk and 1.9.1 with:

Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.9.1b3pre) Gecko/20090125
Shiretoko/3.1b3pre (.NET CLR 3.5.30729) ID:20090125052901

Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10.5; en-US; rv:1.9.1b3pre)
Gecko/20090126 Shiretoko/3.1b3pre Ubiquity/0.1.5 ID:20090126020313

Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.9.2a1pre) Gecko/20090125
Minefield/3.2a1pre ID:20090125034316

Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10.5; en-US; rv:1.9.2a1pre)
Gecko/20090126 Minefield/3.2a1pre ID:20090126020316

It's already covered by Litmus:
https://litmus.mozilla.org/show_test.cgi?id=5973
Status: RESOLVED → VERIFIED
Flags: in-litmus+
You need to log in before you can comment on or make changes to this bug.