Closed Bug 206649 Opened 22 years ago Closed 16 years ago

customize toolbar dialog should be a "sheet"

Categories

(Firefox :: Toolbars and Customization, defect)

PowerPC
macOS
defect
Not set
normal

Tracking

()

RESOLVED FIXED

People

(Reporter: pbaker, Unassigned)

References

(Blocks 2 open bugs)

Details

(Keywords: polish, Whiteboard: see bug 350129)

Attachments

(3 files, 2 obsolete files)

User-Agent: Mozilla/5.0 (Macintosh; U; PPC Mac OS X Mach-O; en-US; rv:1.4b) Gecko/20030521 Mozilla Firebird/0.6 Build Identifier: Mozilla/5.0 (Macintosh; U; PPC Mac OS X Mach-O; en-US; rv:1.4b) Gecko/20030521 Mozilla Firebird/0.6 The Customize Toolbar should not be displayed as a separate dialog but instead as a "sheet" that slides down from the tool bar. Preferenecs on the other hand is done as a "sheet" but should in fact be a separate dialog window. I will create another bug for that. Reproducible: Always Steps to Reproduce: 1. Choose Customize... from the View->Toolbars menu. Actual Results: Customize Toolbar is presented as a dialog which most likely obscures the toolbar you are trying to customize. Expected Results: Customize Toolbar should be presented as a "sheet" that slides down from the tool bar.
Confirmed using Firebird/Mac/2003-05-16 (0.6).
Really marking NEW.
Status: UNCONFIRMED → NEW
Ever confirmed: true
a similar thing happens with gtk2 builds on linux, which may or may not be related
Taking QA Contact, sorry for bugspam
QA Contact: asa → bugzilla
No, any Linux behavior is not related. This bug is about obeying the Apple UI specifications--right or wrong.
Seeing bug 235033 today reminded me of this bug, and something occurred to me. Crudely put, sheets should pretty much only be used when they pertain to a single window, and you want the user to dismiss the sheet before continuing with anything else in that window. Isn't Customize Toolbar something that pertains to the entire application, not just the foreground window? In that sense, I'd equate it with Preferences and wonder if it should remain a modeless dialog (see bug 206651).
It is window specific, because an application have multiple types windows with different toolbars. For instance, the download manager does not have the same toolbar as the browser window. Therefore, the customize toolbar sheet only applies to the the browser window and should be attached to it.
You can give the download manager a toolbar? :) I see what you mean though. While configuring the toolbar really is a global preference change (it sets the toolbar for all new browser windows, not just the open one), it's implemented in such a way that it'll only interact with the current window. So making it a sheet makes sense. At least in the way it's currently implemented. Thanks, I wasn't sure :)
it's already a sheet on Windows, so it's weird (and backwards) that it's not on Mac.
Any progress? By the way is hyatt still works for mozilla.org !? (while he works on Safari :) ) If the answer in "no", bug should be reassigned...
Assignee: hyatt → bugs
I thought this was a sheet on Mac at one point. Well, it is a sheet on other platforms, and should be a sheet on Mac. Plus, when the dialog first comes up, it covers part of the toolbar, and the user needs to move it out of the way. Then, when making changes to the toolbar, the dialog jumps around the screen a little. It's all very unclean.
Flags: blocking1.0?
Moving blocking requsetto 1.0mac, since it's the right place for mac UI issues.
Flags: blocking1.0? → blocking1.0mac?
Flags: blocking1.0mac? → blocking1.0mac+
There are several problems with the customize toolbar dialog on Mac: (1) The dialog should be a Mac OS X sheet: This would be the best solution, but I don't think it is possible. Sheets are attached either to a window or to a system toolbar. We can't have this sheet attached to the window, since it would come down from the titlebar, covering up the toolbar itself. Also, we are not using a system toolbar; rather, this toolbar is generated by Mozilla itself, so we can't make a sheet appear underneath the toolbar as is seen in Camino (it does use a Mac OS X toolbar). So we are left with using this custom sheet implementation which is used by all the Firefox platforms. (2) The dialog has a titlebar: This one seems rather easy to fix. The dialog is created with the options "chrome,all,dependent", but then the javascript calls HideWindowChrome. So it seems silly to create the window with "all" enabled, but then try to hide it all. If I change the options to just be "chrome,dependent", then I get no titlebar on Mac. This caused no noticeable changes on Linux Firefox. The other issue here is that HideWindowChrome is not implemented on Mac. But it wouldn't help us with this issue, since there is no way to remove the titlebar from an existing window. The only way to get no titlebar is to destroy the window and recreate it with a window class that has no titlebar. Yeah, that kinda sucks. (3) The dialog is not positioned correctly: This one I haven't been able to figure out. The dialog opens up in the upper left corner every time. I see the call to move it underneath the toolbar, but it doesn't seem to have any effect. Anyone have any idea why this isn't working?
So I found out why the customize toolbar dialog would always display in the top left corner. It's this code "RepositionWindow" code here: http://lxr.mozilla.org/mozilla/source/widget/src/mac/nsMacWindow.cpp#1523 It was originally checked in under bug 75653 (the initial mach-o changes bug), but there isn't much documentation as to why it is necessary. Anyone know why this is necessary? I removed that code from my build, and didn't notice anything amiss. The customize toolbar dialog looks much better, but now it appears a little too low. In fact, it looks like it is off by the height of the menubar.
i would venture that it was to work around a bug that is no longer in OSX. I remember there were lots of problems on 10.0 and early betas where if a window started sized 1x1 (gecko loves to do that), it would crash or do other crazy stuff. not sure how relevant it still is.
Attached patch browser.js patch (obsolete) — Splinter Review
Remove "all" attribute from openDialog line. It seems to me that there is no reason to define all if we are then calling hideWindowChrome. I've only tested this in Mac and Linux.
Attached patch OSX patch (obsolete) — Splinter Review
This patch gets rid of the RepositionWindow code, so now the dialog doesn't move to the upper left. I also implemented HideWindowChrome, although as I've mentioned before, on Mac there is no way to remove/hide the titlebar without destroying and recreating the native window. There's still the issue of the dialog showing up a little too low, but these two patchs already make the situation much better.
Comment on attachment 157732 [details] [diff] [review] OSX patch Notice that we should check it in together with the patch for bug 237136, which fixed the window movement issues. BTW, we already have some windows without a title bar.
QA Contact: bugzilla → bugs.mano
Attachment #157732 - Flags: review?(peterv)
Comment on attachment 157732 [details] [diff] [review] OSX patch We ought to find a way to position the sheet under the toolbar.
Attachment #157732 - Flags: review?(peterv) → review+
Attachment #157729 - Flags: review?(mconnor)
Attachment #157732 - Flags: superreview?(sfraser)
Comment on attachment 157732 [details] [diff] [review] OSX patch Hmm, actually, do we want to set mSavedAttributes to a reasonable default value? Maybe in StandardCreate? I'd rather not rely on HideWindowChrome being called in the right order.
Attached patch OSX patch v2Splinter Review
You're right. I changed mSavedAttributes to be initially set to all bits on (which seems to me that it would never happen). Then I just check for it in HideWindowChrome.
Attachment #157732 - Attachment is obsolete: true
Attachment #159765 - Flags: superreview?(sfraser)
Attachment #159765 - Flags: review?(peterv)
Attachment #157732 - Flags: superreview?(sfraser)
Attachment #157732 - Flags: review+
Comment on attachment 159765 [details] [diff] [review] OSX patch v2 >Index: nsMacWindow.cpp >=================================================================== >+ static const WindowAttributes kWindowChrome = >+ kWindowStandardDocumentAttributes | kWindowToolbarButtonAttribute; >+ >+ if (aShouldHide) { >+ ::GetWindowAttributes(mWindowPtr, &mSavedAttributes); >+ ::ChangeWindowAttributes(mWindowPtr, kWindowNoAttributes, kWindowChrome); >+ } else { >+ if (mSavedAttributes == 0xffffffffUL) { >+ NS_WARNING("Calling HideWindowChrome(FALSE) without having first called HideWindowChrome(TRUE)"); >+ } else { >+ ::ChangeWindowAttributes(mWindowPtr, mSavedAttributes, kWindowNoAttributes); I would make this ::ChangeWindowAttributes(mWindowPtr, mSavedAttributes & kWindowChrome, kWindowNoAttributes);
Attachment #159765 - Flags: review?(peterv) → review+
Don't know why but i see this fixed in Mozilla/5.0 (Macintosh; U; PPC Mac OS X Mach-O; en-US; rv:1.7.3) Gecko/20040930 Firefox/0.10 Am i drunk!? :-)
Comment on attachment 157729 [details] [diff] [review] browser.js patch Don't really need this patch anymore, since the customize toolbar dialog no longer slides out. Now, it looks just fine with a titlebar. Plus, in later builds, I noticed that removing "all" from the attributes caused many of the toolbar items to not display in the dialog for some reason.
Attachment #157729 - Attachment is obsolete: true
Attachment #157729 - Flags: review?(mconnor)
sfraser: If you've got the time, can you take a look at the latest patch? I'd like to close this bug out for 1.0.
My 2 cents what needs to be done before this can be considered fixed: • The dialog needs to look like a sheet. Ie. no title bar (and ideally semi-transparent background) • The dialog needs to be fixed in x, y, and z to the parent window. Use a WindowGroup for this. • The window needs to slide out of the toolbar. Probably TransitionWindow...() can be used for this. Either with the genie transition effect, or with the sheet transition effect on a transparent dummy parent window that is placed at the bottom of the toolbar.
Manfred: Those are interesting ideas, but it would require some non-trivial changes to cross-platform code. For one, we would need some way to know that this dialog is attached to a toolbar, such as passing "modal-toolbar" as one of the window attributes to |openDialog()|. And then every platform but MacOSX would ignore it. Although I don't know how willing the Firefox devs would be to such a change.
I guess that if it is too much of an effort to make a proper customize window, we should at least remove the minimize button and all the other disabled buttons from the title bar. Basically it means changing the class of the window to something like movable modal or movable alert. However, I believe that in the long run it would be better to make the customize window look like the preferences (which by the way should not be a sheet) window. The only problem is that it should be "attached" to the main window below the toolbar and not just below the title bar. Moreover in whatever situation both the customize window and the preferences window should not have the resize box in the left bottom part. On top of that is the fact that you can just click the main window again, leaving the customize window open, but then no menus work. If an inexperienced user does something like this he will certainly be confused. So basically I would opt for the customize window being like preferences window but attached just below the toolbar.
moving blocking1.0mac bugs to Firefox1.1 Target Milestone.
Target Milestone: --- → Firefox1.1
Blocks: 73812
Is this patch still useful?
(In reply to comment #32) > Is this patch still useful? We will probably resotre the xul-sheet code for mac only, so the answer is probably "yes".
Blocks: 277000
Assignee: bugs → nobody
Flags: blocking-aviary1.0mac+
QA Contact: bugs.mano → toolbars
Target Milestone: Firefox1.1 → ---
Comment on attachment 159765 [details] [diff] [review] OSX patch v2 Looks OK, but why the removal of the RepositionWindow() part? Is it no longer needed for 10.2?
|RepositionWindow()| was causing issues (don't remember them now), but it was removed in a separate patch. This patch is old and hasn't been updated to the latest code.
(In reply to comment #33) > We will probably resotre the xul-sheet code for mac only, so the answer is > probably "yes". Do you plan to do this for 1.5? If so, is there a bug open for that?
Not for 1.5.
Mano, is this still take-able for Fx2?
Keywords: polish
This is a very confusing behaviour, and I wish I'd noticed and reported it sooner. If you have customize toolbar up and click on the window -- such as on the toolbar, without dragging! -- you bring the window to the fore. At that point the window is _kinda_ functional, but the toolbar isn't, and has no visual indication that it's in this edit state. You have to look for and find the customize-toolbar dialog off in the background (poor people without Expose!), and then put two and two together. Nominating -- it's a pretty bad scene, and I think that the changes to integration the go and search buttons into their respective widgets will have a lot of existing users reaching into the customize dialog for the first time in a long time.
Flags: blocking-firefox2?
Not the current patch, no. But I'm going to look at this and see if there's anything we can do to improve the current UE.
Assignee: nobody → bugs.mano
Flags: blocking-firefox2? → blocking-firefox2+
Target Milestone: --- → Firefox 2
With cocoa widgets, toolbars and their customization sheets could use the Cocoa APIs and therefore not suck.
Comment on attachment 159765 [details] [diff] [review] OSX patch v2 Mark should sr this.
Attachment #159765 - Flags: superreview?(sfraser_bugs) → superreview?(mark)
Comment on attachment 159765 [details] [diff] [review] OSX patch v2 FWIW, I don't need this change for the Fx2 implementation (i.e. we're not going to make it slide out).
Comment on attachment 159765 [details] [diff] [review] OSX patch v2 So you probably don't need this patch now according to Mano's comments, but I'll give my comments anyway just in case. >Index: nsMacWindow.cpp >+ , mSavedAttributes(0xffffffffUL) I'd prefer -1 - what if the type becomes 64-bit? But this seems kind of dirty, because you use this value to track unsaved attributes. What if all of the attributes really are set? OK, it's unlikely today, but don't be afraid to add another PRPackedBool. >+NS_IMETHODIMP >+nsMacWindow::HideWindowChrome(PRBool aShouldHide) >+{ >+ // On MacOSX, we can disable most of the window chrome, except for the >+ // titlebar. The only way to get rid of the titlebar is to destroy the >+ // window and recreate it as a window class that lacks a titlebar. On Tiger, you can actually set kWindowNoTitleBarAttribute. Don't know if it's worth diverging. >+ static const WindowAttributes kWindowChrome = >+ kWindowStandardDocumentAttributes | kWindowToolbarButtonAttribute; >+ >+ if (aShouldHide) { >+ ::GetWindowAttributes(mWindowPtr, &mSavedAttributes); If you call HideWindowChrome(true) twice successively, you'll obliterate mSavedAttributes. Since there's no example consumer of this API, I don't know if that would ever happen, but Gecko in general likes to do things like show windows already being shown, and resize windows without changing their bounds. If you had mChromeHidden, you could compare it to aShouldHide and wrap the meat of this method in that comparison, like we do in Show and Resize. >+ ::ChangeWindowAttributes(mWindowPtr, kWindowNoAttributes, kWindowChrome); >+ } else { >+ if (mSavedAttributes == 0xffffffffUL) { >+ NS_WARNING("Calling HideWindowChrome(FALSE) without having first called HideWindowChrome(TRUE)"); >+ } else { >+ ::ChangeWindowAttributes(mWindowPtr, mSavedAttributes, kWindowNoAttributes); peterv's got a good suggestion in comment 24. >+ mSavedAttributes = 0xffffffffUL; >+ } >+ } >Index: nsMacWindow.h > PRPackedBool mIsSheet; // true if the window is a sheet (Mac OS X) > PRPackedBool mIgnoreDeactivate; // true if this window has a (Mac OS X) sheet opening > PRPackedBool mAcceptsActivation; > PRPackedBool mIsActive; > PRPackedBool mZoomOnShow; > PRPackedBool mZooming; > PRPackedBool mResizeIsFromUs; // we originated the resize, prevent infinite recursion > Point mBoundsOffset; // offset from window structure to content > auto_ptr<nsMacEventHandler> mMacEventHandler; > nsIWidget *mOffsetParent; >+ WindowAttributes mSavedAttributes; This class is already a mess, but the wider types like WindowAttributes should come before narrower ones like PRPackedBool.
Attachment #159765 - Flags: superreview?(mark) → superreview-
Should we split off the Fx2 fix into a new bug and not hijack this?
Actual work (for FF2.0) TBD on bug 350129.
Whiteboard: see bug 350129
Minusing for Fx2 per comment 46. Do we want to nom this for 1.9?
Flags: blocking-firefox2+ → blocking-firefox2-
Assignee: bugs.mano → nobody
Target Milestone: Firefox 2 → ---
Flags: blocking-firefox3?
Colin, can you evaluate this patch if you get a second?
Flags: blocking-firefox3? → blocking-firefox3-
Whiteboard: see bug 350129 → [wanted-firefox3] see bug 350129
The only non-obsolete patch on here is against the old Carbon widgets code. Cocoa widgets have extensive support for native sheets already, so if you wanted to resolve this bug it'd be in JS somewhere. I don't know the JS API for opening windows and such, but I assume you pass some flag to indicate you want a child window to open as a sheet (Mano would know more?). Hope that helps!
(In reply to comment #49) > The only non-obsolete patch on here is against the old Carbon widgets code. > Cocoa widgets have extensive support for native sheets already, so if you > wanted to resolve this bug it'd be in JS somewhere. I don't know the JS API for > opening windows and such, but I assume you pass some flag to indicate you want > a child window to open as a sheet (Mano would know more?). > > Hope that helps! > Huh, not that easy. the toolbar customization sheet should be docked to the window's toolbar, no to its titlebar (also, the opener should still accept d&d events, etc). On trunk, we emulate this using a panel element. We don't emulate the animation though, and _you_ know why ;)
(In reply to comment #50) > Huh, not that easy. the toolbar customization sheet should be docked to the > window's toolbar, no to its titlebar (also, the opener should still accept d&d > events, etc). Ah you're right, my bad :) > On trunk, we emulate this using a panel element. We don't emulate > the animation though, and _you_ know why ;) :( There are a bunch of simple changes that would make it be closer the ones in native apps. The text should read "Drag your favorite item into the toolbar…" "…or drag the default set", for example (I thought I filed a bug about this but I'm unable to find it).
Flags: wanted-firefox3+
Whiteboard: [wanted-firefox3] see bug 350129 → see bug 350129
This bug no longer exists in Firefox 3 and should probably be closed.
Status: NEW → RESOLVED
Closed: 16 years ago
Resolution: --- → FIXED
Currently, the dialog is implemented as a popup, not a sheet. A sheet would slide in, which is what the original reporter requested, and maybe make keyboard-accessibility more straightforward. The sheet could be positioned below the toolbars using the -window:willPositionSheet:usingRect: method in NSWindow. FrameIsInActiveWindow() in FrameIsInActiveWindow.mm would have to also special-case the Customize Toolbar dialog specifically.
While you're free to file a new bug for the specifics, I think the general intent of this bug has been provided. When this bug was filed (almost 4 years ago), the toolbar customization appeared in a new, separate window (see attached screenshot). Now, the window does appear to be a sheet, although it might not perfectly mimic an OS X native (Cocoa) sheet. Regardless, if you'd like to file a bug about the implementation method, the lack of animation, that it should appear in a different location, or be implemented as a native OS X sheet, you're welcome to do so. Naturally, please make sure these have not already been filed before doing so. This bug is simply too general and not the right place for these items.
You need to log in before you can comment on or make changes to this bug.

Attachment

General

Creator:
Created:
Updated:
Size: