Closed Bug 90380 Opened 24 years ago Closed 23 years ago

Get rid of |#ifdef _IMPL_NS_XPRINT|

Categories

(Core Graveyard :: Printing: Xprint, enhancement, P2)

Sun
Linux
enhancement

Tracking

(Not tracked)

VERIFIED FIXED
mozilla0.9.5

People

(Reporter: roland.mainz, Assigned: roland.mainz)

References

Details

Attachments

(1 file, 6 obsolete files)

RFE: get get of the use of _IMPL_NS_XPRINT (which was introduced for staticbuild support) in places where it is possible. Most use of that CPP symbol is unneccesary and can be removed.
Swapping QA<-->Owner
Assignee: katakai → Roland.Mainz
Priority: -- → P2
QA Contact: Roland.Mainz → katakai
Target Milestone: --- → mozilla0.9.4
Accepting bug, CC:'ing Xlib-toolkit folks.
Status: NEW → ASSIGNED
Now we're too close to 0.9.4-freeze to get this fixed in 0.9.4. Retargeting to 0.9.5 - but I cannot promise that I have enougth time to get it fixed in that milestone. ---- ToDo: Replace _IMPL_NS_XPRINT with (at least) two defines: One for stuff mandatory for static build stuff and one #define to seperate the differences between Xlib and Xprint module. I have to investigate whether we need more categories or not...
Target Milestone: mozilla0.9.4 → mozilla0.9.5
Filed prototype patch, the CPP symbol |_IMPL_NS_XPRINT| is not completely "gone". ToDo: Make StaticBuild patch and check whether the patch needs adjustments or not ...
s/Make StaticBuild patch and/Make StaticBuild build and/
Attachment #48081 - Attachment is obsolete: true
Filed patch, this one works with StaticBuild (Solaris 7 SPARC/WS6U2FCS). Requesting r=/sr= ...
Keywords: patch, review
Depends on: 85388
Blocks: 97907
you use the "#ifdef USE_XPRINT " alot, is there a way around using all those ifdef's. I thought this was an XPRINT only modulule?
dcone: |#ifdef USE_XPRINT| is required because Xprint is not available on all unix platforms (for example IRIX). Therefore we need a way to turn-off matching code if the Xprint module is not build (e.g. libXp.so is not present or someone explicitly sets the configure option --disable-xprint ).
Why remove NS_INIT_REFCNT()? In this: + rv = ((nsDrawingSurfaceXlibImpl*)surface)->Init( Should that be an NS_STATIC_CAST? Ditto these: + ((nsDrawingSurfaceXlibImpl *)mRenderingSurface)->Init(mXlibRgbHandle, + ((nsDrawingSurfaceXlibImpl *)surf)->Init(mXlibRgbHandle, I don't understand why you had to replace all the aSurface->GetBlah()s with xxlib_rgb_get_blah()'s, though I don't see any harm in it. What was the reasoning? + mRenderingSurface = mPrintContext; + NS_ADDREF(mRenderingSurface); Why is this not an nsCOMPtr? (and the NS_IF_RELEASE or whatever could go away as well). Seeing these raises warning flags - direct calls to Release/AddRef??? Also, what happens in GetGC if mGC is nsnull? I don't know if the logic allows that to occur, but my assumption is that it might be possible. What about SetGC(nsnull)? + if (mGC) + { + mGC->Release(); + mGC = nsnull; + } + NS_IMETHOD_(xGC *) GetGC() { mGC->AddRef(); return mGC; } + void SetGC(xGC *aGC) { mGC = aGC; mGC->AddRef(); }
> Why remove NS_INIT_REFCNT()? The superclass does that job... it is not required to do it in each subclass constructor, too - right ? :-) > In this: > + rv = ((nsDrawingSurfaceXlibImpl*)surface)->Init( > Should that be an NS_STATIC_CAST? Ditto these: > + ((nsDrawingSurfaceXlibImpl *)mRenderingSurface)->Init(mXlibRgbHandle, > + ((nsDrawingSurfaceXlibImpl *)surf)->Init(mXlibRgbHandle, > > I don't understand why you had to replace all the aSurface->GetBlah()s with > xxlib_rgb_get_blah()'s, though I don't see any harm in it. What was the > reasoning? I simply cleaned-up the API a little bit. All the Get[Display|Screen|Visual|Depth|etc.|etc.]() information is always the same as in the |XlibRgbHandle|. It is usefull to cache the vars in the objects to avoid unneccesary function calls... but IMHO there is no reason to add/keep extra APIs for that stuff... |XlibRgbHandle| does the job already ... > + mRenderingSurface = mPrintContext; > + NS_ADDREF(mRenderingSurface); > > Why is this not an nsCOMPtr? (and the NS_IF_RELEASE or whatever could go > away as well). Good question... because I did not change that (yet) ? Most nsDeviceContext[GTK|PS|Win|Mac|Qt|Photon|etc.] is not completely moved over to nsCOMPtr land yet... this is only another thing which should be fixed some day. > Seeing these raises warning flags - direct calls to Release/AddRef??? Also, > what happens in GetGC if mGC is nsnull? I don't know if the logic allows that > to occur, but my assumption is that it might be possible. What about > SetGC(nsnull)? > > + if (mGC) > + { > + mGC->Release(); > + mGC = nsnull; > + } > > + NS_IMETHOD_(xGC *) GetGC() { mGC->AddRef(); return mGC; } > + void SetGC(xGC *aGC) { mGC = aGC; mGC->AddRef(); } No... that's the GC-cache which does not inherit from nsISupports... don't worry... see mozilla/gfx/src/xlib/nsGCCache.h ... :-)
Ok, I guess that answers all my quibbles except for the NS_STATIC_CAST question. Deal with that quibble, and for what it's worth r=rjesup for general issues. You'll need other reviewers.
+nsDrawingSurfaceXlibImpl::Init(XlibRgbHandle *aXlibRgbHandle, Drawable aDrawable, xGC *aGC) Line up your arguments. Repeat for all places you added |Impl|. + rv = ((nsDrawingSurfaceXlibImpl*)surface)->Init( Why not just make |surface| of type nsDrawingSurfaceXlibImpl* and be done with it? -#ifdef _IMPL_NS_XPRINT #define XPRINT_FONT_HACK 1 -#endif /* _IMPL_NS_XPRINT */ Please put #ifdef USE_XPRINT around this #define to clarify when this define is actually relevant. Looks okay to me otherwise, r=jag. Think you can find someone who knows this code slightly better to have a look too?
Attachment #48127 - Attachment is obsolete: true
Requesting r= from cls@seawood.org for the Makefile.in change ...
Ok I have used this patch on my Solaris 8 tree using Forte 6 UD2 and it looks good to me and works just fine... r=dcran
+ NS_IMETHOD_(Drawable) GetDrawable(); + NS_IMETHOD_(XlibRgbHandle) *GetXlibRgbHandle(); + NS_IMETHOD_(xGC *) GetGC(); Don't use NS_IMETHOD_(type) in interfaces. Proper XPCOM methods return nsresults and use out parameters. Could you explain the reference counting and ownership system here for me? Why are you keeping a weak reference to the nsIDeviceContext (in nsFontMetricsXlib::mDeviceContext)? +nsRenderingContextXp::nsRenderingContextXp() + : nsRenderingContextXlib() +{ + mPrintContext = nsnull; +} ...and if you do switch to a strong reference and an nsCOMPtr, you should use an initializer rather than explicit assignment in the constructor. + NS_ADDREF(mRenderingSurface); Is there a reason you're using manual refcounting? Unless it's a highly exceptional case, you should be using nsCOMPtr. + NS_IMETHOD GetDepth(PRUint32 &depth) + { depth = xxlib_rgb_get_depth(GetXlibRgbHandle()); return NS_OK; } I don't see that the reviewers' comments about C-style casts have been reviewed. Please respond to them, either in the patch or in a bug comment, before submitting for re-super-review.
> + NS_IMETHOD_(Drawable) GetDrawable(); > + NS_IMETHOD_(XlibRgbHandle) *GetXlibRgbHandle(); > + NS_IMETHOD_(xGC *) GetGC(); > > Don't use NS_IMETHOD_(type) in interfaces. Proper XPCOM methods return > nsresults and use out parameters. Fixed. > Could you explain the reference counting and ownership system here for me? > Why are you keeping a weak reference to the nsIDeviceContext (in > nsFontMetricsXlib::mDeviceContext)? nsFontMetricsXlib::mDeviceContext is a reference back to the device for which this font is for. Per definition, the DeviceContextImpl keeps (or "owns") all these fonts in it's font cache - which gets cleaned-up&destroyed in the DeviceContextImpl destructor. Therefore the DeviceContextImpl-based object always "lives" (little bit) longer than the nsFontMetrics*-objects used for that device. > +nsRenderingContextXp::nsRenderingContextXp() > + : nsRenderingContextXlib() > +{ > + mPrintContext = nsnull; > +} > > ...and if you do switch to a strong reference and an nsCOMPtr, you should use > an initializer rather than explicit assignment in the constructor. Fixed. > + NS_ADDREF(mRenderingSurface); > > Is there a reason you're using manual refcounting? Unless it's a highly > exceptional case, you should be using nsCOMPtr. No reason. That's simply some sort of "historical" stuff which wasn't updated yet... There is still a lot of stuff which still waits to be switched-over from manual refcounting to the nsCOMPtr world. Fixed; |mRenderingSurface| and |mOffscreenSurface| are now guarded by nsCOMPtr's > + NS_IMETHOD GetDepth(PRUint32 &depth) > + { depth = xxlib_rgb_get_depth(GetXlibRgbHandle()); > return NS_OK; } > > I don't see that the reviewers' comments about C-style casts have been > reviewed. > Please respond to them, either in the patch or in a bug comment, before > submitting for re-super-review. I removed the cast. Fixed.
Attachment #48413 - Attachment is obsolete: true
Requesting sr= (I am aware that I still miss a r=cls@seawood.org - but I think it can be "done" in parallel to the sr= assuming the Makefile.in-part won't be touched anymore).
Blocks: 84947
Comment on attachment 48804 [details] [diff] [review] New patch for 2001-09-08-08-trunk per shaver's comments >diff -r -u original/mozilla/gfx/src/xlib/nsDeviceContextXlib.cpp mozilla/gfx/src/xlib/nsDeviceContextXlib.cpp >--- original/mozilla/gfx/src/xlib/nsDeviceContextXlib.cpp Wed Aug 29 01:12:50 2001 >+++ mozilla/gfx/src/xlib/nsDeviceContextXlib.cpp Sun Sep 9 21:24:56 2001 >@@ -65,7 +65,6 @@ > : DeviceContextImpl() > { > PR_LOG(DeviceContextXlibLM, PR_LOG_DEBUG, ("nsDeviceContextXlib::nsDeviceContextXlib()\n")); >- NS_INIT_REFCNT(); > mTwipsToPixels = 1.0; > mPixelsToTwips = 1.0; > mNumCells = 0; Why is that being removed? Does that leave things uninitialized? >- nsDrawingSurfaceXlib *surf = (nsDrawingSurfaceXlib *)mSurface; >+ nsIDrawingSurfaceXlib *surf = (nsIDrawingSurfaceXlib *)mSurface; There are lots of these instances in the file. If you're going to touch them anyway then please convert them to NS_STATIC_CAST() macro calls. Other than that sr=blizzard
Attachment #48804 - Flags: superreview+
blizzard wrote: > >diff -r -u original/mozilla/gfx/src/xlib/nsDeviceContextXlib.cpp > mozilla/gfx/src/xlib/nsDeviceContextXlib.cpp > >--- original/mozilla/gfx/src/xlib/nsDeviceContextXlib.cpp Wed Aug 29 > 01:12:50 2001 > >+++ mozilla/gfx/src/xlib/nsDeviceContextXlib.cpp Sun Sep 9 21:24:56 > 2001 > >@@ -65,7 +65,6 @@ > > : DeviceContextImpl() > > { > > PR_LOG(DeviceContextXlibLM,PR_LOG_DEBUG, ("nsDeviceContextXlib :: > nsDeviceContextXlib()\n" )); > >- NS_INIT_REFCNT(); > > mTwipsToPixels = 1.0; > > mPixelsToTwips = 1.0; > > mNumCells = 0; > > Why is that being removed? Does that leave things uninitialized? The superclass (DeviceContextImpl) already does that job. That's why I removed it (I saw that in OS/2 code and asked mkaply): > >- nsDrawingSurfaceXlib *surf = (nsDrawingSurfaceXlib *)mSurface; > >+ nsIDrawingSurfaceXlib *surf = (nsIDrawingSurfaceXlib *)mSurface; > > There are lots of these instances in the file. If you're going to touch them > anyway then please convert them to NS_STATIC_CAST() macro calls. Fixed in the new patch... > Other than that sr=blizzard Thanks!
Attachment #48804 - Attachment is obsolete: true
Same problem as last time: ../../../../mozilla/gfx/src/xlib/nsRenderingContextXlib.cpp:38: imgIContainer.h: No such file or directory Configuring using: --with-xlib --with-qt --with-qtdir=/usr/lib/qt-2.2.4 Build with xlib & xprint enabled.
Dauphin: was that a dep tracking build? I suspect any of the REQUIRES lines in the dirs we normally don't build are fairly dead.
Attachment #49198 - Attachment is obsolete: true
> Same problem as last time: > > ../../../../mozilla/gfx/src/xlib/nsRenderingContextXlib.cpp:38: > imgIContainer.h: > No such file or directory > Configuring using: --with-xlib --with-qt --with-qtdir=/usr/lib/qt-2.2.4 > > Build with xlib & xprint enabled. I added "imglib2" to gfx/src/xlib/Makefile.in 's REQUIRES line which should (hopefully) fix this... BTW: I usually build by Xlib-toolkit builds with "configure --enable-toolkit=xlib"
Comment on attachment 49200 [details] [diff] [review] New patch for 2001-09-08-08-trunk to get rid of this mess... Someone touched REQUIRES line of gfx/src/xlib/Makefile.in between 2001-09-08-08-trunk and todays tip. I'll file a new patch ...
Attachment #49200 - Attachment is obsolete: true
OK... thanks to jaggernauts's help I did the following to test the patch: 1. Set MOZ_TRACK_MODULE_DEPS=1 in config/autoconf.mk 2. Cleaned dist/ 3. (cd gfx; gmake clean) + removed all remaining files (*/Makefile) from gfx/ 4. rebuild the tree with "export MOZ_TRACK_MODULE_DEPS=1; nice gmake" Results: Build works :-)
cls: this should fix your problem, I think. r=jag on the Makefile.in change.
Status: ASSIGNED → RESOLVED
Closed: 23 years ago
Resolution: --- → FIXED
Roland or cls, Can you verify this for me? Or could you give the instruction how to verify? Thanks.
Verifying - the evil |_IMPL_NS_XPRINT| cpp symbol is gone... :)
Status: RESOLVED → VERIFIED
Product: Core → Core Graveyard
You need to log in before you can comment on or make changes to this bug.

Attachment

General

Creator:
Created:
Updated:
Size: