Compare commits

..

966 Commits

Author SHA1 Message Date
blizzard%redhat.com
2ca39b9b17 merge from head
git-svn-id: svn://10.0.0.236/branches/SUPERWIN@53740 18797224-902f-48f8-a5cc-f745e15eee43
1999-11-17 03:57:27 +00:00
blizzard%redhat.com
fe94a6ca17 merges from head
git-svn-id: svn://10.0.0.236/branches/SUPERWIN@53737 18797224-902f-48f8-a5cc-f745e15eee43
1999-11-17 03:27:47 +00:00
blizzard%redhat.com
dbd81545d5 remove these files from the branch, they are elsewhere in head now...
git-svn-id: svn://10.0.0.236/branches/SUPERWIN@53733 18797224-902f-48f8-a5cc-f745e15eee43
1999-11-17 03:14:54 +00:00
blizzard%redhat.com
eae64955ac merge modal changes from head
git-svn-id: svn://10.0.0.236/branches/SUPERWIN@53660 18797224-902f-48f8-a5cc-f745e15eee43
1999-11-16 16:15:13 +00:00
blizzard%redhat.com
ac2b83c0f5 merge IM fixes from head
git-svn-id: svn://10.0.0.236/branches/SUPERWIN@53656 18797224-902f-48f8-a5cc-f745e15eee43
1999-11-16 16:08:54 +00:00
blizzard%redhat.com
4de4b9b262 merges from head
git-svn-id: svn://10.0.0.236/branches/SUPERWIN@53653 18797224-902f-48f8-a5cc-f745e15eee43
1999-11-16 15:56:04 +00:00
(no author)
585367a7b8 This commit was manufactured by cvs2svn to create branch 'SUPERWIN'.
git-svn-id: svn://10.0.0.236/branches/SUPERWIN@53594 18797224-902f-48f8-a5cc-f745e15eee43
1999-11-16 01:52:21 +00:00
blizzard%redhat.com
8226158ae4 focus changes from head
git-svn-id: svn://10.0.0.236/branches/SUPERWIN@53447 18797224-902f-48f8-a5cc-f745e15eee43
1999-11-14 04:34:41 +00:00
blizzard%redhat.com
9cb5b0bd0f don't clear the xlate queue for ConfigureEvents on shell windows since the xlate queue has nothing to do with that shell window...
git-svn-id: svn://10.0.0.236/branches/SUPERWIN@53425 18797224-902f-48f8-a5cc-f745e15eee43
1999-11-13 15:10:10 +00:00
blizzard%redhat.com
ac24bf46fe merges from head
git-svn-id: svn://10.0.0.236/branches/SUPERWIN@53408 18797224-902f-48f8-a5cc-f745e15eee43
1999-11-13 04:55:21 +00:00
blizzard%redhat.com
feb3b49669 work around for lame NS_SIZE event problems...
git-svn-id: svn://10.0.0.236/branches/SUPERWIN@53361 18797224-902f-48f8-a5cc-f745e15eee43
1999-11-12 20:24:19 +00:00
blizzard%redhat.com
e4d84ceca8 use the external gtksuperwin library
git-svn-id: svn://10.0.0.236/branches/SUPERWIN@53360 18797224-902f-48f8-a5cc-f745e15eee43
1999-11-12 20:14:52 +00:00
blizzard%redhat.com
63e9105b5f add gtksuperwin to the build list
git-svn-id: svn://10.0.0.236/branches/SUPERWIN@53359 18797224-902f-48f8-a5cc-f745e15eee43
1999-11-12 20:13:40 +00:00
blizzard%redhat.com
21904a64db patch from claudius@netscape.com to make this build on platforms with picky c++ compilers
git-svn-id: svn://10.0.0.236/branches/SUPERWIN@53355 18797224-902f-48f8-a5cc-f745e15eee43
1999-11-12 18:10:02 +00:00
blizzard%redhat.com
6d8df6d4e7 add a -lgtksuperwin for the viewer since it embeds a native widget into the layout
git-svn-id: svn://10.0.0.236/branches/SUPERWIN@53354 18797224-902f-48f8-a5cc-f745e15eee43
1999-11-12 17:29:47 +00:00
blizzard%redhat.com
8f49d292ca merge in some of pav's IM changes...
git-svn-id: svn://10.0.0.236/branches/SUPERWIN@53281 18797224-902f-48f8-a5cc-f745e15eee43
1999-11-12 00:04:56 +00:00
pavlov%netscape.com
e1431cd937 fix loop in debugging code
git-svn-id: svn://10.0.0.236/branches/SUPERWIN@53251 18797224-902f-48f8-a5cc-f745e15eee43
1999-11-11 22:03:47 +00:00
blizzard%redhat.com
d8ee1acce8 make sure that we do a gtk_style_attach() in the realize method so the style doesn't get destroyed early...
git-svn-id: svn://10.0.0.236/branches/SUPERWIN@53241 18797224-902f-48f8-a5cc-f745e15eee43
1999-11-11 21:39:27 +00:00
blizzard%redhat.com
db224b8d6e merge in clipboard changes. remove some more debugging spew.
git-svn-id: svn://10.0.0.236/branches/SUPERWIN@53089 18797224-902f-48f8-a5cc-f745e15eee43
1999-11-10 21:29:44 +00:00
blizzard%redhat.com
37106d7fc3 remove more debugging spew
git-svn-id: svn://10.0.0.236/branches/SUPERWIN@53088 18797224-902f-48f8-a5cc-f745e15eee43
1999-11-10 21:05:38 +00:00
blizzard%redhat.com
0c074d2a55 remove debugging spew
git-svn-id: svn://10.0.0.236/branches/SUPERWIN@53086 18797224-902f-48f8-a5cc-f745e15eee43
1999-11-10 19:35:01 +00:00
blizzard%redhat.com
7d47d3aace make sure to send focus in and focus out events properly when giving focus to a superwin.
git-svn-id: svn://10.0.0.236/branches/SUPERWIN@53085 18797224-902f-48f8-a5cc-f745e15eee43
1999-11-10 19:31:50 +00:00
blizzard%redhat.com
4d1a2e8639 merge the license whackage
git-svn-id: svn://10.0.0.236/branches/SUPERWIN@53020 18797224-902f-48f8-a5cc-f745e15eee43
1999-11-09 23:06:12 +00:00
blizzard%redhat.com
8b6d035f17 add focus support
git-svn-id: svn://10.0.0.236/branches/SUPERWIN@53016 18797224-902f-48f8-a5cc-f745e15eee43
1999-11-09 22:53:26 +00:00
blizzard%redhat.com
4d22490af1 fix warnings due to passing bad data to the debug code
git-svn-id: svn://10.0.0.236/branches/SUPERWIN@53008 18797224-902f-48f8-a5cc-f745e15eee43
1999-11-09 19:48:03 +00:00
blizzard%redhat.com
4a1d8f7401 fix bogus warnings for gtk_signal_emit_stop_by_name
git-svn-id: svn://10.0.0.236/branches/SUPERWIN@52997 18797224-902f-48f8-a5cc-f745e15eee43
1999-11-09 17:20:22 +00:00
blizzard%redhat.com
3ed82d86a0 add nsWindow::SetCursor
git-svn-id: svn://10.0.0.236/branches/SUPERWIN@52996 18797224-902f-48f8-a5cc-f745e15eee43
1999-11-09 17:10:22 +00:00
blizzard%redhat.com
e763644046 fix background colors on windows
git-svn-id: svn://10.0.0.236/branches/SUPERWIN@52995 18797224-902f-48f8-a5cc-f745e15eee43
1999-11-09 17:03:43 +00:00
blizzard%redhat.com
e94c0535d1 add hacks for superwin
git-svn-id: svn://10.0.0.236/branches/SUPERWIN@52971 18797224-902f-48f8-a5cc-f745e15eee43
1999-11-08 22:56:27 +00:00
blizzard%redhat.com
201eebe4ec add mozbox code
git-svn-id: svn://10.0.0.236/branches/SUPERWIN@52965 18797224-902f-48f8-a5cc-f745e15eee43
1999-11-08 22:34:41 +00:00
blizzard%redhat.com
91802fc4cb add superwin code for mozbox
git-svn-id: svn://10.0.0.236/branches/SUPERWIN@52964 18797224-902f-48f8-a5cc-f745e15eee43
1999-11-08 22:34:22 +00:00
pavlov%netscape.com
68a592d45f fix debugging stuff like flashing, etc
git-svn-id: svn://10.0.0.236/branches/SUPERWIN@52963 18797224-902f-48f8-a5cc-f745e15eee43
1999-11-08 22:32:36 +00:00
blizzard%redhat.com
60c89eba4b export our gtk header files. we'll need them for embedding.
git-svn-id: svn://10.0.0.236/branches/SUPERWIN@52953 18797224-902f-48f8-a5cc-f745e15eee43
1999-11-08 21:52:35 +00:00
blizzard%redhat.com
ceecd95095 make sure that the child window uses the same destroy as the nsWindow class
git-svn-id: svn://10.0.0.236/branches/SUPERWIN@52950 18797224-902f-48f8-a5cc-f745e15eee43
1999-11-08 21:40:54 +00:00
blizzard%redhat.com
220151a643 assert if we get passed bad data. this is for testing.
git-svn-id: svn://10.0.0.236/branches/SUPERWIN@52944 18797224-902f-48f8-a5cc-f745e15eee43
1999-11-08 16:11:10 +00:00
blizzard%redhat.com
35d00c2c83 only send resize events on windows that are toplevel or have been created with a native parent
git-svn-id: svn://10.0.0.236/branches/SUPERWIN@52930 18797224-902f-48f8-a5cc-f745e15eee43
1999-11-07 19:31:15 +00:00
blizzard%redhat.com
dfccc12330 add nsWindow::SetBackgroundColor, fix a warning
git-svn-id: svn://10.0.0.236/branches/SUPERWIN@52923 18797224-902f-48f8-a5cc-f745e15eee43
1999-11-06 20:39:28 +00:00
(no author)
3c0a628da5 This commit was manufactured by cvs2svn to create branch 'SUPERWIN'.
git-svn-id: svn://10.0.0.236/branches/SUPERWIN@52913 18797224-902f-48f8-a5cc-f745e15eee43
1999-11-06 03:43:57 +00:00
blizzard%redhat.com
e67e916ea6 turn off the backing store for now
git-svn-id: svn://10.0.0.236/branches/SUPERWIN@52889 18797224-902f-48f8-a5cc-f745e15eee43
1999-11-06 00:30:53 +00:00
blizzard%redhat.com
2312b5fc11 fix problems with using nsWindow::WidgetToScreen with toplevel windows
git-svn-id: svn://10.0.0.236/branches/SUPERWIN@52863 18797224-902f-48f8-a5cc-f745e15eee43
1999-11-05 21:37:52 +00:00
blizzard%redhat.com
fcb064c579 turn on backing store for the bin_window
git-svn-id: svn://10.0.0.236/branches/SUPERWIN@52856 18797224-902f-48f8-a5cc-f745e15eee43
1999-11-05 16:39:20 +00:00
blizzard%redhat.com
72255234ea add expose event compression
git-svn-id: svn://10.0.0.236/branches/SUPERWIN@52854 18797224-902f-48f8-a5cc-f745e15eee43
1999-11-05 15:58:56 +00:00
blizzard%redhat.com
2cff6771cb never assign a mozarea to mMozArea unless you own it.
git-svn-id: svn://10.0.0.236/branches/SUPERWIN@52853 18797224-902f-48f8-a5cc-f745e15eee43
1999-11-05 15:49:31 +00:00
pavlov%netscape.com
f16eb3c3d2 fix WidgetToScreen
git-svn-id: svn://10.0.0.236/branches/SUPERWIN@52850 18797224-902f-48f8-a5cc-f745e15eee43
1999-11-05 06:05:37 +00:00
pavlov%netscape.com
cc5f4699b6 remove #ifdef GTK_FIXED crap. make USE_SUPERWIN default, and fix native system color stuff (to be in head soon)
git-svn-id: svn://10.0.0.236/branches/SUPERWIN@52845 18797224-902f-48f8-a5cc-f745e15eee43
1999-11-05 05:45:52 +00:00
blizzard%redhat.com
8dbfb05c9f fix some refcounting problems with the superwin and mozarea
git-svn-id: svn://10.0.0.236/branches/SUPERWIN@52821 18797224-902f-48f8-a5cc-f745e15eee43
1999-11-04 23:12:20 +00:00
blizzard%redhat.com
4f6c078a40 make sure to destroy the superwin when the object goes out of scope
git-svn-id: svn://10.0.0.236/branches/SUPERWIN@52806 18797224-902f-48f8-a5cc-f745e15eee43
1999-11-04 21:51:50 +00:00
blizzard%redhat.com
f303b7b880 add queued drawing
git-svn-id: svn://10.0.0.236/branches/SUPERWIN@52803 18797224-902f-48f8-a5cc-f745e15eee43
1999-11-04 21:16:21 +00:00
blizzard%redhat.com
d5d532bbdf make rollup events work.
git-svn-id: svn://10.0.0.236/branches/SUPERWIN@52801 18797224-902f-48f8-a5cc-f745e15eee43
1999-11-04 20:33:34 +00:00
blizzard%redhat.com
1e9545d94e scrolling added
git-svn-id: svn://10.0.0.236/branches/SUPERWIN@52797 18797224-902f-48f8-a5cc-f745e15eee43
1999-11-04 20:06:53 +00:00
blizzard%redhat.com
bbaf2a8966 implement nsWindow::Resize and nsWindow::Move methods
git-svn-id: svn://10.0.0.236/branches/SUPERWIN@52772 18797224-902f-48f8-a5cc-f745e15eee43
1999-11-04 03:25:04 +00:00
blizzard%redhat.com
4979b2734e first pass at getting superwin code to build. it will run now but doesn't have nsWindow::Move and nsWindow::Resize implemented...
git-svn-id: svn://10.0.0.236/branches/SUPERWIN@52747 18797224-902f-48f8-a5cc-f745e15eee43
1999-11-03 23:07:52 +00:00
blizzard%redhat.com
0ba4ab32b2 fix some indenting issues
git-svn-id: svn://10.0.0.236/branches/SUPERWIN@52724 18797224-902f-48f8-a5cc-f745e15eee43
1999-11-03 20:10:28 +00:00
blizzard%redhat.com
53df453f1a add gdk event handler
git-svn-id: svn://10.0.0.236/branches/SUPERWIN@52722 18797224-902f-48f8-a5cc-f745e15eee43
1999-11-03 19:47:14 +00:00
blizzard%redhat.com
db90d4ddcf start adding glue code for events for the superwin and mozbox code. also, add the box and superwin as class members.
git-svn-id: svn://10.0.0.236/branches/SUPERWIN@52721 18797224-902f-48f8-a5cc-f745e15eee43
1999-11-03 18:58:37 +00:00
blizzard%redhat.com
24a4aec113 change all of the debugging calls to use GtkObject or GtkWidget
git-svn-id: svn://10.0.0.236/branches/SUPERWIN@52718 18797224-902f-48f8-a5cc-f745e15eee43
1999-11-03 16:38:21 +00:00
blizzard%redhat.com
74599c2956 change all of the CreateNative calls to use GtkObject instead of GtkWidget
git-svn-id: svn://10.0.0.236/branches/SUPERWIN@52717 18797224-902f-48f8-a5cc-f745e15eee43
1999-11-03 16:09:35 +00:00
(no author)
9b52dc355f This commit was manufactured by cvs2svn to create branch 'SUPERWIN'.
git-svn-id: svn://10.0.0.236/branches/SUPERWIN@52698 18797224-902f-48f8-a5cc-f745e15eee43
1999-11-03 07:34:51 +00:00
blizzard%redhat.com
1792ff0e46 start on the branch to get the superwin code to build.
git-svn-id: svn://10.0.0.236/branches/SUPERWIN@52591 18797224-902f-48f8-a5cc-f745e15eee43
1999-11-02 22:21:47 +00:00
(no author)
fb08d16e05 This commit was manufactured by cvs2svn to create branch 'SUPERWIN'.
git-svn-id: svn://10.0.0.236/branches/SUPERWIN@52461 18797224-902f-48f8-a5cc-f745e15eee43
1999-11-02 01:25:01 +00:00
pavlov%netscape.com
268235e424 break in the switch, don't fall through *doh* r=duncan@be.com
git-svn-id: svn://10.0.0.236/trunk@52460 18797224-902f-48f8-a5cc-f745e15eee43
1999-11-02 01:25:00 +00:00
cls%seawood.org
6533b90ce6 Added detection for alphaev6. Submitted by Matt Wilson <msw@redhat.com>.
git-svn-id: svn://10.0.0.236/trunk@52459 18797224-902f-48f8-a5cc-f745e15eee43
1999-11-02 01:24:16 +00:00
nhotta%netscape.com
a468c6983c Fixed a typo in the entity definition, r=ftang.
git-svn-id: svn://10.0.0.236/trunk@52458 18797224-902f-48f8-a5cc-f745e15eee43
1999-11-02 01:19:19 +00:00
tbogard%aol.net
0154b52329 Second phase of changing NS_ENSURE() to NS_ENSURE_TRUE() and NS_ENSURE_NOT() to NS_ENSURE_FALSE(). r=hyatt
git-svn-id: svn://10.0.0.236/trunk@52457 18797224-902f-48f8-a5cc-f745e15eee43
1999-11-02 01:18:52 +00:00
nisheeth%netscape.com
add2edbda0 r=pollmann. Check local DTD directory for dtd files and, if found, load them from there.
git-svn-id: svn://10.0.0.236/trunk@52456 18797224-902f-48f8-a5cc-f745e15eee43
1999-11-02 01:16:37 +00:00
pavlov%netscape.com
59b22727bd added .cvsignore file r=slamm
git-svn-id: svn://10.0.0.236/trunk@52455 18797224-902f-48f8-a5cc-f745e15eee43
1999-11-02 01:16:09 +00:00
waterson%netscape.com
410ac67f93 Add 'miscellaneous' debug prefs to house 'disable XUL cache' pref UI.
git-svn-id: svn://10.0.0.236/trunk@52454 18797224-902f-48f8-a5cc-f745e15eee43
1999-11-02 01:14:50 +00:00
waterson%netscape.com
9ba00de102 Bug 15146. Brutal sharing, Phase III. Turn on protoype, script, and style sheet caching. r=hyatt
git-svn-id: svn://10.0.0.236/trunk@52453 18797224-902f-48f8-a5cc-f745e15eee43
1999-11-02 01:14:07 +00:00
alecf%netscape.com
54bfc70eea cleanup NS_IMPL_MODULE and friends
- define new nsModuleComponentInfo and use it instead of components_t
- use size_t instead of unsigned int
- add some docs
- allow user to define own module name


git-svn-id: svn://10.0.0.236/trunk@52452 18797224-902f-48f8-a5cc-f745e15eee43
1999-11-02 01:12:32 +00:00
danm%netscape.com
44d6b4c7e5 removing implementation of nsIShutdownListener. it was redundant, anyway. r:dp@netscape.com
git-svn-id: svn://10.0.0.236/trunk@52451 18797224-902f-48f8-a5cc-f745e15eee43
1999-11-02 01:10:35 +00:00
tbogard%aol.net
c98bf7e9a6 **Not hooked up to build** Implemented Repaint. Changed document to be a readonly attribute. Added a SetDocument that takes a contentType. Implemented this. Changed all the idl methods to be lower-case.
git-svn-id: svn://10.0.0.236/trunk@52450 18797224-902f-48f8-a5cc-f745e15eee43
1999-11-02 01:04:25 +00:00
rogerl%netscape.com
81ef7e0434 Needed string parameter in order to pass type comparison correctly.
Added missing TITLE declaration.


git-svn-id: svn://10.0.0.236/trunk@52449 18797224-902f-48f8-a5cc-f745e15eee43
1999-11-02 01:03:52 +00:00
rogerl%netscape.com
dff3a32176 Moved nested function out - new ECMA definition.
git-svn-id: svn://10.0.0.236/trunk@52448 18797224-902f-48f8-a5cc-f745e15eee43
1999-11-02 01:02:55 +00:00
rogerl%netscape.com
ceaebd4804 Put test case in eval statement to catch error.
git-svn-id: svn://10.0.0.236/trunk@52447 18797224-902f-48f8-a5cc-f745e15eee43
1999-11-02 01:02:03 +00:00
rogerl%netscape.com
a027094b30 Added missing TITLE declaration
git-svn-id: svn://10.0.0.236/trunk@52446 18797224-902f-48f8-a5cc-f745e15eee43
1999-11-02 01:01:34 +00:00
troy%netscape.com
aa355b810b See if the Mac is any happier with this
git-svn-id: svn://10.0.0.236/trunk@52445 18797224-902f-48f8-a5cc-f745e15eee43
1999-11-02 00:21:47 +00:00
varada%netscape.com
cc411daf35 removing unix line endings
git-svn-id: svn://10.0.0.236/trunk@52444 18797224-902f-48f8-a5cc-f745e15eee43
1999-11-01 23:47:43 +00:00
dmose%mozilla.org
03ec794132 updated license boilerplate
git-svn-id: svn://10.0.0.236/trunk@52443 18797224-902f-48f8-a5cc-f745e15eee43
1999-11-01 23:33:56 +00:00
varada%netscape.com
9efe8d599f fix for bug#9097
git-svn-id: svn://10.0.0.236/trunk@52442 18797224-902f-48f8-a5cc-f745e15eee43
1999-11-01 23:33:13 +00:00
valeski%netscape.com
9862db5a48 not in build. updating keyword protocol handler to use new api.
git-svn-id: svn://10.0.0.236/trunk@52441 18797224-902f-48f8-a5cc-f745e15eee43
1999-11-01 23:33:05 +00:00
troy%netscape.com
c1c6ae68cd Changed GetFrameName() calls to use nsIFrameDebug interface
git-svn-id: svn://10.0.0.236/trunk@52440 18797224-902f-48f8-a5cc-f745e15eee43
1999-11-01 23:29:27 +00:00
kipp%netscape.com
824e50d549 Fixed compilation bustage by using nsIFrameDebug to invoke list and regression data methods
git-svn-id: svn://10.0.0.236/trunk@52439 18797224-902f-48f8-a5cc-f745e15eee43
1999-11-01 23:29:05 +00:00
troy%netscape.com
af506bd6c9 Temporary change
git-svn-id: svn://10.0.0.236/trunk@52438 18797224-902f-48f8-a5cc-f745e15eee43
1999-11-01 23:21:20 +00:00
rogerl%netscape.com
5df87dc67e Belay that, the tests were fine, the code HAS changed.
git-svn-id: svn://10.0.0.236/trunk@52437 18797224-902f-48f8-a5cc-f745e15eee43
1999-11-01 23:16:00 +00:00
troy%netscape.com
cf64589783 Fixed problem with GetFrameName() being defines in non-debug build
git-svn-id: svn://10.0.0.236/trunk@52436 18797224-902f-48f8-a5cc-f745e15eee43
1999-11-01 23:12:32 +00:00
larryh%netscape.com
d3f1c46ba5 BugZilla 17558. Add PR_Open() PR_EXCL flag
git-svn-id: svn://10.0.0.236/trunk@52435 18797224-902f-48f8-a5cc-f745e15eee43
1999-11-01 22:59:27 +00:00
kipp%netscape.com
d8d82e0637 r=rods; bug=17518; I updated the html.css file to select on 'a[href]' instead of 'a' so that the focus properties and related style properties would only apply to anchors with href's
git-svn-id: svn://10.0.0.236/trunk@52434 18797224-902f-48f8-a5cc-f745e15eee43
1999-11-01 22:54:14 +00:00
tbogard%aol.net
94697e0452 Changed NS_ENSURE_NOT() to use NS_ENSURE_FALSE() per API change.
git-svn-id: svn://10.0.0.236/trunk@52433 18797224-902f-48f8-a5cc-f745e15eee43
1999-11-01 22:54:06 +00:00
kipp%netscape.com
f8fb68c673 r=troy; fixed compiliation issue for debug builds
git-svn-id: svn://10.0.0.236/trunk@52432 18797224-902f-48f8-a5cc-f745e15eee43
1999-11-01 22:45:20 +00:00
leaf%mozilla.org
368f25d7ee adding mozilla/uriloader for mscott
git-svn-id: svn://10.0.0.236/trunk@52431 18797224-902f-48f8-a5cc-f745e15eee43
1999-11-01 22:43:22 +00:00
kipp%netscape.com
7ae532db2a r=troy; fixed bug 14982 - the problem was that empty continuations of an inline non-replaced element (e.g. 'span') were impact line-height calculations when they should effectively disappear
git-svn-id: svn://10.0.0.236/trunk@52430 18797224-902f-48f8-a5cc-f745e15eee43
1999-11-01 22:38:17 +00:00
kipp%netscape.com
a98ac534c3 latest and greatest tests for block dom functions
git-svn-id: svn://10.0.0.236/trunk@52429 18797224-902f-48f8-a5cc-f745e15eee43
1999-11-01 22:36:42 +00:00
akkana%netscape.com
1824e7ce91 Fix Sun build bustage: older gcc can't do nsCOMPtr on a forward type
git-svn-id: svn://10.0.0.236/trunk@52428 18797224-902f-48f8-a5cc-f745e15eee43
1999-11-01 22:16:15 +00:00
troy%netscape.com
3513334988 Moved a bunch of stuff out to a nsIFrameDebug interface
git-svn-id: svn://10.0.0.236/trunk@52427 18797224-902f-48f8-a5cc-f745e15eee43
1999-11-01 22:12:45 +00:00
dp%netscape.com
8a02a9884b Removing extra release happening on a service. NS_WITH_SERVICE() will
take care of this release.


git-svn-id: svn://10.0.0.236/trunk@52426 18797224-902f-48f8-a5cc-f745e15eee43
1999-11-01 21:57:14 +00:00
akkana%netscape.com
0df1ff715c Formatting whitespace changes only
git-svn-id: svn://10.0.0.236/trunk@52425 18797224-902f-48f8-a5cc-f745e15eee43
1999-11-01 21:53:50 +00:00
putterman%netscape.com
897d9e027c Release mNativeDragTarget to fix leaks. no bug. reviewed by rods.
git-svn-id: svn://10.0.0.236/trunk@52424 18797224-902f-48f8-a5cc-f745e15eee43
1999-11-01 21:53:06 +00:00
sspitzer%netscape.com
07d441b61a fix for #16119. this variable is not defined out of the scope of the loop, so
it was undefined.


git-svn-id: svn://10.0.0.236/trunk@52423 18797224-902f-48f8-a5cc-f745e15eee43
1999-11-01 21:51:16 +00:00
mscott%netscape.com
5492a19059 Don't build new uri idl interfaces in netwerk.
they've been moved to uriloader.


git-svn-id: svn://10.0.0.236/trunk@52422 18797224-902f-48f8-a5cc-f745e15eee43
1999-11-01 21:49:55 +00:00
radha%netscape.com
d0a23025d8 Remove the extra AddRef to nsHistoryLayoutState. r=pollmann, bug #16496
git-svn-id: svn://10.0.0.236/trunk@52421 18797224-902f-48f8-a5cc-f745e15eee43
1999-11-01 21:47:54 +00:00
mscott%netscape.com
e1c9192da5 remove these uri dispatching interfaces from netwerk.
they live in uriloader now.


git-svn-id: svn://10.0.0.236/trunk@52420 18797224-902f-48f8-a5cc-f745e15eee43
1999-11-01 21:47:26 +00:00
alecf%netscape.com
a15001ef11 fix twisties in the thread pane and account manager by responding to GetTarget() along the child arcs like #child and #MessageChild bug #13551
r=scottip


git-svn-id: svn://10.0.0.236/trunk@52419 18797224-902f-48f8-a5cc-f745e15eee43
1999-11-01 21:46:07 +00:00
mscott%netscape.com
099420f43e none of these interfaces were being used yet.
they've been moved into mozilla\uriloader.


git-svn-id: svn://10.0.0.236/trunk@52418 18797224-902f-48f8-a5cc-f745e15eee43
1999-11-01 21:45:29 +00:00
tbogard%aol.net
ae3cd9e2ce Changed NS_ENSURE_NOT to NS_ENSURE_FALSE to reflect API change. r=hyatt
git-svn-id: svn://10.0.0.236/trunk@52417 18797224-902f-48f8-a5cc-f745e15eee43
1999-11-01 21:43:56 +00:00
dveditz%netscape.com
5ed2cd7fa7 taking a crack at some ports bustage. r=pnunn
git-svn-id: svn://10.0.0.236/trunk@52416 18797224-902f-48f8-a5cc-f745e15eee43
1999-11-01 21:35:50 +00:00
akkana%netscape.com
9dd7ffd0ef 17275, 16285, 15204: Switch to using nsISaveAsCharset for both charset and entity conversion. r=nhotta
git-svn-id: svn://10.0.0.236/trunk@52415 18797224-902f-48f8-a5cc-f745e15eee43
1999-11-01 21:34:44 +00:00
tbogard%aol.net
46a7117699 Changed NS_ENSURE_NOT to NS_ENSURE_FALSE to reflect API change. r=hyatt
git-svn-id: svn://10.0.0.236/trunk@52414 18797224-902f-48f8-a5cc-f745e15eee43
1999-11-01 21:27:09 +00:00
tbogard%aol.net
8d4c0ac47e Changed NS_ENSURE_NOT to NS_ENSURE_FALSE to reflect API change.
git-svn-id: svn://10.0.0.236/trunk@52413 18797224-902f-48f8-a5cc-f745e15eee43
1999-11-01 21:25:52 +00:00
tbogard%aol.net
87358978bd Changed NS_ASSERTION to use NS_WARN_IF_FALSE. r=pavlov
git-svn-id: svn://10.0.0.236/trunk@52412 18797224-902f-48f8-a5cc-f745e15eee43
1999-11-01 21:24:24 +00:00
dp%netscape.com
ff9db70a07 Removing release on a service as this would be taken care by the
NS_WITH_SERVICE() macro. r=danm


git-svn-id: svn://10.0.0.236/trunk@52411 18797224-902f-48f8-a5cc-f745e15eee43
1999-11-01 21:16:24 +00:00
Jerry.Kirk%Nexwarecorp.com
2bc6161677 Remove call to nsIThread::SetMainThread() and clean up things a bit.
r=kedl


git-svn-id: svn://10.0.0.236/trunk@52410 18797224-902f-48f8-a5cc-f745e15eee43
1999-11-01 20:52:52 +00:00
warren%netscape.com
933e7aa1a8 Minor cleanup
git-svn-id: svn://10.0.0.236/trunk@52409 18797224-902f-48f8-a5cc-f745e15eee43
1999-11-01 20:50:04 +00:00
warren%netscape.com
793d674760 Eliminating netwerk/util
git-svn-id: svn://10.0.0.236/trunk@52408 18797224-902f-48f8-a5cc-f745e15eee43
1999-11-01 20:48:12 +00:00
valeski%netscape.com
42d0478ba8 removing early xpcom proxy release change from earlier in the weekend.
git-svn-id: svn://10.0.0.236/trunk@52407 18797224-902f-48f8-a5cc-f745e15eee43
1999-11-01 20:37:13 +00:00
varada%netscape.com
bd12ec528f fix for bug #6568 - showing summary in the first page
git-svn-id: svn://10.0.0.236/trunk@52406 18797224-902f-48f8-a5cc-f745e15eee43
1999-11-01 20:13:16 +00:00
idk%eng.sun.com
307fe1df58 fix for 17454
changed strncmp to PL_strncasecmp


git-svn-id: svn://10.0.0.236/trunk@52405 18797224-902f-48f8-a5cc-f745e15eee43
1999-11-01 20:04:57 +00:00
tbogard%aol.net
e885439545 Changed some m_* to m*.
git-svn-id: svn://10.0.0.236/trunk@52404 18797224-902f-48f8-a5cc-f745e15eee43
1999-11-01 19:57:15 +00:00
mscott%netscape.com
2a86ddb6f8 (not part of the seamonkey build)
top level Makefile for uriloader


git-svn-id: svn://10.0.0.236/trunk@52403 18797224-902f-48f8-a5cc-f745e15eee43
1999-11-01 19:56:25 +00:00
mscott%netscape.com
cc0ac6a407 not part of the seamonkey build
add makefile for the uriloader\build directory.


git-svn-id: svn://10.0.0.236/trunk@52402 18797224-902f-48f8-a5cc-f745e15eee43
1999-11-01 19:52:49 +00:00
mscott%netscape.com
4f15b3e7bd not part of the seamonkey build
add CID header file and uri loader module class.


git-svn-id: svn://10.0.0.236/trunk@52401 18797224-902f-48f8-a5cc-f745e15eee43
1999-11-01 19:52:25 +00:00
mscott%netscape.com
9cbec3ba42 not part of the seamonkey build.
add top level makefile.win for uriloader.


git-svn-id: svn://10.0.0.236/trunk@52400 18797224-902f-48f8-a5cc-f745e15eee43
1999-11-01 19:51:45 +00:00
mscott%netscape.com
604569330e not part of the seamonkey build
remove class id and progid from the interface


git-svn-id: svn://10.0.0.236/trunk@52399 18797224-902f-48f8-a5cc-f745e15eee43
1999-11-01 19:51:05 +00:00
mscott%netscape.com
82bbc3b0eb (not part of the seamonkey build!)
export nsURIDispatcher.h


git-svn-id: svn://10.0.0.236/trunk@52398 18797224-902f-48f8-a5cc-f745e15eee43
1999-11-01 19:49:09 +00:00
idk%eng.sun.com
b338802f73 fix for 17449
added checkings for NULL


git-svn-id: svn://10.0.0.236/trunk@52397 18797224-902f-48f8-a5cc-f745e15eee43
1999-11-01 19:39:26 +00:00
varada%netscape.com
13b7afe705 fixes to bug 5434
git-svn-id: svn://10.0.0.236/trunk@52396 18797224-902f-48f8-a5cc-f745e15eee43
1999-11-01 19:14:29 +00:00
varada%netscape.com
56c344a8d0 cleanup code for customizationlist
git-svn-id: svn://10.0.0.236/trunk@52395 18797224-902f-48f8-a5cc-f745e15eee43
1999-11-01 18:10:26 +00:00
varada%netscape.com
fb8cb373a0 cleanup code for checklist
git-svn-id: svn://10.0.0.236/trunk@52394 18797224-902f-48f8-a5cc-f745e15eee43
1999-11-01 18:09:31 +00:00
briano%netscape.com
e2c9ed766a Automated update
git-svn-id: svn://10.0.0.236/trunk@52393 18797224-902f-48f8-a5cc-f745e15eee43
1999-11-01 15:45:17 +00:00
rods%netscape.com
23778b8c16 Check to see if the option being added has the "selected" property, if it
does then the list needs to be reinitialized.
r=dcone, bug #17519


git-svn-id: svn://10.0.0.236/trunk@52392 18797224-902f-48f8-a5cc-f745e15eee43
1999-11-01 15:41:17 +00:00
kipp%netscape.com
bac454b0b5 Added address information to the dump content diagnostic code
git-svn-id: svn://10.0.0.236/trunk@52391 18797224-902f-48f8-a5cc-f745e15eee43
1999-11-01 15:38:05 +00:00
kipp%netscape.com
c6c74d8fe2 r=ftang (someday); fixed bug 17130 - the problem was that nbsp's were being mapped into spaces by the text-transformer which is normally good, but for the purposes of line-breaking look-ahead was bad. I added code to revert the post-transformed spaces into nbsp's before using the line-breaker
git-svn-id: svn://10.0.0.236/trunk@52390 18797224-902f-48f8-a5cc-f745e15eee43
1999-11-01 15:36:02 +00:00
kipp%netscape.com
283a28a5d4 r=ftang (someday); fixed 17559 regression - there were a few cases where characters > 127 were leaking out without setting the mHasMultibyte flag that were triggering painting bugs on macs...
git-svn-id: svn://10.0.0.236/trunk@52389 18797224-902f-48f8-a5cc-f745e15eee43
1999-11-01 15:32:37 +00:00
cls%seawood.org
9981b6e5e7 Tested various build options, marked some broken, unmarked others that have been fixed. Removed obsolete options.
git-svn-id: svn://10.0.0.236/trunk@52388 18797224-902f-48f8-a5cc-f745e15eee43
1999-11-01 15:32:02 +00:00
kipp%netscape.com
2cabf1bf40 Disabled debug noise I accidently checked in (whoops!)
git-svn-id: svn://10.0.0.236/trunk@52387 18797224-902f-48f8-a5cc-f745e15eee43
1999-11-01 15:31:04 +00:00
cls%seawood.org
aabaf48158 Remove the extra -D_XXX_SOURCE_ flags for Linux builds.
git-svn-id: svn://10.0.0.236/trunk@52386 18797224-902f-48f8-a5cc-f745e15eee43
1999-11-01 15:29:31 +00:00
kipp%netscape.com
63ae90acca r=troy; reworked the way that blocks inside of inline elements are handled. It's all in the frame construction code now (bugs 15999, 16737)
git-svn-id: svn://10.0.0.236/trunk@52385 18797224-902f-48f8-a5cc-f745e15eee43
1999-11-01 15:24:57 +00:00
kipp%netscape.com
333bf3d48a Added address information to the dump content diagnostic code
git-svn-id: svn://10.0.0.236/trunk@52384 18797224-902f-48f8-a5cc-f745e15eee43
1999-11-01 15:23:06 +00:00
kipp%netscape.com
e5672a7cbf Added another frame property
git-svn-id: svn://10.0.0.236/trunk@52383 18797224-902f-48f8-a5cc-f745e15eee43
1999-11-01 15:22:25 +00:00
jfrancis%netscape.com
8ad4c60be3 fix for bugs: 16724, 16855; r=sfraser
git-svn-id: svn://10.0.0.236/trunk@52382 18797224-902f-48f8-a5cc-f745e15eee43
1999-11-01 15:15:56 +00:00
jfrancis%netscape.com
53c8075ee8 fixes for bugs: 16361,12253,15696,15734; r=sfraser
git-svn-id: svn://10.0.0.236/trunk@52381 18797224-902f-48f8-a5cc-f745e15eee43
1999-11-01 15:15:35 +00:00
dp%netscape.com
a1cbbe03aa Removing double check for failure. Checking for nsresult is sufficient.
git-svn-id: svn://10.0.0.236/trunk@52380 18797224-902f-48f8-a5cc-f745e15eee43
1999-11-01 08:54:06 +00:00
tbogard%aol.net
188cbf9d0b Added some checks to verify calling of the nsIDocShellFile and nsIDocShellEdit functions.
git-svn-id: svn://10.0.0.236/trunk@52379 18797224-902f-48f8-a5cc-f745e15eee43
1999-11-01 07:53:24 +00:00
tbogard%aol.net
1b8869ef46 Changed NS_ENSURE to be NS_ENSURE_TRUE.
git-svn-id: svn://10.0.0.236/trunk@52378 18797224-902f-48f8-a5cc-f745e15eee43
1999-11-01 07:45:38 +00:00
tbogard%aol.net
e1325fa173 Changed NS_ENSURE and NS_ENSURE_NOT occurences to be NS_ENSURE_TRUE and NS_ENSURE_FALSE respectively.
git-svn-id: svn://10.0.0.236/trunk@52377 18797224-902f-48f8-a5cc-f745e15eee43
1999-11-01 07:40:19 +00:00
tbogard%aol.net
e3a1567dcc Changed NS_ENSURE to be NS_ENSURE_TRUE. Also changed NS_ENSURE_NOT to be NS_ENSURE_FALSE. Left NS_ENSURE and NS_ENSURE_NOT, but they will soon be going away.
git-svn-id: svn://10.0.0.236/trunk@52376 18797224-902f-48f8-a5cc-f745e15eee43
1999-11-01 06:59:16 +00:00
rpotts%netscape.com
6a0e6b0b2d bug #16418 (r=warren,gagan). When redirecting a URL only copy the Ref to the new URL (not the Param and Query).
git-svn-id: svn://10.0.0.236/trunk@52375 18797224-902f-48f8-a5cc-f745e15eee43
1999-11-01 06:00:55 +00:00
dougt%netscape.com
908f338b00 Adding a set accessor to the permissions functions. Needed by the xpinstall
folks.


git-svn-id: svn://10.0.0.236/trunk@52374 18797224-902f-48f8-a5cc-f745e15eee43
1999-11-01 04:44:56 +00:00
tbogard%aol.net
fe0b504eac Added comment around frame stuff to explain lack of ref-counting.
git-svn-id: svn://10.0.0.236/trunk@52373 18797224-902f-48f8-a5cc-f745e15eee43
1999-11-01 04:03:03 +00:00
tbogard%aol.net
2766610a72 Implemented GetZoom and SetZoom. Removed some left over comment code.
git-svn-id: svn://10.0.0.236/trunk@52372 18797224-902f-48f8-a5cc-f745e15eee43
1999-11-01 04:02:24 +00:00
troy%netscape.com
5143eb0b1d Added nsIFrameDebug interface
git-svn-id: svn://10.0.0.236/trunk@52371 18797224-902f-48f8-a5cc-f745e15eee43
1999-11-01 03:34:43 +00:00
bienvenu%netscape.com
0828780018 fix updating of folders after imap/moves r=mscott bug 12491
git-svn-id: svn://10.0.0.236/trunk@52370 18797224-902f-48f8-a5cc-f745e15eee43
1999-11-01 01:10:08 +00:00
bienvenu%netscape.com
b3ee9d6099 add support for pending counts for imap folders r=mscott
git-svn-id: svn://10.0.0.236/trunk@52369 18797224-902f-48f8-a5cc-f745e15eee43
1999-11-01 01:06:29 +00:00
mscott%netscape.com
059b0b18ff remove shut down listener stuff.
r=bienvenu


git-svn-id: svn://10.0.0.236/trunk@52368 18797224-902f-48f8-a5cc-f745e15eee43
1999-11-01 00:57:49 +00:00
mscott%netscape.com
c3e35b09e6 remove shutdown listener stuff.
r=bienvenu


git-svn-id: svn://10.0.0.236/trunk@52367 18797224-902f-48f8-a5cc-f745e15eee43
1999-11-01 00:56:19 +00:00
mscott%netscape.com
3c8f842dd1 remove shutdown listener code.
r=bienvenu


git-svn-id: svn://10.0.0.236/trunk@52366 18797224-902f-48f8-a5cc-f745e15eee43
1999-11-01 00:55:06 +00:00
tonyr%fbdesigns.com
f0bafa3901 Added Outlook mail and address book import functionality
git-svn-id: svn://10.0.0.236/trunk@52365 18797224-902f-48f8-a5cc-f745e15eee43
1999-11-01 00:46:18 +00:00
bienvenu%netscape.com
90413c1803 add method to find out if folder is in open window r=putterman
git-svn-id: svn://10.0.0.236/trunk@52364 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-31 22:21:55 +00:00
tbogard%aol.net
86bf83a5cb Changed NS_IMETHOD to NS_IMETHODIMP on implemented function.
git-svn-id: svn://10.0.0.236/trunk@52363 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-31 07:38:44 +00:00
beard%netscape.com
46857947de made more robust with partial output.
git-svn-id: svn://10.0.0.236/trunk@52362 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-31 06:05:09 +00:00
dp%netscape.com
76860bfac3 Removing use of nsIShutdownListener r=sspitzer
git-svn-id: svn://10.0.0.236/trunk@52361 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-31 05:02:55 +00:00
troy%netscape.com
3300906c1f b=15742. Changed Reflow() to invalidate the child's bounds if we're forced
to do a second reflow because we didn't correctly predict whether the vertical
scrollbar was needed. Because the second reflow changes the display width we
need to repaint


git-svn-id: svn://10.0.0.236/trunk@52360 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-31 04:04:32 +00:00
troy%netscape.com
c53de3fb2f b=17507. Changed Reflow() to use "available height" instead of "computed
height" when reflowing child frames. What was happening was that the child
table frame didn't fit and was trying to split. That should only happen when
we're paginated


git-svn-id: svn://10.0.0.236/trunk@52359 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-31 03:39:24 +00:00
troy%netscape.com
248afe72e1 b=17573. Changed mRowIndex to be signed integer (was unsigned integer) but
field. This allows it be negative, which some of the table code is depending
on


git-svn-id: svn://10.0.0.236/trunk@52358 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-31 03:15:52 +00:00
brendan%mozilla.org
9c83cbc655 Gross workaround for VC5 bug.
git-svn-id: svn://10.0.0.236/trunk@52357 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-31 03:04:02 +00:00
jband%netscape.com
9a6507c902 fix typo that was causing bustage on some compilers
git-svn-id: svn://10.0.0.236/trunk@52356 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-31 03:02:43 +00:00
dmose%mozilla.org
5c49b2dcfa removing qtfe files from the tip, since qtfe is only ever destined to build on the MozillaClassic branch; approved=arnt@troll.no
git-svn-id: svn://10.0.0.236/trunk@52355 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-31 02:29:26 +00:00
beard%netscape.com
fdd0b24390 changed the CID for "component://netscape/gfx/region" to use new NS_SCRIPTABLEREGION_CID. r=pavlov
git-svn-id: svn://10.0.0.236/trunk@52354 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-31 02:28:32 +00:00
beard%netscape.com
f871d649af switched to NS_IMPL_ISUPPORTS1, no longer supports QI to nsIRegion. r=pavlov
git-svn-id: svn://10.0.0.236/trunk@52353 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-31 02:26:10 +00:00
beard%netscape.com
8070950a1a removed scriptable region hackery, switched to NS_IMPLE_ISUPPORTS1. r=pavlov
git-svn-id: svn://10.0.0.236/trunk@52352 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-31 02:26:06 +00:00
beard%netscape.com
2f5831d91f cleaned up factory to use nsCOMPtrs, modern NS_IMPL* macros, support for creating scriptable regions. r=pavlov
git-svn-id: svn://10.0.0.236/trunk@52351 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-31 02:26:03 +00:00
beard%netscape.com
48e85583a8 added NS_SCRIPTABLE_REGION_CID. r=pavlov
git-svn-id: svn://10.0.0.236/trunk@52350 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-31 02:25:59 +00:00
tbogard%aol.net
74d906dbdf Fixed changes to use the GetPresShell rather than using the now removed member variable.
git-svn-id: svn://10.0.0.236/trunk@52348 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-31 02:05:21 +00:00
brendan%mozilla.org
f980be0221 (13163, r=alecf, scc, waterson, others; names available on request)
- Fix most of bug 13163 (see TODO for rest).  This entails adding a version-string argument to nsIScriptContext::EvaluateString and passing it around lots of places in content sinks. 

- Fix leaks and confusion about mSecurityManager and mNameSpaceManager in nsJSEnvironment.cpp.  These still need to move from nsJSContext to nsGlobalWindow or thereabouts, jband and vidur are looking at that. 

- Added comments and expanded tabs in nsJSEnvironment.cpp, esp. to EvaluateString.  Also changed various nsresult vars to be named rv.  Also restored brace/style conformity to nsJSProtocolHandler.cpp. 

- Factored CompileFunction from AddScriptEventListener to pave the way for brutal sharing of compiled JS event handlers via JS_CloneFunctionObject. 

- Lots of nsCOMPtr uses added.  I'm using one for mNameSpaceManager.  Hold mSecurityManager as a service explicitly, on the other hand (awaiting scc's fix to allow comptrs for services), and release in nsJSContext's dtor (fixing a leak).  These two managers should be moved to the window object -- TODO item below. 

- Hold JSRuntimeService along with JSRuntime for live of nsJSEnvironment, fix for shaver. 

- Fix window.setTimeout etc. so the filename and line number of the timeout expr is propagated.  This meant factoring nsJSUtils.cpp code. 

- Fix all content sinks to use the same, and up-to-date JavaScript version parsing (whether for script type or for old language attribute); also fix SplitMimeType clones to strip whitespace. 

- With waterson, fix bug in brutal-sharing version of XUL content sink: script src= should not evaluate the inline content of its tag.


git-svn-id: svn://10.0.0.236/trunk@52347 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-31 00:43:30 +00:00
scc%netscape.com
65b7cd0c03 changed the mechanism underlying |do_QueryInterface| to decouple |nsCOMPtr| from services, |nsIWeakReference|, etc. This change fixes bug #17364, and paves the way for making |nsCOMPtr| cooperate with services. r=valeski (additional builds done by dmose and syd)
git-svn-id: svn://10.0.0.236/trunk@52346 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-31 00:35:48 +00:00
scc%netscape.com
3872148e22 removed incorrect use of private class name in favor of |do_QueryInterface|, part of the fix for bug #17364, r=valeski (additional builds done by dmose, and syd)
git-svn-id: svn://10.0.0.236/trunk@52345 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-31 00:32:15 +00:00
syd%netscape.com
dc0e84da8f Add xpcom.dll to link line so test will link with scc changes make about this time. r=scc
git-svn-id: svn://10.0.0.236/trunk@52344 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-31 00:22:53 +00:00
pavlov%netscape.com
e4422a7744 better fix for twips rounding problems patch_from=dbaron@fas.harvard.edu r=me
git-svn-id: svn://10.0.0.236/trunk@52343 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-31 00:09:52 +00:00
sgehani%netscape.com
1a10f1bfca Turning on Mac Install Wizard. [r=ssu]
git-svn-id: svn://10.0.0.236/trunk@52342 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-30 23:04:41 +00:00
sgehani%netscape.com
42a5d3afe8 *** NOT PART OF BUILD ***
Added "About..." box.


git-svn-id: svn://10.0.0.236/trunk@52341 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-30 22:29:26 +00:00
sgehani%netscape.com
2eefd82de8 Changes to accomodate ASEncoder for bug 17096 (new interfaces: GUI and AppleScript to accept folders to decode and encode). [r=dveditz]
git-svn-id: svn://10.0.0.236/trunk@52340 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-30 22:24:09 +00:00
sgehani%netscape.com
c148d9293b First Checked In.
git-svn-id: svn://10.0.0.236/trunk@52339 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-30 22:21:38 +00:00
sgehani%netscape.com
1d98e513a5 *** NOT PART OF BUILD ***
Fixes for bug 17096. New interfaces (GUI and AppleScript) that accept folders to encode and decode.


git-svn-id: svn://10.0.0.236/trunk@52338 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-30 22:21:28 +00:00
sgehani%netscape.com
9318031900 Fixing static targets to be usable by MIW once again: removed new nsJARInputStream from the static targets. For real this time...
git-svn-id: svn://10.0.0.236/trunk@52337 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-30 22:18:31 +00:00
sgehani%netscape.com
66089af9ca Backed out change temporarily.
git-svn-id: svn://10.0.0.236/trunk@52336 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-30 22:03:46 +00:00
sgehani%netscape.com
43165f999b Fixing static targets to be usable by MIW once again: removed new nsJARInputStream from the statis targets.
git-svn-id: svn://10.0.0.236/trunk@52335 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-30 21:56:51 +00:00
beard%netscape.com
95ab15987f MLK: fix device context leak, bug=15380, r=scc
git-svn-id: svn://10.0.0.236/trunk@52334 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-30 20:18:31 +00:00
beard%netscape.com
7eff69da6d MLK: fixed nsICSSDeclaration leak, bug=15380, r=kipp
git-svn-id: svn://10.0.0.236/trunk@52333 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-30 20:17:40 +00:00
dp%netscape.com
ab8b41ac6e Fixing viewer starup assert on SetMainThread() happening twice.
git-svn-id: svn://10.0.0.236/trunk@52332 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-30 17:17:12 +00:00
troy%netscape.com
bf93831e8b Removed call to SetMainThread() because it was triggering an assert. Turns
out NS_InitXPCOM() does it so we don't need to do it twice


git-svn-id: svn://10.0.0.236/trunk@52331 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-30 16:44:04 +00:00
buster%netscape.com
33e56d70f4 huge performance work for text controls
we now display the content of a single line text control using a child pseudo frame
until the text control first gets focus.  at that time, a webshell and editor are created on the fly.
fixed bug bug 14727
r=rods


git-svn-id: svn://10.0.0.236/trunk@52330 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-30 16:33:00 +00:00
buster%netscape.com
12d91fc204 added pseudo style for single line text controls
bug 14727
r=rods


git-svn-id: svn://10.0.0.236/trunk@52329 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-30 16:31:11 +00:00
buster%netscape.com
2da450442d added DOM notification up to frame system for text control value changes
part of  bug 14727
r=rods


git-svn-id: svn://10.0.0.236/trunk@52328 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-30 16:30:33 +00:00
buster%netscape.com
2669825bf4 added pseudo-style for single line text controls. bug 14727
git-svn-id: svn://10.0.0.236/trunk@52327 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-30 16:29:32 +00:00
troy%netscape.com
23e130e01b Added nsHTMLReflowState.h
git-svn-id: svn://10.0.0.236/trunk@52326 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-30 16:16:45 +00:00
alecf%netscape.com
78d06b8fcf make buttons class="push"
only a test, not part of product


git-svn-id: svn://10.0.0.236/trunk@52325 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-30 07:39:07 +00:00
alecf%netscape.com
225dbf24eb update debug menu to reflect new DOMViewer location
(debug only not part of product)


git-svn-id: svn://10.0.0.236/trunk@52324 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-30 07:38:12 +00:00
alecf%netscape.com
20afa40ad0 fix a warning
r=pavlov


git-svn-id: svn://10.0.0.236/trunk@52323 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-30 07:32:23 +00:00
alecf%netscape.com
4eaeb0af68 move DOM viewer into chrome so that DOM security doesn't f us up again
only a test, not part of the product


git-svn-id: svn://10.0.0.236/trunk@52322 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-30 07:23:07 +00:00
alecf%netscape.com
4c4a69c07f more tweaks for boehm to catch up with the nsILeakDetector work
git-svn-id: svn://10.0.0.236/trunk@52321 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-30 07:06:26 +00:00
dp%netscape.com
0b96f92229 Removing shutdown listener. Releasing gCaseConv on XPCOM Shutdown r=kipp
git-svn-id: svn://10.0.0.236/trunk@52320 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-30 06:45:45 +00:00
beard%netscape.com
015fa0cad4 fixed up -blame option to use line marking.
git-svn-id: svn://10.0.0.236/trunk@52319 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-30 05:59:02 +00:00
alecf%netscape.com
1cd1d3967c more adding of class="dialog" to dialogs
git-svn-id: svn://10.0.0.236/trunk@52318 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-30 05:55:15 +00:00
beard%netscape.com
2300c27a4f fix nsIInterfaceInfoManager leak. bug=15380, r=jband
git-svn-id: svn://10.0.0.236/trunk@52317 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-30 05:48:07 +00:00
alecf%netscape.com
2dd3c4eacc add class="dialog" to mailnews prefs panes
this and last checkin r=rgoodger@ihug.co.nz


git-svn-id: svn://10.0.0.236/trunk@52316 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-30 05:46:04 +00:00
alecf%netscape.com
75c3ca9e17 add class="dialog" to all pref window dialogs
enable languages pane and fix XUL
disable smart_browsing pane (because it was crashing)


git-svn-id: svn://10.0.0.236/trunk@52315 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-30 05:44:23 +00:00
beard%netscape.com
ceb9cf186d changed gInstanceClassName from char[256] to const char* to save space. r=sfraser
git-svn-id: svn://10.0.0.236/trunk@52314 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-30 04:02:54 +00:00
beard%netscape.com
9a3ae339ee changed gInstanceClassName from char[256] to const char* to save space. added NS_IF_RELEASE(mFontMetrics) to destructor to fix memory leak. bug=15380, r=sfraser
git-svn-id: svn://10.0.0.236/trunk@52313 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-30 04:02:50 +00:00
danm%netscape.com
cd569b141a insert cast necessary on one of the "other" platforms
git-svn-id: svn://10.0.0.236/trunk@52312 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-30 03:13:55 +00:00
troy%netscape.com
6210745a33 Updated to not export nsIFrameReflow.h
git-svn-id: svn://10.0.0.236/trunk@52311 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-30 02:53:36 +00:00
troy%netscape.com
19db355c46 Changed to not export nsIFrameReflow.h
git-svn-id: svn://10.0.0.236/trunk@52310 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-30 02:52:43 +00:00
troy%netscape.com
88c4d96e2c Folded reflow functions into nsIFrame and eliminated nsIFrameReflow and
nsIHTMLReflow. This saves 4 bytes per frame and cleans things up


git-svn-id: svn://10.0.0.236/trunk@52309 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-30 02:52:11 +00:00
tbogard%aol.net
f5d99c2cec Removed mPresShell and mPresContext from the base class. Added internal getter function GetPresShell to retrieve presShell objects. Added a pointer to mContentViewer. Changed LoadURI* to take a presContext. Changed SetDocument to take a presContext. Changed the attribute presContext to be read only.
git-svn-id: svn://10.0.0.236/trunk@52308 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-30 02:30:13 +00:00
akhil.arora%sun.com
4e94fff191 r=akhil.arora@sun.com, fix by Denis Sharypov <sdv@sparc.spb.su>
13271: the wrong method was being called in ProcessingInstructionImpl.cpp
13338: handle null input arguments gracefully without crashing


git-svn-id: svn://10.0.0.236/trunk@52307 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-30 02:14:28 +00:00
beard%netscape.com
85fd5baad4 moved call to nsIThread::SetMainThread() to NS_InitXPCOM. r=warren
git-svn-id: svn://10.0.0.236/trunk@52306 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-30 01:53:03 +00:00
beard%netscape.com
7cf4142599 added call to nsIThread::SetMainThread(), to ensure users of XPCOM get a main thread mapped. r=warren
git-svn-id: svn://10.0.0.236/trunk@52305 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-30 01:52:55 +00:00
nisheeth%netscape.com
2d10931ddb Fix for bug 17540. Uncommented the call to nsFrameManager::CantRenderReplacedElement().
git-svn-id: svn://10.0.0.236/trunk@52303 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-30 01:31:49 +00:00
beard%netscape.com
15bc1a40b1 Removed statically constructed nsAutoString LinkCommand, moved inside nsWebShell::LoadURL(). This prevents calling printf before main runs on MacOS, which messes up the console window. r=sfraser
git-svn-id: svn://10.0.0.236/trunk@52302 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-30 01:23:01 +00:00
waterson%netscape.com
89a8c47740 '#if 0' DOM crawling code in toolbar frame to avoid over-eager generation of content model from RDF. GetElementsByTagName() is evil! r=pinkerton,hyatt
git-svn-id: svn://10.0.0.236/trunk@52301 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-30 01:21:44 +00:00
beard%netscape.com
20f6524e69 Fix proxied objects leak. r=sfraser, bug=15380
git-svn-id: svn://10.0.0.236/trunk@52300 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-30 01:17:24 +00:00
tbogard%aol.net
7b140eafb2 Removed zoom now that it has been moved out of the nsIGenericWindow interface.
git-svn-id: svn://10.0.0.236/trunk@52299 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-30 00:53:41 +00:00
tbogard%aol.net
069e0c0ab7 Moved zoom attribute from nsIGenericWindow to nsIDocShell. Updated zoom documentation.
git-svn-id: svn://10.0.0.236/trunk@52298 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-30 00:52:57 +00:00
hangas%netscape.com
bd127b8712 Fixed OK/Cancel button appearance by using globalOverlay.xul r=mscott
git-svn-id: svn://10.0.0.236/trunk@52297 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-30 00:14:52 +00:00
hangas%netscape.com
273c3a1673 Image transparency problem fixed by Andrew Niese.
git-svn-id: svn://10.0.0.236/trunk@52296 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-30 00:07:21 +00:00
tbogard%aol.net
945c6841ea Removed mDocument in favor of the preferred way of getting the document from the content viewer.
git-svn-id: svn://10.0.0.236/trunk@52295 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-30 00:02:38 +00:00
tbogard%aol.net
bc6a15f81a Changed a call to QueryInterface to use CallQueryInterface which helps with type checking.
git-svn-id: svn://10.0.0.236/trunk@52294 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-29 23:59:20 +00:00
valeski%netscape.com
0e08363c68 warning fixes, again :(
git-svn-id: svn://10.0.0.236/trunk@52293 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-29 23:35:06 +00:00
evaughan%netscape.com
1f41bc5a41 Fixed bug in example. -r hyatt
git-svn-id: svn://10.0.0.236/trunk@52292 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-29 23:27:26 +00:00
Jerry.Kirk%Nexwarecorp.com
95ed3035d3 Fixing FillPolygon code in nsRenderingPh.cpp
Adding debug code in nsDrawingSurfacePh  to find the crash.
r=kedl


git-svn-id: svn://10.0.0.236/trunk@52291 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-29 23:18:16 +00:00
Jerry.Kirk%Nexwarecorp.com
7d754fa3e8 Changing mClipSibling to False in preparation to popup change
Pavlov is working on/thinking about... I'm sure he will see it my
way eventually...
r=kedl


git-svn-id: svn://10.0.0.236/trunk@52290 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-29 23:16:57 +00:00
mjudge%netscape.com
c750a7c32d reviewed by hyatt bug of someone elses but in my code. dont know number. simple check for null
git-svn-id: svn://10.0.0.236/trunk@52289 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-29 23:12:44 +00:00
mjudge%netscape.com
2dee462ae3 i cannot find the bug# it is for selecting inside forms. we need to turn off selection in certain frames based on the style. this sets up it to work once we figure out the style rule to set.
git-svn-id: svn://10.0.0.236/trunk@52288 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-29 23:07:07 +00:00
colin%theblakes.com
a3feb440b1 Only define MDCPUCFG if HOST_NSPR_MDCPUCFG is defined. r=cls
git-svn-id: svn://10.0.0.236/trunk@52287 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-29 23:03:15 +00:00
rogerl%netscape.com
b817d51d4b I changed the exepcted value for object.toString() calls on the empty
object - There's no clear documentation of the result, but the source
code unambiguously calls 'js_obj_toSource', which inserts the extra '()'
under the version1_2 flag, so I believe this is the correct result.


git-svn-id: svn://10.0.0.236/trunk@52286 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-29 23:02:17 +00:00
valeski%netscape.com
2eefe93ceb 17521, r = mscott. FTP authentication dialogs we're looping if canceled. I also changed a bunch of string getter routines to take XPIDLCStrings. there was speculation during the reveiw that there might be some casting problems on other platforms. if this is the case either case the XPIDLCString to (const char *) or call me and I'll do it.
git-svn-id: svn://10.0.0.236/trunk@52285 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-29 23:00:52 +00:00
edburns%acm.org
31ca3266f1 r=marklin
#17358
approver=edburns
author=edburns

This fix enables webclient to work with the latest mozilla.  For now.


git-svn-id: svn://10.0.0.236/trunk@52284 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-29 22:51:06 +00:00
rogerl%netscape.com
b16f4bc0c7 Changed to account for latest ECMA spec on back-references vs. octal
git-svn-id: svn://10.0.0.236/trunk@52283 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-29 22:50:43 +00:00
rogerl%netscape.com
fa193f41c1 New ECMA spec for no argument calls to max & min - should return +/- Inf
git-svn-id: svn://10.0.0.236/trunk@52282 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-29 22:48:33 +00:00
brendan%mozilla.org
ba803ea225 Add JS_VersionToString and JS_StringToVersion, updated Impl. Version (13163, r=shaver@mozilla.org).
git-svn-id: svn://10.0.0.236/trunk@52281 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-29 22:44:35 +00:00
akkana%netscape.com
d167106925 Remove one GDK_question. Trivial one-line fix
git-svn-id: svn://10.0.0.236/trunk@52280 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-29 22:37:18 +00:00
cmanske%netscape.com
1095535469 Fixed Composer UI to adjust to latest global CSS changes. Mostly needed to add appropriate class to titled buttons. Change editorshell to stop throbber animation even if editor fails to initialize. r=sfraser
git-svn-id: svn://10.0.0.236/trunk@52279 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-29 22:33:34 +00:00
jefft%netscape.com
01d415eebe fixed bug 12131 -- message counts not updated after a move/copy; call UpdateFolder() after move/copy is done; r=bienvenu
git-svn-id: svn://10.0.0.236/trunk@52278 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-29 22:28:55 +00:00
rogerl%netscape.com
8760c5b5e8 r=norris
Change for ECMA spec. - String.charCodeAt, etc call ToInteger on index.
Ditto - String.match(re) was constructing /undefined/ instead of empty
regexp.


git-svn-id: svn://10.0.0.236/trunk@52277 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-29 22:27:33 +00:00
rogerl%netscape.com
853e43bd31 r=norris
Opinion was that Script.exec() should execute in global scope, not caller.


git-svn-id: svn://10.0.0.236/trunk@52276 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-29 22:25:25 +00:00
rogerl%netscape.com
dcacacf7d7 r=norris
Fixed accidental eating of exceptions (match loop didn't terminate on
failure). New ECMA definition (again) of back reference format.


git-svn-id: svn://10.0.0.236/trunk@52275 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-29 22:23:36 +00:00
rogerl%netscape.com
e8f1c05ca6 r=norris
New ECMA behaviour for max & min.


git-svn-id: svn://10.0.0.236/trunk@52274 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-29 22:21:54 +00:00
rogerl%netscape.com
2ed88ba80b r=norris
Upgrading to new ECMA - conversionError subsumed by TypeError.


git-svn-id: svn://10.0.0.236/trunk@52273 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-29 22:20:23 +00:00
rogerl%netscape.com
69933e9f74 r=norris, Bug#16984
New error message for function.apply arguments.


git-svn-id: svn://10.0.0.236/trunk@52272 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-29 22:19:04 +00:00
rpotts%netscape.com
021f44ae53 Fixed crash during error condition in END_WRITE... (r=warren)
git-svn-id: svn://10.0.0.236/trunk@52271 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-29 22:14:52 +00:00
evaughan%netscape.com
0fa061c765 Made tabs us visibility instead of shrinking their children to 0,0.
Made it possible to change the look for the selected tab.


git-svn-id: svn://10.0.0.236/trunk@52270 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-29 22:13:57 +00:00
waterson%netscape.com
0d6ebd6b12 Pull script object and event listener list out of slots and into delegate to avoid faulting a heavyweight element. Fix EnsureSlots() to _not_ do a bunch of extra work that is already being done when we create an element from its prototype. Use nsCOMPtr's in nsXULAttributes to avoid leak of nsIStyleRule. r=hyatt
git-svn-id: svn://10.0.0.236/trunk@52269 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-29 22:09:20 +00:00
varada%netscape.com
b1f24224b8 fix for bug #14012 viewfile function to open the files and open url to open html
git-svn-id: svn://10.0.0.236/trunk@52268 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-29 21:57:00 +00:00
rchen%netscape.com
604931010d Add Localization Notes
git-svn-id: svn://10.0.0.236/trunk@52267 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-29 21:53:20 +00:00
mscott%netscape.com
29d7ee003b first created.
git-svn-id: svn://10.0.0.236/trunk@52266 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-29 21:49:19 +00:00
mscott%netscape.com
6ad3ce8ee3 Moving URI dispatching code into its new home in mozilla\uriloader. I'll be removing
the existing files that I put in netwerk very soon.


git-svn-id: svn://10.0.0.236/trunk@52265 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-29 21:46:18 +00:00
rchen%netscape.com
6be0ffb4ca Add localization notes
git-svn-id: svn://10.0.0.236/trunk@52264 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-29 21:40:07 +00:00
rchen%netscape.com
89f810c614 Add Localization Notes
git-svn-id: svn://10.0.0.236/trunk@52263 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-29 21:37:43 +00:00
bienvenu%netscape.com
fa7e1e0f1e fix body filters, r=sspitzer 17058
git-svn-id: svn://10.0.0.236/trunk@52262 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-29 21:33:44 +00:00
rchen%netscape.com
beb892e3f0 Add Localization notes
git-svn-id: svn://10.0.0.236/trunk@52261 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-29 21:27:41 +00:00
rogerl%netscape.com
338c55ea1d New, spawned from AIX4.2.mk.
git-svn-id: svn://10.0.0.236/trunk@52260 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-29 21:14:31 +00:00
rchen%netscape.com
394244ab39 Add Localization notes
git-svn-id: svn://10.0.0.236/trunk@52259 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-29 21:12:26 +00:00
alecf%netscape.com
ea62024583 fix a broken class= r=sspitzer
git-svn-id: svn://10.0.0.236/trunk@52258 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-29 21:11:06 +00:00
alecf%netscape.com
ee5415192d add class="dialog push" to the profile wizard UI r=sspitzer
git-svn-id: svn://10.0.0.236/trunk@52257 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-29 21:10:53 +00:00
alecf%netscape.com
928787debd add class="dialog push" to all pref windows r=sspitzer
git-svn-id: svn://10.0.0.236/trunk@52256 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-29 21:01:41 +00:00
rchen%netscape.com
e6e52fc833 Add localization notes
git-svn-id: svn://10.0.0.236/trunk@52255 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-29 20:58:42 +00:00
rchen%netscape.com
280221ed46 Add Localization notes
git-svn-id: svn://10.0.0.236/trunk@52254 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-29 20:52:42 +00:00
alecf%netscape.com
52ddc97b98 fix titledbutton class to "dialog push"
r=shaver


git-svn-id: svn://10.0.0.236/trunk@52253 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-29 20:51:41 +00:00
valeski%netscape.com
7559ac64c5 15590 - build warnings prompted some variable name changes. Also replaced nsVoidArray usage w/ nsCStringArrays. Added some null checks. converted some raw ptrs to com ptrs.
16968 - bugzilla wasn't progress through bug lists via "next" "prev" links. we now set cookie headers from within x-multi-mixed-replace data.


git-svn-id: svn://10.0.0.236/trunk@52252 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-29 20:50:06 +00:00
karnaze%netscape.com
7868fc24c7 new regression test
git-svn-id: svn://10.0.0.236/trunk@52251 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-29 20:47:33 +00:00
valeski%netscape.com
85c426971e 15590, r=kipp. added a nsCStringArray class so the cool string array functionality could be used for CStrings too. this checkin is *part* of a fix to the bug
git-svn-id: svn://10.0.0.236/trunk@52250 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-29 20:47:17 +00:00
putterman%netscape.com
9c5e4137a1 Fix for 17556. Reviewed by alecf. Newsgroups show abbreviated name in folder pane.
git-svn-id: svn://10.0.0.236/trunk@52249 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-29 20:46:15 +00:00
cata%netscape.com
324e2f56a7 Fix for bug #17018, r=cata, checkin for momoi.
git-svn-id: svn://10.0.0.236/trunk@52248 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-29 20:41:21 +00:00
despotdaemon%netscape.com
e9ccfad854 Pseudo-automatic update of changes made by leaf@mozilla.org.
git-svn-id: svn://10.0.0.236/trunk@52247 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-29 20:41:01 +00:00
cata%netscape.com
eb0df2c879 Fix for bug #16186 build warnings; eliminating unused var.
git-svn-id: svn://10.0.0.236/trunk@52246 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-29 20:32:00 +00:00
cata%netscape.com
b855e5dd72 Fix for bug #15706; r=nhotta
git-svn-id: svn://10.0.0.236/trunk@52245 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-29 20:29:40 +00:00
rchen%netscape.com
bca34cf5da Add Localization Notes
git-svn-id: svn://10.0.0.236/trunk@52244 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-29 20:28:18 +00:00
karnaze%netscape.com
b2c6378cf2 bug 17375 - better checks and casting before calling DidAppendRow
git-svn-id: svn://10.0.0.236/trunk@52243 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-29 20:25:13 +00:00
rchen%netscape.com
a74e27b3f5 Add localization notes
git-svn-id: svn://10.0.0.236/trunk@52242 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-29 20:24:48 +00:00
harishd%netscape.com
bb63ac5e3f Fix fof bug 15674 - Putting back char* buffer.
r=akkana


git-svn-id: svn://10.0.0.236/trunk@52241 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-29 19:59:09 +00:00
akkana%netscape.com
1645b0ed7a Only output the xif.xif debug file if DEBUG_XIF is defined. Requested by sfraser
git-svn-id: svn://10.0.0.236/trunk@52240 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-29 19:36:30 +00:00
akkana%netscape.com
e367bbd2be 17305: Add ? to the list of fakie-shifted keycodes. r=pavlov
git-svn-id: svn://10.0.0.236/trunk@52239 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-29 19:33:57 +00:00
morse%netscape.com
e3e9faf88f fix bug 14932, mozilla asserts if client-wallet is disabled, r=neeti
git-svn-id: svn://10.0.0.236/trunk@52238 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-29 19:31:30 +00:00
jefft%netscape.com
5b125a705f partial fix for bug 17034; decode encoded words prior setting to the composition fields; r=nhotta,rhp
git-svn-id: svn://10.0.0.236/trunk@52237 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-29 19:23:29 +00:00
slamm%netscape.com
3b0382f6c1 Use tb_find_build_record() instead of find_build_record().
git-svn-id: svn://10.0.0.236/trunk@52236 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-29 19:20:53 +00:00
slamm%netscape.com
3fd6cb1d50 Fix 17347. Initialize the 'View | Sidebar' menu to the correct state. r=mozbot.
git-svn-id: svn://10.0.0.236/trunk@52235 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-29 19:17:22 +00:00
slamm%netscape.com
45e93dc267 Get min heights correct so that the sidebar will collapse. r=evaughan.
git-svn-id: svn://10.0.0.236/trunk@52234 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-29 19:16:38 +00:00
slamm%netscape.com
8769efefd3 Add license.
git-svn-id: svn://10.0.0.236/trunk@52233 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-29 19:13:42 +00:00
vidur%netscape.com
a595e9b30a Fix for double frame creation for scripts that document.write content that causes sink context creation. Fix that allows the last children of a body to be flushed. R=harishd
git-svn-id: svn://10.0.0.236/trunk@52232 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-29 19:07:24 +00:00
slamm%netscape.com
0e1f052c66 Spit and polish. Take 2. Do not put 'undef' in 'my' list.
git-svn-id: svn://10.0.0.236/trunk@52231 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-29 19:01:14 +00:00
slamm%netscape.com
4c48633d37 Somethings not working. Backup
git-svn-id: svn://10.0.0.236/trunk@52230 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-29 18:54:32 +00:00
pnunn%netscape.com
66c14dd8b7 part of fix for bug#15817. r: akkana. strong suggestion by kipp. Do the right
thing in image container destructor.


git-svn-id: svn://10.0.0.236/trunk@52229 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-29 18:53:03 +00:00
slamm%netscape.com
731c45ad0c Clean up global names. Spit and polish. Fix '-w' warnings.
git-svn-id: svn://10.0.0.236/trunk@52228 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-29 18:52:04 +00:00
pnunn%netscape.com
f742f7e4fd fix for bug#17076. r: akkana. Puts data stream mime check before component
loading instead of after a component load failure.


git-svn-id: svn://10.0.0.236/trunk@52227 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-29 18:51:09 +00:00
ducarroz%netscape.com
e83ba4c213 Fix for bug 17493, We need to cleanup any GCI commands from the URI when generating a file name. R=rhp
git-svn-id: svn://10.0.0.236/trunk@52226 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-29 18:50:05 +00:00
warren%netscape.com
dfe868a09a Fixed round-off error computing bloat total.
git-svn-id: svn://10.0.0.236/trunk@52225 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-29 18:48:37 +00:00
varada%netscape.com
3e9b7b7fb2 fix for bug #17459 by adding another depend function onnext
git-svn-id: svn://10.0.0.236/trunk@52224 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-29 18:36:52 +00:00
varada%netscape.com
4f3ab7cb05 fix for bug #17459 as well as some clean up
git-svn-id: svn://10.0.0.236/trunk@52223 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-29 18:35:58 +00:00
sspitzer%netscape.com
db726a6afc fix for #17555. get all the default files, including panels.rdf
git-svn-id: svn://10.0.0.236/trunk@52222 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-29 18:29:07 +00:00
buster%netscape.com
3fe2b88255 more implementation
some nits to conform more to seamonkey coding conventions.


git-svn-id: svn://10.0.0.236/trunk@52221 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-29 18:25:57 +00:00
warren%netscape.com
7e5a7e1258 Fixed parsing of bloat log when value was nan, or class contained ::.
git-svn-id: svn://10.0.0.236/trunk@52220 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-29 18:05:09 +00:00
warren%netscape.com
a237edb9e7 Made the leak/bloat baseline only be the min over the last 5 entries.
git-svn-id: svn://10.0.0.236/trunk@52219 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-29 17:19:54 +00:00
kipp%netscape.com
363a93452d Fixed solaris build bustage
git-svn-id: svn://10.0.0.236/trunk@52218 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-29 15:20:20 +00:00
troy%netscape.com
de2a95b57c Space reduction. We now save 8 bytes per row frame by eliminating the max
top/bottom margin data members which are no longer needed


git-svn-id: svn://10.0.0.236/trunk@52217 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-29 14:40:58 +00:00
kipp%netscape.com
aaabce0894 r=troy; bugs 12958 and 12760; reworked the way that first-letter frames are created and updated. We now support incremental content changes even when first-letter style applies.
git-svn-id: svn://10.0.0.236/trunk@52216 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-29 14:39:48 +00:00
kipp%netscape.com
96da767847 r=troy; fixed a crash bug in the debug logic found while fixing 12958
git-svn-id: svn://10.0.0.236/trunk@52215 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-29 14:36:00 +00:00
kipp%netscape.com
5f8b23824a r=troy; api changes for 12958, 12760 and preperations for 17377
git-svn-id: svn://10.0.0.236/trunk@52214 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-29 14:35:36 +00:00
kipp%netscape.com
f35516791b r=troy; cleaned up resize reflow optimization logic and prepared it for fixing bug #17737 (not yet fixed!)
git-svn-id: svn://10.0.0.236/trunk@52213 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-29 14:34:53 +00:00
kipp%netscape.com
5a0f716ef3 r=troy; fixed letter frame logic to use the line layout to flow frames so that white-space trimming, for example, would work right
git-svn-id: svn://10.0.0.236/trunk@52212 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-29 14:34:01 +00:00
kipp%netscape.com
b3ecfed51c r=troy; updated api slightly to support fixes to bug 12760, 12958 and some resize-reflow optimization bugs
git-svn-id: svn://10.0.0.236/trunk@52211 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-29 14:33:26 +00:00
kipp%netscape.com
a2f8cba30c r=troy; use new line-layout api to help with some resize-reflow optimization bugs
git-svn-id: svn://10.0.0.236/trunk@52210 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-29 14:32:11 +00:00
rods%netscape.com
c01e8f06c0 Allows radiobuttons to remove themselves from the named radio group
when deleted factored the code
r=kmcclusk, bug 17418


git-svn-id: svn://10.0.0.236/trunk@52209 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-29 13:56:30 +00:00
rods%netscape.com
24bb2c855d removes itself from the radio group when it is destructed
r=kmcclusk, bug 17418


git-svn-id: svn://10.0.0.236/trunk@52208 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-29 13:54:58 +00:00
rods%netscape.com
38a193d9b4 clears the the checked item on removal
r=kmcclusk,bug 17418


git-svn-id: svn://10.0.0.236/trunk@52207 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-29 13:53:50 +00:00
kin%netscape.com
5fae6982e3 Fix for bug #16176: [DOGFOOD] need to annotate line frames with whitespace trim
layout/base/src/nsCaret.cpp
        - Modified DrawCaretWithContext so that we only
          adjust the caret position if we are within the
          frame's bounds.

    layout/html/base/src/nsTextFrame.cpp
        - Modified GetPointFromOffset() to add the width
          of a space if the offset is after a trailing space
          and it was trimmed off the frame.

r=sfraser@netscape.com


git-svn-id: svn://10.0.0.236/trunk@52206 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-29 13:43:11 +00:00
Jerry.Kirk%Nexwarecorp.com
e08673c042 Fixes for drawing the new Chrome. Had to explicitly call PgFlush
to flush the draw stream from the memory context into the off screen
buffer. I think this is a bug in Photon, but for now this is the fix.
r=kedl


git-svn-id: svn://10.0.0.236/trunk@52205 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-29 12:53:58 +00:00
pavlov%netscape.com
f24c85975a remove some tabs and add a check for null (bug 17252) r=syd
git-svn-id: svn://10.0.0.236/trunk@52204 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-29 09:03:53 +00:00
pavlov%netscape.com
385f05a7b1 fix for bugs 17234,17416 r=tor,bruce
git-svn-id: svn://10.0.0.236/trunk@52203 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-29 08:36:47 +00:00
pavlov%netscape.com
594fc96d9f fix for 15942 and some performance tests/code r=syd
git-svn-id: svn://10.0.0.236/trunk@52202 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-29 08:24:09 +00:00
danm%netscape.com
8dd72754a2 treat the return key, like enter, as if the default dialog button had been pressed. part of fix for bug 17529. r:saari@netscape.com
git-svn-id: svn://10.0.0.236/trunk@52201 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-29 06:17:07 +00:00
danm%netscape.com
12fd34f1ce dialog now uses okCancelButtons overlay. partial fix for bug 17529 r:hangas@netscape.com
git-svn-id: svn://10.0.0.236/trunk@52200 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-29 06:12:26 +00:00
cmanske%netscape.com
d779af105f Changed hover style for FormatToolbar for consistency with new UI
git-svn-id: svn://10.0.0.236/trunk@52199 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-29 06:04:48 +00:00
beard%netscape.com
73ee8b0ee5 added transitive closure size computation.
git-svn-id: svn://10.0.0.236/trunk@52198 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-29 06:04:01 +00:00
jband%netscape.com
d8b2fc8146 r=shaver@mozilla.org
- Fix for bug 13419 - xpconnect calls wrapped JS objects on wrong JSContext.
Added code to use the nsThreadJSContextStack in order to call wrapped
JS object on the JSContext that is current for the running thread.

We've made the rule that xpconnect only supports one JSRuntime. We
partially enforce that here by enforcing that the JSContext on which
we will run code hails from the same JSRuntime as the JSContext on
which the wrapper for the JS code was built.

Because it is perfectly legal for the nsThreadJSContextStack to be empty
if a wrapped JS object is being called from code other than a DOM event,
this system will lazily create a JSContext for the current thread and
maintain it in TLS. This JSContext is used as necessary. If it uses such
a JSContext that was not already on the nsThreadJSContextStack then the
system will temporarily push that JSContext onto the nsThreadJSContextStack
during the course of the function call being performed. This is all managed
my a new auto class: AutoPushCompatibleJSContext. This is used in the two
places where wrapped JS code is called from native code.

[the two places where this system is invoked are currently disabled due to
the fact that the DOM code makes bad assumptions about the JSContext on
which DOM objects can be accessed. We are working to fix that and then this
code will be enabled.]

- Add #ifdef XPC_DETECT_LEADING_UPPERCASE_ACCESS_ERRORS code that will help
users when we do things like fix bug 14460. As soon as we make more of the
idl declarations of methods leadingLowercase then we will have
LeadingUppercase calls from JS breaking at runtime. It is expected that this
will especially be a problem for coders working with the same interfaces
from both C++ and JS (since from C++ an interface has LeadingUpper methods and
the *same* interface seen from JS has leadingLowecase names). This code
(as suggested by shaver) will print out an informative error message when
it detects the misuse. This is currently enabled for DEBUG builds only.

- Copy code from xpcshell to TestXPC to use the JSRuntimeSerivce.

r=norris@netscape.com
- Check to see if a wrapped JS object has a QueryInterface property before
trying to call that method. This is a speed optimization. It also and makes
norris happy because his perrenial breakpoint in jsReportErrorNumber is not
getting hit (even though the old code was safe).


git-svn-id: svn://10.0.0.236/trunk@52197 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-29 05:42:41 +00:00
mcafee%netscape.com
b3a2df9860 Updating legend to match new output format.
git-svn-id: svn://10.0.0.236/trunk@52196 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-29 05:02:00 +00:00
troy%netscape.com
58248e0de3 Fix for bug #16649. Didn't actually change anything. Just restored some
code that was clobbered by revision 3.153


git-svn-id: svn://10.0.0.236/trunk@52195 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-29 04:57:02 +00:00
morse%netscape.com
4f5d2bc5d5 get ready for integration with http/ftp authentication, r=davidm
git-svn-id: svn://10.0.0.236/trunk@52194 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-29 04:51:27 +00:00
sspitzer%netscape.com
1bb663bbef fix for #8717. performance is good enough to bump this back to 500.
still more work to be done, as this is a per-server pref now, I think.


git-svn-id: svn://10.0.0.236/trunk@52193 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-29 04:49:41 +00:00
mcafee%netscape.com
dbd1674956 No spaces so units don't go on next line.
git-svn-id: svn://10.0.0.236/trunk@52192 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-29 04:45:52 +00:00
sspitzer%netscape.com
e36c5874dc fix it so that if you have something selected, and you hit enter, it starts with that profile.
git-svn-id: svn://10.0.0.236/trunk@52191 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-29 04:40:20 +00:00
bienvenu%netscape.com
9187011a29 changes to use nsIMsgWindow r=putterman
git-svn-id: svn://10.0.0.236/trunk@52190 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-29 04:39:06 +00:00
mcafee%netscape.com
d977243f6d oops left out b units
git-svn-id: svn://10.0.0.236/trunk@52189 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-29 04:36:17 +00:00
mcafee%netscape.com
d2807b6f90 Better units, r=brendan
git-svn-id: svn://10.0.0.236/trunk@52188 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-29 04:30:56 +00:00
morse%netscape.com
6bc4bb23b5 provide compatibility with single signon, r=davidm
git-svn-id: svn://10.0.0.236/trunk@52187 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-29 04:30:38 +00:00
cmanske%netscape.com
55b30027eb Reduced size of Named Anchor proxy icon used in editor page to minimize layout disturbance when present. Changed colors.
git-svn-id: svn://10.0.0.236/trunk@52186 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-29 04:23:36 +00:00
sspitzer%netscape.com
3441bfea68 fix for #16231, r=mscott. make the file locator know about panels.rdf.
if <profile>/panels.rdf doesn't exist, copy the default to that location.


git-svn-id: svn://10.0.0.236/trunk@52185 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-29 04:02:25 +00:00
sspitzer%netscape.com
61aed8f307 fix for #16231, r=mscott. use the file locator (which caches the profile directory) instead of going through the profile service.
git-svn-id: svn://10.0.0.236/trunk@52184 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-29 04:02:20 +00:00
sspitzer%netscape.com
fc22d0aa61 remove the GetCurrentProfileDirFromJS() method from the nsIProfile interface. the only one using it was the sidebar js, but now that uses the fileLocator. r=mscott.
git-svn-id: svn://10.0.0.236/trunk@52183 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-29 04:01:22 +00:00
rginda%ndcico.com
0da4aac936 ** NOT PART OF THE SEAMONKEY DEFAULT BUILD **
* xul/tests/index.html
Content update.

* xul/tests/test3-output-loud.css
Added ugly style.

* Makefile.in, makefile.win
Updated to install new style.


git-svn-id: svn://10.0.0.236/trunk@52182 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-29 03:33:01 +00:00
warren%netscape.com
74b069723b Moved purify stuff into xpcom/base for the benefit of all.
git-svn-id: svn://10.0.0.236/trunk@52181 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-29 03:28:22 +00:00
warren%netscape.com
1fae170c08 Adding pure.h pure_api.c to the build. bug#16695
git-svn-id: svn://10.0.0.236/trunk@52180 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-29 03:26:50 +00:00
warren%netscape.com
3e59dc9845 Took out bogus error message.
git-svn-id: svn://10.0.0.236/trunk@52179 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-29 03:19:11 +00:00
waterson%netscape.com
4c9f59d49c Fix SizeOf() operation.
git-svn-id: svn://10.0.0.236/trunk@52178 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-29 03:07:38 +00:00
cmanske%netscape.com
941b2da9d7 Style adjustment for Composer DisplayMode toolbar
git-svn-id: svn://10.0.0.236/trunk@52177 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-29 02:58:37 +00:00
cmanske%netscape.com
f320760ce4 Color adjustment for Composer DisplayMode toolbar
git-svn-id: svn://10.0.0.236/trunk@52176 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-29 02:47:47 +00:00
warren%netscape.com
d4cac369ff Printed out TOTAL line for showbuilds.cgi
git-svn-id: svn://10.0.0.236/trunk@52175 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-29 02:39:10 +00:00
cathleen%netscape.com
7754b4e90e update unix packaging list for missing chrome and res files (editor, xpinstall... )
git-svn-id: svn://10.0.0.236/trunk@52174 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-29 02:37:27 +00:00
cmanske%netscape.com
aa538bb21b Added 'Throbber' to Composer - more UI adjustments for new skin. Tweaked new toolbar images. r=sfraser
git-svn-id: svn://10.0.0.236/trunk@52173 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-29 02:33:51 +00:00
kipp%netscape.com
877bf64923 Implement the LIBMALLOC_NOFREE flag; add in support for memory fill count which increases the malloc by N and fills it with a pattern to help detect overruns and random memory corruptions
git-svn-id: svn://10.0.0.236/trunk@52172 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-29 02:19:25 +00:00
kipp%netscape.com
71e57e9bc0 Disabled some of my own debugging noise
git-svn-id: svn://10.0.0.236/trunk@52171 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-29 02:17:55 +00:00
rhp%netscape.com
aa26800137 Fix for message display - Bug #17481 - r: jefft
git-svn-id: svn://10.0.0.236/trunk@52170 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-29 02:17:10 +00:00
ssu%netscape.com
a9a91fcc7c fixing bugs #16935 and #11581. r=dvedtiz.
The first fix reverses the way xpinstall aborts/cleans up itself.  The
correct way is to undo the commands it ran in backwards order.

The second fixes problem with a install.js script not having called
finalizeInstall() yet still installing files.


git-svn-id: svn://10.0.0.236/trunk@52169 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-29 02:15:56 +00:00
kipp%netscape.com
87ff88fc08 nuked another silly warning because I got tired of seeing it
git-svn-id: svn://10.0.0.236/trunk@52168 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-29 02:06:33 +00:00
kipp%netscape.com
f748008a0b I added logic to the viewers browser window to disable javascript initiated popups during web crawling; I also fixed the web crawler to only initiate a new load after a previous document ends not a subdocument (again!)
git-svn-id: svn://10.0.0.236/trunk@52167 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-29 02:06:09 +00:00
kipp%netscape.com
20e3748d92 I added logic to the viewers browser window to disable javascript initiated popups during web crawling
git-svn-id: svn://10.0.0.236/trunk@52166 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-29 02:05:16 +00:00
gagan%netscape.com
213f166414 Fixed bug 17393. We were firing an OnStopRequest for redirect's response completion. That messes up imagelib which starts to reset/abort streams. r=waterson
git-svn-id: svn://10.0.0.236/trunk@52165 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-29 01:55:58 +00:00
kipp%netscape.com
0f8e430077 r=troy; fixed code to properly remove reflowc ommands when cancelling
git-svn-id: svn://10.0.0.236/trunk@52164 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-29 01:53:56 +00:00
wtc%netscape.com
407de78336 Need to set the reuseaddr socket option before PR_Bind, now that
PR_Bind no longer sets that option automatically (see Bugzilla #17184).


git-svn-id: svn://10.0.0.236/trunk@52163 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-29 01:41:34 +00:00
wtc%netscape.com
4adfa873d2 Bugzilla bug #15858: fixed compiler warnings.
git-svn-id: svn://10.0.0.236/trunk@52162 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-29 01:33:54 +00:00
jj%netscape.com
0410c9f36b added [xpiengine] module and rename 'ChromeRegistry' to 'ChomeRegistry' to be consistent with this typo across the tree.
git-svn-id: svn://10.0.0.236/trunk@52161 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-29 01:25:51 +00:00
waterson%netscape.com
6d0e00cdd4 Bug 15146. Brutal content model sharing, Phase II. XUL content sink now constructs prototype documents; 'real' content model constructed from walking prototype. Landed XUL_SHARING_19991027_BRANCH (derived from XUL_SHARING_19991022_BRANCH). See branch comments for details. r=hyatt.
git-svn-id: svn://10.0.0.236/trunk@52160 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-29 01:21:15 +00:00
mcafee%netscape.com
19573259fb typo, r=slamm
git-svn-id: svn://10.0.0.236/trunk@52159 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-29 01:21:06 +00:00
waterson%netscape.com
5a02e1350c Bug 15146. Remove usage of nsIXUL[Child|Parent]Document, nsIXULDocumentInfo. Now obsolete with brutal sharing. r=hyatt
git-svn-id: svn://10.0.0.236/trunk@52158 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-29 01:19:20 +00:00
dougt%netscape.com
72ec0f3079 adding license.
git-svn-id: svn://10.0.0.236/trunk@52157 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-29 01:10:00 +00:00
kipp%netscape.com
e8cc21c4c3 New tests (not part of any build)
git-svn-id: svn://10.0.0.236/trunk@52156 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-29 00:59:41 +00:00
warren%netscape.com
e6e16569fb Added 1k fudge factor.
git-svn-id: svn://10.0.0.236/trunk@52155 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-29 00:40:04 +00:00
sspitzer%netscape.com
695d6778d8 don't specify the height and width, let it size to content. otherwise, the buttons on the bottom don't show up.
git-svn-id: svn://10.0.0.236/trunk@52154 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-29 00:26:43 +00:00
mccabe%netscape.com
5124ea8599 adding comments
git-svn-id: svn://10.0.0.236/trunk@52153 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-29 00:26:19 +00:00
sspitzer%netscape.com
e8194ccfb1 cleaning up comments
git-svn-id: svn://10.0.0.236/trunk@52152 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-29 00:09:27 +00:00
mcafee%netscape.com
af1c129e99 Reverted to mozilla.org url because of problems with loading resource:
git-svn-id: svn://10.0.0.236/trunk@52151 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-28 23:32:13 +00:00
nhotta%netscape.com
978eb5faf1 Adding entity property files to packages, r=ftang.
git-svn-id: svn://10.0.0.236/trunk@52150 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-28 23:31:30 +00:00
putterman%netscape.com
2df3525f9d More work on 17376. reviewed by bienvenu. Store open folder and keep array of msgWindows.
git-svn-id: svn://10.0.0.236/trunk@52149 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-28 23:27:21 +00:00
harishd%netscape.com
3d1723b618 Fix for bugs
1312   - Mapped all  HTML 4.0x FPIs to NOQUIRKS mode.
2749   - Tweaked strict comment handling code. -> r=rickg
17148 - Making sure that BeginContext() is ended only by EndContext()
17113, 1262 - Made AddLeaf(), in DTD,  to be cautious in handling text tokens.

Using bit-wise search  for IsContainer() instead of looping. ( nsElementTable )

Fixed warnings.

r=pollmann


git-svn-id: svn://10.0.0.236/trunk@52148 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-28 23:25:59 +00:00
mcafee%netscape.com
a6b5e55d70 Fixed extra my's that break in some versions of perl
git-svn-id: svn://10.0.0.236/trunk@52147 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-28 23:24:39 +00:00
sspitzer%netscape.com
a19b0a701f only show profiles that haven't been migrated in the Profile Selection dialog.
git-svn-id: svn://10.0.0.236/trunk@52146 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-28 23:24:05 +00:00
sspitzer%netscape.com
139ca8b52d adding "Mozilla Select Profile" (aka -SelectProfile) for the mac.
git-svn-id: svn://10.0.0.236/trunk@52145 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-28 23:19:02 +00:00
mcafee%netscape.com
14b918a812 Adding bloat formatting, baseline mechanism. warren/mcafee
git-svn-id: svn://10.0.0.236/trunk@52144 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-28 23:18:50 +00:00
sspitzer%netscape.com
9b563bc4a7 adding -SelectProfile for the mac.
git-svn-id: svn://10.0.0.236/trunk@52143 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-28 23:17:44 +00:00
sspitzer%netscape.com
761883462c checking in ben goodger's (rgoodger@ihug.co.nz) profile selection UI.
r=sspitzer

I made changes so that:

1)  exit quits the app, and doesn't start up app with the last current profile
2)  fix a spelling error (personalisation -> personalization), this is en-US, not en-UK
3)  fix it so start actually starts the selected profile.
4)  -SelectProfile launches this new dialog
5)  if the user starts with no command line, and they have more than one profile, they get -SelectProfile, and not -installer.


git-svn-id: svn://10.0.0.236/trunk@52142 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-28 23:08:46 +00:00
mcafee%netscape.com
cb42bc5347 switching to static pages.
git-svn-id: svn://10.0.0.236/trunk@52141 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-28 23:02:49 +00:00
mcafee%netscape.com
5d276fc49d fixing log rename problem. code=warren
git-svn-id: svn://10.0.0.236/trunk@52140 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-28 23:02:10 +00:00
sspitzer%netscape.com
39084ddb75 add support for SelectProfile
git-svn-id: svn://10.0.0.236/trunk@52139 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-28 22:56:00 +00:00
ftang%netscape.com
725ca86a3c fix bustage.
git-svn-id: svn://10.0.0.236/trunk@52138 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-28 22:38:58 +00:00
warren%netscape.com
25f7059c43 Fixed the fact that all pdb files get called default.pdb (which made it hard to debug when there was more than one test file in a directory). r=cyeh
git-svn-id: svn://10.0.0.236/trunk@52137 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-28 22:36:22 +00:00
rbs%maths.uq.edu.au
cdfb86c649 Catching up with recent changes of the nsIFrame API
git-svn-id: svn://10.0.0.236/trunk@52136 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-28 22:30:28 +00:00
waterson%netscape.com
ed6d691c92 Remove unused references to nsIXULChildDocument and nsIXULParentDocument.
git-svn-id: svn://10.0.0.236/trunk@52135 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-28 22:18:21 +00:00
pepper%netscape.com
856f1ee86f Added a newline to the end of file so that AIX and HP compilers are happy.
r=mgleeson


git-svn-id: svn://10.0.0.236/trunk@52134 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-28 22:17:43 +00:00
rbs%maths.uq.edu.au
4ea4c2ba26 Adding Dave Fiddes' patch for a MOZ_MATHML CFLAGS
git-svn-id: svn://10.0.0.236/trunk@52133 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-28 22:17:13 +00:00
waterson%netscape.com
c13911024a Remove redundant registration of well-formed DTD. r=rickg
git-svn-id: svn://10.0.0.236/trunk@52132 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-28 22:15:18 +00:00
waterson%netscape.com
0509ac6c24 Put column headers back in to folder pane. r=hyatt.
git-svn-id: svn://10.0.0.236/trunk@52131 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-28 22:14:14 +00:00
mccabe%netscape.com
c568cf9bed Add an API entry point for building JS Date objects from millisecond values.
Patches courtesy Chris Houck.  r=mccabe.


git-svn-id: svn://10.0.0.236/trunk@52130 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-28 22:11:41 +00:00
rhp%netscape.com
b3f1a34e11 Fix for sending plain text as binary files - Bug #16393 - r: mscott
git-svn-id: svn://10.0.0.236/trunk@52129 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-28 22:09:27 +00:00
norris%netscape.com
a825f1738a work on bug 7270.
r=mstoltz.
Implement netscape.security.PrivilegeManager callbacks.


git-svn-id: svn://10.0.0.236/trunk@52128 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-28 22:09:03 +00:00
mscott%netscape.com
58da4d1cc2 part of url dispatching framework.
build nsURLDispatcher.cpp


git-svn-id: svn://10.0.0.236/trunk@52127 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-28 22:08:57 +00:00
ftang%netscape.com
949f26b1d9 remove nsIDOMTextRange.h nsIDOMTextRangeList.h. fix bug 12756. r=tague
git-svn-id: svn://10.0.0.236/trunk@52126 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-28 22:05:42 +00:00
wtc%netscape.com
2989da583b Bugzilla bug #17486: need parentheses around a & operator in an expression
git-svn-id: svn://10.0.0.236/trunk@52125 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-28 22:03:08 +00:00
srinivas%netscape.com
894660c683 Export version descriptor. Bugzilla 4742
git-svn-id: svn://10.0.0.236/trunk@52123 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-28 21:28:46 +00:00
bienvenu%netscape.com
7a179cfe09 fix mac build bustage
git-svn-id: svn://10.0.0.236/trunk@52122 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-28 21:20:40 +00:00
mcafee%netscape.com
4a058b42d1 Ignore tree directories.
git-svn-id: svn://10.0.0.236/trunk@52120 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-28 21:16:44 +00:00
dmose%mozilla.org
0d77d490d6 script to update license boilerplate in source files
git-svn-id: svn://10.0.0.236/trunk@52119 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-28 21:16:29 +00:00
rpotts%netscape.com
4626597396 cleanup - removed unnecessary code checking that mRequest != nsnull. Now the mRequest is allocated at channel construction and the channel is deleted if the request allocation fails...
git-svn-id: svn://10.0.0.236/trunk@52118 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-28 21:15:56 +00:00
ssu%netscape.com
cc23cb4fd5 added new resource string. This is related to bug #17391. r=dbragg.
Affects only windows platforms.


git-svn-id: svn://10.0.0.236/trunk@52117 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-28 21:13:28 +00:00
alecf%netscape.com
32ed46c795 fix casting problem on solaris
git-svn-id: svn://10.0.0.236/trunk@52116 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-28 21:13:06 +00:00
ssu%netscape.com
da07ac32b1 fixing bug #17391. r=dbragg.
Fixes problem with calculating available disk space under
Win95/win98.  Affects only windows platforms.


git-svn-id: svn://10.0.0.236/trunk@52115 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-28 21:12:24 +00:00
warren%netscape.com
052c27feff Fixed thing that chops off final digit.
git-svn-id: svn://10.0.0.236/trunk@52114 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-28 21:06:36 +00:00
racham%netscape.com
8f6655fb4a r=gayatrib. Fix for Bug 16414. If the profile dir is deleted it always gets rebuilt based on the path it gets from registry
git-svn-id: svn://10.0.0.236/trunk@52113 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-28 21:05:26 +00:00
dp%netscape.com
f2caaa1890 Converting to module. r=kipp
git-svn-id: svn://10.0.0.236/trunk@52112 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-28 20:59:49 +00:00
dp%netscape.com
b3499577af Convering to nsIModule. r=kipp
git-svn-id: svn://10.0.0.236/trunk@52111 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-28 20:57:29 +00:00
dp%netscape.com
da7c33e34c Remove delete on nsISupports. r=kipp
git-svn-id: svn://10.0.0.236/trunk@52110 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-28 20:44:45 +00:00
nhotta%netscape.com
b6d38ed4f7 Check input for the null pointer and empty string, bug 17287, r=ducarroz,jefft.
git-svn-id: svn://10.0.0.236/trunk@52109 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-28 20:41:45 +00:00
nisheeth%netscape.com
ce3c186894 r=nisheeth. Fix for bug 17237 from Rick Gessner (rickg@netscape.com). Thanks, Rick.
git-svn-id: svn://10.0.0.236/trunk@52108 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-28 20:40:08 +00:00
mscott%netscape.com
33fe7bdd57 Build new uri dispatching interfaces on the Mac.
git-svn-id: svn://10.0.0.236/trunk@52107 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-28 20:38:16 +00:00
mscott%netscape.com
1e3a7c2073 export uri dispatching interfaces.
git-svn-id: svn://10.0.0.236/trunk@52106 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-28 20:37:58 +00:00
despotdaemon%netscape.com
a82717bab8 Pseudo-automatic update of changes made by yueheng.xu@intel.com.
git-svn-id: svn://10.0.0.236/trunk@52105 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-28 20:34:51 +00:00
rods%netscape.com
189a26e941 Listboxes now obey CSS specifed sizes
r=kmcclusk,related to bug 16317


git-svn-id: svn://10.0.0.236/trunk@52104 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-28 20:31:23 +00:00
radha%netscape.com
ca4f530508 Fix for form values not maintained while going forward. bug # 16377. r=law
git-svn-id: svn://10.0.0.236/trunk@52103 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-28 20:29:43 +00:00
akhil.arora%sun.com
1aa54f66ab updated list of things todo, removing stuff that has been done
git-svn-id: svn://10.0.0.236/trunk@52102 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-28 20:28:20 +00:00
akhil.arora%sun.com
d6ca20f368 r=akhil.arora@sun.com By Igor Nekrestyanov <nis@sparc.spb.su>
Minor changes to handle unicode strings properly


git-svn-id: svn://10.0.0.236/trunk@52101 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-28 20:26:27 +00:00
sspitzer%netscape.com
3a3c45b57c fix warnings. r=valeski
git-svn-id: svn://10.0.0.236/trunk@52100 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-28 20:25:43 +00:00
kmcclusk%netscape.com
89bd3d196e Removed stray semi-colon after NS_DECL_ISUPPORTS bug=17235 r=rods@netscape.com
git-svn-id: svn://10.0.0.236/trunk@52099 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-28 20:24:19 +00:00
alecf%netscape.com
5ecb0c11b3 prepare to consolidate server URI creation - create a new property of incoming servers, the local store type, and construct the URL from there.
r=sspitzer


git-svn-id: svn://10.0.0.236/trunk@52098 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-28 20:22:06 +00:00
alecf%netscape.com
2e274875d3 more cleanup work - now retrieve the server at URI creation time, so that GetServer() is really fast, and just forward calls to GetUsername and GetPassword() to the server. r=sspitzer
git-svn-id: svn://10.0.0.236/trunk@52097 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-28 20:19:57 +00:00
terry%mozilla.org
7d80bedb81 Back out last change -- specific to mozilla.org, not to general consumers of bugzilla.
git-svn-id: svn://10.0.0.236/trunk@52096 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-28 20:18:03 +00:00
bienvenu%netscape.com
f488902f5d work on body filters and search r=mscott
git-svn-id: svn://10.0.0.236/trunk@52095 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-28 20:13:22 +00:00
valeski%netscape.com
b853096819 16968, r=gagan. Changed the way HTTP header notification occurs. now the channel does the notification. Also added SetREsponseHeaders() to the nsIHTTPChannel iface which allows outside users to add response headers (such as nsMultiMIMEConv/bugzilla) and have the new headers perculate to observers. also fixed HTTP handler leak, r=dp on that one.
git-svn-id: svn://10.0.0.236/trunk@52094 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-28 20:12:59 +00:00
endico%mozilla.org
9b799b1100 Try to herd netscape communicator users away from bugzilla. "if your browser has a blue N logo go report the bug to netscape". This wording may be wrong later on but it works for now.
git-svn-id: svn://10.0.0.236/trunk@52093 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-28 20:12:52 +00:00
mcafee%netscape.com
296f21777f Updating legend for C, bloaty stats.
git-svn-id: svn://10.0.0.236/trunk@52092 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-28 19:47:47 +00:00
varada%netscape.com
b921af7d24 fix for bug #12715 import feature for nci files
git-svn-id: svn://10.0.0.236/trunk@52091 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-28 19:26:35 +00:00
varada%netscape.com
7a333b1d09 fix for change in copydir function
git-svn-id: svn://10.0.0.236/trunk@52090 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-28 19:25:56 +00:00
warren%netscape.com
16156488f8 Enhanced delta report. Breakdown by what's new, what's changed, etc.
git-svn-id: svn://10.0.0.236/trunk@52089 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-28 18:57:37 +00:00
despotdaemon%netscape.com
04b5eac48c Pseudo-automatic update of changes made by leaf@mozilla.org.
git-svn-id: svn://10.0.0.236/trunk@52088 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-28 17:59:13 +00:00
norris%netscape.com
0d74bb8fa4 Fix spelling of contributor's name.
git-svn-id: svn://10.0.0.236/trunk@52087 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-28 17:43:43 +00:00
troy%netscape.com
aa66ccecfa Elimninated compiler warning
git-svn-id: svn://10.0.0.236/trunk@52086 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-28 14:46:41 +00:00
ftang%netscape.com
bd4b9fbaf5 fix two comment after brade review and point out my error in prev checkin. r=brade
git-svn-id: svn://10.0.0.236/trunk@52085 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-28 14:46:37 +00:00
troy%netscape.com
3cb8f38164 Eliminated compiler warning
git-svn-id: svn://10.0.0.236/trunk@52084 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-28 14:46:06 +00:00
troy%netscape.com
5149a61f62 Added more diagnostic code
git-svn-id: svn://10.0.0.236/trunk@52083 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-28 14:38:14 +00:00
kipp%netscape.com
1786d79429 bug=17320; Fixed a purify warning
git-svn-id: svn://10.0.0.236/trunk@52082 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-28 14:33:34 +00:00
ftang%netscape.com
85c96d612c move all end of line # comment to the previous line. Remove all end of line tab and whitespace. Need this to fix Trad Chinese IME. Somehow our property file reader do not treat # as start of comment in a key value pair line. r=brade
git-svn-id: svn://10.0.0.236/trunk@52081 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-28 14:28:22 +00:00
vidur%netscape.com
1173466bfc Added a version of window.close, which when alled from script that defers actual closure if it is invoked from the script context of the window itself. Fixes bug 15261. R=joki.
git-svn-id: svn://10.0.0.236/trunk@52080 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-28 14:12:56 +00:00
ftang%netscape.com
c3b0a312fc remove unnecessary #ifdef USE_XIM. r=pavlov
git-svn-id: svn://10.0.0.236/trunk@52079 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-28 13:16:07 +00:00
Jerry.Kirk%Nexwarecorp.com
4385e8d68e Call PtAppAddFd instead of PtAppAddFdPri because of redraw bugs it
was causing.
r=kedl


git-svn-id: svn://10.0.0.236/trunk@52078 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-28 12:43:46 +00:00
dp%netscape.com
f06f488185 Removing use of mRefCnt directly. Also, removed all use of refcounted
variable as creations were always refcounted. r=kipp


git-svn-id: svn://10.0.0.236/trunk@52077 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-28 11:42:15 +00:00
srinivas%netscape.com
a6569800ce Include system files for BeOS; checkin for <duncan@be.com>.
git-svn-id: svn://10.0.0.236/trunk@52076 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-28 11:40:33 +00:00
rickg%netscape.com
7d94513269 fixed bug17387 (pre-constructing DTD's). r=warren
git-svn-id: svn://10.0.0.236/trunk@52075 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-28 09:26:19 +00:00
cmanske%netscape.com
450e220228 More changes to Composer for new skin (mostly new images).
git-svn-id: svn://10.0.0.236/trunk@52073 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-28 08:42:30 +00:00
warren%netscape.com
afff9da3ba Fixed bug in calculating leak total.
git-svn-id: svn://10.0.0.236/trunk@52072 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-28 08:35:53 +00:00
warren%netscape.com
4677dd631f Changed file transport to facilitate jar: protocol -- parameterized by nsIFileSystem. Bug#12579 r=gagan,gayatrib
git-svn-id: svn://10.0.0.236/trunk@52070 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-28 08:02:07 +00:00
rickg%netscape.com
b14a509c76 fixed bug17388, dtd leak; r=mscott
git-svn-id: svn://10.0.0.236/trunk@52069 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-28 07:53:21 +00:00
tbogard%aol.net
cd2764bb20 Changes made to reflect changes in nsIGenericWindow and nsIScrollable.
git-svn-id: svn://10.0.0.236/trunk@52068 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-28 07:52:08 +00:00
tbogard%aol.net
8e4af380cc Removed RemoveFocus() from nsIGenericWindow. Moved SizeToContent() to nsIHTMLDocShell. Added setCurScrollPosEx and setScrollRangeEx to nsIScrollable. Moved a bunch of code from nsHTMLDocShell into the base class. Commented out some stuff. Everything should compile now.
git-svn-id: svn://10.0.0.236/trunk@52067 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-28 07:51:10 +00:00
mscott%netscape.com
3587a59aa7 build mime before compose so we can make sure nsIMimeStreamConverter.idl has been exported
before compose IDL files try to use it.


git-svn-id: svn://10.0.0.236/trunk@52066 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-28 07:23:20 +00:00
dougt%netscape.com
32412a1f03 Fix for this mornings crasher (17352) r=pavlov, mscott
git-svn-id: svn://10.0.0.236/trunk@52065 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-28 06:44:36 +00:00
ducarroz%netscape.com
a282d4acf9 another Mac bustage fix. Caught before it appears
git-svn-id: svn://10.0.0.236/trunk@52064 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-28 06:01:43 +00:00
ducarroz%netscape.com
d4df792c85 Fix Mac bustage for mscott.
Add build instruction for mozilla:mailnews:mime:public:MANIFEST_IDL.


git-svn-id: svn://10.0.0.236/trunk@52063 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-28 05:45:22 +00:00
mscott%netscape.com
1bac65d756 Remove incorrect export of nsIMimeStreamConverter.idl
git-svn-id: svn://10.0.0.236/trunk@52062 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-28 05:42:15 +00:00
mscott%netscape.com
1b39aa1dd7 more work to try to fix the mac build.
git-svn-id: svn://10.0.0.236/trunk@52061 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-28 05:39:14 +00:00
ducarroz%netscape.com
eaa801e49e Fix for bug 17405. We need to skip entry that aren't valid during the search. R=mscott (he has also approved the fact I checking despite a red tree)
git-svn-id: svn://10.0.0.236/trunk@52060 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-28 05:34:07 +00:00
mscott%netscape.com
dbf6bce997 Fix windows build breakage. Try to build mime before compose so the IDL files
get exported first.


git-svn-id: svn://10.0.0.236/trunk@52058 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-28 05:08:36 +00:00
mscott%netscape.com
5c68fcaafc fix mac build by exporting nsIMimeStreamConverter.idl
git-svn-id: svn://10.0.0.236/trunk@52057 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-28 04:56:12 +00:00
waterson%netscape.com
31deb6a74d Unix filenames are case-sensitive.
git-svn-id: svn://10.0.0.236/trunk@52056 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-28 04:36:04 +00:00
mscott%netscape.com
888899af25 Bug #16927 --> when quoting a message, don't try to force a message URI into a protcol url. Convert the rdf uri
into a url and use that instead. For quoting the msg, use NS_NewChannel and AsyncOpen. some cleanup to fix
some ref counting stuff including supporting a new interface. Using the component manager
to create the quote listener instead of using new.
r=rhp


git-svn-id: svn://10.0.0.236/trunk@52055 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-28 04:22:08 +00:00
mscott%netscape.com
1bc43aaac4 Use nsCOMPtr. Add nsIMsgQuoteListener support, remove some extra member variables that we didn't need.
r=rhp


git-svn-id: svn://10.0.0.236/trunk@52054 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-28 04:21:30 +00:00
mscott%netscape.com
5daada9f2c Bug #16927 add nsIMsgQuoteListener interface
r=rhp


git-svn-id: svn://10.0.0.236/trunk@52053 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-28 04:21:02 +00:00
mscott%netscape.com
08f1d9c5a8 Bug #16927 --> add msg quote listener to module.
r=rhp


git-svn-id: svn://10.0.0.236/trunk@52052 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-28 04:20:41 +00:00
mscott%netscape.com
3b5d377a59 Bug #16927 --> add class id for msg quote listener
r=rhp


git-svn-id: svn://10.0.0.236/trunk@52051 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-28 04:19:59 +00:00
karnaze%netscape.com
15d92465ad simplified caching of column frames. split out collapsing border processing into nsBorderCollapser (checked in previously). r=troy
git-svn-id: svn://10.0.0.236/trunk@52050 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-28 04:09:39 +00:00
karnaze%netscape.com
0ddb8bf0bc added files: mozilla/layout/html/table/src/nsTableBorderCollapser.cpp
git-svn-id: svn://10.0.0.236/trunk@52049 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-28 04:06:36 +00:00
karnaze%netscape.com
b363aea0eb new class for collapsing borders, extracted from nsTableFrame, r=troy
git-svn-id: svn://10.0.0.236/trunk@52045 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-28 03:51:55 +00:00
braddr%puremagic.com
d8fb5871d7 Move all nsIEnumerator usage over to NS_ENUMERATOR_FALSE from NS_COMFALSE in anticipation of nixing NS_COMFALSE in the near future.
r=scc


git-svn-id: svn://10.0.0.236/trunk@52044 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-28 03:16:48 +00:00
brendan%mozilla.org
da68e2dcd8 Fix bogus assertion (r=shaver@mozilla.org) found by chouck@geocast.com.
git-svn-id: svn://10.0.0.236/trunk@52043 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-28 02:50:15 +00:00
fur%netscape.com
50f46042f0 Removed unused variable declaration to eliminate warning
git-svn-id: svn://10.0.0.236/trunk@52042 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-28 02:48:32 +00:00
srinivas%netscape.com
bc406e3e1e Add PR_Block/Unblock_Interrupt functions. Bugzilla 17055
git-svn-id: svn://10.0.0.236/trunk@52041 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-28 02:48:01 +00:00
fur%netscape.com
dbcd581b59 Eliminated references to long-dead jsaddr.[ch].
Note: These files only used in standalone JS, not SeaMonkey build.


git-svn-id: svn://10.0.0.236/trunk@52040 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-28 02:45:01 +00:00
fur%netscape.com
e969fa7f4f Removed unused files - they have been dead for years
git-svn-id: svn://10.0.0.236/trunk@52039 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-28 02:42:49 +00:00
tbogard%aol.net
d9cd4dc3b8 Pushed many of the method implementations done by buster from nsHTMLDocShell into the base class.
git-svn-id: svn://10.0.0.236/trunk@52038 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-28 02:20:44 +00:00
mscott%netscape.com
5bfc03c26e part of url dispatching.
export the uri dispatching interfaces.
no reviewer for this makefile change.


git-svn-id: svn://10.0.0.236/trunk@52037 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-28 02:05:12 +00:00
danm%netscape.com
d5cb9410ae moving initial content focus from OnEndDocumentLoad to Show. Reinstating SetSizeFromXUL. reduces new window flashing and allows gtk windows to size from JS. r:hyatt@netscape.com
git-svn-id: svn://10.0.0.236/trunk@52036 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-28 01:52:49 +00:00
mscott%netscape.com
df0cb24c86 Checking this in for hangas. Fixes the grey menus in the compose window.
r=mscott


git-svn-id: svn://10.0.0.236/trunk@52035 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-28 01:52:13 +00:00
cmanske%netscape.com
c0c0bb47c7 Fixed bugs 16690, 16991. Also made UI changes to adjust for new 'skin' r=sfraser
git-svn-id: svn://10.0.0.236/trunk@52034 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-28 01:51:07 +00:00
nisheeth%netscape.com
151090fbb2 r=nisheeth. Fix for bug 9781 submitted by Johnny Stenbeck (jst@citec.fi). Thanks Johnny.
git-svn-id: svn://10.0.0.236/trunk@52033 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-28 01:50:37 +00:00
hangas%netscape.com
9c4609c831 Fixed throbber id, bug 17271. r=german
git-svn-id: svn://10.0.0.236/trunk@52032 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-28 01:44:29 +00:00
law%netscape.com
85c96d1199 Bug #14999; remove last vestiges of app core usage; r=sfraser@netscape.com
git-svn-id: svn://10.0.0.236/trunk@52031 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-28 01:41:16 +00:00
law%netscape.com
41c8a495f1 Bug #14999, removing last vestiges of app core usage; r=sfraser@netscape.com
git-svn-id: svn://10.0.0.236/trunk@52030 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-28 01:39:33 +00:00
nisheeth%netscape.com
f341433a7c r=dp. Fix for bug 17411. Commenting out the call to nsFrameManager::CantRenderReplacedElement for now. This should let us open up the tree while dp and pnunn figure out the right fix.
git-svn-id: svn://10.0.0.236/trunk@52029 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-28 01:20:34 +00:00
tbogard%aol.net
f996be0ecd Changed nativeWindow* parentNativeWindow back to nativeWindow parentNativeWindow.
git-svn-id: svn://10.0.0.236/trunk@52028 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-28 00:45:13 +00:00
despotdaemon%netscape.com
20ec29f713 Pseudo-automatic update of changes made by andreww@netscape.com.
git-svn-id: svn://10.0.0.236/trunk@52027 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-28 00:11:01 +00:00
hoa.nguyen%intel.com
a56d99d249 Initialize cookie manager. Allows cgi scripts to set and retrieve cookies through viewer. r=edburns@acm.org
git-svn-id: svn://10.0.0.236/trunk@52026 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-27 23:58:49 +00:00
buster%netscape.com
1f5101db18 added a bunch of initial implementation. does not compile yet, but that's ok because docshell isn't part of the build yet.
git-svn-id: svn://10.0.0.236/trunk@52025 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-27 23:50:19 +00:00
jfrancis%netscape.com
f4bfa77ae5 fix for 17056: making a list in empty doc didnt work; also making a new list item didn't work. r=floppy moose
git-svn-id: svn://10.0.0.236/trunk@52024 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-27 23:44:33 +00:00
sfraser%netscape.com
3b974396c6 Add the various menu-related arrow gifs. fixes bug 17368. r=jfrancis
git-svn-id: svn://10.0.0.236/trunk@52023 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-27 23:40:51 +00:00
jj%netscape.com
adfe3c048e First Checked In.
git-svn-id: svn://10.0.0.236/trunk@52022 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-27 23:39:46 +00:00
putterman%netscape.com
7e1db2ef27 This should stop build bustage for clobber builds.
git-svn-id: svn://10.0.0.236/trunk@52021 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-27 23:39:15 +00:00
locka%iol.ie
74ff2dc2f4 Fixed some bugs in the copy to clipboard operation.
Control now calls NS_ShutdownXPCOM during destruction


git-svn-id: svn://10.0.0.236/trunk@52020 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-27 23:19:27 +00:00
locka%iol.ie
7eff36db02 Added a menu to the dialog.
Implemented tests for cut, copy, paste, select all


git-svn-id: svn://10.0.0.236/trunk@52019 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-27 23:17:51 +00:00
cata%netscape.com
1bb10c65f4 I'm checking in for momoi, r=cata, bug #17018, Charset Menu usability workaround.
git-svn-id: svn://10.0.0.236/trunk@52018 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-27 23:10:51 +00:00
ftang%netscape.com
657f0d5580 fix the delete last IME text problem. bug13494 . There are another fix in nsHTMLEditRules.cpp related this but I forget to put the bug # there. r=tague
git-svn-id: svn://10.0.0.236/trunk@52017 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-27 23:05:24 +00:00
troy%netscape.com
c96591767e b=6674, r=karnaze@netscape.com
Changed Paint() to set the clip rect only when the collapse offset isn't
(0, 0)


git-svn-id: svn://10.0.0.236/trunk@52016 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-27 23:01:21 +00:00
kipp%netscape.com
3a2fe236a8 r=troy; fixed bug #17346 - the nsTextFormatter self test code found a bug in the nsTextFragment ctor code...
git-svn-id: svn://10.0.0.236/trunk@52015 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-27 23:01:16 +00:00
hangas%netscape.com
5fb3a93517 Cleaned up bad style rules in global.css - should result in noticable performance improvement. Converted <titledbutton> rules to all use a class, this way we can be specific about how each type of button should look. Added line between columns in tree headers. Indented treecell contents. Cleaned up mail and AB toolbars. Fixed reflow and other drawing issues with toolbar buttons on new skins. Fixed problems in results tree on AB window. Other misc visual changes. Fixed bug 16530, changing the word Messenger to Mail. r=german/hyatt
git-svn-id: svn://10.0.0.236/trunk@52014 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-27 23:01:09 +00:00
cathleen%netscape.com
c249ccc29e adding missing editor chrome file to mac packaging list
git-svn-id: svn://10.0.0.236/trunk@52013 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-27 22:59:04 +00:00
ftang%netscape.com
c31d69ed3f add debugging code. fix remove last uncomited IMEText. r=jfrancis
git-svn-id: svn://10.0.0.236/trunk@52012 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-27 22:56:36 +00:00
akkana%netscape.com
018a1629cf 17305: Fix ? handling. Also add myself to a debug ifdef. r=pavlov
git-svn-id: svn://10.0.0.236/trunk@52011 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-27 22:53:52 +00:00
tague%netscape.com
282a0d9dcf Fixed bug #16463 - can't create profile with Danish version of Mozilla. I modified the locale mapping code to correct a bug where DA was getting mapped to LANG_DUTCH. r=nhotta@netscape.com
git-svn-id: svn://10.0.0.236/trunk@52010 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-27 22:52:56 +00:00
bienvenu%netscape.com
d6e604a886 turn on date filters, r=mscott 10416
git-svn-id: svn://10.0.0.236/trunk@52009 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-27 22:45:18 +00:00
nisheeth%netscape.com
fa55e685cc r=pollmann, troy. Fix for bug 10564. Added some error checking code to prevent crashes reported on low memory configurations.
git-svn-id: svn://10.0.0.236/trunk@52008 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-27 22:45:05 +00:00
sdagley%netscape.com
41a1603c9d __MD_GetEnv now calls standard C's getenv if environment variable not in NSPR's table. r=beard
git-svn-id: svn://10.0.0.236/trunk@52007 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-27 22:44:48 +00:00
sspitzer%netscape.com
637de3c1b6 fix for #17285 and #17397. r=mscott.
properly migrate pop and nntp servers from 4.x that were not on the default ports (110 and 119, respectively).
also, set the default port pref to be -1, so that if we don't set the port, it gets set to -1.


git-svn-id: svn://10.0.0.236/trunk@52006 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-27 22:44:34 +00:00
morse%netscape.com
af16ae652b bug 17339, document.cookie throwing exception, r=neeti
git-svn-id: svn://10.0.0.236/trunk@52005 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-27 22:43:49 +00:00
rginda%ndcico.com
dece5d007f **NOT PART OF THE SEAMONKEY DEFAULT BUILD**
* xul/tests/test3-output-loud.css
Added css for "loud" style.

* xul/tests/blue_rock.gif
Added pic for new default style, from Eterm background collection.

* makefile.win, Makefile.in
Add blue_rock.gif to install files.

* js/lib/irc.js
Strip \r characters from input.

* xul/tests/index.html
Updated content.

* xul/tests/test3-handlers.js
Create userlist object onJoin if it isnt already there.

* xul/tests/test3-output-default.css
New default style.

* xul/tests/test3-static.js
Added irc.freei.net server to top of EFNet network.  This server does not
require the ident service, which is blocked by the NS firewall.

* xul/tests/test3.xul
Added "loud" style to menu (old default style.)


git-svn-id: svn://10.0.0.236/trunk@52004 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-27 22:42:47 +00:00
morse%netscape.com
cfdf03bc1a bug 17120, can't startup if cookie dll missing, r=valeski
git-svn-id: svn://10.0.0.236/trunk@52003 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-27 22:41:36 +00:00
putterman%netscape.com
32be2053bd Added nsIMsgWindow.idl and nsIMsgRDFDataSource.idl
git-svn-id: svn://10.0.0.236/trunk@52002 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-27 22:40:34 +00:00
putterman%netscape.com
dd42c6ee85 Added nsMsgWindow.cpp
git-svn-id: svn://10.0.0.236/trunk@52001 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-27 22:39:37 +00:00
morse%netscape.com
0eb9ff94e0 part of bug 8227, dereferencing problems, r=rickg
git-svn-id: svn://10.0.0.236/trunk@52000 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-27 22:38:48 +00:00
putterman%netscape.com
ff9a018c1e Started work on 17376. reviewed by bienvenu. create an object that knows about
mailnews window data and pass it through backend.


git-svn-id: svn://10.0.0.236/trunk@51999 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-27 22:38:47 +00:00
cathleen%netscape.com
59a2f543c7 adding missing editor chrome files
git-svn-id: svn://10.0.0.236/trunk@51998 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-27 22:35:37 +00:00
matt%netscape.com
e180142807 fix for bug 15169 r-morse
git-svn-id: svn://10.0.0.236/trunk@51997 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-27 22:33:35 +00:00
matt%netscape.com
5077a5368d 17218 r-mcafee
git-svn-id: svn://10.0.0.236/trunk@51996 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-27 22:31:58 +00:00
rogerl%netscape.com
2bfa05205d Changed commandline option for classpath to 'classpath' instead of 'cp'
git-svn-id: svn://10.0.0.236/trunk@51995 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-27 22:22:56 +00:00
bienvenu%netscape.com
f3513af6e6 fix a couple ref-counting problems on news dbs, reviewed last week by sspitzer
git-svn-id: svn://10.0.0.236/trunk@51994 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-27 22:19:42 +00:00
bienvenu%netscape.com
6b1312845e fix off by one error computing display name from naked email address
git-svn-id: svn://10.0.0.236/trunk@51993 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-27 22:18:12 +00:00
rogerl%netscape.com
f891c9ebb9 Error message for apply argument type
git-svn-id: svn://10.0.0.236/trunk@51992 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-27 22:17:44 +00:00
rogerl%netscape.com
f3ae1fcf7a ECMA handling of undefined args for call & apply.
git-svn-id: svn://10.0.0.236/trunk@51991 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-27 22:17:05 +00:00
rogerl%netscape.com
7a5d5c9ad9 Handle LINE & SOURCEFILE in dumpIcode
Fix bug in multiple try/catch clauses after a catch - the tryStackTop was
being decremented twice.


git-svn-id: svn://10.0.0.236/trunk@51990 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-27 22:16:15 +00:00
rogerl%netscape.com
a8627f0cf6 Handle missing arg in match_or_replace
git-svn-id: svn://10.0.0.236/trunk@51989 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-27 22:14:46 +00:00
bienvenu%netscape.com
6b7fd317c4 turn on history ab collection for msg sending r=jefft, bug 14447
git-svn-id: svn://10.0.0.236/trunk@51988 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-27 22:14:37 +00:00
rhp%netscape.com
e735146e7c Fix for Unicode quoting to plain text compose - Bug: 15465 r: bienvenu
git-svn-id: svn://10.0.0.236/trunk@51987 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-27 22:11:51 +00:00
rogerl%netscape.com
89da4b6f9b ECMA specified handling of NaN inputs for max & min
git-svn-id: svn://10.0.0.236/trunk@51986 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-27 22:11:43 +00:00
rogerl%netscape.com
800a7e2800 Subsumed ConversionError into TypeError
git-svn-id: svn://10.0.0.236/trunk@51985 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-27 22:10:36 +00:00
mscott%netscape.com
e2730e12e8 Bug #17352 --> temporarily hide this crasher by inserting an extra
ref count of the event queue. this is horrible since we are introducing
a leak. we need to examine the ownership model of event queues for the app
shell. I'm going to get pavlov to help me look at fixing this bug for real.
r=dougt
a=gramps,granrose


git-svn-id: svn://10.0.0.236/trunk@51984 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-27 22:00:54 +00:00
dmose%mozilla.org
1710bfc387 updating license boilerplate in all files; checkin approved by leif@netscape.com
git-svn-id: svn://10.0.0.236/trunk@51980 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-27 21:02:40 +00:00
braddr%puremagic.com
1dde1a4f56 Ooops.. tree closed, better back these out for now. Sorry.
git-svn-id: svn://10.0.0.236/trunk@51979 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-27 21:01:37 +00:00
larryh%netscape.com
dfb30043a3 BugZilla 17374. Add PROffset types
git-svn-id: svn://10.0.0.236/trunk@51978 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-27 20:29:22 +00:00
braddr%puremagic.com
7767d9393b Move all nsIEnumerator usage over to NS_ENUMERATOR_FALSE from NS_COMFALSE
in anticipation of nixing NS_COMFALSE in the near future.
r=scc (please contact him should there be any build issues)


git-svn-id: svn://10.0.0.236/trunk@51977 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-27 20:24:21 +00:00
bienvenu%netscape.com
642710bf52 fix race condition opening imap folder r=mscott, build stopper
git-svn-id: svn://10.0.0.236/trunk@51976 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-27 19:15:20 +00:00
kipp%netscape.com
0637f2c48a Backed out chris's accidental checkin (don't ask)
git-svn-id: svn://10.0.0.236/trunk@51973 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-27 15:57:35 +00:00
karnaze%netscape.com
03e8200f99 hello
git-svn-id: svn://10.0.0.236/trunk@51972 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-27 15:55:31 +00:00
vidur%netscape.com
48577bac14 Update mNumFlushed counts when we do a synchronous notification (in scripts, for example). This is so that a call to FlushTags while we're executing a script sees the context stack in an updated state. Fixes bug 14042. R=joki.
git-svn-id: svn://10.0.0.236/trunk@51971 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-27 14:03:15 +00:00
Jerry.Kirk%Nexwarecorp.com
a4c99c7c93 Finished implementing ListenToEventQueue.
r=kedl


git-svn-id: svn://10.0.0.236/trunk@51970 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-27 11:36:21 +00:00
idk%eng.sun.com
3b03dc263a bugId 17329
Added PlugletSecurityContext class.
Set ProxyJNI security context to PlugletSecurityContext
(see 15902)


git-svn-id: svn://10.0.0.236/trunk@51969 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-27 09:33:06 +00:00
hyatt%netscape.com
a036d65c5c working on theme switching r=pavlov
git-svn-id: svn://10.0.0.236/trunk@51966 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-27 09:24:23 +00:00
idk%eng.sun.com
ab0a4a932c bugId 17316
Added 4 demo pluglets
a = laa@sparc.spb.su
r = idk@eng.sun.com


git-svn-id: svn://10.0.0.236/trunk@51965 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-27 09:10:36 +00:00
nisheeth%netscape.com
cd137af4d4 Fix for bug 15633. Fixing build warning with the patch submitted by James Clark (jjc@jclark.com). r=nisheeth
git-svn-id: svn://10.0.0.236/trunk@51964 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-27 07:39:57 +00:00
briano%netscape.com
3387e5dd13 Automated update
git-svn-id: svn://10.0.0.236/trunk@51962 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-27 07:15:10 +00:00
nisheeth%netscape.com
74d8a9e437 Added --enable-detec-webshell-leaks autoconf flag.
git-svn-id: svn://10.0.0.236/trunk@51961 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-27 07:14:42 +00:00
nisheeth%netscape.com
0ca61f6f5c Added --enable-detect-webshell-leaks autoconf flag.
git-svn-id: svn://10.0.0.236/trunk@51960 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-27 07:13:48 +00:00
mcafee%netscape.com
dc2ef44aa6 switching to absolute leak/bloat numbers.
git-svn-id: svn://10.0.0.236/trunk@51959 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-27 07:02:25 +00:00
rpotts%netscape.com
d54c2a54d9 bug #13054. r=mscott,warren. Reworked how data is written to the network. I consolidated the writing of nsIBufferInputStreams and nsIInputStreams and limited the amount of data being wrtten at once to MAX_IO_TRANSFER_SIZE...
git-svn-id: svn://10.0.0.236/trunk@51957 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-27 06:51:12 +00:00
mscott%netscape.com
26a5e7abea Bug #14928 --> url dispatching. Adding initial scaffolding for the uri dispatcher service.
(not part of the build yet)


git-svn-id: svn://10.0.0.236/trunk@51956 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-27 06:49:42 +00:00
rpotts%netscape.com
207123458e bug #16897. Consolidated the firing of OnStopRequest into the nsHTTPChannel. This is also called if a transport fails to be created...
git-svn-id: svn://10.0.0.236/trunk@51955 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-27 06:48:53 +00:00
sfraser%netscape.com
e025da23ff Ooops, maybe we do need one of those paths after all. r=floppy
git-svn-id: svn://10.0.0.236/trunk@51954 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-27 06:48:35 +00:00
mscott%netscape.com
c438ffca68 added a url dispatching comment.
git-svn-id: svn://10.0.0.236/trunk@51953 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-27 06:48:19 +00:00
sfraser%netscape.com
5258fa6070 Another teeny project fix -- remove obsolete lib/xp paths in the two static targets (which are not built anyway). r=moose
git-svn-id: svn://10.0.0.236/trunk@51952 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-27 06:44:44 +00:00
sfraser%netscape.com
f825fcb394 Fix the output file (RDF.header -> chrome.headers) so that .h file generation dependencies work properly. Fixes the red tree. r=mscott
git-svn-id: svn://10.0.0.236/trunk@51951 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-27 06:42:07 +00:00
rpotts%netscape.com
072f7a0e0b These are pollmanns changes for bug #8209 and other related POSTing bugs r=rpotts
git-svn-id: svn://10.0.0.236/trunk@51950 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-27 06:35:03 +00:00
mcafee%netscape.com
f3b4ca8e81 switching to absolute leak/bloat numbers.
git-svn-id: svn://10.0.0.236/trunk@51949 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-27 06:34:28 +00:00
sfraser%netscape.com
e48c7f6f32 Really change to using the NSComponent library. the opt target still had NSStartup. r=moose.
git-svn-id: svn://10.0.0.236/trunk@51948 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-27 06:31:40 +00:00
pavlov%netscape.com
30d2acfd1b check for null r=alecf
git-svn-id: svn://10.0.0.236/trunk@51944 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-27 05:51:05 +00:00
putterman%netscape.com
6263816942 Fix for 17277. reviewed by mscott. Delete selects next message instead of previous.
git-svn-id: svn://10.0.0.236/trunk@51942 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-27 04:46:12 +00:00
bienvenu%netscape.com
226d2a5c5f add accessor for load group on doc loader r=rpotts
git-svn-id: svn://10.0.0.236/trunk@51941 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-27 04:44:42 +00:00
troy%netscape.com
fd1d6fc2a3 Changed view to be stored as a frame property instead of a member data
of nsFrame


git-svn-id: svn://10.0.0.236/trunk@51940 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-27 03:56:14 +00:00
mccabe%netscape.com
f192186834 Undo overly-hasty backout. This reinstates part of my recent checkin.
git-svn-id: svn://10.0.0.236/trunk@51939 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-27 03:44:38 +00:00
saari%netscape.com
a9ec68967c Making popups not steal activation on MacOS. r: pinkerton, no bug number that I'm aware of
git-svn-id: svn://10.0.0.236/trunk@51938 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-27 03:32:35 +00:00
tbogard%aol.net
1d0ea94a3d Create an initialization structure to hold data until window created. Added a lot of implementation for many of the accessors. Filled in a lot of other first cut implementation.
git-svn-id: svn://10.0.0.236/trunk@51936 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-27 02:45:49 +00:00
tbogard%aol.net
144854adac For some reason to get an nsRect implementation you have to link with gfx. Yeah, that's componentized!
git-svn-id: svn://10.0.0.236/trunk@51935 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-27 02:44:49 +00:00
beard%netscape.com
98fb6ecb62 make warnings not terminate build. fix bustage, r=mccabe
git-svn-id: svn://10.0.0.236/trunk@51934 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-27 02:44:34 +00:00
tbogard%aol.net
d23ee135fa Boundary checking.
git-svn-id: svn://10.0.0.236/trunk@51933 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-27 02:44:01 +00:00
tbogard%aol.net
7c66962d85 A little more documentation.
git-svn-id: svn://10.0.0.236/trunk@51932 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-27 02:43:37 +00:00
hyatt%netscape.com
4639154a7f making the chrome registry work with dynamic overlays r=pavlov
git-svn-id: svn://10.0.0.236/trunk@51931 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-27 02:21:05 +00:00
mccabe%netscape.com
8522d5db78 Debust mac-specific \r-related tree breakage.
git-svn-id: svn://10.0.0.236/trunk@51927 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-27 01:28:59 +00:00
troy%netscape.com
c04dab44f6 Change to some assertions in debug mode
git-svn-id: svn://10.0.0.236/trunk@51925 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-27 00:53:15 +00:00
mccabe%netscape.com
cde9269c1b Various fixes to xpidl. Note that this checkin will cause a rebuild of everything that depends on nsISupports.h. Fixes courtesy Mike Shaver, with small tweaks by McCabe. r=shaver, r=mccabe.
- Fix to bug 17013; have xpidl produce an error when encountering a native declaration without an associated (c++-name).

- remove many DEBUG_shaver lines.

- provide xpidl_tree_warning as a fallback for libIDL versions for which IDL_tree warning is bad, and NULL-proof our message callback function.  Also remove a 1k buffer limit from the message callback function.

- make enum in IDL files an error.  We don't support it, and love consts instead.

- Fix to 12684; don't allow [retval] parameter + return or multiple [retval] parameters.

- Fix to 13390; make non-{short,long} const a fatal error.


git-svn-id: svn://10.0.0.236/trunk@51924 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-27 00:37:39 +00:00
hangas%netscape.com
825694f714 Fixed the order of the stop and reload buttons on the browser. r=german
git-svn-id: svn://10.0.0.236/trunk@51923 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-27 00:17:16 +00:00
ftang%netscape.com
94bc1e8092 add debugging code. change code so we won't call MapDBCSAttributeArrayToUnicodeOffsets when we are not composition. Sent length == 0 TextEvent if we got nothhing in IME_COMPOSITION. This is needed to delete the last unconverted text in IME. r=tague
git-svn-id: svn://10.0.0.236/trunk@51922 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-27 00:14:46 +00:00
ftang%netscape.com
1a8b9b5ddb implement input method highlight. r=tague
git-svn-id: svn://10.0.0.236/trunk@51921 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-27 00:10:03 +00:00
jj%netscape.com
e14a41074a workaround to accept wildcards on Mac -- granrose. r=jj
git-svn-id: svn://10.0.0.236/trunk@51918 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-27 00:03:54 +00:00
rods%netscape.com
beb6aa3e8b At kipp's suggestion I added a EnterReflowLock before and a ExitReflowLock
after my AppendReflowCommand. The reflow command gets "kicked off"
and it is now fixed. r=kipp, b=14771


git-svn-id: svn://10.0.0.236/trunk@51916 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-26 23:34:46 +00:00
sspitzer%netscape.com
71d282e592 fix for #17212, r=mscott.
migrate imap servers that have the port in the name (like nsmail-2:143)


git-svn-id: svn://10.0.0.236/trunk@51915 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-26 23:34:30 +00:00
rods%netscape.com
d8ca5cd972 removed an unused variable and an extra decl and call to remove two warnings
r=none


git-svn-id: svn://10.0.0.236/trunk@51914 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-26 23:28:51 +00:00
mccabe%netscape.com
2cdb9d67e3 Fix IDL to use native <idl-name>(<C++-name>); instead of just native <idl-name>; This is prep to make the tree compile with a new error mode landing in xpidl shortly.
Preperatory to a fix to 17013; I'm doing this as a separate checkin to avoid any checkin-skew danger.

r=shaver.


git-svn-id: svn://10.0.0.236/trunk@51913 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-26 23:26:28 +00:00
rods%netscape.com
bdb148b62f changed param in the initializer to aContent instead of nsnull
r=kmcclusk,b=17015


git-svn-id: svn://10.0.0.236/trunk@51912 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-26 23:21:14 +00:00
gagan%netscape.com
22e24a8da0 Fixed bugs 11677 (perf) 13837 (spaces) 14380 (leading spaces) 14707 (-1) 15069 (file://) r=valeski
git-svn-id: svn://10.0.0.236/trunk@51911 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-26 23:16:34 +00:00
cmanske%netscape.com
3054ed7de9 Fixed bugs 6278, 9758, 17014, 17071, 17160. r=sfraser,mjudge
git-svn-id: svn://10.0.0.236/trunk@51910 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-26 23:13:00 +00:00
mcafee%netscape.com
214b95844f Clear alarm from AliveTest, this was causing alternating green/orange status. Thanks to alecf/slamm for debugging help.
git-svn-id: svn://10.0.0.236/trunk@51909 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-26 23:10:35 +00:00
cmanske%netscape.com
f92e65e679 Part of fix for 17160, remove TextEditor from Tasks menu. r=mjudge
git-svn-id: svn://10.0.0.236/trunk@51908 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-26 23:07:41 +00:00
rhp%netscape.com
013f4b1591 Cleaning up some comments.
git-svn-id: svn://10.0.0.236/trunk@51907 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-26 23:06:27 +00:00
tbogard%aol.net
bb01dd252a Implemented the Destroy() method.... Which basically boils down to us returning out that we don't support the method. :)
git-svn-id: svn://10.0.0.236/trunk@51905 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-26 22:59:33 +00:00
wtc%netscape.com
f6437b73b9 Bugzilla bug #17188: NSPR should not automatically set the SO_KEEPALIVE
socket option on a new TCP socket. The HAVE_SOCKET_KEEPALIVE macro is
obsolete. r=srinivas@netscape.com.
Modified files: _beos.h, _os2.h, _unixos.h, _win16.h, _win95.h, _winnt.h,
prsocket.c, and ptio.c.


git-svn-id: svn://10.0.0.236/trunk@51902 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-26 22:58:55 +00:00
tbogard%aol.net
9e1e7d7a18 Implemented a number of methods for the doc shell attributes. Setup and Init structure which is used to accept the settings of attributes until Create() is called.
git-svn-id: svn://10.0.0.236/trunk@51900 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-26 22:56:59 +00:00
rhp%netscape.com
428cbd6498 Update changes for Mac project...again
git-svn-id: svn://10.0.0.236/trunk@51898 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-26 22:56:18 +00:00
tbogard%aol.net
0701f384c9 Updated some of the documentation.
git-svn-id: svn://10.0.0.236/trunk@51895 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-26 22:54:26 +00:00
rhp%netscape.com
3aa41ccbdf Update changes for Mac project
git-svn-id: svn://10.0.0.236/trunk@51894 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-26 22:47:55 +00:00
norris%netscape.com
0949cbb8b9 Fix 16836 "Security error accessing DOM elements inside an IFrame"
r=vidur@netscape.com
Also, bug 16536 "Security disallows opening resource URL" no longer occurs after this fix.


git-svn-id: svn://10.0.0.236/trunk@51893 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-26 22:45:32 +00:00
rhp%netscape.com
0d96648b4a Changes for better text display and format flowed - Bug #16507 - r: rhp since this is externally contributed
git-svn-id: svn://10.0.0.236/trunk@51892 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-26 22:43:25 +00:00
pinkerton%netscape.com
ae7c4c1605 File Removed.
git-svn-id: svn://10.0.0.236/trunk@51891 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-26 22:38:54 +00:00
pinkerton%netscape.com
884c5020ad use new chrome idl project instead of generated header file (r=hyatt).
git-svn-id: svn://10.0.0.236/trunk@51890 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-26 22:38:40 +00:00
pinkerton%netscape.com
3ef9a724a2 First Checked In.
git-svn-id: svn://10.0.0.236/trunk@51889 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-26 22:37:45 +00:00
slamm%netscape.com
50be5003d6 Add entity for bookmarks menu on personal toolbar
git-svn-id: svn://10.0.0.236/trunk@51888 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-26 22:10:15 +00:00
varada%netscape.com
2c49380653 fixes for bug #8977 9097
git-svn-id: svn://10.0.0.236/trunk@51887 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-26 22:07:57 +00:00
valeski%netscape.com
89e72a3976 fixing bustage
git-svn-id: svn://10.0.0.236/trunk@51886 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-26 22:07:50 +00:00
jj%netscape.com
699e8eca27 File Removed.
git-svn-id: svn://10.0.0.236/trunk@51885 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-26 21:53:43 +00:00
dougt%netscape.com
d11e61e41f People will not like to see my debugging info about object retention. Remov
ing #define.


git-svn-id: svn://10.0.0.236/trunk@51884 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-26 21:44:02 +00:00
brade%netscape.com
f6a4506783 First Checked In.
git-svn-id: svn://10.0.0.236/trunk@51883 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-26 21:27:05 +00:00
terry%mozilla.org
02502d0c41 Fixed perl warning.
git-svn-id: svn://10.0.0.236/trunk@51882 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-26 21:14:01 +00:00
varada%netscape.com
abe68f9fc4 fixing string.ini for online help from show example
git-svn-id: svn://10.0.0.236/trunk@51881 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-26 21:13:16 +00:00
varada%netscape.com
c1d12e4258 fixing checklist.ini for online help
git-svn-id: svn://10.0.0.236/trunk@51880 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-26 21:12:56 +00:00
varada%netscape.com
ff6e49dbb9 fix for bug#10810 if Help=Online;url is included in the ini file then the online help is launched with that url
git-svn-id: svn://10.0.0.236/trunk@51879 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-26 21:10:39 +00:00
valeski%netscape.com
f94df2ee59 17270, r=dougt@netscape.com. These changes move FTP from interface pointers to COMptrs. There is also a variable name change, mUrl -> mURL. Also some extraneous pipe code has been removed.
git-svn-id: svn://10.0.0.236/trunk@51878 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-26 20:55:50 +00:00
mstoltz%netscape.com
c48a5396a0 Fixed Windows breakage from converting const nsZIpItem* to nsZipItem*. r=dveditz
git-svn-id: svn://10.0.0.236/trunk@51877 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-26 20:45:21 +00:00
mscott%netscape.com
a29d572364 Bug #14928 -- > url dispatching. Change DoContent to return a stream listener instead of
a nsIContentViewer.
r=travis


git-svn-id: svn://10.0.0.236/trunk@51876 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-26 20:35:21 +00:00
rogerl%netscape.com
1aa494ee2b Changed from pic to PIC for Solaris build per Vishy.
git-svn-id: svn://10.0.0.236/trunk@51875 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-26 20:34:55 +00:00
pinkerton%netscape.com
9cbdc1b888 add case for unicode flavor, which i guess was forgotten before. now apps that request unicode get unicode. bug# 16267 r=hyatt/pav. thanks to VYV03354@nifty.ne.jp for pointing this out.
git-svn-id: svn://10.0.0.236/trunk@51874 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-26 20:33:30 +00:00
pinkerton%netscape.com
3490b579c3 Cleaned up the code and fixed a bug where data was not being null terminated on winNT.
partial fix for bug #16267 (r=hyatt/pav).


git-svn-id: svn://10.0.0.236/trunk@51873 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-26 20:31:54 +00:00
ftang%netscape.com
4c6ccd7e59 change #ifdef DEBUG_tague to #if defined(DEBUG_tague) || defined(DEBUG_ftang)
git-svn-id: svn://10.0.0.236/trunk@51872 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-26 20:17:36 +00:00
nhotta%netscape.com
643eb34912 Unicode encoder related change for unmapped characters.
If unicode encoder cannot map a character to the target encoding, it returns used unicode length including the unmapped character.
That is true for all encoder except ISO-2022-JP (bug #15706). Changed the callers to match the encoder behavior. bug 8865, r=cata.


git-svn-id: svn://10.0.0.236/trunk@51871 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-26 20:16:11 +00:00
ftang%netscape.com
a72076d654 fix IME assertion problem . r=jfrancis
git-svn-id: svn://10.0.0.236/trunk@51870 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-26 20:04:47 +00:00
putterman%netscape.com
8189fffdfb No bug. reviewed by bienvenu. OnKeyDeleted wasn't sending the correct parent
thread value because the message was being deleted before we saved off the parent.


git-svn-id: svn://10.0.0.236/trunk@51869 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-26 19:52:20 +00:00
slamm%netscape.com
861592dd89 Tweak sidebar styles. r=german.
git-svn-id: svn://10.0.0.236/trunk@51868 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-26 19:45:25 +00:00
dougt%netscape.com
f769dc5560 merging FILESEP and DIRECTORY_SEPARATOR. they both do the same thing.
git-svn-id: svn://10.0.0.236/trunk@51867 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-26 19:45:18 +00:00
slamm%netscape.com
595ab124a0 Use real separator on personal toolbar menus. r=hyatt
git-svn-id: svn://10.0.0.236/trunk@51866 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-26 19:44:22 +00:00
slamm%netscape.com
7d6ce80686 Add bookmarks button (bug #14502) to personal toolbar. Fix spacing of buttons on personal toolbar. r=hyatt
git-svn-id: svn://10.0.0.236/trunk@51865 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-26 19:43:32 +00:00
mstoltz%netscape.com
ea05167e43 Added GetInputStream function to nsJAR in order to extract files into memory rather than to disk. Created nsJARInputStream to carry this data. Most of the code for this change went into nsZipArchive, which now handles either file output or output to memory. bug=16077 r=dveditz
git-svn-id: svn://10.0.0.236/trunk@51864 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-26 19:43:26 +00:00
dougt%netscape.com
94bbe207a4 Cleanup.
Removing convertTo* routines

Not hooked up to build yet.


git-svn-id: svn://10.0.0.236/trunk@51863 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-26 19:34:56 +00:00
dougt%netscape.com
c10be2aa21 1) Change ownership model internally. (17009)
2) Fixed IMAP password dialog problems by adding a PR_SLEEP() in
   nested event loop.
3) Now using a pushed event loop.

r=valeski, mscott.


git-svn-id: svn://10.0.0.236/trunk@51862 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-26 19:30:50 +00:00
valeski%netscape.com
6f9e12e047 17144. api change to nsIIOService.idl made last night missed the javascript caller in here
git-svn-id: svn://10.0.0.236/trunk@51861 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-26 19:08:10 +00:00
nhotta%netscape.com
b6cdf6cb47 Added charset propertiy files so the charset conversion to work properly (for win and mac, unix didn't have the problem), 17254, r=ftang.
git-svn-id: svn://10.0.0.236/trunk@51860 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-26 19:06:41 +00:00
jfrancis%netscape.com
bb138b3c5c reworking editor IME supoprt; r=kin; bugs: 13576, 11878, 11994, 13494, 16432
git-svn-id: svn://10.0.0.236/trunk@51859 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-26 18:54:47 +00:00
rhp%netscape.com
b4e2e646cf Just adding new files...NOT PART OF THE BUILD!
git-svn-id: svn://10.0.0.236/trunk@51858 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-26 18:50:08 +00:00
despotdaemon%netscape.com
cceb1924b6 Pseudo-automatic update of changes made by mcs@netscape.com.
git-svn-id: svn://10.0.0.236/trunk@51857 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-26 17:55:28 +00:00
norris%netscape.com
e544596aa2 Remove method duplication in NativeGlobal.
Add javadoc comments to EcmaError.


git-svn-id: svn://10.0.0.236/trunk@51856 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-26 17:22:23 +00:00
norris%netscape.com
9be2ae4e35 Get filename and line number into uncaught exception reports.
git-svn-id: svn://10.0.0.236/trunk@51855 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-26 17:06:12 +00:00
slamm%netscape.com
0f3c71a001 Need path to gunzip. This should be configured.
git-svn-id: svn://10.0.0.236/trunk@51854 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-26 16:56:00 +00:00
terry%mozilla.org
4f2f6dae6d Update version to 1.3 (which means unstable, tip-of-CVS version).
git-svn-id: svn://10.0.0.236/trunk@51853 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-26 15:49:58 +00:00
terry%mozilla.org
8f7faa2f78 Fixed perl error caused by previous change.
git-svn-id: svn://10.0.0.236/trunk@51852 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-26 15:48:25 +00:00
terry%mozilla.org
abfa77727b Make version number be 1.2, we will be spinning a tarball.
git-svn-id: svn://10.0.0.236/trunk@51850 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-26 15:37:12 +00:00
vidur%netscape.com
1291c59ad4 Replaced delete operator calls with Recycle(). R=joki
git-svn-id: svn://10.0.0.236/trunk@51849 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-26 14:56:41 +00:00
vidur%netscape.com
252d9255a6 Switched HTML content sink to be more incremental in content creation. Fixes bugs 11141, 854, et. al. R=kipp
git-svn-id: svn://10.0.0.236/trunk@51848 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-26 14:55:51 +00:00
dcone%netscape.com
73c37400ce Added a clip for the borders and fixed how they are rendered. r=karnaze
bugs:10311,8737,14566


git-svn-id: svn://10.0.0.236/trunk@51847 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-26 14:34:17 +00:00
rods%netscape.com
e181f8b3fa addedmore tests
git-svn-id: svn://10.0.0.236/trunk@51846 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-26 14:16:15 +00:00
rods%netscape.com
6c5ee72d6b initial add
git-svn-id: svn://10.0.0.236/trunk@51845 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-26 14:15:51 +00:00
rods%netscape.com
aaced0b882 The button "active" state needed one more pixel width in the border
r=dcone,b=17154


git-svn-id: svn://10.0.0.236/trunk@51844 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-26 14:05:49 +00:00
warren%netscape.com
7230bc55ee Fixed NewChannel to pass null for new originalURL argument.
git-svn-id: svn://10.0.0.236/trunk@51843 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-26 10:37:37 +00:00
hyatt%netscape.com
2d7de08a49 more stubbing out of dynamic overlays r=pavlov
git-svn-id: svn://10.0.0.236/trunk@51842 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-26 10:03:13 +00:00
tbogard%aol.net
ca83b4534f Added a CanHandleContentType to identify if a given instantiated docShell can handle the requested document type.
git-svn-id: svn://10.0.0.236/trunk@51841 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-26 09:51:36 +00:00
warren%netscape.com
b9f22ce6f8 Fixed missed change to NewInputStreamChannel
git-svn-id: svn://10.0.0.236/trunk@51840 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-26 09:51:01 +00:00
warren%netscape.com
fe1c294273 Added nsIChannel::GetOriginalURI so that we can get back to the original chrome file (bug#17144). r=rpotts,mscott
git-svn-id: svn://10.0.0.236/trunk@51839 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-26 09:16:24 +00:00
endico%mozilla.org
7ecb2f45fd make the grep for server error not so noisy 2>&1
git-svn-id: svn://10.0.0.236/trunk@51838 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-26 08:37:07 +00:00
hyatt%netscape.com
1ca2484933 change from strings to URIs r=pavlov
git-svn-id: svn://10.0.0.236/trunk@51837 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-26 08:21:32 +00:00
hyatt%netscape.com
f54d64efad stubbing out dynamic overlay loading and converting chrome registry to IDL r=pavlov
git-svn-id: svn://10.0.0.236/trunk@51836 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-26 08:13:25 +00:00
mscott%netscape.com
2e56fd5c66 Bug #14928 --> url dispatching. convert nsIContentHandler.idl, nsIURIDispatcher.idl and nsIContentListener.idl
into .h files.
no reviewer yet. the code review for url dispatching will come later.


git-svn-id: svn://10.0.0.236/trunk@51835 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-26 07:11:44 +00:00
mscott%netscape.com
bd9b666efc Bug #14928 --> first pass at several key interfaces for url dispatching.
Not part of the build and no reviewer yet. The review will come later on when we review url dispatching


git-svn-id: svn://10.0.0.236/trunk@51834 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-26 07:10:27 +00:00
slamm%netscape.com
a174cc125d New sidebar ui. One panel open at a time. No bug (yet...). r=pavlov
git-svn-id: svn://10.0.0.236/trunk@51832 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-26 05:46:00 +00:00
ramiro%fateware.com
2f58cc8fd3 Fix the invocation of regxpcom.
git-svn-id: svn://10.0.0.236/trunk@51831 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-26 05:42:33 +00:00
rpotts%netscape.com
58b6be1d08 Cleanup - changed setter/getter methods to an attribute.
git-svn-id: svn://10.0.0.236/trunk@51830 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-26 04:49:56 +00:00
rpotts%netscape.com
4c6919a678 Added CancelPendingChannel(...) which allows a nsHTTPChannel to remove itself from the list of pending requests if it is cancelled... This was causing a leak :-(
git-svn-id: svn://10.0.0.236/trunk@51829 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-26 04:49:23 +00:00
rpotts%netscape.com
1d93a7a7ae Cleanup - Moved the PostData stream from the nsHTTPChannel to the nsHTTPRequest... The PostStream is now released once the request has been sent to the server since it is no longer useful. Fixed up Cancel to remove the channel from the list of pending requests if necessary.
git-svn-id: svn://10.0.0.236/trunk@51828 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-26 04:48:26 +00:00
rpotts%netscape.com
dc04d4b53b Cleanup - Removed NSPIPE2 ifdefs. Fixed up the nsHTTPResponse constructor which no longer takes a nsIInputStream.
git-svn-id: svn://10.0.0.236/trunk@51827 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-26 04:45:03 +00:00
troy%netscape.com
bd46e7911f Changed SetView/GetView to take an additional argument which is the
pres context


git-svn-id: svn://10.0.0.236/trunk@51822 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-26 04:44:41 +00:00
rpotts%netscape.com
a3b472c211 Cleanup - Removed unused methods and members. Changed char* member to nsCString
git-svn-id: svn://10.0.0.236/trunk@51821 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-26 04:43:19 +00:00
rods%netscape.com
3c48aa841c minor changes to previous checkin to handle css sizing like NavQuirks
b=6695,r=none


git-svn-id: svn://10.0.0.236/trunk@51820 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-26 04:29:20 +00:00
mcafee%netscape.com
3b76676f40 Moved process killing stuff into killproc(), added alarm timeout for bloattest. code=alecf, r=mcafee
git-svn-id: svn://10.0.0.236/trunk@51819 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-26 04:07:03 +00:00
rods%netscape.com
8aef13e868 Completely rewrote the the Reflow for gfx text controls, factored out separate
reflow paths for NavQuirks and Standard mode. Also, Standard mode reflow now obeys
cols rows etc. Although there may be a little code bloat, this will make maintaining
the input text and textarea much much easier.
r=kmcclusk, b=6695,7461


git-svn-id: svn://10.0.0.236/trunk@51818 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-26 03:46:18 +00:00
pollmann%netscape.com
052a729260 Bug 17079: URL encoding of form element values should convert + to %2B and / as needed: r=nisheeth
git-svn-id: svn://10.0.0.236/trunk@51817 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-26 03:08:17 +00:00
morse%netscape.com
4b5a4b8e5d code cleanup, r=rickg
git-svn-id: svn://10.0.0.236/trunk@51816 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-26 02:46:34 +00:00
nisheeth%netscape.com
aea3ade8fe Follow-up to fix for bug 10456. I made the earlier changes to the non-Necko part of the code! Making the same changes to the ifdef NECKO part.
git-svn-id: svn://10.0.0.236/trunk@51815 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-26 02:42:23 +00:00
tbogard%aol.net
2e96f47e2e Changed nsIProgress::addListener and nsIWebBrowser::addListener to be addProgressListener and addWebBrowserListener respectively. This is to avoid confusing name conflicts. Implemented nsIWebBrowser::GetDocument() and nsIWebBrowser::GetDocShell().
git-svn-id: svn://10.0.0.236/trunk@51814 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-26 02:37:14 +00:00
tbogard%aol.net
254fe24a86 Removed nsIWebBrowserListener in favor of the new more generic nsIInterfaceRequestor. Added some interface boundary parameter validation. Added implementation for add and remove listener.
git-svn-id: svn://10.0.0.236/trunk@51813 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-26 02:26:57 +00:00
tbogard%aol.net
566e36cc10 Added some documentation.
git-svn-id: svn://10.0.0.236/trunk@51812 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-26 02:23:38 +00:00
sgehani%netscape.com
499a258aa7 Fixes bug 11209: we now detect free space larger than 2^32 bytes in the Install Wizard. [r=cathleen]
git-svn-id: svn://10.0.0.236/trunk@51811 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-26 02:12:00 +00:00
sgehani%netscape.com
95d88cbf7b Fixes bug 17190: extract only core_*/* files to obtain the XPInstall engine run by the Install Wizard. [r=cathleen]
git-svn-id: svn://10.0.0.236/trunk@51810 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-26 02:08:56 +00:00
wtc%netscape.com
f8f5eb822d Added missing function declarations to eliminate compiler warnings.
Checked in on behalf of Colin Blakes <colin@theblakes.com>.


git-svn-id: svn://10.0.0.236/trunk@51809 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-26 02:01:38 +00:00
nisheeth%netscape.com
aef9243c78 Bugs 10456, 15027, 11948. r=harishd. We no longer try to load up external DTD files unless those DTD files are referred to via a chrome url.
git-svn-id: svn://10.0.0.236/trunk@51808 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-26 01:58:41 +00:00
wtc%netscape.com
be5e5badd8 Bugzilla bug #17184: PR_Bind should not set the SO_REUSEADDR socket
option.  The HAVE_SOCKET_REUSEADDR macro is now obsolete.  Tests
that depended on the old PR_Bind behavior needs to call PR_SetSocketOption
before PR_Bind.
Modified files: _beos.h, _os2.h, _unixos.h, _win16.h, _win95.h, _winnt.h,
prsocket.c, ptio.c, accept.c, acceptread.c, sel_spd.c, servr_kk.c,
servr_ku.c, servr_uk.c, and servr_uu.c.


git-svn-id: svn://10.0.0.236/trunk@51807 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-26 01:58:10 +00:00
pavlov%netscape.com
bca7914d4c merge some changes that got dropped somehow during the landing r=hyatt
git-svn-id: svn://10.0.0.236/trunk@51806 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-26 01:54:39 +00:00
tbogard%aol.net
67f77212c6 Updated to use new nsDocShellBase class. Removed a bunch of code from this level so it instead can be pulled from the base class.
git-svn-id: svn://10.0.0.236/trunk@51802 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-26 01:46:22 +00:00
tbogard%aol.net
2541c54b1d Added basedocshell library to the list of bound libraries.
git-svn-id: svn://10.0.0.236/trunk@51801 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-26 01:45:11 +00:00
tbogard%aol.net
97c0df855a Created a base class library that will provide the shared docShell implmentation.
git-svn-id: svn://10.0.0.236/trunk@51800 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-26 01:44:00 +00:00
slamm%netscape.com
10813277ec Fix typo.
git-svn-id: svn://10.0.0.236/trunk@51799 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-26 01:40:23 +00:00
tbogard%aol.net
04e0ba7204 added files: mozilla/xpcom/base/nsIInterfaceRequestor.idl
git-svn-id: svn://10.0.0.236/trunk@51798 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-26 01:37:45 +00:00
tbogard%aol.net
67b737d3e4 Adding nsIInterfaceRequestor.idl to the list of built IDL files.
git-svn-id: svn://10.0.0.236/trunk@51797 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-26 01:37:29 +00:00
waqar%netscape.com
17e91e8ab8 # 15904
r vidur
d fixes a problem where first character of the comment was being destroyed.


git-svn-id: svn://10.0.0.236/trunk@51796 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-26 01:30:55 +00:00
edburns%acm.org
4dcff0c574 r=edburns@acm.org
author=idk@eng.sun.com
#16149
approver=edburns@acm.org


git-svn-id: svn://10.0.0.236/trunk@51795 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-26 01:29:09 +00:00
mccabe%netscape.com
0683dd99f5 Initial checkin of mozbot code-reviewing functionality.
git-svn-id: svn://10.0.0.236/trunk@51794 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-26 01:22:00 +00:00
Jerry.Kirk%Nexwarecorp.com
d6610d45df Trying to fix complex clipping to reduce redraws in apprunner.
Also fixed key handling for CTRL-keys.
r=kedl


git-svn-id: svn://10.0.0.236/trunk@51793 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-26 01:13:20 +00:00
scc%netscape.com
6f74b3fb2f Don't |delete| interface pointers. Use |AddRef()| and |Release()| instead. Bug #16762, r=pinkerton.
git-svn-id: svn://10.0.0.236/trunk@51792 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-26 00:49:33 +00:00
Jerry.Kirk%Nexwarecorp.com
18c97ff34d Fixing problem with &nbsp; being put into empty text fields
This is relly more of a hack, not a fix.
Bug 16886	r=kedl


git-svn-id: svn://10.0.0.236/trunk@51791 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-26 00:45:24 +00:00
Jerry.Kirk%Nexwarecorp.com
b7f540b9f2 Pulling out changes that made nsAppShell inherit from nsIObserver
that danm thought I should make cause he changed his mind.
r=kedl


git-svn-id: svn://10.0.0.236/trunk@51790 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-26 00:42:08 +00:00
hangas%netscape.com
08883ca9a8 new ui. r=pavlov,german,hyatt
git-svn-id: svn://10.0.0.236/trunk@51789 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-26 00:39:19 +00:00
sgehani%netscape.com
7eccb655b3 First Checked In.
git-svn-id: svn://10.0.0.236/trunk@51788 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-26 00:35:41 +00:00
sgehani%netscape.com
bf1287cb0c *** NOT PART OF BUILD ***
Added ASEncoder tool -- AppleSingle encoder and decoder -- with two interfaces: 

1> Menu and file selector based GUI
2> AppleScript interface (or callable from any OSA compliant scriptable component)

Fixes bug: 16947.


git-svn-id: svn://10.0.0.236/trunk@51787 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-26 00:34:40 +00:00
pinkerton%netscape.com
a5ef534d81 fix leak of grippy structs when toolbox went away. (r=bienvenu).
git-svn-id: svn://10.0.0.236/trunk@51786 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-26 00:22:48 +00:00
ducarroz%netscape.com
6d43e18270 Checking it again as for reason, the file I've checked in last time is corrupted.
git-svn-id: svn://10.0.0.236/trunk@51785 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-26 00:16:33 +00:00
jefft%netscape.com
002757422d fixed bug 17176 -- [DOGFOOD] [Reqression] Can't save attachment; we are not generating message uri correctly; r=mscott
git-svn-id: svn://10.0.0.236/trunk@51784 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-26 00:07:27 +00:00
bienvenu%netscape.com
b361c28994 turn off meteors and spinning barber pole for now r=mscott
git-svn-id: svn://10.0.0.236/trunk@51783 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-25 23:45:19 +00:00
ssu%netscape.com
719cf747d3 updated/added/removed install error values to accomodate the fileop
routines checked in over the weekend. r=sgehani.


git-svn-id: svn://10.0.0.236/trunk@51782 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-25 23:44:09 +00:00
ducarroz%netscape.com
e45bf9a654 Fix build bustage for nhotta
git-svn-id: svn://10.0.0.236/trunk@51781 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-25 23:29:24 +00:00
nhotta%netscape.com
bcc540225b Changed unicode conversion for mail send.
Added a fallback for unmapped characters, moved entity conversion after the unicode conversion as the fallback, avoided to convert twice for text/html case, part of bug fix 15475, r=rhp.


git-svn-id: svn://10.0.0.236/trunk@51780 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-25 23:21:30 +00:00
ssu%netscape.com
879c9f145f fixed parameter problem during compilation for sgehani. r=sgehani
git-svn-id: svn://10.0.0.236/trunk@51779 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-25 23:16:46 +00:00
kipp%netscape.com
3cbf0c252a Added missing resources
git-svn-id: svn://10.0.0.236/trunk@51778 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-25 23:06:05 +00:00
sgehani%netscape.com
32a0978c7e Fix for bug 17137: added complete and abort routines for mac alias creation XPInstall API. [r=ssu]
git-svn-id: svn://10.0.0.236/trunk@51777 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-25 23:05:44 +00:00
kipp%netscape.com
60ea075c3f Reduce the number of cases that trigger noisy debug noise
git-svn-id: svn://10.0.0.236/trunk@51776 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-25 23:05:31 +00:00
kipp%netscape.com
dfe78df5d9 Turned off some more debug noise
git-svn-id: svn://10.0.0.236/trunk@51775 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-25 23:05:15 +00:00
kipp%netscape.com
4bb755ead2 r=ftang,brade, bug=16886,9101 - the text transformer was letting some nbsp's through in a few special cases; the text transformer also squelches shy characters now (9101)
git-svn-id: svn://10.0.0.236/trunk@51774 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-25 23:04:51 +00:00
kipp%netscape.com
ae6b64e566 r=troy, bug=10497; we now support min/max width/height for image elements
git-svn-id: svn://10.0.0.236/trunk@51773 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-25 23:03:50 +00:00
kipp%netscape.com
df248f10b1 Quieted down some debug noise and added a missing newline to a printf
git-svn-id: svn://10.0.0.236/trunk@51772 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-25 23:02:43 +00:00
law%netscape.com
6f73e6604a Bug #14999; last holdout that was using toolkit app core - changed to use OpenDialog; r=davidm@netscape.com
git-svn-id: svn://10.0.0.236/trunk@51771 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-25 23:02:05 +00:00
dougt%netscape.com
11d905c2a9 ack! what was I thinking.
#ifdef'ing not including!!


git-svn-id: svn://10.0.0.236/trunk@51770 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-25 22:57:40 +00:00
morse%netscape.com
8bd629f104 fix bug 17172 -- wrong cookie is displayed, r=goodsger
git-svn-id: svn://10.0.0.236/trunk@51769 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-25 22:56:24 +00:00
kmcclusk%netscape.com
9bb05775e0 Register nsFormProcessor service to exercise nsIFormProcessor interface.
bug 17060. r=karnaze@netscape.com


git-svn-id: svn://10.0.0.236/trunk@51768 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-25 22:54:12 +00:00
karnaze%netscape.com
f98a03f3ac bug 16284, 14159 nested auto table with percent cells was not growing auto table. nested coord or percent table was only getting min size.
git-svn-id: svn://10.0.0.236/trunk@51767 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-25 22:49:51 +00:00
dougt%netscape.com
bb554f06d2 adding nsIFile to nsXPComInit. Currently it is #ifdef'ed off.
bug 13320


git-svn-id: svn://10.0.0.236/trunk@51766 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-25 22:48:44 +00:00
kmcclusk%netscape.com
2f7a2a20da Call nsIFormProcessor service if it has been registered for each value submitted.
bug=17060 r=karnaze@netscape.com


git-svn-id: svn://10.0.0.236/trunk@51765 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-25 22:48:43 +00:00
dougt%netscape.com
49cd195acc changed license.
git-svn-id: svn://10.0.0.236/trunk@51764 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-25 22:45:56 +00:00
dougt%netscape.com
ea0c601803 Initial checkin of nsIFile test. bug 13320. r=dougt
Not hooked up to build, yet.


git-svn-id: svn://10.0.0.236/trunk@51763 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-25 22:45:12 +00:00
dougt%netscape.com
a2ec5f969a Initial checkin of nsIFile windows implementation. bug 13320. r=dougt
Not hooked up to build, yet.


git-svn-id: svn://10.0.0.236/trunk@51762 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-25 22:44:42 +00:00
akhil.arora%sun.com
bb01f7852c 15579 r=akhil.arora@sun.com Checkin by Igor Nekrestyanov <nis@sparc.spb.su>
Implementation of DOM Events from the W3c DOM Level 2 current working draft


git-svn-id: svn://10.0.0.236/trunk@51761 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-25 22:42:40 +00:00
dougt%netscape.com
6c8ce03672 adding a progID and className. r=me.
NOT PART OF THE BUILD, YET


git-svn-id: svn://10.0.0.236/trunk@51760 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-25 22:33:55 +00:00
dougt%netscape.com
6839959ccf Change net module notification to make proxies lazy. r=dveditz, mozbot.
This reduces memory overhead.


git-svn-id: svn://10.0.0.236/trunk@51759 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-25 22:31:59 +00:00
tbogard%aol.net
ae51cb2bce Added new nsIInterfaceRequestor interface. r=dp
git-svn-id: svn://10.0.0.236/trunk@51758 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-25 22:31:40 +00:00
law%netscape.com
168d68ed9c Bug #14999; use OpenDialog instead of toolkit app core; r=radha@netscape.com
git-svn-id: svn://10.0.0.236/trunk@51757 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-25 22:30:40 +00:00
kmcclusk%netscape.com
64e09df2b9 Export nsIFormProcessor.h on Mac. bug=17060; r=karnaze@netscape.com
git-svn-id: svn://10.0.0.236/trunk@51756 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-25 22:29:22 +00:00
norris%netscape.com
a6a5735f6c Fix 11963 Need security controls on javascript: urls
r=mstoltz@netscape.com


git-svn-id: svn://10.0.0.236/trunk@51755 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-25 22:23:25 +00:00
norris%netscape.com
68023d9210 Use NS_GET_IID, remove dead code, clean up error conditions for XPConnect security calls.
r=jband


git-svn-id: svn://10.0.0.236/trunk@51754 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-25 22:22:16 +00:00
norris%netscape.com
2c73987122 Expose referrer from web shell.
r=travis
needed for bug 11963.


git-svn-id: svn://10.0.0.236/trunk@51753 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-25 22:20:10 +00:00
ftang%netscape.com
80f773ac31 fix not enough gap between IME selection problem. r=erik
git-svn-id: svn://10.0.0.236/trunk@51752 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-25 22:18:41 +00:00
ftang%netscape.com
13ed9a026b delete nsTextRange array after dispatch the text event. fix wrong array indexing. Fix platform to NS attribute mapping problem. r=tague
git-svn-id: svn://10.0.0.236/trunk@51751 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-25 22:17:09 +00:00
rods%netscape.com
2c0b3223a2 Export nsIFormProcessor.h on Linux. bug=17060 r=karnaze@netscape.com
git-svn-id: svn://10.0.0.236/trunk@51750 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-25 22:14:21 +00:00
rhp%netscape.com
a2e9eb0c8e Fix for extra conversion - r: nhotta
git-svn-id: svn://10.0.0.236/trunk@51749 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-25 22:13:39 +00:00
akkana%netscape.com
b3f6f6906c 15463: Re-enable XIM code, add keycode mappings for shifted characters
git-svn-id: svn://10.0.0.236/trunk@51748 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-25 22:11:23 +00:00
putterman%netscape.com
2a9fdcf10a Fixes 12894. Messages show up bold again if they are unread. reviewed by bienvenu.
git-svn-id: svn://10.0.0.236/trunk@51747 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-25 22:10:32 +00:00
alecf%netscape.com
6436fc3afa fix for #17187 - return NS_RDF_NO_VALUE when any particular GetTarget() calls fail
r=bienvenu


git-svn-id: svn://10.0.0.236/trunk@51746 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-25 22:09:07 +00:00
kmcclusk%netscape.com
cee3171b28 Removed build warning caused by overloaded GetDesiredSize. bug=15575. r=buster@netscape.com
git-svn-id: svn://10.0.0.236/trunk@51745 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-25 22:06:41 +00:00
nhotta%netscape.com
58f8c6d8d9 Added MsgUtil.lib and MsgUtilDebug.lib to the project, part of bug fix 15475.
git-svn-id: svn://10.0.0.236/trunk@51744 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-25 22:04:23 +00:00
nhotta%netscape.com
b5fc1e2670 Changed MIME header encoder in unicode conversion. Instead of skipping unmapped characters,
call the fallback funcion (puts a question mark for an unmapped char), part of bug fix 15475, r=rhp.


git-svn-id: svn://10.0.0.236/trunk@51743 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-25 22:03:09 +00:00
putterman%netscape.com
c473237102 Fix 17107. A bunch of view navigation bugs. Reviewed by bienvenu. It fixes:
1.  Next message with no selection finds the next message
2.  It no longer redisplays current message if Next Message finds no next message.
3.  Next/Previous message works if last/first message is selected.


git-svn-id: svn://10.0.0.236/trunk@51742 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-25 22:02:58 +00:00
kmcclusk%netscape.com
3a21a346ef Export nsIFormProcessor.h. bug=17060. r=karnaze@netscape.com
git-svn-id: svn://10.0.0.236/trunk@51741 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-25 22:01:19 +00:00
kmcclusk%netscape.com
389e1be499 First time checked in. Used to provide data during form submission. bug 17060. r=karnaze@netscape.com
git-svn-id: svn://10.0.0.236/trunk@51740 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-25 21:59:39 +00:00
brade%netscape.com
b77f113bda fix plain text editor (r=cmanske@netscape.com)
git-svn-id: svn://10.0.0.236/trunk@51739 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-25 21:57:11 +00:00
brade%netscape.com
56be896120 fix plain text editor (r=cmanske@netscape.com, jfrancis@netscape.com)
git-svn-id: svn://10.0.0.236/trunk@51738 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-25 21:56:37 +00:00
nisheeth%netscape.com
427d3f559c Ongoing work to get macros for timing modules up and running. Not part of the build.
git-svn-id: svn://10.0.0.236/trunk@51737 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-25 20:59:35 +00:00
jefft%netscape.com
86ba1460c9 fixed bug 17179 -- [dogfood] [BLOCKER] Sending a message does not work; escape the recipient list fixes the problem; r=mscott, a=granrose
git-svn-id: svn://10.0.0.236/trunk@51735 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-25 20:17:01 +00:00
brendan%mozilla.org
b3a1017637 - Chouck's changes to grow a JSIdArray if necessary in JS_Enumerate, with my
code review and fixes (r=chouck@geocast.com).  He needs this cuz he has no
  knowledge of exact number of properties before new-style enumerating them.
- Patch up jsdbgapi.c a bit -- it needs to use OBJ_GET_ATTRIBUTES and new APIs
  to do a better job describing properties to a debugger.
- Add JSMSG_CANT_DESCRIBE_PROPS for bogus non-native error case in jsdbgapi.c.
- Fix "Inappropriate" => "invalid" in JSMSG_BAD_ARRAY_LENGTH message.


git-svn-id: svn://10.0.0.236/trunk@51734 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-25 19:24:03 +00:00
wtc%netscape.com
50b0c89090 Bugzilla bug #17093: made plevent.c independent of any internal NSPR
headers (primpl.h in particular).  Tested on Linux, Solaris, Win32,
and Mac. r=srinivas@netscape.com
Modified files: lib/ds/Makefile, lib/ds/Makefile.in, lib/ds/plevent.c


git-svn-id: svn://10.0.0.236/trunk@51733 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-25 19:20:58 +00:00
rhp%netscape.com
b8a92b1146 Fix for composition quoting and cleanup for dogfood - Bug# 16703 16907 7518 - r: bienvenu
git-svn-id: svn://10.0.0.236/trunk@51732 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-25 19:04:56 +00:00
rhp%netscape.com
2624eb5719 Fix for attachments not visible and display crashers - Bug #: 16367 16786 - r: bienvenu
git-svn-id: svn://10.0.0.236/trunk@51731 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-25 19:02:39 +00:00
slamm%netscape.com
3ea969fa03 Need double quotes instead of single quotes to get variable values (fix bloat.pl).
git-svn-id: svn://10.0.0.236/trunk@51730 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-25 18:02:06 +00:00
norris%netscape.com
10dca74c3e Add contributors.
git-svn-id: svn://10.0.0.236/trunk@51729 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-25 17:52:48 +00:00
norris%netscape.com
32c0c98b21 Add license text.
git-svn-id: svn://10.0.0.236/trunk@51728 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-25 17:41:49 +00:00
norris%netscape.com
0034cf42f1 Add license boilerplate.
git-svn-id: svn://10.0.0.236/trunk@51727 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-25 17:36:20 +00:00
slamm%netscape.com
c6ce018a7f Need to 'require' treedata.pl to get warnings and bloat pattern strings.
git-svn-id: svn://10.0.0.236/trunk@51726 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-25 17:31:39 +00:00
norris%netscape.com
72dc3d0896 Should get ReferenceError exception for name not found.
git-svn-id: svn://10.0.0.236/trunk@51723 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-25 16:41:24 +00:00
norris%netscape.com
f8261501a4 Add contributors.
git-svn-id: svn://10.0.0.236/trunk@51722 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-25 16:40:30 +00:00
pavlov%netscape.com
36aeea55b5 don't install registry.rdf r=ramiro
git-svn-id: svn://10.0.0.236/trunk@51718 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-25 14:57:24 +00:00
pavlov%netscape.com
e70752a644 makefile changes for the Editor to editor.css change r=hyatt,ramiro
git-svn-id: svn://10.0.0.236/trunk@51717 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-25 14:56:35 +00:00
kin%netscape.com
d9ba7b42e8 Fix for bug #16701: Editor API Log playback of Insert HRule crashes in DOM code
and     bug #16848: DOM Crash
  - Removed extra NS_RELEASE(attrPrivate) call that was releasing
    attrPrivate one too many times, and causing nsDOMAttributeMap::SetNamedItem() to crash.
r=vidur@netscape.com


git-svn-id: svn://10.0.0.236/trunk@51716 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-25 14:15:34 +00:00
morse%netscape.com
abe3c3c6c8 fixed typos, no code review
git-svn-id: svn://10.0.0.236/trunk@51715 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-25 13:13:48 +00:00
rods%netscape.com
8df8f94df3 added some more tests
git-svn-id: svn://10.0.0.236/trunk@51714 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-25 13:03:47 +00:00
duncan%be.com
5cabd411f1 Fix build under BeOS. r=dveditz
git-svn-id: svn://10.0.0.236/trunk@51713 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-25 06:22:43 +00:00
nisheeth%netscape.com
341cd407a6 Macros for doing performance analysis of modules in Mozilla. This file is not part of the build yet.
git-svn-id: svn://10.0.0.236/trunk@51712 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-25 05:29:20 +00:00
varada%netscape.com
70051f68b3 clearing up some code
git-svn-id: svn://10.0.0.236/trunk@51711 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-25 05:14:12 +00:00
tbogard%aol.net
58ff9e6cc4 Added build directory to build a DLL for various docShells.
git-svn-id: svn://10.0.0.236/trunk@51710 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-25 04:53:13 +00:00
tbogard%aol.net
34c9d3fa3e Clarified some documentation.
git-svn-id: svn://10.0.0.236/trunk@51709 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-25 04:51:59 +00:00
tbogard%aol.net
4cab253cb0 Fixed a Caps problem.
git-svn-id: svn://10.0.0.236/trunk@51708 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-25 04:51:15 +00:00
tbogard%aol.net
14fc92dac1 Framed out the nsHTMLDocShell implementation. Setup to build a library.
git-svn-id: svn://10.0.0.236/trunk@51707 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-25 04:50:22 +00:00
tbogard%aol.net
671fe34afb Defined what nsCHTMLDocShell implements and included the appropriate header files.
git-svn-id: svn://10.0.0.236/trunk@51706 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-25 04:48:14 +00:00
karnaze%netscape.com
46cade08ac bug 5799 - considers percentage width of multiple cells when figuring width of auto table.
git-svn-id: svn://10.0.0.236/trunk@51705 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-25 04:34:28 +00:00
karnaze%netscape.com
18a5e00d6a new regression tests
git-svn-id: svn://10.0.0.236/trunk@51704 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-25 04:30:54 +00:00
tbogard%aol.net
9fa90714c2 Just added support for an NS_IMPL_ISUPPORTS 7 - 10.
git-svn-id: svn://10.0.0.236/trunk@51703 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-25 03:42:10 +00:00
varada%netscape.com
55871f81f5 fix for bug #17011 create copy (for config)invokes a window with text relevant to copy in it
git-svn-id: svn://10.0.0.236/trunk@51702 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-25 03:26:48 +00:00
gagan%netscape.com
e14999de24 Added profiling info for measuring performance when doing -all. Test case only.
git-svn-id: svn://10.0.0.236/trunk@51701 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-25 02:22:30 +00:00
varada%netscape.com
27f90cbea7 fix for bug 16977 - only edit fields showing up in the show summary button
git-svn-id: svn://10.0.0.236/trunk@51700 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-25 01:54:32 +00:00
dp%netscape.com
5871c388a1 bug# 15513 Removing dlldeps.cpp from RDF unix build. Patch from
waterson r=dp


git-svn-id: svn://10.0.0.236/trunk@51699 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-25 00:37:24 +00:00
sdagley%netscape.com
737d3b892e Pre-emptive fix for Mac (and possibly some ports) build bustage - if you're going to use a variable to contain a debug output file name it helps if the variable is declared on all platforms the code compiles for.
git-svn-id: svn://10.0.0.236/trunk@51698 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-25 00:29:15 +00:00
rickg%netscape.com
0aa148382a fixed FMM (in debug code); r=kmcclusk
git-svn-id: svn://10.0.0.236/trunk@51697 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-24 23:48:00 +00:00
mcafee%netscape.com
15b4b203b5 Adding XPCOM_MEM_BLOAT_LOG=1 for RunBloatTest.
git-svn-id: svn://10.0.0.236/trunk@51696 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-24 22:37:34 +00:00
gagan%netscape.com
bd175bcc62 Fixed bug 15963. Host: headers were not including port numbers. r=mozbot,a=self. (/msg mozbot do these diffs look ok to you? Should I continue with my checkin? <CR> mozbot: That is interesting. Please continue. )
git-svn-id: svn://10.0.0.236/trunk@51695 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-24 22:20:52 +00:00
warren%netscape.com
c9c3ab2262 Fixed up dll loading for Windows. It was silently failing.
git-svn-id: svn://10.0.0.236/trunk@51694 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-24 22:01:09 +00:00
dp%netscape.com
ccb30ad195 bug#16742 Fixing delete on nsISupports. Thanks for patch from
<heikki@citec.fi> Plus using IMPL_ and DECL_ macros and removing
operating on refcnt directly. r=troy r=dp


git-svn-id: svn://10.0.0.236/trunk@51693 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-24 16:19:42 +00:00
tonyr%fbdesigns.com
c9b397be49 Updated address book cls id names that changed
git-svn-id: svn://10.0.0.236/trunk@51692 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-24 16:09:21 +00:00
rods%netscape.com
5926a49df7 added more tests
git-svn-id: svn://10.0.0.236/trunk@51691 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-24 16:04:17 +00:00
rods%netscape.com
a16142db50 updated test
git-svn-id: svn://10.0.0.236/trunk@51690 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-24 15:07:41 +00:00
rods%netscape.com
26d3fe5556 added file
git-svn-id: svn://10.0.0.236/trunk@51689 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-24 15:07:25 +00:00
rods%netscape.com
6579bbdd80 added more tests
git-svn-id: svn://10.0.0.236/trunk@51688 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-24 14:05:44 +00:00
ramiro%fateware.com
b15a17bfcb Simplify the package list file.
git-svn-id: svn://10.0.0.236/trunk@51687 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-24 13:44:34 +00:00
pavlov%netscape.com
185c67ee12 remove registry.rdf r=hyatt
git-svn-id: svn://10.0.0.236/trunk@51686 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-24 09:57:49 +00:00
pavlov%netscape.com
f346c3e821 fix build problems on linux r=hyatt
git-svn-id: svn://10.0.0.236/trunk@51685 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-24 09:20:49 +00:00
warren%netscape.com
b9ca6db5fa Fixed logic for XPCOM_MEM_LOG_CLASSES case.
git-svn-id: svn://10.0.0.236/trunk@51684 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-24 09:13:52 +00:00
hyatt%netscape.com
68f0c59d3a chrome registry can now be dynamically built from RDF fragments t=pavlov
git-svn-id: svn://10.0.0.236/trunk@51683 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-24 09:00:41 +00:00
hyatt%netscape.com
e3d0859994 making chrome registry not be a single uber datasource anymore r=pavlov
git-svn-id: svn://10.0.0.236/trunk@51682 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-24 07:27:12 +00:00
rpotts%netscape.com
c275b7fca5 Backing out the fix for bug #15560. This fixes the editor regression - bug #16937
git-svn-id: svn://10.0.0.236/trunk@51681 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-24 07:26:54 +00:00
pavlov%netscape.com
697deffc1d rename PrefsWindow.xul so that it can be better friends with the chrome registry r=hyatt
git-svn-id: svn://10.0.0.236/trunk@51679 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-24 07:16:45 +00:00
pavlov%netscape.com
35c3e18a5e rename to be happy with the chrome registry r=hyatt
git-svn-id: svn://10.0.0.236/trunk@51678 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-24 07:07:04 +00:00
pavlov%netscape.com
17d1767696 renaming file to be consistant with chrome registry
git-svn-id: svn://10.0.0.236/trunk@51677 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-24 07:00:53 +00:00
hyatt%netscape.com
f44eb6e877 make registry work without needing an rdf datasource r=pavlov
git-svn-id: svn://10.0.0.236/trunk@51676 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-24 06:59:30 +00:00
hyatt%netscape.com
dd85258734 renaming skin.css to global.css r=pavlov
git-svn-id: svn://10.0.0.236/trunk@51675 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-24 06:58:38 +00:00
dp%netscape.com
5f7aa39be5 bug#16742 Fixing delete on nsISupports. Thanks for patch from <heikki@citec.fi> Plus using IMPL_ and DECL_ macros and removing operating on refcnt directly. r=dp
git-svn-id: svn://10.0.0.236/trunk@51674 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-24 04:41:17 +00:00
beard%netscape.com
b500a68477 changed GC_abort() to call ExitToShell() rather than abort(). bug=15906
git-svn-id: svn://10.0.0.236/trunk@51673 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-24 03:26:10 +00:00
rods%netscape.com
d0c68ca52f Simple changed from COLOR_DESKTOP to COLOR_APPWORKSPACE for appworkspace enum
for css 2 color setting
fixes bug 16853,r=none


git-svn-id: svn://10.0.0.236/trunk@51672 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-24 03:03:38 +00:00
beard%netscape.com
964164ffe9 removed obsolete access paths. r=sfraser
git-svn-id: svn://10.0.0.236/trunk@51671 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-24 02:45:17 +00:00
varada%netscape.com
676eaa791f fix to bug #16981 changed Text field to editbox so that value can be enterred
git-svn-id: svn://10.0.0.236/trunk@51670 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-24 02:23:44 +00:00
varada%netscape.com
de47ad8dca fix to bug#16973 - nci file editor field is made dynamic text - can be changed only using file browsing
git-svn-id: svn://10.0.0.236/trunk@51669 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-24 02:18:17 +00:00
varada%netscape.com
66774f2d49 fix for bug #7850 - have to call function depend on the Next button on the ini file
git-svn-id: svn://10.0.0.236/trunk@51668 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-24 02:04:37 +00:00
ssu%netscape.com
2aa8ec93a3 fixes bugs #15394, #15603, part of #15644, and #15487. r=sgehani. The
xpinstall fileops functions have been updated to perform error detection
as much as it can prior to executing the command.


git-svn-id: svn://10.0.0.236/trunk@51667 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-24 01:07:45 +00:00
mscott%netscape.com
684b3cc1bb Bug #16927 add GetMessageUrlFromUri to nsIMsgMessageService
r=sspitzer


git-svn-id: svn://10.0.0.236/trunk@51666 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-23 23:39:57 +00:00
mscott%netscape.com
0b058cd771 Bug #16927 implement GetMessageUrlFromUri
r=sspitzer


git-svn-id: svn://10.0.0.236/trunk@51665 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-23 23:39:28 +00:00
troy%netscape.com
d79892b99d Changed nsTextFrame to be derived from nsFrame instead of nsSplittableFrame.
nsTextFrame now has only a next-in-flow pointer and no prev-in-flow pointer.
Subclass nsContinuingTextFrame is used for continuing text frames; it has a
prev-in-flow pointer. This saves 4 bytes


git-svn-id: svn://10.0.0.236/trunk@51664 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-23 23:19:14 +00:00
troy%netscape.com
5859acba05 Space reductions for nsTableRowFrame. Changed mInitializedChildren to be a
frame state bit, and changed mMinRowSpan and mRowIndex to be packed into
one 32-bit field. Total savings of 8 bytes per row frame


git-svn-id: svn://10.0.0.236/trunk@51663 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-23 23:08:30 +00:00
dp%netscape.com
1e5c5df64f bug#16742 Fixing delete on nsISupports. Thanks for patch from
<heikki@citec.fi> r=dp


git-svn-id: svn://10.0.0.236/trunk@51662 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-23 17:34:55 +00:00
dp%netscape.com
b534e205fe bug#16742 Fixing delete on nsISupports. Thanks for patch from <heikki@citec.fi> Plus using IMPL_ and DECL_ macros and removing operating on refcnt directly. r=dp
git-svn-id: svn://10.0.0.236/trunk@51661 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-23 17:33:29 +00:00
duncan%be.com
5ebdcee645 Make profile manager build under BeOS.
r=sspitzer


git-svn-id: svn://10.0.0.236/trunk@51660 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-23 17:13:55 +00:00
beard%netscape.com
8678f1bdd7 never consider code offsets greater than the offset of the instruction, which ensures that the returned file offset is always correct. bug=15906
git-svn-id: svn://10.0.0.236/trunk@51659 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-23 15:57:31 +00:00
tbogard%aol.net
ac565dc536 Framed out nsWebBrowser implementation. Basically just added all the interface functions. Code now has a place to live.
git-svn-id: svn://10.0.0.236/trunk@51658 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-23 07:56:27 +00:00
tbogard%aol.net
92612afa70 Added some includes of the interfaces that make up nsCWebBrowser
git-svn-id: svn://10.0.0.236/trunk@51657 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-23 07:55:39 +00:00
tbogard%aol.net
e9e6e9c241 Just changed some comments and function ordering.
git-svn-id: svn://10.0.0.236/trunk@51656 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-23 07:51:45 +00:00
jband%netscape.com
d7cf1d350b r=mccabe
Primarily fixes to properly handle nsIXPCSecurityManager vetos of
xpconnect activities.

- The code was not propagating security manager vetos of native wrapping up
through xpconnect internals. So, xpconnect was erroneously masking the
security exception with its own 'failed to convert param' exception.
This effects the signatures of nsXPCWrappedNative::GetNewOrUsedWrapper
and nsXPCWrappedJSClass::GetNewOrUsedClass.

- This propagation also helps with the problem that sometimes interfaces
are not set as [scriptable] and we did not make that clear as the source
of xpconnect's failure to convert a param in calling a method. Now this
specific class of exceptions is indicated in the JS exception object when
this happens.

- Added an explicit call to js_ForceGC on shutdown of xpcshell to aid in
avoiding 'false positives' in leak detection

- Return JS_FALSE rather than JS_TRUE when an exception is thrown in
xpcjsid to make the jsengine notices the exception.

- Move #includes that others added in xpcmodule.cpp to xpcprivate.h in
order to maintain the include conventions of this module.

- Avoid throwing an exception if it represents a security manager veto
and the security manager set an exception already.

- Replace uses of nsCOMTypeInfo<> added by scc with NS_GET_IID macros.

- Fixed a methodname misspelling because reviewers care about stuff
like that :)


git-svn-id: svn://10.0.0.236/trunk@51655 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-23 07:20:04 +00:00
tbogard%aol.net
398c14c4d0 Just added support for an NS_IMPL_ISUPPORTS6.
git-svn-id: svn://10.0.0.236/trunk@51654 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-23 06:55:45 +00:00
dp%netscape.com
40ee849701 bug# 16742 Fixing delete on nsISupports Thanks for patch from <heikki@citec.fi>. r=dp
git-svn-id: svn://10.0.0.236/trunk@51639 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-23 06:15:31 +00:00
dp%netscape.com
cc26158c98 bug#16742 Fixing delete on nsISupports. Thanks for patch from
<heikki@citec.fi> Plus using IMPL_ and DECL_ macros and removing
operating on refcnt directly. r=dp


git-svn-id: svn://10.0.0.236/trunk@51638 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-23 05:45:41 +00:00
dp%netscape.com
259487cdf7 bug#16762 Removing delete on a nsISupports. Thanks to
<heikki@citec.fi> Plus changes to use DECL_ and IMPL_ macros and not
hand define mrefcnt. r=dp


git-svn-id: svn://10.0.0.236/trunk@51637 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-23 05:31:46 +00:00
ducarroz%netscape.com
6a5732fdec Bug 14258, implement Send Page, R=alecf
git-svn-id: svn://10.0.0.236/trunk@51636 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-23 04:51:40 +00:00
dougt%netscape.com
9544338359 Modification based on design review.
(THIS IS NOT PART OF THE BUILD YET)


git-svn-id: svn://10.0.0.236/trunk@51635 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-23 04:51:35 +00:00
ducarroz%netscape.com
798afa71eb Bug 14258, implement Send Page. R=alecf
git-svn-id: svn://10.0.0.236/trunk@51634 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-23 04:50:20 +00:00
varada%netscape.com
35cf097c8a fix for bug #10806
git-svn-id: svn://10.0.0.236/trunk@51633 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-23 03:41:41 +00:00
varada%netscape.com
fd98dc9090 fix for bug #5987
git-svn-id: svn://10.0.0.236/trunk@51632 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-23 03:30:43 +00:00
warren%netscape.com
95063f0074 Fixed warnings.
git-svn-id: svn://10.0.0.236/trunk@51631 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-23 03:16:27 +00:00
warren%netscape.com
dc65f370b6 Extended docs to talk about new env vars, and how to read bloat logs.
git-svn-id: svn://10.0.0.236/trunk@51630 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-23 03:16:23 +00:00
warren%netscape.com
c8d6aed234 Cleaned up nsTraceRefcnt environment variables. r=kipp,beard
git-svn-id: svn://10.0.0.236/trunk@51629 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-23 03:16:19 +00:00
troy%netscape.com
c16f001bc8 Changed Run() to give priority to system messages when pumping
messsages. These are the same changes that I made to viewer's message
pump on 9/13/99


git-svn-id: svn://10.0.0.236/trunk@51628 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-23 03:09:30 +00:00
rickg%netscape.com
a553c7ea86 fixed infinite-loop bug 17045 by conditioning control loop. r=buster
git-svn-id: svn://10.0.0.236/trunk@51627 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-23 03:06:19 +00:00
troy%netscape.com
feca3d387f Changed Clear() to check for a shared node arena
git-svn-id: svn://10.0.0.236/trunk@51626 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-23 03:04:21 +00:00
troy%netscape.com
3972c8f69a Removed a comment
git-svn-id: svn://10.0.0.236/trunk@51624 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-23 02:27:07 +00:00
nisheeth%netscape.com
b6ce91bcb5 r=troy. Siblings of frames get traversed iteratively during capturing/restoring of state. Earlier they were traversed recursively which was causing the call stack to grow too large.
git-svn-id: svn://10.0.0.236/trunk@51623 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-23 01:43:49 +00:00
slamm%netscape.com
7c904e3aa8 Add bloat processing. Cleanup tacky code.
git-svn-id: svn://10.0.0.236/trunk@51622 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-23 01:43:28 +00:00
slamm%netscape.com
1cd3dc4f49 Take out debug statement.
git-svn-id: svn://10.0.0.236/trunk@51621 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-23 01:35:40 +00:00
beard%netscape.com
4d41f52154 added line hiliting in -blame mode.
git-svn-id: svn://10.0.0.236/trunk@51619 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-23 01:33:42 +00:00
sspitzer%netscape.com
cfadbaffa1 remove pref-select.html, it is obsolete.
git-svn-id: svn://10.0.0.236/trunk@51616 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-23 01:29:09 +00:00
sspitzer%netscape.com
992247191f remove PrefsWindow.html, it is obsolete.
git-svn-id: svn://10.0.0.236/trunk@51615 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-23 01:26:07 +00:00
slamm%netscape.com
e95f03bd55 Parse build logs for bloat data from warren@netscape.com's bloat tool.
git-svn-id: svn://10.0.0.236/trunk@51614 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-23 01:22:41 +00:00
selmer%netscape.com
2cee86d35e Include IB into the wizard
git-svn-id: svn://10.0.0.236/trunk@51613 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-23 01:21:09 +00:00
slamm%netscape.com
4d6f026b73 Load bloat data. Clean up load_who().
git-svn-id: svn://10.0.0.236/trunk@51612 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-23 01:18:25 +00:00
slamm%netscape.com
5b100726d8 Add bloat data to tree cells that have it.
git-svn-id: svn://10.0.0.236/trunk@51611 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-23 01:18:04 +00:00
pavlov%netscape.com
da0e9ca233 add ScrollRect method to nsIWidget -- implimented on linux and stubbed in nsBaseWidget for mac and windows. Added ifdef'd scrolling code that makes scrolling really fast on linux. Updated nsIWidget.idl (not built) to merge some changes from a branch and added ScrollRect. Added ifdefs for using gtk_fixed instead of gtk_layout as part of the new scrolling code.
git-svn-id: svn://10.0.0.236/trunk@51610 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-23 01:17:20 +00:00
bienvenu%netscape.com
b9244d6491 cleanup dbs at shutdown, r=mscott
git-svn-id: svn://10.0.0.236/trunk@51609 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-23 01:13:10 +00:00
morse%netscape.com
6045d43774 fix bug 16753, memory leak, r=rjc
git-svn-id: svn://10.0.0.236/trunk@51608 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-23 01:01:58 +00:00
gagan%netscape.com
e5e1218aae Post requests are now only read upto the specified amount. Not in the build.
git-svn-id: svn://10.0.0.236/trunk@51607 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-23 00:47:24 +00:00
varada%netscape.com
91451df7a3 fixes to bug#14014
git-svn-id: svn://10.0.0.236/trunk@51606 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-23 00:38:51 +00:00
varada%netscape.com
5ea1cd0e4c fixes to bug #2794
git-svn-id: svn://10.0.0.236/trunk@51605 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-23 00:38:06 +00:00
beard%netscape.com
d7abad5a6c fixing breakage by #undef BlockAllocCat
git-svn-id: svn://10.0.0.236/trunk@51604 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-23 00:21:17 +00:00
ramiro%fateware.com
0816082384 Add lots of comments. Deal with %dir. Deal with duplicate entries.
Properly call regxpcom each time components get installed.
Not part of SeaMonkey.


git-svn-id: svn://10.0.0.236/trunk@51603 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-23 00:15:23 +00:00
selmer%netscape.com
17b7d985c2 Fixups to makefile system for globals dll
git-svn-id: svn://10.0.0.236/trunk@51602 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-23 00:12:13 +00:00
selmer%netscape.com
a1f6f3c1a3 Feeble first DLL for IB
git-svn-id: svn://10.0.0.236/trunk@51601 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-23 00:10:24 +00:00
pnunn%netscape.com
efe6dfa795 fix for mac bustage. pnunn.
git-svn-id: svn://10.0.0.236/trunk@51600 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-23 00:10:14 +00:00
selmer%netscape.com
52de2be8a7 adding globals
git-svn-id: svn://10.0.0.236/trunk@51598 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-22 23:46:35 +00:00
selmer%netscape.com
36e4eb89ff globalizing includes
git-svn-id: svn://10.0.0.236/trunk@51597 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-22 23:45:20 +00:00
dmose%mozilla.org
d924535fa1 cmd/winfe lives on in the MozillaClassic branch only. removing from the trunk. a=leaf@mozilla.org
git-svn-id: svn://10.0.0.236/trunk@51596 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-22 23:44:52 +00:00
selmer%netscape.com
5b578df427 globals into a dll
git-svn-id: svn://10.0.0.236/trunk@51595 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-22 23:42:02 +00:00
sspitzer%netscape.com
1668a389f4 make the xul look pretty by using html fieldsets and legends.
git-svn-id: svn://10.0.0.236/trunk@51593 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-22 23:31:05 +00:00
ramiro%fateware.com
295053baa2 Dont put the static rdfutil thing inside the FORCE_ALL block. r=alecf.
git-svn-id: svn://10.0.0.236/trunk@51592 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-22 23:28:30 +00:00
selmer%netscape.com
00ffb48018 Globals implementation
git-svn-id: svn://10.0.0.236/trunk@51591 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-22 23:28:27 +00:00
sspitzer%netscape.com
54b8cc865e changes for correctness and to make the pref ui look better.
git-svn-id: svn://10.0.0.236/trunk@51590 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-22 23:27:43 +00:00
sspitzer%netscape.com
aaff3bbf7e make the xul look pretty by using html fieldsets and legends.
fix #17078:  fix the xul so that pref-messages.xul stops asserting like mad or crashing.


git-svn-id: svn://10.0.0.236/trunk@51589 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-22 23:25:18 +00:00
sspitzer%netscape.com
17aab81855 make the xul look pretty by using html fieldsets and legends.
git-svn-id: svn://10.0.0.236/trunk@51588 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-22 23:22:52 +00:00
endico%mozilla.org
bb01bac34c improve error message mailed when cvs update dies
git-svn-id: svn://10.0.0.236/trunk@51587 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-22 23:07:44 +00:00
beard%netscape.com
f0acfa932d #include "xp_mcom.h" to fix link breakage.
git-svn-id: svn://10.0.0.236/trunk@51586 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-22 22:58:28 +00:00
radha%netscape.com
3139e13324 Turning off debug flag that got set in my previous checkin
git-svn-id: svn://10.0.0.236/trunk@51585 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-22 22:58:16 +00:00
beard%netscape.com
fb7e21676d MLK: Fixed implementations of QueryInterface, AddRef, and Release to perform correct reference counting. bug=15380, r=evaughan
git-svn-id: svn://10.0.0.236/trunk@51584 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-22 22:50:01 +00:00
pnunn%netscape.com
0ac69a866f To fix mac bustage. pnunn.
git-svn-id: svn://10.0.0.236/trunk@51583 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-22 22:48:04 +00:00
beard%netscape.com
2a64a10c92 synched.
git-svn-id: svn://10.0.0.236/trunk@51582 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-22 22:39:51 +00:00
beard%netscape.com
5d5cc2a548 changed SharedGlobal.java to Global.java
git-svn-id: svn://10.0.0.236/trunk@51581 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-22 22:39:23 +00:00
norris%netscape.com
986ea91e68 Changes for improved errors-as-exceptions handling.
git-svn-id: svn://10.0.0.236/trunk@51578 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-22 22:02:58 +00:00
norris%netscape.com
92ab48d1d8 Use simpler, more widely applicable structure for global. Also avoids test failure for Function called as a function.
git-svn-id: svn://10.0.0.236/trunk@51577 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-22 22:00:21 +00:00
endico%mozilla.org
9b64c7df39 cvs error notification was busted
git-svn-id: svn://10.0.0.236/trunk@51576 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-22 21:59:10 +00:00
norris%netscape.com
a59a557d7d A NativeString object shouldn't be unwrapped to a primitive.
git-svn-id: svn://10.0.0.236/trunk@51575 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-22 21:58:54 +00:00
pnunn%netscape.com
4791c61ec9 bug#16785: forgot to checkin the include file change. Removing old, obsolete get image type call.
pnunn.


git-svn-id: svn://10.0.0.236/trunk@51574 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-22 21:46:56 +00:00
danm%netscape.com
abe94c118b set window title using multibyte. submitted by jamestoder@yahoo.com. r:ftang@netscape.com, by lack of timely objection.
git-svn-id: svn://10.0.0.236/trunk@51573 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-22 21:45:19 +00:00
sspitzer%netscape.com
35c39da3d2 fix typo. #17087.
"I think about the education that I missed.  but then my homework was never quite like this.  Got it bad, got it bad, got it bad..."


git-svn-id: svn://10.0.0.236/trunk@51572 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-22 21:41:13 +00:00
danm%netscape.com
0750508062 making GetACPString parameter const. part of submission from jamestoder@yahoo.com. r:me
git-svn-id: svn://10.0.0.236/trunk@51571 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-22 21:41:04 +00:00
akkana%netscape.com
e9db800eb8 Update a few of the standalone tests. Not part of the build
git-svn-id: svn://10.0.0.236/trunk@51570 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-22 21:35:16 +00:00
gagan%netscape.com
78b44f58d8 a dummy post request file for testing post requests in HTTP. not in the build.
git-svn-id: svn://10.0.0.236/trunk@51569 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-22 21:27:38 +00:00
gagan%netscape.com
6955bb58c9 Added /post test as well. Not in the build.
git-svn-id: svn://10.0.0.236/trunk@51568 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-22 21:24:57 +00:00
gagan%netscape.com
ce76e5ae7d Added stuff to the test server to handle post requests as well. Not in the build.
git-svn-id: svn://10.0.0.236/trunk@51567 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-22 21:21:30 +00:00
ftang%netscape.com
59e649828f fix locale mapping for CLE. r=ftang
git-svn-id: svn://10.0.0.236/trunk@51566 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-22 21:11:50 +00:00
bienvenu%netscape.com
0ef6e9d38d one more news leak fix r=sspitzer
git-svn-id: svn://10.0.0.236/trunk@51565 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-22 21:11:17 +00:00
alecf%netscape.com
31378ed4eb update status
git-svn-id: svn://10.0.0.236/trunk@51564 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-22 21:06:59 +00:00
pnunn%netscape.com
c4d7a55705 bug#16785. r:neeti@netscape.com. Clean up after changing mime handling in imglib.
git-svn-id: svn://10.0.0.236/trunk@51563 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-22 21:06:28 +00:00
alecf%netscape.com
ba7f0a4cb5 prefwindow is now a service thanks to nsIModule conversion
git-svn-id: svn://10.0.0.236/trunk@51562 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-22 21:06:26 +00:00
srinivas%netscape.com
2068a5408d OpenVMS updates by colin@theblakes.com
git-svn-id: svn://10.0.0.236/trunk@51561 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-22 21:06:08 +00:00
alecf%netscape.com
450ceda4e0 convert nsPrefWindow to a module
prefwindow was doing it's own singleton management, so changed it to use getService()


git-svn-id: svn://10.0.0.236/trunk@51560 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-22 21:05:31 +00:00
bienvenu%netscape.com
16ace9def7 one more addrbook memory leak fix r=mscott
git-svn-id: svn://10.0.0.236/trunk@51559 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-22 21:04:45 +00:00
pnunn%netscape.com
42f2519c84 bug#15585. r:neeti@netscape.com. Fix build warnings.
git-svn-id: svn://10.0.0.236/trunk@51558 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-22 21:04:28 +00:00
pnunn%netscape.com
4be52ad659 Bug#13505: r:neeti@netscape.com. Replace str()'s with nsCRT()'s & nspr()'s.
git-svn-id: svn://10.0.0.236/trunk@51556 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-22 21:03:52 +00:00
akkana%netscape.com
10a4fb8f22 16988: filter out BR type=_moz, which the editor inserts. r=syd
git-svn-id: svn://10.0.0.236/trunk@51555 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-22 21:03:29 +00:00
scc%netscape.com
866732108c File Removed.
git-svn-id: svn://10.0.0.236/trunk@51554 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-22 21:02:15 +00:00
srinivas%netscape.com
bf8979df4c PR_SetThreadPriority should set the priority unconditionally.
git-svn-id: svn://10.0.0.236/trunk@51553 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-22 21:01:51 +00:00
racham%netscape.com
3f91090fc5 r=sspitzer. Fix for bug 16209. This checkin fixes mozregistry entries to avoid crashes from M9 or builds prior to that
git-svn-id: svn://10.0.0.236/trunk@51552 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-22 21:00:53 +00:00
jefft%netscape.com
8f8c3afe28 fixed bug 11892 - [dogfood] When Name or Address of a recipient includes 8-bit characters address is incorrectly formed; not quoting name part of an email address; calling GetPath() instead of GetFileName() for all recipients; r=rhp, mscott
git-svn-id: svn://10.0.0.236/trunk@51551 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-22 21:00:07 +00:00
srinivas%netscape.com
d303858686 Fixed typo in debug statement.
git-svn-id: svn://10.0.0.236/trunk@51550 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-22 20:59:34 +00:00
srinivas%netscape.com
fe52fa5602 Defined _MD_PIPEAVAILABLE; checkin for "Duncan Wilcox" <duncan@be.com>.
git-svn-id: svn://10.0.0.236/trunk@51549 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-22 20:58:00 +00:00
srinivas%netscape.com
46e9b52597 Map the SO_BROADCAST option to invalid option, when not supported by the
system.


git-svn-id: svn://10.0.0.236/trunk@51548 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-22 20:56:25 +00:00
jband%netscape.com
d8c9cc6cae commiting patch from Duncan Wilcox <duncan@be.com> to get prototype right in prep for inline assembly call - some pick compilers didn't like unsigned int when it was really uint32. r=jband
git-svn-id: svn://10.0.0.236/trunk@51547 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-22 20:53:05 +00:00
jefft%netscape.com
5dd4804e4c fixed bug 17069 - Save As...File format list for saving a selected message shows a .hml for the HTML format; fix typo; r=bienvenu
git-svn-id: svn://10.0.0.236/trunk@51546 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-22 20:52:56 +00:00
srinivas%netscape.com
1a74d3549b Add PR_SendFile to the PRIOMethods tables to enable use in layered FDs.
Bugzilla #17012.


git-svn-id: svn://10.0.0.236/trunk@51545 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-22 20:49:19 +00:00
radha%netscape.com
a285ab741e Clean up of Session History apis. Corresponding changes to the users of SH. r=mcafee. No bug #.
git-svn-id: svn://10.0.0.236/trunk@51544 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-22 20:48:07 +00:00
ducarroz%netscape.com
b21e040071 Fix for bug 15201. We need to convert back the result from UTF-8 to Unicode. R=mscott, bienvenu
git-svn-id: svn://10.0.0.236/trunk@51543 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-22 20:37:42 +00:00
bienvenu%netscape.com
8ce16092ef fix leaks in news/nntp r=sspitzer
git-svn-id: svn://10.0.0.236/trunk@51542 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-22 20:33:04 +00:00
bienvenu%netscape.com
598ff07fea fix memory leaks in vcard and calendar factories r=rhp
git-svn-id: svn://10.0.0.236/trunk@51541 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-22 20:32:02 +00:00
mcafee%netscape.com
0f2352836a Fixing some mis-use error cases, adding comments. Added --testonly flag. code=slamm, r=mcafee
git-svn-id: svn://10.0.0.236/trunk@51540 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-22 20:31:56 +00:00
slamm%netscape.com
085f841b9d Fix typo.
git-svn-id: svn://10.0.0.236/trunk@51539 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-22 19:16:40 +00:00
slamm%netscape.com
cb3e8e41cc Add some comments. Describe data structures. Tidy up a bit.
git-svn-id: svn://10.0.0.236/trunk@51538 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-22 18:53:56 +00:00
norris%netscape.com
ee5e7e9f37 Shouldn't test for equality against the message string, which is implementation independent.
git-svn-id: svn://10.0.0.236/trunk@51537 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-22 18:33:46 +00:00
slamm%netscape.com
5c43a70394 Add filter for long long constants. Make sure summary table includes everyone (fix off by one error).
git-svn-id: svn://10.0.0.236/trunk@51536 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-22 17:34:16 +00:00
norris%netscape.com
484a8455bd Don't print out control characters that break the driver.
git-svn-id: svn://10.0.0.236/trunk@51535 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-22 17:31:59 +00:00
norris%netscape.com
38e1413a00 Fix formatting.
git-svn-id: svn://10.0.0.236/trunk@51534 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-22 16:58:30 +00:00
norris%netscape.com
e763168909 Fix javadoc
git-svn-id: svn://10.0.0.236/trunk@51533 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-22 16:56:56 +00:00
jmas%softcatala.org
85ccdaf936 *** empty log message ***
git-svn-id: svn://10.0.0.236/trunk@51532 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-22 15:53:29 +00:00
troy%netscape.com
d16381b6f3 Removed 5 convenience functions from nsIFrame
git-svn-id: svn://10.0.0.236/trunk@51531 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-22 14:53:52 +00:00
kipp%netscape.com
2ed3a3fc6a Removed some more warnings
git-svn-id: svn://10.0.0.236/trunk@51530 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-22 14:51:41 +00:00
dcone%netscape.com
fd397214fb Fixed warning.
git-svn-id: svn://10.0.0.236/trunk@51529 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-22 13:29:06 +00:00
srinivas%netscape.com
be42687878 PL_ProcessPendingEvents() dispatches only those events currently on the
queue. Added a static helper function (_pl_GetEventCount) that locks the
monitor and counts the number of events in the queue. Checkin for troy.


git-svn-id: svn://10.0.0.236/trunk@51528 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-22 13:28:39 +00:00
dcone%netscape.com
d23e143664 Fixed the rounding on some transform math. r=kmkclusky
git-svn-id: svn://10.0.0.236/trunk@51527 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-22 13:28:22 +00:00
rods%netscape.com
285da5c5be adding test cases for form controls
git-svn-id: svn://10.0.0.236/trunk@51526 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-22 12:46:13 +00:00
braddr%puremagic.com
2e3aacd5dd Change NS_COMFALSE to NS_ERROR_INVALID_ARG. Every caller of LookupName
tests explicitly for NS_OK currently.
r=sleestack


git-svn-id: svn://10.0.0.236/trunk@51525 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-22 08:03:15 +00:00
briano%netscape.com
3e0f0a58b5 Automated update
git-svn-id: svn://10.0.0.236/trunk@51524 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-22 07:15:11 +00:00
ramiro%fateware.com
a5d3f6cc70 Removing the badly rotten MOZ_STRIP_NOT_EXPORTED hack. We now have a better
way to accomplish the same thing using linker version scripts.
r=cls@seawood.org


git-svn-id: svn://10.0.0.236/trunk@51521 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-22 07:11:43 +00:00
braddr%puremagic.com
5d7d8cded2 Change NS_COMFALSE to NS_ERROR_ABORT throughout the space manager.
r=smfr for these two files, and r=scc for the previous file


git-svn-id: svn://10.0.0.236/trunk@51520 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-22 06:49:50 +00:00
dp%netscape.com
7162f4cdbb bug# 9221 Fixing autoreg terminating on bad aliases. We now let it go
as far as possible ignoring errors. r=sfraser


git-svn-id: svn://10.0.0.236/trunk@51519 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-22 06:32:26 +00:00
rpotts%netscape.com
c6e185762b Fix build bustage on platforms that require full infor for nsCOMPtrs...
git-svn-id: svn://10.0.0.236/trunk@51518 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-22 05:56:19 +00:00
ramiro%fateware.com
4b4d193abc More rpm work in progress. Work around some bugs in rules.mk.
git-svn-id: svn://10.0.0.236/trunk@51517 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-22 05:55:29 +00:00
braddr%puremagic.com
ef38d2fd9c Change NS_COMFALSE instances to NS_ERROR_ABORT's
git-svn-id: svn://10.0.0.236/trunk@51516 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-22 05:32:31 +00:00
wtc%netscape.com
e83d506ed5 Removed temporary depend:clean hack.
git-svn-id: svn://10.0.0.236/trunk@51515 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-22 05:29:48 +00:00
rpotts%netscape.com
99e00aec99 bug #13054 (r=warren,gagan). Reworked the way requests are sent to the server. Now requests can be of an arbitrary size...
git-svn-id: svn://10.0.0.236/trunk@51514 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-22 05:13:01 +00:00
ramiro%fateware.com
dbec4b872f Link in raptorgfx dynamically to make the component properly loadable.
regxpcom was breaking on this one.  r=valeski


git-svn-id: svn://10.0.0.236/trunk@51513 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-22 05:06:39 +00:00
valeski%netscape.com
aedd1c1253 fixing build warning
git-svn-id: svn://10.0.0.236/trunk@51512 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-22 04:56:24 +00:00
valeski%netscape.com
3f594fbcb6 fixing build warning
git-svn-id: svn://10.0.0.236/trunk@51511 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-22 04:48:31 +00:00
dp%netscape.com
7da3eadc15 beautify...
git-svn-id: svn://10.0.0.236/trunk@51510 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-22 04:47:14 +00:00
valeski%netscape.com
5310cb0ddc removing last reference to nsFtpStreamListenerEvent.h. Actually it was a commented out line.
git-svn-id: svn://10.0.0.236/trunk@51508 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-22 04:33:19 +00:00
valeski%netscape.com
3d07f98f12 *** empty log message ***
git-svn-id: svn://10.0.0.236/trunk@51507 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-22 04:32:18 +00:00
sfraser%netscape.com
f90deff3a6 Fixing Mac FTP projects for valeski
git-svn-id: svn://10.0.0.236/trunk@51506 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-22 04:24:08 +00:00
valeski%netscape.com
5f29d72129 *** empty log message ***
git-svn-id: svn://10.0.0.236/trunk@51505 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-22 04:22:54 +00:00
valeski%netscape.com
d1271b7aa4 adding connection cache interface
git-svn-id: svn://10.0.0.236/trunk@51504 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-22 04:11:12 +00:00
valeski%netscape.com
455aa3e358 14659, r=dougt. FTP now uses xpcom proxies to send stream listener notifications back to the channel thread. it also uses them to access connections from the protocol handler cache.
git-svn-id: svn://10.0.0.236/trunk@51503 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-22 04:10:46 +00:00
valeski%netscape.com
77339b5eec 17039, r=dougt. Releasing QI'd proxy object was causing a crash. this is a temp work around.
git-svn-id: svn://10.0.0.236/trunk@51502 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-22 04:07:53 +00:00
troy%netscape.com
3a327d90e7 Fixed compiler warning about unused variable
git-svn-id: svn://10.0.0.236/trunk@51501 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-22 04:01:23 +00:00
rods%netscape.com
f690c63c37 Changed the parameter of the CalcNavQuirksSize to take the input spec instead of the length
not it properly calculates the number of cols and rows when in NavQuiks mode
r=kmcclusk, part of bug 7461


git-svn-id: svn://10.0.0.236/trunk@51498 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-22 03:14:03 +00:00
ramiro%fateware.com
21e92e4270 Made the spec file actually work. Not part of SeaMonkey.
git-svn-id: svn://10.0.0.236/trunk@51497 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-22 02:55:21 +00:00
ramiro%fateware.com
36b1b32126 Fixed the mozilla script. Not part of anything.
git-svn-id: svn://10.0.0.236/trunk@51496 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-22 02:54:23 +00:00
kipp%netscape.com
1a6f5307c4 r=pavlov; fixed up prioritization of the plevent queue so that it's lower than the normal priority; this fixes UI starvation on long document loads AND lets timers through so that painting works (bugs 7455, 6048, etc.)
git-svn-id: svn://10.0.0.236/trunk@51495 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-22 02:47:02 +00:00
tbogard%aol.net
e68aa79d1d Added building of the DLL.
git-svn-id: svn://10.0.0.236/trunk@51494 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-22 02:36:35 +00:00
tbogard%aol.net
1709ffcde6 Framed out nsWebBrowser. Added nsCWebBrowser definition. Setup to build library.
git-svn-id: svn://10.0.0.236/trunk@51493 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-22 02:35:18 +00:00
tbogard%aol.net
e598aadeba Fixed some syntax errors.
git-svn-id: svn://10.0.0.236/trunk@51492 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-22 02:32:28 +00:00
tbogard%aol.net
b577f2a1bc Framed out nsWebBrowserSetup. Added nsCWebBrowserSetup specification. Setup building of the library.
git-svn-id: svn://10.0.0.236/trunk@51491 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-22 02:30:51 +00:00
tbogard%aol.net
6408004f20 Fixed the naming.... Added some comments.
git-svn-id: svn://10.0.0.236/trunk@51490 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-22 02:29:29 +00:00
tbogard%aol.net
ee49ae552f Added nsCHTMLDocShell.
git-svn-id: svn://10.0.0.236/trunk@51489 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-22 02:27:42 +00:00
tbogard%aol.net
3dc8aba7a4 Added a C++ include of nsIPresContext.h
git-svn-id: svn://10.0.0.236/trunk@51488 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-22 02:26:35 +00:00
sspitzer%netscape.com
6eb15ceb38 add pref-mailnews.js, which has the necessary (but currently not working) JS for the color picker.
rewrite the xul so that the html select heeds the quote prefs.  (#15230)

use a color picker instead of an empty html select.


git-svn-id: svn://10.0.0.236/trunk@51487 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-22 02:10:49 +00:00
sspitzer%netscape.com
0cfb0a45bd make the PrefWindow work for html select dom elements, instead of just html input dom elements.
right now, it only works for int prefs.  fix #15230, heed and reflect the quoted style and quoted size prefs
in the html select widget in pref-mailnews.xul.

rewrite the html select elements in the pref xul, to work correctly.
remove unused, commented out xul to avoid confusion.

add new option for "yesterday" for the news offline download pref.
use nsCOMPtr. use PR_snprintf() to avoid potential buffer overruns.
use #defines to clean up the code.  use PR_sscanf instead of sscanf.

r=mscott


git-svn-id: svn://10.0.0.236/trunk@51486 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-22 02:09:18 +00:00
troy%netscape.com
54572af2e6 r=karnaze@netscape.com
Save 8 bytes per table cell frame by eliminating mCollapseOffset and
using a frame property instead.


git-svn-id: svn://10.0.0.236/trunk@51485 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-22 02:06:22 +00:00
bienvenu%netscape.com
de04e9ade9 always update folders when clicking on them r=putterman
git-svn-id: svn://10.0.0.236/trunk@51484 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-22 01:59:50 +00:00
amusil%netscape.com
d522c5e798 Changed FALSE to XP PR_FALSE
git-svn-id: svn://10.0.0.236/trunk@51483 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-22 01:54:36 +00:00
brendan%mozilla.org
9ef594d4bf Avoid gratuitous initialization and extra sets of ok (r=shaver@mozilla.org).
git-svn-id: svn://10.0.0.236/trunk@51482 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-22 01:44:47 +00:00
scc%netscape.com
ef634d5f6b remove nsIVariant.h and nsVariant.cpp as per bug #16987 and changes already in for Unix (thanks brad) and Mac, r=danm
git-svn-id: svn://10.0.0.236/trunk@51481 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-22 01:33:03 +00:00
endico%mozilla.org
49ce32b0ec oops forgot to add the newsbot directory to the path "../newsbot/newsbot.html",
git-svn-id: svn://10.0.0.236/trunk@51480 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-22 01:32:59 +00:00
alecf%netscape.com
11dd83ae66 update status
git-svn-id: svn://10.0.0.236/trunk@51479 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-22 01:27:08 +00:00
slamm%netscape.com
242640cfa1 Get the relative prefix for the static page correct.
git-svn-id: svn://10.0.0.236/trunk@51478 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-22 01:23:48 +00:00
amusil%netscape.com
547d0559fa Address book fix. DB file now gets closed in the destructor. Reviewed by bienvenu.
git-svn-id: svn://10.0.0.236/trunk@51477 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-22 01:18:42 +00:00
wtc%netscape.com
89df62c930 Bugsplat bug #366500: use the default, PRLock-based atomic stack
implementation on OSF1. r=larryh,srinivas@netscape.com.
Modified files: _osf1.h, osf1.c.


git-svn-id: svn://10.0.0.236/trunk@51476 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-22 01:10:00 +00:00
alecf%netscape.com
ab99f0ec36 nsIModulize mime emitters - porkjockey work, r=sspitzer
git-svn-id: svn://10.0.0.236/trunk@51475 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-22 01:05:04 +00:00
dp%netscape.com
f7af54f40f bug# 15046 Preventing deletion of dll when getfactory fails. r=shaver,kipp
git-svn-id: svn://10.0.0.236/trunk@51474 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-22 01:04:16 +00:00
dp%netscape.com
51386ed041 Fixed warning of unused variable.
git-svn-id: svn://10.0.0.236/trunk@51473 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-22 01:02:29 +00:00
104 changed files with 19303 additions and 10253 deletions

View File

@@ -1,298 +0,0 @@
/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*-
*
* The contents of this file are subject to the Netscape Public License
* Version 1.0 (the "NPL"); you may not use this file except in
* compliance with the NPL. You may obtain a copy of the NPL at
* http://www.mozilla.org/NPL/
*
* Software distributed under the NPL is distributed on an "AS IS" basis,
* WITHOUT WARRANTY OF ANY KIND, either express or implied. See the NPL
* for the specific language governing rights and limitations under the
* NPL.
*
* The Initial Developer of this code under the NPL is Netscape
* Communications Corporation. Portions created by Netscape are
* Copyright (C) 1998 Netscape Communications Corporation. All Rights
* Reserved.
*/
#include "msgCore.h" // for pre-compiled headers
//#include "nsIMsgIdentity.h"
#include "nsIMsgAccountManager.h"
//#include "nsIPop3IncomingServer.h"
#include "nsMsgMailSession.h"
#include "nsMsgLocalCID.h"
#include "nsMsgBaseCID.h"
#include "nsCOMPtr.h"
#include "nsMsgFolderCache.h"
#include "nsIFileLocator.h"
#include "nsFileLocations.h"
#include "nsIMsgStatusFeedback.h"
NS_IMPL_ISUPPORTS(nsMsgMailSession, nsCOMTypeInfo<nsIMsgMailSession>::GetIID());
static NS_DEFINE_CID(kMsgAccountManagerCID, NS_MSGACCOUNTMANAGER_CID);
static NS_DEFINE_CID(kMsgFolderCacheCID, NS_MSGFOLDERCACHE_CID);
static NS_DEFINE_IID(kIFileLocatorIID, NS_IFILELOCATOR_IID);
static NS_DEFINE_CID(kFileLocatorCID, NS_FILELOCATOR_CID);
//static NS_DEFINE_CID(kMsgIdentityCID, NS_MSGIDENTITY_CID);
//static NS_DEFINE_CID(kPop3IncomingServerCID, NS_POP3INCOMINGSERVER_CID);
//static NS_DEFINE_CID(kPrefCID, NS_PREF_CID);
nsMsgMailSession::nsMsgMailSession():
mRefCnt(0),
m_accountManager(0),
m_msgFolderCache(0)
{
NS_INIT_REFCNT();
}
nsMsgMailSession::~nsMsgMailSession()
{
Shutdown();
}
nsresult nsMsgMailSession::Init()
{
nsresult rv = NS_NewISupportsArray(getter_AddRefs(mListeners));
return rv;
}
nsresult nsMsgMailSession::Shutdown()
{
if(m_accountManager)
{
if (m_msgFolderCache)
m_accountManager->WriteToFolderCache(m_msgFolderCache);
m_accountManager->CloseCachedConnections();
m_accountManager->UnloadAccounts();
}
NS_IF_RELEASE(m_accountManager);
NS_IF_RELEASE(m_msgFolderCache);
return NS_OK;
}
// nsIMsgMailSession
nsresult nsMsgMailSession::GetCurrentIdentity(nsIMsgIdentity ** aIdentity)
{
nsresult rv;
nsCOMPtr<nsIMsgAccountManager> accountManager;
rv = GetAccountManager(getter_AddRefs(accountManager));
if (NS_FAILED(rv)) return rv;
nsCOMPtr<nsIMsgAccount> defaultAccount;
rv = accountManager->GetDefaultAccount(getter_AddRefs(defaultAccount));
if (NS_FAILED(rv)) return rv;
rv = defaultAccount->GetDefaultIdentity(aIdentity);
if (NS_SUCCEEDED(rv))
NS_ADDREF(*aIdentity);
return rv;
}
nsresult nsMsgMailSession::GetCurrentServer(nsIMsgIncomingServer ** aServer)
{
nsresult rv=NS_ERROR_UNEXPECTED;
nsCOMPtr<nsIMsgAccountManager> accountManager;
rv = GetAccountManager(getter_AddRefs(accountManager));
if (NS_FAILED(rv)) return rv;
nsCOMPtr<nsIMsgAccount> defaultAccount;
rv = accountManager->GetDefaultAccount(getter_AddRefs(defaultAccount));
if (NS_FAILED(rv)) return rv;
//if successful aServer will be addref'd by GetIncomingServer
rv = defaultAccount->GetIncomingServer(aServer);
return rv;
}
nsresult nsMsgMailSession::GetAccountManager(nsIMsgAccountManager* *aAM)
{
NS_ENSURE_ARG_POINTER(aAM);
nsresult rv;
NS_WITH_SERVICE(nsIMsgAccountManager, accountManager, kMsgAccountManagerCID, &rv);
if (NS_FAILED(rv)) return rv;
accountManager->LoadAccounts();
*aAM = accountManager;
NS_IF_ADDREF(*aAM);
return NS_OK;
}
nsresult nsMsgMailSession::GetFolderCache(nsIMsgFolderCache* *aFolderCache)
{
if (!aFolderCache) return NS_ERROR_NULL_POINTER;
nsresult rv = NS_OK;
if (!m_msgFolderCache)
{
rv = nsComponentManager::CreateInstance(kMsgFolderCacheCID,
NULL,
nsCOMTypeInfo<nsIMsgFolderCache>::GetIID(),
(void **)&m_msgFolderCache);
if (NS_FAILED(rv))
return rv;
nsCOMPtr <nsIFileSpec> cacheFile;
NS_WITH_SERVICE(nsIFileLocator, locator, kFileLocatorCID, &rv);
if (NS_FAILED(rv)) return rv;
rv = locator->GetFileLocation(nsSpecialFileSpec::App_MessengerFolderCache50, getter_AddRefs(cacheFile));
if (NS_FAILED(rv)) return rv;
m_msgFolderCache->Init(cacheFile);
}
*aFolderCache = m_msgFolderCache;
NS_IF_ADDREF(*aFolderCache);
return rv;
}
nsresult nsMsgMailSession::GetTemporaryMsgStatusFeedback(nsIMsgStatusFeedback* *aMsgStatusFeedback)
{
if (!aMsgStatusFeedback) return NS_ERROR_NULL_POINTER;
*aMsgStatusFeedback = m_temporaryMsgStatusFeedback;
NS_IF_ADDREF(*aMsgStatusFeedback);
return NS_OK;
}
nsresult nsMsgMailSession::SetTemporaryMsgStatusFeedback(nsIMsgStatusFeedback* aMsgStatusFeedback)
{
m_temporaryMsgStatusFeedback = do_QueryInterface(aMsgStatusFeedback);
return NS_OK;
}
NS_IMETHODIMP nsMsgMailSession::AddFolderListener(nsIFolderListener * listener)
{
mListeners->AppendElement(listener);
return NS_OK;
}
NS_IMETHODIMP nsMsgMailSession::RemoveFolderListener(nsIFolderListener * listener)
{
mListeners->RemoveElement(listener);
return NS_OK;
}
NS_IMETHODIMP
nsMsgMailSession::NotifyFolderItemPropertyChanged(nsISupports *item,
const char *property,
const char* oldValue,
const char* newValue)
{
nsresult rv;
PRUint32 count;
rv = mListeners->Count(&count);
if (NS_FAILED(rv)) return rv;
for(PRUint32 i = 0; i < count; i++)
{
nsCOMPtr<nsIFolderListener> listener = getter_AddRefs((nsIFolderListener*)mListeners->ElementAt(i));
listener->OnItemPropertyChanged(item, property, oldValue, newValue);
}
return NS_OK;
}
NS_IMETHODIMP
nsMsgMailSession::NotifyFolderItemPropertyFlagChanged(nsISupports *item,
const char *property,
PRUint32 oldValue,
PRUint32 newValue)
{
nsresult rv;
PRUint32 count;
rv = mListeners->Count(&count);
if (NS_FAILED(rv)) return rv;
for(PRUint32 i = 0; i < count; i++)
{
nsCOMPtr<nsIFolderListener> listener = getter_AddRefs((nsIFolderListener*)mListeners->ElementAt(i));
listener->OnItemPropertyFlagChanged(item, property, oldValue, newValue);
}
return NS_OK;
}
NS_IMETHODIMP nsMsgMailSession::NotifyFolderItemAdded(nsIFolder *folder, nsISupports *item)
{
nsresult rv;
PRUint32 count;
rv = mListeners->Count(&count);
if (NS_FAILED(rv)) return rv;
for(PRUint32 i = 0; i < count; i++)
{
nsCOMPtr<nsIFolderListener> listener = getter_AddRefs((nsIFolderListener*)mListeners->ElementAt(i));
listener->OnItemAdded(folder, item);
}
return NS_OK;
}
NS_IMETHODIMP nsMsgMailSession::NotifyFolderItemDeleted(nsIFolder *folder, nsISupports *item)
{
nsresult rv;
PRUint32 count;
rv = mListeners->Count(&count);
if (NS_FAILED(rv)) return rv;
for(PRUint32 i = 0; i < count; i++)
{
nsCOMPtr<nsIFolderListener> listener = getter_AddRefs((nsIFolderListener*)mListeners->ElementAt(i));
listener->OnItemRemoved(folder, item);
}
return NS_OK;
}
NS_IMETHODIMP nsMsgMailSession::NotifyFolderLoaded(nsIFolder *folder)
{
nsresult rv;
PRUint32 count;
rv = mListeners->Count(&count);
if (NS_FAILED(rv)) return rv;
for(PRUint32 i = 0; i < count; i++)
{
nsCOMPtr<nsIFolderListener> listener = getter_AddRefs((nsIFolderListener*)mListeners->ElementAt(i));
listener->OnFolderLoaded(folder);
}
return NS_OK;
}

View File

@@ -1,35 +0,0 @@
# The contents of this file are subject to the Netscape Public License
# Version 1.0 (the "NPL"); you may not use this file except in
# compliance with the NPL. You may obtain a copy of the NPL at
# http://www.mozilla.org/NPL/
#
# Software distributed under the NPL is distributed on an "AS IS" basis,
# WITHOUT WARRANTY OF ANY KIND, either express or implied. See the NPL
# for the specific language governing rights and limitations under the
# NPL.
#
# The Initial Developer of this code under the NPL is Netscape
# Communications Corporation. Portions created by Netscape are
# Copyright (C) 1998 Netscape Communications Corporation. All Rights
# Reserved.
#
# This is a list of local files which get copied to the mozilla:dist:mailnews directory
#
nsMsgLineBuffer.h
nsMsgGroupRecord.h
nsUInt32Array.h
nsMsgKeySet.h
nsMsgFolder.h
nsMsgDBFolder.h
nsLocalFolderSummarySpec.h
nsMsgIdentity.h
nsMsgIncomingServer.h
nsNewsSummarySpec.h
nsMsgUtils.h
nsMessage.h
nsMsgProtocol.h
nsMsgTxn.h
nsMsgMailNewsUrl.h
nsMsgI18N.h

View File

@@ -1,75 +0,0 @@
#
# The contents of this file are subject to the Netscape Public License
# Version 1.0 (the "NPL"); you may not use this file except in
# compliance with the NPL. You may obtain a copy of the NPL at
# http://www.mozilla.org/NPL/
#
# Software distributed under the NPL is distributed on an "AS IS" basis,
# WITHOUT WARRANTY OF ANY KIND, either express or implied. See the NPL
# for the specific language governing rights and limitations under the
# NPL.
#
# The Initial Developer of this code under the NPL is Netscape
# Communications Corporation. Portions created by Netscape are
# Copyright (C) 1998 Netscape Communications Corporation. All Rights
# Reserved.
#
DEPTH = ../../..
topsrcdir = @top_srcdir@
srcdir = @srcdir@
VPATH = @srcdir@
include $(DEPTH)/config/autoconf.mk
MODULE = msgbaseutil
LIBRARY_NAME = msgbaseutil
CPPSRCS = \
nsMsgGroupRecord.cpp \
nsMsgLineBuffer.cpp \
nsMsgFolder.cpp \
nsMsgDBFolder.cpp \
nsUInt32Array.cpp \
nsMsgKeySet.cpp \
nsLocalFolderSummarySpec.cpp \
nsNewsSummarySpec.cpp \
nsMsgIdentity.cpp \
nsMsgIncomingServer.cpp \
nsMsgUtils.cpp \
nsMessage.cpp \
nsMsgProtocol.cpp \
nsMsgMailNewsUrl.cpp \
nsMsgTxn.cpp \
nsMsgI18N.cpp \
$(NULL)
EXPORTS = \
nsMsgGroupRecord.h \
nsMsgLineBuffer.h \
nsUInt32Array.h \
nsMsgKeySet.h \
nsMsgFolder.h \
nsMsgDBFolder.h \
nsLocalFolderSummarySpec.h \
nsNewsSummarySpec.h \
nsMsgIdentity.h \
nsMsgIncomingServer.h \
nsMsgUtils.h \
nsMessage.h \
nsMsgProtocol.h \
nsMsgMailNewsUrl.h \
nsMsgTxn.h \
nsMsgI18N.h \
$(NULL)
EXTRA_DSO_LDOPTS = \
-L$(DIST)/bin \
-L$(DIST)/lib \
-lxpcom \
-lrdfutil_s \
$(NSPR_LIBS) \
$(NULL)
include $(topsrcdir)/config/rules.mk

View File

@@ -1,21 +0,0 @@
/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*-
*
* The contents of this file are subject to the Netscape Public License
* Version 1.0 (the "NPL"); you may not use this file except in
* compliance with the NPL. You may obtain a copy of the NPL at
* http://www.mozilla.org/NPL/
*
* Software distributed under the NPL is distributed on an "AS IS" basis,
* WITHOUT WARRANTY OF ANY KIND, either express or implied. See the NPL
* for the specific language governing rights and limitations under the
* NPL.
*
* The Initial Developer of this code under the NPL is Netscape
* Communications Corporation. Portions created by Netscape are
* Copyright (C) 1998 Netscape Communications Corporation. All Rights
* Reserved.
*/
#include "MacPrefix.h"

View File

@@ -1,21 +0,0 @@
/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*-
*
* The contents of this file are subject to the Netscape Public License
* Version 1.0 (the "NPL"); you may not use this file except in
* compliance with the NPL. You may obtain a copy of the NPL at
* http://www.mozilla.org/NPL/
*
* Software distributed under the NPL is distributed on an "AS IS" basis,
* WITHOUT WARRANTY OF ANY KIND, either express or implied. See the NPL
* for the specific language governing rights and limitations under the
* NPL.
*
* The Initial Developer of this code under the NPL is Netscape
* Communications Corporation. Portions created by Netscape are
* Copyright (C) 1998 Netscape Communications Corporation. All Rights
* Reserved.
*/
#include "MacPrefix_debug.h"

View File

@@ -1,87 +0,0 @@
#!nmake
#
# The contents of this file are subject to the Netscape Public License
# Version 1.0 (the "NPL"); you may not use this file except in
# compliance with the NPL. You may obtain a copy of the NPL at
# http://www.mozilla.org/NPL/
#
# Software distributed under the NPL is distributed on an "AS IS" basis,
# WITHOUT WARRANTY OF ANY KIND, either express or implied. See the NPL
# for the specific language governing rights and limitations under the
# NPL.
#
# The Initial Developer of this code under the NPL is Netscape
# Communications Corporation. Portions created by Netscape are
# Copyright (C) 1998 Netscape Communications Corporation. All Rights
# Reserved.
DEPTH=..\..\..
MODULE= msgbsutl
include <$(DEPTH)\config\config.mak>
################################################################################
## exports
EXPORTS= \
nsMsgLineBuffer.h \
nsMsgGroupRecord.h \
nsUInt32Array.h \
nsMsgKeySet.h \
nsMsgFolder.h \
nsMsgDBFolder.h \
nsLocalFolderSummarySpec.h \
nsMsgIdentity.h \
nsMsgIncomingServer.h \
nsNewsSummarySpec.h \
nsMsgUtils.h \
nsMessage.h \
nsMsgProtocol.h \
nsMsgMailNewsUrl.h \
nsMsgTxn.h \
nsMsgI18N.h \
$(NULL)
################################################################################
## library
LIBNAME = .\$(OBJDIR)\msgbsutl
DLL = $(LIBNAME).dll
DEFINES=-D_IMPL_NS_MSG_BASE
LCFLAGS = \
$(LCFLAGS) \
$(DEFINES) \
$(NULL)
CPP_OBJS= \
.\$(OBJDIR)\nsMsgGroupRecord.obj \
.\$(OBJDIR)\nsMsgLineBuffer.obj \
.\$(OBJDIR)\nsUInt32Array.obj \
.\$(OBJDIR)\nsMsgKeySet.obj \
.\$(OBJDIR)\nsMsgFolder.obj \
.\$(OBJDIR)\nsMsgDBFolder.obj \
.\$(OBJDIR)\nsLocalFolderSummarySpec.obj \
.\$(OBJDIR)\nsMsgIdentity.obj \
.\$(OBJDIR)\nsMsgIncomingServer.obj \
.\$(OBJDIR)\nsNewsSummarySpec.obj \
.\$(OBJDIR)\nsMsgUtils.obj \
.\$(OBJDIR)\nsMessage.obj \
.\$(OBJDIR)\nsMsgProtocol.obj \
.\$(OBJDIR)\nsMsgMailNewsUrl.obj \
.\$(OBJDIR)\nsMsgTxn.obj \
.\$(OBJDIR)\nsMsgI18N.obj \
$(NULL)
LLIBS= \
$(DIST)\lib\xpcom.lib \
$(DIST)\lib\rdfutil_s.lib \
$(LIBNSPR) \
$(NULL)
include <$(DEPTH)/config/rules.mak>
libs:: $(DLL)
$(MAKE_INSTALL) $(LIBNAME).$(DLL_SUFFIX) $(DIST)\bin
$(MAKE_INSTALL) $(LIBNAME).$(LIB_SUFFIX) $(DIST)\lib

View File

@@ -1,76 +0,0 @@
/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*-
*
* The contents of this file are subject to the Netscape Public License
* Version 1.0 (the "NPL"); you may not use this file except in
* compliance with the NPL. You may obtain a copy of the NPL at
* http://www.mozilla.org/NPL/
*
* Software distributed under the NPL is distributed on an "AS IS" basis,
* WITHOUT WARRANTY OF ANY KIND, either express or implied. See the NPL
* for the specific language governing rights and limitations under the
* NPL.
*
* The Initial Developer of this code under the NPL is Netscape
* Communications Corporation. Portions created by Netscape are
* Copyright (C) 1999 Netscape Communications Corporation. All Rights
* Reserved.
*/
#include "nsLocalFolderSummarySpec.h"
#include "plstr.h"
#include "nsString.h"
MOZ_DECL_CTOR_COUNTER(nsLocalFolderSummarySpec);
nsLocalFolderSummarySpec::~nsLocalFolderSummarySpec()
{
MOZ_COUNT_DTOR(nsLocalFolderSummarySpec);
}
nsLocalFolderSummarySpec::nsLocalFolderSummarySpec()
{
MOZ_COUNT_CTOR(nsLocalFolderSummarySpec);
}
nsLocalFolderSummarySpec::nsLocalFolderSummarySpec(const char *folderPath, PRBool create)
: nsFileSpec(folderPath, create)
{
MOZ_COUNT_CTOR(nsLocalFolderSummarySpec);
CreateSummaryFileName();
}
nsLocalFolderSummarySpec::nsLocalFolderSummarySpec(const nsFileSpec& inFolderPath)
: nsFileSpec(inFolderPath)
{
MOZ_COUNT_CTOR(nsLocalFolderSummarySpec);
CreateSummaryFileName();
}
nsLocalFolderSummarySpec::nsLocalFolderSummarySpec(const nsFilePath &inFolderPath, PRBool create) : nsFileSpec(inFolderPath, create)
{
MOZ_COUNT_CTOR(nsLocalFolderSummarySpec);
CreateSummaryFileName();
}
void nsLocalFolderSummarySpec::SetFolderName(const char *folderPath)
{
*this = folderPath;
}
void nsLocalFolderSummarySpec:: CreateSummaryFileName()
{
char *leafName = GetLeafName();
nsString fullLeafName(leafName);
// Append .msf (msg summary file) this is what windows will want.
// Mac and Unix can decide for themselves.
fullLeafName += ".msf"; // message summary file
char *cLeafName = fullLeafName.ToNewCString();
SetLeafName(cLeafName);
nsAllocator::Free(cLeafName);
PL_strfree(leafName);
}

View File

@@ -1,46 +0,0 @@
/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*-
*
* The contents of this file are subject to the Netscape Public License
* Version 1.0 (the "NPL"); you may not use this file except in
* compliance with the NPL. You may obtain a copy of the NPL at
* http://www.mozilla.org/NPL/
*
* Software distributed under the NPL is distributed on an "AS IS" basis,
* WITHOUT WARRANTY OF ANY KIND, either express or implied. See the NPL
* for the specific language governing rights and limitations under the
* NPL.
*
* The Initial Developer of this code under the NPL is Netscape
* Communications Corporation. Portions created by Netscape are
* Copyright (C) 1999 Netscape Communications Corporation. All Rights
* Reserved.
*/
#ifndef _nsLocalFolderSummarySpec_H
#define _nsLocalFolderSummarySpec_H
#include "msgCore.h"
#include "nsFileSpec.h"
// Class to name a summary file for a local mail folder,
// given a full folder file spec. For windows, this just means tacking .msf on the end.
// For Unix, it might mean something like putting a '.' on the front and .msgsummary on the end.
// Note this class expects the invoking code to fully specify the folder path.
// This class does NOT prepend the local folder directory, or put .sbd on the containing
// directory names.
class NS_MSG_BASE nsLocalFolderSummarySpec : public nsFileSpec
{
public:
virtual ~nsLocalFolderSummarySpec();
nsLocalFolderSummarySpec();
nsLocalFolderSummarySpec(const char *folderPath, PRBool create = PR_FALSE);
nsLocalFolderSummarySpec(const nsFileSpec& inFolderPath);
nsLocalFolderSummarySpec(const nsFilePath &inFolderPath, PRBool create = PR_FALSE);
void SetFolderName(const char *folderPath);
protected:
void CreateSummaryFileName();
};
#endif

View File

@@ -1,509 +0,0 @@
/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*-
*
* The contents of this file are subject to the Netscape Public License
* Version 1.0 (the "NPL"); you may not use this file except in
* compliance with the NPL. You may obtain a copy of the NPL at
* http://www.mozilla.org/NPL/
*
* Software distributed under the NPL is distributed on an "AS IS" basis,
* WITHOUT WARRANTY OF ANY KIND, either express or implied. See the NPL
* for the specific language governing rights and limitations under the
* NPL.
*
* The Initial Developer of this code under the NPL is Netscape
* Communications Corporation. Portions created by Netscape are
* Copyright (C) 1999 Netscape Communications Corporation. All Rights
* Reserved.
*/
#include "msgCore.h" // precompiled header...
#include "nsMessage.h"
#include "nsIMsgFolder.h"
nsMessage::nsMessage(void)
: nsRDFResource(), mFolder(nsnull)
{
}
nsMessage::~nsMessage(void)
{
//Member variables are either nsCOMPtr's or ptrs we don't want to own.
}
NS_IMPL_ADDREF_INHERITED(nsMessage, nsRDFResource)
NS_IMPL_RELEASE_INHERITED(nsMessage, nsRDFResource)
NS_IMETHODIMP nsMessage::QueryInterface(REFNSIID aIID, void** aInstancePtr)
{
if (!aInstancePtr) return NS_ERROR_NULL_POINTER;
*aInstancePtr = nsnull;
if (aIID.Equals(nsCOMTypeInfo<nsIMessage>::GetIID()) || aIID.Equals(nsCOMTypeInfo<nsIDBMessage>::GetIID()))
{
*aInstancePtr = NS_STATIC_CAST(nsIDBMessage*, this);
}
if(*aInstancePtr)
{
AddRef();
return NS_OK;
}
return nsRDFResource::QueryInterface(aIID, aInstancePtr);
}
NS_IMETHODIMP
nsMessage::Init(const char* aURI)
{
return nsRDFResource::Init(aURI);
}
NS_IMETHODIMP nsMessage::GetProperty(const char *propertyName, nsString &resultProperty)
{
if(mMsgHdr)
return mMsgHdr->GetProperty(propertyName, resultProperty);
else
return NS_ERROR_FAILURE;
}
NS_IMETHODIMP nsMessage::SetProperty(const char *propertyName, nsString &propertyStr)
{
if(mMsgHdr)
return mMsgHdr->SetProperty(propertyName, propertyStr);
else
return NS_ERROR_FAILURE;
}
NS_IMETHODIMP nsMessage::GetUint32Property(const char *propertyName, PRUint32 *pResult)
{
if(mMsgHdr)
return mMsgHdr->GetUint32Property(propertyName, pResult);
else
return NS_ERROR_FAILURE;
}
NS_IMETHODIMP nsMessage::SetUint32Property(const char *propertyName, PRUint32 propertyVal)
{
if(mMsgHdr)
return mMsgHdr->SetUint32Property(propertyName, propertyVal);
else
return NS_ERROR_FAILURE;
}
NS_IMETHODIMP nsMessage::GetNumReferences(PRUint16 *result)
{
if(mMsgHdr)
return mMsgHdr->GetNumReferences(result);
else
return NS_ERROR_FAILURE;
}
NS_IMETHODIMP nsMessage::GetStringReference(PRInt32 refNum, nsCString &resultReference)
{
if(mMsgHdr)
return mMsgHdr->GetStringReference(refNum, resultReference);
else
return NS_ERROR_FAILURE;
}
NS_IMETHODIMP nsMessage::GetDate(PRTime *result)
{
if(mMsgHdr)
return mMsgHdr->GetDate(result);
else
return NS_ERROR_FAILURE;
}
NS_IMETHODIMP nsMessage::SetDate(PRTime date)
{
if(mMsgHdr)
return mMsgHdr->SetDate(date);
else
return NS_ERROR_FAILURE;
}
NS_IMETHODIMP nsMessage::SetMessageId(const char *messageId)
{
if(mMsgHdr)
return mMsgHdr->SetMessageId(messageId);
else
return NS_ERROR_FAILURE;
}
NS_IMETHODIMP nsMessage::SetReferences(const char *references)
{
if(mMsgHdr)
return mMsgHdr->SetReferences(references);
else
return NS_ERROR_FAILURE;
}
NS_IMETHODIMP nsMessage::SetCCList(const char *ccList)
{
if(mMsgHdr)
return mMsgHdr->SetCCList(ccList);
else
return NS_ERROR_FAILURE;
}
NS_IMETHODIMP nsMessage::SetRecipients(const char *recipients, PRBool recipientsIsNewsgroup)
{
if(mMsgHdr)
return mMsgHdr->SetRecipients(recipients, recipientsIsNewsgroup);
else
return NS_ERROR_FAILURE;
}
NS_IMETHODIMP nsMessage::SetRecipientsArray(const char *names, const char *addresses, PRUint32 numAddresses)
{
if(mMsgHdr)
return mMsgHdr->SetRecipientsArray(names, addresses, numAddresses);
else
return NS_ERROR_FAILURE;
}
NS_IMETHODIMP nsMessage::SetCCListArray(const char *names, const char *addresses, PRUint32 numAddresses)
{
if(mMsgHdr)
return mMsgHdr->SetCCListArray(names, addresses, numAddresses);
else
return NS_ERROR_FAILURE;
}
NS_IMETHODIMP nsMessage::SetAuthor(const char *author)
{
if(mMsgHdr)
return mMsgHdr->SetAuthor(author);
else
return NS_ERROR_FAILURE;
}
NS_IMETHODIMP nsMessage::SetSubject(const char *subject)
{
if(mMsgHdr)
return mMsgHdr->SetSubject(subject);
else
return NS_ERROR_FAILURE;
}
NS_IMETHODIMP nsMessage::SetStatusOffset(PRUint32 statusOffset)
{
if(mMsgHdr)
return mMsgHdr->SetStatusOffset(statusOffset);
else
return NS_ERROR_FAILURE;
}
NS_IMETHODIMP nsMessage::GetAuthor(nsString *resultAuthor)
{
if(mMsgHdr)
return mMsgHdr->GetAuthor(resultAuthor);
else
return NS_ERROR_FAILURE;
}
NS_IMETHODIMP nsMessage::GetSubject(nsString *resultSubject)
{
if(mMsgHdr)
return mMsgHdr->GetSubject(resultSubject);
else
return NS_ERROR_FAILURE;
}
NS_IMETHODIMP nsMessage::GetRecipients(nsString *resultRecipients)
{
if(mMsgHdr)
return mMsgHdr->GetRecipients(resultRecipients);
else
return NS_ERROR_FAILURE;
}
NS_IMETHODIMP nsMessage::GetCCList(nsString *ccList)
{
if(mMsgHdr)
return mMsgHdr->GetCCList(ccList);
else
return NS_ERROR_FAILURE;
}
NS_IMETHODIMP nsMessage::GetMessageId(nsCString *resultMessageId)
{
if(mMsgHdr)
return mMsgHdr->GetMessageId(resultMessageId);
else
return NS_ERROR_FAILURE;
}
NS_IMETHODIMP nsMessage::GetMime2DecodedAuthor(nsString *resultAuthor)
{
if(mMsgHdr)
return mMsgHdr->GetMime2DecodedAuthor(resultAuthor);
else
return NS_ERROR_FAILURE;
}
NS_IMETHODIMP nsMessage::GetMime2DecodedSubject(nsString *resultSubject)
{
if(mMsgHdr)
return mMsgHdr->GetMime2DecodedSubject(resultSubject);
else
return NS_ERROR_FAILURE;
}
NS_IMETHODIMP nsMessage::GetMime2DecodedRecipients(nsString *resultRecipients)
{
if(mMsgHdr)
return mMsgHdr->GetMime2DecodedRecipients(resultRecipients);
else
return NS_ERROR_FAILURE;
}
NS_IMETHODIMP nsMessage::GetAuthorCollationKey(nsString *resultAuthor)
{
if(mMsgHdr)
return mMsgHdr->GetAuthorCollationKey(resultAuthor);
else
return NS_ERROR_FAILURE;
}
NS_IMETHODIMP nsMessage::GetSubjectCollationKey(nsString *resultSubject)
{
if(mMsgHdr)
return mMsgHdr->GetSubjectCollationKey(resultSubject);
else
return NS_ERROR_FAILURE;
}
NS_IMETHODIMP nsMessage::GetRecipientsCollationKey(nsString *resultRecipients)
{
if(mMsgHdr)
return mMsgHdr->GetRecipientsCollationKey(resultRecipients);
else
return NS_ERROR_FAILURE;
}
NS_IMETHODIMP nsMessage::GetFlags(PRUint32 *result)
{
if(mMsgHdr)
return mMsgHdr->GetFlags(result);
else
return NS_ERROR_FAILURE;
}
NS_IMETHODIMP nsMessage::SetFlags(PRUint32 flags)
{
if(mMsgHdr)
return mMsgHdr->SetFlags(flags);
else
return NS_ERROR_FAILURE;
}
NS_IMETHODIMP nsMessage::OrFlags(PRUint32 flags, PRUint32 *result)
{
if(mMsgHdr)
return mMsgHdr->OrFlags(flags, result);
else
return NS_ERROR_FAILURE;
}
NS_IMETHODIMP nsMessage::AndFlags(PRUint32 flags, PRUint32 *result)
{
if(mMsgHdr)
return mMsgHdr->AndFlags(flags, result);
else
return NS_ERROR_FAILURE;
}
NS_IMETHODIMP nsMessage::MarkRead(PRBool bRead)
{
if(mMsgHdr)
return mMsgHdr->MarkRead(bRead);
else
return NS_ERROR_FAILURE;
}
NS_IMETHODIMP nsMessage::MarkFlagged(PRBool bFlagged)
{
if(mMsgHdr)
return mMsgHdr->MarkFlagged(bFlagged);
else
return NS_ERROR_FAILURE;
}
NS_IMETHODIMP nsMessage::GetMessageKey(nsMsgKey *result)
{
if(mMsgHdr)
return mMsgHdr->GetMessageKey(result);
else
return NS_ERROR_FAILURE;
}
NS_IMETHODIMP nsMessage::GetThreadId(nsMsgKey *result)
{
if(mMsgHdr)
return mMsgHdr->GetThreadId(result);
else
return NS_ERROR_FAILURE;
}
NS_IMETHODIMP nsMessage::SetThreadId(nsMsgKey inKey)
{
if(mMsgHdr)
return mMsgHdr->SetThreadId(inKey);
else
return NS_ERROR_FAILURE;
}
NS_IMETHODIMP nsMessage::SetMessageKey(nsMsgKey inKey)
{
if(mMsgHdr)
return mMsgHdr->SetMessageKey(inKey);
else
return NS_ERROR_FAILURE;
}
NS_IMETHODIMP nsMessage::GetMessageSize(PRUint32 *result)
{
if(mMsgHdr)
return mMsgHdr->GetMessageSize(result);
else
return NS_ERROR_FAILURE;
}
NS_IMETHODIMP nsMessage::GetLineCount(PRUint32 *result)
{
if(mMsgHdr)
return mMsgHdr->GetLineCount(result);
else
return NS_ERROR_FAILURE;
}
NS_IMETHODIMP nsMessage::SetMessageSize(PRUint32 messageSize)
{
if(mMsgHdr)
return mMsgHdr->SetMessageSize(messageSize);
else
return NS_ERROR_FAILURE;
}
NS_IMETHODIMP nsMessage::SetLineCount(PRUint32 lineCount)
{
if(mMsgHdr)
return mMsgHdr->SetLineCount(lineCount);
else
return NS_ERROR_FAILURE;
}
NS_IMETHODIMP nsMessage::SetPriority(nsMsgPriority priority)
{
if(mMsgHdr)
return mMsgHdr->SetPriority(priority);
else
return NS_ERROR_FAILURE;
}
NS_IMETHODIMP nsMessage::SetPriority(const char *priority)
{
if(mMsgHdr)
return mMsgHdr->SetPriority(priority);
else
return NS_ERROR_FAILURE;
}
NS_IMETHODIMP nsMessage::GetPriority(nsMsgPriority *result)
{
if(mMsgHdr)
return mMsgHdr->GetPriority(result);
else
return NS_ERROR_FAILURE;
}
NS_IMETHODIMP nsMessage::GetMessageOffset(PRUint32 *result)
{
if(mMsgHdr)
return mMsgHdr->GetMessageOffset(result);
else
return NS_ERROR_FAILURE;
}
NS_IMETHODIMP nsMessage::GetStatusOffset(PRUint32 *result)
{
if(mMsgHdr)
return mMsgHdr->GetStatusOffset(result);
else
return NS_ERROR_FAILURE;
}
NS_IMETHODIMP nsMessage::GetCharSet(nsString *result)
{
if(mMsgHdr)
return mMsgHdr->GetCharSet(result);
else
return NS_ERROR_FAILURE;
}
NS_IMETHODIMP nsMessage::GetThreadParent(nsMsgKey *result)
{
if(mMsgHdr)
return mMsgHdr->GetThreadParent(result);
else
return NS_ERROR_FAILURE;
}
NS_IMETHODIMP nsMessage::SetThreadParent(nsMsgKey inKey)
{
if(mMsgHdr)
return mMsgHdr->SetThreadParent(inKey);
else
return NS_ERROR_FAILURE;
}
NS_IMETHODIMP nsMessage::GetMsgFolder(nsIMsgFolder **folder)
{
if(!folder)
return NS_ERROR_NULL_POINTER;
*folder = mFolder;
if(mFolder)
{
NS_ADDREF(mFolder);
return NS_OK;
}
else
return NS_ERROR_NULL_POINTER;
}
NS_IMETHODIMP nsMessage::SetMsgFolder(nsIMsgFolder *folder)
{
mFolder = folder;
//We don't want to own folder, so don't AddRef
return NS_OK;
}
NS_IMETHODIMP nsMessage::SetMsgDBHdr(nsIMsgDBHdr *hdr)
{
mMsgHdr = dont_QueryInterface(hdr);
return NS_OK;
}
NS_IMETHODIMP nsMessage::GetMsgDBHdr(nsIMsgDBHdr **hdr)
{
*hdr = mMsgHdr;
if(*hdr)
{
NS_ADDREF(*hdr);
return NS_OK;
}
else
return NS_ERROR_NULL_POINTER;
}

View File

@@ -1,113 +0,0 @@
/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*-
*
* The contents of this file are subject to the Netscape Public License
* Version 1.0 (the "NPL"); you may not use this file except in
* compliance with the NPL. You may obtain a copy of the NPL at
* http://www.mozilla.org/NPL/
*
* Software distributed under the NPL is distributed on an "AS IS" basis,
* WITHOUT WARRANTY OF ANY KIND, either express or implied. See the NPL
* for the specific language governing rights and limitations under the
* NPL.
*
* The Initial Developer of this code under the NPL is Netscape
* Communications Corporation. Portions created by Netscape are
* Copyright (C) 1999 Netscape Communications Corporation. All Rights
* Reserved.
*/
/********************************************************************************************************
Interface for representing Messenger folders.
*********************************************************************************************************/
#ifndef nsMessage_h__
#define nsMessage_h__
#include "msgCore.h"
#include "nsIMessage.h" /* include the interface we are going to support */
#include "nsRDFResource.h"
#include "nsIMsgHdr.h"
#include "nsCOMPtr.h"
class NS_MSG_BASE nsMessage: public nsRDFResource, public nsIDBMessage
{
public:
nsMessage(void);
virtual ~nsMessage(void);
NS_DECL_ISUPPORTS_INHERITED
NS_DECL_NSIMESSAGE
NS_DECL_NSIDBMESSAGE
NS_IMETHOD Init(const char *aURI);
//nsIMsgHdr
NS_IMETHOD GetProperty(const char *propertyName, nsString &resultProperty);
NS_IMETHOD SetProperty(const char *propertyName, nsString &propertyStr);
NS_IMETHOD GetUint32Property(const char *propertyName, PRUint32 *pResult);
NS_IMETHOD SetUint32Property(const char *propertyName, PRUint32 propertyVal);
NS_IMETHOD GetNumReferences(PRUint16 *result);
NS_IMETHOD GetStringReference(PRInt32 refNum, nsCString &resultReference);
NS_IMETHOD GetDate(PRTime *result);
NS_IMETHOD SetDate(PRTime date);
NS_IMETHOD SetMessageId(const char *messageId);
NS_IMETHOD SetReferences(const char *references);
NS_IMETHOD SetCCList(const char *ccList);
NS_IMETHOD SetRecipients(const char *recipients, PRBool recipientsIsNewsgroup);
NS_IMETHOD SetRecipientsArray(const char *names, const char *addresses, PRUint32 numAddresses);
NS_IMETHOD SetCCListArray(const char *names, const char *addresses, PRUint32 numAddresses);
NS_IMETHOD SetAuthor(const char *author);
NS_IMETHOD SetSubject(const char *subject);
NS_IMETHOD SetStatusOffset(PRUint32 statusOffset);
NS_IMETHOD GetAuthor(nsString *resultAuthor);
NS_IMETHOD GetSubject(nsString *resultSubject);
NS_IMETHOD GetRecipients(nsString *resultRecipients);
NS_IMETHOD GetCCList(nsString *ccList);
NS_IMETHOD GetMessageId(nsCString *resultMessageId);
NS_IMETHOD GetMime2DecodedAuthor(nsString *resultAuthor);
NS_IMETHOD GetMime2DecodedSubject(nsString *resultSubject);
NS_IMETHOD GetMime2DecodedRecipients(nsString *resultRecipients);
NS_IMETHOD GetAuthorCollationKey(nsString *resultAuthor);
NS_IMETHOD GetSubjectCollationKey(nsString *resultSubject);
NS_IMETHOD GetRecipientsCollationKey(nsString *resultRecipients);
// flag handling routines
NS_IMETHOD GetFlags(PRUint32 *result);
NS_IMETHOD SetFlags(PRUint32 flags);
NS_IMETHOD OrFlags(PRUint32 flags, PRUint32 *result);
NS_IMETHOD AndFlags(PRUint32 flags, PRUint32 *result);
// Mark message routines
NS_IMETHOD MarkRead(PRBool bRead);
NS_IMETHOD MarkFlagged(PRBool bFlagged);
NS_IMETHOD GetMessageKey(nsMsgKey *result);
NS_IMETHOD GetThreadId(nsMsgKey *result);
NS_IMETHOD SetThreadId(nsMsgKey inKey);
NS_IMETHOD SetMessageKey(nsMsgKey inKey);
NS_IMETHOD GetMessageSize(PRUint32 *result);
NS_IMETHOD SetMessageSize(PRUint32 messageSize);
NS_IMETHOD GetLineCount(PRUint32 *result);
NS_IMETHOD SetLineCount(PRUint32 lineCount);
NS_IMETHOD SetPriority(nsMsgPriority priority);
NS_IMETHOD SetPriority(const char *priority);
NS_IMETHOD GetMessageOffset(PRUint32 *result);
NS_IMETHOD GetStatusOffset(PRUint32 *result);
NS_IMETHOD GetCharSet(nsString *result);
NS_IMETHOD GetPriority(nsMsgPriority *result);
NS_IMETHOD GetThreadParent(nsMsgKey *result);
NS_IMETHOD SetThreadParent(nsMsgKey inKey);
protected:
nsIMsgFolder *mFolder;
nsCOMPtr<nsIMsgDBHdr> mMsgHdr;
};
#endif //nsMessage_h__

View File

@@ -1,530 +0,0 @@
/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*-
*
* The contents of this file are subject to the Netscape Public License
* Version 1.0 (the "NPL"); you may not use this file except in
* compliance with the NPL. You may obtain a copy of the NPL at
* http://www.mozilla.org/NPL/
*
* Software distributed under the NPL is distributed on an "AS IS" basis,
* WITHOUT WARRANTY OF ANY KIND, either express or implied. See the NPL
* for the specific language governing rights and limitations under the
* NPL.
*
* The Initial Developer of this code under the NPL is Netscape
* Communications Corporation. Portions created by Netscape are
* Copyright (C) 1999 Netscape Communications Corporation. All Rights
* Reserved.
*/
#include "msgCore.h"
#include "nsIMessage.h"
#include "nsMsgDBFolder.h"
#include "nsMsgFolderFlags.h"
#include "nsIPref.h"
#include "nsIMsgFolderCache.h"
#include "nsIMsgFolderCacheElement.h"
#include "nsIMsgMailSession.h"
#include "nsMsgBaseCID.h"
#include "nsIMsgMailNewsUrl.h"
static NS_DEFINE_CID(kPrefServiceCID, NS_PREF_CID);
static NS_DEFINE_CID(kMsgMailSessionCID, NS_MSGMAILSESSION_CID);
NS_IMPL_ADDREF_INHERITED(nsMsgDBFolder, nsMsgFolder)
NS_IMPL_RELEASE_INHERITED(nsMsgDBFolder, nsMsgFolder)
NS_IMETHODIMP nsMsgDBFolder::QueryInterface(REFNSIID aIID, void** aInstancePtr)
{
if (!aInstancePtr) return NS_ERROR_NULL_POINTER;
*aInstancePtr = nsnull;
if (aIID.Equals(nsCOMTypeInfo<nsIDBChangeListener>::GetIID()))
{
*aInstancePtr = NS_STATIC_CAST(nsIDBChangeListener*, this);
}
else if (aIID.Equals(nsCOMTypeInfo<nsIUrlListener>::GetIID()))
{
*aInstancePtr = NS_STATIC_CAST(nsIUrlListener*, this);
}
if(*aInstancePtr)
{
AddRef();
return NS_OK;
}
return nsRDFResource::QueryInterface(aIID, aInstancePtr);
}
nsMsgDBFolder::nsMsgDBFolder(void)
: mCharset(""), mAddListener(PR_TRUE)
{
}
nsMsgDBFolder::~nsMsgDBFolder(void)
{
if(mDatabase)
{
mDatabase->RemoveListener(this);
mDatabase->Close(PR_TRUE);
}
}
NS_IMETHODIMP nsMsgDBFolder::StartFolderLoading(void)
{
if(mDatabase)
mDatabase->RemoveListener(this);
mAddListener = PR_FALSE;
return NS_OK;
}
NS_IMETHODIMP nsMsgDBFolder::EndFolderLoading(void)
{
if(mDatabase)
mDatabase->AddListener(this);
mAddListener = PR_TRUE;
return NS_OK;
}
NS_IMETHODIMP nsMsgDBFolder::GetThreads(nsISimpleEnumerator** threadEnumerator)
{
nsresult rv = GetDatabase();
if(NS_SUCCEEDED(rv))
return mDatabase->EnumerateThreads(threadEnumerator);
else
return rv;
}
NS_IMETHODIMP
nsMsgDBFolder::GetThreadForMessage(nsIMessage *message, nsIMsgThread **thread)
{
nsresult rv = GetDatabase();
if(NS_SUCCEEDED(rv))
{
nsCOMPtr<nsIMsgDBHdr> msgDBHdr;
nsCOMPtr<nsIDBMessage> dbMessage(do_QueryInterface(message, &rv));
if(NS_SUCCEEDED(rv))
rv = dbMessage->GetMsgDBHdr(getter_AddRefs(msgDBHdr));
if(NS_SUCCEEDED(rv))
{
rv = mDatabase->GetThreadContainingMsgHdr(msgDBHdr, thread);
}
}
return rv;
}
NS_IMETHODIMP
nsMsgDBFolder::HasMessage(nsIMessage *message, PRBool *hasMessage)
{
if(!hasMessage)
return NS_ERROR_NULL_POINTER;
nsresult rv = GetDatabase();
if(NS_SUCCEEDED(rv))
{
nsCOMPtr<nsIMsgDBHdr> msgDBHdr, msgDBHdrForKey;
nsCOMPtr<nsIDBMessage> dbMessage(do_QueryInterface(message, &rv));
nsMsgKey key;
if(NS_SUCCEEDED(rv))
rv = dbMessage->GetMsgDBHdr(getter_AddRefs(msgDBHdr));
if(NS_SUCCEEDED(rv))
rv = msgDBHdr->GetMessageKey(&key);
if(NS_SUCCEEDED(rv))
rv = mDatabase->ContainsKey(key, hasMessage);
}
return rv;
}
NS_IMETHODIMP nsMsgDBFolder::GetCharset(PRUnichar * *aCharset)
{
nsresult rv = NS_OK;
if(!aCharset)
return NS_ERROR_NULL_POINTER;
if(mCharset == "")
{
NS_WITH_SERVICE(nsIPref, prefs, kPrefServiceCID, &rv);
char *prefCharset = nsnull;
if (NS_SUCCEEDED(rv))
{
rv = prefs->CopyCharPref("intl.character_set_name", &prefCharset);
}
nsString prefCharsetStr;
if(prefCharset)
{
prefCharsetStr = prefCharset;
PR_Free(prefCharset);
}
else
{
prefCharsetStr = "us-ascii";
}
*aCharset = prefCharsetStr.ToNewUnicode();
}
else
{
*aCharset = mCharset.ToNewUnicode();
}
return rv;
}
NS_IMETHODIMP nsMsgDBFolder::SetCharset(const PRUnichar * aCharset)
{
nsresult rv;
nsCOMPtr<nsIDBFolderInfo> folderInfo;
nsCOMPtr<nsIMsgDatabase> db;
rv = GetDBFolderInfoAndDB(getter_AddRefs(folderInfo), getter_AddRefs(db));
if(NS_SUCCEEDED(rv))
{
nsString charset(aCharset);
rv = folderInfo->SetCharacterSet(&charset);
db->Commit(nsMsgDBCommitType::kLargeCommit);
}
return rv;
}
nsresult nsMsgDBFolder::ReadDBFolderInfo(PRBool force)
{
// Since it turns out to be pretty expensive to open and close
// the DBs all the time, if we have to open it once, get everything
// we might need while we're here
nsresult result;
nsCOMPtr <nsIMsgFolderCache> folderCache;
NS_WITH_SERVICE(nsIMsgMailSession, mailSession, kMsgMailSessionCID, &result);
if(NS_SUCCEEDED(result))
{
result = mailSession->GetFolderCache(getter_AddRefs(folderCache));
if (NS_SUCCEEDED(result) && folderCache)
{
char *uri;
result = GetURI(&uri);
if (NS_SUCCEEDED(result) && uri)
{
nsCOMPtr <nsIMsgFolderCacheElement> cacheElement;
result = folderCache->GetCacheElement(uri, PR_FALSE, getter_AddRefs(cacheElement));
if (NS_SUCCEEDED(result) && cacheElement)
{
result = ReadFromFolderCache(cacheElement);
}
PR_Free(uri);
}
}
}
// if (m_master->InitFolderFromCache (this))
// return err;
if (force || !(mPrefFlags & MSG_FOLDER_PREF_CACHED))
{
nsCOMPtr<nsIDBFolderInfo> folderInfo;
nsCOMPtr<nsIMsgDatabase> db;
result = GetDBFolderInfoAndDB(getter_AddRefs(folderInfo), getter_AddRefs(db));
if(NS_SUCCEEDED(result))
{
mIsCachable = PR_TRUE;
if (folderInfo)
{
folderInfo->GetFlags(&mPrefFlags);
mPrefFlags |= MSG_FOLDER_PREF_CACHED;
folderInfo->SetFlags(mPrefFlags);
folderInfo->GetNumMessages(&mNumTotalMessages);
folderInfo->GetNumNewMessages(&mNumUnreadMessages);
//These should be put in IMAP folder only.
//folderInfo->GetImapTotalPendingMessages(&mNumPendingTotalMessages);
//folderInfo->GetImapUnreadPendingMessages(&mNumPendingUnreadMessages);
folderInfo->GetCharacterSet(&mCharset);
if (db) {
PRBool hasnew;
nsresult rv;
rv = db->HasNew(&hasnew);
if (NS_FAILED(rv)) return rv;
if (!hasnew && mNumPendingUnreadMessages <= 0) {
ClearFlag(MSG_FOLDER_FLAG_GOT_NEW);
}
}
}
}
if (db)
db->Close(PR_FALSE);
}
return result;
}
nsresult nsMsgDBFolder::SendFlagNotifications(nsISupports *item, PRUint32 oldFlags, PRUint32 newFlags)
{
nsresult rv = NS_OK;
PRUint32 changedFlags = oldFlags ^ newFlags;
if((changedFlags & MSG_FLAG_READ) || (changedFlags & MSG_FLAG_REPLIED)
|| (changedFlags & MSG_FLAG_FORWARDED)|| (changedFlags & MSG_FLAG_NEW))
{
rv = NotifyPropertyFlagChanged(item, "Status", oldFlags, newFlags);
}
else if((changedFlags & MSG_FLAG_MARKED))
{
rv = NotifyPropertyFlagChanged(item, "Flagged", oldFlags, newFlags);
}
return rv;
}
NS_IMETHODIMP
nsMsgDBFolder::GetMsgDatabase(nsIMsgDatabase** aMsgDatabase)
{
if (!aMsgDatabase || !mDatabase)
return NS_ERROR_NULL_POINTER;
*aMsgDatabase = mDatabase;
NS_ADDREF(*aMsgDatabase);
return NS_OK;
}
NS_IMETHODIMP nsMsgDBFolder::OnKeyChange(nsMsgKey aKeyChanged, PRUint32 aOldFlags, PRUint32 aNewFlags,
nsIDBChangeListener * aInstigator)
{
nsCOMPtr<nsIMsgDBHdr> pMsgDBHdr;
nsresult rv = mDatabase->GetMsgHdrForKey(aKeyChanged, getter_AddRefs(pMsgDBHdr));
if(NS_SUCCEEDED(rv) && pMsgDBHdr)
{
nsCOMPtr<nsIMessage> message;
rv = CreateMessageFromMsgDBHdr(pMsgDBHdr, getter_AddRefs(message));
if(NS_SUCCEEDED(rv))
{
nsCOMPtr<nsISupports> msgSupports(do_QueryInterface(message, &rv));
if(NS_SUCCEEDED(rv))
{
SendFlagNotifications(msgSupports, aOldFlags, aNewFlags);
}
UpdateSummaryTotals(PR_TRUE);
}
}
return NS_OK;
}
NS_IMETHODIMP nsMsgDBFolder::OnKeyDeleted(nsMsgKey aKeyChanged, nsMsgKey aParentKey, PRInt32 aFlags,
nsIDBChangeListener * aInstigator)
{
nsCOMPtr<nsIMsgDBHdr> pMsgDBHdr;
nsresult rv = mDatabase->GetMsgHdrForKey(aKeyChanged, getter_AddRefs(pMsgDBHdr));
if(NS_SUCCEEDED(rv) && pMsgDBHdr)
{
nsCOMPtr<nsIMessage> message;
rv = CreateMessageFromMsgDBHdr(pMsgDBHdr, getter_AddRefs(message));
if(NS_SUCCEEDED(rv))
{
nsCOMPtr<nsISupports> msgSupports(do_QueryInterface(message, &rv));
if(NS_SUCCEEDED(rv))
{
NotifyItemDeleted(msgSupports);
}
UpdateSummaryTotals(PR_TRUE);
}
}
return NS_OK;
}
NS_IMETHODIMP nsMsgDBFolder::OnKeyAdded(nsMsgKey aKeyChanged, nsMsgKey aParentKey , PRInt32 aFlags,
nsIDBChangeListener * aInstigator)
{
nsresult rv;
nsCOMPtr<nsIMsgDBHdr> msgDBHdr;
rv = mDatabase->GetMsgHdrForKey(aKeyChanged, getter_AddRefs(msgDBHdr));
if(NS_SUCCEEDED(rv) && msgDBHdr)
{
nsCOMPtr<nsIMessage> message;
rv = CreateMessageFromMsgDBHdr(msgDBHdr, getter_AddRefs(message));
if(NS_SUCCEEDED(rv))
{
nsCOMPtr<nsISupports> msgSupports(do_QueryInterface(message));
if(msgSupports)
{
NotifyItemAdded(msgSupports);
}
UpdateSummaryTotals(PR_TRUE);
}
}
return NS_OK;
}
NS_IMETHODIMP nsMsgDBFolder::OnParentChanged(nsMsgKey aKeyChanged, nsMsgKey oldParent, nsMsgKey newParent,
nsIDBChangeListener * aInstigator)
{
return NS_OK;
}
NS_IMETHODIMP nsMsgDBFolder::OnAnnouncerGoingAway(nsIDBChangeAnnouncer *
instigator)
{
if (mDatabase)
{
mDatabase->RemoveListener(this);
mDatabase = null_nsCOMPtr();
}
return NS_OK;
}
NS_IMETHODIMP nsMsgDBFolder::ManyHeadersToDownload(PRBool *retval)
{
PRInt32 numTotalMessages;
if (!retval)
return NS_ERROR_NULL_POINTER;
if (!mDatabase)
*retval = PR_TRUE;
else if (NS_SUCCEEDED(GetTotalMessages(PR_FALSE, &numTotalMessages)) && numTotalMessages <= 0)
*retval = PR_TRUE;
else
*retval = PR_FALSE;
return NS_OK;
}
nsresult nsMsgDBFolder::ReadFromFolderCache(nsIMsgFolderCacheElement *element)
{
nsresult rv = NS_OK;
char *charset;
element->GetInt32Property("flags", &mPrefFlags);
element->GetInt32Property("totalMsgs", &mNumTotalMessages);
element->GetInt32Property("totalUnreadMsgs", &mNumUnreadMessages);
element->GetStringProperty("charset", &charset);
#ifdef DEBUG_bienvenu1
char *uri;
GetURI(&uri);
printf("read total %ld for %s\n", mNumTotalMessages, uri);
PR_Free(uri);
#endif
mCharset = charset;
PR_FREEIF(charset);
mPrefFlags |= MSG_FOLDER_PREF_CACHED;
return rv;
}
NS_IMETHODIMP nsMsgDBFolder::WriteToFolderCache(nsIMsgFolderCache *folderCache)
{
nsCOMPtr <nsIEnumerator> aEnumerator;
nsresult rv = GetSubFolders(getter_AddRefs(aEnumerator));
if(NS_FAILED(rv))
return rv;
char *uri = nsnull;
rv = GetURI(&uri);
if (folderCache)
{
nsCOMPtr <nsIMsgFolderCacheElement> cacheElement;
rv = folderCache->GetCacheElement(uri, PR_TRUE, getter_AddRefs(cacheElement));
if (NS_SUCCEEDED(rv) && cacheElement)
rv = WriteToFolderCacheElem(cacheElement);
}
PR_FREEIF(uri);
nsCOMPtr<nsISupports> aItem;
rv = aEnumerator->First();
if (!NS_SUCCEEDED(rv))
return NS_OK; // it's OK, there are no sub-folders.
while(NS_SUCCEEDED(rv))
{
rv = aEnumerator->CurrentItem(getter_AddRefs(aItem));
if (NS_FAILED(rv)) break;
nsCOMPtr<nsIMsgFolder> aMsgFolder(do_QueryInterface(aItem, &rv));
if (NS_SUCCEEDED(rv))
{
if (folderCache)
{
rv = aMsgFolder->WriteToFolderCache(folderCache);
if (!NS_SUCCEEDED(rv))
break;
}
}
rv = aEnumerator->Next();
if (!NS_SUCCEEDED(rv))
{
rv = NS_OK;
break;
}
}
return rv;
}
NS_IMETHODIMP nsMsgDBFolder::WriteToFolderCacheElem(nsIMsgFolderCacheElement *element)
{
nsresult rv = NS_OK;
element->SetInt32Property("flags", mPrefFlags);
element->SetInt32Property("totalMsgs", mNumTotalMessages);
element->SetInt32Property("totalUnreadMsgs", mNumUnreadMessages);
element->SetStringProperty("charset", (const char *) nsCAutoString(mCharset));
#ifdef DEBUG_bienvenu1
char *uri;
GetURI(&uri);
printf("writing total %ld for %s\n", mNumTotalMessages, uri);
PR_Free(uri);
#endif
return rv;
}
NS_IMETHODIMP
nsMsgDBFolder::MarkAllMessagesRead(void)
{
nsresult rv = GetDatabase();
if(NS_SUCCEEDED(rv))
return mDatabase->MarkAllRead(nsnull);
return rv;
}
NS_IMETHODIMP
nsMsgDBFolder::OnStartRunningUrl(nsIURI *aUrl)
{
NS_PRECONDITION(aUrl, "just a sanity check");
return NS_OK;
}
NS_IMETHODIMP
nsMsgDBFolder::OnStopRunningUrl(nsIURI *aUrl, nsresult aExitCode)
{
NS_PRECONDITION(aUrl, "just a sanity check");
nsCOMPtr<nsIMsgMailNewsUrl> mailUrl = do_QueryInterface(aUrl);
if (mailUrl)
{
PRBool updatingFolder = PR_FALSE;
if (NS_SUCCEEDED(mailUrl->GetUpdatingFolder(&updatingFolder)) && updatingFolder)
{
NotifyFolderLoaded();
}
}
return NS_OK;
}

View File

@@ -1,80 +0,0 @@
/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*-
*
* The contents of this file are subject to the Netscape Public License
* Version 1.0 (the "NPL"); you may not use this file except in
* compliance with the NPL. You may obtain a copy of the NPL at
* http://www.mozilla.org/NPL/
*
* Software distributed under the NPL is distributed on an "AS IS" basis,
* WITHOUT WARRANTY OF ANY KIND, either express or implied. See the NPL
* for the specific language governing rights and limitations under the
* NPL.
*
* The Initial Developer of this code under the NPL is Netscape
* Communications Corporation. Portions created by Netscape are
* Copyright (C) 1999 Netscape Communications Corporation. All Rights
* Reserved.
*/
#ifndef nsMsgDBFolder_h__
#define nsMsgDBFolder_h__
#include "msgCore.h"
#include "nsMsgFolder.h"
#include "nsIDBFolderInfo.h"
#include "nsIMsgDatabase.h"
#include "nsIMessage.h"
#include "nsCOMPtr.h"
#include "nsIDBChangeListener.h"
#include "nsIUrlListener.h"
class nsIMsgFolderCacheElement;
/*
* nsMsgDBFolder
* class derived from nsMsgFolder for those folders that use an nsIMsgDatabase
*/
class NS_MSG_BASE nsMsgDBFolder: public nsMsgFolder,
public nsIDBChangeListener,
public nsIUrlListener
{
public:
nsMsgDBFolder(void);
virtual ~nsMsgDBFolder(void);
NS_DECL_NSIDBCHANGELISTENER
NS_IMETHOD StartFolderLoading(void);
NS_IMETHOD EndFolderLoading(void);
NS_IMETHOD GetThreads(nsISimpleEnumerator** threadEnumerator);
NS_IMETHOD GetThreadForMessage(nsIMessage *message, nsIMsgThread **thread);
NS_IMETHOD HasMessage(nsIMessage *message, PRBool *hasMessage);
NS_IMETHOD GetCharset(PRUnichar * *aCharset);
NS_IMETHOD SetCharset(const PRUnichar * aCharset);
NS_IMETHOD GetMsgDatabase(nsIMsgDatabase** aMsgDatabase);
NS_DECL_ISUPPORTS_INHERITED
NS_DECL_NSIURLLISTENER
NS_IMETHOD WriteToFolderCache(nsIMsgFolderCache *folderCache);
NS_IMETHOD WriteToFolderCacheElem(nsIMsgFolderCacheElement *element);
NS_IMETHOD ManyHeadersToDownload(PRBool *_retval);
NS_IMETHOD MarkAllMessagesRead(void);
protected:
virtual nsresult ReadDBFolderInfo(PRBool force);
virtual nsresult GetDatabase() = 0;
virtual nsresult SendFlagNotifications(nsISupports *item, PRUint32 oldFlags, PRUint32 newFlags);
nsresult ReadFromFolderCache(nsIMsgFolderCacheElement *element);
protected:
nsCOMPtr<nsIMsgDatabase> mDatabase;
nsString mCharset;
PRBool mAddListener;
};
#endif

File diff suppressed because it is too large Load Diff

View File

@@ -1,268 +0,0 @@
/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*-
*
* The contents of this file are subject to the Netscape Public License
* Version 1.0 (the "NPL"); you may not use this file except in
* compliance with the NPL. You may obtain a copy of the NPL at
* http://www.mozilla.org/NPL/
*
* Software distributed under the NPL is distributed on an "AS IS" basis,
* WITHOUT WARRANTY OF ANY KIND, either express or implied. See the NPL
* for the specific language governing rights and limitations under the
* NPL.
*
* The Initial Developer of this code under the NPL is Netscape
* Communications Corporation. Portions created by Netscape are
* Copyright (C) 1998 Netscape Communications Corporation. All Rights
* Reserved.
*/
/********************************************************************************************************
Interface for representing Messenger folders.
*********************************************************************************************************/
#ifndef nsMsgFolder_h__
#define nsMsgFolder_h__
#include "msgCore.h"
#include "nsIMsgFolder.h" /* include the interface we are going to support */
#include "nsRDFResource.h"
#include "nsIDBFolderInfo.h"
#include "nsIMsgDatabase.h"
#include "nsIMsgIncomingServer.h"
#include "nsCOMPtr.h"
#include "nsIURL.h"
/*
* MsgFolder
*/
class NS_MSG_BASE nsMsgFolder: public nsRDFResource, public nsIMsgFolder
{
public:
nsMsgFolder(void);
virtual ~nsMsgFolder(void);
NS_DECL_ISUPPORTS_INHERITED
NS_DECL_NSICOLLECTION
NS_DECL_NSIFOLDER
// eventually this will be an instantiable class, and we should
// use this macro:
// NS_DECL_NSIMSGFOLDER
// right now a few of these methods are left abstract, and
// are commented out below
// begin NS_DECL_NSIMSGFOLDER
NS_IMETHOD AddUnique(nsISupports *element);
NS_IMETHOD ReplaceElement(nsISupports *element, nsISupports *newElement);
NS_IMETHOD GetMessages(nsISimpleEnumerator **_retval);
NS_IMETHOD GetThreads(nsISimpleEnumerator **_retval);
NS_IMETHOD StartFolderLoading(void);
NS_IMETHOD EndFolderLoading(void);
NS_IMETHOD UpdateFolder(void);
NS_IMETHOD GetThreadForMessage(nsIMessage *message, nsIMsgThread **_retval);
NS_IMETHOD HasMessage(nsIMessage *message, PRBool *_retval);
NS_IMETHOD GetVisibleSubFolders(nsIEnumerator **_retval);
NS_IMETHOD GetPrettiestName(PRUnichar * *aPrettiestName);
NS_IMETHOD GetFolderURL(char * *aFolderURL);
NS_IMETHOD GetDeleteIsMoveToTrash(PRBool *aDeleteIsMoveToTrash);
NS_IMETHOD GetShowDeletedMessages(PRBool *aShowDeletedMessages);
NS_IMETHOD GetServer(nsIMsgIncomingServer * *aServer);
NS_IMETHOD GetIsServer(PRBool *aIsServer);
NS_IMETHOD OnCloseFolder(void);
NS_IMETHOD Delete(void);
NS_IMETHOD DeleteSubFolders(nsISupportsArray *folders);
NS_IMETHOD PropagateDelete(nsIMsgFolder *folder, PRBool deleteStorage);
NS_IMETHOD RecursiveDelete(PRBool deleteStorage);
NS_IMETHOD CreateSubfolder(const char *folderName);
NS_IMETHOD Compact(void);
NS_IMETHOD EmptyTrash(void);
NS_IMETHOD Rename(const char *name);
NS_IMETHOD Adopt(nsIMsgFolder *srcFolder, PRUint32 *outPos);
NS_IMETHOD ContainsChildNamed(const char *name, PRBool *_retval);
NS_IMETHOD IsAncestorOf(nsIMsgFolder *folder, PRBool *_retval);
NS_IMETHOD GenerateUniqueSubfolderName(const char *prefix, nsIMsgFolder *otherFolder, char **_retval);
NS_IMETHOD UpdateSummaryTotals(PRBool force);
NS_IMETHOD SummaryChanged(void);
NS_IMETHOD GetNumUnread(PRBool deep, PRInt32 *_retval);
NS_IMETHOD GetTotalMessages(PRBool deep, PRInt32 *_retval);
NS_IMETHOD GetExpungedBytesCount(PRUint32 *aExpungedBytesCount);
NS_IMETHOD GetDeletable(PRBool *aDeletable);
NS_IMETHOD GetCanCreateChildren(PRBool *aCanCreateChildren);
NS_IMETHOD GetCanBeRenamed(PRBool *aCanBeRenamed);
NS_IMETHOD GetRequiresCleanup(PRBool *aRequiresCleanup);
NS_IMETHOD ClearRequiresCleanup(void);
NS_IMETHOD ManyHeadersToDownload(PRBool *_retval);
NS_IMETHOD GetKnowsSearchNntpExtension(PRBool *aKnowsSearchNntpExtension);
NS_IMETHOD GetAllowsPosting(PRBool *aAllowsPosting);
NS_IMETHOD GetDisplayRecipients(PRBool *aDisplayRecipients);
NS_IMETHOD GetRelativePathName(char * *aRelativePathName);
NS_IMETHOD GetSizeOnDisk(PRUint32 *aSizeOnDisk);
NS_IMETHOD RememberPassword(const char *password);
NS_IMETHOD GetRememberedPassword(char * *aRememberedPassword);
NS_IMETHOD UserNeedsToAuthenticateForFolder(PRBool displayOnly, PRBool *_retval);
NS_IMETHOD GetUsername(char * *aUsername);
NS_IMETHOD GetHostname(char * *aHostname);
NS_IMETHOD SetFlag(PRUint32 flag);
NS_IMETHOD ClearFlag(PRUint32 flag);
NS_IMETHOD GetFlag(PRUint32 flag, PRBool *_retval);
NS_IMETHOD ToggleFlag(PRUint32 flag);
NS_IMETHOD OnFlagChange(PRUint32 flag);
NS_IMETHOD GetFlags(PRUint32 *aFlags);
NS_IMETHOD GetFoldersWithFlag(PRUint32 flags, nsIMsgFolder **result, PRUint32 resultsize, PRUint32 *numFolders);
NS_IMETHOD GetExpansionArray(nsISupportsArray *expansionArray);
// NS_IMETHOD DeleteMessages(nsISupportsArray *message, nsITransactionManager *txnMgr, PRBool deleteStorage);
NS_IMETHOD CopyMessages(nsIMsgFolder *srcFolder, nsISupportsArray *messages, PRBool isMove, nsITransactionManager *txnMgr, nsIMsgCopyServiceListener *listener);
NS_IMETHOD CopyFileMessage(nsIFileSpec *fileSpec, nsIMessage *msgToReplace, PRBool isDraft, nsITransactionManager *txnMgr, nsIMsgCopyServiceListener *listener);
NS_IMETHOD AcquireSemaphore(nsISupports *semHolder);
NS_IMETHOD ReleaseSemaphore(nsISupports *semHolder);
NS_IMETHOD TestSemaphore(nsISupports *semHolder, PRBool *_retval);
NS_IMETHOD GetLocked(PRBool *aLocked);
// NS_IMETHOD CreateMessageFromMsgDBHdr(nsIMsgDBHdr *msgDBHdr, nsIMessage **_retval);
NS_IMETHOD GetNewMessages(void);
// NS_IMETHOD WriteToFolderCache(nsIMsgFolderCache *folderCache);
// NS_IMETHOD GetCharset(PRUnichar * *aCharset);
// NS_IMETHOD SetCharset(const PRUnichar * aCharset);
NS_IMETHOD GetBiffState(PRUint32 *aBiffState);
NS_IMETHOD SetBiffState(PRUint32 aBiffState);
NS_IMETHOD GetNumNewMessages(PRInt32 *aNumNewMessages);
NS_IMETHOD SetNumNewMessages(PRInt32 aNumNewMessages);
NS_IMETHOD GetNewMessagesNotificationDescription(PRUnichar * *aNewMessagesNotificationDescription);
NS_IMETHOD GetRootFolder(nsIMsgFolder * *aRootFolder);
NS_IMETHOD GetMsgDatabase(nsIMsgDatabase * *aMsgDatabase);
NS_IMETHOD GetPath(nsIFileSpec * *aPath);
NS_IMETHOD MarkMessagesRead(nsISupportsArray *messages, PRBool markRead);
NS_IMETHOD MarkAllMessagesRead(void);
NS_IMETHOD MarkMessagesFlagged(nsISupportsArray *messages, PRBool markFlagged);
NS_IMETHOD GetChildWithURI(const char *uri, PRBool deep, nsIMsgFolder **_retval);
// end NS_DECL_NSIMSGFOLDER
// nsRDFResource overrides
NS_IMETHOD Init(const char* aURI);
#if 0
static nsresult GetRoot(nsIMsgFolder* *result);
#endif
// Gets the URL that represents the given message. Returns a newly
// created string that must be free'd using XP_FREE().
// If the db is NULL, then returns a URL that represents the entire
// folder as a whole.
#ifdef HAVE_DB
NS_IMETHOD BuildUrl(nsMsgDatabase *db, nsMsgKey key, char ** url);
// updates num messages and num unread - should be pure virtual
// when I get around to implementing in all subclasses?
NS_IMETHOD GetTotalMessagesInDB(PRUint32 *totalMessages) const; // How many messages in database.
// These functions are used for tricking the front end into thinking that we have more
// messages than are really in the DB. This is usually after and IMAP message copy where
// we don't want to do an expensive select until the user actually opens that folder
// These functions are called when MSG_Master::GetFolderLineById is populating a MSG_FolderLine
// struct used by the FE
int32 GetNumPendingUnread(PRBool deep = PR_FALSE);
int32 GetNumPendingTotalMessages(PRBool deep = PR_FALSE);
void ChangeNumPendingUnread(int32 delta);
void ChangeNumPendingTotalMessages(int32 delta);
NS_IMETHOD SetFolderPrefFlags(PRUint32 flags);
NS_IMETHOD GetFolderPrefFlags(PRUint32 *flags);
NS_IMETHOD SetLastMessageLoaded(nsMsgKey lastMessageLoaded);
NS_IMETHOD GetLastMessageLoaded();
#endif
#ifdef HAVE_ADMINURL
NS_IMETHOD GetAdminUrl(MWContext *context, MSG_AdminURLType type);
NS_IMETHOD HaveAdminUrl(MSG_AdminURLType type, PRBool *hadAdminUrl);
#endif
#ifdef HAVE_PANE
NS_IMETHOD MarkAllRead(MSG_Pane *pane, PRBool deep);
NS_IMETHOD SetFlagInAllFolderPanes(PRUint32 which);
#endif
#ifdef HAVE_NET
NS_IMETHOD EscapeMessageId(const char *messageId, const char **escapeMessageID);
NS_IMETHOD ShouldPerformOperationOffline(PRBool *performOffline);
#endif
#ifdef HAVE_CACHE
virtual nsresult WriteToCache(XP_File);
virtual nsresult ReadFromCache(char *);
virtual PRBool IsCachable();
void SkipCacheTokens(char **ppBuf, int numTokens);
#endif
#ifdef DOES_FOLDEROPERATIONS
int DownloadToTempFileAndUpload(MessageCopyInfo *copyInfo, nsMsgKeyArray &keysToSave, MSG_FolderInfo *dstFolder, nsMsgDatabase *sourceDB);
void UpdateMoveCopyStatus(MWContext *context, PRBool isMove, int32 curMsgCount, int32 totMessages);
#endif
virtual nsresult GetDBFolderInfoAndDB(nsIDBFolderInfo **folderInfo, nsIMsgDatabase **db) = 0;
NS_IMETHOD MatchName(nsString *name, PRBool *matches);
protected:
nsresult NotifyPropertyChanged(char *property, char* oldValue, char* newValue);
nsresult NotifyPropertyFlagChanged(nsISupports *item, char *property, PRUint32 oldValue,
PRUint32 newValue);
nsresult NotifyItemAdded(nsISupports *item);
nsresult NotifyItemDeleted(nsISupports *item);
nsresult NotifyFolderLoaded();
// this is a little helper function that is not part of the public interface.
// we use it to get the IID of the incoming server for the derived folder.
// w/out a function like this we would have to implement GetServer in each
// derived folder class.
virtual const char* GetIncomingServerType() = 0;
protected:
PRUint32 mFlags;
nsIFolder *mParent; //This won't be refcounted for ownership reasons.
PRInt32 mNumUnreadMessages; /* count of unread messages (-1 means
unknown; -2 means unknown but we already
tried to find out.) */
PRInt32 mNumTotalMessages; /* count of existing messages. */
nsCOMPtr<nsISupportsArray> mSubFolders;
nsVoidArray *mListeners; //This can't be an nsISupportsArray because due to
//ownership issues, listeners can't be AddRef'd
PRInt32 mPrefFlags; // prefs like MSG_PREF_OFFLINE, MSG_PREF_ONE_PANE, etc
nsISupports *mSemaphoreHolder; // set when the folder is being written to
//Due to ownership issues, this won't be AddRef'd.
nsIMsgIncomingServer* m_server; //this won't be addrefed....ownership issue here
#ifdef HAVE_DB
nsMsgKey m_lastMessageLoaded;
#endif
// These values are used for tricking the front end into thinking that we have more
// messages than are really in the DB. This is usually after and IMAP message copy where
// we don't want to do an expensive select until the user actually opens that folder
PRInt32 mNumPendingUnreadMessages;
PRInt32 mNumPendingTotalMessages;
PRUint32 mBiffState;
PRInt32 mNumNewBiffMessages;
PRBool mIsCachable;
//
// stuff from the uri
//
PRBool mIsServer;
nsString mName;
};
#endif

View File

@@ -1,598 +0,0 @@
/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*-
*
* The contents of this file are subject to the Netscape Public License
* Version 1.0 (the "NPL"); you may not use this file except in
* compliance with the NPL. You may obtain a copy of the NPL at
* http://www.mozilla.org/NPL/
*
* Software distributed under the NPL is distributed on an "AS IS" basis,
* WITHOUT WARRANTY OF ANY KIND, either express or implied. See the NPL
* for the specific language governing rights and limitations under the
* NPL.
*
* The Initial Developer of this code under the NPL is Netscape
* Communications Corporation. Portions created by Netscape are
* Copyright (C) 1998 Netscape Communications Corporation. All Rights
* Reserved.
*/
#include "msgCore.h" // precompiled header...
#include "prlog.h"
#include "nsMsgGroupRecord.h"
#include "plstr.h"
#include "prmem.h"
#include "nsEscape.h"
#include "nsCRT.h"
// mscott: this is lame...I know....
#define MK_OUT_OF_MEMORY 1
const PRUint32 F_ISGROUP = 0x00000001;
const PRUint32 F_EXPANDED = 0x00000002;
const PRUint32 F_CATCONT = 0x00000004;
const PRUint32 F_VIRTUAL = 0x00000008;
const PRUint32 F_DIRTY = 0x00000010;
const PRUint32 F_DESCENDENTSLOADED = 0x00000020;
const PRUint32 F_HTMLOKGROUP = 0x00000040;
const PRUint32 F_HTMLOKTREE = 0x00000080;
const PRUint32 F_NEEDEXTRAINFO = 0x00000100;
const PRUint32 F_DOESNOTEXIST = 0x00000200;
const PRUint32 RUNTIMEFLAGS = // Flags to be sure *not* to write to disk.
F_DIRTY | F_DESCENDENTSLOADED | F_EXPANDED;
int
nsMsgGroupRecord::GroupNameCompare(const char* name1, const char* name2,
char delimiter, PRBool caseInsensitive)
{
if (caseInsensitive)
{
while (*name1 && (nsCRT::ToUpper(*name1) == nsCRT::ToUpper(*name2))) {
name1++;
name2++;
}
}
else
{
while (*name1 && *name1 == *name2) {
name1++;
name2++;
}
}
if (*name1 && *name2) {
if (*name1 == delimiter) return -1;
if (*name2 == delimiter) return 1;
}
if (caseInsensitive)
return int(nsCRT::ToUpper(*name1)) - int(nsCRT::ToUpper(*name2));
else
return int(*name1) - int(*name2);
}
nsMsgGroupRecord*
nsMsgGroupRecord::Create(nsMsgGroupRecord* parent, const char* partname,
PRInt64 aTime, PRInt32 uniqueid, PRInt32 fileoffset)
{
nsMsgGroupRecord* result = new nsMsgGroupRecord(parent, partname,
aTime, uniqueid, fileoffset);
if (result && partname && !result->m_partname) {
// We ran out of memory.
delete result;
result = NULL;
}
result->InitializeSibling();
return result;
}
MOZ_DECL_CTOR_COUNTER(nsMsgGroupRecord);
nsMsgGroupRecord::nsMsgGroupRecord(nsMsgGroupRecord* parent, const char* partname,
PRInt64 aTime, PRInt32 uniqueid, PRInt32 fileoffset,
char delimiter /* = '.' */)
{
MOZ_COUNT_CTOR(nsMsgGroupRecord);
int length;
m_prettyname = NULL;
m_parent = parent;
m_children = NULL;
m_sibling = NULL;
m_flags = 0;
m_partname = NULL;
m_addtime = aTime;
m_uniqueId = uniqueid;
m_fileoffset = fileoffset;
m_delimiter = delimiter;
if (partname) {
length = PL_strlen(partname);
// PR_ASSERT(parent != NULL);
m_partname = new char [length + 1];
if (!m_partname) {
m_parent = NULL;
return;
}
PL_strcpy(m_partname, partname);
}
}
nsMsgGroupRecord::~nsMsgGroupRecord()
{
MOZ_COUNT_DTOR(nsMsgGroupRecord);
delete [] m_partname;
m_partname = NULL;
delete [] m_prettyname;
m_prettyname = NULL;
while (m_children) {
delete m_children;
}
m_children = NULL;
if (m_parent) {
nsMsgGroupRecord** ptr;
for (ptr = &(m_parent->m_children);
*ptr;
ptr = &((*ptr)->m_sibling)) {
if (*ptr == this) {
*ptr = m_sibling;
break;
}
}
}
}
void nsMsgGroupRecord::InitializeSibling()
{
if (m_parent) {
PR_ASSERT(m_partname != NULL);
nsMsgGroupRecord** ptr;
for (ptr = &(m_parent->m_children) ; *ptr ; ptr = &((*ptr)->m_sibling)) {
int comp = GroupNameCompare((*ptr)->m_partname, m_partname, m_delimiter, IsIMAPGroupRecord());
PR_ASSERT(comp != 0);
if (comp >= 0) break;
}
m_sibling = *ptr;
*ptr = this;
}
}
nsMsgGroupRecord*
nsMsgGroupRecord::FindDescendant(const char* name)
{
if (!name || !*name) return this;
char* ptr = PL_strchr(name, m_delimiter);
if (ptr) *ptr = '\0';
nsMsgGroupRecord* child;
for (child = m_children ; child ; child = child->m_sibling) {
if (PL_strcmp(child->m_partname, name) == 0) {
break;
}
}
if (ptr) {
*ptr++ = m_delimiter;
if (child) {
return child->FindDescendant(ptr);
}
}
return child;
}
nsMsgGroupRecord*
nsMsgGroupRecord::GetSiblingOrAncestorSibling()
{
if (m_sibling) return m_sibling;
if (m_parent) return m_parent->GetSiblingOrAncestorSibling();
return NULL;
}
nsMsgGroupRecord*
nsMsgGroupRecord::GetNextAlphabetic()
{
nsMsgGroupRecord* result;
if (m_children) result = m_children;
else result = GetSiblingOrAncestorSibling();
#ifdef DEBUG_slowAndParanoid
if (result) {
char* ptr1 = GetFullName();
char* ptr2 = result->GetFullName();
PR_ASSERT(GroupNameCompare(ptr1, ptr2) < 0);
delete [] ptr1;
delete [] ptr2;
}
#endif
return result;
}
nsMsgGroupRecord*
nsMsgGroupRecord::GetNextAlphabeticNoCategories()
{
if (IsCategoryContainer()) {
return GetSiblingOrAncestorSibling();
} else {
return GetNextAlphabetic();
}
}
char*
nsMsgGroupRecord::GetFullName()
{
int length = 0;
nsMsgGroupRecord* ptr;
for (ptr = this ; ptr ; ptr = ptr->m_parent) {
if (ptr->m_partname) length += PL_strlen(ptr->m_partname) + 1;
}
PR_ASSERT(length > 0);
if (length <= 0) return NULL;
char* result = new char [length];
if (result) {
SuckInName(result);
PR_ASSERT(int(PL_strlen(result)) + 1 == length);
}
return result;
}
char*
nsMsgGroupRecord::SuckInName(char* ptr)
{
if (m_parent && m_parent->m_partname) {
ptr = m_parent->SuckInName(ptr);
*ptr++ = m_delimiter;
}
PL_strcpy(ptr, m_partname);
return ptr + PL_strlen(ptr);
}
int
nsMsgGroupRecord::SetPrettyName(const char* name)
{
if (name == NULL && m_prettyname == NULL) return 0;
m_flags |= F_DIRTY;
delete [] m_prettyname;
m_prettyname = NULL;
if (!name || !*name) {
return 0;
}
int length = PL_strlen(name);
m_prettyname = new char [length + 1];
if (!m_prettyname) {
return MK_OUT_OF_MEMORY;
}
PL_strcpy(m_prettyname, name);
return 1;
}
PRBool
nsMsgGroupRecord::IsCategory()
{
return GetCategoryContainer() != NULL;
}
PRBool
nsMsgGroupRecord::IsCategoryContainer()
{
return (m_flags & F_CATCONT) != 0;
}
PRBool
nsMsgGroupRecord::NeedsExtraInfo()
{
return (m_flags & F_NEEDEXTRAINFO) != 0;
}
int
nsMsgGroupRecord::SetNeedsExtraInfo(PRBool value)
{
return TweakFlag(F_NEEDEXTRAINFO, value);
}
int
nsMsgGroupRecord::SetIsCategoryContainer(PRBool value)
{
// refuse to set a group to be a category container if it has a parent
// that's a category container.
if (! (value && GetCategoryContainer()))
return TweakFlag(F_CATCONT, value);
else
return 0;
}
nsMsgGroupRecord*
nsMsgGroupRecord::GetCategoryContainer()
{
if (IsCategoryContainer()) return NULL;
for (nsMsgGroupRecord* ptr = m_parent ; ptr ; ptr = ptr->m_parent) {
if (ptr->IsCategoryContainer()) return ptr;
}
return NULL;
}
nsresult
nsMsgGroupRecord::IsVirtual(PRBool *retval)
{
*retval =( (m_flags & F_VIRTUAL) != 0);
return NS_OK;
}
nsresult
nsMsgGroupRecord::SetIsVirtual(PRBool value)
{
TweakFlag(F_VIRTUAL, value);
return NS_OK;
}
PRBool
nsMsgGroupRecord::IsExpanded()
{
return (m_flags & F_EXPANDED) != 0;
}
int
nsMsgGroupRecord::SetIsExpanded(PRBool value)
{
return TweakFlag(F_EXPANDED, value);
}
PRBool
nsMsgGroupRecord::IsHTMLOKGroup()
{
return (m_flags & F_HTMLOKGROUP) != 0;
}
int
nsMsgGroupRecord::SetIsHTMLOKGroup(PRBool value)
{
return TweakFlag(F_HTMLOKGROUP, value);
}
PRBool
nsMsgGroupRecord::IsHTMLOKTree()
{
return (m_flags & F_HTMLOKTREE) != 0;
}
int
nsMsgGroupRecord::SetIsHTMLOKTree(PRBool value)
{
return TweakFlag(F_HTMLOKTREE, value);
}
PRBool
nsMsgGroupRecord::IsGroup()
{
return (m_flags & F_ISGROUP) != 0;
}
int
nsMsgGroupRecord::SetIsGroup(PRBool value)
{
return TweakFlag(F_ISGROUP, value);
}
PRBool
nsMsgGroupRecord::IsDescendentsLoaded()
{
return (m_flags & F_DESCENDENTSLOADED) != 0;
}
int
nsMsgGroupRecord::SetIsDescendentsLoaded(PRBool value)
{
PR_ASSERT(value); // No reason we'd ever unset this.
TweakFlag(F_DESCENDENTSLOADED, PR_TRUE);
nsMsgGroupRecord* child;
for (child = m_children ; child ; child = child->m_sibling) {
child->SetIsDescendentsLoaded(value);
}
return 0;
}
PRBool nsMsgGroupRecord::DoesNotExistOnServer()
{
return (m_flags & F_DOESNOTEXIST) != 0;
}
int nsMsgGroupRecord::SetDoesNotExistOnServer(PRBool value)
{
if (value) // turn off group flag if doesn't exist on server.
TweakFlag(F_ISGROUP, PR_FALSE);
return TweakFlag(F_DOESNOTEXIST, value);
}
int
nsMsgGroupRecord::TweakFlag(PRUint32 flagbit, PRBool value)
{
if (value) {
if (!(m_flags & flagbit)) {
m_flags |= flagbit;
if (flagbit & ~RUNTIMEFLAGS)
m_flags |= F_DIRTY;
return 1;
}
} else {
if (m_flags & flagbit) {
m_flags &= ~flagbit;
if (flagbit & ~RUNTIMEFLAGS)
m_flags |= F_DIRTY;
return 1;
}
}
return 0;
}
PRInt32
nsMsgGroupRecord::GetNumKids()
{
PRInt32 result = 0;
nsMsgGroupRecord* child;
for (child = m_children ; child ; child = child->m_sibling) {
if (IsIMAPGroupRecord())
result++;
else
if (child->m_flags & F_ISGROUP) result++;
if (!IsIMAPGroupRecord())
result += child->GetNumKids();
}
return result;
}
char*
nsMsgGroupRecord::GetSaveString()
{
char* pretty = NULL;
char* result = nsnull;
if (m_prettyname) {
pretty = nsEscape(m_prettyname, url_XAlphas);
if (!pretty) return NULL;
}
char* fullname = GetFullName();
if (!fullname) return NULL; {
long nAddTime;
LL_L2I(nAddTime, m_addtime);
result = PR_smprintf("%s,%s,%lx,%lx,%lx" MSG_LINEBREAK,
fullname, pretty ? pretty : "",
(long) (m_flags & ~RUNTIMEFLAGS),
nAddTime,
(long) m_uniqueId);
}
delete [] fullname;
if (pretty) nsCRT::free(pretty);
m_flags &= ~F_DIRTY;
return result;
}
PRBool
nsMsgGroupRecord::IsDirty()
{
return (m_flags & F_DIRTY) != 0;
}
PRInt32
nsMsgGroupRecord::GetDepth()
{
PRInt32 result = 0;
nsMsgGroupRecord* tmp = m_parent;
while (tmp) {
tmp = tmp->m_parent;
result++;
}
return result;
}
nsMsgGroupRecord*
nsMsgGroupRecord::Create(nsMsgGroupRecord* parent, const char* saveline,
PRInt32 savelinelength, PRInt32 fileoffset)
{
char* tmp;
char* ptr;
char* endptr;
char* partname;
char* prettyname;
PRInt32 flags;
PRInt32 addtime;
PRInt32 uniqueid;
nsMsgGroupRecord* result = NULL;
if (savelinelength < 0) savelinelength = PL_strlen(saveline);
tmp = (char*) PR_Malloc(savelinelength + 1);
if (!tmp) return NULL;
PL_strncpy(tmp, saveline, savelinelength);
tmp[savelinelength] = '\0';
ptr = PL_strchr(tmp, ',');
PR_ASSERT(ptr);
if (!ptr) goto FAIL;
*ptr++ = '\0';
partname = PL_strrchr(tmp, '.');
if (!partname) partname = tmp;
else partname++;
#ifdef DEBUG_slowAndParanoid
if (parent->m_partname) {
char* parentname = parent->GetFullName();
PR_ASSERT(partname > tmp && partname[-1] == '.');
partname[-1] = '\0';
PR_ASSERT(PL_strcmp(parentname, tmp) == 0);
partname[-1] = '.';
delete [] parentname;
parentname = NULL;
} else {
PR_ASSERT(partname == tmp);
}
#endif
endptr = PL_strchr(ptr, ',');
PR_ASSERT(endptr);
if (!endptr) goto FAIL;
*endptr++ = '\0';
prettyname = nsUnescape(ptr);
ptr = endptr;
endptr = PL_strchr(ptr, ',');
PR_ASSERT(endptr);
if (!endptr) goto FAIL;
*endptr++ = '\0';
flags = strtol(ptr, NULL, 16);
ptr = endptr;
endptr = PL_strchr(ptr, ',');
PR_ASSERT(endptr);
if (!endptr) goto FAIL;
*endptr++ = '\0';
addtime = strtol(ptr, NULL, 16);
ptr = endptr;
uniqueid = strtol(ptr, NULL, 16);
PRInt64 llAddtime;
LL_I2L(llAddtime, addtime);
result = Create(parent, partname, llAddtime, uniqueid, fileoffset);
if (result) {
PRBool maybeCategoryContainer = flags & F_CATCONT;
flags &= ~F_CATCONT;
result->m_flags = flags;
if (maybeCategoryContainer)
result->SetIsCategoryContainer(PR_TRUE);
if (prettyname && *prettyname) result->SetPrettyName(prettyname);
}
FAIL:
PR_Free(tmp);
return result;
}

View File

@@ -1,160 +0,0 @@
/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*-
*
* The contents of this file are subject to the Netscape Public License
* Version 1.0 (the "NPL"); you may not use this file except in
* compliance with the NPL. You may obtain a copy of the NPL at
* http://www.mozilla.org/NPL/
*
* Software distributed under the NPL is distributed on an "AS IS" basis,
* WITHOUT WARRANTY OF ANY KIND, either express or implied. See the NPL
* for the specific language governing rights and limitations under the
* NPL.
*
* The Initial Developer of this code under the NPL is Netscape
* Communications Corporation. Portions created by Netscape are
* Copyright (C) 1998 Netscape Communications Corporation. All Rights
* Reserved.
*/
// This class should only be used by the subscribe UI and by newshost.cpp.
// And, well, a bit by the category code. Everyone else should use the stuff
// in newshost.h.
#ifndef _nsMsgGroupRecord_h_
#define _nsMsgGroupRecord_h__
#include "msgCore.h"
#include "prtypes.h"
#include "nsISupports.h"
class nsIMAPGroupRecord;
class NS_MSG_BASE nsMsgGroupRecord {
public:
static nsMsgGroupRecord* Create(nsMsgGroupRecord* parent,
const char* partname,
PRInt64 m_addtime,
PRInt32 uniqueid,
PRInt32 fileoffset);
static nsMsgGroupRecord* Create(nsMsgGroupRecord* parent,
const char* saveline,
PRInt32 savelinelength,
PRInt32 fileoffset);
virtual void InitializeSibling();
virtual PRBool IsIMAPGroupRecord() { return PR_FALSE; }
virtual nsIMAPGroupRecord *GetIMAPGroupRecord() { return 0; }
// This is just like PL_strcmp(), except it works on news group names.
// A container groupname is always less than any contained groups.
// So, "netscape.devs-client-technical" > "netscape.devs.directory", even
// though PL_strcmp says otherwise. (YICK!)
static int GroupNameCompare(const char* name1,
const char* name2,
char delimiter = '.',
PRBool caseInsensitive = PR_FALSE);
virtual ~nsMsgGroupRecord();
nsMsgGroupRecord* FindDescendant(const char* name);
nsMsgGroupRecord* GetParent() {return m_parent;}
nsMsgGroupRecord* GetChildren() {return m_children;}
nsMsgGroupRecord* GetSibling() {return m_sibling;}
nsMsgGroupRecord* GetSiblingOrAncestorSibling();
nsMsgGroupRecord* GetNextAlphabetic();
nsMsgGroupRecord* GetNextAlphabeticNoCategories();
const char* GetPartName() {return m_partname;}
// The resulting string must be free'd using delete[].
char* GetFullName();
const char* GetPrettyName() {return m_prettyname;}
int SetPrettyName(const char* prettyname);
PRInt64 GetAddTime() {return m_addtime;}
virtual PRBool IsCategory();
virtual PRBool IsCategoryContainer();
virtual int SetIsCategoryContainer(PRBool value);
nsMsgGroupRecord* GetCategoryContainer();
// Get/Set whether this is a virtual newsgroup.
nsresult IsVirtual(PRBool *retval);
nsresult SetIsVirtual(PRBool value);
// Get/Set whether this is really a newsgroup (and not just a container
// for newsgroups).
virtual PRBool IsGroup();
int SetIsGroup(PRBool value);
PRBool IsDescendentsLoaded();
int SetIsDescendentsLoaded(PRBool value);
PRBool IsExpanded();
int SetIsExpanded(PRBool value);
PRBool IsHTMLOKGroup();
int SetIsHTMLOKGroup(PRBool value);
PRBool IsHTMLOKTree();
int SetIsHTMLOKTree(PRBool value);
PRBool NeedsExtraInfo();
int SetNeedsExtraInfo(PRBool value);
PRBool DoesNotExistOnServer();
int SetDoesNotExistOnServer(PRBool value);
PRInt32 GetUniqueID() {return m_uniqueId;}
PRInt32 GetFileOffset() {return m_fileoffset;}
int SetFileOffset(PRInt32 value) {m_fileoffset = value; return 0;}
// Get the number of descendents (not including ourself) that are
// really newsgroups.
PRInt32 GetNumKids();
// Gets the string that represents this group in the save file. The
// resulting string must be free'd with PR_Free().
char* GetSaveString();
PRBool IsDirty(); // Whether this record has had changes made
// to it. Cleared by calls to GetSaveString().
PRInt32 GetDepth(); // Returns how deep in the heirarchy we are.
// Basically, the number of dots in the full
// newsgroup name, plus 1.
virtual char GetHierarchySeparator() { return '.'; }
protected:
nsMsgGroupRecord(nsMsgGroupRecord* parent,
const char* partname,
PRInt64 m_addtime,
PRInt32 uniqueid,
PRInt32 fileoffset,
char delimiter = '.');
int TweakFlag(PRUint32 flagbit, PRBool value);
char* SuckInName(char* ptr);
char* m_partname;
char* m_prettyname;
nsMsgGroupRecord* m_parent;
nsMsgGroupRecord* m_children;
nsMsgGroupRecord* m_sibling;
PRUint32 m_flags;
PRInt64 m_addtime;
PRInt32 m_uniqueId;
PRInt32 m_fileoffset;
char m_delimiter;
};
#endif /* _grec_h_ */

View File

@@ -1,363 +0,0 @@
/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*-
*
* The contents of this file are subject to the Netscape Public License
* Version 1.0 (the "NPL"); you may not use this file except in
* compliance with the NPL. You may obtain a copy of the NPL at
* http://www.mozilla.org/NPL/
*
* Software distributed under the NPL is distributed on an "AS IS" basis,
* WITHOUT WARRANTY OF ANY KIND, either express or implied. See the NPL
* for the specific language governing rights and limitations under the
* NPL.
*
* The Initial Developer of this code under the NPL is Netscape
* Communications Corporation. Portions created by Netscape are
* Copyright (C) 1998 Netscape Communications Corporation. All Rights
* Reserved.
*/
// as does this
#define NS_IMPL_IDS
#include "nsIServiceManager.h"
#include "nsICharsetConverterManager.h"
#include "nsISupports.h"
#include "nsIPref.h"
#include "nsIMimeConverter.h"
#include "msgCore.h"
#include "rosetta_mailnews.h"
#include "nsMsgI18N.h"
#include "nsFileSpec.h"
#include "nsFileStream.h"
#include "nsMsgMimeCID.h"
#include "nsMimeTypes.h"
#include "nsIEntityConverter.h"
#include "nsISaveAsCharset.h"
static NS_DEFINE_CID(kPrefCID, NS_PREF_CID);
static NS_DEFINE_CID(kCMimeConverterCID, NS_MIME_CONVERTER_CID);
static NS_DEFINE_CID(kCharsetConverterManagerCID, NS_ICHARSETCONVERTERMANAGER_CID);
static NS_DEFINE_CID(kEntityConverterCID, NS_ENTITYCONVERTER_CID);
static NS_DEFINE_CID(kSaveAsCharsetCID, NS_SAVEASCHARSET_CID);
//
// International functions necessary for composition
//
// Convert an unicode string to a C string with a given charset.
nsresult ConvertFromUnicode(const nsString& aCharset,
const nsString& inString,
char** outCString)
{
nsresult res;
NS_WITH_SERVICE(nsICharsetConverterManager, ccm, kCharsetConverterManagerCID, &res);
if(NS_SUCCEEDED(res) && (nsnull != ccm)) {
nsIUnicodeEncoder* encoder = nsnull;
nsString convCharset;
// map to converter charset
if (aCharset.EqualsIgnoreCase("us-ascii")) {
convCharset.SetString("iso-8859-1");
}
else {
convCharset = aCharset;
}
// get an unicode converter
res = ccm->GetUnicodeEncoder(&convCharset, &encoder);
if(NS_SUCCEEDED(res) && (nsnull != encoder)) {
PRUnichar *unichars = (PRUnichar *) inString.GetUnicode();
PRInt32 unicharLength = inString.Length();
PRInt32 dstLength;
res = encoder->GetMaxLength(unichars, unicharLength, &dstLength);
// allocale an output buffer
*outCString = (char *) PR_Malloc(dstLength + 1);
if (nsnull != *outCString) {
PRInt32 oldUnicharLength = unicharLength;
char *tempCString = *outCString;
PRInt32 totalCLength = 0;
while (1) {
res = encoder->Convert(unichars, &unicharLength, tempCString, &dstLength);
// increment for destination
tempCString += dstLength;
totalCLength += dstLength;
// break: this is usually the case
// source length <= zero and no error or unrecoverable error
if (0 >= unicharLength || NS_ERROR_UENC_NOMAPPING != res) {
break;
}
// could not map unicode to the destination charset, skip one unichar and continue
// increment for source unicode, skip one unichar
unichars += unicharLength + 1;
oldUnicharLength -= (unicharLength + 1);
unicharLength = oldUnicharLength;
// estimate target length again
(void) encoder->GetMaxLength(unichars, unicharLength, &dstLength);
}
(*outCString)[totalCLength] = '\0';
}
else {
res = NS_ERROR_OUT_OF_MEMORY;
}
NS_IF_RELEASE(encoder);
}
}
return res;
}
// Convert a C string to an unicode string.
nsresult ConvertToUnicode(const nsString& aCharset,
const char* inCString,
nsString& outString)
{
nsresult res;
NS_WITH_SERVICE(nsICharsetConverterManager, ccm, kCharsetConverterManagerCID, &res);
if(NS_SUCCEEDED(res) && (nsnull != ccm)) {
nsIUnicodeDecoder* decoder = nsnull;
PRUnichar *unichars;
PRInt32 unicharLength;
nsString convCharset;
// map to converter charset
if (aCharset.EqualsIgnoreCase("us-ascii")) {
convCharset.SetString("iso-8859-1");
}
else {
convCharset = aCharset;
}
// get an unicode converter
res = ccm->GetUnicodeDecoder(&convCharset, &decoder);
if(NS_SUCCEEDED(res) && (nsnull != decoder)) {
PRInt32 srcLen = PL_strlen(inCString);
res = decoder->GetMaxLength(inCString, srcLen, &unicharLength);
// allocale an output buffer
unichars = (PRUnichar *) PR_Malloc(unicharLength * sizeof(PRUnichar));
if (unichars != nsnull) {
// convert to unicode
res = decoder->Convert(inCString, &srcLen, unichars, &unicharLength);
outString.SetString(unichars, unicharLength);
PR_Free(unichars);
}
else {
res = NS_ERROR_OUT_OF_MEMORY;
}
NS_IF_RELEASE(decoder);
}
}
return res;
}
// Charset to be used for the internatl processing.
const char *msgCompHeaderInternalCharset()
{
// UTF-8 is a super set of us-ascii.
// We can use the same string manipulation methods as us-ascii without breaking non us-ascii characters.
return "UTF-8";
}
// MIME encoder, output string should be freed by PR_FREE
char * nsMsgI18NEncodeMimePartIIStr(const char *header, const char *charset, PRBool bUseMime)
{
// No MIME, just duplicate the string.
if (PR_FALSE == bUseMime) {
return PL_strdup(header);
}
char *encodedString = nsnull;
nsIMimeConverter *converter;
nsresult res = nsComponentManager::CreateInstance(kCMimeConverterCID, nsnull,
nsCOMTypeInfo<nsIMimeConverter>::GetIID(), (void **)&converter);
if (NS_SUCCEEDED(res) && nsnull != converter) {
res = converter->EncodeMimePartIIStr_UTF8(header, charset, kMIME_ENCODED_WORD_SIZE, &encodedString);
NS_RELEASE(converter);
}
return NS_SUCCEEDED(res) ? encodedString : nsnull;
}
// MIME decoder
nsresult nsMsgI18NDecodeMimePartIIStr(const nsString& header, nsString& charset, nsString& decodedString)
{
nsIMimeConverter *converter;
nsresult res = nsComponentManager::CreateInstance(kCMimeConverterCID, nsnull,
nsCOMTypeInfo<nsIMimeConverter>::GetIID(), (void **)&converter);
if (NS_SUCCEEDED(res) && nsnull != converter) {
res = converter->DecodeMimePartIIStr(header, charset, decodedString);
NS_RELEASE(converter);
}
return res;
}
// Get a default mail character set.
char * nsMsgI18NGetDefaultMailCharset()
{
nsresult res = NS_OK;
char * retVal = nsnull;
NS_WITH_SERVICE(nsIPref, prefs, kPrefCID, &res);
if (nsnull != prefs && NS_SUCCEEDED(res))
{
char *prefValue;
res = prefs->CopyCharPref("intl.character_set_name", &prefValue);
if (NS_SUCCEEDED(res))
{
//TODO: map to mail charset (e.g. Shift_JIS -> ISO-2022-JP) bug#3941.
retVal = prefValue;
}
else
retVal = PL_strdup("iso-8859-1");
}
return (nsnull != retVal) ? retVal : PL_strdup("iso-8859-1");
}
// Return True if a charset is stateful (e.g. JIS).
PRBool nsMsgI18Nstateful_charset(const char *charset)
{
//TODO: use charset manager's service
return (PL_strcasecmp(charset, "iso-2022-jp") == 0);
}
// Check 7bit in a given buffer.
// This is expensive (both memory and performance).
// The check would be very simple if applied to an unicode text (e.g. nsString or utf-8).
// Possible optimazaion is to search ESC(0x1B) in case of iso-2022-jp and iso-2022-kr.
// Or convert and check line by line.
PRBool nsMsgI18N7bit_data_part(const char *charset, const char *inString, const PRUint32 size)
{
char *aCString;
nsString aCharset(charset);
nsString outString;
nsresult res;
aCString = (char *) PR_Malloc(size + 1);
if (nsnull != aCString) {
PL_strncpy(aCString, inString, size); // make a C string
res = ConvertToUnicode(aCharset, aCString, outString);
PR_Free(aCString);
if (NS_SUCCEEDED(res)) {
for (PRInt32 i = 0; i < outString.Length(); i++) {
if (outString.CharAt(i) > 127) {
return PR_FALSE;
}
}
}
}
return PR_TRUE; // all 7 bit
}
// Simple parser to parse META charset.
// It only supports the case when the description is within one line.
const char *
nsMsgI18NParseMetaCharset(nsFileSpec* fileSpec)
{
static char charset[65];
char buffer[512];
nsInputFileStream fileStream(*fileSpec);
*charset = '\0';
while (!fileStream.eof() && !fileStream.failed() &&
fileStream.is_open()) {
fileStream.readline(buffer, 512);
if (*buffer == CR || *buffer == LF || *buffer == 0)
continue;
for (int i = 0; i < (int)PL_strlen(buffer); i++) {
buffer[i] = toupper(buffer[i]);
}
if (PL_strstr(buffer, "/HEAD"))
break;
if (PL_strstr(buffer, "META") &&
PL_strstr(buffer, "HTTP-EQUIV") &&
PL_strstr(buffer, "CONTENT-TYPE") &&
PL_strstr(buffer, "CHARSET")
)
{
char *cp = PL_strstr(PL_strstr(buffer, "CHARSET"), "=") + 1;
char seps[] = " \"\'";
char *token;
char* newStr;
token = nsCRT::strtok(cp, seps, &newStr);
if (token != NULL)
{
PL_strcpy(charset, token);
}
}
}
return charset;
}
nsresult nsMsgI18NConvertToEntity(const nsString& inString, nsString* outString)
{
nsresult res;
outString->SetString("");
nsCOMPtr <nsIEntityConverter> entityConv;
res = nsComponentManager::CreateInstance(kEntityConverterCID, NULL,
nsIEntityConverter::GetIID(), getter_AddRefs(entityConv));
if(NS_SUCCEEDED(res)) {
PRUnichar *entities = NULL;
res = entityConv->ConvertToEntities(inString.GetUnicode(), nsIEntityConverter::html40Latin1, &entities);
if (NS_SUCCEEDED(res) && (NULL != entities)) {
outString->SetString(entities);
nsAllocator::Free(entities);
}
}
return res;
}
nsresult nsMsgI18NSaveAsCharset(const char* contentType, const char *charset, const PRUnichar* inString, char** outString)
{
NS_ASSERTION(contentType, "null ptr- contentType");
NS_ASSERTION(charset, "null ptr- charset");
NS_ASSERTION(outString, "null ptr- outString");
if(!contentType || !charset || !outString)
return NS_ERROR_NULL_POINTER;
*outString = NULL;
PRBool bTEXT_HTML = PR_FALSE;
nsresult res;
if (!nsCRT::strcasecmp(contentType, TEXT_HTML)) {
bTEXT_HTML = PR_TRUE;
}
else if (nsCRT::strcasecmp(contentType, TEXT_PLAIN)) {
return NS_ERROR_ILLEGAL_VALUE; // not supported type
}
nsCOMPtr <nsISaveAsCharset> aConv; // charset converter plus entity, NCR generation
res = nsComponentManager::CreateInstance(kSaveAsCharsetCID, NULL,
nsISaveAsCharset::GetIID(), getter_AddRefs(aConv));
if(NS_SUCCEEDED(res)) {
// attribute:
// html text - charset conv then fallback to entity or NCR
// plain text - charset conv then fallback to '?'
res = aConv->Init(charset,
bTEXT_HTML ?
nsISaveAsCharset::attr_EntityAfterCharsetConv + nsISaveAsCharset::attr_FallbackDecimalNCR :
nsISaveAsCharset::attr_plainTextDefault + nsISaveAsCharset::attr_FallbackQuestionMark,
nsIEntityConverter::html40);
if (NS_SUCCEEDED(res)) {
res = aConv->Convert(inString, outString);
}
}
return res;
}
// RICHIE - not sure about this one?? need to see what it did in the old
// world.
char *
nsMsgI18NGetAcceptLanguage(void)
{
return "en";
}

View File

@@ -1,49 +0,0 @@
/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*-
*
* The contents of this file are subject to the Netscape Public License
* Version 1.0 (the "NPL"); you may not use this file except in
* compliance with the NPL. You may obtain a copy of the NPL at
* http://www.mozilla.org/NPL/
*
* Software distributed under the NPL is distributed on an "AS IS" basis,
* WITHOUT WARRANTY OF ANY KIND, either express or implied. See the NPL
* for the specific language governing rights and limitations under the
* NPL.
*
* The Initial Developer of this code under the NPL is Netscape
* Communications Corporation. Portions created by Netscape are
* Copyright (C) 1998 Netscape Communications Corporation. All Rights
* Reserved.
*/
#ifndef _nsMsgI18N_H_
#define _nsMsgI18N_H_
#include "nscore.h"
#include "msgCore.h"
NS_MSG_BASE char *nsMsgI18NEncodeMimePartIIStr(const char *header, const char *charset, PRBool bUseMime);
NS_MSG_BASE PRBool nsMsgI18Nstateful_charset(const char *charset);
NS_MSG_BASE PRBool nsMsgI18N7bit_data_part(const char *charset, const char *string, const PRUint32 size);
NS_MSG_BASE char *nsMsgI18NGetAcceptLanguage(void);
NS_MSG_BASE const char *msgCompHeaderInternalCharset(void);
NS_MSG_BASE char * nsMsgI18NGetDefaultMailCharset(void);
NS_MSG_BASE nsresult ConvertFromUnicode(const nsString& aCharset,
const nsString& inString,
char** outCString);
NS_MSG_BASE nsresult ConvertToUnicode(const nsString& aCharset,
const char* inCString,
nsString& outString);
NS_MSG_BASE nsresult nsMsgI18NDecodeMimePartIIStr(const nsString& header, nsString& charset, nsString& decodedString);
NS_MSG_BASE const char *nsMsgI18NParseMetaCharset(nsFileSpec* fileSpec);
NS_MSG_BASE nsresult nsMsgI18NConvertToEntity(const nsString& inString, nsString* outString);
NS_MSG_BASE nsresult nsMsgI18NSaveAsCharset(const char* contentType, const char* charset, const PRUnichar* inString, char** outString);
#endif /* _nsMsgI18N_H_ */

View File

@@ -1,356 +0,0 @@
/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*-
*
* The contents of this file are subject to the Netscape Public License
* Version 1.0 (the "NPL"); you may not use this file except in
* compliance with the NPL. You may obtain a copy of the NPL at
* http://www.mozilla.org/NPL/
*
* Software distributed under the NPL is distributed on an "AS IS" basis,
* WITHOUT WARRANTY OF ANY KIND, either express or implied. See the NPL
* for the specific language governing rights and limitations under the
* NPL.
*
* The Initial Developer of this code under the NPL is Netscape
* Communications Corporation. Portions created by Netscape are
* Copyright (C) 1998 Netscape Communications Corporation. All Rights
* Reserved.
*/
#include "msgCore.h" // for pre-compiled headers
#include "nsMsgIdentity.h"
#include "nsIPref.h"
#include "nsXPIDLString.h"
static NS_DEFINE_CID(kPrefServiceCID, NS_PREF_CID);
NS_IMPL_ISUPPORTS2(nsMsgIdentity,
nsIMsgIdentity,
nsIShutdownListener)
nsMsgIdentity::nsMsgIdentity():
m_signature(0),
m_vCard(0),
m_identityKey(0),
m_prefs(0)
{
NS_INIT_REFCNT();
}
nsMsgIdentity::~nsMsgIdentity()
{
PR_FREEIF(m_identityKey);
if (m_prefs) nsServiceManager::ReleaseService(kPrefServiceCID,
m_prefs,
nsnull);
}
nsresult
nsMsgIdentity::getPrefService()
{
if (m_prefs) return NS_OK;
return nsServiceManager::GetService(kPrefServiceCID,
nsCOMTypeInfo<nsIPref>::GetIID(),
(nsISupports**)&m_prefs,
this);
}
/* called if the prefs service goes offline */
NS_IMETHODIMP
nsMsgIdentity::OnShutdown(const nsCID& aClass, nsISupports *service)
{
if (aClass.Equals(kPrefServiceCID)) {
if (m_prefs) nsServiceManager::ReleaseService(kPrefServiceCID, m_prefs);
m_prefs = nsnull;
}
return NS_OK;
}
/*
* accessors for pulling values directly out of preferences
* instead of member variables, etc
*/
/* convert an identity key and preference name
to mail.identity.<identityKey>.<prefName>
*/
char *
nsMsgIdentity::getPrefName(const char *identityKey,
const char *prefName)
{
return PR_smprintf("mail.identity.%s.%s", identityKey, prefName);
}
// this will be slightly faster than the above, and allows
// the "default" identity preference root to be set in one place
char *
nsMsgIdentity::getDefaultPrefName(const char *fullPrefName)
{
return PR_smprintf("mail.identity.default.%s", fullPrefName);
}
/* The following are equivalent to the nsIPref's Get/CopyXXXPref
except they construct the preference name with the above function
*/
nsresult
nsMsgIdentity::getBoolPref(const char *prefname,
PRBool *val)
{
nsresult rv = getPrefService();
if (NS_FAILED(rv)) return rv;
char *fullPrefName = getPrefName(m_identityKey, prefname);
rv = m_prefs->GetBoolPref(fullPrefName, val);
PR_Free(fullPrefName);
if (NS_FAILED(rv))
rv = getDefaultBoolPref(prefname, val);
return rv;
}
nsresult
nsMsgIdentity::getDefaultBoolPref(const char *prefname,
PRBool *val) {
nsresult rv = getPrefService();
if (NS_FAILED(rv)) return rv;
char *fullPrefName = getDefaultPrefName(prefname);
rv = m_prefs->GetBoolPref(fullPrefName, val);
PR_Free(fullPrefName);
if (NS_FAILED(rv)) {
*val = PR_FALSE;
rv = NS_OK;
}
return rv;
}
nsresult
nsMsgIdentity::setBoolPref(const char *prefname,
PRBool val)
{
nsresult rv = getPrefService();
if (NS_FAILED(rv)) return rv;
char *prefName = getPrefName(m_identityKey, prefname);
rv = m_prefs->SetBoolPref(prefName, val);
PR_Free(prefName);
return rv;
}
nsresult
nsMsgIdentity::getCharPref(const char *prefname,
char **val)
{
nsresult rv = getPrefService();
if (NS_FAILED(rv)) return rv;
char *fullPrefName = getPrefName(m_identityKey, prefname);
rv = m_prefs->CopyCharPref(fullPrefName, val);
PR_Free(fullPrefName);
if (NS_FAILED(rv))
rv = getDefaultCharPref(prefname, val);
return rv;
}
nsresult
nsMsgIdentity::getDefaultCharPref(const char *prefname,
char **val)
{
nsresult rv = getPrefService();
if (NS_FAILED(rv)) return rv;
char *fullPrefName = getDefaultPrefName(prefname);
rv = m_prefs->CopyCharPref(fullPrefName, val);
PR_Free(fullPrefName);
if (NS_FAILED(rv)) {
*val = nsnull; // null is ok to return here
rv = NS_OK;
}
return rv;
}
nsresult
nsMsgIdentity::setCharPref(const char *prefname,
const char *val)
{
nsresult rv = getPrefService();
if (NS_FAILED(rv)) return rv;
rv = NS_OK;
char *prefName = getPrefName(m_identityKey, prefname);
if (val)
rv = m_prefs->SetCharPref(prefName, val);
else
m_prefs->ClearUserPref(prefName);
PR_Free(prefName);
return rv;
}
nsresult
nsMsgIdentity::getIntPref(const char *prefname,
PRInt32 *val)
{
nsresult rv = getPrefService();
if (NS_FAILED(rv)) return rv;
char *fullPrefName = getPrefName(m_identityKey, prefname);
rv = m_prefs->GetIntPref(fullPrefName, val);
PR_Free(fullPrefName);
if (NS_FAILED(rv))
rv = getDefaultIntPref(prefname, val);
return rv;
}
nsresult
nsMsgIdentity::getDefaultIntPref(const char *prefname,
PRInt32 *val) {
nsresult rv = getPrefService();
if (NS_FAILED(rv)) return rv;
char *fullPrefName = getDefaultPrefName(prefname);
rv = m_prefs->GetIntPref(fullPrefName, val);
PR_Free(fullPrefName);
if (NS_FAILED(rv)) {
*val = 0;
rv = NS_OK;
}
return rv;
}
nsresult
nsMsgIdentity::setIntPref(const char *prefname,
PRInt32 val)
{
nsresult rv = getPrefService();
if (NS_FAILED(rv)) return rv;
char *prefName = getPrefName(m_identityKey, prefname);
rv = m_prefs->SetIntPref(prefName, val);
PR_Free(prefName);
return rv;
}
nsresult
nsMsgIdentity::SetKey(const char* identityKey)
{
PR_FREEIF(m_identityKey);
m_identityKey = PL_strdup(identityKey);
return NS_OK;
}
nsresult
nsMsgIdentity::GetIdentityName(char **idName) {
if (!idName) return NS_ERROR_NULL_POINTER;
*idName = nsnull;
nsresult rv = getCharPref("identityName",idName);
if (NS_FAILED(rv)) return rv;
// there's probably a better way of doing this
// thats unicode friendly?
if (!(*idName)) {
nsXPIDLCString fullName;
rv = GetFullName(getter_Copies(fullName));
if (NS_FAILED(rv)) return rv;
nsXPIDLCString email;
rv = GetEmail(getter_Copies(email));
if (NS_FAILED(rv)) return rv;
*idName = PR_smprintf("%s <%s>", (const char*)fullName,
(const char*)email);
rv = NS_OK;
}
return rv;
}
nsresult nsMsgIdentity::SetIdentityName(const char *idName) {
return setCharPref("identityName", idName);
}
NS_IMETHODIMP
nsMsgIdentity::ToString(PRUnichar **aResult)
{
nsString idname("[nsIMsgIdentity: ");
idname += m_identityKey;
idname += "]";
*aResult = idname.ToNewUnicode();
return NS_OK;
}
/* Identity attribute accessors */
// XXX - these are a COM objects, use NS_ADDREF
//NS_IMPL_GETSET(nsMsgIdentity, Signature, nsIMsgSignature*, m_signature);
NS_IMETHODIMP
nsMsgIdentity::GetSignature(nsIFileSpec **sig) {
nsresult rv = getPrefService();
if (NS_FAILED(rv)) return rv;
char *prefName = getPrefName(m_identityKey, "sig_file");
rv = m_prefs->GetFilePref(prefName, sig);
if (NS_FAILED(rv))
*sig = nsnull;
return NS_OK;
}
NS_IMETHODIMP
nsMsgIdentity::SetSignature(nsIFileSpec *sig)
{
nsresult rv = getPrefService();
if (NS_FAILED(rv)) return rv;
rv = NS_OK;
char *prefName = getPrefName(m_identityKey, "sig_file");
if (sig)
rv = m_prefs->SetFilePref(NS_CONST_CAST(const char*,prefName), sig,
PR_FALSE);
/*
else
m_prefs->ClearFilePref(prefName);
*/
PR_Free(prefName);
return rv;
return NS_OK;
}
NS_IMPL_GETSET(nsMsgIdentity, VCard, nsIMsgVCard*, m_vCard);
NS_IMPL_GETTER_STR(nsMsgIdentity::GetKey, m_identityKey);
NS_IMPL_IDPREF_STR(FullName, "fullName");
NS_IMPL_IDPREF_STR(Email, "useremail");
NS_IMPL_IDPREF_STR(ReplyTo, "reply_to");
NS_IMPL_IDPREF_STR(Organization, "organization");
NS_IMPL_IDPREF_BOOL(ComposeHtml, "compose_html");
NS_IMPL_IDPREF_BOOL(AttachVCard, "attach_vcard");
NS_IMPL_IDPREF_BOOL(AttachSignature, "attach_signature");
NS_IMPL_IDPREF_BOOL(DoFcc, "fcc");
NS_IMPL_IDPREF_STR(FccFolder, "fcc_folder");
NS_IMPL_IDPREF_BOOL(BccSelf, "bcc_self");
NS_IMPL_IDPREF_BOOL(BccOthers, "bcc_other");
NS_IMPL_IDPREF_STR (BccList, "bcc_other_list");
NS_IMPL_IDPREF_STR (DraftFolder, "draft_folder");
NS_IMPL_IDPREF_STR (StationaryFolder, "stationary_folder");
NS_IMPL_IDPREF_STR (JunkMailFolder, "spam_folder");

View File

@@ -1,110 +0,0 @@
/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*-
*
* The contents of this file are subject to the Netscape Public License
* Version 1.0 (the "NPL"); you may not use this file except in
* compliance with the NPL. You may obtain a copy of the NPL at
* http://www.mozilla.org/NPL/
*
* Software distributed under the NPL is distributed on an "AS IS" basis,
* WITHOUT WARRANTY OF ANY KIND, either express or implied. See the NPL
* for the specific language governing rights and limitations under the
* NPL.
*
* The Initial Developer of this code under the NPL is Netscape
* Communications Corporation. Portions created by Netscape are
* Copyright (C) 1998 Netscape Communications Corporation. All Rights
* Reserved.
*/
#ifndef nsMsgIdentity_h___
#define nsMsgIdentity_h___
#include "nsIMsgIdentity.h"
#include "nsIPref.h"
#include "msgCore.h"
///////////////////////////////////////////////////////////////////////////////////
// an identity is an object designed to encapsulate all the information we need
// to know about a user identity. I expect this interface to grow and change a lot
// as we flesh out our thoughts on multiple identities and what properties go into
// these identities.
//////////////////////////////////////////////////////////////////////////////////
class NS_MSG_BASE nsMsgIdentity : public nsIMsgIdentity,
public nsIShutdownListener
{
public:
nsMsgIdentity();
virtual ~nsMsgIdentity();
NS_DECL_ISUPPORTS
NS_DECL_NSIMSGIDENTITY
// nsIShutdownListener
NS_IMETHOD OnShutdown(const nsCID& aClass, nsISupports *service);
private:
nsIMsgSignature* m_signature;
nsIMsgVCard* m_vCard;
char *m_identityKey;
nsIPref *m_prefs;
protected:
nsresult getPrefService();
char *getPrefName(const char *identityKey, const char *pref);
char *getDefaultPrefName(const char *pref);
nsresult getCharPref(const char *pref, char **);
nsresult getDefaultCharPref(const char *pref, char **);
nsresult setCharPref(const char *pref, const char *);
nsresult getBoolPref(const char *pref, PRBool *);
nsresult getDefaultBoolPref(const char *pref, PRBool *);
nsresult setBoolPref(const char *pref, PRBool);
nsresult getIntPref(const char *pref, PRInt32 *);
nsresult getDefaultIntPref(const char *pref, PRInt32 *);
nsresult setIntPref(const char *pref, PRInt32);
};
#define NS_IMPL_IDPREF_STR(_postfix, _prefname) \
NS_IMETHODIMP \
nsMsgIdentity::Get##_postfix(char **retval) \
{ \
return getCharPref(_prefname, retval); \
} \
NS_IMETHODIMP \
nsMsgIdentity::Set##_postfix(const char *value) \
{ \
return setCharPref(_prefname, value);\
}
#define NS_IMPL_IDPREF_BOOL(_postfix, _prefname)\
NS_IMETHODIMP \
nsMsgIdentity::Get##_postfix(PRBool *retval) \
{ \
return getBoolPref(_prefname, retval); \
} \
NS_IMETHODIMP \
nsMsgIdentity::Set##_postfix(PRBool value) \
{ \
return setBoolPref(_prefname, value); \
}
#define NS_IMPL_IDPREF_INT(_postfix, _prefname) \
NS_IMETHODIMP \
nsMsgIdentity::Get##_postfix(PRInt32 *retval) \
{ \
return getIntPref(_prefname, retval); \
} \
NS_IMETHODIMP \
nsMsgIdentity::Set##_postfix(PRInt32 value) \
{ \
return setIntPref(_prefname, value); \
}
#endif /* nsMsgIdentity_h___ */

View File

@@ -1,603 +0,0 @@
/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*-
*
* The contents of this file are subject to the Netscape Public License
* Version 1.0 (the "NPL"); you may not use this file except in
* compliance with the NPL. You may obtain a copy of the NPL at
* http://www.mozilla.org/NPL/
*
* Software distributed under the NPL is distributed on an "AS IS" basis,
* WITHOUT WARRANTY OF ANY KIND, either express or implied. See the NPL
* for the specific language governing rights and limitations under the
* NPL.
*
* The Initial Developer of this code under the NPL is Netscape
* Communications Corporation. Portions created by Netscape are
* Copyright (C) 1998 Netscape Communications Corporation. All Rights
* Reserved.
*/
#include "nsMsgIncomingServer.h"
#include "nscore.h"
#include "nsCom.h"
#include "plstr.h"
#include "prmem.h"
#include "prprf.h"
#include "nsIServiceManager.h"
#include "nsIPref.h"
#include "nsCOMPtr.h"
#include "nsIMsgFolder.h"
#include "nsIMsgFolderCache.h"
#include "nsIMsgFolderCacheElement.h"
#include "nsINetSupportDialogService.h"
#include "nsIPrompt.h"
#include "nsXPIDLString.h"
#include "nsIRDFService.h"
#include "nsIMsgProtocolInfo.h"
#include "nsRDFCID.h"
static NS_DEFINE_CID(kPrefServiceCID, NS_PREF_CID);
static NS_DEFINE_CID(kNetSupportDialogCID, NS_NETSUPPORTDIALOG_CID);
static NS_DEFINE_CID(kRDFServiceCID, NS_RDFSERVICE_CID);
MOZ_DECL_CTOR_COUNTER(nsMsgIncomingServer);
nsMsgIncomingServer::nsMsgIncomingServer():
m_prefs(0),
m_serverKey(0),
m_rootFolder(0)
{
MOZ_COUNT_CTOR(nsMsgIncomingServer);
NS_INIT_REFCNT();
m_serverBusy = PR_FALSE;
m_password = "";
}
nsMsgIncomingServer::~nsMsgIncomingServer()
{
MOZ_COUNT_DTOR(nsMsgIncomingServer);
if (m_prefs) nsServiceManager::ReleaseService(kPrefServiceCID,
m_prefs,
nsnull);
PR_FREEIF(m_serverKey)
}
NS_IMPL_ISUPPORTS1(nsMsgIncomingServer, nsIMsgIncomingServer)
NS_IMPL_GETSET(nsMsgIncomingServer, ServerBusy, PRBool, m_serverBusy)
NS_IMPL_GETTER_STR(nsMsgIncomingServer::GetKey, m_serverKey)
NS_IMETHODIMP
nsMsgIncomingServer::SetKey(const char * serverKey)
{
nsresult rv = NS_OK;
// in order to actually make use of the key, we need the prefs
if (!m_prefs)
rv = nsServiceManager::GetService(kPrefServiceCID,
nsCOMTypeInfo<nsIPref>::GetIID(),
(nsISupports**)&m_prefs);
PR_FREEIF(m_serverKey);
m_serverKey = PL_strdup(serverKey);
return rv;
}
NS_IMETHODIMP
nsMsgIncomingServer::SetRootFolder(nsIFolder * aRootFolder)
{
m_rootFolder = aRootFolder;
return NS_OK;
}
NS_IMETHODIMP
nsMsgIncomingServer::GetRootFolder(nsIFolder * *aRootFolder)
{
if (!aRootFolder)
return NS_ERROR_NULL_POINTER;
if (m_rootFolder) {
*aRootFolder = m_rootFolder;
NS_ADDREF(*aRootFolder);
} else {
nsresult rv = CreateRootFolder();
if (NS_FAILED(rv)) return rv;
*aRootFolder = m_rootFolder;
NS_IF_ADDREF(*aRootFolder);
}
return NS_OK;
}
NS_IMETHODIMP
nsMsgIncomingServer::PerformBiff()
{
//This had to be implemented in the derived class, but in case someone doesn't implement it
//just return not implemented.
return NS_ERROR_NOT_IMPLEMENTED;
}
NS_IMETHODIMP nsMsgIncomingServer::WriteToFolderCache(nsIMsgFolderCache *folderCache)
{
nsresult rv = NS_OK;
if (m_rootFolder)
{
nsCOMPtr <nsIMsgFolder> msgFolder = do_QueryInterface(m_rootFolder, &rv);
if (NS_SUCCEEDED(rv) && msgFolder)
rv = msgFolder->WriteToFolderCache(folderCache);
}
return rv;
}
NS_IMETHODIMP
nsMsgIncomingServer::CloseCachedConnections()
{
// derived class should override if they cache connections.
return NS_OK;
}
NS_IMETHODIMP
nsMsgIncomingServer::GetServerURI(char **)
{
return NS_ERROR_NOT_IMPLEMENTED;
}
nsresult
nsMsgIncomingServer::CreateRootFolder()
{
nsresult rv;
// get the URI from the incoming server
nsXPIDLCString serverUri;
rv = GetServerURI(getter_Copies(serverUri));
if (NS_FAILED(rv)) return rv;
NS_WITH_SERVICE(nsIRDFService, rdf,
kRDFServiceCID, &rv);
// get the corresponding RDF resource
// RDF will create the server resource if it doesn't already exist
nsCOMPtr<nsIRDFResource> serverResource;
rv = rdf->GetResource(serverUri, getter_AddRefs(serverResource));
if (NS_FAILED(rv)) return rv;
// make incoming server know about its root server folder so we
// can find sub-folders given an incoming server.
m_rootFolder = do_QueryInterface(serverResource, &rv);
return rv;
}
char *
nsMsgIncomingServer::getPrefName(const char *serverKey,
const char *fullPrefName)
{
return PR_smprintf("mail.server.%s.%s", serverKey, fullPrefName);
}
// this will be slightly faster than the above, and allows
// the "default" server preference root to be set in one place
char *
nsMsgIncomingServer::getDefaultPrefName(const char *fullPrefName)
{
return PR_smprintf("mail.server.default.%s", fullPrefName);
}
nsresult
nsMsgIncomingServer::GetBoolValue(const char *prefname,
PRBool *val)
{
char *fullPrefName = getPrefName(m_serverKey, prefname);
nsresult rv = m_prefs->GetBoolPref(fullPrefName, val);
PR_Free(fullPrefName);
if (NS_FAILED(rv))
rv = getDefaultBoolPref(prefname, val);
return rv;
}
nsresult
nsMsgIncomingServer::getDefaultBoolPref(const char *prefname,
PRBool *val) {
char *fullPrefName = getDefaultPrefName(prefname);
nsresult rv = m_prefs->GetBoolPref(fullPrefName, val);
PR_Free(fullPrefName);
if (NS_FAILED(rv)) {
*val = PR_FALSE;
rv = NS_OK;
}
return rv;
}
nsresult
nsMsgIncomingServer::SetBoolValue(const char *prefname,
PRBool val)
{
nsresult rv;
char *fullPrefName = getPrefName(m_serverKey, prefname);
PRBool defaultValue;
rv = getDefaultBoolPref(prefname, &defaultValue);
if (NS_SUCCEEDED(rv) &&
val == defaultValue)
m_prefs->ClearUserPref(fullPrefName);
else
rv = m_prefs->SetBoolPref(fullPrefName, val);
PR_Free(fullPrefName);
return rv;
}
nsresult
nsMsgIncomingServer::GetIntValue(const char *prefname,
PRInt32 *val)
{
char *fullPrefName = getPrefName(m_serverKey, prefname);
nsresult rv = m_prefs->GetIntPref(fullPrefName, val);
PR_Free(fullPrefName);
if (NS_FAILED(rv))
rv = getDefaultIntPref(prefname, val);
return rv;
}
nsresult
nsMsgIncomingServer::GetFileValue(const char* prefname,
nsIFileSpec **spec)
{
char *fullPrefName = getPrefName(m_serverKey, prefname);
nsresult rv = m_prefs->GetFilePref(fullPrefName, spec);
PR_Free(fullPrefName);
return rv;
}
nsresult
nsMsgIncomingServer::SetFileValue(const char* prefname,
nsIFileSpec *spec)
{
char *fullPrefName = getPrefName(m_serverKey, prefname);
nsresult rv = m_prefs->SetFilePref(fullPrefName, spec, PR_FALSE);
PR_Free(fullPrefName);
return rv;
}
nsresult
nsMsgIncomingServer::getDefaultIntPref(const char *prefname,
PRInt32 *val) {
char *fullPrefName = getDefaultPrefName(prefname);
nsresult rv = m_prefs->GetIntPref(fullPrefName, val);
PR_Free(fullPrefName);
if (NS_FAILED(rv)) {
*val = 0;
rv = NS_OK;
}
return rv;
}
nsresult
nsMsgIncomingServer::SetIntValue(const char *prefname,
PRInt32 val)
{
nsresult rv;
char *fullPrefName = getPrefName(m_serverKey, prefname);
PRInt32 defaultVal;
rv = getDefaultIntPref(prefname, &defaultVal);
if (NS_SUCCEEDED(rv) && defaultVal == val)
m_prefs->ClearUserPref(fullPrefName);
else
rv = m_prefs->SetIntPref(fullPrefName, val);
PR_Free(fullPrefName);
return rv;
}
nsresult
nsMsgIncomingServer::GetCharValue(const char *prefname,
char **val)
{
char *fullPrefName = getPrefName(m_serverKey, prefname);
nsresult rv = m_prefs->CopyCharPref(fullPrefName, val);
PR_Free(fullPrefName);
if (NS_FAILED(rv))
rv = getDefaultCharPref(prefname, val);
return rv;
}
nsresult
nsMsgIncomingServer::getDefaultCharPref(const char *prefname,
char **val) {
char *fullPrefName = getDefaultPrefName(prefname);
nsresult rv = m_prefs->CopyCharPref(fullPrefName, val);
PR_Free(fullPrefName);
if (NS_FAILED(rv)) {
*val = nsnull; // null is ok to return here
rv = NS_OK;
}
return rv;
}
nsresult
nsMsgIncomingServer::SetCharValue(const char *prefname,
const char * val)
{
nsresult rv;
char *fullPrefName = getPrefName(m_serverKey, prefname);
if (!val) {
m_prefs->ClearUserPref(fullPrefName);
return NS_OK;
}
char *defaultVal=nsnull;
rv = getDefaultCharPref(prefname, &defaultVal);
if (NS_SUCCEEDED(rv) &&
PL_strcmp(defaultVal, val) == 0)
m_prefs->ClearUserPref(fullPrefName);
else
rv = m_prefs->SetCharPref(fullPrefName, val);
PR_FREEIF(defaultVal);
PR_Free(fullPrefName);
return rv;
}
// pretty name is the display name to show to the user
NS_IMETHODIMP
nsMsgIncomingServer::GetPrettyName(PRUnichar **retval) {
char *val=nsnull;
nsresult rv = GetCharValue("name", &val);
if (NS_FAILED(rv)) return rv;
nsString prettyName;
// if there's no name, then just return the hostname
if (val) {
prettyName = val;
} else {
nsXPIDLCString username;
rv = GetUsername(getter_Copies(username));
if (NS_FAILED(rv)) return rv;
if ((const char*)username &&
PL_strcmp((const char*)username, "")!=0) {
prettyName = username;
prettyName += " on ";
}
nsXPIDLCString hostname;
rv = GetHostName(getter_Copies(hostname));
if (NS_FAILED(rv)) return rv;
prettyName += hostname;
}
*retval = prettyName.ToNewUnicode();
return NS_OK;
}
NS_IMETHODIMP
nsMsgIncomingServer::SetPrettyName(const PRUnichar *value) {
// this is lossy. Not sure what to do.
nsCString str(value);
return SetCharValue("name", str.GetBuffer());
}
NS_IMETHODIMP
nsMsgIncomingServer::ToString(PRUnichar** aResult) {
nsString servername("[nsIMsgIncomingServer: ");
servername += m_serverKey;
servername += "]";
*aResult = servername.ToNewUnicode();
NS_ASSERTION(*aResult, "no server name!");
return NS_OK;
}
NS_IMETHODIMP nsMsgIncomingServer::SetPassword(const char * aPassword)
{
// if remember password is turned on, write the password to preferences
// otherwise, just set the password so we remember it for the rest of the current
// session.
PRBool rememberPassword = PR_FALSE;
GetRememberPassword(&rememberPassword);
if (rememberPassword)
{
SetPrefPassword((char *) aPassword);
}
m_password = aPassword;
return NS_OK;
}
NS_IMETHODIMP nsMsgIncomingServer::GetPassword(char ** aPassword)
{
nsresult rv = NS_OK;
PRBool rememberPassword = PR_FALSE;
// okay, here's the scoop for this messs...
// (1) if we have a password already, go ahead and use it!
// (2) if remember password is turned on, try reading in from the prefs and if we have one, go ahead
// and use it
// (3) otherwise prompt the user for a password and then remember that password in the server
if (m_password.IsEmpty())
{
// case (2)
GetRememberPassword(&rememberPassword);
if (rememberPassword)
{
nsXPIDLCString password;
GetPrefPassword(getter_Copies(password));
m_password = password;
}
}
*aPassword = m_password.ToNewCString();
return rv;
}
NS_IMETHODIMP
nsMsgIncomingServer::GetPasswordWithUI(const PRUnichar * aPromptMessage, char **aPassword)
{
nsXPIDLCString prefvalue;
GetPassword(getter_Copies(prefvalue));
nsresult rv = NS_OK;
if (m_password.IsEmpty()) {
// prompt the user for the password
NS_WITH_SERVICE(nsIPrompt, dialog, kNetSupportDialogCID, &rv);
if (NS_SUCCEEDED(rv))
{
PRUnichar * uniPassword;
PRBool okayValue = PR_TRUE;
dialog->PromptPassword(aPromptMessage, &uniPassword, &okayValue);
if (!okayValue) // if the user pressed cancel, just return NULL;
{
*aPassword = nsnull;
return rv;
}
// we got a password back...so remember it
nsCString aCStr(uniPassword);
SetPassword((const char *) aCStr);
} // if we got a prompt dialog
} // if the password is empty
*aPassword = m_password.ToNewCString();
return rv;
}
NS_IMETHODIMP
nsMsgIncomingServer::SetDefaultLocalPath(nsIFileSpec *aDefaultLocalPath)
{
nsresult rv;
nsXPIDLCString type;
GetType(getter_Copies(type));
nsCAutoString progid(NS_MSGPROTOCOLINFO_PROGID_PREFIX);
progid += type;
NS_WITH_SERVICE(nsIMsgProtocolInfo, protocolInfo, progid, &rv);
if (NS_FAILED(rv)) return rv;
rv = protocolInfo->SetDefaultLocalPath(aDefaultLocalPath);
return rv;
}
NS_IMETHODIMP
nsMsgIncomingServer::GetLocalPath(nsIFileSpec **aLocalPath)
{
nsresult rv;
// if the local path has already been set, use it
rv = GetFileValue("directory", aLocalPath);
if (NS_SUCCEEDED(rv) && *aLocalPath) return rv;
// otherwise, create the path using. note we are using the
// server key instead of the hostname
//
// TODO: handle the case where they migrated a server of hostname "server4"
// and we create a server (with the account wizard) with key "server4"
// we'd get a collision.
// need to modify the code that creates keys to check for disk collision
nsXPIDLCString type;
GetType(getter_Copies(type));
nsCAutoString progid(NS_MSGPROTOCOLINFO_PROGID_PREFIX);
progid += type;
NS_WITH_SERVICE(nsIMsgProtocolInfo, protocolInfo, progid, &rv);
if (NS_FAILED(rv)) return rv;
nsCOMPtr<nsIFileSpec> path;
rv = protocolInfo->GetDefaultLocalPath(getter_AddRefs(path));
if (NS_FAILED(rv)) return rv;
path->CreateDir();
nsXPIDLCString key;
rv = GetKey(getter_Copies(key));
if (NS_FAILED(rv)) return rv;
rv = path->AppendRelativeUnixPath(key);
if (NS_FAILED(rv)) return rv;
rv = SetLocalPath(path);
if (NS_FAILED(rv)) return rv;
*aLocalPath = path;
NS_ADDREF(*aLocalPath);
return NS_OK;
}
NS_IMETHODIMP
nsMsgIncomingServer::SetLocalPath(nsIFileSpec *spec)
{
if (spec) {
spec->CreateDir();
return SetFileValue("directory", spec);
}
else {
return NS_ERROR_NULL_POINTER;
}
}
NS_IMETHODIMP
nsMsgIncomingServer::SetRememberPassword(PRBool value)
{
if (value)
SetPrefPassword(m_password);
else
SetPrefPassword(nsnull);
return SetBoolValue("remember_password", value);
}
NS_IMETHODIMP
nsMsgIncomingServer::GetRememberPassword(PRBool* value)
{
return GetBoolValue("remember_password", value);
}
// use the convenience macros to implement the accessors
NS_IMPL_SERVERPREF_STR(nsMsgIncomingServer, HostName, "hostname");
NS_IMPL_SERVERPREF_STR(nsMsgIncomingServer, Username, "userName");
NS_IMPL_SERVERPREF_STR(nsMsgIncomingServer, PrefPassword, "password");
NS_IMPL_SERVERPREF_BOOL(nsMsgIncomingServer, DoBiff, "check_new_mail");
NS_IMPL_SERVERPREF_INT(nsMsgIncomingServer, BiffMinutes, "check_time");
NS_IMPL_SERVERPREF_STR(nsMsgIncomingServer, Type, "type");
/* what was this called in 4.x? */
// pref("mail.pop3_gets_new_mail", true);
NS_IMPL_SERVERPREF_BOOL(nsMsgIncomingServer, DownloadOnBiff, "download_on_biff");

View File

@@ -1,70 +0,0 @@
/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*-
*
* The contents of this file are subject to the Netscape Public License
* Version 1.0 (the "NPL"); you may not use this file except in
* compliance with the NPL. You may obtain a copy of the NPL at
* http://www.mozilla.org/NPL/
*
* Software distributed under the NPL is distributed on an "AS IS" basis,
* WITHOUT WARRANTY OF ANY KIND, either express or implied. See the NPL
* for the specific language governing rights and limitations under the
* NPL.
*
* The Initial Developer of this code under the NPL is Netscape
* Communications Corporation. Portions created by Netscape are
* Copyright (C) 1998 Netscape Communications Corporation. All Rights
* Reserved.
*/
#ifndef nsMsgIncomingServer_h__
#define nsMsgIncomingServer_h__
#include "nsIMsgIncomingServer.h"
#include "nsIPref.h"
#include "msgCore.h"
#include "nsIFolder.h"
#include "nsCOMPtr.h"
class nsIMsgFolderCache;
/*
* base class for nsIMsgIncomingServer - derive your class from here
* if you want to get some free implementation
*
* this particular implementation is not meant to be used directly.
*/
class NS_MSG_BASE nsMsgIncomingServer : public nsIMsgIncomingServer {
public:
nsMsgIncomingServer();
virtual ~nsMsgIncomingServer();
NS_DECL_ISUPPORTS
NS_DECL_NSIMSGINCOMINGSERVER
private:
nsIPref *m_prefs;
char *m_serverKey;
nsCString m_password;
PRBool m_serverBusy;
protected:
char *getPrefName(const char *serverKey, const char *pref);
char *getDefaultPrefName(const char *pref);
// these are private pref getters and setters for the password
// field. Callers should be using Get/Set Password
NS_IMETHOD GetPrefPassword(char * *aPassword);
NS_IMETHOD SetPrefPassword(const char * aPassword);
nsCOMPtr <nsIFolder> m_rootFolder;
nsresult getDefaultCharPref(const char *pref, char **);
nsresult getDefaultBoolPref(const char *pref, PRBool *);
nsresult getDefaultIntPref(const char *pref, PRInt32 *);
nsresult CreateRootFolder();
};
#endif // nsMsgIncomingServer_h__

File diff suppressed because it is too large Load Diff

View File

@@ -1,115 +0,0 @@
/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*-
*
* The contents of this file are subject to the Netscape Public License
* Version 1.0 (the "NPL"); you may not use this file except in
* compliance with the NPL. You may obtain a copy of the NPL at
* http://www.mozilla.org/NPL/
*
* Software distributed under the NPL is distributed on an "AS IS" basis,
* WITHOUT WARRANTY OF ANY KIND, either express or implied. See the NPL
* for the specific language governing rights and limitations under the
* NPL.
*
* The Initial Developer of this code under the NPL is Netscape
* Communications Corporation. Portions created by Netscape are
* Copyright (C) 1998 Netscape Communications Corporation. All Rights
* Reserved.
*/
#ifndef _nsMsgKeySet_H_
#define _nsMsgKeySet_H_
#include "msgCore.h"
// nsMsgKeySet represents a set of articles. Typically, it is the set of
// read articles from a .newsrc file, but it can be used for other purposes
// too.
#if 0
// If a MSG_NewsHost* is supplied to the creation routine, then that
// MSG_NewsHost will be notified whenever a change is made to set.
class MSG_NewsHost;
#endif
class NS_MSG_BASE nsMsgKeySet {
public:
// Creates an empty set.
static nsMsgKeySet* Create(/* MSG_NewsHost* host = NULL*/);
// Creates a set from the list of numbers, as might be found in a
// newsrc file.
static nsMsgKeySet* Create(const char* str/* , MSG_NewsHost* host = NULL*/);
~nsMsgKeySet();
// FirstNonMember() returns the lowest non-member of the set that is
// greater than 0.
PRInt32 FirstNonMember();
// Output() converts to a string representation suitable for writing to a
// .newsrc file. (The result must be freed by the caller using delete[].)
char* Output();
// IsMember() returns whether the given article is a member of this set.
PRBool IsMember(PRInt32 art);
// Add() adds the given article to the set. (Returns 1 if a change was
// made, 0 if it was already there, and negative on error.)
int Add(PRInt32 art);
// Remove() removes the given article from the set.
int Remove(PRInt32 art);
// AddRange() adds the (inclusive) given range of articles to the set.
int AddRange(PRInt32 first, PRInt32 last);
// CountMissingInRange() takes an inclusive range of articles and returns
// the number of articles in that range which are not in the set.
PRInt32 CountMissingInRange(PRInt32 start, PRInt32 end);
// FirstMissingRange() takes an inclusive range and finds the first range
// of articles that are not in the set. If none, return zeros.
int FirstMissingRange(PRInt32 min, PRInt32 max, PRInt32* first, PRInt32* last);
// LastMissingRange() takes an inclusive range and finds the last range
// of articles that are not in the set. If none, return zeros.
int LastMissingRange(PRInt32 min, PRInt32 max, PRInt32* first, PRInt32* last);
PRInt32 GetLastMember();
PRInt32 GetFirstMember();
void SetLastMember(PRInt32 highWaterMark);
// For debugging only...
PRInt32 getLength() {return m_length;}
#ifdef DEBUG
static void RunTests();
#endif
protected:
nsMsgKeySet(/* MSG_NewsHost* host */);
nsMsgKeySet(const char* /* , MSG_NewsHost* host */);
PRBool Grow();
PRBool Optimize();
#ifdef DEBUG
static void test_decoder(const char*);
static void test_adder();
static void test_ranges();
static void test_member(PRBool with_cache);
#endif
PRInt32 *m_data; /* the numbers composing the `chunks' */
PRInt32 m_data_size; /* size of that malloc'ed block */
PRInt32 m_length; /* active area */
PRInt32 m_cached_value; /* a potential set member, or -1 if unset*/
PRInt32 m_cached_value_index; /* the index into `data' at which a search
to determine whether `cached_value' was
a member of the set ended. */
#ifdef NEWSRC_DOES_HOST_STUFF
MSG_NewsHost* m_host;
#endif
};
#endif /* _nsMsgKeySet_H_ */

View File

@@ -1,384 +0,0 @@
/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*-
*
* The contents of this file are subject to the Netscape Public License
* Version 1.0 (the "NPL"); you may not use this file except in
* compliance with the NPL. You may obtain a copy of the NPL at
* http://www.mozilla.org/NPL/
*
* Software distributed under the NPL is distributed on an "AS IS" basis,
* WITHOUT WARRANTY OF ANY KIND, either express or implied. See the NPL
* for the specific language governing rights and limitations under the
* NPL.
*
* The Initial Developer of this code under the NPL is Netscape
* Communications Corporation. Portions created by Netscape are
* Copyright (C) 1999 Netscape Communications Corporation. All Rights
* Reserved.
*/
#include "msgCore.h"
#include "prlog.h"
#include "nsMsgLineBuffer.h"
#include "nsIInputStream.h" // used by nsMsgLineStreamBuffer
MOZ_DECL_CTOR_COUNTER(nsByteArray);
nsByteArray::nsByteArray()
{
MOZ_COUNT_CTOR(nsByteArray);
m_buffer = NULL;
m_bufferSize = 0;
m_bufferPos = 0;
}
nsByteArray::~nsByteArray()
{
MOZ_COUNT_DTOR(nsByteArray);
PR_FREEIF(m_buffer);
}
nsresult nsByteArray::GrowBuffer(PRUint32 desired_size, PRUint32 quantum)
{
if (m_bufferSize < desired_size)
{
char *new_buf;
PRUint32 increment = desired_size - m_bufferSize;
if (increment < quantum) /* always grow by a minimum of N bytes */
increment = quantum;
new_buf = (m_buffer
? (char *) PR_REALLOC (m_buffer, (m_bufferSize + increment))
: (char *) PR_MALLOC (m_bufferSize + increment));
if (! new_buf)
return NS_ERROR_OUT_OF_MEMORY;
m_buffer = new_buf;
m_bufferSize += increment;
}
return 0;
}
nsresult nsByteArray::AppendString(const char *string)
{
PRUint32 strLength = (string) ? PL_strlen(string) : 0;
return AppendBuffer(string, strLength);
}
nsresult nsByteArray::AppendBuffer(const char *buffer, PRUint32 length)
{
nsresult ret = NS_OK;
if (m_bufferPos + length > m_bufferSize)
ret = GrowBuffer(m_bufferPos + length, 1024);
if (ret == NS_OK)
{
memcpy(m_buffer + m_bufferPos, buffer, length);
m_bufferPos += length;
}
return ret;
}
MOZ_DECL_CTOR_COUNTER(nsMsgLineBuffer);
nsMsgLineBuffer::nsMsgLineBuffer(nsMsgLineBufferHandler *handler, PRBool convertNewlinesP)
{
MOZ_COUNT_CTOR(nsMsgLineBuffer);
m_handler = handler;
m_convertNewlinesP = convertNewlinesP;
m_lookingForCRLF = PR_TRUE;
}
nsMsgLineBuffer::~nsMsgLineBuffer()
{
MOZ_COUNT_DTOR(nsMsgLineBuffer);
}
void
nsMsgLineBuffer::SetLookingForCRLF(PRBool b)
{
m_lookingForCRLF = b;
}
PRInt32 nsMsgLineBuffer::BufferInput(const char *net_buffer, PRInt32 net_buffer_size)
{
int status = 0;
if (m_bufferPos > 0 && m_buffer && m_buffer[m_bufferPos - 1] == CR &&
net_buffer_size > 0 && net_buffer[0] != LF) {
/* The last buffer ended with a CR. The new buffer does not start
with a LF. This old buffer should be shipped out and discarded. */
PR_ASSERT(m_bufferSize > m_bufferPos);
if (m_bufferSize <= m_bufferPos) return -1;
status = ConvertAndSendBuffer();
if (status < 0)
return status;
m_bufferPos = 0;
}
while (net_buffer_size > 0)
{
const char *net_buffer_end = net_buffer + net_buffer_size;
const char *newline = 0;
const char *s;
for (s = net_buffer; s < net_buffer_end; s++)
{
if (m_lookingForCRLF) {
/* Move forward in the buffer until the first newline.
Stop when we see CRLF, CR, or LF, or the end of the buffer.
*But*, if we see a lone CR at the *very end* of the buffer,
treat this as if we had reached the end of the buffer without
seeing a line terminator. This is to catch the case of the
buffers splitting a CRLF pair, as in "FOO\r\nBAR\r" "\nBAZ\r\n".
*/
if (*s == CR || *s == LF) {
newline = s;
if (newline[0] == CR) {
if (s == net_buffer_end - 1) {
/* CR at end - wait for the next character. */
newline = 0;
break;
}
else if (newline[1] == LF) {
/* CRLF seen; swallow both. */
newline++;
}
}
newline++;
break;
}
}
else {
/* if not looking for a CRLF, stop at CR or LF. (for example, when parsing the newsrc file). this fixes #9896, where we'd lose the last line of anything we'd parse that used CR as the line break. */
if (*s == CR || *s == LF) {
newline = s;
newline++;
break;
}
}
}
/* Ensure room in the net_buffer and append some or all of the current
chunk of data to it. */
{
const char *end = (newline ? newline : net_buffer_end);
PRUint32 desired_size = (end - net_buffer) + m_bufferPos + 1;
if (desired_size >= m_bufferSize)
{
status = GrowBuffer (desired_size, 1024);
if (status < 0)
return status;
}
memcpy (m_buffer + m_bufferPos, net_buffer, (end - net_buffer));
m_bufferPos += (end - net_buffer);
}
/* Now m_buffer contains either a complete line, or as complete
a line as we have read so far.
If we have a line, process it, and then remove it from `m_buffer'.
Then go around the loop again, until we drain the incoming data.
*/
if (!newline)
return 0;
status = ConvertAndSendBuffer();
if (status < 0) return status;
net_buffer_size -= (newline - net_buffer);
net_buffer = newline;
m_bufferPos = 0;
}
#ifdef DEBUG_bienvenu
printf("returning from buffer input m_bufferPos = %ld\n", m_bufferPos);
#endif
return 0;
}
PRInt32 nsMsgLineBuffer::HandleLine(char *line, PRUint32 line_length)
{
NS_ASSERTION(PR_FALSE, "must override this method if you don't provide a handler");
return 0;
}
PRInt32 nsMsgLineBuffer::ConvertAndSendBuffer()
{
/* Convert the line terminator to the native form.
*/
char *buf = m_buffer;
PRInt32 length = m_bufferPos;
char* newline;
PR_ASSERT(buf && length > 0);
if (!buf || length <= 0)
return -1;
newline = buf + length;
PR_ASSERT(newline[-1] == CR || newline[-1] == LF);
if (newline[-1] != CR && newline[-1] != LF)
return -1;
if (!m_convertNewlinesP)
{
}
#if (MSG_LINEBREAK_LEN == 1)
else if ((newline - buf) >= 2 &&
newline[-2] == CR &&
newline[-1] == LF)
{
/* CRLF -> CR or LF */
buf [length - 2] = MSG_LINEBREAK[0];
length--;
}
else if (newline > buf + 1 &&
newline[-1] != MSG_LINEBREAK[0])
{
/* CR -> LF or LF -> CR */
buf [length - 1] = MSG_LINEBREAK[0];
}
#else
else if (((newline - buf) >= 2 && newline[-2] != CR) ||
((newline - buf) >= 1 && newline[-1] != LF))
{
/* LF -> CRLF or CR -> CRLF */
length++;
buf[length - 2] = MSG_LINEBREAK[0];
buf[length - 1] = MSG_LINEBREAK[1];
}
#endif
return (m_handler) ? m_handler->HandleLine(buf, length) : HandleLine(buf, length);
}
// If there's still some data (non CRLF terminated) flush it out
PRInt32 nsMsgLineBuffer::FlushLastLine()
{
char *buf = m_buffer + m_bufferPos;
PRInt32 length = m_bufferPos - 1;
if (length > 0)
return (m_handler) ? m_handler->HandleLine(buf, length) : HandleLine(buf, length);
else
return 0;
}
///////////////////////////////////////////////////////////////////////////////////////////////////
// This is a utility class used to efficiently extract lines from an input stream by buffering
// read but unprocessed stream data in a buffer.
///////////////////////////////////////////////////////////////////////////////////////////////////
nsMsgLineStreamBuffer::nsMsgLineStreamBuffer(PRUint32 aBufferSize, const char * aEndOfLineToken,
PRBool aAllocateNewLines, PRBool aEatCRLFs)
: m_eatCRLFs(aEatCRLFs), m_allocateNewLines(aAllocateNewLines),
m_endOfLineToken(aEndOfLineToken)
{
NS_PRECONDITION(aBufferSize > 0, "invalid buffer size!!!");
m_dataBuffer = nsnull;
m_startPos = nsnull;
// used to buffer incoming data by ReadNextLineFromInput
if (aBufferSize > 0)
{
m_dataBuffer = (char *) PR_CALLOC(sizeof(char) * aBufferSize);
m_startPos = m_dataBuffer;
}
m_dataBufferSize = aBufferSize;
}
nsMsgLineStreamBuffer::~nsMsgLineStreamBuffer()
{
PR_FREEIF(m_dataBuffer); // release our buffer...
}
// the design for this method has an inherit bug: if the length of the line is greater than the size of m_dataBufferSize,
// then we'll never find the next line because we can't hold the whole line in memory.
// aInputStream - the input stream we want to read a line from
// aPauseForMoreData is returned as PR_TRUE if the stream does not yet contain a line and we must wait for more
// data to come into the stream.
// Note to people wishing to modify this function: Be *VERY CAREFUL* this is a critical function used by all of
// our mail protocols including imap, nntp, and pop. If you screw it up, you could break a lot of stuff.....
char * nsMsgLineStreamBuffer::ReadNextLine(nsIInputStream * aInputStream, PRUint32 &aNumBytesInLine, PRBool &aPauseForMoreData)
{
// try to extract a line from m_inputBuffer. If we don't have an entire line,
// then read more bytes out from the stream. If the stream is empty then wait
// on the monitor for more data to come in.
NS_PRECONDITION(m_startPos && m_dataBufferSize > 0, "invalid input arguments for read next line from input");
// initialize out values
aPauseForMoreData = PR_FALSE;
aNumBytesInLine = 0;
char * endOfLine = nsnull;
PRUint32 numBytesInBuffer = PL_strlen(m_startPos);
if (numBytesInBuffer > 0) // any data in our internal buffer?
endOfLine = PL_strstr(m_startPos, m_endOfLineToken); // see if we already have a line ending...
// it's possible that we got here before the first time we receive data from the server
// so aInputStream will be nsnull...
if (!endOfLine && aInputStream) // get some more data from the server
{
PRUint32 numBytesInStream = 0;
PRUint32 numBytesCopied = 0;
aInputStream->Available(&numBytesInStream);
// if the number of bytes we want to read from the stream, is greater than the number
// of bytes left in our buffer, then we need to shift the start pos and its contents
// down to the beginning of m_dataBuffer...
PRUint32 numFreeBytesInBuffer = (m_dataBuffer + m_dataBufferSize) - (m_startPos + numBytesInBuffer);
if (numBytesInStream >= numFreeBytesInBuffer)
{
nsCRT::memcpy(m_dataBuffer, m_startPos, numBytesInBuffer);
m_dataBuffer[numBytesInBuffer] = '\0'; // make sure the end of the buffer is terminated
m_startPos = m_dataBuffer; // update the new start position
// update the number of free bytes in the buffer
numFreeBytesInBuffer = m_dataBufferSize - numBytesInBuffer;
}
PRUint32 numBytesToCopy = PR_MIN(numFreeBytesInBuffer - 1 /* leave one for a null terminator */, numBytesInStream);
// read the data into the end of our data buffer
if (numBytesToCopy > 0)
{
aInputStream->Read(m_startPos + numBytesInBuffer, numBytesToCopy, &numBytesCopied);
m_startPos[numBytesInBuffer + numBytesCopied] = '\0';
}
// okay, now that we've tried to read in more data from the stream, look for another end of line
// character
endOfLine = PL_strstr(m_startPos, m_endOfLineToken);
}
// okay, now check again for endOfLine.
if (endOfLine)
{
if (!m_eatCRLFs)
endOfLine += PL_strlen(m_endOfLineToken); // count for CRLF
// PR_CALLOC zeros out the allocated line
char* newLine = (char*) PR_CALLOC(endOfLine-m_startPos+1);
if (!newLine)
return nsnull;
nsCRT::memcpy(newLine, m_startPos, endOfLine-m_startPos); // copy the string into the new line buffer
aNumBytesInLine = endOfLine - m_startPos;
if (m_eatCRLFs)
endOfLine += PL_strlen(m_endOfLineToken); // advance past CRLF if we haven't already done so...
// now we need to update the data buffer to go past the line we just read out.
if (PL_strlen(endOfLine) <= 0) // if no more data in the buffer, then just zero out the buffer...
m_startPos[0] = '\0';
else // advance
m_startPos = endOfLine; // move us up to the end of the line
return newLine;
}
aPauseForMoreData = PR_TRUE;
return nsnull; // if we somehow got here. we don't have another line in the buffer yet...need to wait for more data...
}

View File

@@ -1,113 +0,0 @@
/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*-
*
* The contents of this file are subject to the Netscape Public License
* Version 1.0 (the "NPL"); you may not use this file except in
* compliance with the NPL. You may obtain a copy of the NPL at
* http://www.mozilla.org/NPL/
*
* Software distributed under the NPL is distributed on an "AS IS" basis,
* WITHOUT WARRANTY OF ANY KIND, either express or implied. See the NPL
* for the specific language governing rights and limitations under the
* NPL.
*
* The Initial Developer of this code under the NPL is Netscape
* Communications Corporation. Portions created by Netscape are
* Copyright (C) 1999 Netscape Communications Corporation. All Rights
* Reserved.
*/
#ifndef _nsMsgLineBuffer_H
#define _nsMsgLineBuffer_H
#include "msgCore.h" // precompiled header...
// I can't believe I have to have this stupid class, but I can't find
// anything suitable (nsStrImpl might be, when its done). nsIByteBuffer
// would do, if I had a stream for input, which I don't.
class NS_MSG_BASE nsByteArray
{
public:
nsByteArray();
virtual ~nsByteArray();
PRUint32 GetSize() {return m_bufferSize;}
PRUint32 GetBufferPos() {return m_bufferPos;}
nsresult GrowBuffer(PRUint32 desired_size, PRUint32 quantum = 1024);
nsresult AppendString(const char *string);
nsresult AppendBuffer(const char *buffer, PRUint32 length);
void ResetWritePos() {m_bufferPos = 0;}
char *GetBuffer() {return m_buffer;}
protected:
char *m_buffer;
PRUint32 m_bufferSize;
PRUint32 m_bufferPos; // write Pos in m_buffer - where the next byte should go.
};
class NS_MSG_BASE nsMsgLineBufferHandler : public nsByteArray
{
public:
virtual PRInt32 HandleLine(char *line, PRUint32 line_length) = 0;
};
class NS_MSG_BASE nsMsgLineBuffer : public nsByteArray
{
public:
nsMsgLineBuffer(nsMsgLineBufferHandler *handler, PRBool convertNewlinesP);
virtual ~nsMsgLineBuffer();
PRInt32 BufferInput(const char *net_buffer, PRInt32 net_buffer_size);
// Not sure why anyone cares, by NNTPHost seems to want to know the buf pos.
PRUint32 GetBufferPos() {return m_bufferPos;}
virtual PRInt32 HandleLine(char *line, PRUint32 line_length);
// flush last line, though it won't be CRLF terminated.
virtual PRInt32 FlushLastLine();
protected:
nsMsgLineBuffer(PRBool convertNewlinesP);
PRInt32 ConvertAndSendBuffer();
void SetLookingForCRLF(PRBool b);
nsMsgLineBufferHandler *m_handler;
PRBool m_convertNewlinesP;
PRBool m_lookingForCRLF;
};
// I'm adding this utility class here for lack of a better place. This utility class is similar to nsMsgLineBuffer
// except it works from an input stream. It is geared towards efficiently parsing new lines out of a stream by storing
// read but unprocessed bytes in a buffer. I envision the primary use of this to be our mail protocols such as imap, news and
// pop which need to process line by line data being returned in the form of a proxied stream from the server.
class nsIInputStream;
class NS_MSG_BASE nsMsgLineStreamBuffer
{
public:
// aBufferSize -- size of the buffer you want us to use for buffering stream data
// aEndOfLinetoken -- The delimeter string to be used for determining the end of line. This
// allows us to parse platform specific end of line endings by making it
// a parameter.
// aAllocateNewLines -- PR_TRUE if you want calls to ReadNextLine to allocate new memory for the line.
// if false, the char * returned is just a ptr into the buffer. Subsequent calls to
// ReadNextLine will alter the data so your ptr only has a life time of a per call.
// aEatCRLFs -- PR_TRUE if you don't want to see the CRLFs on the lines returned by ReadNextLine.
// PR_FALSE if you do want to see them.
nsMsgLineStreamBuffer(PRUint32 aBufferSize, const char * aEndOfLineToken, PRBool aAllocateNewLines, PRBool aEatCRLFs = PR_TRUE); // specify the size of the buffer you want the class to use....
virtual ~nsMsgLineStreamBuffer();
// Caller must free the line returned using PR_Free
// aEndOfLinetoken -- delimeter used to denote the end of a line.
// aNumBytesInLine -- The number of bytes in the line returned
// aPauseForMoreData -- There is not enough data in the stream to make a line at this time...
char * ReadNextLine(nsIInputStream * aInputStream, PRUint32 &anumBytesInLine, PRBool &aPauseForMoreData);
protected:
PRBool m_eatCRLFs;
PRBool m_allocateNewLines;
char * m_dataBuffer;
char * m_startPos;
const char * m_endOfLineToken;
PRUint32 m_dataBufferSize;
};
#endif

View File

@@ -1,399 +0,0 @@
/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*-
*
* The contents of this file are subject to the Netscape Public License
* Version 1.0 (the "NPL"); you may not use this file except in
* compliance with the NPL. You may obtain a copy of the NPL at
* http://www.mozilla.org/NPL/
*
* Software distributed under the NPL is distributed on an "AS IS" basis,
* WITHOUT WARRANTY OF ANY KIND, either express or implied. See the NPL
* for the specific language governing rights and limitations under the
* NPL.
*
* The Initial Developer of this code under the NPL is Netscape
* Communications Corporation. Portions created by Netscape are
* Copyright (C) 1999 Netscape Communications Corporation. All Rights
* Reserved.
*/
#include "msgCore.h"
#include "nsMsgMailNewsUrl.h"
#include "nsMsgBaseCID.h"
#include "nsIMsgMailSession.h"
#include "nsXPIDLString.h"
static NS_DEFINE_CID(kUrlListenerManagerCID, NS_URLLISTENERMANAGER_CID);
static NS_DEFINE_CID(kStandardUrlCID, NS_STANDARDURL_CID);
static NS_DEFINE_CID(kMsgMailSessionCID, NS_MSGMAILSESSION_CID);
nsMsgMailNewsUrl::nsMsgMailNewsUrl()
{
NS_INIT_REFCNT();
// nsIURI specific state
m_errorMessage = nsnull;
m_runningUrl = PR_FALSE;
m_updatingFolder = PR_FALSE;
nsComponentManager::CreateInstance(kUrlListenerManagerCID, nsnull, nsCOMTypeInfo<nsIUrlListenerManager>::GetIID(), (void **) getter_AddRefs(m_urlListeners));
nsComponentManager::CreateInstance(kStandardUrlCID, nsnull, nsCOMTypeInfo<nsIURL>::GetIID(), (void **) getter_AddRefs(m_baseURL));
}
nsMsgMailNewsUrl::~nsMsgMailNewsUrl()
{
PR_FREEIF(m_errorMessage);
}
NS_IMPL_ADDREF(nsMsgMailNewsUrl);
NS_IMPL_RELEASE(nsMsgMailNewsUrl);
nsresult nsMsgMailNewsUrl::QueryInterface(const nsIID &aIID, void** aInstancePtr)
{
if (NULL == aInstancePtr) {
return NS_ERROR_NULL_POINTER;
}
if (aIID.Equals(nsCOMTypeInfo<nsIURI>::GetIID())) {
*aInstancePtr = (void*) ((nsIURI*)this);
NS_ADDREF_THIS();
return NS_OK;
}
if (aIID.Equals(nsCOMTypeInfo<nsIURL>::GetIID())) {
*aInstancePtr = (void*) ((nsIURL*)this);
NS_ADDREF_THIS();
return NS_OK;
}
if (aIID.Equals(nsCOMTypeInfo<nsIMsgMailNewsUrl>::GetIID()))
{
*aInstancePtr = (void *) ((nsIMsgMailNewsUrl*) this);
NS_ADDREF_THIS();
return NS_OK;
}
if (aIID.Equals(nsCOMTypeInfo<nsISupports>::GetIID()))
{
*aInstancePtr = (void *) ((nsIMsgMailNewsUrl*) this);
NS_ADDREF_THIS();
return NS_OK;
}
#if defined(NS_DEBUG)
/*
* Check for the debug-only interface indicating thread-safety
*/
static NS_DEFINE_IID(kIsThreadsafeIID, NS_ISTHREADSAFE_IID);
if (aIID.Equals(kIsThreadsafeIID)) {
return NS_OK;
}
#endif
return NS_NOINTERFACE;
}
////////////////////////////////////////////////////////////////////////////////////
// Begin nsIMsgMailNewsUrl specific support
////////////////////////////////////////////////////////////////////////////////////
nsresult nsMsgMailNewsUrl::GetUrlState(PRBool * aRunningUrl)
{
if (aRunningUrl)
*aRunningUrl = m_runningUrl;
return NS_OK;
}
nsresult nsMsgMailNewsUrl::SetUrlState(PRBool aRunningUrl, nsresult aExitCode)
{
m_runningUrl = aRunningUrl;
nsCOMPtr <nsIMsgStatusFeedback> statusFeedback;
if (NS_SUCCEEDED(GetStatusFeedback(getter_AddRefs(statusFeedback))) && statusFeedback)
{
if (m_runningUrl)
statusFeedback->StartMeteors();
else
{
statusFeedback->ShowProgress(0);
statusFeedback->StopMeteors();
}
}
if (m_urlListeners)
{
if (m_runningUrl)
{
m_urlListeners->OnStartRunningUrl(this);
}
else
{
m_urlListeners->OnStopRunningUrl(this, aExitCode);
}
}
return NS_OK;
}
nsresult nsMsgMailNewsUrl::RegisterListener (nsIUrlListener * aUrlListener)
{
if (m_urlListeners)
m_urlListeners->RegisterListener(aUrlListener);
return NS_OK;
}
nsresult nsMsgMailNewsUrl::UnRegisterListener (nsIUrlListener * aUrlListener)
{
if (m_urlListeners)
m_urlListeners->UnRegisterListener(aUrlListener);
return NS_OK;
}
nsresult nsMsgMailNewsUrl::SetErrorMessage (const char * errorMessage)
{
// functionality has been moved to nsIMsgStatusFeedback
return NS_ERROR_NOT_IMPLEMENTED;
}
nsresult nsMsgMailNewsUrl::GetErrorMessage (char ** errorMessage)
{
// functionality has been moved to nsIMsgStatusFeedback
return NS_ERROR_NOT_IMPLEMENTED;
}
NS_IMETHODIMP nsMsgMailNewsUrl::GetServer(nsIMsgIncomingServer ** aIncomingServer)
{
// mscott --> we could cache a copy of the server here....but if we did, we run
// the risk of leaking the server if any single url gets leaked....of course that
// shouldn't happen...but it could. so i'm going to look it up every time and
// we can look at caching it later.
nsXPIDLCString host;
nsXPIDLCString scheme;
nsresult rv = GetHost(getter_Copies(host));
rv = GetScheme(getter_Copies(scheme));
if (NS_SUCCEEDED(rv))
{
NS_WITH_SERVICE(nsIMsgMailSession, session, kMsgMailSessionCID, &rv);
if (NS_FAILED(rv)) return rv;
nsCOMPtr<nsIMsgAccountManager> accountManager;
rv = session->GetAccountManager(getter_AddRefs(accountManager));
if(NS_FAILED(rv)) return rv;
nsCOMPtr<nsIMsgIncomingServer> server;
rv = accountManager->FindServer(GetUserName(),
host,
scheme,
aIncomingServer);
}
return rv;
}
NS_IMETHODIMP nsMsgMailNewsUrl::SetStatusFeedback(nsIMsgStatusFeedback *aMsgFeedback)
{
if (aMsgFeedback)
m_statusFeedback = do_QueryInterface(aMsgFeedback);
return NS_OK;
}
NS_IMETHODIMP nsMsgMailNewsUrl::GetStatusFeedback(nsIMsgStatusFeedback **aMsgFeedback)
{
nsresult rv = NS_OK;
// note: it is okay to return a null status feedback and not return an error
// it's possible the url really doesn't have status feedback
if (!m_statusFeedback)
{
NS_WITH_SERVICE(nsIMsgMailSession, mailSession, kMsgMailSessionCID, &rv);
if(NS_SUCCEEDED(rv))
mailSession->GetTemporaryMsgStatusFeedback(getter_AddRefs(m_statusFeedback));
}
if (aMsgFeedback)
{
*aMsgFeedback = m_statusFeedback;
NS_IF_ADDREF(*aMsgFeedback);
}
else
rv = NS_ERROR_NULL_POINTER;
return rv;
}
NS_IMETHODIMP nsMsgMailNewsUrl::GetUpdatingFolder(PRBool *aResult)
{
if (!aResult)
return NS_ERROR_NULL_POINTER;
*aResult = m_updatingFolder;
return NS_OK;
}
NS_IMETHODIMP nsMsgMailNewsUrl::SetUpdatingFolder(PRBool updatingFolder)
{
m_updatingFolder = updatingFolder;
return NS_OK;
}
////////////////////////////////////////////////////////////////////////////////////
// End nsIMsgMailNewsUrl specific support
////////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////////
// Begin nsIURI support
////////////////////////////////////////////////////////////////////////////////////
NS_IMETHODIMP nsMsgMailNewsUrl::GetSpec(char * *aSpec)
{
return m_baseURL->GetSpec(aSpec);
}
NS_IMETHODIMP nsMsgMailNewsUrl::SetSpec(const char * aSpec)
{
return m_baseURL->SetSpec(aSpec);
}
NS_IMETHODIMP nsMsgMailNewsUrl::GetScheme(char * *aScheme)
{
return m_baseURL->GetScheme(aScheme);
}
NS_IMETHODIMP nsMsgMailNewsUrl::SetScheme(const char * aScheme)
{
return m_baseURL->SetScheme(aScheme);
}
NS_IMETHODIMP nsMsgMailNewsUrl::GetPreHost(char * *aPreHost)
{
return m_baseURL->GetPreHost(aPreHost);
}
NS_IMETHODIMP nsMsgMailNewsUrl::SetPreHost(const char * aPreHost)
{
return m_baseURL->SetPreHost(aPreHost);
}
NS_IMETHODIMP nsMsgMailNewsUrl::GetHost(char * *aHost)
{
return m_baseURL->GetHost(aHost);
}
NS_IMETHODIMP nsMsgMailNewsUrl::SetHost(const char * aHost)
{
return m_baseURL->SetHost(aHost);
}
NS_IMETHODIMP nsMsgMailNewsUrl::GetPort(PRInt32 *aPort)
{
return m_baseURL->GetPort(aPort);
}
NS_IMETHODIMP nsMsgMailNewsUrl::SetPort(PRInt32 aPort)
{
return m_baseURL->SetPort(aPort);
}
NS_IMETHODIMP nsMsgMailNewsUrl::GetPath(char * *aPath)
{
return m_baseURL->GetPath(aPath);
}
NS_IMETHODIMP nsMsgMailNewsUrl::SetPath(const char * aPath)
{
return m_baseURL->SetPath(aPath);
}
NS_IMETHODIMP nsMsgMailNewsUrl::Equals(nsIURI *other, PRBool *_retval)
{
return m_baseURL->Equals(other, _retval);
}
NS_IMETHODIMP nsMsgMailNewsUrl::Clone(nsIURI **_retval)
{
return m_baseURL->Clone(_retval);
}
NS_IMETHODIMP nsMsgMailNewsUrl::SetRelativePath(const char *i_RelativePath)
{
return m_baseURL->SetRelativePath(i_RelativePath);
}
NS_IMETHODIMP nsMsgMailNewsUrl::GetDirectory(char * *aDirectory)
{
return m_baseURL->GetDirectory(aDirectory);
}
NS_IMETHODIMP nsMsgMailNewsUrl::SetDirectory(const char *aDirectory)
{
return m_baseURL->SetDirectory(aDirectory);
}
NS_IMETHODIMP nsMsgMailNewsUrl::GetFileName(char * *aFileName)
{
return m_baseURL->GetFileName(aFileName);
}
NS_IMETHODIMP nsMsgMailNewsUrl::GetFileBaseName(char * *aFileBaseName)
{
return NS_ERROR_NOT_IMPLEMENTED;
}
NS_IMETHODIMP nsMsgMailNewsUrl::SetFileBaseName(const char * aFileBaseName)
{
return NS_ERROR_NOT_IMPLEMENTED;
}
NS_IMETHODIMP nsMsgMailNewsUrl::GetFileExtension(char * *aFileExtension)
{
return NS_ERROR_NOT_IMPLEMENTED;
}
NS_IMETHODIMP nsMsgMailNewsUrl::SetFileExtension(const char * aFileExtension)
{
return NS_ERROR_NOT_IMPLEMENTED;
}
NS_IMETHODIMP nsMsgMailNewsUrl::SetFileName(const char * aFileName)
{
return m_baseURL->SetFileName(aFileName);
}
NS_IMETHODIMP nsMsgMailNewsUrl::GetParam(char * *aParam)
{
return m_baseURL->GetParam(aParam);
}
NS_IMETHODIMP nsMsgMailNewsUrl::SetParam(const char *aParam)
{
return m_baseURL->SetParam(aParam);
}
NS_IMETHODIMP nsMsgMailNewsUrl::GetQuery(char * *aQuery)
{
return m_baseURL->GetQuery(aQuery);
}
NS_IMETHODIMP nsMsgMailNewsUrl::SetQuery(const char *aQuery)
{
return m_baseURL->SetQuery(aQuery);
}
NS_IMETHODIMP nsMsgMailNewsUrl::GetRef(char * *aRef)
{
return m_baseURL->GetRef(aRef);
}
NS_IMETHODIMP nsMsgMailNewsUrl::SetRef(const char *aRef)
{
return m_baseURL->SetRef(aRef);
}
NS_IMETHODIMP nsMsgMailNewsUrl::GetFilePath(char **o_DirFile)
{
return m_baseURL->GetFilePath(o_DirFile);
}
NS_IMETHODIMP nsMsgMailNewsUrl::SetFilePath(const char *i_DirFile)
{
return m_baseURL->SetFilePath(i_DirFile);
}

View File

@@ -1,66 +0,0 @@
/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*-
*
* The contents of this file are subject to the Netscape Public License
* Version 1.0 (the "NPL"); you may not use this file except in
* compliance with the NPL. You may obtain a copy of the NPL at
* http://www.mozilla.org/NPL/
*
* Software distributed under the NPL is distributed on an "AS IS" basis,
* WITHOUT WARRANTY OF ANY KIND, either express or implied. See the NPL
* for the specific language governing rights and limitations under the
* NPL.
*
* The Initial Developer of this code under the NPL is Netscape
* Communications Corporation. Portions created by Netscape are
* Copyright (C) 1998 Netscape Communications Corporation. All Rights
* Reserved.
*/
#ifndef nsMsgMailNewsUrl_h___
#define nsMsgMailNewsUrl_h___
#include "nscore.h"
#include "nsISupports.h"
#include "nsIUrlListener.h"
#include "nsIUrlListenerManager.h"
#include "nsIMsgStatusFeedback.h"
#include "nsCOMPtr.h"
#include "nsIMsgMailNewsUrl.h"
#include "nsIURL.h"
///////////////////////////////////////////////////////////////////////////////////
// Okay, I found that all of the mail and news url interfaces needed to support
// several common interfaces (in addition to those provided through nsIURI).
// So I decided to group them all in this implementation so we don't have to
// duplicate the code.
//
//////////////////////////////////////////////////////////////////////////////////
class NS_MSG_BASE nsMsgMailNewsUrl : public nsIMsgMailNewsUrl
{
public:
nsMsgMailNewsUrl();
NS_DECL_ISUPPORTS
NS_DECL_NSIMSGMAILNEWSURL
NS_DECL_NSIURI
NS_DECL_NSIURL
protected:
virtual ~nsMsgMailNewsUrl();
// a helper function I needed from derived urls...
virtual const char * GetUserName() = 0;
nsCOMPtr<nsIURL> m_baseURL;
nsCOMPtr<nsIMsgStatusFeedback> m_statusFeedback;
char *m_errorMessage;
PRBool m_runningUrl;
PRBool m_updatingFolder;
// manager of all of current url listeners....
nsCOMPtr<nsIUrlListenerManager> m_urlListeners;
};
#endif /* nsMsgMailNewsUrl_h___ */

View File

@@ -1,369 +0,0 @@
/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*-
*
* The contents of this file are subject to the Netscape Public License
* Version 1.0 (the "NPL"); you may not use this file except in
* compliance with the NPL. You may obtain a copy of the NPL at
* http://www.mozilla.org/NPL/
*
* Software distributed under the NPL is distributed on an "AS IS" basis,
* WITHOUT WARRANTY OF ANY KIND, either express or implied. See the NPL
* for the specific language governing rights and limitations under the
* NPL.
*
* The Initial Developer of this code under the NPL is Netscape
* Communications Corporation. Portions created by Netscape are
* Copyright (C) 1998 Netscape Communications Corporation. All Rights
* Reserved.
*/
#include "msgCore.h"
#include "nsMsgProtocol.h"
#include "nsIMsgMailNewsUrl.h"
#include "nsISocketTransportService.h"
#include "nsXPIDLString.h"
#include "nsSpecialSystemDirectory.h"
#include "nsILoadGroup.h"
#include "nsIIOService.h"
static NS_DEFINE_CID(kSocketTransportServiceCID, NS_SOCKETTRANSPORTSERVICE_CID);
static NS_DEFINE_CID(kIOServiceCID, NS_IOSERVICE_CID);
NS_IMPL_ISUPPORTS3(nsMsgProtocol, nsIStreamListener, nsIStreamObserver, nsIChannel)
nsMsgProtocol::nsMsgProtocol()
{
NS_INIT_REFCNT();
m_flags = 0;
m_startPosition = 0;
m_readCount = 0;
m_socketIsOpen = PR_FALSE;
m_tempMsgFileSpec = nsSpecialSystemDirectory(nsSpecialSystemDirectory::OS_TemporaryDirectory);
m_tempMsgFileSpec += "tempMessage.eml";
}
nsMsgProtocol::~nsMsgProtocol()
{}
nsresult nsMsgProtocol::OpenNetworkSocket(nsIURI * aURL) // open a connection on this url
{
nsresult rv = NS_OK;
nsXPIDLCString hostName;
PRInt32 port = 0;
m_readCount = -1; // with socket connections we want to read as much data as arrives
m_startPosition = 0;
NS_WITH_SERVICE(nsISocketTransportService, socketService, kSocketTransportServiceCID, &rv);
if (NS_SUCCEEDED(rv) && aURL)
{
aURL->GetPort(&port);
aURL->GetHost(getter_Copies(hostName));
rv = socketService->CreateTransport(hostName, port, nsnull, getter_AddRefs(m_channel));
if (NS_SUCCEEDED(rv) && m_channel)
{
m_socketIsOpen = PR_FALSE;
rv = SetupTransportState();
}
}
return rv;
}
nsresult nsMsgProtocol::OpenFileSocket(nsIURI * aURL, const nsFileSpec * aFileSpec, PRUint32 aStartPosition, PRInt32 aReadCount)
{
// mscott - file needs to be encoded directly into aURL. I should be able to get
// rid of this method completely.
nsresult rv = NS_OK;
m_startPosition = aStartPosition;
m_readCount = aReadCount;
NS_WITH_SERVICE(nsIIOService, netService, kIOServiceCID, &rv);
if (NS_SUCCEEDED(rv) && aURL)
{
// extract the file path from the uri...
nsXPIDLCString filePath;
aURL->GetPath(getter_Copies(filePath));
char * urlSpec = PR_smprintf("file://%s", (const char *) filePath);
rv = netService->NewChannel("Load", urlSpec,
nsnull, // null base URI
nsnull, // null load group
nsnull, // null eventsink getter
getter_AddRefs(m_channel));
PR_FREEIF(urlSpec);
if (NS_SUCCEEDED(rv) && m_channel)
{
m_socketIsOpen = PR_FALSE;
// rv = SetupTransportState();
}
}
return rv;
}
nsresult nsMsgProtocol::SetupTransportState()
{
nsresult rv = NS_OK;
if (!m_socketIsOpen && m_channel)
{
rv = m_channel->OpenOutputStream(0 /* start position */, getter_AddRefs(m_outputStream));
NS_ASSERTION(NS_SUCCEEDED(rv), "unable to create an output stream");
// we want to open the stream
} // if m_transport
return rv;
}
nsresult nsMsgProtocol::CloseSocket()
{
// release all of our socket state
m_socketIsOpen = PR_FALSE;
m_outputStream = null_nsCOMPtr();
m_channel = null_nsCOMPtr();
return NS_OK;
}
/*
* Writes the data contained in dataBuffer into the current output stream. It also informs
* the transport layer that this data is now available for transmission.
* Returns a positive number for success, 0 for failure (not all the bytes were written to the
* stream, etc). We need to make another pass through this file to install an error system (mscott)
*/
PRInt32 nsMsgProtocol::SendData(nsIURI * aURL, const char * dataBuffer)
{
PRUint32 writeCount = 0;
PRInt32 status = 0;
// NS_PRECONDITION(m_outputStream, "oops....we don't have an output stream...how did that happen?");
if (dataBuffer && m_outputStream)
{
status = m_outputStream->Write(dataBuffer, PL_strlen(dataBuffer), &writeCount);
}
return status;
}
// Whenever data arrives from the connection, core netlib notifices the protocol by calling
// OnDataAvailable. We then read and process the incoming data from the input stream.
NS_IMETHODIMP nsMsgProtocol::OnDataAvailable(nsIChannel * /* aChannel */, nsISupports *ctxt, nsIInputStream *inStr, PRUint32 sourceOffset, PRUint32 count)
{
// right now, this really just means turn around and churn through the state machine
nsCOMPtr<nsIURI> uri = do_QueryInterface(ctxt);
return ProcessProtocolState(uri, inStr, sourceOffset, count);
}
NS_IMETHODIMP nsMsgProtocol::OnStartRequest(nsIChannel * aChannel, nsISupports *ctxt)
{
nsresult rv = NS_OK;
nsCOMPtr <nsIMsgMailNewsUrl> aMsgUrl = do_QueryInterface(ctxt, &rv);
if (NS_SUCCEEDED(rv) && aMsgUrl)
rv = aMsgUrl->SetUrlState(PR_TRUE, NS_OK);
// if we are set up as a channel, we should notify our channel listener that we are starting...
// so pass in ourself as the channel and not the underlying socket or file channel the protocol
// happens to be using
if (m_channelListener)
rv = m_channelListener->OnStartRequest(this, m_channelContext);
return rv;
}
// stop binding is a "notification" informing us that the stream associated with aURL is going away.
NS_IMETHODIMP nsMsgProtocol::OnStopRequest(nsIChannel * aChannel, nsISupports *ctxt, nsresult aStatus, const PRUnichar* aMsg)
{
nsresult rv = NS_OK;
nsCOMPtr <nsIMsgMailNewsUrl> aMsgUrl = do_QueryInterface(ctxt, &rv);
if (NS_SUCCEEDED(rv) && aMsgUrl)
rv = aMsgUrl->SetUrlState(PR_FALSE, aStatus);
// if we are set up as a channel, we should notify our channel listener that we are starting...
// so pass in ourself as the channel and not the underlying socket or file channel the protocol
// happens to be using
if (m_channelListener)
rv = m_channelListener->OnStopRequest(this, m_channelContext, aStatus, aMsg);
return rv;
}
nsresult nsMsgProtocol::LoadUrl(nsIURI * aURL, nsISupports * aConsumer)
{
// okay now kick us off to the next state...
// our first state is a process state so drive the state machine...
nsresult rv = NS_OK;
nsCOMPtr <nsIMsgMailNewsUrl> aMsgUrl = do_QueryInterface(aURL);
if (NS_SUCCEEDED(rv))
{
rv = aMsgUrl->SetUrlState(PR_TRUE, NS_OK); // set the url as a url currently being run...
// if the url is given a stream consumer then we should use it to forward calls to...
if (!m_channelListener && aConsumer) // if we don't have a registered listener already
{
m_channelListener = do_QueryInterface(aConsumer);
if (!m_channelContext)
m_channelContext = do_QueryInterface(aURL);
}
if (!m_socketIsOpen)
{
nsCOMPtr<nsISupports> urlSupports = do_QueryInterface(aURL);
// put us in a state where we are always notified of incoming data
m_channel->AsyncRead(m_startPosition, m_readCount, urlSupports ,this /* stream observer */);
m_socketIsOpen = PR_TRUE; // mark the channel as open
} // if we got an event queue service
else // the connection is already open so we should begin processing our new url...
rv = ProcessProtocolState(aURL, nsnull, 0, 0);
}
return rv;
}
///////////////////////////////////////////////////////////////////////
// The rest of this file is mostly nsIChannel mumbo jumbo stuff
///////////////////////////////////////////////////////////////////////
nsresult nsMsgProtocol::SetUrl(nsIURI * aURL)
{
m_url = dont_QueryInterface(aURL);
return NS_OK;
}
nsresult nsMsgProtocol::SetLoadGroup(nsILoadGroup * aLoadGroup)
{
m_loadGroup = dont_QueryInterface(aLoadGroup);
return NS_OK;
}
NS_IMETHODIMP nsMsgProtocol::GetURI(nsIURI * *aURI)
{
nsresult rv = NS_OK;
if (aURI)
{
if (m_url)
rv = m_url->QueryInterface(NS_GET_IID(nsIURI), (void **) aURI);
else
*aURI = nsnull;
}
else
rv = NS_ERROR_NULL_POINTER;
return rv;
}
NS_IMETHODIMP nsMsgProtocol::OpenInputStream(PRUint32 startPosition, PRInt32 readCount, nsIInputStream **_retval)
{
return NS_ERROR_NOT_IMPLEMENTED;
}
NS_IMETHODIMP nsMsgProtocol::OpenOutputStream(PRUint32 startPosition, nsIOutputStream **_retval)
{
return NS_ERROR_NOT_IMPLEMENTED;
}
NS_IMETHODIMP nsMsgProtocol::AsyncOpen(nsIStreamObserver *observer, nsISupports* ctxt)
{
return NS_ERROR_NOT_IMPLEMENTED;
}
NS_IMETHODIMP nsMsgProtocol::AsyncRead(PRUint32 startPosition, PRInt32 readCount, nsISupports *ctxt, nsIStreamListener *listener)
{
// set the stream listener and then load the url
m_channelContext = ctxt;
m_channelListener = listener;
// the following load group code is completely bogus....
nsresult rv = NS_OK;
if (m_loadGroup)
{
nsCOMPtr<nsILoadGroupListenerFactory> factory;
//
// Create a load group "proxy" listener...
//
rv = m_loadGroup->GetGroupListenerFactory(getter_AddRefs(factory));
if (factory)
{
nsCOMPtr<nsIStreamListener> newListener;
rv = factory->CreateLoadGroupListener(m_channelListener, getter_AddRefs(newListener));
if (NS_SUCCEEDED(rv))
m_channelListener = newListener;
}
} // if aLoadGroup
return LoadUrl(m_url, nsnull);
}
NS_IMETHODIMP nsMsgProtocol::AsyncWrite(nsIInputStream *fromStream, PRUint32 startPosition, PRInt32 writeCount, nsISupports *ctxt, nsIStreamObserver *observer)
{
return NS_ERROR_NOT_IMPLEMENTED;
}
NS_IMETHODIMP nsMsgProtocol::GetLoadAttributes(nsLoadFlags *aLoadAttributes)
{
return NS_ERROR_NOT_IMPLEMENTED;
}
NS_IMETHODIMP nsMsgProtocol::SetLoadAttributes(nsLoadFlags aLoadAttributes)
{
return NS_ERROR_NOT_IMPLEMENTED;
}
NS_IMETHODIMP nsMsgProtocol::GetContentType(char * *aContentType)
{
*aContentType = nsCRT::strdup("message/rfc822");
return NS_OK;
}
NS_IMETHODIMP nsMsgProtocol::GetContentLength(PRInt32 * aContentLength)
{
*aContentLength = -1;
return NS_OK;
}
NS_IMETHODIMP nsMsgProtocol::GetOwner(nsISupports * *aPrincipal)
{
return NS_ERROR_NOT_IMPLEMENTED;
}
NS_IMETHODIMP nsMsgProtocol::SetOwner(nsISupports * aPrincipal)
{
return NS_ERROR_NOT_IMPLEMENTED;
}
NS_IMETHODIMP nsMsgProtocol::GetLoadGroup(nsILoadGroup * *aLoadGroup)
{
return NS_ERROR_NOT_IMPLEMENTED;
}
////////////////////////////////////////////////////////////////////////////////
// From nsIRequest
////////////////////////////////////////////////////////////////////////////////
NS_IMETHODIMP nsMsgProtocol::IsPending(PRBool *result)
{
*result = PR_TRUE;
return NS_OK;
}
NS_IMETHODIMP nsMsgProtocol::Cancel()
{
return NS_ERROR_NOT_IMPLEMENTED;
}
NS_IMETHODIMP nsMsgProtocol::Suspend()
{
return NS_ERROR_NOT_IMPLEMENTED;
}
NS_IMETHODIMP nsMsgProtocol::Resume()
{
return NS_ERROR_NOT_IMPLEMENTED;
}

View File

@@ -1,108 +0,0 @@
/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*-
*
* The contents of this file are subject to the Netscape Public License
* Version 1.0 (the "NPL"); you may not use this file except in
* compliance with the NPL. You may obtain a copy of the NPL at
* http://www.mozilla.org/NPL/
*
* Software distributed under the NPL is distributed on an "AS IS" basis,
* WITHOUT WARRANTY OF ANY KIND, either express or implied. See the NPL
* for the specific language governing rights and limitations under the
* NPL.
*
* The Initial Developer of this code under the NPL is Netscape
* Communications Corporation. Portions created by Netscape are
* Copyright (C) 1998 Netscape Communications Corporation. All Rights
* Reserved.
*/
#ifndef nsMsgProtocol_h__
#define nsMsgProtocol_h__
#include "nsIStreamListener.h"
#include "nsIInputStream.h"
#include "nsIOutputStream.h"
#include "nsIEventQueue.h"
#include "nsIChannel.h"
#include "nsIURL.h"
#include "nsILoadGroup.h"
#include "nsCOMPtr.h"
// This is a helper class used to encapsulate code shared between all of the
// mailnews protocol objects (imap, news, pop, smtp, etc.) In particular,
// it unifies the core networking code for the protocols. My hope is that
// this will make unification with Necko easier as we'll only have to change
// this class and not all of the mailnews protocols.
class NS_MSG_BASE nsMsgProtocol : public nsIStreamListener, public nsIChannel
{
public:
nsMsgProtocol();
virtual ~nsMsgProtocol();
NS_DECL_ISUPPORTS
// nsIChannel support
NS_DECL_NSICHANNEL
NS_DECL_NSIREQUEST
NS_DECL_NSISTREAMLISTENER
NS_DECL_NSISTREAMOBSERVER
// LoadUrl -- A protocol typically overrides this function, sets up any local state for the url and
// then calls the base class which opens the socket if it needs opened. If the socket is
// already opened then we just call ProcessProtocolState to start the churning process.
// aConsumer is the consumer for the url. It can be null if this argument is not appropriate
virtual nsresult LoadUrl(nsIURI * aURL, nsISupports * aConsumer = nsnull);
virtual nsresult SetUrl(nsIURI * aURL); // sometimes we want to set the url before we load it
virtual nsresult SetLoadGroup(nsILoadGroup * aLoadGroup);
// Flag manipulators
PRBool TestFlag (PRUint32 flag) {return flag & m_flags;}
void SetFlag (PRUint32 flag) { m_flags |= flag; }
void ClearFlag (PRUint32 flag) { m_flags &= ~flag; }
protected:
// methods for opening and closing a socket with core netlib....
// mscott -okay this is lame. I should break this up into a file protocol and a socket based
// protocool class instead of cheating and putting both methods here...
virtual nsresult OpenNetworkSocket(nsIURI * aURL); // open a connection on this url
virtual nsresult OpenFileSocket(nsIURI * aURL, const nsFileSpec * aFileSpec, PRUint32 aStartPosition, PRInt32 aReadCount); // used to open a file socket connection
// a Protocol typically overrides this method. They free any of their own connection state and then
// they call up into the base class to free the generic connection objects
virtual nsresult CloseSocket();
virtual nsresult SetupTransportState(); // private method used by OpenNetworkSocket and OpenFileSocket
// ProcessProtocolState - This is the function that gets churned by calls to OnDataAvailable.
// As data arrives on the socket, OnDataAvailable calls ProcessProtocolState.
virtual nsresult ProcessProtocolState(nsIURI * url, nsIInputStream * inputStream,
PRUint32 sourceOffset, PRUint32 length) = 0;
// SendData -- Writes the data contained in dataBuffer into the current output stream.
// It also informs the transport layer that this data is now available for transmission.
// Returns a positive number for success, 0 for failure (not all the bytes were written to the
// stream, etc).
virtual PRInt32 SendData(nsIURI * aURL, const char * dataBuffer);
// Ouput stream for writing commands to the socket
nsCOMPtr<nsIChannel> m_channel;
nsCOMPtr<nsIOutputStream> m_outputStream; // this will be obtained from the transport interface
PRBool m_socketIsOpen; // mscott: we should look into keeping this state in the nsSocketTransport...
// I'm using it to make sure I open the socket the first time a URL is loaded into the connection
PRUint32 m_flags; // used to store flag information
PRUint32 m_startPosition;
PRInt32 m_readCount;
nsFileSpec m_tempMsgFileSpec; // we currently have a hack where displaying a msg involves writing it to a temp file first
// the following is a catch all for nsIChannel related data
nsCOMPtr<nsIURI> m_url; // the running url
nsCOMPtr<nsIStreamListener> m_channelListener;
nsCOMPtr<nsISupports> m_channelContext;
nsCOMPtr<nsILoadGroup> m_loadGroup;
};
#endif /* nsMsgProtocol_h__ */

View File

@@ -1,99 +0,0 @@
/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*-
*
* The contents of this file are subject to the Netscape Public License
* Version 1.0 (the "NPL"); you may not use this file except in
* compliance with the NPL. You may obtain a copy of the NPL at
* http://www.mozilla.org/NPL/
*
* Software distributed under the NPL is distributed on an "AS IS" basis,
* WITHOUT WARRANTY OF ANY KIND, either express or implied. See the NPL
* for the specific language governing rights and limitations under the
* NPL.
*
* The Initial Developer of this code under the NPL is Netscape
* Communications Corporation. Portions created by Netscape are
* Copyright (C) 1998, 1999 Netscape Communications Corporation. All Rights
* Reserved.
*/
#include "nsMsgTxn.h"
static NS_DEFINE_IID(kISupportsIID, NS_ISUPPORTS_IID);
static NS_DEFINE_IID(kITransactionIID, NS_ITRANSACTION_IID);
NS_IMPL_ADDREF(nsMsgTxn)
NS_IMPL_RELEASE(nsMsgTxn)
// note that aEditor is not refcounted
nsMsgTxn::nsMsgTxn()
{
NS_INIT_REFCNT();
}
nsMsgTxn::~nsMsgTxn()
{
}
NS_IMETHODIMP nsMsgTxn::Do(void)
{
return NS_OK;
}
NS_IMETHODIMP nsMsgTxn::GetIsTransient(PRBool *aIsTransient)
{
if (nsnull!=aIsTransient)
*aIsTransient = PR_FALSE;
else
return NS_ERROR_NULL_POINTER;
return NS_OK;
}
NS_IMETHODIMP nsMsgTxn::Merge(PRBool *aDidMerge, nsITransaction *aTransaction)
{
return NS_ERROR_NOT_IMPLEMENTED;
}
NS_IMETHODIMP nsMsgTxn::Write(nsIOutputStream *aOutputStream)
{
return NS_ERROR_NOT_IMPLEMENTED;
}
NS_IMETHODIMP nsMsgTxn::GetUndoString(nsString *aString)
{
if (nsnull!=aString)
*aString="Undo";
else
return NS_ERROR_NULL_POINTER;
return NS_OK;
}
NS_IMETHODIMP nsMsgTxn::GetRedoString(nsString *aString)
{
if (nsnull!=aString)
*aString="Redo";
else
return NS_ERROR_NULL_POINTER;
return NS_OK;
}
NS_IMETHODIMP
nsMsgTxn::QueryInterface(REFNSIID aIID, void** aInstancePtr)
{
if (NULL == aInstancePtr) {
return NS_ERROR_NULL_POINTER;
}
if (aIID.Equals(kISupportsIID)) {
*aInstancePtr = (void*)(nsISupports*)this;
NS_ADDREF_THIS();
return NS_OK;
}
if (aIID.Equals(kITransactionIID)) {
*aInstancePtr = (void*)(nsITransaction*)this;
NS_ADDREF_THIS();
return NS_OK;
}
*aInstancePtr = 0;
return NS_NOINTERFACE;
}

View File

@@ -1,57 +0,0 @@
/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*-
*
* The contents of this file are subject to the Netscape Public License
* Version 1.0 (the "NPL"); you may not use this file except in
* compliance with the NPL. You may obtain a copy of the NPL at
* http://www.mozilla.org/NPL/
*
* Software distributed under the NPL is distributed on an "AS IS" basis,
* WITHOUT WARRANTY OF ANY KIND, either express or implied. See the NPL
* for the specific language governing rights and limitations under the
* NPL.
*
* The Initial Developer of this code under the NPL is Netscape
* Communications Corporation. Portions created by Netscape are
* Copyright (C) 1998, 1999 Netscape Communications Corporation. All Rights
* Reserved.
*/
#ifndef nsMsgTxn_h__
#define nsMsgTxn_h__
#include "nsITransaction.h"
#include "msgCore.h"
#define NS_MESSAGETRANSACTION_IID \
{ /* da621b30-1efc-11d3-abe4-00805f8ac968 */ \
0xda621b30, 0x1efc, 0x11d3, \
{ 0xab, 0xe4, 0x00, 0x80, 0x5f, 0x8a, 0xc9, 0x68 } }
/**
* base class for all message undo/redo transactions.
*/
class NS_MSG_BASE nsMsgTxn : public nsITransaction
{
NS_DECL_ISUPPORTS
nsMsgTxn();
virtual ~nsMsgTxn();
NS_IMETHOD Do(void);
NS_IMETHOD Undo(void) = 0;
NS_IMETHOD Redo(void) = 0;
NS_IMETHOD GetIsTransient(PRBool *aIsTransient);
NS_IMETHOD Merge(PRBool *aDidMerge, nsITransaction *aTransaction);
NS_IMETHOD Write(nsIOutputStream *aOutputStream);
NS_IMETHOD GetUndoString(nsString *aString);
NS_IMETHOD GetRedoString(nsString *aString);
};
#endif

View File

@@ -1,326 +0,0 @@
/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*-
*
* The contents of this file are subject to the Netscape Public License
* Version 1.0 (the "NPL"); you may not use this file except in
* compliance with the NPL. You may obtain a copy of the NPL at
* http://www.mozilla.org/NPL/
*
* Software distributed under the NPL is distributed on an "AS IS" basis,
* WITHOUT WARRANTY OF ANY KIND, either express or implied. See the NPL
* for the specific language governing rights and limitations under the
* NPL.
*
* The Initial Developer of this code under the NPL is Netscape
* Communications Corporation. Portions created by Netscape are
* Copyright (C) 1999 Netscape Communications Corporation. All Rights
* Reserved.
*/
#include "msgCore.h"
#include "nsIMessage.h"
#include "nsIMsgHdr.h"
#include "nsMsgUtils.h"
#include "nsString.h"
#include "nsFileSpec.h"
#include "nsIServiceManager.h"
#include "nsCOMPtr.h"
#include "nsString.h"
#include "nsIImapUrl.h"
#include "nsIMailboxUrl.h"
#include "nsINntpUrl.h"
#include "nsMsgNewsCID.h"
#include "nsMsgLocalCID.h"
#include "nsMsgBaseCID.h"
#include "nsMsgImapCID.h"
static NS_DEFINE_CID(kImapUrlCID, NS_IMAPURL_CID);
static NS_DEFINE_CID(kCMailboxUrl, NS_MAILBOXURL_CID);
static NS_DEFINE_CID(kCNntpUrlCID, NS_NNTPURL_CID);
#if defined(DEBUG_sspitzer_) || defined(DEBUG_seth_)
#define DEBUG_NS_MsgHashIfNecessary 1
#endif
nsresult GetMessageServiceProgIDForURI(const char *uri, nsString &progID)
{
nsresult rv = NS_OK;
//Find protocol
nsString uriStr = uri;
PRInt32 pos = uriStr.FindChar(':');
if(pos == -1)
return NS_ERROR_FAILURE;
nsString protocol;
uriStr.Left(protocol, pos);
//Build message service progid
progID = "component://netscape/messenger/messageservice;type=";
progID += protocol;
return rv;
}
nsresult GetMessageServiceFromURI(const char *uri, nsIMsgMessageService **messageService)
{
nsAutoString progID;
nsresult rv;
rv = GetMessageServiceProgIDForURI(uri, progID);
if(NS_SUCCEEDED(rv))
{
rv = nsServiceManager::GetService((const char *) nsCAutoString(progID), nsCOMTypeInfo<nsIMsgMessageService>::GetIID(),
(nsISupports**)messageService, nsnull);
}
return rv;
}
nsresult ReleaseMessageServiceFromURI(const char *uri, nsIMsgMessageService *messageService)
{
nsAutoString progID;
nsresult rv;
rv = GetMessageServiceProgIDForURI(uri, progID);
if(NS_SUCCEEDED(rv))
rv = nsServiceManager::ReleaseService(nsCAutoString(progID), messageService);
return rv;
}
nsresult CreateStartupUrl(char *uri, nsIURI** aUrl)
{
nsresult rv = NS_ERROR_NULL_POINTER;
if (!uri || !*uri || !aUrl) return rv;
*aUrl = nsnull;
if (PL_strncasecmp(uri, "imap", 4) == 0)
{
nsCOMPtr<nsIImapUrl> imapUrl;
rv = nsComponentManager::CreateInstance(kImapUrlCID, nsnull,
nsIImapUrl::GetIID(),
getter_AddRefs(imapUrl));
if (NS_SUCCEEDED(rv) && imapUrl)
rv = imapUrl->QueryInterface(nsCOMTypeInfo<nsIURI>::GetIID(),
(void**) aUrl);
}
else if (PL_strncasecmp(uri, "mailbox", 7) == 0)
{
nsCOMPtr<nsIMailboxUrl> mailboxUrl;
rv = nsComponentManager::CreateInstance(kCMailboxUrl, nsnull,
nsIMailboxUrl::GetIID(),
getter_AddRefs(mailboxUrl));
if (NS_SUCCEEDED(rv) && mailboxUrl)
rv = mailboxUrl->QueryInterface(nsCOMTypeInfo<nsIURI>::GetIID(),
(void**) aUrl);
}
else if (PL_strncasecmp(uri, "news", 4) == 0)
{
nsCOMPtr<nsINntpUrl> nntpUrl;
rv = nsComponentManager::CreateInstance(kCNntpUrlCID, nsnull,
nsINntpUrl::GetIID(),
getter_AddRefs(nntpUrl));
if (NS_SUCCEEDED(rv) && nntpUrl)
rv = nntpUrl->QueryInterface(nsCOMTypeInfo<nsIURI>::GetIID(),
(void**) aUrl);
}
if (*aUrl)
(*aUrl)->SetSpec(uri);
return rv;
}
NS_IMPL_ISUPPORTS(nsMessageFromMsgHdrEnumerator, nsCOMTypeInfo<nsISimpleEnumerator>::GetIID())
nsMessageFromMsgHdrEnumerator::nsMessageFromMsgHdrEnumerator(nsISimpleEnumerator *srcEnumerator,
nsIMsgFolder *folder)
{
NS_INIT_REFCNT();
mSrcEnumerator = dont_QueryInterface(srcEnumerator);
mFolder = dont_QueryInterface(folder);
}
nsMessageFromMsgHdrEnumerator::~nsMessageFromMsgHdrEnumerator()
{
//member variables are nsCOMPtr's
}
NS_IMETHODIMP nsMessageFromMsgHdrEnumerator::GetNext(nsISupports **aItem)
{
nsCOMPtr<nsISupports> currentItem;
nsCOMPtr<nsIMsgDBHdr> msgDBHdr;
nsCOMPtr<nsIMessage> message;
nsresult rv;
rv = mSrcEnumerator->GetNext(getter_AddRefs(currentItem));
if(NS_SUCCEEDED(rv))
{
msgDBHdr = do_QueryInterface(currentItem, &rv);
}
if(NS_SUCCEEDED(rv))
{
rv = mFolder->CreateMessageFromMsgDBHdr(msgDBHdr, getter_AddRefs(message));
}
if(NS_SUCCEEDED(rv))
{
currentItem = do_QueryInterface(message, &rv);
*aItem = currentItem;
NS_IF_ADDREF(*aItem);
}
NS_ASSERTION(NS_SUCCEEDED(rv),"getnext shouldn't fail");
return rv;
}
NS_IMETHODIMP nsMessageFromMsgHdrEnumerator::HasMoreElements(PRBool *aResult)
{
return mSrcEnumerator->HasMoreElements(aResult);
}
nsresult NS_NewMessageFromMsgHdrEnumerator(nsISimpleEnumerator *srcEnumerator,
nsIMsgFolder *folder,
nsMessageFromMsgHdrEnumerator **messageEnumerator)
{
if(!messageEnumerator)
return NS_ERROR_NULL_POINTER;
*messageEnumerator = new nsMessageFromMsgHdrEnumerator(srcEnumerator, folder);
if(!messageEnumerator)
return NS_ERROR_OUT_OF_MEMORY;
NS_ADDREF(*messageEnumerator);
return NS_OK;
}
// Where should this live? It's a utility used to convert a string priority, e.g., "High, Low, Normal" to an enum.
// Perhaps we should have an interface that groups together all these utilities...
nsresult NS_MsgGetPriorityFromString(const char *priority, nsMsgPriority *outPriority)
{
if (!outPriority)
return NS_ERROR_NULL_POINTER;
nsMsgPriority retPriority = nsMsgPriorityNormal;
if (PL_strcasestr(priority, "Normal") != NULL)
retPriority = nsMsgPriorityNormal;
else if (PL_strcasestr(priority, "Lowest") != NULL)
retPriority = nsMsgPriorityLowest;
else if (PL_strcasestr(priority, "Highest") != NULL)
retPriority = nsMsgPriorityHighest;
else if (PL_strcasestr(priority, "High") != NULL ||
PL_strcasestr(priority, "Urgent") != NULL)
retPriority = nsMsgPriorityHigh;
else if (PL_strcasestr(priority, "Low") != NULL ||
PL_strcasestr(priority, "Non-urgent") != NULL)
retPriority = nsMsgPriorityLow;
else if (PL_strcasestr(priority, "1") != NULL)
retPriority = nsMsgPriorityHighest;
else if (PL_strcasestr(priority, "2") != NULL)
retPriority = nsMsgPriorityHigh;
else if (PL_strcasestr(priority, "3") != NULL)
retPriority = nsMsgPriorityNormal;
else if (PL_strcasestr(priority, "4") != NULL)
retPriority = nsMsgPriorityLow;
else if (PL_strcasestr(priority, "5") != NULL)
retPriority = nsMsgPriorityLowest;
else
retPriority = nsMsgPriorityNormal;
*outPriority = retPriority;
return NS_OK;
//return nsMsgNoPriority;
}
nsresult NS_MsgGetUntranslatedPriorityName (nsMsgPriority p, nsString *outName)
{
if (!outName)
return NS_ERROR_NULL_POINTER;
switch (p)
{
case nsMsgPriorityNotSet:
case nsMsgPriorityNone:
*outName = "None";
break;
case nsMsgPriorityLowest:
*outName = "Lowest";
break;
case nsMsgPriorityLow:
*outName = "Low";
break;
case nsMsgPriorityNormal:
*outName = "Normal";
break;
case nsMsgPriorityHigh:
*outName = "High";
break;
case nsMsgPriorityHighest:
*outName = "Highest";
break;
default:
NS_ASSERTION(PR_FALSE, "invalid priority value");
}
return NS_OK;
}
/* this used to be XP_StringHash2 from xp_hash.c */
/* phong's linear congruential hash */
static PRUint32 StringHash(const char *ubuf)
{
unsigned char * buf = (unsigned char*) ubuf;
PRUint32 h=1;
while(*buf) {
h = 0x63c63cd9*h + 0x9c39c33d + (int32)*buf;
buf++;
}
return h;
}
nsresult NS_MsgHashIfNecessary(nsCAutoString &name)
{
#if defined(XP_WIN16) || defined(XP_OS2)
const PRUint32 MAX_LEN = 8;
#elif defined(XP_MAC)
const PRUint32 MAX_LEN = 25;
#elif defined(XP_UNIX) || defined(XP_PC) || defined(XP_BEOS)
const PRUint32 MAX_LEN = 55;
#else
#error need_to_define_your_max_filename_length
#endif
nsCAutoString str(name);
#ifdef DEBUG_NS_MsgHashIfNecessary
printf("in: %s\n",str.GetBuffer());
#endif
// Given a name, use either that name, if it fits on our
// filesystem, or a hashified version of it, if the name is too
// long to fit.
char hashedname[MAX_LEN + 1];
PRBool needshash = PL_strlen(str.GetBuffer()) > MAX_LEN;
#if defined(XP_WIN16) || defined(XP_OS2)
if (!needshash) {
needshash = PL_strchr(str.GetBuffer(), '.') != NULL ||
PL_strchr(str.GetBuffer(), ':') != NULL;
}
#endif
PL_strncpy(hashedname, str.GetBuffer(), MAX_LEN + 1);
if (needshash) {
PR_snprintf(hashedname + MAX_LEN - 8, 9, "%08lx",
(unsigned long) StringHash(str.GetBuffer()));
}
name = hashedname;
#ifdef DEBUG_NS_MsgHashIfNecessary
printf("out: %s\n",hashedname);
#endif
return NS_OK;
}

View File

@@ -1,67 +0,0 @@
/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*-
*
* The contents of this file are subject to the Netscape Public License
* Version 1.0 (the "NPL"); you may not use this file except in
* compliance with the NPL. You may obtain a copy of the NPL at
* http://www.mozilla.org/NPL/
*
* Software distributed under the NPL is distributed on an "AS IS" basis,
* WITHOUT WARRANTY OF ANY KIND, either express or implied. See the NPL
* for the specific language governing rights and limitations under the
* NPL.
*
* The Initial Developer of this code under the NPL is Netscape
* Communications Corporation. Portions created by Netscape are
* Copyright (C) 1999 Netscape Communications Corporation. All Rights
* Reserved.
*/
#ifndef _NSMSGUTILS_H
#define _NSMSGUTILS_H
#include "nsIURL.h"
#include "nsIMsgMessageService.h"
#include "nsString.h"
#include "nsIEnumerator.h"
#include "nsIMsgFolder.h"
#include "msgCore.h"
#include "nsCOMPtr.h"
//These are utility functions that can used throughout the mailnews code
//Utilities for getting a message service.
NS_MSG_BASE nsresult GetMessageServiceProgIDForURI(const char *uri, nsString &progID);
//Use ReleaseMessageServiceFromURI to release the service.
NS_MSG_BASE nsresult GetMessageServiceFromURI(const char *uri, nsIMsgMessageService **messageService);
NS_MSG_BASE nsresult ReleaseMessageServiceFromURI(const char *uri, nsIMsgMessageService *messageService);
NS_MSG_BASE nsresult CreateStartupUrl(char *uri, nsIURI** aUrl);
//An enumerator for converting nsIMsgHdrs to nsIMessages.
class NS_MSG_BASE nsMessageFromMsgHdrEnumerator: public nsISimpleEnumerator
{
protected:
nsCOMPtr<nsISimpleEnumerator> mSrcEnumerator;
nsCOMPtr<nsIMsgFolder> mFolder;
public:
NS_DECL_ISUPPORTS
nsMessageFromMsgHdrEnumerator(nsISimpleEnumerator *srcEnumerator, nsIMsgFolder *folder);
nsMessageFromMsgHdrEnumerator(){} //Default constructor that does nothing so nsComPtr will work.
virtual ~nsMessageFromMsgHdrEnumerator();
NS_DECL_NSISIMPLEENUMERATOR
};
NS_MSG_BASE nsresult NS_NewMessageFromMsgHdrEnumerator(nsISimpleEnumerator *srcEnumerator,
nsIMsgFolder *folder,
nsMessageFromMsgHdrEnumerator **messageEnumerator);
NS_MSG_BASE nsresult NS_MsgGetPriorityFromString(const char *priority, nsMsgPriority *outPriority);
NS_MSG_BASE nsresult NS_MsgGetUntranslatedPriorityName (nsMsgPriority p, nsString *outName);
NS_MSG_BASE nsresult NS_MsgHashIfNecessary(nsCAutoString &name);
#endif

View File

@@ -1,71 +0,0 @@
/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*-
*
* The contents of this file are subject to the Netscape Public License
* Version 1.0 (the "NPL"); you may not use this file except in
* compliance with the NPL. You may obtain a copy of the NPL at
* http://www.mozilla.org/NPL/
*
* Software distributed under the NPL is distributed on an "AS IS" basis,
* WITHOUT WARRANTY OF ANY KIND, either express or implied. See the NPL
* for the specific language governing rights and limitations under the
* NPL.
*
* The Initial Developer of this code under the NPL is Netscape
* Communications Corporation. Portions created by Netscape are
* Copyright (C) 1999 Netscape Communications Corporation. All Rights
* Reserved.
*/
#include "nsNewsSummarySpec.h"
#include "plstr.h"
#include "nsString.h"
MOZ_DECL_CTOR_COUNTER(nsNewsSummarySpec);
nsNewsSummarySpec::~nsNewsSummarySpec()
{
MOZ_COUNT_DTOR(nsNewsSummarySpec);
}
nsNewsSummarySpec::nsNewsSummarySpec()
{
MOZ_COUNT_CTOR(nsNewsSummarySpec);
}
nsNewsSummarySpec::nsNewsSummarySpec(const char *folderPath)
: nsFileSpec(folderPath)
{
MOZ_COUNT_CTOR(nsNewsSummarySpec);
CreateSummaryFileName();
}
nsNewsSummarySpec::nsNewsSummarySpec(const nsFileSpec& inFolderPath)
: nsFileSpec(inFolderPath)
{
MOZ_COUNT_CTOR(nsNewsSummarySpec);
CreateSummaryFileName();
}
nsNewsSummarySpec::nsNewsSummarySpec(const nsFilePath &inFolderPath) : nsFileSpec(inFolderPath)
{
MOZ_COUNT_CTOR(nsNewsSummarySpec);
CreateSummaryFileName();
}
void nsNewsSummarySpec::SetFolderName(const char *folderPath)
{
*this = folderPath;
}
void nsNewsSummarySpec::CreateSummaryFileName()
{
char *leafName = GetLeafName();
nsCAutoString fullLeafName((const char*)leafName);
// Append .msf (message summary file)
fullLeafName += ".msf";
SetLeafName(fullLeafName.GetBuffer());
PL_strfree(leafName);
}

View File

@@ -1,45 +0,0 @@
/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*-
*
* The contents of this file are subject to the Netscape Public License
* Version 1.0 (the "NPL"); you may not use this file except in
* compliance with the NPL. You may obtain a copy of the NPL at
* http://www.mozilla.org/NPL/
*
* Software distributed under the NPL is distributed on an "AS IS" basis,
* WITHOUT WARRANTY OF ANY KIND, either express or implied. See the NPL
* for the specific language governing rights and limitations under the
* NPL.
*
* The Initial Developer of this code under the NPL is Netscape
* Communications Corporation. Portions created by Netscape are
* Copyright (C) 1999 Netscape Communications Corporation. All Rights
* Reserved.
*/
#ifndef _nsNewsSummarySpec_H
#define _nsNewsSummarySpec_H
#include "nsFileSpec.h"
#include "msgCore.h"
// Class to name a summary file for a newsgroup,
// given a full folder file spec.
// Note this class expects the invoking code to fully specify the folder path.
// This class does NOT prepend the local folder directory, or put .sbd on the containing
// directory names.
class NS_MSG_BASE nsNewsSummarySpec : public nsFileSpec
{
public:
nsNewsSummarySpec();
nsNewsSummarySpec(const char *folderPath);
nsNewsSummarySpec(const nsFileSpec& inFolderPath);
nsNewsSummarySpec(const nsFilePath &inFolderPath);
~nsNewsSummarySpec();
void SetFolderName(const char *folderPath);
protected:
void CreateSummaryFileName();
};
#endif /* _nsNewsSummarySpec_H */

View File

@@ -1,277 +0,0 @@
/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*-
*
* The contents of this file are subject to the Netscape Public License
* Version 1.0 (the "NPL"); you may not use this file except in
* compliance with the NPL. You may obtain a copy of the NPL at
* http://www.mozilla.org/NPL/
*
* Software distributed under the NPL is distributed on an "AS IS" basis,
* WITHOUT WARRANTY OF ANY KIND, either express or implied. See the NPL
* for the specific language governing rights and limitations under the
* NPL.
*
* The Initial Developer of this code under the NPL is Netscape
* Communications Corporation. Portions created by Netscape are
* Copyright (C) 1998 Netscape Communications Corporation. All Rights
* Reserved.
*/
#include "msgCore.h" // precompiled header...
#include "prlog.h"
#include "MailNewsTypes.h"
#include "nsUInt32Array.h"
#include "nsQuickSort.h"
MOZ_DECL_CTOR_COUNTER(nsUInt32Array);
nsUInt32Array::nsUInt32Array()
{
MOZ_COUNT_CTOR(nsUInt32Array);
m_nSize = 0;
m_nMaxSize = 0;
m_nGrowBy = 0;
m_pData = NULL;
}
nsUInt32Array::~nsUInt32Array()
{
MOZ_COUNT_DTOR(nsUInt32Array);
SetSize(0);
}
/////////////////////////////////////////////////////////////////////////////
PRUint32 nsUInt32Array::GetSize() const
{
return m_nSize;
}
PRBool nsUInt32Array::SetSize(PRUint32 nSize,
PRBool adjustGrowth,
PRUint32 nGrowBy)
{
if (adjustGrowth)
m_nGrowBy = nGrowBy;
#ifdef MAX_ARR_ELEMS
if (nSize > MAX_ARR_ELEMS);
{
PR_ASSERT(nSize <= MAX_ARR_ELEMS); // Will fail
return PR_FALSE;
}
#endif
if (nSize == 0)
{
// Remove all elements
PR_Free(m_pData);
m_nSize = 0;
m_nMaxSize = 0;
m_pData = NULL;
}
else if (m_pData == NULL)
{
// Create a new array
m_nMaxSize = PR_MAX(8, nSize);
m_pData = (PRUint32 *)PR_Calloc(1, m_nMaxSize * sizeof(PRUint32));
if (m_pData)
m_nSize = nSize;
else
m_nSize = m_nMaxSize = 0;
}
else if (nSize <= m_nMaxSize)
{
// The new size is within the current maximum size, make sure new
// elements are to initialized to zero
if (nSize > m_nSize)
nsCRT::memset(&m_pData[m_nSize], 0, (nSize - m_nSize) * sizeof(PRUint32));
m_nSize = nSize;
}
else
{
// The array needs to grow, figure out how much
PRUint32 nMaxSize;
nGrowBy = PR_MAX(m_nGrowBy, PR_MIN(1024, PR_MAX(8, m_nSize / 8)));
nMaxSize = PR_MAX(nSize, m_nMaxSize + nGrowBy);
#ifdef MAX_ARR_ELEMS
nMaxSize = PR_MIN(MAX_ARR_ELEMS, nMaxSize);
#endif
PRUint32 *pNewData = (PRUint32 *)PR_Malloc(nMaxSize * sizeof(PRUint32));
if (pNewData)
{
// Copy the data from the old array to the new one
nsCRT::memcpy(pNewData, m_pData, m_nSize * sizeof(PRUint32));
// Zero out the remaining elements
nsCRT::memset(&pNewData[m_nSize], 0, (nSize - m_nSize) * sizeof(PRUint32));
m_nSize = nSize;
m_nMaxSize = nMaxSize;
// Free the old array
PR_Free(m_pData);
m_pData = pNewData;
}
}
return nSize == m_nSize;
}
/////////////////////////////////////////////////////////////////////////////
PRUint32 &nsUInt32Array::ElementAt(PRUint32 nIndex)
{
PR_ASSERT(nIndex < m_nSize);
return m_pData[nIndex];
}
PRUint32 nsUInt32Array::GetAt(PRUint32 nIndex) const
{
PR_ASSERT(nIndex < m_nSize);
return m_pData[nIndex];
}
PRUint32 *nsUInt32Array::GetData()
{
return m_pData;
}
void nsUInt32Array::SetAt(PRUint32 nIndex, PRUint32 newElement)
{
PR_ASSERT(nIndex < m_nSize);
m_pData[nIndex] = newElement;
}
/////////////////////////////////////////////////////////////////////////////
PRUint32 nsUInt32Array::Add(PRUint32 newElement)
{
PRUint32 nIndex = m_nSize;
#ifdef MAX_ARR_ELEMS
if (nIndex >= MAX_ARR_ELEMS)
return -1;
#endif
SetAtGrow(nIndex, newElement);
return nIndex;
}
PRUint32 nsUInt32Array::Add(PRUint32 *elementPtr, PRUint32 numElements)
{
if (SetSize(m_nSize + numElements))
nsCRT::memcpy(m_pData + m_nSize, elementPtr, numElements * sizeof(PRUint32));
return m_nSize;
}
PRUint32 *nsUInt32Array::CloneData()
{
PRUint32 *copyOfData = (PRUint32 *)PR_Malloc(m_nSize * sizeof(PRUint32));
if (copyOfData)
nsCRT::memcpy(copyOfData, m_pData, m_nSize * sizeof(PRUint32));
return copyOfData;
}
void nsUInt32Array::InsertAt(PRUint32 nIndex, PRUint32 newElement, PRUint32 nCount)
{
PR_ASSERT(nCount > 0);
if (nIndex >= m_nSize)
{
// If the new element is after the end of the array, grow the array
SetSize(nIndex + nCount);
}
else
{
// The element is being insert inside the array
int nOldSize = m_nSize;
SetSize(m_nSize + nCount);
// Move the data after the insertion point
nsCRT::memmove(&m_pData[nIndex + nCount], &m_pData[nIndex],
(nOldSize - nIndex) * sizeof(PRUint32));
}
// Insert the new elements
PR_ASSERT(nIndex + nCount <= m_nSize);
while (nCount--)
m_pData[nIndex++] = newElement;
}
void nsUInt32Array::InsertAt(PRUint32 nStartIndex, const nsUInt32Array *pNewArray)
{
PR_ASSERT(pNewArray != NULL);
if (pNewArray->GetSize() > 0)
{
InsertAt(nStartIndex, pNewArray->GetAt(0), pNewArray->GetSize());
for (PRUint32 i = 1; i < pNewArray->GetSize(); i++)
m_pData[nStartIndex + i] = pNewArray->GetAt(i);
}
}
void nsUInt32Array::RemoveAll()
{
SetSize(0);
}
void nsUInt32Array::RemoveAt(PRUint32 nIndex, PRUint32 nCount)
{
PR_ASSERT(nIndex + nCount <= m_nSize);
if (nCount > 0)
{
// Make sure not to overstep the end of the array
int nMoveCount = m_nSize - (nIndex + nCount);
if (nCount && nMoveCount)
nsCRT::memmove(&m_pData[nIndex], &m_pData[nIndex + nCount],
nMoveCount * sizeof(PRUint32));
m_nSize -= nCount;
}
}
void nsUInt32Array::SetAtGrow(PRUint32 nIndex, PRUint32 newElement)
{
if (nIndex >= m_nSize)
SetSize(nIndex+1);
m_pData[nIndex] = newElement;
}
/////////////////////////////////////////////////////////////////////////////
void nsUInt32Array::CopyArray(nsUInt32Array *oldA)
{
CopyArray(*oldA);
}
void nsUInt32Array::CopyArray(nsUInt32Array &oldA)
{
if (m_pData)
PR_Free(m_pData);
m_nSize = oldA.m_nSize;
m_nMaxSize = oldA.m_nMaxSize;
m_pData = (PRUint32 *)PR_Malloc(m_nSize * sizeof(PRUint32));
if (m_pData)
nsCRT::memcpy(m_pData, oldA.m_pData, m_nSize * sizeof(PRUint32));
}
/////////////////////////////////////////////////////////////////////////////
static int CompareDWord (const void *v1, const void *v2, void *)
{
// QuickSort callback to compare array values
PRUint32 i1 = *(PRUint32 *)v1;
PRUint32 i2 = *(PRUint32 *)v2;
return i1 - i2;
}
void nsUInt32Array::QuickSort (int (*compare) (const void *elem1, const void *elem2, void *data))
{
if (m_nSize > 1)
NS_QuickSort(m_pData, m_nSize, sizeof(void*), compare ? compare : CompareDWord, nsnull);
}

View File

@@ -1,73 +0,0 @@
/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*-
*
* The contents of this file are subject to the Netscape Public License
* Version 1.0 (the "NPL"); you may not use this file except in
* compliance with the NPL. You may obtain a copy of the NPL at
* http://www.mozilla.org/NPL/
*
* Software distributed under the NPL is distributed on an "AS IS" basis,
* WITHOUT WARRANTY OF ANY KIND, either express or implied. See the NPL
* for the specific language governing rights and limitations under the
* NPL.
*
* The Initial Developer of this code under the NPL is Netscape
* Communications Corporation. Portions created by Netscape are
* Copyright (C) 1998 Netscape Communications Corporation. All Rights
* Reserved.
*/
#ifndef _nsUInt32Array_H_
#define _nsUInt32Array_H_
#include "nscore.h"
#include "nsCRT.h"
#include "prmem.h"
#include "msgCore.h"
class NS_MSG_BASE nsUInt32Array
{
public:
// Construction/destruction
nsUInt32Array();
virtual ~nsUInt32Array();
// State/attribute member functions
PRUint32 GetSize() const;
PRBool SetSize(PRUint32 nNewSize, PRBool AdjustGrowth=PR_FALSE, PRUint32 nGrowBy = 0);
// Accessor member functions
PRUint32 &ElementAt(PRUint32 nIndex);
PRUint32 GetAt(PRUint32 nIndex) const;
PRUint32 *GetData();
void SetAt(PRUint32 nIndex, PRUint32 newElement);
// Insertion/deletion member functions
PRUint32 Add(PRUint32 newElement);
PRUint32 Add(PRUint32 *elementPtr, PRUint32 numElements);
void InsertAt(PRUint32 nIndex, PRUint32 newElement, PRUint32 nCount = 1);
void InsertAt(PRUint32 nStartIndex, const nsUInt32Array *pNewArray);
void RemoveAll();
void RemoveAt(PRUint32 nIndex, PRUint32 nCount = 1);
void SetAtGrow(PRUint32 nIndex, PRUint32 newElement);
// Sorting member functions
void QuickSort(int (*compare) (const void *elem1, const void *elem2, void *) = NULL);
// Overloaded operators
PRUint32 operator[](PRUint32 nIndex) const { return GetAt(nIndex); }
PRUint32 &operator[](PRUint32 nIndex) { return ElementAt(nIndex); }
// Miscellaneous member functions
PRUint32 *CloneData();
void CopyArray(nsUInt32Array *oldA);
void CopyArray(nsUInt32Array &oldA);
protected:
// Member data
PRUint32 m_nSize;
PRUint32 m_nMaxSize;
PRUint32 m_nGrowBy;
PRUint32* m_pData;
};
#endif // _DWordArray_H_

View File

@@ -0,0 +1,197 @@
#
# The contents of this file are subject to the Netscape Public
# License Version 1.1 (the "License"); you may not use this file
# except in compliance with the License. You may obtain a copy of
# the License at http://www.mozilla.org/NPL/
#
# Software distributed under the License is distributed on an "AS
# IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or
# implied. See the License for the specific language governing
# rights and limitations under the License.
#
# The Original Code is mozilla.org code.
#
# The Initial Developer of the Original Code is Netscape
# Communications Corporation. Portions created by Netscape are
# Copyright (C) 1998 Netscape Communications Corporation. All
# Rights Reserved.
#
# Contributor(s):
#
DEPTH = ../../..
topsrcdir = @top_srcdir@
srcdir = @srcdir@
VPATH = @srcdir@
include $(DEPTH)/config/autoconf.mk
DIRS = public
PROGRAM = viewer
CPPSRCS = \
$(TOOLKIT_CPPSRCS) \
nsBaseDialog.cpp \
nsFindDialog.cpp \
nsXPBaseWindow.cpp \
nsTableInspectorDialog.cpp \
nsImageInspectorDialog.cpp \
nsPrintSetupDialog.cpp \
nsBrowserWindow.cpp \
nsEditorMode.cpp \
nsSetupRegistry.cpp \
nsThrobber.cpp \
nsViewerApp.cpp \
nsWebCrawler.cpp \
$(NULL)
EXPORT_RESOURCE_SAMPLES := \
$(wildcard $(srcdir)/samples/test*.html) \
$(wildcard $(srcdir)/samples/toolbarTest*.xul) \
$(wildcard $(srcdir)/samples/treeTest*.xul) \
$(wildcard $(srcdir)/samples/treeTest*.css) \
$(wildcard $(srcdir)/samples/slider*.xul) \
$(wildcard $(srcdir)/samples/scrollbar*.xul) \
$(srcdir)/resources/find.html \
$(srcdir)/resources/printsetup.html \
$(srcdir)/resources/image_props.html \
$(srcdir)/samples/aform.css \
$(srcdir)/samples/bform.css \
$(srcdir)/samples/cform.css \
$(srcdir)/samples/demoform.css \
$(srcdir)/samples/mozform.css \
$(srcdir)/samples/xulTest.css \
$(srcdir)/samples/Anieyes.gif \
$(srcdir)/samples/gear1.gif \
$(srcdir)/samples/rock_gra.gif \
$(srcdir)/samples/beeptest.html \
$(srcdir)/samples/soundtest.html \
$(srcdir)/samples/bg.jpg \
$(srcdir)/samples/raptor.jpg \
$(srcdir)/samples/test.wav \
$(srcdir)/samples/checkboxTest.xul \
$(NULL)
EXPORT_RESOURCE_THROBBER := $(wildcard $(srcdir)/throbber/anim*.gif)
ifeq (,$(filter beos os2 rhapsody photon,$(MOZ_WIDGET_TOOLKIT)))
DIRS += unix
UNIX_VIEWER_TK_LIBS = $(DIST)/lib/libviewer_$(MOZ_WIDGET_TOOLKIT)_s.a
else
ifeq ($(MOZ_WIDGET_TOOLKIT),beos)
BEOS_PROGRAM_RESOURCE = $(srcdir)/viewer-beos.rsrc
TOOLKIT_CPPSRCS = nsBeOSMain.cpp
endif
ifeq ($(MOZ_WIDGET_TOOLKIT),photon)
TOOLKIT_CPPSRCS = nsPhMain.cpp nsPhMenu.cpp
endif
endif
ifeq ($(MOZ_WIDGET_TOOLKIT),gtk)
GTK_GLUE = -lgtksuperwin
endif
ifdef MOZ_OJI
JSJ_LIB = -ljsj
endif
XP_DIST_LIBS = \
-lraptorgfx \
-lmozjs \
-lxpcom \
$(JSJ_LIB) \
$(NULL)
XP_NS_UNDERBAR_CRAP = \
$(MOZ_NECKO_UTIL_LIBS) \
$(MOZ_TIMER_LIBS) \
$(MOZ_WIDGET_SUPPORT_LIBS) \
$(NULL)
XP_LIBS = \
$(XP_NS_UNDERBAR_CRAP) \
$(XP_DIST_LIBS) \
$(NSPR_LIBS) \
$(NULL)
ifdef MOZ_FULLCIRCLE
XP_LIBS += $(FULLCIRCLE_LIBS)
endif
LIBS = \
$(UNIX_VIEWER_TK_LIBS) \
$(GTK_GLUE) \
$(XP_LIBS) \
$(TK_LIBS) \
$(NULL)
MOTIF_LIBS = -lviewer_motif_s $(XP_LIBS) $(MOZ_MOTIF_LDFLAGS)
QT_LIBS = -lviewer_qt_s $(XP_LIBS) $(MOZ_QT_LDFLAGS)
XLIB_LIBS = -lviewer_xlib_s $(XP_LIBS) $(MOZ_XLIB_LDFLAGS)
GTK_LIBS = -lviewer_gtk_s -lgtksuperwin $(XP_LIBS) $(MOZ_GTK_LDFLAGS)
EXTRA_DEPS = \
$(addprefix $(DIST)/,$(patsubst -l%,bin/lib%.$(DLL_SUFFIX),$(XP_DIST_LIBS:-l%_s=lib/lib%_s.a))) \
$(UNIX_VIEWER_TK_LIBS) \
$(XP_NS_UNDERBAR_CRAP) \
$(NULL)
include $(topsrcdir)/config/rules.mk
CXXFLAGS += $(MOZ_TOOLKIT_REGISTRY_CFLAGS)
install:: $(PROGRAM) $(srcdir)/mozilla-viewer.sh
$(INSTALL) $(EXPORT_RESOURCE_SAMPLES) $(DIST)/bin/res/samples
$(INSTALL) $(EXPORT_RESOURCE_THROBBER) $(DIST)/bin/res/throbber
$(INSTALL) $(srcdir)/resources/viewer.properties $(DIST)/bin/res
$(INSTALL) $(srcdir)/mozilla-viewer.sh $(DIST)/bin
$(PROGRAM)_gtk: $(PROGOBJS) $(EXTRA_DEPS) Makefile Makefile.in $(DIST)/lib/libviewer_gtk_s.a
$(CCC) -o $@ $(PROGOBJS) $(LDFLAGS) $(LIBS_DIR) $(GTK_LIBS) $(OS_LIBS)
$(MOZ_POST_PROGRAM_COMMAND) $@
$(PROGRAM)_motif: $(PROGOBJS) $(EXTRA_DEPS) Makefile Makefile.in $(DIST)/lib/libviewer_motif_s.a
$(CCC) -o $@ $(PROGOBJS) $(LDFLAGS) $(LIBS_DIR) $(MOTIF_LIBS) $(OS_LIBS)
$(MOZ_POST_PROGRAM_COMMAND) $@
$(PROGRAM)_qt: $(PROGOBJS) $(EXTRA_DEPS) Makefile Makefile.in $(DIST)/lib/libviewer_qt_s.a
$(CCC) -o $@ $(PROGOBJS) $(LDFLAGS) $(LIBS_DIR) $(QT_LIBS) $(OS_LIBS)
$(MOZ_POST_PROGRAM_COMMAND) $@
$(PROGRAM)_xlib: $(PROGOBJS) $(EXTRA_DEPS) Makefile Makefile.in $(DIST)/lib/libviewer_xlib_s.a
$(CCC) -o $@ $(PROGOBJS) $(LDFLAGS) $(LIBS_DIR) $(XLIB_LIBS) $(OS_LIBS)
$(MOZ_POST_PROGRAM_COMMAND) $@
ifdef MOZ_ENABLE_GTK
install:: $(PROGRAM)_gtk
$(INSTALL) -m 555 $< $(DIST)/bin
clobber::
rm -f $(PROGRAM)_gtk
endif
ifdef MOZ_ENABLE_MOTIF
install:: $(PROGRAM)_motif
$(INSTALL) -m 555 $< $(DIST)/bin
clobber::
rm -f $(PROGRAM)_motif
endif
ifdef MOZ_ENABLE_QT
install:: $(PROGRAM)_qt
$(INSTALL) -m 555 $< $(DIST)/bin
clobber::
rm -f $(PROGRAM)_qt
endif
ifdef MOZ_ENABLE_XLIB
install:: $(PROGRAM)_xlib
$(INSTALL) -m 555 $< $(DIST)/bin
clobber::
rm -f $(PROGRAM)_xlib
endif

View File

@@ -0,0 +1,179 @@
/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*-
*
* The contents of this file are subject to the Netscape Public
* License Version 1.1 (the "License"); you may not use this file
* except in compliance with the License. You may obtain a copy of
* the License at http://www.mozilla.org/NPL/
*
* Software distributed under the License is distributed on an "AS
* IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or
* implied. See the License for the specific language governing
* rights and limitations under the License.
*
* The Original Code is mozilla.org code.
*
* The Initial Developer of the Original Code is Netscape
* Communications Corporation. Portions created by Netscape are
* Copyright (C) 1998 Netscape Communications Corporation. All
* Rights Reserved.
*
* Contributor(s):
*/
#include <gtk/gtk.h>
#include "gdksuperwin.h"
#include "gtkmozbox.h"
#include "nsBrowserWindow.h"
#include "resources.h"
#include "nscore.h"
#include "stdio.h"
typedef GtkItemFactoryCallback GIFC;
void gtk_ifactory_cb (nsBrowserWindow *nbw,
guint callback_action,
GtkWidget *widget)
{
nbw->DispatchMenuItem(callback_action);
}
GtkItemFactoryEntry menu_items[] =
{
{ "/_File", nsnull, nsnull, 0, "<Branch>" },
{ "/File/_New Window", nsnull, (GIFC)gtk_ifactory_cb, VIEWER_WINDOW_OPEN, nsnull },
{ "/File/_Open...", nsnull, (GIFC)gtk_ifactory_cb, VIEWER_FILE_OPEN, nsnull },
{ "/File/_View Source", nsnull, (GIFC)gtk_ifactory_cb, VIEW_SOURCE, nsnull },
{ "/File/_Samples", nsnull, nsnull, 0, "<Branch>" },
{ "/File/Samples/demo #0", nsnull, (GIFC)gtk_ifactory_cb, VIEWER_DEMO0, nsnull },
{ "/File/Samples/demo #1", nsnull, (GIFC)gtk_ifactory_cb, VIEWER_DEMO1, nsnull },
{ "/File/Samples/demo #2", nsnull, (GIFC)gtk_ifactory_cb, VIEWER_DEMO2, nsnull },
{ "/File/Samples/demo #3", nsnull, (GIFC)gtk_ifactory_cb, VIEWER_DEMO3, nsnull },
{ "/File/Samples/demo #4", nsnull, (GIFC)gtk_ifactory_cb, VIEWER_DEMO4, nsnull },
{ "/File/Samples/demo #5", nsnull, (GIFC)gtk_ifactory_cb, VIEWER_DEMO5, nsnull },
{ "/File/Samples/demo #6", nsnull, (GIFC)gtk_ifactory_cb, VIEWER_DEMO6, nsnull },
{ "/File/Samples/demo #7", nsnull, (GIFC)gtk_ifactory_cb, VIEWER_DEMO7, nsnull },
{ "/File/Samples/demo #8", nsnull, (GIFC)gtk_ifactory_cb, VIEWER_DEMO8, nsnull },
{ "/File/Samples/demo #9", nsnull, (GIFC)gtk_ifactory_cb, VIEWER_DEMO9, nsnull },
{ "/File/Samples/demo #10", nsnull, (GIFC)gtk_ifactory_cb, VIEWER_DEMO10, nsnull },
{ "/File/Samples/demo #11", nsnull, (GIFC)gtk_ifactory_cb, VIEWER_DEMO11, nsnull },
{ "/File/Samples/demo #12", nsnull, (GIFC)gtk_ifactory_cb, VIEWER_DEMO12, nsnull },
{ "/File/Samples/demo #13", nsnull, (GIFC)gtk_ifactory_cb, VIEWER_DEMO13, nsnull },
{ "/File/Samples/demo #14", nsnull, (GIFC)gtk_ifactory_cb, VIEWER_DEMO14, nsnull },
{ "/File/Samples/demo #15", nsnull, (GIFC)gtk_ifactory_cb, VIEWER_DEMO15, nsnull },
{ "/File/Samples/demo #16", nsnull, (GIFC)gtk_ifactory_cb, VIEWER_DEMO16, nsnull },
{ "/File/Samples/demo #17", nsnull, (GIFC)gtk_ifactory_cb, VIEWER_DEMO17, nsnull },
{ "/File/_Test Sites", nsnull, (GIFC)gtk_ifactory_cb, VIEWER_TOP100, nsnull },
{ "/File/XPToolkit Tests", nsnull, nsnull, 0, "<Branch>" },
{ "/File/XPToolkit Tests/Toolbar Test 1", nsnull, (GIFC)gtk_ifactory_cb, VIEWER_XPTOOLKITTOOLBAR1, nsnull },
{ "/File/XPToolkit Tests/Tree Test 1", nsnull, (GIFC)gtk_ifactory_cb, VIEWER_XPTOOLKITTREE1, nsnull },
{ "/File/sep1", nsnull, nsnull, 0, "<Separator>" },
{ "/File/Print Preview", nsnull, (GIFC)gtk_ifactory_cb, VIEWER_ONE_COLUMN, nsnull },
{ "/File/Print", nsnull, (GIFC)gtk_ifactory_cb, VIEWER_PRINT, nsnull },
{ "/File/Print Setup", nsnull, (GIFC)gtk_ifactory_cb, VIEWER_PRINT_SETUP, nsnull },
{ "/File/sep2", nsnull, nsnull, 0, "<Separator>" },
{ "/File/_Exit", nsnull, (GIFC)gtk_ifactory_cb, VIEWER_EXIT, nsnull },
{ "/_Edit", nsnull, nsnull, 0, "<Branch>" },
{ "/Edit/Cu_t", nsnull, (GIFC)gtk_ifactory_cb, VIEWER_EDIT_CUT, nsnull },
{ "/Edit/_Copy", nsnull, (GIFC)gtk_ifactory_cb, VIEWER_EDIT_COPY, nsnull },
{ "/Edit/_Paste", nsnull, (GIFC)gtk_ifactory_cb, VIEWER_EDIT_PASTE, nsnull },
{ "/Edit/sep1", nsnull, nsnull, 0, "<Separator>" },
{ "/Edit/Select All", nsnull, (GIFC)gtk_ifactory_cb, VIEWER_EDIT_SELECTALL, nsnull },
{ "/Edit/sep1", nsnull, nsnull, 0, "<Separator>" },
{ "/Edit/Find in Page", nsnull, (GIFC)gtk_ifactory_cb, VIEWER_EDIT_FINDINPAGE, nsnull },
//#ifdef DEBUG // turning off for now
{ "/_Debug", nsnull, nsnull, 0, "<Branch>" },
{ "/Debug/_Visual Debugging", nsnull, (GIFC)gtk_ifactory_cb, VIEWER_VISUAL_DEBUGGING,nsnull },
{ "/Debug/sep1", nsnull, nsnull, 0, "<Separator>" },
{ "/Debug/Event Debugging/Toggle Paint Flashing", nsnull, (GIFC)gtk_ifactory_cb, VIEWER_TOGGLE_PAINT_FLASHING,nsnull },
{ "/Debug/Event Debugging/Toggle Paint Dumping", nsnull, (GIFC)gtk_ifactory_cb, VIEWER_TOGGLE_PAINT_DUMPING,nsnull },
{ "/Debug/Event Debugging/Toggle Invalidate Dumping", nsnull, (GIFC)gtk_ifactory_cb, VIEWER_TOGGLE_INVALIDATE_DUMPING,nsnull },
{ "/Debug/Event Debugging/Toggle Event Dumping", nsnull, (GIFC)gtk_ifactory_cb, VIEWER_TOGGLE_EVENT_DUMPING,nsnull },
{ "/Debug/Event Debugging/sep1", nsnull, nsnull, 0, "<Separator>" },
{ "/Debug/Event Debugging/Toggle Motion Event Dumping", nsnull, (GIFC)gtk_ifactory_cb, VIEWER_TOGGLE_MOTION_EVENT_DUMPING,nsnull },
{ "/Debug/Event Debugging/Toggle Crossing Event Dumping", nsnull, (GIFC)gtk_ifactory_cb, VIEWER_TOGGLE_CROSSING_EVENT_DUMPING,nsnull },
{ "/Debug/sep1", nsnull, nsnull, 0, "<Separator>" },
{ "/Debug/_Reflow Test", nsnull, (GIFC)gtk_ifactory_cb, VIEWER_REFLOW_TEST, nsnull },
{ "/Debug/sep1", nsnull, nsnull, 0, "<Separator>" },
{ "/Debug/Dump _Content", nsnull, (GIFC)gtk_ifactory_cb, VIEWER_DUMP_CONTENT, nsnull },
{ "/Debug/Dump _Frames", nsnull, (GIFC)gtk_ifactory_cb, VIEWER_DUMP_FRAMES, nsnull },
{ "/Debug/Dump _Views", nsnull, (GIFC)gtk_ifactory_cb, VIEWER_DUMP_VIEWS, nsnull },
{ "/Debug/sep1", nsnull, nsnull, 0, "<Separator>" },
{ "/Debug/Dump _Style Sheets", nsnull, (GIFC)gtk_ifactory_cb, VIEWER_DUMP_STYLE_SHEETS, nsnull },
{ "/Debug/Dump _Style Contexts", nsnull, (GIFC)gtk_ifactory_cb, VIEWER_DUMP_STYLE_CONTEXTS, nsnull},
{ "/Debug/sep1", nsnull, nsnull, 0, "<Separator>" },
{ "/Debug/Show Content Size", nsnull, (GIFC)gtk_ifactory_cb, VIEWER_SHOW_CONTENT_SIZE,nsnull },
{ "/Debug/Show Frame Size", nsnull, (GIFC)gtk_ifactory_cb, VIEWER_SHOW_FRAME_SIZE, nsnull },
{ "/Debug/Show Style Size", nsnull, (GIFC)gtk_ifactory_cb, VIEWER_SHOW_STYLE_SIZE, nsnull },
{ "/Debug/sep1", nsnull, nsnull, 0, "<Separator>" },
{ "/Debug/Debug Save", nsnull, (GIFC)gtk_ifactory_cb, VIEWER_DEBUGSAVE, nsnull },
{ "/Debug/Debug Output Text", nsnull, (GIFC)gtk_ifactory_cb, VIEWER_DISPLAYTEXT, nsnull },
{ "/Debug/Debug Output HTML", nsnull, (GIFC)gtk_ifactory_cb, VIEWER_DISPLAYHTML, nsnull },
{ "/Debug/Debug Toggle Selection", nsnull, (GIFC)gtk_ifactory_cb, VIEWER_TOGGLE_SELECTION,nsnull },
{ "/Debug/sep1", nsnull, nsnull, 0, "<Separator>" },
{ "/Debug/Debug Robot", nsnull, (GIFC)gtk_ifactory_cb, VIEWER_DEBUGROBOT, nsnull },
{ "/Debug/sep1", nsnull, nsnull, 0, "<Separator>" },
{ "/Debug/Show Content Quality", nsnull, (GIFC)gtk_ifactory_cb, VIEWER_SHOW_CONTENT_QUALITY, nsnull },
{ "/_Style", nsnull, nsnull, 0, "<Branch>" },
{ "/Style/Select _Style Sheet", nsnull, nsnull, 0, "<Branch>" },
{ "/Style/Select Style Sheet/List Available Sheets", nsnull, (GIFC)gtk_ifactory_cb, VIEWER_SELECT_STYLE_LIST, nsnull },
{ "/Style/Select Style Sheet/sep1", nsnull, nsnull, 0, "<Separator>" },
{ "/Style/Select Style Sheet/Select Default", nsnull, (GIFC)gtk_ifactory_cb, VIEWER_SELECT_STYLE_DEFAULT, nsnull },
{ "/Style/Select Style Sheet/sep1", nsnull, nsnull, 0, "<Separator>" },
{ "/Style/Select Style Sheet/Select Alternative 1", nsnull, (GIFC)gtk_ifactory_cb, VIEWER_SELECT_STYLE_ONE, nsnull },
{ "/Style/Select Style Sheet/Select Alternative 2", nsnull, (GIFC)gtk_ifactory_cb, VIEWER_SELECT_STYLE_TWO, nsnull },
{ "/Style/Select Style Sheet/Select Alternative 3", nsnull, (GIFC)gtk_ifactory_cb, VIEWER_SELECT_STYLE_THREE, nsnull },
{ "/Style/Select Style Sheet/Select Alternative 4", nsnull, (GIFC)gtk_ifactory_cb, VIEWER_SELECT_STYLE_FOUR, nsnull },
{ "/Style/_Compatibility Mode", nsnull, nsnull, 0, "<Branch>" },
{ "/Style/Compatibility Mode/Nav Quirks", nsnull, (GIFC)gtk_ifactory_cb, VIEWER_NAV_QUIRKS_MODE, nsnull },
{ "/Style/Compatibility Mode/Standard", nsnull, (GIFC)gtk_ifactory_cb, VIEWER_STANDARD_MODE, nsnull },
{ "/Style/_Widget Render Mode", nsnull, nsnull, 0, "<Branch>" },
{ "/Style/Widget Render Mode/Native", nsnull, (GIFC)gtk_ifactory_cb, VIEWER_NATIVE_WIDGET_MODE, nsnull },
{ "/Style/Widget Render Mode/Gfx", nsnull, (GIFC)gtk_ifactory_cb, VIEWER_GFX_WIDGET_MODE, nsnull },
//#endif
{ "/_Tools", nsnull, nsnull, 0, "<Branch>" },
{ "/Tools/_JavaScript Console", nsnull, (GIFC)gtk_ifactory_cb, JS_CONSOLE, nsnull },
{ "/Tools/_Editor Mode", nsnull, (GIFC)gtk_ifactory_cb, EDITOR_MODE, nsnull }
};
void CreateViewerMenus(nsIWidget * aParent,
gpointer data,
GtkWidget ** aMenuBarOut)
{
NS_ASSERTION(nsnull != aParent,"null parent.");
NS_ASSERTION(nsnull != aMenuBarOut,"null out param.");
GtkItemFactory *item_factory;
GtkWidget *menubar;
GdkSuperWin *gdkSuperWin;
GtkWidget *mozBox;
gdkSuperWin = (GdkSuperWin*)aParent->GetNativeData(NS_NATIVE_WIDGET);
int nmenu_items = sizeof (menu_items) / sizeof (menu_items[0]);
item_factory = gtk_item_factory_new (GTK_TYPE_MENU_BAR, "<main>", nsnull);
gtk_item_factory_create_items (item_factory, nmenu_items, menu_items, data);
menubar = gtk_item_factory_get_widget (item_factory, "<main>");
gtk_menu_bar_set_shadow_type (GTK_MENU_BAR(menubar), GTK_SHADOW_NONE);
NS_ASSERTION(GDK_IS_SUPERWIN(gdkSuperWin), "code assumes a gdksuperwin.");
mozBox = gtk_mozbox_new(gdkSuperWin->bin_window);
NS_ASSERTION((mozBox != NULL), "failed to create mozBox.");
gtk_container_add(GTK_CONTAINER(mozBox), menubar);
gtk_mozbox_set_position(GTK_MOZBOX(mozBox), 0, 0 );
gtk_widget_show(mozBox);
gtk_widget_show(menubar);
*aMenuBarOut = menubar;
}

View File

@@ -0,0 +1,67 @@
#
# The contents of this file are subject to the Netscape Public
# License Version 1.1 (the "License"); you may not use this file
# except in compliance with the License. You may obtain a copy of
# the License at http://www.mozilla.org/NPL/
#
# Software distributed under the License is distributed on an "AS
# IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or
# implied. See the License for the specific language governing
# rights and limitations under the License.
#
# The Original Code is mozilla.org code.
#
# The Initial Developer of the Original Code is Netscape
# Communications Corporation. Portions created by Netscape are
# Copyright (C) 1998 Netscape Communications Corporation. All
# Rights Reserved.
#
# Contributor(s):
#
DEPTH = ../..
topsrcdir = @top_srcdir@
srcdir = @srcdir@
VPATH = @srcdir@
include $(DEPTH)/config/autoconf.mk
DIRS = xpwidgets support
#
# Dont build the DSO under the 'build' directory as windows does.
#
# The DSOs get built in the toolkit dir itself. Do this so that
# multiple implementations of widget can be built on the same
# source tree.
#
ifndef MOZ_MONOLITHIC_TOOLKIT
ifdef MOZ_ENABLE_GTK
DIRS += gtksuperwin
DIRS += gtk
endif
ifdef MOZ_ENABLE_MOTIF
DIRS += motif
endif
ifdef MOZ_ENABLE_XLIB
DIRS += xlib
endif
ifdef MOZ_ENABLE_QT
DIRS += qt
endif
else
DIRS += $(MOZ_WIDGET_TOOLKIT)
endif
# unix_services are only useful in unix, duh...
ifeq (,$(filter beos os2 rhapsody photon,$(MOZ_WIDGET_TOOLKIT)))
DIRS += unix_services
endif
include $(topsrcdir)/config/rules.mk

View File

@@ -0,0 +1,100 @@
#
# The contents of this file are subject to the Netscape Public License
# Version 1.0 (the "NPL"); you may not use this file except in
# compliance with the NPL. You may obtain a copy of the NPL at
# http://www.mozilla.org/NPL/
#
# Software distributed under the NPL is distributed on an "AS IS" basis,
# WITHOUT WARRANTY OF ANY KIND, either express or implied. See the NPL
# for the specific language governing rights and limitations under the
# NPL.
#
# The Initial Developer of this code under the NPL is Netscape
# Communications Corporation. Portions created by Netscape are
# Copyright (C) 1998 Netscape Communications Corporation. All Rights
# Reserved.
#
DEPTH = ../../..
topsrcdir = @top_srcdir@
srcdir = @srcdir@
VPATH = @srcdir@
include $(DEPTH)/config/autoconf.mk
LIBRARY_NAME = widget_gtk
REQUIRES = util img xpcom raptor netlib
CPPSRCS = \
nsAppShell.cpp \
nsButton.cpp \
nsCheckButton.cpp \
nsClipboard.cpp \
nsComboBox.cpp \
nsContextMenu.cpp \
nsDragService.cpp \
nsFilePicker.cpp \
nsFileWidget.cpp \
nsFontRetrieverService.cpp \
nsFontSizeIterator.cpp \
nsGtkEventHandler.cpp \
nsGtkUtils.cpp \
nsLabel.cpp \
nsListBox.cpp \
nsLookAndFeel.cpp \
nsMenu.cpp \
nsMenuBar.cpp \
nsMenuItem.cpp \
nsPopUpMenu.cpp \
nsRadioButton.cpp \
nsScrollbar.cpp \
nsSound.cpp \
nsTextAreaWidget.cpp \
nsTextHelper.cpp \
nsTextWidget.cpp \
nsToolkit.cpp \
nsWidget.cpp \
nsWidgetFactory.cpp \
nsWindow.cpp \
$(NULL)
SHARED_LIBRARY_LIBS = $(DIST)/lib/libraptorbasewidget_s.a
EXTRA_DSO_LDOPTS = \
$(MKSHLIB_FORCE_ALL) \
$(SHARED_LIBRARY_LIBS) \
$(MKSHLIB_UNFORCE_ALL) \
$(MOZ_COMPONENT_LIBS) \
-lraptorgfx \
$(NULL)
ifndef MOZ_MONOLITHIC_TOOLKIT
EXTRA_DSO_LDOPTS += -L$(DIST)/lib -lgtksuperwin $(MOZ_GTK_LDFLAGS)
else
EXTRA_DSO_LDOPTS += $(TK_LIBS)
endif
include $(topsrcdir)/config/rules.mk
ifndef MOZ_MONOLITHIC_TOOLKIT
CXXFLAGS += $(MOZ_GTK_CFLAGS)
CFLAGS += $(MOZ_GTK_CFLAGS)
else
CXXFLAGS += $(TK_CFLAGS)
CFLAGS += $(TK_CFLAGS)
endif
DEFINES += -D_IMPL_NS_WIDGET -DUSE_XIM
ifeq ($(OS_ARCH), Linux)
DEFINES += -D_BSD_SOURCE
endif
INCLUDES += \
-I$(srcdir)/../xpwidgets \
-I$(srcdir) \
$(NULL)
$(LIBRARY) $(SHARED_LIBRARY): $(SHARED_LIBRARY_LIBS) Makefile

View File

@@ -0,0 +1,292 @@
/* XPM */
static char * mozilla_icon_xpm[] = {
"32 32 257 2",
" c None",
". c #AA7303",
"+ c #A67003",
"@ c #B77C03",
"# c #8D6003",
"$ c #8D6004",
"% c #6C4A04",
"& c #3A2804",
"* c #6B4802",
"= c #9B6903",
"- c #5A2C04",
"; c #411B04",
"> c #9D6A03",
", c #7A5203",
"' c #510D04",
") c #6B1104",
"! c #7D5503",
"~ c #674604",
"{ c #C21E04",
"] c #C21D04",
"^ c #523804",
"/ c #513702",
"( c #552904",
"_ c #DD2204",
": c #DF2204",
"< c #582904",
"[ c #5F3F02",
"} c #6B2504",
"| c #FE2604",
"1 c #AB7303",
"2 c #9B6904",
"3 c #C31F04",
"4 c #FE2704",
"5 c #A81904",
"6 c #926304",
"7 c #4D3302",
"8 c #483104",
"9 c #C61E04",
"0 c #B11B04",
"a c #891604",
"b c #761204",
"c c #614304",
"d c #775102",
"e c #795102",
"f c #785102",
"g c #C58603",
"h c #642404",
"i c #B21A04",
"j c #1F0604",
"k c #550E04",
"l c #631004",
"m c #402404",
"n c #AF7703",
"o c #3D2902",
"p c #7F5602",
"q c #805604",
"r c #0C0904",
"s c #080604",
"t c #080706",
"u c #090604",
"v c #060404",
"w c #620F04",
"x c #7A1304",
"y c #030204",
"z c #570E04",
"A c #721204",
"B c #270704",
"C c #080504",
"D c #0A0604",
"E c #533804",
"F c #A56F02",
"G c #B87C03",
"H c #3B2804",
"I c #A51904",
"J c #FC2704",
"K c #D62004",
"L c #691004",
"M c #C01E04",
"N c #6D1004",
"O c #9C1804",
"P c #B31C04",
"Q c #150404",
"R c #801404",
"S c #DD2304",
"T c #120404",
"U c #130404",
"V c #500C04",
"W c #CC1E04",
"X c #AA1A04",
"Y c #100904",
"Z c #B47A03",
"` c #A77103",
" . c #513704",
".. c #891704",
"+. c #F62604",
"@. c #BA1D04",
"#. c #3C0A04",
"$. c #EB2304",
"%. c #DE2304",
"&. c #560E04",
"*. c #E82304",
"=. c #FE2804",
"-. c #BE1D04",
";. c #F12404",
">. c #661004",
",. c #020204",
"'. c #5E0F04",
"). c #A61A04",
"!. c #4A3204",
"~. c #BC7E03",
"{. c #8E6002",
"]. c #684604",
"^. c #390D04",
"/. c #EE2404",
"(. c #FE2904",
"_. c #7D1304",
":. c #8C1504",
"<. c #200604",
"[. c #A81A04",
"}. c #E72204",
"|. c #DA2004",
"1. c #070204",
"2. c #280704",
"3. c #543904",
"4. c #9F6C02",
"5. c #674602",
"6. c #B47B04",
"7. c #311004",
"8. c #B11C04",
"9. c #AA1B04",
"0. c #6A1104",
"a. c #801504",
"b. c #2B0704",
"c. c #09090A",
"d. c #450B04",
"e. c #360904",
"f. c #DC2204",
"g. c #EE2504",
"h. c #C11D04",
"i. c #6F1104",
"j. c #704B04",
"k. c #9C6902",
"l. c #A56F03",
"m. c #5F4004",
"n. c #8D1604",
"o. c #440A04",
"p. c #1A0504",
"q. c #931604",
"r. c #621004",
"s. c #7F1404",
"t. c #921704",
"u. c #F82504",
"v. c #F52504",
"w. c #981804",
"x. c #241804",
"y. c #5B3E04",
"z. c #D82204",
"A. c #D02004",
"B. c #DA2104",
"C. c #D52104",
"D. c #2A1A04",
"E. c #AC7403",
"F. c #2B1C04",
"G. c #D04004",
"H. c #FC3C04",
"I. c #F94E04",
"J. c #881504",
"K. c #FC2604",
"L. c #792804",
"M. c #AC7503",
"N. c #9A6803",
"O. c #782804",
"P. c #F66504",
"Q. c #F94B04",
"R. c #F46804",
"S. c #F46604",
"T. c #F76504",
"U. c #FB4204",
"V. c #C13D04",
"W. c #5D0E04",
"X. c #DA2204",
"Y. c #741604",
"Z. c #8C5E03",
"`. c #885B03",
" + c #8B1904",
".+ c #DE2204",
"++ c #D22D04",
"@+ c #C42D04",
"#+ c #580E04",
"$+ c #9F1804",
"%+ c #895D04",
"&+ c #D62204",
"*+ c #371904",
"=+ c #2C1A04",
"-+ c #4A0C04",
";+ c #140404",
">+ c #AB1A04",
",+ c #DA2304",
"'+ c #6A4702",
")+ c #754F02",
"!+ c #821404",
"~+ c #462B04",
"{+ c #B37A03",
"]+ c #B17803",
"^+ c #714C04",
"/+ c #580F04",
"(+ c #E32204",
"_+ c #DD2104",
":+ c #611D04",
"<+ c #BA7F03",
"[+ c #B27803",
"}+ c #6F1D04",
"|+ c #FD2704",
"1+ c #F22504",
"2+ c #634304",
"3+ c #875B03",
"4+ c #734F02",
"5+ c #805704",
"6+ c #1D0504",
"7+ c #DB2204",
"8+ c #EA2404",
"9+ c #2E0804",
"0+ c #815803",
"a+ c #941704",
"b+ c #C11E04",
"c+ c #391B04",
"d+ c #A77104",
"e+ c #B67C04",
"f+ c #371D04",
"g+ c #360A04",
"h+ c #573A04",
"i+ c #372604",
"j+ c #3E2104",
"k+ c #B57A03",
"l+ c #B57B03",
"m+ c #603F04",
"n+ c #430A04",
"o+ c #351904",
"p+ c #A36E03",
"q+ c #BE8103",
"r+ c #1D1404",
"s+ c #483004",
"t+ c #A26E03",
"u+ c #6D4B02",
"v+ c #825804",
"w+ c #0B0804",
"x+ c #976603",
"y+ c #815703",
"z+ c #926404",
"A+ c #895D03",
"B+ c #614202",
"C+ c #9A6804",
"D+ c #C88704",
"E+ c #C18303",
"F+ c #654302",
"G+ c #744F02",
"H+ c #704B02",
" ",
" . ",
" + @ ",
" # $ ",
" % & * ",
" = - ; > ",
" , ' ) ! ",
" ~ { ] ^ ",
" / ( _ : < [ ",
" . } | | } 1 ",
" 2 3 | 4 5 6 ",
" 7 8 9 0 a b c ",
" d e f f f d d d d d d g h i j k l m n d d d d d d d d d d d o ",
" p q r s s s s t s s u v w x y z A B C D D D D D s s s s E F ",
" G H I J 4 | 4 | K L L M N O P Q R | S T U V W X Y Z ",
" ` ...+.| 4 @.#.$.4 | %.&.*.4 =.-.;.>.,.'.).!.~. ",
" {.].^./.(.X _.;.| :.T <.[.| }.z | |.1.2.3.4. ",
" 5.6.7.8.9.0.a.b.c.d.e.f.g.h.&.| i.u j.k. ",
" l.m.n.o.p.q._.r.a.s.t.u.v.w.x.Z ",
" {.y.P z.R A.v.x j B.| C.D.E. ",
" F.G.H.I.4 | 4 t.J.f.K.L.M. ",
" N.O.P.Q.R.S.T.U.V.W.X.4 Y.Z. ",
" `. +4 =.| | .+++@+#+$+| K %+ ",
" %+&+| | | I *+=+-+;+>+,+&+x.'+ ",
" )+=+X.=.| !+~+{+]+^+,./+(+_+:+<+ ",
" [+}+|+1+) 2+3+ 4+5+6+7+8+9+0+ ",
" $ a+b+c+d+ e+f+0.g+h+ ",
" i+A j+k+ l+m+n+o+p+ ",
" q+r+s+t+ u+v+w+x+ ",
" y+z+A+ B+C+2 ",
" D+ E+F+ ",
" G+ H+ "};

View File

@@ -0,0 +1,63 @@
/* XPM */
static char * mozicon50_xpm[] = {
"50 51 9 1",
" c None",
". c #000000",
"+ c #FF0000",
"@ c #808000",
"# c #800000",
"$ c #FF6633",
"% c #990066",
"& c #FF00FF",
"* c #222222",
" ",
" @ ",
" $@ ",
" @@ ",
" @@$ ",
" $@*@ ",
" @@.@ ",
" @..@ ",
" $@..@@ ",
" $@##*@ ",
" @*#+.@ ",
" @.++.@$ ",
" $@.++.@$ ",
" @*#++#*@ ",
" @.++++.@ ",
" $@.++++.@$ ",
" @*#++++**@ ",
" @.#++++#.@ ",
" $@.++####.@ ",
" @@*+#*##*.@@ ",
"*@@@@@@@@@@@@@@@@@@@.#+..*##*#@@@@@@@@@@@@@@@@@@@*",
" *@@*................+#..*###.................@@* ",
" %@@@.#++++++++++++#**#*#++.###++*...#+++#.*@@* ",
" *@@.#+++++++++#.##++#+#+*.#+++#..##++#.@@@% ",
" $@..+++++++.#++++++##++++#++#...++*.@@$ ",
" @@*.#+++++.#+++++*.#++++##++#.*...@@ ",
" $@@.#+++#*++++#....#+++*#+++...*@$ ",
" *@@..++#*++#**.*.*+++#.#++*..@@$ ",
" $@*.++******#+++++#+#+++..@@ ",
" $@@.##..*$#**#+#*#++++..@@ ",
" $@@.#+#***##...#++++.*@@ ",
" %@@*++++++++#.#++++.@@ ",
" @.#+++++++++.##+++.@$ ",
" @.+$$$$$+$$$#*#+++*@@ ",
" $@*+$$$$$$$+$#.#+++#.@ ",
" @*#+++++++++++.#++++.@ ",
" @.#+++++++#*++.##+++.@$ ",
" $@.+++++++....#..+#++*@@ ",
" @@*+++++#.*@@@...*+++#.@ ",
" @.#++++#.@@@ @@..#++++.@ ",
" @.++++*.@@$ %@@..+++#.@@ ",
" $@.+++..@@* $@*.#+#**@ ",
" @@#+#.*@$% $@@.##..@ ",
" @.##.@@ @@..#.@$ ",
" $@.*.@@$ @@**.@$ ",
" $@.*@@ %$@@.*@ ",
" @.@@$ *@@.@ ",
" @@@$ %@@@$ ",
" $@@% %@@@ ",
" @@ $@ ",
" $ * "};

View File

@@ -0,0 +1,459 @@
/* -*- Mode: c++; tab-width: 2; indent-tabs-mode: nil; -*- */
/*
* The contents of this file are subject to the Netscape Public
* License Version 1.1 (the "License"); you may not use this file
* except in compliance with the License. You may obtain a copy of
* the License at http://www.mozilla.org/NPL/
*
* Software distributed under the License is distributed on an "AS
* IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or
* implied. See the License for the specific language governing
* rights and limitations under the License.
*
* The Original Code is mozilla.org code.
*
* The Initial Developer of the Original Code is Netscape
* Communications Corporation. Portions created by Netscape are
* Copyright (C) 1998 Netscape Communications Corporation. All
* Rights Reserved.
*
* Contributor(s):
*/
#include "prmon.h"
#include "nsCOMPtr.h"
#include "nsAppShell.h"
#include "nsIAppShell.h"
#include "nsIServiceManager.h"
#include "nsIEventQueueService.h"
#include "nsICmdLineService.h"
#include "nsGtkEventHandler.h"
#include <stdlib.h>
#ifdef MOZ_GLE
#include <gle/gle.h>
#endif
#include "nsIWidget.h"
#include "nsIPref.h"
#include "glib.h"
struct OurGdkIOClosure {
GdkInputFunction function;
gpointer data;
};
static gboolean
our_gdk_io_invoke(GIOChannel* source, GIOCondition condition, gpointer data)
{
OurGdkIOClosure* ioc = (OurGdkIOClosure*) data;
if (ioc) {
(*ioc->function)(ioc->data, g_io_channel_unix_get_fd(source),
GDK_INPUT_READ);
}
return TRUE;
}
static void
our_gdk_io_destroy(gpointer data)
{
OurGdkIOClosure* ioc = (OurGdkIOClosure*) data;
if (ioc) {
g_free(ioc);
}
}
static gint
our_gdk_input_add (gint source,
GdkInputFunction function,
gpointer data,
gint priority)
{
guint result;
OurGdkIOClosure *closure = g_new (OurGdkIOClosure, 1);
GIOChannel *channel;
closure->function = function;
closure->data = data;
channel = g_io_channel_unix_new (source);
result = g_io_add_watch_full (channel, priority, G_IO_IN,
our_gdk_io_invoke,
closure, our_gdk_io_destroy);
g_io_channel_unref (channel);
return result;
}
//-------------------------------------------------------------------------
//
// XPCOM CIDs
//
//-------------------------------------------------------------------------
static NS_DEFINE_CID(kEventQueueServiceCID, NS_EVENTQUEUESERVICE_CID);
static NS_DEFINE_CID(kCmdLineServiceCID, NS_COMMANDLINE_SERVICE_CID);
static NS_DEFINE_CID(kPrefServiceCID, NS_PREF_CID);
// a linked, ordered list of event queues and their tokens
class EventQueueToken {
public:
EventQueueToken(nsIEventQueue *aQueue, const gint aToken);
virtual ~EventQueueToken();
nsIEventQueue *mQueue;
gint mToken;
EventQueueToken *mNext;
};
EventQueueToken::EventQueueToken(nsIEventQueue *aQueue, const gint aToken) {
mQueue = aQueue;
NS_IF_ADDREF(mQueue);
mToken = aToken;
mNext = 0;
}
EventQueueToken::~EventQueueToken(){
NS_IF_RELEASE(mQueue);
}
class EventQueueTokenQueue {
public:
EventQueueTokenQueue();
virtual ~EventQueueTokenQueue();
nsresult PushToken(nsIEventQueue *aQueue, gint aToken);
PRBool PopToken(nsIEventQueue *aQueue, gint *aToken);
private:
EventQueueToken *mHead;
};
EventQueueTokenQueue::EventQueueTokenQueue() {
mHead = 0;
}
EventQueueTokenQueue::~EventQueueTokenQueue() {
// if we reach this point with an empty token queue, well, fab. however,
// we expect the first event queue to still be active. so we take
// special care to unhook that queue (not that failing to do so seems
// to hurt anything). more queues than that would be an error.
//NS_ASSERTION(!mHead || !mHead->mNext, "event queue token list deleted when not empty");
// (and skip the assertion for now. we're leaking event queues because they
// are referenced by things that leak, so this assertion goes off a lot.)
if (mHead) {
gdk_input_remove(mHead->mToken);
delete mHead;
// and leak the rest. it's an error, anyway
}
}
nsresult EventQueueTokenQueue::PushToken(nsIEventQueue *aQueue, gint aToken) {
EventQueueToken *newToken = new EventQueueToken(aQueue, aToken);
NS_ASSERTION(newToken, "couldn't allocate token queue element");
if (!newToken)
return NS_ERROR_OUT_OF_MEMORY;
newToken->mNext = mHead;
mHead = newToken;
return NS_OK;
}
PRBool EventQueueTokenQueue::PopToken(nsIEventQueue *aQueue, gint *aToken) {
EventQueueToken *token, *lastToken;
PRBool found = PR_FALSE;
NS_ASSERTION(mHead, "attempt to retrieve event queue token from empty queue");
if (mHead)
NS_ASSERTION(mHead->mQueue == aQueue, "retrieving event queue from past head of queue queue");
token = mHead;
lastToken = 0;
while (token && token->mQueue != aQueue) {
lastToken = token;
token = token->mNext;
}
if (token) {
if (lastToken)
lastToken->mNext = token->mNext;
else
mHead = token->mNext;
found = PR_TRUE;
*aToken = token->mToken;
delete token;
}
return found;
}
//-------------------------------------------------------------------------
//
// nsAppShell constructor
//
//-------------------------------------------------------------------------
nsAppShell::nsAppShell()
{
NS_INIT_REFCNT();
mDispatchListener = 0;
mEventQueueTokens = new EventQueueTokenQueue();
// throw on error would really be civilized here
NS_ASSERTION(mEventQueueTokens, "couldn't allocate event queue token queue");
}
//-------------------------------------------------------------------------
//
// nsAppShell destructor
//
//-------------------------------------------------------------------------
nsAppShell::~nsAppShell()
{
delete mEventQueueTokens;
}
//-------------------------------------------------------------------------
//
// nsISupports implementation macro
//
//-------------------------------------------------------------------------
NS_IMPL_ISUPPORTS1(nsAppShell, nsIAppShell)
//-------------------------------------------------------------------------
NS_IMETHODIMP nsAppShell::SetDispatchListener(nsDispatchListener* aDispatchListener)
{
mDispatchListener = aDispatchListener;
return NS_OK;
}
static void event_processor_callback(gpointer data,
gint source,
GdkInputCondition condition)
{
nsIEventQueue *eventQueue = (nsIEventQueue*)data;
if (eventQueue)
eventQueue->ProcessPendingEvents();
}
#define PREF_NCOLS "browser.ncols"
#define PREF_INSTALLCMAP "browser.installcmap"
static void
HandleColormapPrefs( void )
{
PRInt32 ivalue = 0;
PRBool bvalue;
nsresult rv;
/* The default is to do nothing. INSTALLCMAP has precedence over
NCOLS. Ignore the fact we can't do this if it fails, as it is
not critical */
NS_WITH_SERVICE(nsIPref, prefs, kPrefServiceCID, &rv);
if (NS_FAILED(rv) || (!prefs))
return;
/* first check ncols */
rv = prefs->GetIntPref(PREF_NCOLS, &ivalue);
if (NS_SUCCEEDED(rv) && ivalue >= 0 && ivalue <= 255 ) {
gdk_rgb_set_min_colors( ivalue );
return;
}
/* next check installcmap */
rv = prefs->GetBoolPref(PREF_INSTALLCMAP, &bvalue);
if (NS_SUCCEEDED(rv)) {
if ( PR_TRUE == bvalue )
gdk_rgb_set_min_colors( 255 ); // force it
else
gdk_rgb_set_min_colors( 0 );
}
}
//-------------------------------------------------------------------------
//
// Create the application shell
//
//-------------------------------------------------------------------------
NS_IMETHODIMP nsAppShell::Create(int *bac, char **bav)
{
gchar *home=nsnull;
gchar *path=nsnull;
int argc = bac ? *bac : 0;
char **argv = bav;
#if 1
nsresult rv;
NS_WITH_SERVICE(nsICmdLineService, cmdLineArgs, kCmdLineServiceCID, &rv);
if (NS_SUCCEEDED(rv))
{
rv = cmdLineArgs->GetArgc(&argc);
if(NS_FAILED(rv))
argc = bac ? *bac : 0;
rv = cmdLineArgs->GetArgv(&argv);
if(NS_FAILED(rv))
argv = bav;
}
#endif
gtk_set_locale ();
gtk_init (&argc, &argv);
// It is most convenient for us to intercept our events after
// they have been converted to GDK, but before GTK+ gets them
gdk_event_handler_set (handle_gdk_event, NULL, NULL);
#ifdef MOZ_GLE
gle_init (&argc, &argv);
#endif
// delete the cmdLineArgs thing?
HandleColormapPrefs();
gdk_rgb_init();
home = g_get_home_dir();
if ((char*)nsnull != home) {
path = g_strdup_printf("%s%c%s", home, G_DIR_SEPARATOR, ".gtkrc");
if ((char *)nsnull != path) {
gtk_rc_parse(path);
g_free(path);
}
}
return NS_OK;
}
//-------------------------------------------------------------------------
//
// Spinup - do any preparation necessary for running a message loop
//
//-------------------------------------------------------------------------
NS_IMETHODIMP nsAppShell::Spinup()
{
return NS_OK;
}
//-------------------------------------------------------------------------
//
// Spindown - do any cleanup necessary for finishing a message loop
//
//-------------------------------------------------------------------------
NS_IMETHODIMP nsAppShell::Spindown()
{
return NS_OK;
}
//-------------------------------------------------------------------------
//
// Run
//
//-------------------------------------------------------------------------
NS_IMETHODIMP nsAppShell::Run()
{
NS_ADDREF_THIS();
nsresult rv = NS_OK;
nsIEventQueue * EQueue = nsnull;
// Get the event queue service
NS_WITH_SERVICE(nsIEventQueueService, eventQService, kEventQueueServiceCID, &rv);
if (NS_FAILED(rv)) {
NS_ASSERTION("Could not obtain event queue service", PR_FALSE);
return rv;
}
#ifdef DEBUG
printf("Got the event queue from the service\n");
#endif /* DEBUG */
//Get the event queue for the thread.
rv = eventQService->GetThreadEventQueue(PR_GetCurrentThread(), &EQueue);
// If a queue already present use it.
if (EQueue)
goto done;
// Create the event queue for the thread
rv = eventQService->CreateThreadEventQueue();
if (NS_OK != rv) {
NS_ASSERTION("Could not create the thread event queue", PR_FALSE);
return rv;
}
//Get the event queue for the thread
rv = eventQService->GetThreadEventQueue(PR_GetCurrentThread(), &EQueue);
if (NS_OK != rv) {
NS_ASSERTION("Could not obtain the thread event queue", PR_FALSE);
return rv;
}
done:
#ifdef DEBUG
printf("Calling gdk_input_add with event queue\n");
#endif /* DEBUG */
// (has to be called explicitly for this, the primordial appshell, because
// of startup ordering problems.)
ListenToEventQueue(EQueue, PR_TRUE);
gtk_main();
NS_IF_RELEASE(EQueue);
Release();
return NS_OK;
}
//-------------------------------------------------------------------------
//
// Exit a message handler loop
//
//-------------------------------------------------------------------------
NS_IMETHODIMP nsAppShell::Exit()
{
gtk_main_quit ();
return NS_OK;
}
// does nothing. used by xp code with non-gtk expectations.
// this method will be removed once xp eventloops are working.
NS_IMETHODIMP nsAppShell::GetNativeEvent(PRBool &aRealEvent, void *& aEvent)
{
aRealEvent = PR_FALSE;
aEvent = 0;
return NS_OK;
}
// simply executes one iteration of the event loop. used by xp code with
// non-gtk expectations.
// this method will be removed once xp eventloops are working.
NS_IMETHODIMP nsAppShell::DispatchNativeEvent(PRBool aRealEvent, void *aEvent)
{
g_main_iteration(PR_TRUE);
return NS_OK;
}
NS_IMETHODIMP nsAppShell::ListenToEventQueue(nsIEventQueue *aQueue,
PRBool aListen)
{
// tell gdk to listen to the event queue or not
gint queueToken;
if (aListen) {
queueToken = our_gdk_input_add(aQueue->GetEventQueueSelectFD(),
event_processor_callback,
aQueue, G_PRIORITY_DEFAULT_IDLE);
mEventQueueTokens->PushToken(aQueue, queueToken);
} else {
if (mEventQueueTokens->PopToken(aQueue, &queueToken))
gdk_input_remove(queueToken);
}
return NS_OK;
}

View File

@@ -0,0 +1,50 @@
/* -*- Mode: c++; tab-width: 2; indent-tabs-mode: nil; -*- */
/*
* The contents of this file are subject to the Netscape Public
* License Version 1.1 (the "License"); you may not use this file
* except in compliance with the License. You may obtain a copy of
* the License at http://www.mozilla.org/NPL/
*
* Software distributed under the License is distributed on an "AS
* IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or
* implied. See the License for the specific language governing
* rights and limitations under the License.
*
* The Original Code is mozilla.org code.
*
* The Initial Developer of the Original Code is Netscape
* Communications Corporation. Portions created by Netscape are
* Copyright (C) 1998 Netscape Communications Corporation. All
* Rights Reserved.
*
* Contributor(s):
*/
#ifndef nsAppShell_h__
#define nsAppShell_h__
#include "nsIAppShell.h"
#include <gtk/gtk.h>
/**
* Native GTK+ Application shell wrapper
*/
class EventQueueTokenQueue;
class nsAppShell : public nsIAppShell
{
public:
nsAppShell();
virtual ~nsAppShell();
NS_DECL_ISUPPORTS
NS_DECL_NSIAPPSHELL
private:
nsDispatchListener *mDispatchListener;
EventQueueTokenQueue *mEventQueueTokens;
};
#endif // nsAppShell_h__

View File

@@ -0,0 +1,156 @@
/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*-
*
* The contents of this file are subject to the Netscape Public
* License Version 1.1 (the "License"); you may not use this file
* except in compliance with the License. You may obtain a copy of
* the License at http://www.mozilla.org/NPL/
*
* Software distributed under the License is distributed on an "AS
* IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or
* implied. See the License for the specific language governing
* rights and limitations under the License.
*
* The Original Code is mozilla.org code.
*
* The Initial Developer of the Original Code is Netscape
* Communications Corporation. Portions created by Netscape are
* Copyright (C) 1998 Netscape Communications Corporation. All
* Rights Reserved.
*
* Contributor(s):
*/
#include <gtk/gtk.h>
#include "nsGtkEventHandler.h"
#include "nsButton.h"
#include "nsString.h"
NS_IMPL_ADDREF_INHERITED(nsButton, nsWidget)
NS_IMPL_RELEASE_INHERITED(nsButton, nsWidget)
NS_IMPL_QUERY_INTERFACE2(nsButton, nsIButton, nsIWidget)
//-------------------------------------------------------------------------
//
// nsButton constructor
//
//-------------------------------------------------------------------------
nsButton::nsButton() : nsWidget() , nsIButton()
{
}
//-------------------------------------------------------------------------
//
// Create the native Button widget
//
//-------------------------------------------------------------------------
NS_IMETHODIMP nsButton::CreateNative(GtkObject *parentWindow)
{
#ifdef USE_SUPERWIN
if (!GDK_IS_SUPERWIN(parentWindow)) {
g_print("Damn, brother. That's not a superwin.\n");
return NS_ERROR_FAILURE;
}
GdkSuperWin *superwin = GDK_SUPERWIN(parentWindow);
mMozBox = gtk_mozbox_new(superwin->bin_window);
#endif
mWidget = gtk_button_new_with_label("");
gtk_widget_set_name(mWidget, "nsButton");
#ifdef USE_SUPERWIN
// make sure that we put the scrollbar into the mozbox
gtk_container_add(GTK_CONTAINER(mMozBox), mWidget);
#endif /* USE_SUPERWIN */
return NS_OK;
}
//-------------------------------------------------------------------------
//
// nsButton destructor
//
//-------------------------------------------------------------------------
nsButton::~nsButton()
{
}
void nsButton::InitCallbacks(char * aName)
{
InstallButtonPressSignal(mWidget);
InstallButtonReleaseSignal(mWidget);
InstallEnterNotifySignal(mWidget);
InstallLeaveNotifySignal(mWidget);
// These are needed so that the events will go to us and not our parent.
AddToEventMask(mWidget,
GDK_BUTTON_PRESS_MASK |
GDK_BUTTON_RELEASE_MASK |
GDK_ENTER_NOTIFY_MASK |
GDK_EXPOSURE_MASK |
GDK_FOCUS_CHANGE_MASK |
GDK_KEY_PRESS_MASK |
GDK_KEY_RELEASE_MASK |
GDK_LEAVE_NOTIFY_MASK |
GDK_POINTER_MOTION_MASK);
}
//-------------------------------------------------------------------------
//
// Set this button label
//
//-------------------------------------------------------------------------
NS_IMETHODIMP nsButton::SetLabel(const nsString& aText)
{
NS_ALLOC_STR_BUF(label, aText, 256);
gtk_label_set(GTK_LABEL(GTK_BIN (mWidget)->child), label);
NS_FREE_STR_BUF(label);
return (NS_OK);
}
//-------------------------------------------------------------------------
//
// Get this button label
//
//-------------------------------------------------------------------------
NS_IMETHODIMP nsButton::GetLabel(nsString& aBuffer)
{
char * text;
gtk_label_get(GTK_LABEL(GTK_BIN (mWidget)->child), &text);
aBuffer.SetLength(0);
aBuffer.Append(text);
return (NS_OK);
}
//-------------------------------------------------------------------------
//
// set font for button
//
//-------------------------------------------------------------------------
/* virtual */
void nsButton::SetFontNative(GdkFont *aFont)
{
GtkStyle *style = gtk_style_copy(GTK_BIN (mWidget)->child->style);
// gtk_style_copy ups the ref count of the font
gdk_font_unref (style->font);
style->font = aFont;
gdk_font_ref(style->font);
gtk_widget_set_style(GTK_BIN (mWidget)->child, style);
gtk_style_unref(style);
}

View File

@@ -0,0 +1,53 @@
/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*-
*
* The contents of this file are subject to the Netscape Public
* License Version 1.1 (the "License"); you may not use this file
* except in compliance with the License. You may obtain a copy of
* the License at http://www.mozilla.org/NPL/
*
* Software distributed under the License is distributed on an "AS
* IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or
* implied. See the License for the specific language governing
* rights and limitations under the License.
*
* The Original Code is mozilla.org code.
*
* The Initial Developer of the Original Code is Netscape
* Communications Corporation. Portions created by Netscape are
* Copyright (C) 1998 Netscape Communications Corporation. All
* Rights Reserved.
*
* Contributor(s):
*/
#ifndef nsButton_h__
#define nsButton_h__
#include "nsWidget.h"
#include "nsIButton.h"
/**
* Native GTK+ button wrapper
*/
class nsButton : public nsWidget,
public nsIButton
{
public:
nsButton();
virtual ~nsButton();
NS_DECL_ISUPPORTS_INHERITED
// nsIButton part
NS_IMETHOD SetLabel(const nsString& aText);
NS_IMETHOD GetLabel(nsString& aBuffer);
virtual void SetFontNative(GdkFont *aFont);
protected:
NS_METHOD CreateNative(GtkObject *parentWindow);
virtual void InitCallbacks(char * aName = nsnull);
};
#endif // nsButton_h__

View File

@@ -0,0 +1,250 @@
/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*-
*
* The contents of this file are subject to the Netscape Public
* License Version 1.1 (the "License"); you may not use this file
* except in compliance with the License. You may obtain a copy of
* the License at http://www.mozilla.org/NPL/
*
* Software distributed under the License is distributed on an "AS
* IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or
* implied. See the License for the specific language governing
* rights and limitations under the License.
*
* The Original Code is mozilla.org code.
*
* The Initial Developer of the Original Code is Netscape
* Communications Corporation. Portions created by Netscape are
* Copyright (C) 1998 Netscape Communications Corporation. All
* Rights Reserved.
*
* Contributor(s):
*/
#include "nsCheckButton.h"
#include "nsString.h"
NS_IMPL_ADDREF_INHERITED(nsCheckButton, nsWidget)
NS_IMPL_RELEASE_INHERITED(nsCheckButton, nsWidget)
NS_IMPL_QUERY_INTERFACE2(nsCheckButton, nsICheckButton, nsIWidget)
//-------------------------------------------------------------------------
//
// nsCheckButton constructor
//
//-------------------------------------------------------------------------
nsCheckButton::nsCheckButton() : nsWidget() , nsICheckButton()
{
NS_INIT_REFCNT();
mLabel = nsnull;
mCheckButton = nsnull;
mState = PR_FALSE;
}
//-------------------------------------------------------------------------
//
// nsCheckButton destructor
//
//-------------------------------------------------------------------------
nsCheckButton::~nsCheckButton()
{
}
void
nsCheckButton::OnDestroySignal(GtkWidget* aGtkWidget)
{
if (aGtkWidget == mCheckButton) {
mCheckButton = nsnull;
}
else if (aGtkWidget == mLabel) {
mLabel = nsnull;
}
else {
nsWidget::OnDestroySignal(aGtkWidget);
}
}
//-------------------------------------------------------------------------
//
// Create the native CheckButton widget
//
//-------------------------------------------------------------------------
NS_METHOD nsCheckButton::CreateNative(GtkObject *parentWindow)
{
mWidget = gtk_event_box_new();
mCheckButton = gtk_check_button_new();
gtk_container_add(GTK_CONTAINER(mWidget), mCheckButton);
gtk_widget_show(mCheckButton);
gtk_widget_set_name(mWidget, "nsCheckButton");
return NS_OK;
}
void nsCheckButton::InitCallbacks(char * aName)
{
InstallButtonPressSignal(mCheckButton);
InstallButtonReleaseSignal(mCheckButton);
InstallEnterNotifySignal(mWidget);
InstallLeaveNotifySignal(mWidget);
// These are needed so that the events will go to us and not our parent.
AddToEventMask(mWidget,
GDK_BUTTON_PRESS_MASK |
GDK_BUTTON_RELEASE_MASK |
GDK_ENTER_NOTIFY_MASK |
GDK_EXPOSURE_MASK |
GDK_FOCUS_CHANGE_MASK |
GDK_KEY_PRESS_MASK |
GDK_KEY_RELEASE_MASK |
GDK_LEAVE_NOTIFY_MASK |
GDK_POINTER_MOTION_MASK);
// Add in destroy callback
gtk_signal_connect(GTK_OBJECT(mCheckButton),
"destroy",
GTK_SIGNAL_FUNC(DestroySignal),
this);
InstallSignal((GtkWidget *)mCheckButton,
(gchar *)"toggled",
GTK_SIGNAL_FUNC(nsCheckButton::ToggledSignal));
}
//-------------------------------------------------------------------------
//
// Set this button label
//
//-------------------------------------------------------------------------
NS_METHOD nsCheckButton::SetState(const PRBool aState)
{
mState = aState;
if (mWidget && mCheckButton)
{
GtkToggleButton * item = GTK_TOGGLE_BUTTON(mCheckButton);
item->active = (gboolean) mState;
gtk_widget_queue_draw(GTK_WIDGET(item));
}
return NS_OK;
}
//-------------------------------------------------------------------------
//
// Set this button label
//
//-------------------------------------------------------------------------
NS_METHOD nsCheckButton::GetState(PRBool& aState)
{
aState = mState;
return NS_OK;
}
//-------------------------------------------------------------------------
//
// Set this Checkbox label
//
//-------------------------------------------------------------------------
NS_METHOD nsCheckButton::SetLabel(const nsString& aText)
{
if (mWidget) {
NS_ALLOC_STR_BUF(label, aText, 256);
if (mLabel) {
gtk_label_set(GTK_LABEL(mLabel), label);
} else {
mLabel = gtk_label_new(label);
gtk_misc_set_alignment (GTK_MISC (mLabel), 0.0, 0.5);
gtk_container_add(GTK_CONTAINER(mCheckButton), mLabel);
gtk_widget_show(mLabel);
gtk_signal_connect(GTK_OBJECT(mLabel),
"destroy",
GTK_SIGNAL_FUNC(DestroySignal),
this);
}
NS_FREE_STR_BUF(label);
}
return NS_OK;
}
//-------------------------------------------------------------------------
//
// Get this button label
//
//-------------------------------------------------------------------------
NS_METHOD nsCheckButton::GetLabel(nsString& aBuffer)
{
aBuffer.SetLength(0);
if (mWidget) {
char * text;
if (mLabel) {
gtk_label_get(GTK_LABEL(mLabel), &text);
aBuffer.Append(text);
}
}
return NS_OK;
}
/* virtual */ void
nsCheckButton::OnToggledSignal(const gboolean aState)
{
// Untoggle the sonofabitch
if (mWidget && mCheckButton)
{
GtkToggleButton * item = GTK_TOGGLE_BUTTON(mCheckButton);
item->active = !item->active;
gtk_widget_queue_draw(GTK_WIDGET(item));
}
}
//////////////////////////////////////////////////////////////////////
/* static */ gint
nsCheckButton::ToggledSignal(GtkWidget * aWidget,
gpointer aData)
{
NS_ASSERTION( nsnull != aWidget, "widget is null");
nsCheckButton * button = (nsCheckButton *) aData;
NS_ASSERTION( nsnull != button, "instance pointer is null");
button->OnToggledSignal(GTK_TOGGLE_BUTTON(aWidget)->active);
return PR_TRUE;
}
//////////////////////////////////////////////////////////////////////
// SetBackgroundColor for CheckButton
/*virtual*/
void nsCheckButton::SetBackgroundColorNative(GdkColor *aColorNor,
GdkColor *aColorBri,
GdkColor *aColorDark)
{
// use same style copy as SetFont
GtkStyle *style = gtk_style_copy(GTK_WIDGET (g_list_nth_data(gtk_container_children(GTK_CONTAINER (mWidget)),0))->style);
style->bg[GTK_STATE_NORMAL]=*aColorNor;
// Mouse over button
style->bg[GTK_STATE_PRELIGHT]=*aColorBri;
// Button is down
style->bg[GTK_STATE_ACTIVE]=*aColorDark;
// other states too? (GTK_STATE_ACTIVE, GTK_STATE_PRELIGHT,
// GTK_STATE_SELECTED, GTK_STATE_INSENSITIVE)
gtk_widget_set_style(GTK_WIDGET (g_list_nth_data(gtk_container_children(GTK_CONTAINER (mWidget)),0)), style);
// set style for eventbox too
gtk_widget_set_style(mWidget, style);
gtk_style_unref(style);
}

View File

@@ -0,0 +1,75 @@
/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*-
*
* The contents of this file are subject to the Netscape Public
* License Version 1.1 (the "License"); you may not use this file
* except in compliance with the License. You may obtain a copy of
* the License at http://www.mozilla.org/NPL/
*
* Software distributed under the License is distributed on an "AS
* IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or
* implied. See the License for the specific language governing
* rights and limitations under the License.
*
* The Original Code is mozilla.org code.
*
* The Initial Developer of the Original Code is Netscape
* Communications Corporation. Portions created by Netscape are
* Copyright (C) 1998 Netscape Communications Corporation. All
* Rights Reserved.
*
* Contributor(s):
*/
#ifndef nsCheckButton_h__
#define nsCheckButton_h__
#include "nsWidget.h"
#include "nsICheckButton.h"
/**
* Native GTK+ Checkbox wrapper
*/
class nsCheckButton : public nsWidget,
public nsICheckButton
{
public:
nsCheckButton();
virtual ~nsCheckButton();
NS_DECL_ISUPPORTS_INHERITED
// nsICheckButton part
NS_IMETHOD SetLabel(const nsString &aText);
NS_IMETHOD GetLabel(nsString &aBuffer);
NS_IMETHOD SetState(const PRBool aState);
NS_IMETHOD GetState(PRBool& aState);
virtual void OnToggledSignal(const gboolean aState);
protected:
NS_IMETHOD CreateNative(GtkObject *parentWindow);
virtual void InitCallbacks(char * aName = nsnull);
virtual void OnDestroySignal(GtkWidget* aGtkWidget);
// Sets background for checkbutton
virtual void SetBackgroundColorNative(GdkColor *aColorNor,
GdkColor *aColorBri,
GdkColor *aColorDark);
GtkWidget *mLabel;
GtkWidget *mCheckButton;
// We need to maintain our own state to be in sync with the
// gecko check controlling frame.
PRBool mState;
private:
static gint ToggledSignal(GtkWidget * aWidget,
gpointer aData);
};
#endif // nsCheckButton_h__

View File

@@ -0,0 +1,872 @@
/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*-
*
* The contents of this file are subject to the Netscape Public
* License Version 1.1 (the "License"); you may not use this file
* except in compliance with the License. You may obtain a copy of
* the License at http://www.mozilla.org/NPL/
*
* Software distributed under the License is distributed on an "AS
* IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or
* implied. See the License for the specific language governing
* rights and limitations under the License.
*
* The Original Code is mozilla.org code.
*
* The Initial Developer of the Original Code is Netscape
* Communications Corporation. Portions created by Netscape are
* Copyright (C) 1998 Netscape Communications Corporation. All
* Rights Reserved.
*
* Contributor(s):
*/
#include "nsClipboard.h"
#include "nsCOMPtr.h"
#include "nsISupportsArray.h"
#include "nsIClipboardOwner.h"
#include "nsITransferable.h" // kTextMime
#include "nsISupportsPrimitives.h"
#include "nsIWidget.h"
#include "nsIComponentManager.h"
#include "nsIServiceManager.h"
#include "nsWidgetsCID.h"
#include "nsXPIDLString.h"
#include "nsPrimitiveHelpers.h"
#include "nsVoidArray.h"
// The class statics:
GtkWidget* nsClipboard::sWidget = 0;
#if defined(DEBUG_mcafee) || defined(DEBUG_pavlov)
#define DEBUG_CLIPBOARD
#endif
enum {
TARGET_NONE,
TARGET_TEXT_PLAIN,
TARGET_TEXT_XIF,
TARGET_TEXT_UNICODE,
TARGET_TEXT_HTML,
TARGET_AOLMAIL,
TARGET_IMAGE_PNG,
TARGET_IMAGE_JPEG,
TARGET_IMAGE_GIF,
// compatibility types
TARGET_UTF8,
TARGET_UNKNOWN,
TARGET_LAST
};
static GdkAtom sSelTypes[TARGET_LAST];
//-------------------------------------------------------------------------
//
// nsClipboard constructor
//
//-------------------------------------------------------------------------
nsClipboard::nsClipboard() : nsBaseClipboard()
{
#ifdef DEBUG_CLIPBOARD
g_print("nsClipboard::nsClipboard()\n");
#endif /* DEBUG_CLIPBOARD */
//NS_INIT_REFCNT();
mIgnoreEmptyNotification = PR_FALSE;
mClipboardOwner = nsnull;
mTransferable = nsnull;
mSelectionData.data = nsnull;
mSelectionData.length = 0;
// initialize the widget, etc we're binding to
Init();
}
// XXX if GTK's internal code changes this isn't going to work
// copied from gtk code because it is a static function we can't get to it.
// need to bug owen taylor about getting this code public.
typedef struct _GtkSelectionTargetList GtkSelectionTargetList;
struct _GtkSelectionTargetList {
GdkAtom selection;
GtkTargetList *list;
};
static const char *gtk_selection_handler_key = "gtk-selection-handlers";
void __gtk_selection_target_list_remove (GtkWidget *widget)
{
GtkSelectionTargetList *sellist;
GList *tmp_list;
GList *lists;
lists = (GList*)gtk_object_get_data (GTK_OBJECT (widget), gtk_selection_handler_key);
tmp_list = lists;
while (tmp_list)
{
sellist = (GtkSelectionTargetList*)tmp_list->data;
gtk_target_list_unref (sellist->list);
g_free (sellist);
tmp_list = tmp_list->next;
}
g_list_free (lists);
gtk_object_set_data (GTK_OBJECT (widget), gtk_selection_handler_key, NULL);
}
//-------------------------------------------------------------------------
//
// nsClipboard destructor
//
//-------------------------------------------------------------------------
nsClipboard::~nsClipboard()
{
#ifdef DEBUG_CLIPBOARD
printf("nsClipboard::~nsClipboard()\n");
#endif /* DEBUG_CLIPBOARD */
// Remove all our event handlers:
if (sWidget &&
(gdk_selection_owner_get(GDK_SELECTION_PRIMARY) == sWidget->window))
gtk_selection_remove_all(sWidget);
// free the selection data, if any
if (mSelectionData.data != nsnull)
g_free(mSelectionData.data);
nsClipboard *cb = (nsClipboard*)gtk_object_get_data(GTK_OBJECT(sWidget), "cb");
if (cb != nsnull)
{
NS_RELEASE(cb);
gtk_object_remove_data(GTK_OBJECT(sWidget), "cb");
}
if (sWidget)
{
gtk_widget_destroy(sWidget);
sWidget = nsnull;
}
}
//
// GTK Weirdness!
// This is here in the hope of being able to call
// gtk_selection_add_targets(w, GDK_SELECTION_PRIMARY,
// targets,
// 1);
// instead of
// gtk_selection_add_target(sWidget,
// GDK_SELECTION_PRIMARY,
// GDK_SELECTION_TYPE_STRING,
// GDK_SELECTION_TYPE_STRING);
// but it turns out that this changes the whole gtk selection model;
// when calling add_targets copy uses selection_clear_event and the
// data structure needs to be filled in in a way that we haven't
// figured out; when using add_target copy uses selection_get and
// the data structure is already filled in as much as it needs to be.
// Some gtk internals wizard will need to solve this mystery before
// we can use add_targets().
//static GtkTargetEntry targets[] = {
// { "strings n stuff", GDK_SELECTION_TYPE_STRING, GDK_SELECTION_TYPE_STRING }
//};
//
//-------------------------------------------------------------------------
void nsClipboard::Init(void)
{
#ifdef DEBUG_CLIPBOARD
g_print("nsClipboard::Init\n");
#endif
sSelTypes[TARGET_NONE] = GDK_NONE;
sSelTypes[TARGET_TEXT_PLAIN] = gdk_atom_intern(kTextMime, FALSE);
sSelTypes[TARGET_TEXT_XIF] = gdk_atom_intern(kXIFMime, FALSE);
sSelTypes[TARGET_TEXT_UNICODE] = gdk_atom_intern(kUnicodeMime, FALSE);
sSelTypes[TARGET_UTF8] = gdk_atom_intern("UTF8", FALSE);
sSelTypes[TARGET_TEXT_HTML] = gdk_atom_intern(kHTMLMime, FALSE);
sSelTypes[TARGET_AOLMAIL] = gdk_atom_intern(kAOLMailMime, FALSE);
sSelTypes[TARGET_IMAGE_PNG] = gdk_atom_intern(kPNGImageMime, FALSE);
sSelTypes[TARGET_IMAGE_JPEG] = gdk_atom_intern(kJPEGImageMime, FALSE);
sSelTypes[TARGET_IMAGE_GIF] = gdk_atom_intern(kGIFImageMime, FALSE);
// compatibility with other apps
// create invisible widget to use for the clipboard
sWidget = gtk_invisible_new();
// add the clipboard pointer to the widget so we can get it.
gtk_object_set_data(GTK_OBJECT(sWidget), "cb", this);
NS_ADDREF_THIS();
// Handle selection requests if we called gtk_selection_add_target:
gtk_signal_connect(GTK_OBJECT(sWidget), "selection_get",
GTK_SIGNAL_FUNC(nsClipboard::SelectionGetCB),
nsnull);
// When someone else takes the selection away:
gtk_signal_connect(GTK_OBJECT(sWidget), "selection_clear_event",
GTK_SIGNAL_FUNC(nsClipboard::SelectionClearCB),
nsnull);
// Set up the paste handler:
gtk_signal_connect(GTK_OBJECT(sWidget), "selection_received",
GTK_SIGNAL_FUNC(nsClipboard::SelectionReceivedCB),
nsnull);
}
//-------------------------------------------------------------------------
NS_IMETHODIMP nsClipboard::SetNativeClipboardData()
{
mIgnoreEmptyNotification = PR_TRUE;
#ifdef DEBUG_CLIPBOARD
printf(" nsClipboard::SetNativeClipboardData()\n");
#endif /* DEBUG_CLIPBOARD */
// make sure we have a good transferable
if (nsnull == mTransferable) {
printf("nsClipboard::SetNativeClipboardData(): no transferable!\n");
return NS_ERROR_FAILURE;
}
// are we already the owner?
if (gdk_selection_owner_get(GDK_SELECTION_PRIMARY) == sWidget->window)
{
// if so, clear all the targets
__gtk_selection_target_list_remove(sWidget);
// gtk_selection_remove_all(sWidget);
}
// we arn't already the owner, so we will become it
gint have_selection = gtk_selection_owner_set(sWidget,
GDK_SELECTION_PRIMARY,
GDK_CURRENT_TIME);
if (have_selection == 0)
return NS_ERROR_FAILURE;
// get flavor list that includes all flavors that can be written (including ones
// obtained through conversion)
nsCOMPtr<nsISupportsArray> flavorList;
nsresult errCode = mTransferable->FlavorsTransferableCanExport ( getter_AddRefs(flavorList) );
if ( NS_FAILED(errCode) )
return NS_ERROR_FAILURE;
PRUint32 cnt;
flavorList->Count(&cnt);
for ( PRUint32 i=0; i<cnt; ++i )
{
nsCOMPtr<nsISupports> genericFlavor;
flavorList->GetElementAt ( i, getter_AddRefs(genericFlavor) );
nsCOMPtr<nsISupportsString> currentFlavor ( do_QueryInterface(genericFlavor) );
if ( currentFlavor ) {
nsXPIDLCString flavorStr;
currentFlavor->ToString(getter_Copies(flavorStr));
gint format = GetFormat(flavorStr);
// add these types as selection targets
RegisterFormat(format);
}
}
mIgnoreEmptyNotification = PR_FALSE;
return NS_OK;
}
void nsClipboard::AddTarget(GdkAtom aAtom)
{
gtk_selection_add_target(sWidget,
GDK_SELECTION_PRIMARY,
aAtom, aAtom);
}
gint nsClipboard::GetFormat(const char* aMimeStr)
{
gint type = TARGET_NONE;
nsCAutoString mimeStr ( CBufDescriptor(NS_CONST_CAST(char*,aMimeStr), PR_TRUE, PL_strlen(aMimeStr)+1) );
#ifdef DEBUG_CLIPBOARD
g_print(" nsClipboard::GetFormat(%s)\n", aMimeStr);
#endif
if (mimeStr.Equals(kTextMime)) {
type = TARGET_TEXT_PLAIN;
} else if (mimeStr.Equals("STRING")) {
type = TARGET_TEXT_PLAIN;
} else if (mimeStr.Equals(kXIFMime)) {
type = TARGET_TEXT_XIF;
} else if (mimeStr.Equals(kUnicodeMime)) {
type = TARGET_TEXT_UNICODE;
} else if (mimeStr.Equals(kHTMLMime)) {
type = TARGET_TEXT_HTML;
} else if (mimeStr.Equals(kAOLMailMime)) {
type = TARGET_AOLMAIL;
} else if (mimeStr.Equals(kPNGImageMime)) {
type = TARGET_IMAGE_PNG;
} else if (mimeStr.Equals(kJPEGImageMime)) {
type = TARGET_IMAGE_JPEG;
} else if (mimeStr.Equals(kGIFImageMime)) {
type = TARGET_IMAGE_GIF;
}
#ifdef WE_DO_DND
else if (mimeStr.Equals(kDropFilesMime)) {
format = CF_HDROP;
} else {
format = ::RegisterClipboardFormat(aMimeStr);
}
#endif
return type;
}
void nsClipboard::RegisterFormat(gint format)
{
#ifdef DEBUG_CLIPBOARD
g_print(" nsClipboard::RegisterFormat(%s)\n", gdk_atom_name(sSelTypes[format]));
#endif
/* when doing the selection_add_target, each case should have the same last parameter
which matches the case match */
switch(format)
{
case TARGET_TEXT_PLAIN:
// text/plain (default)
AddTarget(sSelTypes[format]);
// STRING (what X uses)
AddTarget(GDK_SELECTION_TYPE_STRING);
break;
case TARGET_TEXT_XIF:
// text/xif (default)
AddTarget(sSelTypes[format]);
break;
case TARGET_TEXT_UNICODE:
// text/unicode (default)
AddTarget(sSelTypes[format]);
// UTF8 (what X uses)
AddTarget(sSelTypes[TARGET_UTF8]);
break;
case TARGET_TEXT_HTML:
// text/html (default)
AddTarget(sSelTypes[format]);
break;
case TARGET_AOLMAIL:
// text/aolmail (default)
AddTarget(sSelTypes[format]);
break;
case TARGET_IMAGE_PNG:
// image/png (default)
AddTarget(sSelTypes[format]);
break;
case TARGET_IMAGE_JPEG:
// image/jpeg (default)
AddTarget(sSelTypes[format]);
break;
case TARGET_IMAGE_GIF:
// image/gif (default)
AddTarget(sSelTypes[format]);
break;
default:
// if we don't match something above, then just add it like its something we know about...
AddTarget(sSelTypes[format]);
}
}
PRBool nsClipboard::DoRealConvert(GdkAtom type)
{
#ifdef DEBUG_CLIPBOARD
g_print(" nsClipboard::DoRealConvert(%li)\n {\n", type);
#endif
int e = 0;
// Set a flag saying that we're blocking waiting for the callback:
mBlocking = PR_TRUE;
//
// ask X what kind of data we can get
//
#ifdef DEBUG_CLIPBOARD
g_print(" Doing real conversion of atom type '%s'\n", gdk_atom_name(type));
#endif
gtk_selection_convert(sWidget,
GDK_SELECTION_PRIMARY,
type,
GDK_CURRENT_TIME);
// Now we need to wait until the callback comes in ...
// i is in case we get a runaway (yuck).
#ifdef DEBUG_CLIPBOARD
printf(" Waiting for the callback... mBlocking = %d\n", mBlocking);
#endif /* DEBUG_CLIPBOARD */
for (e=0; mBlocking == PR_TRUE && e < 1000; ++e)
{
gtk_main_iteration_do(PR_TRUE);
}
#ifdef DEBUG_CLIPBOARD
g_print(" }\n");
#endif
if (mSelectionData.length > 0)
return PR_TRUE;
return PR_FALSE;
}
/* return PR_TRUE if we have converted or PR_FALSE if we havn't and need to keep being called */
PRBool nsClipboard::DoConvert(gint format)
{
#ifdef DEBUG_CLIPBOARD
g_print(" nsClipboard::DoConvert(%s)\n", gdk_atom_name(sSelTypes[format]));
#endif
/* when doing the selection_add_target, each case should have the same last parameter
which matches the case match */
PRBool r = PR_FALSE;
switch(format)
{
case TARGET_TEXT_PLAIN:
r = DoRealConvert(sSelTypes[format]);
if (r) return r;
r = DoRealConvert(GDK_SELECTION_TYPE_STRING);
if (r) return r;
break;
case TARGET_TEXT_XIF:
r = DoRealConvert(sSelTypes[format]);
if (r) return r;
break;
case TARGET_TEXT_UNICODE:
r = DoRealConvert(sSelTypes[format]);
if (r) return r;
r = DoRealConvert(sSelTypes[TARGET_UTF8]);
if (r) return r;
break;
case TARGET_TEXT_HTML:
r = DoRealConvert(sSelTypes[format]);
if (r) return r;
break;
case TARGET_AOLMAIL:
r = DoRealConvert(sSelTypes[format]);
if (r) return r;
break;
case TARGET_IMAGE_PNG:
r = DoRealConvert(sSelTypes[format]);
if (r) return r;
break;
case TARGET_IMAGE_JPEG:
r = DoRealConvert(sSelTypes[format]);
if (r) return r;
break;
case TARGET_IMAGE_GIF:
r = DoRealConvert(sSelTypes[format]);
if (r) return r;
break;
default:
g_print("DoConvert called with bogus format\n");
}
return r;
}
//-------------------------------------------------------------------------
//
// The blocking Paste routine
//
//-------------------------------------------------------------------------
NS_IMETHODIMP
nsClipboard::GetNativeClipboardData(nsITransferable * aTransferable)
{
#ifdef DEBUG_CLIPBOARD
printf("nsClipboard::GetNativeClipboardData()\n");
#endif /* DEBUG_CLIPBOARD */
// make sure we have a good transferable
if (nsnull == aTransferable) {
printf(" GetNativeClipboardData: Transferable is null!\n");
return NS_ERROR_FAILURE;
}
// get flavor list that includes all acceptable flavors (including ones obtained through
// conversion)
nsCOMPtr<nsISupportsArray> flavorList;
nsresult errCode = aTransferable->FlavorsTransferableCanImport ( getter_AddRefs(flavorList) );
if ( NS_FAILED(errCode) )
return NS_ERROR_FAILURE;
// Walk through flavors and see which flavor matches the one being pasted:
PRUint32 cnt;
flavorList->Count(&cnt);
nsCAutoString foundFlavor;
for ( PRUint32 i = 0; i < cnt; ++i ) {
nsCOMPtr<nsISupports> genericFlavor;
flavorList->GetElementAt ( i, getter_AddRefs(genericFlavor) );
nsCOMPtr<nsISupportsString> currentFlavor ( do_QueryInterface(genericFlavor) );
if ( currentFlavor ) {
nsXPIDLCString flavorStr;
currentFlavor->ToString ( getter_Copies(flavorStr) );
gint format = GetFormat(flavorStr);
if (DoConvert(format)) {
foundFlavor = flavorStr;
break;
}
}
}
#ifdef DEBUG_CLIPBOARD
printf(" Got the callback: '%s', %d\n",
mSelectionData.data, mSelectionData.length);
#endif /* DEBUG_CLIPBOARD */
// We're back from the callback, no longer blocking:
mBlocking = PR_FALSE;
//
// Now we have data in mSelectionData.data.
// We just have to copy it to the transferable.
//
#if 0
// pinkerton - we have the flavor already from above, so we don't need
// to re-derrive it.
nsString *name = new nsString((const char*)gdk_atom_name(mSelectionData.type));
int format = GetFormat(*name);
df->SetString((const char*)gdk_atom_name(sSelTypes[format]));
#endif
nsCOMPtr<nsISupports> genericDataWrapper;
nsPrimitiveHelpers::CreatePrimitiveForData ( foundFlavor, mSelectionData.data, mSelectionData.length, getter_AddRefs(genericDataWrapper) );
aTransferable->SetTransferData(foundFlavor,
genericDataWrapper,
mSelectionData.length);
//delete name;
// transferable is now copying the data, so we can free it.
// g_free(mSelectionData.data);
mSelectionData.data = nsnull;
mSelectionData.length = 0;
return NS_OK;
}
/**
* Called when the data from a paste comes in (recieved from gdk_selection_convert)
*
* @param aWidget the widget
* @param aSelectionData gtk selection stuff
* @param aTime time the selection was requested
*/
void
nsClipboard::SelectionReceivedCB (GtkWidget *aWidget,
GtkSelectionData *aSelectionData,
guint aTime)
{
#ifdef DEBUG_CLIPBOARD
printf(" nsClipboard::SelectionReceivedCB\n {\n");
#endif /* DEBUG_CLIPBOARD */
nsClipboard *cb =(nsClipboard *)gtk_object_get_data(GTK_OBJECT(aWidget),
"cb");
if (!cb)
{
g_print("no clipboard found.. this is bad.\n");
return;
}
cb->SelectionReceiver(aWidget, aSelectionData);
#ifdef DEBUG_CLIPBOARD
g_print(" }\n");
#endif
}
/**
* local method (called from nsClipboard::SelectionReceivedCB)
*
* @param aWidget the widget
* @param aSelectionData gtk selection stuff
*/
void
nsClipboard::SelectionReceiver (GtkWidget *aWidget,
GtkSelectionData *aSD)
{
gint type;
mBlocking = PR_FALSE;
if (aSD->length < 0)
{
printf(" Error retrieving selection: length was %d\n",
aSD->length);
return;
}
type = TARGET_NONE;
for (int i=0; i < TARGET_LAST; i++)
{
if (sSelTypes[i] == aSD->type)
{
type = i;
break;
}
}
switch (type)
{
case GDK_TARGET_STRING:
case TARGET_UTF8:
case TARGET_TEXT_PLAIN:
case TARGET_TEXT_XIF:
case TARGET_TEXT_UNICODE:
case TARGET_TEXT_HTML:
#ifdef DEBUG_CLIPBOARD
g_print(" Copying mSelectionData pointer -- ");
#endif
mSelectionData = *aSD;
mSelectionData.data = g_new(guchar, aSD->length + 1);
#ifdef DEBUG_CLIPBOARD
g_print(" Data = %s\n Length = %i\n", aSD->data, aSD->length);
#endif
memcpy(mSelectionData.data,
aSD->data,
aSD->length);
// Null terminate in case anyone cares,
// and so we can print the string for debugging:
mSelectionData.data[aSD->length] = '\0';
mSelectionData.length = aSD->length;
return;
default:
mSelectionData = *aSD;
mSelectionData.data = g_new(guchar, aSD->length + 1);
memcpy(mSelectionData.data,
aSD->data,
aSD->length);
mSelectionData.length = aSD->length;
return;
}
}
/**
* Some platforms support deferred notification for putting data on the clipboard
* This method forces the data onto the clipboard in its various formats
* This may be used if the application going away.
*
* @result NS_OK if successful.
*/
NS_IMETHODIMP nsClipboard::ForceDataToClipboard()
{
#ifdef DEBUG_CLIPBOARD
printf(" nsClipboard::ForceDataToClipboard()\n");
#endif /* DEBUG_CLIPBOARD */
// make sure we have a good transferable
if (nsnull == mTransferable) {
return NS_ERROR_FAILURE;
}
return NS_OK;
}
NS_IMETHODIMP
nsClipboard::HasDataMatchingFlavors(nsISupportsArray* aFlavorList, PRBool * outResult)
{
*outResult = PR_TRUE; // say we always do.
return NS_OK;
}
/**
* This is the callback which is called when another app
* requests the selection.
*
* @param widget The widget
* @param aSelectionData Selection data
* @param info Value passed in from the callback init
* @param time Time when the selection request came in
*/
void nsClipboard::SelectionGetCB(GtkWidget *widget,
GtkSelectionData *aSelectionData,
guint aInfo,
guint aTime)
{
#ifdef DEBUG_CLIPBOARD
printf("nsClipboard::SelectionGetCB\n");
#endif /* DEBUG_CLIPBOARD */
nsClipboard *cb = (nsClipboard *)gtk_object_get_data(GTK_OBJECT(widget),
"cb");
void *clipboardData;
PRUint32 dataLength;
nsresult rv;
// Make sure we have a transferable:
if (!cb->mTransferable) {
printf("Clipboard has no transferable!\n");
return;
}
#ifdef DEBUG_CLIPBOARD
g_print(" aInfo == %d -", aInfo);
#endif
char* dataFlavor = nsnull;
// switch aInfo (atom) to our enum
int type = (int)aInfo;
for (int i=0; i < TARGET_LAST; i++)
{
if (sSelTypes[i] == aInfo)
{
type = i;
break;
}
}
switch(type)
{
case GDK_TARGET_STRING:
case TARGET_TEXT_PLAIN:
dataFlavor = kTextMime;
break;
case TARGET_TEXT_XIF:
dataFlavor = kXIFMime;
break;
case TARGET_TEXT_UNICODE:
case TARGET_UTF8:
dataFlavor = kUnicodeMime;
break;
case TARGET_TEXT_HTML:
dataFlavor = kHTMLMime;
break;
case TARGET_AOLMAIL:
dataFlavor = kAOLMailMime;
break;
case TARGET_IMAGE_PNG:
dataFlavor = kPNGImageMime;
break;
case TARGET_IMAGE_JPEG:
dataFlavor = kJPEGImageMime;
break;
case TARGET_IMAGE_GIF:
dataFlavor = kGIFImageMime;
break;
default:
{
/* handle outside things */
}
}
#ifdef DEBUG_CLIPBOARD
g_print("- aInfo is for %s\n", gdk_atom_name(aInfo));
#endif
// Get data out of transferable.
nsCOMPtr<nsISupports> genericDataWrapper;
rv = cb->mTransferable->GetTransferData(dataFlavor,
getter_AddRefs(genericDataWrapper),
&dataLength);
nsPrimitiveHelpers::CreateDataFromPrimitive ( dataFlavor, genericDataWrapper, &clipboardData, dataLength );
if (NS_SUCCEEDED(rv) && clipboardData && dataLength > 0) {
size_t size = 1;
// find the number of bytes in the data for the below thing
// size_t size = sizeof((void*)((unsigned char)clipboardData[0]));
// g_print("************ ***************** ******************* %i\n", size);
gtk_selection_data_set(aSelectionData,
aInfo, size*8,
(unsigned char *)clipboardData,
dataLength);
nsCRT::free ( NS_REINTERPRET_CAST(char*, clipboardData) );
}
else
printf("Transferable didn't support the data flavor\n");
}
/**
* Called when another app requests selection ownership
*
* @param aWidget the widget
* @param aEvent the GdkEvent for the selection
* @param aData value passed in from the callback init
*/
void nsClipboard::SelectionClearCB(GtkWidget *aWidget,
GdkEventSelection *aEvent,
gpointer aData)
{
#ifdef DEBUG_CLIPBOARD
printf(" nsClipboard::SelectionClearCB\n");
#endif /* DEBUG_CLIPBOARD */
nsClipboard *cb = (nsClipboard *)gtk_object_get_data(GTK_OBJECT(aWidget),
"cb");
cb->EmptyClipboard();
}
/**
* The routine called when another app asks for the content of the selection
*
* @param aWidget the widget
* @param aSelectionData gtk selection stuff
* @param aData value passed in from the callback init
*/
void
nsClipboard::SelectionRequestCB (GtkWidget *aWidget,
GtkSelectionData *aSelectionData,
gpointer aData)
{
#ifdef DEBUG_CLIPBOARD
printf(" nsClipboard::SelectionRequestCB\n");
#endif /* DEBUG_CLIPBOARD */
}
/**
* ...
*
* @param aWidget the widget
* @param aSelectionData gtk selection stuff
* @param aData value passed in from the callback init
*/
void
nsClipboard::SelectionNotifyCB (GtkWidget *aWidget,
GtkSelectionData *aSelectionData,
gpointer aData)
{
#ifdef DEBUG_CLIPBOARD
printf(" nsClipboard::SelectionNotifyCB\n");
#endif /* DEBUG_CLIPBOARD */
}

View File

@@ -0,0 +1,132 @@
/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*-
*
* The contents of this file are subject to the Netscape Public
* License Version 1.1 (the "License"); you may not use this file
* except in compliance with the License. You may obtain a copy of
* the License at http://www.mozilla.org/NPL/
*
* Software distributed under the License is distributed on an "AS
* IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or
* implied. See the License for the specific language governing
* rights and limitations under the License.
*
* The Original Code is mozilla.org code.
*
* The Initial Developer of the Original Code is Netscape
* Communications Corporation. Portions created by Netscape are
* Copyright (C) 1998 Netscape Communications Corporation. All
* Rights Reserved.
*
* Contributor(s):
*/
#ifndef nsClipboard_h__
#define nsClipboard_h__
#include "nsBaseClipboard.h"
#include <gtk/gtk.h>
#include <gtk/gtkinvisible.h>
class nsITransferable;
class nsIClipboardOwner;
class nsIWidget;
/**
* Native Gtk Clipboard wrapper
*/
class nsClipboard : public nsBaseClipboard
{
public:
nsClipboard();
virtual ~nsClipboard();
// nsIClipboard
NS_IMETHOD ForceDataToClipboard();
NS_IMETHOD HasDataMatchingFlavors(nsISupportsArray* aFlavorList, PRBool * outResult);
// invisible widget. also used by dragndrop
static GtkWidget *sWidget;
protected:
NS_IMETHOD SetNativeClipboardData();
NS_IMETHOD GetNativeClipboardData(nsITransferable * aTransferable);
PRBool mIgnoreEmptyNotification;
void AddTarget(GdkAtom aAtom);
gint GetFormat(const char* aMimeStr);
void RegisterFormat(gint format);
PRBool DoRealConvert(GdkAtom type);
PRBool DoConvert(gint format);
void Init(void);
// Used for communicating pasted data
// from the asynchronous X routines back to a blocking paste:
GtkSelectionData mSelectionData;
PRBool mBlocking;
void SelectionReceiver(GtkWidget *aWidget,
GtkSelectionData *aSD);
/**
* This is the callback which is called when another app
* requests the selection.
*
* @param widget The widget
* @param aSelectionData Selection data
* @param info Value passed in from the callback init
* @param time Time when the selection request came in
*/
static void SelectionGetCB(GtkWidget *aWidget,
GtkSelectionData *aSelectionData,
guint /*info*/,
guint /*time*/);
/**
* Called when another app requests selection ownership
*
* @param aWidget the widget
* @param aEvent the GdkEvent for the selection
* @param aData value passed in from the callback init
*/
static void SelectionClearCB(GtkWidget *aWidget,
GdkEventSelection *aEvent,
gpointer aData);
/**
* The routine called when another app asks for the content of the selection
*
* @param aWidget the widget
* @param aSelectionData gtk selection stuff
* @param aData value passed in from the callback init
*/
static void SelectionRequestCB(GtkWidget *aWidget,
GtkSelectionData *aSelectionData,
gpointer data);
/**
* Called when the data from a paste comes in
*
* @param aWidget the widget
* @param aSelectionData gtk selection stuff
* @param aTime time the selection was requested
*/
static void SelectionReceivedCB(GtkWidget *aWidget,
GtkSelectionData *aSelectionData,
guint aTime);
static void SelectionNotifyCB(GtkWidget *aWidget,
GtkSelectionData *aSelectionData,
gpointer aData);
};
#endif // nsClipboard_h__

View File

@@ -0,0 +1,357 @@
/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*-
*
* The contents of this file are subject to the Netscape Public
* License Version 1.1 (the "License"); you may not use this file
* except in compliance with the License. You may obtain a copy of
* the License at http://www.mozilla.org/NPL/
*
* Software distributed under the License is distributed on an "AS
* IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or
* implied. See the License for the specific language governing
* rights and limitations under the License.
*
* The Original Code is mozilla.org code.
*
* The Initial Developer of the Original Code is Netscape
* Communications Corporation. Portions created by Netscape are
* Copyright (C) 1998 Netscape Communications Corporation. All
* Rights Reserved.
*
* Contributor(s):
*/
#include <gtk/gtk.h>
#include "nsComboBox.h"
#include "nsGUIEvent.h"
#include "nsString.h"
#define DBG 0
#define INITIAL_MAX_ITEMS 128
#define ITEMS_GROWSIZE 128
NS_IMPL_ADDREF_INHERITED(nsComboBox, nsWidget)
NS_IMPL_RELEASE_INHERITED(nsComboBox, nsWidget)
NS_IMPL_QUERY_INTERFACE3(nsComboBox, nsIComboBox, nsIListWidget, nsIWidget)
//-------------------------------------------------------------------------
//
// nsComboBox constructor
//
//-------------------------------------------------------------------------
nsComboBox::nsComboBox() : nsWidget(), nsIListWidget(), nsIComboBox()
{
NS_INIT_REFCNT();
mMultiSelect = PR_FALSE;
mItems = nsnull;
mNumItems = 0;
}
//-------------------------------------------------------------------------
//
// nsComboBox:: destructor
//
//-------------------------------------------------------------------------
nsComboBox::~nsComboBox()
{
if (mItems) {
for (GList *items = mItems; items; items = (GList*) g_list_next(items)){
g_free(items->data);
}
g_list_free(mItems);
}
gtk_widget_destroy(mCombo);
}
void nsComboBox::InitCallbacks(char * aName)
{
InstallButtonPressSignal(mWidget);
InstallButtonReleaseSignal(mWidget);
InstallEnterNotifySignal(mWidget);
InstallLeaveNotifySignal(mWidget);
// These are needed so that the events will go to us and not our parent.
AddToEventMask(mWidget,
GDK_BUTTON_PRESS_MASK |
GDK_BUTTON_RELEASE_MASK |
GDK_ENTER_NOTIFY_MASK |
GDK_EXPOSURE_MASK |
GDK_FOCUS_CHANGE_MASK |
GDK_KEY_PRESS_MASK |
GDK_KEY_RELEASE_MASK |
GDK_LEAVE_NOTIFY_MASK |
GDK_POINTER_MOTION_MASK);
}
//-------------------------------------------------------------------------
//
// initializer
//
//-------------------------------------------------------------------------
NS_METHOD nsComboBox::SetMultipleSelection(PRBool aMultipleSelections)
{
mMultiSelect = aMultipleSelections;
return NS_OK;
}
//-------------------------------------------------------------------------
//
// AddItemAt
//
//-------------------------------------------------------------------------
NS_METHOD nsComboBox::AddItemAt(nsString &aItem, PRInt32 aPosition)
{
NS_ALLOC_STR_BUF(val, aItem, 256);
mItems = g_list_insert( mItems, g_strdup(val), aPosition );
mNumItems++;
if (mCombo) {
gtk_combo_set_popdown_strings( GTK_COMBO( mCombo ), mItems );
}
NS_FREE_STR_BUF(val);
return NS_OK;
}
//-------------------------------------------------------------------------
//
// Finds an item at a postion
//
//-------------------------------------------------------------------------
PRInt32 nsComboBox::FindItem(nsString &aItem, PRInt32 aStartPos)
{
NS_ALLOC_STR_BUF(val, aItem, 256);
int i;
PRInt32 inx = -1;
GList *items = g_list_nth(mItems, aStartPos);
for(i=0; items != NULL; items = (GList *) g_list_next(items), i++ )
{
if(!strcmp(val, (gchar *) items->data))
{
inx = i;
break;
}
}
NS_FREE_STR_BUF(val);
return inx;
}
//-------------------------------------------------------------------------
//
// CountItems - Get Item Count
//
//-------------------------------------------------------------------------
PRInt32 nsComboBox::GetItemCount()
{
return (PRInt32)mNumItems;
}
//-------------------------------------------------------------------------
//
// Removes an Item at a specified location
//
//-------------------------------------------------------------------------
PRBool nsComboBox::RemoveItemAt(PRInt32 aPosition)
{
if (aPosition >= 0 && aPosition < mNumItems) {
g_free(g_list_nth(mItems, aPosition)->data);
mItems = g_list_remove_link(mItems, g_list_nth(mItems, aPosition));
mNumItems--;
if (mCombo) {
gtk_combo_set_popdown_strings(GTK_COMBO( mCombo ), mItems);
}
return PR_TRUE;
}
else
return PR_FALSE;
}
//-------------------------------------------------------------------------
//
// Removes an Item at a specified location
//
//-------------------------------------------------------------------------
PRBool nsComboBox::GetItemAt(nsString& anItem, PRInt32 aPosition)
{
if (aPosition >= 0 && aPosition < mNumItems) {
anItem = (gchar *) g_list_nth(mItems, aPosition)->data;
return PR_TRUE;
}
return PR_FALSE;
}
//-------------------------------------------------------------------------
//
// Gets the selected of selected item
//
//-------------------------------------------------------------------------
NS_METHOD nsComboBox::GetSelectedItem(nsString& aItem)
{
aItem.Truncate();
if (mCombo) {
aItem = gtk_entry_get_text (GTK_ENTRY (GTK_COMBO(mCombo)->entry));
}
return NS_OK;
}
//-------------------------------------------------------------------------
//
// Gets the list of selected otems
//
//-------------------------------------------------------------------------
PRInt32 nsComboBox::GetSelectedIndex()
{
nsString nsstring;
GetSelectedItem(nsstring);
return FindItem(nsstring, 0);
}
//-------------------------------------------------------------------------
//
// SelectItem
//
//-------------------------------------------------------------------------
NS_METHOD nsComboBox::SelectItem(PRInt32 aPosition)
{
GList *pos;
if (!mItems)
return NS_ERROR_FAILURE;
pos = g_list_nth(mItems, aPosition);
if (!pos)
return NS_ERROR_FAILURE;
if (mCombo) {
gtk_entry_set_text(GTK_ENTRY(GTK_COMBO(mCombo)->entry),
(gchar *) pos->data);
}
return NS_OK;
}
//-------------------------------------------------------------------------
//
// GetSelectedCount
//
//-------------------------------------------------------------------------
PRInt32 nsComboBox::GetSelectedCount()
{
if (!mMultiSelect) {
PRInt32 inx = GetSelectedIndex();
return (inx == -1? 0 : 1);
} else {
return 0;
}
}
//-------------------------------------------------------------------------
//
// GetSelectedIndices
//
//-------------------------------------------------------------------------
NS_METHOD nsComboBox::GetSelectedIndices(PRInt32 aIndices[], PRInt32 aSize)
{
// this is an error
return NS_ERROR_FAILURE;
}
//-------------------------------------------------------------------------
//
// Deselect
//
//-------------------------------------------------------------------------
NS_METHOD nsComboBox::Deselect()
{
if (mMultiSelect) {
return NS_ERROR_FAILURE;
}
return NS_OK;
}
//-------------------------------------------------------------------------
//
// Create the native GtkCombo widget
//
//-------------------------------------------------------------------------
NS_METHOD nsComboBox::CreateNative(GtkObject *parentWindow)
{
mWidget = ::gtk_event_box_new();
::gtk_widget_set_name(mWidget, "nsComboBox");
mCombo = ::gtk_combo_new();
gtk_widget_show(mCombo);
/* make the stuff uneditable */
gtk_entry_set_editable(GTK_ENTRY(GTK_COMBO(mCombo)->entry), PR_FALSE);
gtk_signal_connect(GTK_OBJECT(mCombo),
"destroy",
GTK_SIGNAL_FUNC(DestroySignal),
this);
gtk_signal_connect(GTK_OBJECT(GTK_COMBO(mCombo)->popwin),
"unmap",
GTK_SIGNAL_FUNC(UnmapSignal),
this);
gtk_container_add(GTK_CONTAINER(mWidget), mCombo);
return NS_OK;
}
void
nsComboBox::OnDestroySignal(GtkWidget* aGtkWidget)
{
if (aGtkWidget == mCombo) {
mCombo = nsnull;
}
else {
nsWidget::OnDestroySignal(aGtkWidget);
}
}
gint
nsComboBox::UnmapSignal(GtkWidget* aGtkWidget, nsComboBox* aCombo)
{
if (!aCombo) return PR_FALSE;
aCombo->OnUnmapSignal(aGtkWidget);
return PR_TRUE;
}
void
nsComboBox::OnUnmapSignal(GtkWidget * aWidget)
{
if (!aWidget) return;
// Generate a NS_CONTROL_CHANGE event and send it to the frame
nsGUIEvent event;
event.eventStructType = NS_GUI_EVENT;
nsPoint point(0,0);
InitEvent(event, NS_CONTROL_CHANGE, &point);
DispatchWindowEvent(&event);
}
//-------------------------------------------------------------------------
//
// Get handle for style
//
//-------------------------------------------------------------------------
/*virtual*/
void nsComboBox::SetFontNative(GdkFont *aFont)
{
GtkStyle *style = gtk_style_copy(GTK_WIDGET (g_list_nth_data(gtk_container_children(GTK_CONTAINER (mWidget)),0))->style);
// gtk_style_copy ups the ref count of the font
gdk_font_unref (style->font);
style->font = aFont;
gdk_font_ref(style->font);
gtk_widget_set_style(GTK_BIN (mWidget)->child, style);
gtk_style_unref(style);
}

View File

@@ -0,0 +1,75 @@
/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*-
*
* The contents of this file are subject to the Netscape Public
* License Version 1.1 (the "License"); you may not use this file
* except in compliance with the License. You may obtain a copy of
* the License at http://www.mozilla.org/NPL/
*
* Software distributed under the License is distributed on an "AS
* IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or
* implied. See the License for the specific language governing
* rights and limitations under the License.
*
* The Original Code is mozilla.org code.
*
* The Initial Developer of the Original Code is Netscape
* Communications Corporation. Portions created by Netscape are
* Copyright (C) 1998 Netscape Communications Corporation. All
* Rights Reserved.
*
* Contributor(s):
*/
#ifndef nsComboBox_h__
#define nsComboBox_h__
#include "nsWidget.h"
#include "nsIComboBox.h"
/**
* Native GTK+ Listbox wrapper
*/
class nsComboBox : public nsWidget,
public nsIListWidget,
public nsIComboBox
{
public:
nsComboBox();
virtual ~nsComboBox();
NS_DECL_ISUPPORTS_INHERITED
// nsIComboBox interface
NS_IMETHOD AddItemAt(nsString &aItem, PRInt32 aPosition);
virtual PRInt32 FindItem(nsString &aItem, PRInt32 aStartPos);
virtual PRInt32 GetItemCount();
virtual PRBool RemoveItemAt(PRInt32 aPosition);
virtual PRBool GetItemAt(nsString& anItem, PRInt32 aPosition);
NS_IMETHOD GetSelectedItem(nsString& aItem);
virtual PRInt32 GetSelectedIndex();
NS_IMETHOD SelectItem(PRInt32 aPosition);
NS_IMETHOD Deselect() ;
// nsIComboBox interface
NS_IMETHOD SetMultipleSelection(PRBool aMultipleSelections);
PRInt32 GetSelectedCount();
NS_IMETHOD GetSelectedIndices(PRInt32 aIndices[], PRInt32 aSize);
virtual void SetFontNative(GdkFont *aFont);
protected:
NS_IMETHOD CreateNative(GtkObject *parentWindow);
virtual void InitCallbacks(char * aName = nsnull);
virtual void OnDestroySignal(GtkWidget* aGtkWidget);
virtual void OnUnmapSignal(GtkWidget* aWidget);
static gint UnmapSignal(GtkWidget* aGtkWidget, nsComboBox* aCombo);
GtkWidget *mCombo; /* workaround for gtkcombo bug */
GList *mItems;
PRBool mMultiSelect;
int mNumItems;
};
#endif // nsComboBox_h__

View File

@@ -0,0 +1,744 @@
/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*-
*
* The contents of this file are subject to the Netscape Public
* License Version 1.1 (the "License"); you may not use this file
* except in compliance with the License. You may obtain a copy of
* the License at http://www.mozilla.org/NPL/
*
* Software distributed under the License is distributed on an "AS
* IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or
* implied. See the License for the specific language governing
* rights and limitations under the License.
*
* The Original Code is mozilla.org code.
*
* The Initial Developer of the Original Code is Netscape
* Communications Corporation. Portions created by Netscape are
* Copyright (C) 1998 Netscape Communications Corporation. All
* Rights Reserved.
*
* Contributor(s):
*/
#include <gtk/gtk.h>
#include "nsContextMenu.h"
#include "nsIComponentManager.h"
#include "nsIDOMElement.h"
#include "nsIDOMNode.h"
#include "nsIMenuBar.h"
#include "nsIMenuItem.h"
#include "nsIMenuListener.h"
#include "nsString.h"
#include "nsGtkEventHandler.h"
#include "nsCOMPtr.h"
#include "nsWidgetsCID.h"
static NS_DEFINE_CID(kMenuCID, NS_MENU_CID);
static NS_DEFINE_CID(kMenuItemCID, NS_MENUITEM_CID);
static NS_DEFINE_IID(kISupportsIID, NS_ISUPPORTS_IID);
//-------------------------------------------------------------------------
nsresult nsContextMenu::QueryInterface(REFNSIID aIID, void** aInstancePtr)
{
if (NULL == aInstancePtr) {
return NS_ERROR_NULL_POINTER;
}
*aInstancePtr = NULL;
if (aIID.Equals(nsIMenu::GetIID())) {
*aInstancePtr = (void*)(nsIMenu*) this;
NS_ADDREF_THIS();
return NS_OK;
}
if (aIID.Equals(kISupportsIID)) {
*aInstancePtr = (void*)(nsISupports*)(nsIMenu*)this;
NS_ADDREF_THIS();
return NS_OK;
}
if (aIID.Equals(nsIMenuListener::GetIID())) {
*aInstancePtr = (void*)(nsIMenuListener*)this;
NS_ADDREF_THIS();
return NS_OK;
}
return NS_NOINTERFACE;
}
//-------------------------------------------------------------------------
NS_IMPL_ADDREF(nsContextMenu)
NS_IMPL_RELEASE(nsContextMenu)
//-------------------------------------------------------------------------
//
// nsContextMenu constructor
//
//-------------------------------------------------------------------------
nsContextMenu::nsContextMenu()
{
NS_INIT_REFCNT();
mNumMenuItems = 0;
mMenu = nsnull;
mParent = nsnull;
mListener = nsnull;
mConstructCalled = PR_FALSE;
mDOMNode = nsnull;
mWebShell = nsnull;
mDOMElement = nsnull;
mAlignment = "topleft";
mAnchorAlignment = "none";
}
//-------------------------------------------------------------------------
//
// nsContextMenu destructor
//
//-------------------------------------------------------------------------
nsContextMenu::~nsContextMenu()
{
}
//-------------------------------------------------------------------------
//
// Create the proper widget
//
//-------------------------------------------------------------------------
NS_METHOD nsContextMenu::Create(nsISupports *aParent,
const nsString& anAlignment,
const nsString& anAnchorAlignment)
{
if(aParent)
{
nsIWidget *parent = nsnull;
aParent->QueryInterface(nsIWidget::GetIID(), (void**) &parent);
if(parent)
{
mParent = parent;
NS_RELEASE(parent);
}
}
mAlignment = anAlignment;
mAnchorAlignment = anAnchorAlignment;
mMenu = gtk_menu_new();
gtk_signal_connect (GTK_OBJECT (mMenu), "map",
GTK_SIGNAL_FUNC(menu_map_handler),
this);
gtk_signal_connect (GTK_OBJECT (mMenu), "unmap",
GTK_SIGNAL_FUNC(menu_unmap_handler),
this);
return NS_OK;
}
//-------------------------------------------------------------------------
NS_METHOD nsContextMenu::GetParent(nsISupports*& aParent)
{
aParent = nsnull;
if (nsnull != mParent) {
return mParent->QueryInterface(kISupportsIID,
(void**)&aParent);
}
return NS_ERROR_FAILURE;
}
//-------------------------------------------------------------------------
NS_METHOD nsContextMenu::AddItem(nsISupports * aItem)
{
if(aItem)
{
nsIMenuItem * menuitem = nsnull;
aItem->QueryInterface(nsIMenuItem::GetIID(),
(void**)&menuitem);
if(menuitem)
{
AddMenuItem(menuitem); // nsMenu now owns this
NS_RELEASE(menuitem);
}
else
{
nsIMenu * menu = nsnull;
aItem->QueryInterface(nsIMenu::GetIID(),
(void**)&menu);
if(menu)
{
AddMenu(menu); // nsMenu now owns this
NS_RELEASE(menu);
}
}
}
return NS_OK;
}
//-------------------------------------------------------------------------
NS_METHOD nsContextMenu::AddMenuItem(nsIMenuItem * aMenuItem)
{
GtkWidget *widget;
void *voidData;
aMenuItem->GetNativeData(voidData);
widget = GTK_WIDGET(voidData);
gtk_menu_shell_append (GTK_MENU_SHELL (mMenu), widget);
// XXX add aMenuItem to internal data structor list
// Need to be adding an nsISupports *, not nsIMenuItem *
nsISupports * supports = nsnull;
aMenuItem->QueryInterface(kISupportsIID,
(void**)&supports);
{
mMenuItemVoidArray.AppendElement(supports);
mNumMenuItems++;
}
return NS_OK;
}
//-------------------------------------------------------------------------
NS_METHOD nsContextMenu::AddMenu(nsIMenu * aMenu)
{
nsString Label;
GtkWidget *newmenu=nsnull;
char *labelStr;
void *voidData=NULL;
aMenu->GetLabel(Label);
labelStr = Label.ToNewCString();
// Create nsMenuItem
nsIMenuItem * pnsMenuItem = nsnull;
nsresult rv = nsComponentManager::CreateInstance(kMenuItemCID,
nsnull,
nsIMenuItem::GetIID(),
(void**)&pnsMenuItem);
if (NS_OK == rv) {
nsISupports * supports = nsnull;
QueryInterface(kISupportsIID, (void**) &supports);
pnsMenuItem->Create(supports, labelStr, PR_FALSE); //PR_TRUE);
NS_RELEASE(supports);
pnsMenuItem->QueryInterface(kISupportsIID, (void**) &supports);
AddItem(supports); // Parent should now own menu item
NS_RELEASE(supports);
void * menuitem = nsnull;
pnsMenuItem->GetNativeData(menuitem);
voidData = NULL;
aMenu->GetNativeData(&voidData);
newmenu = GTK_WIDGET(voidData);
gtk_menu_item_set_submenu (GTK_MENU_ITEM (menuitem), newmenu);
NS_RELEASE(pnsMenuItem);
}
nsCRT::free(labelStr);
return NS_OK;
}
//-------------------------------------------------------------------------
NS_METHOD nsContextMenu::AddSeparator()
{
// Create nsMenuItem
nsIMenuItem * pnsMenuItem = nsnull;
nsresult rv = nsComponentManager::CreateInstance(
kMenuItemCID, nsnull, nsIMenuItem::GetIID(), (void**)&pnsMenuItem);
if (NS_OK == rv) {
nsString tmp = "separator";
nsISupports * supports = nsnull;
QueryInterface(kISupportsIID, (void**) &supports);
pnsMenuItem->Create(supports, tmp, PR_TRUE);
NS_RELEASE(supports);
pnsMenuItem->QueryInterface(kISupportsIID, (void**) &supports);
AddItem(supports); // Parent should now own menu item
NS_RELEASE(supports);
NS_RELEASE(pnsMenuItem);
}
return NS_OK;
}
//-------------------------------------------------------------------------
NS_METHOD nsContextMenu::GetItemCount(PRUint32 &aCount)
{
// this should be right.. does it need to be +1 ?
aCount = g_list_length(GTK_MENU_SHELL(mMenu)->children);
//g_print("nsMenu::GetItemCount = %i\n", aCount);
return NS_OK;
}
//-------------------------------------------------------------------------
NS_METHOD nsContextMenu::GetItemAt(const PRUint32 aCount, nsISupports *& aMenuItem)
{
return NS_OK;
}
//-------------------------------------------------------------------------
NS_METHOD nsContextMenu::InsertItemAt(const PRUint32 aCount, nsISupports * aMenuItem)
{
return NS_OK;
}
//-------------------------------------------------------------------------
NS_METHOD nsContextMenu::InsertSeparator(const PRUint32 aCount)
{
return NS_OK;
}
//-------------------------------------------------------------------------
NS_METHOD nsContextMenu::RemoveItem(const PRUint32 aCount)
{
#if 0
// this may work here better than Removeall(), but i'm not sure how to test this one
nsISupports *item = mMenuItemVoidArray[aPos];
delete item;
mMenuItemVoidArray.RemoveElementAt(aPos);
#endif
/*
gtk_menu_shell_remove (GTK_MENU_SHELL (mMenu), item);
nsCRT::free(labelStr);
voidData = NULL;
aMenu->GetNativeData(&voidData);
newmenu = GTK_WIDGET(voidData);
gtk_menu_item_remove_submenu (GTK_MENU_ITEM (item));
*/
return NS_OK;
}
//-------------------------------------------------------------------------
NS_METHOD nsContextMenu::RemoveAll()
{
//g_print("nsMenu::RemoveAll()\n");
#undef DEBUG_pavlov
#ifdef DEBUG_pavlov
// this doesn't work quite right, but this is about all that should really be needed
int i=0;
nsIMenu *menu = nsnull;
nsIMenuItem *menuitem = nsnull;
nsISupports *item = nsnull;
for (i=mMenuItemVoidArray.Count(); i>0; i--)
{
item = (nsISupports*)mMenuItemVoidArray[i-1];
if(nsnull != item)
{
if (NS_OK == item->QueryInterface(nsIMenuItem::GetIID(), (void**)&menuitem))
{
// we do this twice because we have to do it once for QueryInterface,
// then we want to get rid of it.
// g_print("remove nsMenuItem\n");
NS_RELEASE(menuitem);
NS_RELEASE(item);
menuitem = nsnull;
} else if (NS_OK == item->QueryInterface(nsIMenu::GetIID(), (void**)&menu)) {
#ifdef NOISY_MENUS
g_print("remove nsMenu\n");
#endif
NS_RELEASE(menu);
NS_RELEASE(item);
menu = nsnull;
}
// mMenuItemVoidArray.RemoveElementAt(i-1);
}
}
mMenuItemVoidArray.Clear();
return NS_OK;
#else
for (int i = mMenuItemVoidArray.Count(); i > 0; i--) {
if(nsnull != mMenuItemVoidArray[i-1]) {
nsIMenuItem * menuitem = nsnull;
((nsISupports*)mMenuItemVoidArray[i-1])->QueryInterface(nsIMenuItem::GetIID(),
(void**)&menuitem);
if(menuitem) {
void *gtkmenuitem = nsnull;
menuitem->GetNativeData(gtkmenuitem);
if (gtkmenuitem) {
gtk_widget_ref(GTK_WIDGET(gtkmenuitem));
//gtk_widget_destroy(GTK_WIDGET(gtkmenuitem));
g_print("%p, %p\n",
GTK_WIDGET(GTK_CONTAINER(GTK_MENU_SHELL(GTK_MENU(mMenu)))),
GTK_WIDGET(GTK_WIDGET(gtkmenuitem)->parent));
gtk_container_remove(GTK_CONTAINER(GTK_MENU_SHELL(GTK_MENU(mMenu))),
GTK_WIDGET(gtkmenuitem));
}
} else {
nsIMenu * menu= nsnull;
((nsISupports*)mMenuItemVoidArray[i-1])->QueryInterface(nsIMenu::GetIID(),
(void**)&menu);
if(menu)
{
void * gtkmenu = nsnull;
menu->GetNativeData(&gtkmenu);
if(gtkmenu){
g_print("nsMenu::RemoveAll() trying to remove nsMenu");
//gtk_menu_item_remove_submenu (GTK_MENU_ITEM (item));
}
}
}
}
}
//g_print("end RemoveAll\n");
return NS_OK;
#endif
}
//-------------------------------------------------------------------------
NS_METHOD nsContextMenu::GetNativeData(void ** aData)
{
*aData = (void *)mMenu;
return NS_OK;
}
//-------------------------------------------------------------------------
NS_METHOD nsContextMenu::AddMenuListener(nsIMenuListener * aMenuListener)
{
mListener = aMenuListener;
NS_ADDREF(mListener);
return NS_OK;
}
//-------------------------------------------------------------------------
NS_METHOD nsContextMenu::RemoveMenuListener(nsIMenuListener * aMenuListener)
{
if (aMenuListener == mListener) {
NS_IF_RELEASE(mListener);
}
return NS_OK;
}
//-------------------------------------------------------------------------
// nsIMenuListener interface
//-------------------------------------------------------------------------
nsEventStatus nsContextMenu::MenuItemSelected(const nsMenuEvent & aMenuEvent)
{
if (nsnull != mListener) {
mListener->MenuSelected(aMenuEvent);
}
return nsEventStatus_eIgnore;
}
void menu_popup_position(GtkMenu *menu,
gint *x,
gint *y,
gpointer data)
{
nsContextMenu *cm = (nsContextMenu*)data;
*x = cm->GetX();
*y = cm->GetY();
}
nsEventStatus nsContextMenu::MenuSelected(const nsMenuEvent & aMenuEvent)
{
MenuConstruct(aMenuEvent,
mParent,
mDOMNode,
mWebShell);
//GtkWidget *parent = GTK_WIDGET(mParent->GetNativeData(NS_NATIVE_WIDGET));
gtk_menu_popup (GTK_MENU(mMenu),
(GtkWidget*)nsnull, (GtkWidget*)nsnull,
menu_popup_position,
this, 1, GDK_CURRENT_TIME);
/*
if (nsnull != mListener) {
mListener->MenuSelected(aMenuEvent);
}
*/
return nsEventStatus_eIgnore;
}
//-------------------------------------------------------------------------
nsIMenuItem * nsContextMenu::FindMenuItem(nsIContextMenu * aMenu, PRUint32 aId)
{
return nsnull;
}
//-------------------------------------------------------------------------
nsEventStatus nsContextMenu::MenuDeselected(const nsMenuEvent & aMenuEvent)
{
if (nsnull != mListener) {
mListener->MenuDeselected(aMenuEvent);
}
return nsEventStatus_eIgnore;
}
//-------------------------------------------------------------------------
nsEventStatus nsContextMenu::MenuConstruct(const nsMenuEvent &aMenuEvent,
nsIWidget *aParentWindow,
void *menuNode,
void *aWebShell)
{
//g_print("nsMenu::MenuConstruct called \n");
if(menuNode){
SetDOMNode((nsIDOMNode*)menuNode);
}
if(!aWebShell){
aWebShell = mWebShell;
}
// First open the menu.
nsCOMPtr<nsIDOMElement> domElement = do_QueryInterface(mDOMNode);
if (domElement)
domElement->SetAttribute("open", "true");
// Begin menuitem inner loop
nsCOMPtr<nsIDOMNode> menuitemNode;
((nsIDOMNode*)mDOMNode)->GetFirstChild(getter_AddRefs(menuitemNode));
unsigned short menuIndex = 0;
while (menuitemNode) {
nsCOMPtr<nsIDOMElement> menuitemElement(do_QueryInterface(menuitemNode));
if (menuitemElement) {
nsString menuitemNodeType;
nsString menuitemName;
menuitemElement->GetNodeName(menuitemNodeType);
if (menuitemNodeType.Equals("menuitem")) {
// LoadMenuItem
LoadMenuItem(this,
menuitemElement,
menuitemNode,
menuIndex,
(nsIWebShell*)aWebShell);
} else if (menuitemNodeType.Equals("separator")) {
AddSeparator();
} else if (menuitemNodeType.Equals("menu")) {
// Load a submenu
LoadSubMenu(this, menuitemElement, menuitemNode);
}
}
++menuIndex;
nsCOMPtr<nsIDOMNode> oldmenuitemNode(menuitemNode);
oldmenuitemNode->GetNextSibling(getter_AddRefs(menuitemNode));
} // end menu item innner loop
return nsEventStatus_eIgnore;
}
//-------------------------------------------------------------------------
nsEventStatus nsContextMenu::MenuDestruct(const nsMenuEvent & aMenuEvent)
{
// Close the node.
nsCOMPtr<nsIDOMElement> domElement = do_QueryInterface(mDOMNode);
if (domElement)
domElement->RemoveAttribute("open");
//g_print("nsMenu::MenuDestruct called \n");
mConstructCalled = PR_FALSE;
RemoveAll();
return nsEventStatus_eIgnore;
}
//----------------------------------------
void nsContextMenu::LoadMenuItem(nsIMenu *pParentMenu,
nsIDOMElement *menuitemElement,
nsIDOMNode *menuitemNode,
unsigned short menuitemIndex,
nsIWebShell *aWebShell)
{
static const char* NS_STRING_TRUE = "true";
nsString disabled;
nsString menuitemName;
nsString menuitemCmd;
menuitemElement->GetAttribute(nsAutoString("disabled"), disabled);
menuitemElement->GetAttribute(nsAutoString("name"), menuitemName);
menuitemElement->GetAttribute(nsAutoString("cmd"), menuitemCmd);
// Create nsMenuItem
nsIMenuItem * pnsMenuItem = nsnull;
nsresult rv = nsComponentManager::CreateInstance(kMenuItemCID,
nsnull,
nsIMenuItem::GetIID(),
(void**)&pnsMenuItem);
if (NS_OK == rv) {
pnsMenuItem->Create(pParentMenu, menuitemName, PR_FALSE);
nsISupports * supports = nsnull;
pnsMenuItem->QueryInterface(kISupportsIID, (void**) &supports);
pParentMenu->AddItem(supports); // Parent should now own menu item
NS_RELEASE(supports);
if(disabled == NS_STRING_TRUE) {
pnsMenuItem->SetEnabled(PR_FALSE);
}
// Create MenuDelegate - this is the intermediator inbetween
// the DOM node and the nsIMenuItem
// The nsWebShellWindow wacthes for Document changes and then notifies the
// the appropriate nsMenuDelegate object
nsCOMPtr<nsIDOMElement> domElement(do_QueryInterface(menuitemNode));
if (!domElement) {
//return NS_ERROR_FAILURE;
return;
}
nsAutoString cmdAtom("onclick");
nsString cmdName;
domElement->GetAttribute(cmdAtom, cmdName);
pnsMenuItem->SetCommand(cmdName);
// DO NOT use passed in webshell because of messed up windows dynamic loading
// code.
pnsMenuItem->SetWebShell(mWebShell);
pnsMenuItem->SetDOMElement(domElement);
NS_RELEASE(pnsMenuItem);
}
return;
}
//----------------------------------------
void nsContextMenu::LoadSubMenu(nsIMenu *pParentMenu,
nsIDOMElement *menuElement,
nsIDOMNode *menuNode)
{
nsString menuName;
menuElement->GetAttribute(nsAutoString("name"), menuName);
//printf("Creating Menu [%s] \n", menuName.ToNewCString()); // this leaks
// Create nsMenu
nsIMenu * pnsMenu = nsnull;
nsresult rv = nsComponentManager::CreateInstance(kMenuCID,
nsnull,
nsIMenu::GetIID(),
(void**)&pnsMenu);
if (NS_OK == rv) {
// Call Create
nsISupports * supports = nsnull;
pParentMenu->QueryInterface(kISupportsIID, (void**) &supports);
pnsMenu->Create(supports, menuName);
NS_RELEASE(supports); // Balance QI
// Set nsMenu Name
pnsMenu->SetLabel(menuName);
supports = nsnull;
pnsMenu->QueryInterface(kISupportsIID, (void**) &supports);
pParentMenu->AddItem(supports); // parent takes ownership
NS_RELEASE(supports);
pnsMenu->SetWebShell(mWebShell);
pnsMenu->SetDOMNode(menuNode);
/*
// Begin menuitem inner loop
unsigned short menuIndex = 0;
nsCOMPtr<nsIDOMNode> menuitemNode;
menuNode->GetFirstChild(getter_AddRefs(menuitemNode));
while (menuitemNode) {
nsCOMPtr<nsIDOMElement> menuitemElement(do_QueryInterface(menuitemNode));
if (menuitemElement) {
nsString menuitemNodeType;
menuitemElement->GetNodeName(menuitemNodeType);
#ifdef DEBUG_saari
printf("Type [%s] %d\n", menuitemNodeType.ToNewCString(), menuitemNodeType.Equals("separator"));
#endif
if (menuitemNodeType.Equals("menuitem")) {
// Load a menuitem
LoadMenuItem(pnsMenu, menuitemElement, menuitemNode, menuIndex, mWebShell);
} else if (menuitemNodeType.Equals("separator")) {
pnsMenu->AddSeparator();
} else if (menuitemNodeType.Equals("menu")) {
// Add a submenu
LoadSubMenu(pnsMenu, menuitemElement, menuitemNode);
}
}
++menuIndex;
nsCOMPtr<nsIDOMNode> oldmenuitemNode(menuitemNode);
oldmenuitemNode->GetNextSibling(getter_AddRefs(menuitemNode));
} // end menu item innner loop
*/
}
}
//----------------------------------------
void nsContextMenu::LoadMenuItem(nsIContextMenu *pParentMenu,
nsIDOMElement *menuitemElement,
nsIDOMNode *menuitemNode,
unsigned short menuitemIndex,
nsIWebShell *aWebShell)
{
}
//----------------------------------------
void nsContextMenu::LoadSubMenu(nsIContextMenu *pParentMenu,
nsIDOMElement *menuElement,
nsIDOMNode *menuNode)
{
}
//-------------------------------------------------------------------------
NS_METHOD nsContextMenu::SetLocation(PRInt32 aX, PRInt32 aY)
{
mX = aX;
mY = aY;
return NS_OK;
}
// local methods
gint nsContextMenu::GetX(void)
{
return mX;
}
gint nsContextMenu::GetY(void)
{
return mY;
}
// end silly local methods
//-------------------------------------------------------------------------
NS_METHOD nsContextMenu::SetDOMNode(nsIDOMNode *aMenuNode)
{
mDOMNode = aMenuNode;
return NS_OK;
}
//-------------------------------------------------------------------------
NS_METHOD nsContextMenu::SetDOMElement(nsIDOMElement *aMenuElement)
{
mDOMElement = aMenuElement;
return NS_OK;
}
//-------------------------------------------------------------------------
NS_METHOD nsContextMenu::SetWebShell(nsIWebShell *aWebShell)
{
mWebShell = aWebShell;
return NS_OK;
}

View File

@@ -0,0 +1,139 @@
/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*-
*
* The contents of this file are subject to the Netscape Public
* License Version 1.1 (the "License"); you may not use this file
* except in compliance with the License. You may obtain a copy of
* the License at http://www.mozilla.org/NPL/
*
* Software distributed under the License is distributed on an "AS
* IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or
* implied. See the License for the specific language governing
* rights and limitations under the License.
*
* The Original Code is mozilla.org code.
*
* The Initial Developer of the Original Code is Netscape
* Communications Corporation. Portions created by Netscape are
* Copyright (C) 1998 Netscape Communications Corporation. All
* Rights Reserved.
*
* Contributor(s):
*/
#ifndef nsContextMenu_h__
#define nsContextMenu_h__
#include "nsIContextMenu.h"
#include "nsISupportsArray.h"
#include "nsVoidArray.h"
#include "nsIDOMElement.h"
#include "nsIWebShell.h"
class nsIMenuListener;
/**
* Native Win32 button wrapper
*/
class nsContextMenu : public nsIContextMenu, public nsIMenuListener
{
public:
nsContextMenu();
virtual ~nsContextMenu();
NS_DECL_ISUPPORTS
//nsIMenuListener interface
nsEventStatus MenuItemSelected(const nsMenuEvent & aMenuEvent);
nsEventStatus MenuSelected(const nsMenuEvent & aMenuEvent);
nsEventStatus MenuDeselected(const nsMenuEvent & aMenuEvent);
nsEventStatus MenuConstruct(const nsMenuEvent & aMenuEvent,
nsIWidget * aParentWindow,
void * menubarNode,
void * aWebShell);
nsEventStatus MenuDestruct(const nsMenuEvent & aMenuEvent);
// nsIMenu Methods
NS_IMETHOD Create(nsISupports * aParent,
const nsString& anAlignment,
const nsString& aAnchorAlign);
NS_IMETHOD GetParent(nsISupports *&aParent);
NS_IMETHOD AddItem(nsISupports * aItem);
NS_IMETHOD AddSeparator();
NS_IMETHOD GetItemCount(PRUint32 &aCount);
NS_IMETHOD GetItemAt(const PRUint32 aPos, nsISupports *& aMenuItem);
NS_IMETHOD InsertItemAt(const PRUint32 aPos, nsISupports * aMenuItem);
NS_IMETHOD RemoveItem(const PRUint32 aPos);
NS_IMETHOD RemoveAll();
NS_IMETHOD GetNativeData(void** aData);
NS_IMETHOD AddMenuListener(nsIMenuListener * aMenuListener);
NS_IMETHOD RemoveMenuListener(nsIMenuListener * aMenuListener);
//
NS_IMETHOD AddMenuItem(nsIMenuItem * aMenuItem);
NS_IMETHOD AddMenu(nsIMenu * aMenu);
NS_IMETHOD InsertSeparator(const PRUint32 aCount);
NS_IMETHOD SetDOMNode(nsIDOMNode * menuNode);
NS_IMETHOD SetDOMElement(nsIDOMElement * menuElement);
NS_IMETHOD SetWebShell(nsIWebShell * aWebShell);
NS_IMETHOD SetLocation(PRInt32 aX, PRInt32 aY);
gint GetX(void);
gint GetY(void);
protected:
nsIMenuBar * GetMenuBar(nsIMenu * aMenu);
nsIWidget * GetParentWidget();
char* GetACPString(nsString& aStr);
void LoadMenuItem(nsIMenu * pParentMenu,
nsIDOMElement * menuitemElement,
nsIDOMNode * menuitemNode,
unsigned short menuitemIndex,
nsIWebShell * aWebShell);
void LoadSubMenu(nsIMenu * pParentMenu,
nsIDOMElement * menuElement,
nsIDOMNode * menuNode);
void LoadMenuItem(nsIContextMenu * pParentMenu,
nsIDOMElement * menuitemElement,
nsIDOMNode * menuitemNode,
unsigned short menuitemIndex,
nsIWebShell * aWebShell);
void LoadSubMenu(nsIContextMenu * pParentMenu,
nsIDOMElement * menuElement,
nsIDOMNode * menuNode);
nsIMenuItem * FindMenuItem(nsIContextMenu * aMenu, PRUint32 aId);
nsString mLabel;
PRUint32 mNumMenuItems;
GtkWidget *mMenu;
nsVoidArray mMenuItemVoidArray;
nsIWidget *mParent;
nsIMenuListener * mListener;
PRBool mConstructCalled;
nsIDOMNode * mDOMNode;
nsIWebShell * mWebShell;
nsIDOMElement * mDOMElement;
nsString mAlignment;
nsString mAnchorAlignment;
PRInt32 mX;
PRInt32 mY;
};
#endif // nsContextMenu_h__

View File

@@ -0,0 +1,592 @@
/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*-
*
* The contents of this file are subject to the Netscape Public
* License Version 1.1 (the "License"); you may not use this file
* except in compliance with the License. You may obtain a copy of
* the License at http://www.mozilla.org/NPL/
*
* Software distributed under the License is distributed on an "AS
* IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or
* implied. See the License for the specific language governing
* rights and limitations under the License.
*
* The Original Code is mozilla.org code.
*
* The Initial Developer of the Original Code is Netscape
* Communications Corporation. Portions created by Netscape are
* Copyright (C) 1998 Netscape Communications Corporation. All
* Rights Reserved.
*
* Contributor(s):
*/
#include "nsDragService.h"
#include "nsITransferable.h"
#include "nsString.h"
#include "nsClipboard.h"
#include "nsIRegion.h"
#include "nsVoidArray.h"
#include "nsISupportsPrimitives.h"
#include "nsPrimitiveHelpers.h"
#include "nsCOMPtr.h"
#include "nsXPIDLString.h"
#include "nsWidgetsCID.h"
NS_IMPL_ADDREF_INHERITED(nsDragService, nsBaseDragService)
NS_IMPL_RELEASE_INHERITED(nsDragService, nsBaseDragService)
NS_IMPL_QUERY_INTERFACE2(nsDragService, nsIDragService, nsIDragSession)
#define DEBUG_DRAG 1
//-------------------------------------------------------------------------
//
// DragService constructor
//
//-------------------------------------------------------------------------
nsDragService::nsDragService()
{
NS_INIT_REFCNT();
mWidget = nsnull;
mNumFlavors = 0;
}
//-------------------------------------------------------------------------
//
// DragService destructor
//
//-------------------------------------------------------------------------
nsDragService::~nsDragService()
{
}
enum {
TARGET_STRING,
TARGET_ROOTWIN
};
static GtkTargetEntry target_table[] = {
{ "STRING", 0, TARGET_STRING },
{ "text/plain", 0, TARGET_STRING },
{ "application/x-rootwin-drop", 0, TARGET_ROOTWIN }
};
static guint n_targets = sizeof(target_table) / sizeof(target_table[0]);
NS_IMETHODIMP nsDragService::StartDragSession()
{
printf("nsDragService::StartDragSession()\n");
nsBaseDragService::StartDragSession();
/*
gtk_drag_source_set(mWidget,
GDK_MODIFIER_MASK,
targetlist,
mNumFlavors,
action);
*/
gtk_drag_source_set(mWidget,
GDK_MODIFIER_MASK,
target_table,
n_targets,
mActionType);
return NS_OK;
}
NS_IMETHODIMP nsDragService::EndDragSession()
{
printf("nsDragService::EndDragSession()\n");
nsBaseDragService::EndDragSession();
gtk_drag_source_unset(mWidget);
return NS_OK;
}
//-------------------------------------------------------------------------
NS_IMETHODIMP nsDragService::InvokeDragSession (nsISupportsArray *aTransferableArray,
nsIScriptableRegion *aRegion,
PRUint32 aActionType)
{
mWidget = gtk_get_event_widget(gtk_get_current_event());
// add the flavors from the transferables. Cache this array for the send data proc
GtkTargetList *targetlist = RegisterDragItemsAndFlavors(aTransferableArray);
switch (aActionType)
{
case DRAGDROP_ACTION_NONE:
mActionType = GDK_ACTION_DEFAULT;
break;
case DRAGDROP_ACTION_COPY:
mActionType = GDK_ACTION_COPY;
break;
case DRAGDROP_ACTION_MOVE:
mActionType = GDK_ACTION_MOVE;
break;
case DRAGDROP_ACTION_LINK:
mActionType = GDK_ACTION_LINK;
break;
}
StartDragSession();
// XXX 3rd param ??? & last param should be a real event...
gtk_drag_begin(mWidget, targetlist, mActionType, 1, gtk_get_current_event());
#if 0
// we have to synthesize the native event because we may be called from JavaScript
// through XPConnect. In that case, we only have a DOM event and no way to
// get to the native event. As a consequence, we just always fake it.
Point globalMouseLoc;
::GetMouse(&globalMouseLoc);
::LocalToGlobal(&globalMouseLoc);
WindowPtr theWindow = nsnull;
if ( ::FindWindow(globalMouseLoc, &theWindow) != inContent ) {
// debugging sanity check
#ifdef NS_DEBUG
DebugStr("\pAbout to start drag, but FindWindow() != inContent; g");
#endif
}
EventRecord theEvent;
theEvent.what = mouseDown;
theEvent.message = reinterpret_cast<UInt32>(theWindow);
theEvent.when = 0;
theEvent.where = globalMouseLoc;
theEvent.modifiers = 0;
RgnHandle theDragRgn = ::NewRgn();
BuildDragRegion ( aDragRgn, globalMouseLoc, theDragRgn );
// register drag send proc which will call us back when asked for the actual
// flavor data (instead of placing it all into the drag manager)
::SetDragSendProc ( theDragRef, sDragSendDataUPP, this );
// start the drag. Be careful, mDragRef will be invalid AFTER this call (it is
// reset by the dragTrackingHandler).
::TrackDrag ( theDragRef, &theEvent, theDragRgn );
// clean up after ourselves
::DisposeRgn ( theDragRgn );
result = ::DisposeDrag ( theDragRef );
NS_ASSERTION ( result == noErr, "Error disposing drag" );
mDragRef = 0L;
mDataItems = nsnull;
return NS_OK;
#endif
return NS_OK;
}
GtkTargetList *
nsDragService::RegisterDragItemsAndFlavors(nsISupportsArray *inArray)
{
unsigned int numDragItems = 0;
inArray->Count(&numDragItems);
GtkTargetList *targetlist;
targetlist = gtk_target_list_new(nsnull, numDragItems);
for (unsigned int i = 0; i < numDragItems; ++i)
{
nsCOMPtr<nsISupports> genericItem;
inArray->GetElementAt (i, getter_AddRefs(genericItem));
nsCOMPtr<nsITransferable> currItem (do_QueryInterface(genericItem));
if (currItem)
{
nsCOMPtr<nsISupportsArray> flavorList;
if (NS_SUCCEEDED(currItem->FlavorsTransferableCanExport(getter_AddRefs(flavorList))))
{
flavorList->Count (&mNumFlavors);
for (PRUint32 flavorIndex = 0; flavorIndex < mNumFlavors; ++flavorIndex)
{
nsCOMPtr<nsISupports> genericWrapper;
flavorList->GetElementAt ( flavorIndex, getter_AddRefs(genericWrapper) );
nsCOMPtr<nsISupportsString> currentFlavor ( do_QueryInterface(genericWrapper) );
if ( currentFlavor )
{
nsXPIDLCString flavorStr;
currentFlavor->ToString ( getter_Copies(flavorStr) );
// register native flavors
GdkAtom atom = gdk_atom_intern(flavorStr, PR_TRUE);
gtk_target_list_add(targetlist, atom, 1, atom);
}
} // foreach flavor in item
} // if valid flavor list
} // if item is a transferable
} // foreach drag item
return targetlist;
}
/* return PR_TRUE if we have converted or PR_FALSE if we havn't and need to keep being called */
PRBool nsDragService::DoConvert(GdkAtom type)
{
#ifdef DEBUG_DRAG
g_print(" nsDragService::DoRealConvert(%li)\n {\n", type);
#endif
int e = 0;
// Set a flag saying that we're blocking waiting for the callback:
mBlocking = PR_TRUE;
//
// ask X what kind of data we can get
//
#ifdef DEBUG_DRAG
g_print(" Doing real conversion of atom type '%s'\n", gdk_atom_name(type));
#endif
gtk_selection_convert(mWidget,
GDK_SELECTION_PRIMARY,
type,
GDK_CURRENT_TIME);
// Now we need to wait until the callback comes in ...
// i is in case we get a runaway (yuck).
#ifdef DEBUG_DRAG
printf(" Waiting for the callback... mBlocking = %d\n", mBlocking);
#endif /* DEBUG_CLIPBOARD */
for (e=0; mBlocking == PR_TRUE && e < 1000; ++e)
{
gtk_main_iteration_do(PR_TRUE);
}
#ifdef DEBUG_DRAG
g_print(" }\n");
#endif
if (mSelectionData.length > 0)
return PR_TRUE;
return PR_FALSE;
}
#if 0
/**
* Called when the data from a drag comes in (recieved from gdk_selection_convert)
*
* @param aWidget the widget
* @param aSelectionData gtk selection stuff
* @param aTime time the selection was requested
*/
void
nsDragService::SelectionReceivedCB (GtkWidget *aWidget,
GdkDragContext *aContext,
gint aX,
gint aY,
GtkSelectionData *aSelectionData,
guint aInfo,
guint aTime)
{
#ifdef DEBUG_DRAG
printf(" nsDragService::SelectionReceivedCB\n {\n");
#endif
nsDragService *ds =(nsDragSession *)gtk_object_get_data(GTK_OBJECT(aWidget),
"ds");
if (!cb)
{
g_print("no dragservice found.. this is bad.\n");
return;
}
ds->SelectionReceiver(aWidget, aSelectionData);
#ifdef DEBUG_DRAG
g_print(" }\n");
#endif
}
/**
* local method (called from nsClipboard::SelectionReceivedCB)
*
* @param aWidget the widget
* @param aSelectionData gtk selection stuff
*/
void
nsDragService::SelectionReceiver (GtkWidget *aWidget,
GtkSelectionData *aSD)
{
gint type;
mBlocking = PR_FALSE;
if (aSD->length < 0)
{
printf(" Error retrieving selection: length was %d\n",
aSD->length);
return;
}
switch (type)
{
case GDK_TARGET_STRING:
case TARGET_COMPOUND_TEXT:
case TARGET_TEXT_PLAIN:
case TARGET_TEXT_XIF:
case TARGET_TEXT_UNICODE:
case TARGET_TEXT_HTML:
#ifdef DEBUG_CLIPBOARD
g_print(" Copying mSelectionData pointer -- ");
#endif
mSelectionData = *aSD;
mSelectionData.data = g_new(guchar, aSD->length + 1);
#ifdef DEBUG_CLIPBOARD
g_print(" Data = %s\n Length = %i\n", aSD->data, aSD->length);
#endif
memcpy(mSelectionData.data,
aSD->data,
aSD->length);
// Null terminate in case anyone cares,
// and so we can print the string for debugging:
mSelectionData.data[aSD->length] = '\0';
mSelectionData.length = aSD->length;
return;
default:
mSelectionData = *aSD;
mSelectionData.data = g_new(guchar, aSD->length + 1);
memcpy(mSelectionData.data,
aSD->data,
aSD->length);
mSelectionData.length = aSD->length;
return;
}
}
#endif
//-------------------------------------------------------------------------
NS_IMETHODIMP nsDragService::GetNumDropItems (PRUint32 * aNumItems)
{
*aNumItems = 0;
return NS_OK;
}
//-------------------------------------------------------------------------
NS_IMETHODIMP nsDragService::GetData (nsITransferable * aTransferable, PRUint32 anItem)
{
#ifdef DEBUG_DRAG
printf("nsClipboard::GetNativeClipboardData()\n");
#endif /* DEBUG_CLIPBOARD */
// make sure we have a good transferable
if (!aTransferable) {
printf(" GetData: Transferable is null!\n");
return NS_ERROR_FAILURE;
}
// get flavor list that includes all acceptable flavors (including ones obtained through
// conversion)
nsCOMPtr<nsISupportsArray> flavorList;
nsresult errCode = aTransferable->FlavorsTransferableCanImport ( getter_AddRefs(flavorList) );
if ( NS_FAILED(errCode) )
return NS_ERROR_FAILURE;
// Walk through flavors and see which flavor matches the one being pasted:
PRUint32 cnt;
flavorList->Count(&cnt);
nsCAutoString foundFlavor;
for ( PRUint32 i = 0; i < cnt; ++i ) {
nsCOMPtr<nsISupports> genericFlavor;
flavorList->GetElementAt ( i, getter_AddRefs(genericFlavor) );
nsCOMPtr<nsISupportsString> currentFlavor (do_QueryInterface(genericFlavor));
if ( currentFlavor ) {
nsXPIDLCString flavorStr;
currentFlavor->ToString(getter_Copies(flavorStr));
if (DoConvert(gdk_atom_intern(flavorStr, 1))) {
foundFlavor = flavorStr;
break;
}
}
}
#ifdef DEBUG_CLIPBOARD
printf(" Got the callback: '%s', %d\n",
mSelectionData.data, mSelectionData.length);
#endif /* DEBUG_CLIPBOARD */
// We're back from the callback, no longer blocking:
mBlocking = PR_FALSE;
//
// Now we have data in mSelectionData.data.
// We just have to copy it to the transferable.
//
#if 0
// pinkerton - we have the flavor already from above, so we don't need
// to re-derrive it.
nsString *name = new nsString((const char*)gdk_atom_name(mSelectionData.type));
int format = GetFormat(*name);
df->SetString((const char*)gdk_atom_name(sSelTypes[format]));
#endif
nsCOMPtr<nsISupports> genericDataWrapper;
nsPrimitiveHelpers::CreatePrimitiveForData ( foundFlavor, mSelectionData.data, mSelectionData.length, getter_AddRefs(genericDataWrapper) );
aTransferable->SetTransferData(foundFlavor,
genericDataWrapper,
mSelectionData.length);
//delete name;
// transferable is now copying the data, so we can free it.
// g_free(mSelectionData.data);
mSelectionData.data = nsnull;
mSelectionData.length = 0;
gtk_drag_source_unset(mWidget);
return NS_OK;
}
//-------------------------------------------------------------------------
NS_IMETHODIMP nsDragService::IsDataFlavorSupported(const char *aDataFlavor, PRBool *_retval)
{
return NS_ERROR_FAILURE;
}
//-------------------------------------------------------------------------
NS_IMETHODIMP nsDragService::GetCurrentSession (nsIDragSession **aSession)
{
return NS_ERROR_FAILURE;
}
//-------------------------------------------------------------------------
void
nsDragService::DragLeave (GtkWidget *widget,
GdkDragContext *context,
guint time)
{
g_print("leave\n");
//gHaveDrag = PR_FALSE;
}
//-------------------------------------------------------------------------
PRBool
nsDragService::DragMotion(GtkWidget *widget,
GdkDragContext *context,
gint x,
gint y,
guint time)
{
g_print("drag motion\n");
GtkWidget *source_widget;
#if 0
if (!gHaveDrag) {
gHaveDrag = PR_TRUE;
}
#endif
source_widget = gtk_drag_get_source_widget (context);
g_print("motion, source %s\n", source_widget ?
gtk_type_name (GTK_OBJECT (source_widget)->klass->type) :
"unknown");
gdk_drag_status (context, context->suggested_action, time);
return PR_TRUE;
}
//-------------------------------------------------------------------------
PRBool
nsDragService::DragDrop(GtkWidget *widget,
GdkDragContext *context,
gint x,
gint y,
guint time)
{
g_print("drop\n");
//gHaveDrag = PR_FALSE;
if (context->targets){
gtk_drag_get_data (widget, context,
GPOINTER_TO_INT (context->targets->data),
time);
return PR_TRUE;
}
return PR_FALSE;
}
//-------------------------------------------------------------------------
void
nsDragService::DragDataReceived (GtkWidget *widget,
GdkDragContext *context,
gint x,
gint y,
GtkSelectionData *data,
guint info,
guint time)
{
if ((data->length >= 0) && (data->format == 8)) {
g_print ("Received \"%s\"\n", (gchar *)data->data);
gtk_drag_finish (context, PR_TRUE, PR_FALSE, time);
return;
}
gtk_drag_finish (context, PR_FALSE, PR_FALSE, time);
}
//-------------------------------------------------------------------------
void
nsDragService::DragDataGet(GtkWidget *widget,
GdkDragContext *context,
GtkSelectionData *selection_data,
guint info,
guint time,
gpointer data)
{
gtk_selection_data_set (selection_data,
selection_data->target,
8, (guchar *)"I'm Data!", 9);
}
//-------------------------------------------------------------------------
void
nsDragService::DragDataDelete(GtkWidget *widget,
GdkDragContext *context,
gpointer data)
{
g_print ("Delete the data!\n");
}

View File

@@ -0,0 +1,109 @@
/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*-
*
* The contents of this file are subject to the Netscape Public
* License Version 1.1 (the "License"); you may not use this file
* except in compliance with the License. You may obtain a copy of
* the License at http://www.mozilla.org/NPL/
*
* Software distributed under the License is distributed on an "AS
* IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or
* implied. See the License for the specific language governing
* rights and limitations under the License.
*
* The Original Code is mozilla.org code.
*
* The Initial Developer of the Original Code is Netscape
* Communications Corporation. Portions created by Netscape are
* Copyright (C) 1998 Netscape Communications Corporation. All
* Rights Reserved.
*
* Contributor(s):
*/
#ifndef nsDragService_h__
#define nsDragService_h__
#include "nsBaseDragService.h"
#include <gtk/gtk.h>
/**
* Native GTK DragService wrapper
*/
class nsDragService : public nsBaseDragService
{
public:
nsDragService();
virtual ~nsDragService();
NS_DECL_ISUPPORTS_INHERITED
// nsIDragService
NS_IMETHOD InvokeDragSession (nsISupportsArray * anArrayTransferables,
nsIScriptableRegion * aRegion, PRUint32 aActionType);
NS_IMETHOD GetCurrentSession (nsIDragSession ** aSession);
// nsIDragSession
NS_IMETHOD GetData (nsITransferable * aTransferable, PRUint32 anItem);
NS_IMETHOD GetNumDropItems (PRUint32 * aNumItems);
NS_IMETHOD IsDataFlavorSupported(const char *aDataFlavor, PRBool *_retval);
NS_IMETHOD StartDragSession();
NS_IMETHOD EndDragSession();
GtkTargetList *RegisterDragItemsAndFlavors(nsISupportsArray *inArray);
protected:
PRBool DoConvert(GdkAtom type);
static PRBool gHaveDrag;
static void DragLeave(GtkWidget *widget,
GdkDragContext *context,
guint time);
static PRBool DragMotion(GtkWidget *widget,
GdkDragContext *context,
gint x,
gint y,
guint time);
static PRBool DragDrop(GtkWidget *widget,
GdkDragContext *context,
gint x,
gint y,
guint time);
static void DragDataReceived(GtkWidget *widget,
GdkDragContext *context,
gint x,
gint y,
GtkSelectionData *data,
guint info,
guint time);
static void DragDataGet(GtkWidget *widget,
GdkDragContext *context,
GtkSelectionData *selection_data,
guint info,
guint time,
gpointer data);
static void DragDataDelete(GtkWidget *widget,
GdkDragContext *context,
gpointer data);
private:
GdkDragAction mActionType;
PRUint32 mNumFlavors;
GtkWidget *mWidget;
GdkDragContext *mDragContext;
GtkSelectionData mSelectionData;
PRBool mBlocking;
};
#endif // nsDragService_h__

View File

@@ -0,0 +1,304 @@
/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*-
*
* The contents of this file are subject to the Mozilla Public
* License Version 1.1 (the "License"); you may not use this file
* except in compliance with the License. You may obtain a copy of
* the License at http://www.mozilla.org/MPL/
*
* Software distributed under the License is distributed on an "AS
* IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or
* implied. See the License for the specific language governing
* rights and limitations under the License.
*
* The Original Code is the Mozilla browser.
*
* The Initial Developer of the Original Code is Netscape
* Communications Corporation. Portions created by Netscape are
* Copyright (C) 1999 Netscape Communications Corporation. All
* Rights Reserved.
*
* Contributor(s):
* Stuart Parmenter <pavlov@netscape.com>
*/
#include "nsCOMPtr.h"
#include "nsIComponentManager.h"
#include "nsFilePicker.h"
NS_IMPL_ISUPPORTS1(nsFilePicker, nsIFilePicker)
//-------------------------------------------------------------------------
//
// nsFilePicker constructor
//
//-------------------------------------------------------------------------
nsFilePicker::nsFilePicker()
{
NS_INIT_REFCNT();
mWidget = nsnull;
mDisplayDirectory = nsnull;
mFilterMenu = nsnull;
mOptionMenu = nsnull;
mNumberOfFilters = 0;
}
//-------------------------------------------------------------------------
//
// nsFilePicker destructor
//
//-------------------------------------------------------------------------
nsFilePicker::~nsFilePicker()
{
if (mFilterMenu)
{
GtkWidget *menu_item;
GList *list = g_list_first(GTK_MENU_SHELL(mFilterMenu)->children);
for (;list; list = list->next)
{
menu_item = GTK_WIDGET(list->data);
gchar *data = (gchar*)gtk_object_get_data(GTK_OBJECT(menu_item), "filters");
if (data)
nsCRT::free(data);
}
}
gtk_widget_destroy(mWidget);
}
static void file_ok_clicked(GtkWidget *w, PRBool *ret)
{
g_print("user hit ok\n");
*ret = PR_TRUE;
gtk_main_quit();
}
static void file_cancel_clicked(GtkWidget *w, PRBool *ret)
{
g_print("user hit cancel\n");
*ret = PR_FALSE;
gtk_main_quit();
}
static void filter_item_activated(GtkWidget *w, gpointer data)
{
// nsFilePicker *f = (nsFilePicker*)data;
gchar *foo = (gchar*)gtk_object_get_data(GTK_OBJECT(w), "filters");
g_print("filter_item_activated(): %s\n", foo);
}
//-------------------------------------------------------------------------
//
// Show - Display the file dialog
//
//-------------------------------------------------------------------------
NS_IMETHODIMP nsFilePicker::Show(PRInt16 *retval)
{
NS_ENSURE_ARG_POINTER(retval);
PRBool ret;
if (mWidget) {
// make things shorter
GtkFileSelection *fs = GTK_FILE_SELECTION(mWidget);
if (mNumberOfFilters != 0)
{
gtk_option_menu_set_menu(GTK_OPTION_MENU(mOptionMenu), mFilterMenu);
}
else
gtk_widget_hide(mOptionMenu);
#if 0
if (mDisplayDirectory)
gtk_file_selection_complete(fs, "/");
#endif
// gtk_window_set_modal(GTK_WINDOW(mWidget), PR_TRUE);
gtk_widget_show(mWidget);
// handle close, destroy, etc on the dialog
gtk_signal_connect(GTK_OBJECT(fs->ok_button), "clicked",
GTK_SIGNAL_FUNC(file_ok_clicked),
&ret);
gtk_signal_connect(GTK_OBJECT(fs->cancel_button), "clicked",
GTK_SIGNAL_FUNC(file_cancel_clicked),
&ret);
// start new loop. ret is set in the above callbacks.
gtk_main();
}
else {
ret = PR_FALSE;
}
if (ret)
*retval = returnOK;
else
*retval = returnCancel;
return NS_OK;
}
//-------------------------------------------------------------------------
//
// Set the list of filters
//
//-------------------------------------------------------------------------
NS_IMETHODIMP nsFilePicker::SetFilterList(PRInt32 aNumberOfFilters,
const PRUnichar **aTitles,
const PRUnichar **filters)
{
#if 0
GtkWidget *menu_item;
mNumberOfFilters = aNumberOfFilters;
mTitles = aTitles;
mFilters = aFilters;
mFilterMenu = gtk_menu_new();
for(unsigned int i=0; i < aNumberOfFilters; i++)
{
// we need *.{htm, html, xul, etc}
char *foo = aTitles[i].ToNewCString();
char *filters = aFilters[i].ToNewCString();
printf("%20s %s\n", foo, filters);
menu_item = gtk_menu_item_new_with_label(nsAutoCString(aTitles[i]));
gtk_object_set_data(GTK_OBJECT(menu_item), "filters", filters);
gtk_signal_connect(GTK_OBJECT(menu_item),
"activate",
GTK_SIGNAL_FUNC(filter_item_activated),
this);
gtk_menu_append(GTK_MENU(mFilterMenu), menu_item);
gtk_widget_show(menu_item);
nsCRT::free(foo);
}
#endif
return NS_OK;
}
NS_IMETHODIMP nsFilePicker::GetFile(nsIFileSpec **aFile)
{
NS_ENSURE_ARG_POINTER(*aFile);
if (mWidget) {
gchar *fn = gtk_file_selection_get_filename(GTK_FILE_SELECTION(mWidget));
nsCOMPtr<nsIFileSpec> fileSpec(do_CreateInstance("component://netscape/filespec"));
NS_ENSURE_TRUE(fileSpec, NS_ERROR_FAILURE);
fileSpec->SetNativePath(fn);
*aFile = fileSpec;
NS_ADDREF(*aFile);
}
return NS_OK;
}
//-------------------------------------------------------------------------
//-------------------------------------------------------------------------
NS_IMETHODIMP nsFilePicker::GetSelectedFilter(PRInt32 *aType)
{
NS_ENSURE_ARG_POINTER(aType);
*aType = mSelectedType;
return NS_OK;
}
//-------------------------------------------------------------------------
//
// Get the file + path
//
//-------------------------------------------------------------------------
NS_IMETHODIMP nsFilePicker::SetDefaultString(const PRUnichar *aString)
{
if (mWidget) {
gtk_file_selection_set_filename(GTK_FILE_SELECTION(mWidget),
(const gchar*)nsAutoCString(aString));
}
return NS_OK;
}
NS_IMETHODIMP nsFilePicker::GetDefaultString(PRUnichar **aString)
{
return NS_ERROR_FAILURE;
}
//-------------------------------------------------------------------------
//
// Set the display directory
//
//-------------------------------------------------------------------------
NS_IMETHODIMP nsFilePicker::SetDisplayDirectory(nsIFileSpec *aDirectory)
{
mDisplayDirectory = aDirectory;
return NS_OK;
}
//-------------------------------------------------------------------------
//
// Get the display directory
//
//-------------------------------------------------------------------------
NS_IMETHODIMP nsFilePicker::GetDisplayDirectory(nsIFileSpec **aDirectory)
{
*aDirectory = mDisplayDirectory;
NS_IF_ADDREF(*aDirectory);
return NS_OK;
}
NS_IMETHODIMP nsFilePicker::Create(nsIDOMWindow *aParent,
const PRUnichar *aTitle,
PRInt16 aMode)
{
return nsBaseFilePicker::Create(aParent, aTitle, aMode);
}
//-------------------------------------------------------------------------
NS_IMETHODIMP nsFilePicker::CreateNative(nsIWidget *aParent,
const PRUnichar *aTitle,
PRInt16 aMode)
{
mWidget = gtk_file_selection_new((const gchar *)nsAutoCString(aTitle));
gtk_signal_connect(GTK_OBJECT(mWidget),
"destroy",
GTK_SIGNAL_FUNC(DestroySignal),
this);
gtk_button_box_set_layout(GTK_BUTTON_BOX(GTK_FILE_SELECTION(mWidget)->button_area), GTK_BUTTONBOX_SPREAD);
mOptionMenu = gtk_option_menu_new();
gtk_box_pack_start(GTK_BOX(GTK_FILE_SELECTION(mWidget)->main_vbox), mOptionMenu, PR_FALSE, PR_FALSE, 0);
gtk_widget_show(mOptionMenu);
// Hide the file column for the folder case.
if (aMode == nsIFilePicker::modeGetFolder) {
gtk_widget_hide((GTK_FILE_SELECTION(mWidget)->file_list)->parent);
}
return NS_OK;
}
gint
nsFilePicker::DestroySignal(GtkWidget * aGtkWidget,
nsFilePicker* aWidget)
{
aWidget->OnDestroySignal(aGtkWidget);
return TRUE;
}
void
nsFilePicker::OnDestroySignal(GtkWidget* aGtkWidget)
{
if (aGtkWidget == mWidget) {
mWidget = nsnull;
}
}

View File

@@ -0,0 +1,68 @@
/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*-
*
* The contents of this file are subject to the Mozilla Public
* License Version 1.1 (the "License"); you may not use this file
* except in compliance with the License. You may obtain a copy of
* the License at http://www.mozilla.org/MPL/
*
* Software distributed under the License is distributed on an "AS
* IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or
* implied. See the License for the specific language governing
* rights and limitations under the License.
*
* The Original Code is the Mozilla browser.
*
* The Initial Developer of the Original Code is Netscape
* Communications Corporation. Portions created by Netscape are
* Copyright (C) 1999 Netscape Communications Corporation. All
* Rights Reserved.
*
* Contributor(s):
* Stuart Parmenter <pavlov@netscape.com>
*/
#ifndef nsFilePicker_h__
#define nsFilePicker_h__
#include "nsBaseFilePicker.h"
#include <gtk/gtk.h>
/**
* Native GTK FileSelector wrapper
*/
class nsFilePicker : public nsBaseFilePicker
{
public:
nsFilePicker();
virtual ~nsFilePicker();
NS_DECL_ISUPPORTS
NS_DECL_NSIFILEPICKER
protected:
/* method from nsBaseFilePicker */
NS_IMETHOD CreateNative(nsIWidget *aParent,
const PRUnichar *aTitle,
PRInt16 aMode);
static gint DestroySignal(GtkWidget * aGtkWidget,
nsFilePicker* aWidget);
virtual void OnDestroySignal(GtkWidget* aGtkWidget);
GtkWidget *mWidget;
GtkWidget *mOptionMenu;
GtkWidget *mFilterMenu;
PRUint32 mNumberOfFilters;
const nsString* mTitles;
const nsString* mFilters;
nsString mDefault;
nsIFileSpec *mDisplayDirectory;
PRInt16 mSelectedType;
};
#endif // nsFilePicker_h__

View File

@@ -0,0 +1,322 @@
/* -*- Mode: c++; tab-width: 2; indent-tabs-mode: nil; -*- */
/*
* The contents of this file are subject to the Netscape Public
* License Version 1.1 (the "License"); you may not use this file
* except in compliance with the License. You may obtain a copy of
* the License at http://www.mozilla.org/NPL/
*
* Software distributed under the License is distributed on an "AS
* IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or
* implied. See the License for the specific language governing
* rights and limitations under the License.
*
* The Original Code is mozilla.org code.
*
* The Initial Developer of the Original Code is Netscape
* Communications Corporation. Portions created by Netscape are
* Copyright (C) 1998 Netscape Communications Corporation. All
* Rights Reserved.
*
* Contributor(s):
*/
#include "nsFileWidget.h"
#include "nsIToolkit.h"
NS_IMPL_ISUPPORTS1(nsFileWidget, nsIFileWidget)
//-------------------------------------------------------------------------
//
// nsFileWidget constructor
//
//-------------------------------------------------------------------------
nsFileWidget::nsFileWidget() : nsIFileWidget()
{
NS_INIT_REFCNT();
mWidget = nsnull;
mDisplayDirectory = nsnull;
mFilterMenu = nsnull;
mOptionMenu = nsnull;
mNumberOfFilters = 0;
}
//-------------------------------------------------------------------------
//
// nsFileWidget destructor
//
//-------------------------------------------------------------------------
nsFileWidget::~nsFileWidget()
{
if (mFilterMenu)
{
GtkWidget *menu_item;
GList *list = g_list_first(GTK_MENU_SHELL(mFilterMenu)->children);
for (;list; list = list->next)
{
menu_item = GTK_WIDGET(list->data);
gchar *data = (gchar*)gtk_object_get_data(GTK_OBJECT(menu_item), "filters");
if (data)
nsCRT::free(data);
}
}
gtk_widget_destroy(mWidget);
}
static void file_ok_clicked(GtkWidget *w, PRBool *ret)
{
g_print("user hit ok\n");
*ret = PR_TRUE;
gtk_main_quit();
}
static void file_cancel_clicked(GtkWidget *w, PRBool *ret)
{
g_print("user hit cancel\n");
*ret = PR_FALSE;
gtk_main_quit();
}
static void filter_item_activated(GtkWidget *w, gpointer data)
{
// nsFileWidget *f = (nsFileWidget*)data;
gchar *foo = (gchar*)gtk_object_get_data(GTK_OBJECT(w), "filters");
g_print("filter_item_activated(): %s\n", foo);
}
//-------------------------------------------------------------------------
//
// Show - Display the file dialog
//
//-------------------------------------------------------------------------
PRBool nsFileWidget::Show()
{
PRBool ret;
if (mWidget) {
// make things shorter
GtkFileSelection *fs = GTK_FILE_SELECTION(mWidget);
if (mNumberOfFilters != 0)
{
gtk_option_menu_set_menu(GTK_OPTION_MENU(mOptionMenu), mFilterMenu);
}
else
gtk_widget_hide(mOptionMenu);
#if 0
if (mDisplayDirectory)
gtk_file_selection_complete(fs, "/");
#endif
// gtk_window_set_modal(GTK_WINDOW(mWidget), PR_TRUE);
gtk_widget_show(mWidget);
// handle close, destroy, etc on the dialog
gtk_signal_connect(GTK_OBJECT(fs->ok_button), "clicked",
GTK_SIGNAL_FUNC(file_ok_clicked),
&ret);
gtk_signal_connect(GTK_OBJECT(fs->cancel_button), "clicked",
GTK_SIGNAL_FUNC(file_cancel_clicked),
&ret);
// start new loop. ret is set in the above callbacks.
gtk_main();
}
else {
ret = PR_FALSE;
}
return ret;
}
//-------------------------------------------------------------------------
//
// Set the list of filters
//
//-------------------------------------------------------------------------
NS_IMETHODIMP nsFileWidget::SetFilterList(PRUint32 aNumberOfFilters,
const nsString aTitles[],
const nsString aFilters[])
{
GtkWidget *menu_item;
mNumberOfFilters = aNumberOfFilters;
mTitles = aTitles;
mFilters = aFilters;
mFilterMenu = gtk_menu_new();
for(unsigned int i=0; i < aNumberOfFilters; i++)
{
// we need *.{htm, html, xul, etc}
char *foo = aTitles[i].ToNewCString();
char *filters = aFilters[i].ToNewCString();
printf("%20s %s\n", foo, filters);
menu_item = gtk_menu_item_new_with_label(nsAutoCString(aTitles[i]));
gtk_object_set_data(GTK_OBJECT(menu_item), "filters", filters);
gtk_signal_connect(GTK_OBJECT(menu_item),
"activate",
GTK_SIGNAL_FUNC(filter_item_activated),
this);
gtk_menu_append(GTK_MENU(mFilterMenu), menu_item);
gtk_widget_show(menu_item);
nsCRT::free(foo);
}
return NS_OK;
}
NS_IMETHODIMP nsFileWidget::GetFile(nsFileSpec& aFile)
{
if (mWidget) {
gchar *fn = gtk_file_selection_get_filename(GTK_FILE_SELECTION(mWidget));
aFile = fn; // Put the filename into the nsFileSpec instance.
}
return NS_OK;
}
//-------------------------------------------------------------------------
//-------------------------------------------------------------------------
NS_IMETHODIMP nsFileWidget::GetSelectedType(PRInt16& theType)
{
theType = mSelectedType;
return NS_OK;
}
//-------------------------------------------------------------------------
//
// Get the file + path
//
//-------------------------------------------------------------------------
NS_IMETHODIMP nsFileWidget::SetDefaultString(const nsString& aString)
{
if (mWidget) {
gtk_file_selection_set_filename(GTK_FILE_SELECTION(mWidget),
(const gchar*)nsAutoCString(aString));
}
return NS_OK;
}
//-------------------------------------------------------------------------
//
// Set the display directory
//
//-------------------------------------------------------------------------
NS_IMETHODIMP nsFileWidget::SetDisplayDirectory(const nsFileSpec& aDirectory)
{
mDisplayDirectory = aDirectory;
return NS_OK;
}
//-------------------------------------------------------------------------
//
// Get the display directory
//
//-------------------------------------------------------------------------
NS_IMETHODIMP nsFileWidget::GetDisplayDirectory(nsFileSpec& aDirectory)
{
aDirectory = mDisplayDirectory;
return NS_OK;
}
//-------------------------------------------------------------------------
NS_IMETHODIMP nsFileWidget::Create(nsIWidget *aParent,
const nsString& aTitle,
nsFileDlgMode aMode,
nsIDeviceContext *aContext,
nsIAppShell *aAppShell,
nsIToolkit *aToolkit,
void *aInitData)
{
mMode = aMode;
mTitle.SetLength(0);
mTitle.Append(aTitle);
mWidget = gtk_file_selection_new((const gchar *)nsAutoCString(aTitle));
gtk_signal_connect(GTK_OBJECT(mWidget),
"destroy",
GTK_SIGNAL_FUNC(DestroySignal),
this);
gtk_button_box_set_layout(GTK_BUTTON_BOX(GTK_FILE_SELECTION(mWidget)->button_area), GTK_BUTTONBOX_SPREAD);
mOptionMenu = gtk_option_menu_new();
gtk_box_pack_start(GTK_BOX(GTK_FILE_SELECTION(mWidget)->main_vbox), mOptionMenu, PR_FALSE, PR_FALSE, 0);
gtk_widget_show(mOptionMenu);
// Hide the file column for the folder case.
if (aMode == eMode_getfolder) {
gtk_widget_hide((GTK_FILE_SELECTION(mWidget)->file_list)->parent);
}
return NS_OK;
}
gint
nsFileWidget::DestroySignal(GtkWidget * aGtkWidget,
nsFileWidget* aWidget)
{
aWidget->OnDestroySignal(aGtkWidget);
return TRUE;
}
void
nsFileWidget::OnDestroySignal(GtkWidget* aGtkWidget)
{
if (aGtkWidget == mWidget) {
mWidget = nsnull;
}
}
nsFileDlgResults nsFileWidget::GetFile(nsIWidget *aParent,
const nsString &promptString,
nsFileSpec &theFileSpec)
{
Create(aParent, promptString, eMode_load, nsnull, nsnull);
if (Show() == PR_TRUE)
{
GetFile(theFileSpec);
return nsFileDlgResults_OK;
}
return nsFileDlgResults_Cancel;
}
nsFileDlgResults nsFileWidget::GetFolder(nsIWidget *aParent,
const nsString &promptString,
nsFileSpec &theFileSpec)
{
Create(aParent, promptString, eMode_getfolder, nsnull, nsnull);
if (Show() == PR_TRUE)
{
GetFile(theFileSpec);
return nsFileDlgResults_OK;
}
return nsFileDlgResults_Cancel;
}
nsFileDlgResults nsFileWidget::PutFile(nsIWidget *aParent,
const nsString &promptString,
nsFileSpec &theFileSpec)
{
Create(aParent, promptString, eMode_save, nsnull, nsnull);
if (Show() == PR_TRUE)
{
GetFile(theFileSpec);
return nsFileDlgResults_OK;
}
return nsFileDlgResults_Cancel;
}

View File

@@ -0,0 +1,102 @@
/* -*- Mode: c++; tab-width: 2; indent-tabs-mode: nil; -*- */
/*
* The contents of this file are subject to the Netscape Public
* License Version 1.1 (the "License"); you may not use this file
* except in compliance with the License. You may obtain a copy of
* the License at http://www.mozilla.org/NPL/
*
* Software distributed under the License is distributed on an "AS
* IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or
* implied. See the License for the specific language governing
* rights and limitations under the License.
*
* The Original Code is mozilla.org code.
*
* The Initial Developer of the Original Code is Netscape
* Communications Corporation. Portions created by Netscape are
* Copyright (C) 1998 Netscape Communications Corporation. All
* Rights Reserved.
*
* Contributor(s):
*/
#ifndef nsFileWidget_h__
#define nsFileWidget_h__
#include "nsIWidget.h"
#include "nsIFileWidget.h"
#include <gtk/gtk.h>
class nsIToolkit;
/**
* Native GTK FileSelector wrapper
*/
class nsFileWidget : public nsIFileWidget
{
public:
nsFileWidget();
virtual ~nsFileWidget();
NS_DECL_ISUPPORTS
// nsIWidget interface
NS_IMETHOD Create(nsIWidget *aParent,
const nsString& aTitle,
nsFileDlgMode aMode,
nsIDeviceContext *aContext = nsnull,
nsIAppShell *aAppShell = nsnull,
nsIToolkit *aToolkit = nsnull,
void *aInitData = nsnull);
// nsIFileWidget part
virtual PRBool Show();
NS_IMETHOD GetFile(nsFileSpec& aFile);
NS_IMETHOD SetDefaultString(const nsString& aFile);
NS_IMETHOD SetFilterList(PRUint32 aNumberOfFilters,
const nsString aTitles[],
const nsString aFilters[]);
NS_IMETHOD GetDisplayDirectory(nsFileSpec& aDirectory);
NS_IMETHOD SetDisplayDirectory(const nsFileSpec& aDirectory);
virtual nsFileDlgResults GetFile(nsIWidget *aParent,
const nsString &promptString,
nsFileSpec &theFileSpec);
virtual nsFileDlgResults GetFolder(nsIWidget *aParent,
const nsString &promptString,
nsFileSpec &theFileSpec);
virtual nsFileDlgResults PutFile(nsIWidget *aParent,
const nsString &promptString,
nsFileSpec &theFileSpec);
NS_IMETHOD GetSelectedType(PRInt16& theType);
protected:
static gint DestroySignal(GtkWidget * aGtkWidget,
nsFileWidget* aWidget);
virtual void OnDestroySignal(GtkWidget* aGtkWidget);
GtkWidget *mWidget;
nsString mTitle;
GtkWidget *mOptionMenu;
GtkWidget *mFilterMenu;
nsFileDlgMode mMode;
PRUint32 mNumberOfFilters;
const nsString* mTitles;
const nsString* mFilters;
nsString mDefault;
nsFileSpec mDisplayDirectory;
PRInt16 mSelectedType;
};
#endif // nsFileWidget_h__

View File

@@ -0,0 +1,395 @@
/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*-
*
* The contents of this file are subject to the Netscape Public
* License Version 1.1 (the "License"); you may not use this file
* except in compliance with the License. You may obtain a copy of
* the License at http://www.mozilla.org/NPL/
*
* Software distributed under the License is distributed on an "AS
* IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or
* implied. See the License for the specific language governing
* rights and limitations under the License.
*
* The Original Code is mozilla.org code.
*
* The Initial Developer of the Original Code is Netscape
* Communications Corporation. Portions created by Netscape are
* Copyright (C) 1998 Netscape Communications Corporation. All
* Rights Reserved.
*
* Contributor(s):
*/
#include "nsFontRetrieverService.h"
#include "nsIWidget.h"
#include <ctype.h>
#include <gtk/gtk.h>
#include <gdk/gdkx.h>
#include "X11/Xlib.h"
#include "X11/Xutil.h"
#include "nsFont.h"
#include "nsVoidArray.h"
#include "nsFontSizeIterator.h"
NS_IMPL_ISUPPORTS2(nsFontRetrieverService, nsIFontRetrieverService, nsIFontNameIterator)
//----------------------------------------------------------
nsFontRetrieverService::nsFontRetrieverService()
{
NS_INIT_REFCNT();
mFontList = nsnull;
mSizeIter = nsnull;
mNameIterInx = 0;
}
//----------------------------------------------------------
nsFontRetrieverService::~nsFontRetrieverService()
{
if (nsnull != mFontList) {
for (PRInt32 i=0;i<mFontList->Count();i++) {
FontInfo * font = (FontInfo *)mFontList->ElementAt(i);
if (font->mSizes) {
delete font->mSizes;
}
delete font;
}
delete mFontList;
}
NS_IF_RELEASE(mSizeIter);
}
//----------------------------------------------------------
//-- nsIFontRetrieverService
//----------------------------------------------------------
NS_IMETHODIMP nsFontRetrieverService::CreateFontNameIterator( nsIFontNameIterator** aIterator )
{
if (nsnull == aIterator) {
return NS_ERROR_FAILURE;
}
if (nsnull == mFontList) {
LoadFontList();
}
*aIterator = this;
NS_ADDREF_THIS();
return NS_OK;
}
//----------------------------------------------------------
NS_IMETHODIMP nsFontRetrieverService::CreateFontSizeIterator( const nsString & aFontName,
nsIFontSizeIterator** aIterator )
{
// save value in case someone externally is using it
PRInt32 saveIterInx = mNameIterInx;
PRBool found = PR_FALSE;
Reset();
do {
nsAutoString name;
Get(&name);
if (name.Equals(aFontName)) {
found = PR_TRUE;
break;
}
} while (Advance() == NS_OK);
if (found) {
if (nsnull == mSizeIter) {
mSizeIter = new nsFontSizeIterator();
}
NS_ASSERTION( nsnull != mSizeIter, "nsFontSizeIterator instance pointer is null");
*aIterator = (nsIFontSizeIterator *)mSizeIter;
NS_ADDREF(mSizeIter);
FontInfo * fontInfo = (FontInfo *)mFontList->ElementAt(mNameIterInx);
mSizeIter->SetFontInfo(fontInfo);
mNameIterInx = saveIterInx;
return NS_OK;
}
mNameIterInx = saveIterInx;
return NS_ERROR_FAILURE;
}
//----------------------------------------------------------
//-- nsIFontNameIterator
//----------------------------------------------------------
NS_IMETHODIMP nsFontRetrieverService::Reset()
{
mNameIterInx = 0;
return NS_OK;
}
//----------------------------------------------------------
NS_IMETHODIMP nsFontRetrieverService::Get( nsString* aFontName )
{
if (mNameIterInx < mFontList->Count()) {
FontInfo * fontInfo = (FontInfo *)mFontList->ElementAt(mNameIterInx);
*aFontName = fontInfo->mName;
return NS_OK;
}
return NS_ERROR_FAILURE;
}
//----------------------------------------------------------
NS_IMETHODIMP nsFontRetrieverService::Advance()
{
if (mNameIterInx < mFontList->Count()-1) {
mNameIterInx++;
return NS_OK;
}
return NS_ERROR_FAILURE;
}
//------------------------------
static FontInfo * GetFontInfo(nsVoidArray * aFontList, char * aName)
{
nsAutoString name(aName);
PRInt32 i;
PRInt32 cnt = aFontList->Count();
for (i=0;i<cnt;i++) {
FontInfo * fontInfo = (FontInfo *)aFontList->ElementAt(i);
if (fontInfo->mName.Equals(name)) {
return fontInfo;
}
}
FontInfo * fontInfo = new FontInfo();
fontInfo->mName = aName;
//printf("Adding [%s]\n", aName);fflush(stdout);
fontInfo->mIsScalable = PR_FALSE; // X fonts aren't scalable right??
fontInfo->mSizes = nsnull;
aFontList->AppendElement(fontInfo);
return fontInfo;
}
//------------------------------
static void AddSizeToFontInfo(FontInfo * aFontInfo, PRInt32 aSize)
{
nsVoidArray * sizes;
if (nsnull == aFontInfo->mSizes) {
sizes = new nsVoidArray();
aFontInfo->mSizes = sizes;
} else {
sizes = aFontInfo->mSizes;
}
PRInt32 i;
PRInt32 cnt = sizes->Count();
for (i=0;i<cnt;i++) {
PRInt32 size = (int)sizes->ElementAt(i);
if (size == aSize) {
return;
}
}
sizes->AppendElement((void *)aSize);
}
//---------------------------------------------------
// XXX - Hack - Parts of this will need to be reworked
//
// This method does brute force parcing for 4 different formats:
//
// 1) The format -*-*-*-*-*-* etc.
// -misc-fixed-medium-r-normal--13-120-75-75-c-80-iso8859-8
//
// 2) Name-size format
// lucidasans-10
//
// 3) Name-style-size
// lucidasans-bold-10
//
// 4) Name only (implicit size)
// 6x13
//
//--------------------------------------------------
NS_IMETHODIMP nsFontRetrieverService::LoadFontList()
{
char * pattern = "*";
int nnames = 1024;
int available = nnames+1;
int i;
char **fonts;
XFontStruct *info;
if (nsnull == mFontList) {
mFontList = new nsVoidArray();
if (nsnull == mFontList) {
return NS_ERROR_FAILURE;
}
}
/* Get list of fonts matching pattern */
for (;;) {
// the following line is VERY slow to return
fonts = XListFontsWithInfo(GDK_DISPLAY(), pattern, nnames,
&available, &info);
if (fonts == NULL || available < nnames)
break;
XFreeFontInfo(fonts, info, available);
nnames = available * 2;
}
if (fonts == NULL) {
fprintf(stderr, "pattern \"%s\" unmatched\n", pattern);
return NS_ERROR_FAILURE;
}
#if 0 // debug
// print out all the retrieved fonts
printf("-----------------------------\n");
for (i=0; i<available; i++) {
printf("[%s]i\n", fonts[i]);
}
printf("-----------------------------\n");
#endif
// this code assumes all like fonts are grouped together
// currentName is the current name of the font we are gathering
// sizes for, when the name changes we create a new FontInfo object
// but it also takes into account fonts of similar names when it
// goes to add then and disregards duplicates
char buffer[1024];
char currentName[1024];
FontInfo * font = nsnull;
currentName[0] = 0;
for (i=0; i<available; i++) {
// This is kind of lame, but it will have to do for now
strcpy(buffer, fonts[i]);
// Start by checking to see if the name begins with a dash
char * ptr = buffer;
if (buffer[0] == '-') { //Format #1
PRInt32 cnt = 0;
// skip first two '-'
do {
if (*ptr == '-') cnt++;
ptr++;
} while (cnt < 2);
// find the dash at the end of the name
char * end = strchr(ptr, '-');
if (end) {
*end = 0;
// Check to see if we need to create a new FontInfo obj
// and set the currentName var to this guys font name
if (strcmp(currentName, ptr) || NULL == font) {
font = GetFontInfo(mFontList, ptr);
strcpy(currentName, ptr);
}
if (nsnull == font->mSizes) {
font->mSizes = new nsVoidArray();
}
ptr = end+1; // skip past the dash that was set to zero
cnt = 0;
// now skip ahead 4 dashes
do {
if (*ptr == '-') cnt++;
ptr++;
} while (cnt < 4);
// find the dash after the size
end = strchr(ptr, '-');
if (end) {
*end = 0;
PRInt32 size;
sscanf(ptr, "%d", &size);
AddSizeToFontInfo(font, size);
}
}
} else { // formats 2,3,4
// no leading dash means the start of the
// buffer is the start of the name
// this checks for a dash at the end of the font name
// which means there is a size at the end
char * end = strchr(buffer, '-');
if (end) { // Format 2,3
*end = 0;
// Check to see if we need to create a new FontInfo obj
// and set the currentName var to this guys font name
if (strcmp(currentName, buffer) || NULL == font) {
font = GetFontInfo(mFontList, buffer);
strcpy(currentName, buffer);
}
end++; // advance past the dash
// check to see if we have a number
ptr = end;
if (isalpha(*ptr)) { // Format 3
// skip until next dash
end = strchr(ptr, '-');
if (end) {
*end = 0;
ptr = end+1;
}
}
PRInt32 size;
// yes, it has a dash at the end so it must have the size
// check to see if the size is terminated by a dash
// it shouldn't be
char * end2 = strchr(ptr, '-');
if (end2) *end2 = 0; // put terminator at the dash
sscanf(end, "%d", &size);
AddSizeToFontInfo(font, size);
} else { // Format #4
// The font has an implicit size,
// so there is nothing to parse for size
// so we can't really do much here
// Check to see if we need to create a new FontInfo obj
// and set the currentName var to this guys font name
if (strcmp(currentName, buffer) || NULL == font) {
font = GetFontInfo(mFontList, buffer);
strcpy(currentName, buffer);
}
}
}
}
XFreeFontInfo(fonts, info, available);
return NS_OK;
}
//----------------------------------------------------------
NS_IMETHODIMP nsFontRetrieverService::IsFontScalable(const nsString & aFontName,
PRBool* aResult )
{
// save value in case someone externally is using it
PRInt32 saveIterInx = mNameIterInx;
PRBool found = PR_FALSE;
Reset();
do {
nsAutoString name;
Get(&name);
if (name.Equals(aFontName)) {
found = PR_TRUE;
break;
}
} while (Advance() == NS_OK);
if (found) {
FontInfo * fontInfo = (FontInfo *)mFontList->ElementAt(mNameIterInx);
*aResult = fontInfo->mIsScalable;
mNameIterInx = saveIterInx;
return NS_OK;
}
mNameIterInx = saveIterInx;
return NS_ERROR_FAILURE;
}

View File

@@ -0,0 +1,65 @@
/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*-
*
* The contents of this file are subject to the Netscape Public
* License Version 1.1 (the "License"); you may not use this file
* except in compliance with the License. You may obtain a copy of
* the License at http://www.mozilla.org/NPL/
*
* Software distributed under the License is distributed on an "AS
* IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or
* implied. See the License for the specific language governing
* rights and limitations under the License.
*
* The Original Code is mozilla.org code.
*
* The Initial Developer of the Original Code is Netscape
* Communications Corporation. Portions created by Netscape are
* Copyright (C) 1998 Netscape Communications Corporation. All
* Rights Reserved.
*
* Contributor(s):
*/
#ifndef __nsFontRetrieverService
#define __nsFontRetrieverService
#include "nsIFontRetrieverService.h"
#include "nsIFontNameIterator.h"
class nsVoidArray;
class nsFontSizeIterator;
class nsFontRetrieverService: public nsIFontRetrieverService,
public nsIFontNameIterator
{
public:
nsFontRetrieverService();
virtual ~nsFontRetrieverService();
NS_DECL_ISUPPORTS
// nsIFontRetrieverService
NS_IMETHOD CreateFontNameIterator( nsIFontNameIterator** aIterator );
NS_IMETHOD CreateFontSizeIterator( const nsString & aFontName, nsIFontSizeIterator** aIterator );
NS_IMETHOD IsFontScalable( const nsString & aFontName, PRBool* aResult );
// nsIFontNameIterator
NS_IMETHOD Reset();
NS_IMETHOD Get( nsString* aFontName );
NS_IMETHOD Advance();
protected:
NS_IMETHOD LoadFontList();
nsVoidArray * mFontList;
PRInt32 mNameIterInx;
nsFontSizeIterator * mSizeIter;
};
#endif

View File

@@ -0,0 +1,88 @@
/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*-
*
* The contents of this file are subject to the Netscape Public
* License Version 1.1 (the "License"); you may not use this file
* except in compliance with the License. You may obtain a copy of
* the License at http://www.mozilla.org/NPL/
*
* Software distributed under the License is distributed on an "AS
* IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or
* implied. See the License for the specific language governing
* rights and limitations under the License.
*
* The Original Code is mozilla.org code.
*
* The Initial Developer of the Original Code is Netscape
* Communications Corporation. Portions created by Netscape are
* Copyright (C) 1998 Netscape Communications Corporation. All
* Rights Reserved.
*
* Contributor(s):
*/
#include "nsFontSizeIterator.h"
#include "nsFont.h"
#include "nsVoidArray.h"
NS_IMPL_ADDREF(nsFontSizeIterator)
NS_IMPL_RELEASE(nsFontSizeIterator)
NS_IMPL_QUERY_INTERFACE(nsFontSizeIterator, nsIFontSizeIterator::GetIID())
//----------------------------------------------------------
nsFontSizeIterator::nsFontSizeIterator()
{
NS_INIT_REFCNT();
mFontInfo = nsnull;
mSizeIterInx = 0;
}
//----------------------------------------------------------
nsFontSizeIterator::~nsFontSizeIterator()
{
}
///----------------------------------------------------------
//-- nsIFontNameIterator
//----------------------------------------------------------
NS_IMETHODIMP nsFontSizeIterator::Reset()
{
mSizeIterInx = 0;
return NS_OK;
}
//----------------------------------------------------------
NS_IMETHODIMP nsFontSizeIterator::Get( double* aFontSize )
{
if (nsnull != mFontInfo->mSizes &&
mFontInfo->mSizes->Count() > 0 &&
mSizeIterInx < mFontInfo->mSizes->Count()) {
PRUint32 size = (PRUint32)mFontInfo->mSizes->ElementAt(mSizeIterInx);
*aFontSize = (double)size;
return NS_OK;
}
return NS_ERROR_FAILURE;
}
//----------------------------------------------------------
NS_IMETHODIMP nsFontSizeIterator::Advance()
{
if (nsnull != mFontInfo->mSizes &&
mFontInfo->mSizes->Count() > 0 &&
mSizeIterInx < mFontInfo->mSizes->Count()-2) {
mSizeIterInx++;
return NS_OK;
}
return NS_ERROR_FAILURE;
}
//----------------------------------------------------------
NS_IMETHODIMP nsFontSizeIterator::SetFontInfo( FontInfo * aFontInfo )
{
mFontInfo = aFontInfo;
return NS_OK;
}

View File

@@ -0,0 +1,59 @@
/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*-
*
* The contents of this file are subject to the Netscape Public
* License Version 1.1 (the "License"); you may not use this file
* except in compliance with the License. You may obtain a copy of
* the License at http://www.mozilla.org/NPL/
*
* Software distributed under the License is distributed on an "AS
* IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or
* implied. See the License for the specific language governing
* rights and limitations under the License.
*
* The Original Code is mozilla.org code.
*
* The Initial Developer of the Original Code is Netscape
* Communications Corporation. Portions created by Netscape are
* Copyright (C) 1998 Netscape Communications Corporation. All
* Rights Reserved.
*
* Contributor(s):
*/
#ifndef __nsFontSizeIterator
#define __nsFontSizeIterator
#include "nsIFontSizeIterator.h"
#include "nsString.h"
class nsVoidArray;
typedef struct {
nsString mName;
PRBool mIsScalable;
nsVoidArray * mSizes;
} FontInfo;
class nsFontSizeIterator: public nsIFontSizeIterator {
public:
nsFontSizeIterator();
virtual ~nsFontSizeIterator();
NS_DECL_ISUPPORTS
// nsIFontSizeIterator
NS_IMETHOD Reset();
NS_IMETHOD Get( double* aFontSize );
NS_IMETHOD Advance();
// Native impl
NS_IMETHOD SetFontInfo( FontInfo * aFontInfo );
protected:
FontInfo * mFontInfo;
PRInt32 mSizeIterInx; // current index of iter
};
#endif

View File

@@ -0,0 +1,967 @@
/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*-
*
* The contents of this file are subject to the Netscape Public
* License Version 1.1 (the "License"); you may not use this file
* except in compliance with the License. You may obtain a copy of
* the License at http://www.mozilla.org/NPL/
*
* Software distributed under the License is distributed on an "AS
* IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or
* implied. See the License for the specific language governing
* rights and limitations under the License.
*
* The Original Code is mozilla.org code.
*
* The Initial Developer of the Original Code is Netscape
* Communications Corporation. Portions created by Netscape are
* Copyright (C) 1998 Netscape Communications Corporation. All
* Rights Reserved.
*
* Contributor(s):
*/
#include "nsWidget.h"
#include "nsWindow.h"
#include "nsScrollbar.h"
#include "nsIFileWidget.h"
#include "nsGUIEvent.h"
#include "nsIMenu.h"
#include "nsIMenuItem.h"
#include "nsIMenuListener.h"
#include "nsTextWidget.h"
#include "nsICharsetConverterManager.h"
#include "nsIPlatformCharset.h"
#include "nsIServiceManager.h"
static NS_DEFINE_CID(kCharsetConverterManagerCID, NS_ICHARSETCONVERTERMANAGER_CID);
#include "stdio.h"
#include "ctype.h"
#include "gtk/gtk.h"
#include "nsGtkEventHandler.h"
#include <gdk/gdkkeysyms.h>
#include <X11/Xlib.h>
#include <X11/Xutil.h>
#ifdef DEBUG_pavlov
//#define DEBUG_EVENTS 1
#endif
struct EventInfo {
nsWidget *widget; // the widget
nsRect *rect; // the rect
};
//==============================================================
void InitAllocationEvent(GtkAllocation *aAlloc,
gpointer p,
nsSizeEvent &anEvent,
PRUint32 aEventType)
{
anEvent.message = aEventType;
anEvent.widget = (nsWidget *) p;
anEvent.eventStructType = NS_SIZE_EVENT;
if (aAlloc != nsnull) {
// HACK
// nsRect *foo = new nsRect(aAlloc->x, aAlloc->y, aAlloc->width, aAlloc->height);
nsRect *foo = new nsRect(0, 0, aAlloc->width, aAlloc->height);
anEvent.windowSize = foo;
// anEvent.point.x = aAlloc->x;
// anEvent.point.y = aAlloc->y;
// HACK
anEvent.point.x = 0;
anEvent.point.y = 0;
anEvent.mWinWidth = aAlloc->width;
anEvent.mWinHeight = aAlloc->height;
}
anEvent.time = PR_IntervalNow();
}
//==============================================================
void InitConfigureEvent(GdkEventConfigure *aConf,
gpointer p,
nsSizeEvent &anEvent,
PRUint32 aEventType)
{
anEvent.message = aEventType;
anEvent.widget = (nsWidget *) p;
anEvent.eventStructType = NS_SIZE_EVENT;
if (aConf != nsnull) {
/* do we accually need to alloc a new rect, or can we just set the
current one */
nsRect *foo = new nsRect(aConf->x, aConf->y, aConf->width, aConf->height);
anEvent.windowSize = foo;
anEvent.point.x = aConf->x;
anEvent.point.y = aConf->y;
anEvent.mWinWidth = aConf->width;
anEvent.mWinHeight = aConf->height;
}
// this usually returns 0
anEvent.time = 0;
}
//==============================================================
void InitExposeEvent(GdkEventExpose *aGEE,
gpointer p,
nsPaintEvent &anEvent,
PRUint32 aEventType)
{
anEvent.message = aEventType;
anEvent.widget = (nsWidget *) p;
anEvent.eventStructType = NS_PAINT_EVENT;
if (aGEE != nsnull)
{
#ifdef DEBUG_EVENTS
g_print("expose event: x = %i , y = %i , w = %i , h = %i\n",
aGEE->area.x, aGEE->area.y,
aGEE->area.width, aGEE->area.height);
#endif
anEvent.point.x = aGEE->area.x;
anEvent.point.y = aGEE->area.y;
nsRect *rect = new nsRect(aGEE->area.x, aGEE->area.y,
aGEE->area.width, aGEE->area.height);
anEvent.rect = rect;
anEvent.time = gdk_event_get_time((GdkEvent*)aGEE);
}
}
//=============================================================
void UninitExposeEvent(GdkEventExpose *aGEE,
gpointer p,
nsPaintEvent &anEvent,
PRUint32 aEventType)
{
if (aGEE != nsnull) {
delete anEvent.rect;
}
}
struct nsKeyConverter {
int vkCode; // Platform independent key code
int keysym; // GDK keysym key code
};
//
// Netscape keycodes are defined in widget/public/nsGUIEvent.h
// GTK keycodes are defined in <gdk/gdkkeysyms.h>
//
struct nsKeyConverter nsKeycodes[] = {
{ NS_VK_CANCEL, GDK_Cancel },
{ NS_VK_BACK, GDK_BackSpace },
{ NS_VK_TAB, GDK_Tab },
{ NS_VK_TAB, GDK_ISO_Left_Tab },
{ NS_VK_CLEAR, GDK_Clear },
{ NS_VK_RETURN, GDK_Return },
{ NS_VK_SHIFT, GDK_Shift_L },
{ NS_VK_SHIFT, GDK_Shift_R },
{ NS_VK_CONTROL, GDK_Control_L },
{ NS_VK_CONTROL, GDK_Control_R },
{ NS_VK_ALT, GDK_Alt_L },
{ NS_VK_ALT, GDK_Alt_R },
{ NS_VK_PAUSE, GDK_Pause },
{ NS_VK_CAPS_LOCK, GDK_Caps_Lock },
{ NS_VK_ESCAPE, GDK_Escape },
{ NS_VK_SPACE, GDK_space },
{ NS_VK_PAGE_UP, GDK_Page_Up },
{ NS_VK_PAGE_DOWN, GDK_Page_Down },
{ NS_VK_END, GDK_End },
{ NS_VK_HOME, GDK_Home },
{ NS_VK_LEFT, GDK_Left },
{ NS_VK_UP, GDK_Up },
{ NS_VK_RIGHT, GDK_Right },
{ NS_VK_DOWN, GDK_Down },
{ NS_VK_PRINTSCREEN, GDK_Print },
{ NS_VK_INSERT, GDK_Insert },
{ NS_VK_DELETE, GDK_Delete },
{ NS_VK_MULTIPLY, GDK_KP_Multiply },
{ NS_VK_ADD, GDK_KP_Add },
{ NS_VK_SEPARATOR, GDK_KP_Separator },
{ NS_VK_SUBTRACT, GDK_KP_Subtract },
{ NS_VK_DECIMAL, GDK_KP_Decimal },
{ NS_VK_DIVIDE, GDK_KP_Divide },
{ NS_VK_RETURN, GDK_KP_Enter },
// NS doesn't have dash or equals distinct from the numeric keypad ones,
// so we'll use those for now. See bug 17008:
{ NS_VK_SUBTRACT, GDK_minus },
{ NS_VK_EQUALS, GDK_equal },
// and we don't have a single-quote symbol either:
{ NS_VK_QUOTE, GDK_apostrophe },
{ NS_VK_COMMA, GDK_comma },
{ NS_VK_PERIOD, GDK_period },
{ NS_VK_SLASH, GDK_slash },
{ NS_VK_BACK_SLASH, GDK_backslash },
{ NS_VK_BACK_QUOTE, GDK_grave },
{ NS_VK_OPEN_BRACKET, GDK_bracketleft },
{ NS_VK_CLOSE_BRACKET, GDK_bracketright },
{ NS_VK_QUOTE, GDK_quotedbl },
// Some shifted keys, see bug 15463.
// These should be subject to different keyboard mappings;
// how do we do that in gtk?
{ NS_VK_SEMICOLON, GDK_colon },
{ NS_VK_BACK_QUOTE, GDK_asciitilde },
{ NS_VK_COMMA, GDK_less },
{ NS_VK_PERIOD, GDK_greater },
{ NS_VK_SLASH, GDK_question },
{ NS_VK_1, GDK_exclam },
{ NS_VK_2, GDK_at },
{ NS_VK_3, GDK_numbersign },
{ NS_VK_4, GDK_dollar },
{ NS_VK_5, GDK_percent },
{ NS_VK_6, GDK_asciicircum },
{ NS_VK_7, GDK_ampersand },
{ NS_VK_8, GDK_asterisk },
{ NS_VK_9, GDK_parenleft },
{ NS_VK_0, GDK_parenright },
{ NS_VK_SUBTRACT, GDK_underscore },
{ NS_VK_EQUALS, GDK_plus }
};
void nsGtkWidget_InitNSKeyEvent(int aEventType, nsKeyEvent& aKeyEvent,
GtkWidget *w, gpointer p, GdkEventKey * event);
//==============================================================
// Input keysym is in gtk format; output is in NS_VK format
int nsPlatformToDOMKeyCode(GdkEventKey *aGEK)
{
int i;
int length = sizeof(nsKeycodes) / sizeof(struct nsKeyConverter);
int keysym = aGEK->keyval;
// First, try to handle alphanumeric input, not listed in nsKeycodes:
// most likely, more letters will be getting typed in than things in
// the key list, so we will look through these first.
// since X has different key symbols for upper and lowercase letters and
// mozilla does not, convert gdk's to mozilla's
if (keysym >= GDK_a && keysym <= GDK_z)
return keysym - GDK_a + NS_VK_A;
if (keysym >= GDK_A && keysym <= GDK_Z)
return keysym - GDK_A + NS_VK_A;
// numbers
if (keysym >= GDK_0 && keysym <= GDK_9)
return keysym - GDK_0 + NS_VK_0;
// keypad numbers
if (keysym >= GDK_KP_0 && keysym <= GDK_KP_9)
return keysym - GDK_KP_0 + NS_VK_NUMPAD0;
// misc other things
for (i = 0; i < length; i++) {
if (nsKeycodes[i].keysym == keysym)
return(nsKeycodes[i].vkCode);
}
// function keys
if (keysym >= GDK_F1 && keysym <= GDK_F24)
return keysym - GDK_F1 + NS_VK_F1;
#if defined(DEBUG_akkana) || defined(DEBUG_ftang)
printf("No match in nsPlatformToDOMKeyCode: keysym is 0x%x, string is %s\n", keysym, aGEK->string);
#endif
return((int)0);
}
//==============================================================
PRUint32 nsConvertCharCodeToUnicode(GdkEventKey* aGEK)
{
// For control chars, GDK sets string to be the actual ascii value.
// Map that to what nsKeyEvent wants, which currently --
// TEMPORARILY (the spec has changed and will be switched over
// when the tree opens for M11) --
// is the ascii for the actual event (e.g. 1 for control-a).
// This is only true for control chars; for alt chars, send the
// ascii for the key, i.e. a for alt-a.
if (aGEK->state & GDK_CONTROL_MASK)
{
if (aGEK->state & GDK_SHIFT_MASK)
return aGEK->string[0] + 'A' - 1;
else
return aGEK->string[0] + 'a' - 1;
}
// For now (obviously this will need to change for IME),
// only set a char code if the result is printable:
if (!isprint(aGEK->string[0]))
return 0;
// ALT keys in gdk give the upper case character in string,
// but we want the lower case char in char code
// unless shift was also pressed.
if (((aGEK->state & GDK_MOD1_MASK))
&& !(aGEK->state & GDK_SHIFT_MASK)
&& isupper(aGEK->string[0]))
return tolower(aGEK->string[0]);
//
// placeholder for something a little more interesting and correct
//
return aGEK->string[0];
}
//==============================================================
void InitKeyEvent(GdkEventKey *aGEK,
gpointer p,
nsKeyEvent &anEvent,
PRUint32 aEventType)
{
anEvent.message = aEventType;
anEvent.widget = (nsWidget *) p;
anEvent.eventStructType = NS_KEY_EVENT;
if (aGEK != nsnull) {
anEvent.keyCode = nsPlatformToDOMKeyCode(aGEK);
anEvent.charCode = 0;
anEvent.time = aGEK->time;
anEvent.isShift = (aGEK->state & GDK_SHIFT_MASK) ? PR_TRUE : PR_FALSE;
anEvent.isControl = (aGEK->state & GDK_CONTROL_MASK) ? PR_TRUE : PR_FALSE;
anEvent.isAlt = (aGEK->state & GDK_MOD1_MASK) ? PR_TRUE : PR_FALSE;
// XXX
anEvent.isMeta = PR_FALSE; //(aGEK->state & GDK_MOD2_MASK) ? PR_TRUE : PR_FALSE;
anEvent.point.x = 0;
anEvent.point.y = 0;
}
}
void InitKeyPressEvent(GdkEventKey *aGEK,
gpointer p,
nsKeyEvent &anEvent)
{
//
// init the basic event fields
//
anEvent.eventStructType = NS_KEY_EVENT;
anEvent.message = NS_KEY_PRESS;
anEvent.widget = (nsWidget*)p;
if (aGEK!=nsnull)
{
anEvent.isShift = (aGEK->state & GDK_SHIFT_MASK) ? PR_TRUE : PR_FALSE;
anEvent.isControl = (aGEK->state & GDK_CONTROL_MASK) ? PR_TRUE : PR_FALSE;
anEvent.isAlt = (aGEK->state & GDK_MOD1_MASK) ? PR_TRUE : PR_FALSE;
// XXX
anEvent.isMeta = PR_FALSE; //(aGEK->state & GDK_MOD2_MASK) ? PR_TRUE : PR_FALSE;
if(aGEK->length)
anEvent.charCode = nsConvertCharCodeToUnicode(aGEK);
else
anEvent.charCode = 0;
if (anEvent.charCode) {
anEvent.keyCode = 0;
anEvent.isShift = PR_FALSE;
} else
anEvent.keyCode = nsPlatformToDOMKeyCode(aGEK);
#if defined(DEBUG_akkana) || defined(DEBUG_pavlov) || defined (DEBUG_ftang)
printf("Key Press event: keyCode = 0x%x, char code = '%c'",
anEvent.keyCode, anEvent.charCode);
if (anEvent.isShift)
printf(" [shift]");
if (anEvent.isControl)
printf(" [ctrl]");
if (anEvent.isAlt)
printf(" [alt]");
if (anEvent.isMeta)
printf(" [meta]");
printf("\n");
#endif
anEvent.time = aGEK->time;
anEvent.point.x = 0;
anEvent.point.y = 0;
}
}
//=============================================================
void UninitKeyEvent(GdkEventKey *aGEK,
gpointer p,
nsKeyEvent &anEvent,
PRUint32 aEventType)
{
}
/*==============================================================
==============================================================
=============================================================
==============================================================*/
void handle_size_allocate(GtkWidget *w, GtkAllocation *alloc, gpointer p)
{
nsWindow *widget = (nsWindow *)p;
nsSizeEvent event;
InitAllocationEvent(alloc, p, event, NS_SIZE);
NS_ADDREF(widget);
widget->OnResize(event);
NS_RELEASE(widget);
delete event.windowSize;
}
gint handle_expose_event(GtkWidget *w, GdkEventExpose *event, gpointer p)
{
if (event->type == GDK_NO_EXPOSE)
return PR_FALSE;
nsPaintEvent pevent;
InitExposeEvent(event, p, pevent, NS_PAINT);
nsWindow *win = (nsWindow *)p;
win->AddRef();
win->OnExpose(pevent);
win->Release();
UninitExposeEvent(event, p, pevent, NS_PAINT);
return PR_TRUE;
}
//==============================================================
void menu_item_activate_handler(GtkWidget *w, gpointer p)
{
// g_print("menu_item_activate_handler\n");
nsIMenuListener *menuListener = nsnull;
nsIMenuItem *menuItem = (nsIMenuItem *)p;
if (menuItem != nsnull) {
nsMenuEvent mevent;
mevent.message = NS_MENU_SELECTED;
mevent.eventStructType = NS_MENU_EVENT;
mevent.point.x = 0;
mevent.point.y = 0;
// mevent.widget = menuItem;
mevent.widget = nsnull;
menuItem->GetCommand(mevent.mCommand);
mevent.mMenuItem = menuItem;
mevent.time = PR_IntervalNow();
// FIXME - THIS SHOULD WORK. FIX EVENTS FOR XP CODE!!!!! (pav)
// nsEventStatus status;
// mevent.widget->DispatchEvent((nsGUIEvent *)&mevent, status);
menuItem->QueryInterface(nsIMenuListener::GetIID(), (void**)&menuListener);
if(menuListener) {
menuListener->MenuItemSelected(mevent);
NS_IF_RELEASE(menuListener);
}
}
}
//==============================================================
void menu_map_handler(GtkWidget *w, gpointer p)
{
nsIMenuListener *menuListener = nsnull;
nsIMenu *menu = (nsIMenu *)p;
if (menu != nsnull) {
nsMenuEvent mevent;
mevent.message = NS_MENU_SELECTED;
mevent.eventStructType = NS_MENU_EVENT;
mevent.point.x = 0;
mevent.point.y = 0;
mevent.widget = nsnull;
mevent.time = PR_IntervalNow();
menu->QueryInterface(nsIMenuListener::GetIID(), (void**)&menuListener);
if(menuListener) {
menuListener->MenuConstruct(
mevent,
nsnull, //parent window
nsnull, //menuNode
nsnull ); // webshell
NS_IF_RELEASE(menuListener);
}
}
}
//==============================================================
void menu_unmap_handler(GtkWidget *w, gpointer p)
{
nsIMenuListener *menuListener = nsnull;
nsIMenu *menu = (nsIMenu *)p;
if (menu != nsnull) {
nsMenuEvent mevent;
mevent.message = NS_MENU_SELECTED;
mevent.eventStructType = NS_MENU_EVENT;
mevent.point.x = 0;
mevent.point.y = 0;
mevent.widget = nsnull;
mevent.time = PR_IntervalNow();
menu->QueryInterface(nsIMenuListener::GetIID(), (void**)&menuListener);
if(menuListener) {
menuListener->MenuDestruct(mevent);
NS_IF_RELEASE(menuListener);
}
}
}
//==============================================================
void handle_scrollbar_value_changed(GtkAdjustment *adj, gpointer p)
{
nsScrollbar *widget = (nsScrollbar*) p;
nsScrollbarEvent sevent;
sevent.message = NS_SCROLLBAR_POS;
sevent.widget = (nsWidget *) p;
sevent.eventStructType = NS_SCROLLBAR_EVENT;
GdkWindow *win = (GdkWindow *)widget->GetNativeData(NS_NATIVE_WINDOW);
gdk_window_get_pointer(win, &sevent.point.x, &sevent.point.y, nsnull);
widget->AddRef();
widget->OnScroll(sevent, adj->value);
widget->Release();
/* FIXME we need to set point.* from the event stuff. */
#if 0
nsWindow * widgetWindow = (nsWindow *) p ;
XmScrollBarCallbackStruct * cbs = (XmScrollBarCallbackStruct*) call_data;
sevent.widget = (nsWindow *) p;
if (cbs->event != nsnull) {
sevent.point.x = cbs->event->xbutton.x;
sevent.point.y = cbs->event->xbutton.y;
} else {
sevent.point.x = 0;
sevent.point.y = 0;
}
sevent.time = 0; //XXX Implement this
switch (cbs->reason) {
case XmCR_INCREMENT:
sevent.message = NS_SCROLLBAR_LINE_NEXT;
break;
case XmCR_DECREMENT:
sevent.message = NS_SCROLLBAR_LINE_PREV;
break;
case XmCR_PAGE_INCREMENT:
sevent.message = NS_SCROLLBAR_PAGE_NEXT;
break;
case XmCR_PAGE_DECREMENT:
sevent.message = NS_SCROLLBAR_PAGE_PREV;
break;
case XmCR_DRAG:
sevent.message = NS_SCROLLBAR_POS;
break;
case XmCR_VALUE_CHANGED:
sevent.message = NS_SCROLLBAR_POS;
break;
default:
break;
}
#endif
}
static gint composition_start(GdkEventKey *aEvent, nsWindow *aWin,
nsEventStatus *aStatus) {
nsCompositionEvent compEvent;
compEvent.widget = (nsWidget*)aWin;
compEvent.point.x = 0;
compEvent.point.y = 0;
compEvent.time = aEvent->time;
compEvent.message = NS_COMPOSITION_START;
compEvent.eventStructType = NS_COMPOSITION_START;
compEvent.compositionMessage = NS_COMPOSITION_START;
aWin->DispatchEvent(&compEvent, *aStatus);
// set SpotLocation
aWin->SetXICSpotLocation(compEvent.theReply.mCursorPosition);
return PR_TRUE;
}
static gint composition_draw(GdkEventKey *aEvent, nsWindow *aWin,
nsIUnicodeDecoder *aDecoder,
nsEventStatus *aStatus) {
if (!aWin->mIMECompositionUniString) {
aWin->mIMECompositionUniStringSize = 128;
aWin->mIMECompositionUniString =
new PRUnichar[aWin->mIMECompositionUniStringSize];
}
PRUnichar *uniChar;
PRInt32 uniCharSize;
PRInt32 srcLen = aEvent->length;
for (;;) {
uniChar = aWin->mIMECompositionUniString;
uniCharSize = aWin->mIMECompositionUniStringSize - 1;
aDecoder->Convert((char*)aEvent->string, &srcLen, uniChar, &uniCharSize);
if (srcLen == aEvent->length &&
uniCharSize < aWin->mIMECompositionUniStringSize - 1) {
break;
}
aWin->mIMECompositionUniStringSize += 32;
aWin->mIMECompositionUniString =
new PRUnichar[aWin->mIMECompositionUniStringSize];
}
aWin->mIMECompositionUniString[uniCharSize] = 0;
nsTextEvent textEvent;
textEvent.message = NS_TEXT_EVENT;
textEvent.widget = (nsWidget*)aWin;
textEvent.time = aEvent->time;
textEvent.point.x = 0;
textEvent.point.y = 0;
textEvent.theText = aWin->mIMECompositionUniString;
textEvent.rangeCount = 0;
textEvent.rangeArray = nsnull;
textEvent.isShift = (aEvent->state & GDK_SHIFT_MASK) ? PR_TRUE : PR_FALSE;
textEvent.isControl = (aEvent->state & GDK_CONTROL_MASK) ? PR_TRUE : PR_FALSE;
textEvent.isAlt = (aEvent->state & GDK_MOD1_MASK) ? PR_TRUE : PR_FALSE;
// XXX
textEvent.isMeta = PR_FALSE; //(aEvent->state & GDK_MOD2_MASK) ? PR_TRUE : PR_FALSE;
textEvent.eventStructType = NS_TEXT_EVENT;
aWin->DispatchEvent(&textEvent, *aStatus);
aWin->SetXICSpotLocation(textEvent.theReply.mCursorPosition);
return True;
}
static gint composition_end(GdkEventKey *aEvent, nsWindow *aWin,
nsEventStatus *aStatus) {
nsCompositionEvent compEvent;
compEvent.widget = (nsWidget*)aWin;
compEvent.point.x = 0;
compEvent.point.y = 0;
compEvent.time = aEvent->time;
compEvent.message = NS_COMPOSITION_END;
compEvent.eventStructType = NS_COMPOSITION_END;
compEvent.compositionMessage = NS_COMPOSITION_END;
aWin->DispatchEvent(&compEvent, *aStatus);
return PR_TRUE;
}
static nsIUnicodeDecoder*
open_unicode_decoder(void) {
nsresult result = NS_ERROR_FAILURE;
nsIUnicodeDecoder *decoder = nsnull;
NS_WITH_SERVICE(nsIPlatformCharset, platform, NS_PLATFORMCHARSET_PROGID,
&result);
if (platform && NS_SUCCEEDED(result)) {
nsAutoString charset("");
result = platform->GetCharset(kPlatformCharsetSel_Menu, charset);
if (NS_FAILED(result) || (charset.Length() == 0)) {
charset = "ISO-8859-1"; // default
}
nsICharsetConverterManager* manager = nsnull;
nsresult res = nsServiceManager::
GetService(kCharsetConverterManagerCID,
nsCOMTypeInfo<nsICharsetConverterManager>::GetIID(),
(nsISupports**)&manager);
if (manager && NS_SUCCEEDED(res)) {
manager->GetUnicodeDecoder(&charset, &decoder);
nsServiceManager::ReleaseService(kCharsetConverterManagerCID, manager);
}
}
return decoder;
}
// GTK's text widget already does XIM, so we don't want to do this again
gint handle_key_press_event_for_text(GtkObject *w, GdkEventKey* event,
gpointer p)
{
nsKeyEvent kevent;
nsTextWidget* win = (nsTextWidget*)p;
// work around for annoying things.
if (event->keyval == GDK_Tab)
if (event->state & GDK_CONTROL_MASK)
if (event->state & GDK_MOD1_MASK)
return PR_FALSE;
// Don't pass shift, control and alt as key press events
if (event->keyval == GDK_Shift_L
|| event->keyval == GDK_Shift_R
|| event->keyval == GDK_Control_L
|| event->keyval == GDK_Control_R)
return PR_TRUE;
win->AddRef();
InitKeyEvent(event, p, kevent, NS_KEY_DOWN);
win->OnKey(kevent);
//
// Second, dispatch the Key event as a key press event w/ a Unicode
// character code. Note we have to check for modifier keys, since
// gtk returns a character value for them
//
InitKeyPressEvent(event,p, kevent);
win->OnKey(kevent);
win->Release();
if (w)
{
gtk_signal_emit_stop_by_name (GTK_OBJECT(w), "key_press_event");
}
return PR_TRUE;
}
// GTK's text widget already does XIM, so we don't want to do this again
gint handle_key_release_event_for_text(GtkObject *w, GdkEventKey* event,
gpointer p)
{
nsKeyEvent kevent;
nsTextWidget* win = (nsTextWidget*)p;
// Don't pass shift, control and alt as key release events
if (event->keyval == GDK_Shift_L
|| event->keyval == GDK_Shift_R
|| event->keyval == GDK_Control_L
|| event->keyval == GDK_Control_R)
return PR_TRUE;
InitKeyEvent(event, p, kevent, NS_KEY_UP);
win->AddRef();
win->OnKey(kevent);
win->Release();
if (w)
{
gtk_signal_emit_stop_by_name (GTK_OBJECT(w), "key_release_event");
}
return PR_TRUE;
}
//==============================================================
gint handle_key_press_event(GtkObject *w, GdkEventKey* event, gpointer p)
{
nsKeyEvent kevent;
nsWindow* win = (nsWindow*)p;
// work around for annoying things.
if (event->keyval == GDK_Tab)
if (event->state & GDK_CONTROL_MASK)
if (event->state & GDK_MOD1_MASK)
return PR_FALSE;
// Don't pass shift, control and alt as key press events
if (event->keyval == GDK_Shift_L
|| event->keyval == GDK_Shift_R
|| event->keyval == GDK_Control_L
|| event->keyval == GDK_Control_R)
return PR_TRUE;
win->AddRef();
//
// First, dispatch the Key event as a virtual key down event
//
InitKeyEvent(event, p, kevent, NS_KEY_DOWN);
win->OnKey(kevent);
//
// Second, dispatch the Key event as a key press event w/ a Unicode
// character code. Note we have to check for modifier keys, since
// gtk returns a character value for them
//
if (event->length) {
static nsIUnicodeDecoder *decoder = nsnull;
if (!decoder) {
decoder = open_unicode_decoder();
}
if (decoder && (!kevent.keyCode)) {
nsEventStatus status;
composition_start(event, win, &status);
composition_draw(event, win, decoder, &status);
composition_end(event, win, &status);
} else {
InitKeyPressEvent(event,p, kevent);
win->OnKey(kevent);
nsEventStatus status;
composition_start(event, win, &status);
composition_end(event, win, &status);
}
} else { // for Home/End/Up/Down/Left/Right/PageUp/PageDown key
InitKeyPressEvent(event,p, kevent);
win->OnKey(kevent);
}
win->Release();
if (w)
{
gtk_signal_emit_stop_by_name (GTK_OBJECT(w), "key_press_event");
}
return PR_TRUE;
}
//==============================================================
gint handle_key_release_event(GtkObject *w, GdkEventKey* event, gpointer p)
{
// Don't pass shift, control and alt as key release events
if (event->keyval == GDK_Shift_L
|| event->keyval == GDK_Shift_R
|| event->keyval == GDK_Control_L
|| event->keyval == GDK_Control_R)
return PR_TRUE;
nsKeyEvent kevent;
InitKeyEvent(event, p, kevent, NS_KEY_UP);
nsWindow * win = (nsWindow *) p;
win->AddRef();
win->OnKey(kevent);
win->Release();
if (w)
{
gtk_signal_emit_stop_by_name (GTK_OBJECT(w), "key_release_event");
}
return PR_TRUE;
}
//==============================================================
void
handle_gdk_event (GdkEvent *event, gpointer data)
{
GtkObject *object = nsnull;
if (event->any.window)
gdk_window_get_user_data (event->any.window, (void **)&object);
if (object != nsnull &&
GDK_IS_SUPERWIN (object))
{
// It was an event on one of our superwindows
nsWindow *window = (nsWindow *)gtk_object_get_data (object, "nsWindow");
if (gtk_grab_get_current () != nsnull)
{
// A GTK+ grab is in effect. Rewrite the event to point to
// our toplevel, and pass it through.
// XXX: We should actually translate the coordinates
gdk_window_unref (event->any.window);
event->any.window = GTK_WIDGET (window->GetMozArea())->window;
gdk_window_ref (event->any.window);
}
else
{
// Handle it ourselves.
switch (event->type)
{
case GDK_KEY_PRESS:
handle_key_press_event (NULL, &event->key, window);
break;
case GDK_KEY_RELEASE:
handle_key_release_event (NULL, &event->key, window);
break;
default:
window->HandleEvent (event);
}
return;
}
}
gtk_main_do_event (event);
}
//==============================================================
void
handle_xlib_shell_event(GdkSuperWin *superwin, XEvent *event, gpointer p)
{
nsWindow *window = (nsWindow *)p;
switch(event->xany.type) {
case ConfigureNotify:
window->HandleXlibConfigureNotifyEvent(event);
break;
default:
break;
}
}
//==============================================================
void
handle_xlib_bin_event(GdkSuperWin *superwin, XEvent *event, gpointer p)
{
nsWindow *window = (nsWindow *)p;
switch(event->xany.type) {
case Expose:
window->HandleXlibExposeEvent(event);
break;
case ButtonPress:
case ButtonRelease:
window->HandleXlibButtonEvent((XButtonEvent *)event);
break;
case MotionNotify:
window->HandleXlibMotionNotifyEvent((XMotionEvent *) event);
break;
case EnterNotify:
case LeaveNotify:
window->HandleXlibCrossingEvent((XCrossingEvent *) event);
break;
default:
break;
}
}
//==============================================================
gint nsGtkWidget_FSBCancel_Callback(GtkWidget *w, gpointer p)
{
#if 0
nsWindow *widgetWindow = (nsWindow*)gtk_object_get_user_data(GTK_OBJECT(w));
nsFileWidget * widgetWindow = (nsFileWidget *) p ;
if (p != nsnull) {
widgetWindow->OnCancel();
}
#endif
return PR_FALSE;
}
//==============================================================
gint nsGtkWidget_FSBOk_Callback(GtkWidget *w, gpointer p)
{
#if 0
nsWindow *widgetWindow = (nsWindow*)gtk_object_get_user_data(GTK_OBJECT(w));
nsFileWidget * widgetWindow = (nsFileWidget *) p;
if (p != nsnull) {
widgetWindow->OnOk();
}
#endif
return PR_FALSE;
}

View File

@@ -0,0 +1,72 @@
/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*-
*
* The contents of this file are subject to the Netscape Public
* License Version 1.1 (the "License"); you may not use this file
* except in compliance with the License. You may obtain a copy of
* the License at http://www.mozilla.org/NPL/
*
* Software distributed under the License is distributed on an "AS
* IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or
* implied. See the License for the specific language governing
* rights and limitations under the License.
*
* The Original Code is mozilla.org code.
*
* The Initial Developer of the Original Code is Netscape
* Communications Corporation. Portions created by Netscape are
* Copyright (C) 1998 Netscape Communications Corporation. All
* Rights Reserved.
*
* Contributor(s):
*/
#ifndef __nsGtkEventHandler_h
#define __nsGtkEventHandler_h
#include <gtk/gtk.h>
#include <gdk/gdkx.h>
#include "gdksuperwin.h"
class nsIWidget;
class nsIMenuItem;
class nsIMenu;
gint handle_configure_event(GtkWidget *w, GdkEventConfigure *conf, gpointer p);
void handle_size_allocate(GtkWidget *w, GtkAllocation *alloc, gpointer p);
gint handle_expose_event(GtkWidget *w, GdkEventExpose *event, gpointer p);
gint handle_key_release_event_for_text(GtkObject *w, GdkEventKey* event, gpointer p);
gint handle_key_press_event_for_text(GtkObject *w, GdkEventKey* event, gpointer p);
gint handle_key_release_event(GtkObject *w, GdkEventKey* event, gpointer p);
gint handle_key_press_event(GtkObject *w, GdkEventKey* event, gpointer p);
void handle_scrollbar_value_changed(GtkAdjustment *adjustment, gpointer p);
void menu_item_activate_handler(GtkWidget *w, gpointer p);
void menu_map_handler(GtkWidget *w, gpointer p);
void menu_unmap_handler(GtkWidget *w, gpointer p);
//----------------------------------------------------
gint nsGtkWidget_FSBCancel_Callback(GtkWidget *w, gpointer p);
gint nsGtkWidget_FSBOk_Callback(GtkWidget *w, gpointer p);
//----------------------------------------------------
gint CheckButton_Toggle_Callback(GtkWidget *w, gpointer p);
gint nsGtkWidget_RadioButton_ArmCallback(GtkWidget *w, gpointer p);
gint nsGtkWidget_RadioButton_DisArmCallback(GtkWidget *w, gpointer p);
gint nsGtkWidget_Text_Callback(GtkWidget *w, GdkEventKey* event, gpointer p);
gint nsGtkWidget_Expose_Callback(GtkWidget *w, gpointer p);
gint nsGtkWidget_Refresh_Callback(gpointer call_data);
void handle_xlib_shell_event(GdkSuperWin *superwin, XEvent *event, gpointer p);
void handle_xlib_bin_event(GdkSuperWin *superwin, XEvent *event, gpointer p);
void handle_gdk_event (GdkEvent *event, gpointer data);
#endif // __nsGtkEventHandler.h

View File

@@ -0,0 +1,213 @@
/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*-
*
* The contents of this file are subject to the Netscape Public
* License Version 1.1 (the "License"); you may not use this file
* except in compliance with the License. You may obtain a copy of
* the License at http://www.mozilla.org/NPL/
*
* Software distributed under the License is distributed on an "AS
* IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or
* implied. See the License for the specific language governing
* rights and limitations under the License.
*
* The Original Code is mozilla.org code.
*
* The Initial Developer of the Original Code is Netscape
* Communications Corporation. Portions created by Netscape are
* Copyright (C) 1998 Netscape Communications Corporation. All
* Rights Reserved.
*
* Contributor(s):
*/
#include <unistd.h>
#include <string.h>
#include "nsGtkUtils.h"
#include <gdk/gdkx.h>
#include <gdk/gdkprivate.h>
#if defined(__osf__) && !defined(_XOPEN_SOURCE_EXTENDED)
/*
** DEC's compiler requires _XOPEN_SOURCE_EXTENDED to be defined in
** order for it to see the prototype for usleep in unistd.h, but if
** we define that the build breaks long before getting here. So
** put the prototype here explicitly.
*/
int usleep(useconds_t);
#endif
#if defined(__QNX__)
#define usleep(s) sleep(s)
#endif
//////////////////////////////////////////////////////////////////
#if 0
/* staitc */ gint
nsGtkUtils::gdk_query_pointer(GdkWindow * window,
gint * x_out,
gint * y_out)
{
g_return_val_if_fail(NULL != window, FALSE);
g_return_val_if_fail(NULL != x_out, FALSE);
g_return_val_if_fail(NULL != y_out, FALSE);
Window root;
Window child;
int rootx, rooty;
int winx = 0;
int winy = 0;
unsigned int xmask = 0;
gint result = FALSE;
*x_out = -1;
*y_out = -1;
result = XQueryPointer(GDK_WINDOW_XDISPLAY(window),
GDK_WINDOW_XWINDOW(window),
&root,
&child,
&rootx,
&rooty,
&winx,
&winy,
&xmask);
if (result)
{
*x_out = rootx;
*y_out = rooty;
}
return result;
}
#endif
//////////////////////////////////////////////////////////////////
/* static */ void
nsGtkUtils::gtk_widget_set_color(GtkWidget * widget,
GtkRcFlags flags,
GtkStateType state,
GdkColor * color)
{
GtkRcStyle * rc_style;
g_return_if_fail (widget != NULL);
g_return_if_fail (GTK_IS_WIDGET (widget));
g_return_if_fail (color != NULL);
g_return_if_fail (flags == 0);
rc_style = (GtkRcStyle *) gtk_object_get_data (GTK_OBJECT (widget),
"modify-style");
if (!rc_style)
{
rc_style = gtk_rc_style_new ();
gtk_widget_modify_style (widget, rc_style);
gtk_object_set_data (GTK_OBJECT (widget), "modify-style", rc_style);
}
if (flags & GTK_RC_FG)
{
rc_style->color_flags[state] = GtkRcFlags(rc_style->color_flags[state] | GTK_RC_FG);
rc_style->fg[state] = *color;
}
if (flags & GTK_RC_BG)
{
rc_style->color_flags[state] = GtkRcFlags(rc_style->color_flags[state] | GTK_RC_BG);
rc_style->bg[state] = *color;
}
if (flags & GTK_RC_TEXT)
{
rc_style->color_flags[state] = GtkRcFlags(rc_style->color_flags[state] | GTK_RC_TEXT);
rc_style->text[state] = *color;
}
if (flags & GTK_RC_BASE)
{
rc_style->color_flags[state] = GtkRcFlags(rc_style->color_flags[state] | GTK_RC_BASE);
rc_style->base[state] = *color;
}
}
//////////////////////////////////////////////////////////////////
/* static */ GdkModifierType
nsGtkUtils::gdk_keyboard_get_modifiers()
{
GdkModifierType m = (GdkModifierType) 0;
gdk_window_get_pointer(NULL,NULL,NULL,&m);
return m;
}
//////////////////////////////////////////////////////////////////
/* static */ void
nsGtkUtils::gdk_window_flash(GdkWindow * aGdkWindow,
unsigned int aTimes,
unsigned long aInterval,
GdkRectangle * aArea)
{
gint x;
gint y;
gint width;
gint height;
guint i;
GdkGC * gc = 0;
GdkColor white;
gdk_window_get_geometry(aGdkWindow,
NULL,
NULL,
&width,
&height,
NULL);
gdk_window_get_origin (aGdkWindow,
&x,
&y);
gc = gdk_gc_new(GDK_ROOT_PARENT());
white.pixel = WhitePixel(gdk_display,DefaultScreen(gdk_display));
gdk_gc_set_foreground(gc,&white);
gdk_gc_set_function(gc,GDK_XOR);
gdk_gc_set_subwindow(gc,GDK_INCLUDE_INFERIORS);
/*
* If an area is given, use that. Notice how out of whack coordinates
* and dimentsions are not checked!!!
*/
if (aArea)
{
x += aArea->x;
y += aArea->y;
width = aArea->width;
height = aArea->height;
}
/*
* Need to do this twice so that the XOR effect can replace
* the original window contents.
*/
for (i = 0; i < aTimes * 2; i++)
{
gdk_draw_rectangle(GDK_ROOT_PARENT(),
gc,
TRUE,
x,
y,
width,
height);
gdk_flush();
usleep(aInterval);
}
gdk_gc_destroy(gc);
}
//////////////////////////////////////////////////////////////////

View File

@@ -0,0 +1,85 @@
/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*-
*
* The contents of this file are subject to the Netscape Public
* License Version 1.1 (the "License"); you may not use this file
* except in compliance with the License. You may obtain a copy of
* the License at http://www.mozilla.org/NPL/
*
* Software distributed under the License is distributed on an "AS
* IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or
* implied. See the License for the specific language governing
* rights and limitations under the License.
*
* The Original Code is mozilla.org code.
*
* The Initial Developer of the Original Code is Netscape
* Communications Corporation. Portions created by Netscape are
* Copyright (C) 1998 Netscape Communications Corporation. All
* Rights Reserved.
*
* Contributor(s):
*/
#ifndef __nsGtkUtils_h
#define __nsGtkUtils_h
#include <gtk/gtk.h>
struct nsGtkUtils
{
//
// Wrapper for XQueryPointer
//
#if 0
static gint gdk_query_pointer(GdkWindow * window,
gint * x_out,
gint * y_out);
#endif
//
// Change a widget's background
//
// flags isa bit mask of the following bits:
//
// GTK_RC_FG
// GTK_RC_BG
// GTK_RC_TEXT
// GTK_RC_BASE
//
// state is an enum:
//
// GTK_STATE_NORMAL,
// GTK_STATE_ACTIVE,
// GTK_STATE_PRELIGHT,
// GTK_STATE_SELECTED,
// GTK_STATE_INSENSITIVE
//
static void gtk_widget_set_color(GtkWidget * widget,
GtkRcFlags flags,
GtkStateType state,
GdkColor * color);
/**
* Return the current keyboard modifier state.
*
* @return the current keyboard modifier state.
*
*/
static GdkModifierType gdk_keyboard_get_modifiers();
/**
* Flash an area within a GDK window (or the whole window)
*
* @param aGdkWindow The GDK window to flash.
* @param aTimes Number of times to flash the area.
* @param aInterval Interval between flashes in milliseconds.
* @param aArea The area to flash. The whole window if NULL.
*
*/
static void gdk_window_flash(GdkWindow * aGdkWindow,
unsigned int aTimes,
unsigned long aInterval,
GdkRectangle * aArea);
};
#endif // __nsGtkEventHandler.h

View File

@@ -0,0 +1,141 @@
/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*-
*
* The contents of this file are subject to the Netscape Public
* License Version 1.1 (the "License"); you may not use this file
* except in compliance with the License. You may obtain a copy of
* the License at http://www.mozilla.org/NPL/
*
* Software distributed under the License is distributed on an "AS
* IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or
* implied. See the License for the specific language governing
* rights and limitations under the License.
*
* The Original Code is mozilla.org code.
*
* The Initial Developer of the Original Code is Netscape
* Communications Corporation. Portions created by Netscape are
* Copyright (C) 1998 Netscape Communications Corporation. All
* Rights Reserved.
*
* Contributor(s):
*/
#include <gtk/gtk.h>
#include "nsLabel.h"
#include "nsString.h"
NS_IMPL_ADDREF_INHERITED(nsLabel, nsWidget)
NS_IMPL_RELEASE_INHERITED(nsLabel, nsWidget)
NS_IMPL_QUERY_INTERFACE2(nsLabel, nsILabel, nsIWidget)
//-------------------------------------------------------------------------
//
// nsLabel constructor
//
//-------------------------------------------------------------------------
nsLabel::nsLabel() : nsWidget(), nsILabel()
{
NS_INIT_REFCNT();
mAlignment = eAlign_Left;
}
//-------------------------------------------------------------------------
//
// nsLabel destructor
//
//-------------------------------------------------------------------------
nsLabel::~nsLabel()
{
}
//-------------------------------------------------------------------------
//
// Create the nativeLabel widget
//
//-------------------------------------------------------------------------
NS_IMETHODIMP nsLabel::CreateNative(GtkObject *parentWindow)
{
unsigned char alignment = GetNativeAlignment();
mWidget = gtk_label_new("");
gtk_widget_set_name(mWidget, "nsLabel");
gtk_misc_set_alignment(GTK_MISC(mWidget), 0.0, alignment);
return NS_OK;
}
//-------------------------------------------------------------------------
//
//
//-------------------------------------------------------------------------
NS_IMETHODIMP nsLabel::PreCreateWidget(nsWidgetInitData *aInitData)
{
if (nsnull != aInitData) {
nsLabelInitData* data = (nsLabelInitData *) aInitData;
mAlignment = data->mAlignment;
}
return NS_OK;
}
//-------------------------------------------------------------------------
//
// Set alignment
//
//-------------------------------------------------------------------------
NS_IMETHODIMP nsLabel::SetAlignment(nsLabelAlignment aAlignment)
{
GtkJustification align;
mAlignment = aAlignment;
align = GetNativeAlignment();
gtk_misc_set_alignment(GTK_MISC(mWidget), 0.0, align);
return NS_OK;
}
//-------------------------------------------------------------------------
//
//
//
//-------------------------------------------------------------------------
GtkJustification nsLabel::GetNativeAlignment()
{
switch (mAlignment) {
case eAlign_Right : return GTK_JUSTIFY_RIGHT;
case eAlign_Left : return GTK_JUSTIFY_LEFT;
case eAlign_Center: return GTK_JUSTIFY_CENTER;
default :
return GTK_JUSTIFY_LEFT;
}
return GTK_JUSTIFY_LEFT;
}
//-------------------------------------------------------------------------
//
// Set this button label
//
//-------------------------------------------------------------------------
NS_METHOD nsLabel::SetLabel(const nsString& aText)
{
NS_ALLOC_STR_BUF(label, aText, 256);
gtk_label_set(GTK_LABEL(mWidget), label);
NS_FREE_STR_BUF(label);
return NS_OK;
}
//-------------------------------------------------------------------------
//
// Get this button label
//
//-------------------------------------------------------------------------
NS_METHOD nsLabel::GetLabel(nsString& aBuffer)
{
char * text;
gtk_label_get(GTK_LABEL(mWidget), &text);
aBuffer.SetLength(0);
aBuffer.Append(text);
return NS_OK;
}

View File

@@ -0,0 +1,62 @@
/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*-
*
* The contents of this file are subject to the Netscape Public
* License Version 1.1 (the "License"); you may not use this file
* except in compliance with the License. You may obtain a copy of
* the License at http://www.mozilla.org/NPL/
*
* Software distributed under the License is distributed on an "AS
* IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or
* implied. See the License for the specific language governing
* rights and limitations under the License.
*
* The Original Code is mozilla.org code.
*
* The Initial Developer of the Original Code is Netscape
* Communications Corporation. Portions created by Netscape are
* Copyright (C) 1998 Netscape Communications Corporation. All
* Rights Reserved.
*
* Contributor(s):
*/
#ifndef nsLabel_h__
#define nsLabel_h__
#include "nsWidget.h"
#include "nsILabel.h"
/**
* Native GTK+ Label wrapper
*/
class nsLabel : public nsWidget,
public nsILabel
{
public:
nsLabel();
virtual ~nsLabel();
NS_DECL_ISUPPORTS_INHERITED
// nsILabel part
NS_IMETHOD SetLabel(const nsString &aText);
NS_IMETHOD GetLabel(nsString &aBuffer);
NS_IMETHOD SetAlignment(nsLabelAlignment aAlignment);
NS_IMETHOD PreCreateWidget(nsWidgetInitData *aInitData);
virtual PRBool OnMove(PRInt32 aX, PRInt32 aY) { return PR_FALSE; }
virtual PRBool OnResize(nsRect &aRect) { return PR_FALSE; }
protected:
NS_METHOD CreateNative(GtkObject *parentWindow);
GtkJustification GetNativeAlignment();
nsLabelAlignment mAlignment;
};
#endif // nsLabel_h__

View File

@@ -0,0 +1,394 @@
/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*-
*
* The contents of this file are subject to the Netscape Public
* License Version 1.1 (the "License"); you may not use this file
* except in compliance with the License. You may obtain a copy of
* the License at http://www.mozilla.org/NPL/
*
* Software distributed under the License is distributed on an "AS
* IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or
* implied. See the License for the specific language governing
* rights and limitations under the License.
*
* The Original Code is mozilla.org code.
*
* The Initial Developer of the Original Code is Netscape
* Communications Corporation. Portions created by Netscape are
* Copyright (C) 1998 Netscape Communications Corporation. All
* Rights Reserved.
*
* Contributor(s):
*/
#include <gtk/gtk.h>
#include "nsListBox.h"
#include "nsString.h"
NS_IMPL_ADDREF_INHERITED(nsListBox, nsWidget)
NS_IMPL_RELEASE_INHERITED(nsListBox, nsWidget)
NS_IMPL_QUERY_INTERFACE3(nsListBox, nsIListBox, nsIListWidget, nsIWidget)
//-------------------------------------------------------------------------
//
// nsListBox constructor
//
//-------------------------------------------------------------------------
nsListBox::nsListBox() : nsWidget(), nsIListWidget(), nsIListBox()
{
NS_INIT_REFCNT();
mMultiSelect = PR_FALSE;
mCList = nsnull;
}
//-------------------------------------------------------------------------
//
// nsListBox:: destructor
//
//-------------------------------------------------------------------------
nsListBox::~nsListBox()
{
}
void nsListBox::InitCallbacks(char * aName)
{
InstallButtonPressSignal(mCList);
InstallButtonReleaseSignal(mCList);
InstallEnterNotifySignal(mCList);
InstallLeaveNotifySignal(mCList);
// These are needed so that the events will go to us and not our parent.
AddToEventMask(mCList,
GDK_BUTTON_PRESS_MASK |
GDK_BUTTON_RELEASE_MASK |
GDK_ENTER_NOTIFY_MASK |
GDK_EXPOSURE_MASK |
GDK_FOCUS_CHANGE_MASK |
GDK_KEY_PRESS_MASK |
GDK_KEY_RELEASE_MASK |
GDK_LEAVE_NOTIFY_MASK |
GDK_POINTER_MOTION_MASK);
}
//-------------------------------------------------------------------------
//
// initializer
//
//-------------------------------------------------------------------------
NS_IMETHODIMP nsListBox::SetMultipleSelection(PRBool aMultipleSelections)
{
mMultiSelect = aMultipleSelections;
if (mCList) {
if (mMultiSelect)
gtk_clist_set_selection_mode(GTK_CLIST(mCList), GTK_SELECTION_MULTIPLE);
else
gtk_clist_set_selection_mode(GTK_CLIST(mCList), GTK_SELECTION_BROWSE);
}
return NS_OK;
}
//-------------------------------------------------------------------------
//
// AddItemAt
//
//-------------------------------------------------------------------------
NS_IMETHODIMP nsListBox::AddItemAt(nsString &aItem, PRInt32 aPosition)
{
if (mCList) {
gchar *text[2];
const nsAutoCString tempStr(aItem);
text[0] = (gchar*)(const char *)tempStr;
text[1] = (gchar*)NULL;
gtk_clist_insert(GTK_CLIST(mCList), (int)aPosition, text);
// XXX Im not sure using the string address is the right thing to
// store in the row data.
gtk_clist_set_row_data(GTK_CLIST(mCList), aPosition, (gpointer)&aItem);
}
return NS_OK;
}
//-------------------------------------------------------------------------
//
// Finds an item at a postion
//
//-------------------------------------------------------------------------
PRInt32 nsListBox::FindItem(nsString &aItem, PRInt32 aStartPos)
{
int i = -1;
if (mCList) {
i = gtk_clist_find_row_from_data(GTK_CLIST(mCList), (gpointer)&aItem);
if (i < aStartPos) {
i = -1;
}
}
return i;
}
//-------------------------------------------------------------------------
//
// CountItems - Get Item Count
//
//-------------------------------------------------------------------------
PRInt32 nsListBox::GetItemCount()
{
if (mCList) {
return GTK_CLIST(mCList)->rows;
}
else {
return 0;
}
}
//-------------------------------------------------------------------------
//
// Removes an Item at a specified location
//
//-------------------------------------------------------------------------
PRBool nsListBox::RemoveItemAt(PRInt32 aPosition)
{
if (mCList) {
gtk_clist_remove(GTK_CLIST(mCList), aPosition);
}
return PR_TRUE;
}
//-------------------------------------------------------------------------
//
//
//
//-------------------------------------------------------------------------
PRBool nsListBox::GetItemAt(nsString& anItem, PRInt32 aPosition)
{
PRBool result = PR_FALSE;
anItem.Truncate();
if (mCList) {
char *text = nsnull;
gtk_clist_get_text(GTK_CLIST(mCList),aPosition,0,&text);
if (text) {
anItem.Append(text);
result = PR_TRUE;
}
}
return result;
}
//-------------------------------------------------------------------------
//
// Gets the selected of selected item
//
//-------------------------------------------------------------------------
NS_IMETHODIMP nsListBox::GetSelectedItem(nsString& aItem)
{
aItem.Truncate();
if (mCList) {
PRInt32 i=0, idx=-1;
GtkCList *clist = GTK_CLIST(mCList);
GList *list = clist->row_list;
for (i=0; i < clist->rows && idx == -1; i++, list = list->next) {
if (GTK_CLIST_ROW (list)->state == GTK_STATE_SELECTED) {
char *text = nsnull;
gtk_clist_get_text(GTK_CLIST(mCList),i,0,&text);
if (text) {
aItem.Append(text);
}
return NS_OK;
}
}
}
return NS_OK;
}
//-------------------------------------------------------------------------
//
// Gets the list of selected otems
//
//-------------------------------------------------------------------------
PRInt32 nsListBox::GetSelectedIndex()
{
PRInt32 i=0, idx=-1;
if (mCList) {
if (!mMultiSelect) {
GtkCList *clist = GTK_CLIST(mCList);
GList *list = clist->row_list;
for (i=0; i < clist->rows && idx == -1; i++, list = list->next) {
if (GTK_CLIST_ROW (list)->state == GTK_STATE_SELECTED) {
idx = i;
}
}
} else {
NS_ASSERTION(PR_FALSE, "Multi selection list box does not support GetSelectedIndex()");
}
}
return idx;
}
//-------------------------------------------------------------------------
//
// SelectItem
//
//-------------------------------------------------------------------------
NS_IMETHODIMP nsListBox::SelectItem(PRInt32 aPosition)
{
if (mCList) {
gtk_clist_select_row(GTK_CLIST(mCList), aPosition, 0);
}
return NS_OK;
}
//-------------------------------------------------------------------------
//
// GetSelectedCount
//
//-------------------------------------------------------------------------
PRInt32 nsListBox::GetSelectedCount()
{
if (mCList) {
if (!GTK_CLIST(mCList)->selection)
return 0;
else
return (PRInt32)g_list_length(GTK_CLIST(mCList)->selection);
}
else {
return 0;
}
}
//-------------------------------------------------------------------------
//
// GetSelectedIndices
//
//-------------------------------------------------------------------------
NS_IMETHODIMP nsListBox::GetSelectedIndices(PRInt32 aIndices[], PRInt32 aSize)
{
if (mCList) {
PRInt32 i=0, num = 0;
GtkCList *clist = GTK_CLIST(mCList);
GList *list = clist->row_list;
for (i=0; i < clist->rows && num < aSize; i++, list = list->next) {
if (GTK_CLIST_ROW (list)->state == GTK_STATE_SELECTED) {
aIndices[num] = i;
num++;
}
}
}
else {
PRInt32 i = 0;
for (i = 0; i < aSize; i++) aIndices[i] = 0;
}
return NS_OK;
}
//-------------------------------------------------------------------------
//
// SetSelectedIndices
//
//-------------------------------------------------------------------------
NS_IMETHODIMP nsListBox::SetSelectedIndices(PRInt32 aIndices[], PRInt32 aSize)
{
if (mCList) {
gtk_clist_unselect_all(GTK_CLIST(mCList));
int i;
for (i=0;i<aSize;i++) {
SelectItem(aIndices[i]);
}
}
return NS_OK;
}
//-------------------------------------------------------------------------
//
// Deselect
//
//-------------------------------------------------------------------------
NS_IMETHODIMP nsListBox::Deselect()
{
if (mCList) {
gtk_clist_unselect_all(GTK_CLIST(mCList));
}
return NS_OK;
}
//-------------------------------------------------------------------------
//
// Set initial parameters
//
//-------------------------------------------------------------------------
NS_IMETHODIMP nsListBox::PreCreateWidget(nsWidgetInitData *aInitData)
{
if (nsnull != aInitData) {
nsListBoxInitData* data = (nsListBoxInitData *) aInitData;
mMultiSelect = data->mMultiSelect;
}
return NS_OK;
}
//-------------------------------------------------------------------------
//
// Create the native widget
//
//-------------------------------------------------------------------------
NS_IMETHODIMP nsListBox::CreateNative(GtkObject *parentWindow)
{
// to handle scrolling
mWidget = gtk_scrolled_window_new (nsnull, nsnull);
gtk_widget_set_name(mWidget, "nsListBox");
gtk_container_set_border_width(GTK_CONTAINER(mWidget), 0);
gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (mWidget),
GTK_POLICY_NEVER,
GTK_POLICY_AUTOMATIC);
mCList = ::gtk_clist_new(1);
gtk_clist_column_titles_hide(GTK_CLIST(mCList));
// Default (it may be changed)
gtk_clist_set_selection_mode(GTK_CLIST(mCList), GTK_SELECTION_BROWSE);
SetMultipleSelection(mMultiSelect);
gtk_widget_show(mCList);
gtk_signal_connect(GTK_OBJECT(mCList),
"destroy",
GTK_SIGNAL_FUNC(DestroySignal),
this);
gtk_container_add (GTK_CONTAINER (mWidget), mCList);
return NS_OK;
}
void
nsListBox::OnDestroySignal(GtkWidget* aGtkWidget)
{
if (aGtkWidget == mCList) {
mCList = nsnull;
}
else {
nsWidget::OnDestroySignal(aGtkWidget);
}
}
//-------------------------------------------------------------------------
//
// set font for listbox
//
//-------------------------------------------------------------------------
/*virtual*/
void nsListBox::SetFontNative(GdkFont *aFont)
{
GtkStyle *style = gtk_style_copy(GTK_WIDGET (g_list_nth_data(gtk_container_children(GTK_CONTAINER (mWidget)),0))->style);
// gtk_style_copy ups the ref count of the font
gdk_font_unref (style->font);
style->font = aFont;
gdk_font_ref(style->font);
gtk_widget_set_style(GTK_WIDGET (g_list_nth_data(gtk_container_children(GTK_CONTAINER (mWidget)),0)), style);
gtk_style_unref(style);
}

View File

@@ -0,0 +1,70 @@
/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*-
*
* The contents of this file are subject to the Netscape Public
* License Version 1.1 (the "License"); you may not use this file
* except in compliance with the License. You may obtain a copy of
* the License at http://www.mozilla.org/NPL/
*
* Software distributed under the License is distributed on an "AS
* IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or
* implied. See the License for the specific language governing
* rights and limitations under the License.
*
* The Original Code is mozilla.org code.
*
* The Initial Developer of the Original Code is Netscape
* Communications Corporation. Portions created by Netscape are
* Copyright (C) 1998 Netscape Communications Corporation. All
* Rights Reserved.
*
* Contributor(s):
*/
#ifndef nsListBox_h__
#define nsListBox_h__
#include "nsWidget.h"
#include "nsIListBox.h"
/**
* Native GTK+ Listbox wrapper
*/
class nsListBox : public nsWidget,
public nsIListWidget,
public nsIListBox
{
public:
nsListBox();
virtual ~nsListBox();
NS_DECL_ISUPPORTS_INHERITED
// nsIListBox interface
NS_IMETHOD PreCreateWidget(nsWidgetInitData *aInitData);
NS_IMETHOD SetMultipleSelection(PRBool aMultipleSelections);
NS_IMETHOD AddItemAt(nsString &aItem, PRInt32 aPosition);
PRInt32 FindItem(nsString &aItem, PRInt32 aStartPos);
PRInt32 GetItemCount();
PRBool RemoveItemAt(PRInt32 aPosition);
PRBool GetItemAt(nsString& anItem, PRInt32 aPosition);
NS_IMETHOD GetSelectedItem(nsString& aItem);
PRInt32 GetSelectedIndex();
PRInt32 GetSelectedCount();
NS_IMETHOD GetSelectedIndices(PRInt32 aIndices[], PRInt32 aSize);
NS_IMETHOD SetSelectedIndices(PRInt32 aIndices[], PRInt32 aSize);
NS_IMETHOD SelectItem(PRInt32 aPosition);
NS_IMETHOD Deselect() ;
virtual void SetFontNative(GdkFont *aFont);
protected:
NS_IMETHOD CreateNative(GtkObject *parentWindow);
virtual void InitCallbacks(char * aName = nsnull);
virtual void OnDestroySignal(GtkWidget* aGtkWidget);
GtkWidget *mCList;
PRBool mMultiSelect;
};
#endif // nsListBox_h__

View File

@@ -0,0 +1,316 @@
/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*-
*
* The contents of this file are subject to the Netscape Public
* License Version 1.1 (the "License"); you may not use this file
* except in compliance with the License. You may obtain a copy of
* the License at http://www.mozilla.org/NPL/
*
* Software distributed under the License is distributed on an "AS
* IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or
* implied. See the License for the specific language governing
* rights and limitations under the License.
*
* The Original Code is mozilla.org code.
*
* The Initial Developer of the Original Code is Netscape
* Communications Corporation. Portions created by Netscape are
* Copyright (C) 1998 Netscape Communications Corporation. All
* Rights Reserved.
*
* Contributor(s):
*/
#include "nsLookAndFeel.h"
#include <gtk/gtkinvisible.h>
#define GDK_COLOR_TO_NS_RGB(c) \
((nscolor) NS_RGB(c.red, c.green, c.blue))
NS_IMPL_ISUPPORTS1(nsLookAndFeel, nsILookAndFeel)
//-------------------------------------------------------------------------
//
// Query interface implementation
//
//-------------------------------------------------------------------------
nsLookAndFeel::nsLookAndFeel()
{
NS_INIT_REFCNT();
mWidget = gtk_invisible_new();
gtk_widget_ensure_style(mWidget);
mStyle = gtk_widget_get_style(mWidget);
}
nsLookAndFeel::~nsLookAndFeel()
{
gtk_widget_destroy(mWidget);
}
NS_IMETHODIMP nsLookAndFeel::GetColor(const nsColorID aID, nscolor &aColor)
{
nsresult res = NS_OK;
aColor = 0; // default color black
switch (aID) {
case eColor_WindowBackground:
aColor = GDK_COLOR_TO_NS_RGB(mStyle->bg[GTK_STATE_NORMAL]);
break;
case eColor_WindowForeground:
aColor = GDK_COLOR_TO_NS_RGB(mStyle->fg[GTK_STATE_NORMAL]);
break;
case eColor_WidgetBackground:
aColor = GDK_COLOR_TO_NS_RGB(mStyle->bg[GTK_STATE_NORMAL]);
break;
case eColor_WidgetForeground:
aColor = GDK_COLOR_TO_NS_RGB(mStyle->fg[GTK_STATE_NORMAL]);
break;
case eColor_WidgetSelectBackground:
aColor = GDK_COLOR_TO_NS_RGB(mStyle->bg[GTK_STATE_SELECTED]);
break;
case eColor_WidgetSelectForeground:
aColor = GDK_COLOR_TO_NS_RGB(mStyle->fg[GTK_STATE_SELECTED]);
break;
case eColor_Widget3DHighlight:
aColor = NS_RGB(0xa0,0xa0,0xa0);
break;
case eColor_Widget3DShadow:
aColor = NS_RGB(0x40,0x40,0x40);
break;
case eColor_TextBackground:
aColor = GDK_COLOR_TO_NS_RGB(mStyle->bg[GTK_STATE_NORMAL]);
break;
case eColor_TextForeground:
aColor = GDK_COLOR_TO_NS_RGB(mStyle->fg[GTK_STATE_NORMAL]);
break;
case eColor_TextSelectBackground:
aColor = GDK_COLOR_TO_NS_RGB(mStyle->bg[GTK_STATE_SELECTED]);
break;
case eColor_TextSelectForeground:
aColor = GDK_COLOR_TO_NS_RGB(mStyle->text[GTK_STATE_SELECTED]);
break;
// css2 http://www.w3.org/TR/REC-CSS2/ui.html#system-colors
case eColor_activeborder:
aColor = GDK_COLOR_TO_NS_RGB(mStyle->bg[GTK_STATE_NORMAL]);
break;
case eColor_activecaption:
aColor = GDK_COLOR_TO_NS_RGB(mStyle->bg[GTK_STATE_NORMAL]);
break;
case eColor_appworkspace:
aColor = GDK_COLOR_TO_NS_RGB(mStyle->bg[GTK_STATE_NORMAL]);
break;
case eColor_background:
aColor = GDK_COLOR_TO_NS_RGB(mStyle->bg[GTK_STATE_NORMAL]);
break;
case eColor_captiontext:
aColor = GDK_COLOR_TO_NS_RGB(mStyle->fg[GTK_STATE_NORMAL]);
break;
case eColor_graytext:
aColor = GDK_COLOR_TO_NS_RGB(mStyle->fg[GTK_STATE_INSENSITIVE]);
break;
case eColor_highlight:
aColor = GDK_COLOR_TO_NS_RGB(mStyle->bg[GTK_STATE_SELECTED]);
break;
case eColor_highlighttext:
aColor = GDK_COLOR_TO_NS_RGB(mStyle->fg[GTK_STATE_SELECTED]);
break;
case eColor_inactiveborder:
aColor = GDK_COLOR_TO_NS_RGB(mStyle->bg[GTK_STATE_NORMAL]);
break;
case eColor_inactivecaption:
aColor = GDK_COLOR_TO_NS_RGB(mStyle->bg[GTK_STATE_INSENSITIVE]);
break;
case eColor_inactivecaptiontext:
aColor = GDK_COLOR_TO_NS_RGB(mStyle->fg[GTK_STATE_INSENSITIVE]);
break;
case eColor_infobackground:
aColor = GDK_COLOR_TO_NS_RGB(mStyle->bg[GTK_STATE_NORMAL]);
break;
case eColor_infotext:
aColor = GDK_COLOR_TO_NS_RGB(mStyle->fg[GTK_STATE_NORMAL]);
break;
case eColor_menu:
aColor = GDK_COLOR_TO_NS_RGB(mStyle->bg[GTK_STATE_NORMAL]);
break;
case eColor_menutext:
aColor = GDK_COLOR_TO_NS_RGB(mStyle->fg[GTK_STATE_NORMAL]);
break;
case eColor_scrollbar:
break;
case eColor_threedface:
case eColor_buttonface:
aColor = GDK_COLOR_TO_NS_RGB(mStyle->bg[GTK_STATE_NORMAL]);
break;
case eColor_buttonhighlight: // ?
case eColor_threedhighlight:
aColor = GDK_COLOR_TO_NS_RGB(mStyle->bg[GTK_STATE_ACTIVE]);
break;
case eColor_buttontext:
aColor = GDK_COLOR_TO_NS_RGB(mStyle->fg[GTK_STATE_NORMAL]);
break;
case eColor_buttonshadow:
case eColor_threeddarkshadow:
case eColor_threedshadow: // i think these should be the same
aColor = NS_DarkenColor(NS_DarkenColor(NS_DarkenColor(NS_DarkenColor(NS_DarkenColor(GDK_COLOR_TO_NS_RGB(mStyle->light[GTK_STATE_NORMAL]))))));
// aColor = GDK_COLOR_TO_NS_RGB(mStyle->dark[GTK_STATE_NORMAL]); // dark style gives me bright green?!
break;
case eColor_threedlightshadow:
aColor = GDK_COLOR_TO_NS_RGB(mStyle->light[GTK_STATE_NORMAL]);
break;
case eColor_window:
case eColor_windowframe:
aColor = GDK_COLOR_TO_NS_RGB(mStyle->bg[GTK_STATE_NORMAL]);
break;
case eColor_windowtext:
aColor = GDK_COLOR_TO_NS_RGB(mStyle->fg[GTK_STATE_NORMAL]);
break;
default:
/* default color is BLACK */
aColor = 0;
res = NS_ERROR_FAILURE;
break;
}
// printf("%i, %i, %i\n", NS_GET_R(aColor), NS_GET_B(aColor), NS_GET_G(aColor));
return res;
}
NS_IMETHODIMP nsLookAndFeel::GetMetric(const nsMetricID aID, PRInt32 & aMetric)
{
nsresult res = NS_OK;
switch (aID) {
case eMetric_WindowTitleHeight:
aMetric = 0;
break;
case eMetric_WindowBorderWidth:
// aMetric = mStyle->klass->xthickness;
break;
case eMetric_WindowBorderHeight:
// aMetric = mStyle->klass->ythickness;
break;
case eMetric_Widget3DBorder:
// aMetric = 4;
break;
case eMetric_TextFieldHeight:
{
GtkRequisition req;
GtkWidget *text = gtk_entry_new();
// needed to avoid memory leak
gtk_widget_ref(text);
gtk_object_sink(GTK_OBJECT(text));
gtk_widget_size_request(text,&req);
aMetric = req.height;
gtk_widget_destroy(text);
gtk_widget_unref(text);
}
break;
case eMetric_TextFieldBorder:
aMetric = 2;
break;
case eMetric_TextVerticalInsidePadding:
aMetric = 0;
break;
case eMetric_TextShouldUseVerticalInsidePadding:
aMetric = 0;
break;
case eMetric_TextHorizontalInsideMinimumPadding:
aMetric = 15;
break;
case eMetric_TextShouldUseHorizontalInsideMinimumPadding:
aMetric = 1;
break;
case eMetric_ButtonHorizontalInsidePaddingNavQuirks:
aMetric = 10;
break;
case eMetric_ButtonHorizontalInsidePaddingOffsetNavQuirks:
aMetric = 8;
break;
case eMetric_CheckboxSize:
aMetric = 15;
break;
case eMetric_RadioboxSize:
aMetric = 15;
break;
case eMetric_ListShouldUseHorizontalInsideMinimumPadding:
aMetric = 15;
break;
case eMetric_ListHorizontalInsideMinimumPadding:
aMetric = 15;
break;
case eMetric_ListShouldUseVerticalInsidePadding:
aMetric = 1;
break;
case eMetric_ListVerticalInsidePadding:
aMetric = 1;
break;
case eMetric_CaretBlinkTime:
aMetric = 500;
break;
case eMetric_CaretWidthTwips:
aMetric = 20;
break;
default:
aMetric = 0;
res = NS_ERROR_FAILURE;
}
return res;
}
NS_IMETHODIMP nsLookAndFeel::GetMetric(const nsMetricFloatID aID, float & aMetric)
{
nsresult res = NS_OK;
switch (aID) {
case eMetricFloat_TextFieldVerticalInsidePadding:
aMetric = 0.25f;
break;
case eMetricFloat_TextFieldHorizontalInsidePadding:
aMetric = 0.95f; // large number on purpose so minimum padding is used
break;
case eMetricFloat_TextAreaVerticalInsidePadding:
aMetric = 0.40f;
break;
case eMetricFloat_TextAreaHorizontalInsidePadding:
aMetric = 0.40f; // large number on purpose so minimum padding is used
break;
case eMetricFloat_ListVerticalInsidePadding:
aMetric = 0.10f;
break;
case eMetricFloat_ListHorizontalInsidePadding:
aMetric = 0.40f;
break;
case eMetricFloat_ButtonVerticalInsidePadding:
aMetric = 0.25f;
break;
case eMetricFloat_ButtonHorizontalInsidePadding:
aMetric = 0.25f;
break;
default:
aMetric = -1.0;
res = NS_ERROR_FAILURE;
}
return res;
}
#ifdef NS_DEBUG
NS_IMETHODIMP nsLookAndFeel::GetNavSize(const nsMetricNavWidgetID aWidgetID,
const nsMetricNavFontID aFontID,
const PRInt32 aFontSize,
nsSize &aSize)
{
aSize.width = 0;
aSize.height = 0;
return NS_ERROR_NOT_IMPLEMENTED;
}
#endif

View File

@@ -0,0 +1,55 @@
/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*-
*
* The contents of this file are subject to the Netscape Public
* License Version 1.1 (the "License"); you may not use this file
* except in compliance with the License. You may obtain a copy of
* the License at http://www.mozilla.org/NPL/
*
* Software distributed under the License is distributed on an "AS
* IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or
* implied. See the License for the specific language governing
* rights and limitations under the License.
*
* The Original Code is mozilla.org code.
*
* The Initial Developer of the Original Code is Netscape
* Communications Corporation. Portions created by Netscape are
* Copyright (C) 1998 Netscape Communications Corporation. All
* Rights Reserved.
*
* Contributor(s):
*/
#ifndef __nsLookAndFeel
#define __nsLookAndFeel
#include "nsILookAndFeel.h"
#include <gtk/gtk.h>
class nsLookAndFeel: public nsILookAndFeel {
NS_DECL_ISUPPORTS
public:
nsLookAndFeel();
virtual ~nsLookAndFeel();
NS_IMETHOD GetColor(const nsColorID aID, nscolor &aColor);
NS_IMETHOD GetMetric(const nsMetricID aID, PRInt32 & aMetric);
NS_IMETHOD GetMetric(const nsMetricFloatID aID, float & aMetric);
#ifdef NS_DEBUG
// This method returns the actual (or nearest estimate)
// of the Navigator size for a given form control for a given font
// and font size. This is used in NavQuirks mode to see how closely
// we match its size
NS_IMETHOD GetNavSize(const nsMetricNavWidgetID aWidgetID,
const nsMetricNavFontID aFontID,
const PRInt32 aFontSize,
nsSize &aSize);
#endif
protected:
GtkStyle *mStyle;
GtkWidget *mWidget;
};
#endif

View File

@@ -0,0 +1,792 @@
/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*-
*
* The contents of this file are subject to the Netscape Public
* License Version 1.1 (the "License"); you may not use this file
* except in compliance with the License. You may obtain a copy of
* the License at http://www.mozilla.org/NPL/
*
* Software distributed under the License is distributed on an "AS
* IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or
* implied. See the License for the specific language governing
* rights and limitations under the License.
*
* The Original Code is mozilla.org code.
*
* The Initial Developer of the Original Code is Netscape
* Communications Corporation. Portions created by Netscape are
* Copyright (C) 1998 Netscape Communications Corporation. All
* Rights Reserved.
*
* Contributor(s):
*/
#include <gtk/gtk.h>
#include "nsMenu.h"
#include "nsIComponentManager.h"
#include "nsIDOMElement.h"
#include "nsIDOMNode.h"
#include "nsIMenuBar.h"
#include "nsIMenuItem.h"
#include "nsIMenuListener.h"
#include "nsString.h"
#include "nsGtkEventHandler.h"
#include "nsCOMPtr.h"
#include "nsWidgetsCID.h"
static NS_DEFINE_CID(kMenuCID, NS_MENU_CID);
static NS_DEFINE_CID(kMenuItemCID, NS_MENUITEM_CID);
static NS_DEFINE_IID(kISupportsIID, NS_ISUPPORTS_IID);
nsresult nsMenu::QueryInterface(REFNSIID aIID, void** aInstancePtr)
{
if (NULL == aInstancePtr) {
return NS_ERROR_NULL_POINTER;
}
*aInstancePtr = NULL;
if (aIID.Equals(nsIMenu::GetIID())) {
*aInstancePtr = (void*)(nsIMenu*) this;
NS_ADDREF_THIS();
return NS_OK;
}
if (aIID.Equals(kISupportsIID)) {
*aInstancePtr = (void*)(nsISupports*)(nsIMenu*)this;
NS_ADDREF_THIS();
return NS_OK;
}
if (aIID.Equals(nsIMenuListener::GetIID())) {
*aInstancePtr = (void*)(nsIMenuListener*)this;
NS_ADDREF_THIS();
return NS_OK;
}
return NS_NOINTERFACE;
}
NS_IMPL_ADDREF(nsMenu)
NS_IMPL_RELEASE(nsMenu)
//-------------------------------------------------------------------------
//
// nsMenu constructor
//
//-------------------------------------------------------------------------
nsMenu::nsMenu() : nsIMenu()
{
NS_INIT_REFCNT();
mNumMenuItems = 0;
mMenu = nsnull;
mMenuParent = nsnull;
mMenuBarParent = nsnull;
mListener = nsnull;
mConstructCalled = PR_FALSE;
mDOMNode = nsnull;
mWebShell = nsnull;
mDOMElement = nsnull;
mAccessKey = "_";
}
//-------------------------------------------------------------------------
//
// nsMenu destructor
//
//-------------------------------------------------------------------------
nsMenu::~nsMenu()
{
//g_print("nsMenu::~nsMenu() called\n");
NS_IF_RELEASE(mListener);
// Free our menu items
RemoveAll();
gtk_widget_destroy(mMenu);
mMenu = nsnull;
}
//-------------------------------------------------------------------------
//
// Create the proper widget
//-------------------------------------------------------------------------
NS_METHOD nsMenu::Create(nsISupports *aParent, const nsString &aLabel)
{
if(aParent)
{
nsIMenuBar * menubar = nsnull;
aParent->QueryInterface(nsIMenuBar::GetIID(), (void**) &menubar);
if(menubar)
{
mMenuBarParent = menubar;
NS_RELEASE(menubar);
}
else
{
nsIMenu * menu = nsnull;
aParent->QueryInterface(nsIMenu::GetIID(), (void**) &menu);
if(menu)
{
mMenuParent = menu;
NS_RELEASE(menu);
}
}
}
mLabel = aLabel;
mMenu = gtk_menu_new();
gtk_signal_connect (GTK_OBJECT (mMenu), "map",
GTK_SIGNAL_FUNC(menu_map_handler),
this);
gtk_signal_connect (GTK_OBJECT (mMenu), "unmap",
GTK_SIGNAL_FUNC(menu_unmap_handler),
this);
return NS_OK;
}
//-------------------------------------------------------------------------
NS_METHOD nsMenu::GetParent(nsISupports*& aParent)
{
aParent = nsnull;
if (nsnull != mMenuParent) {
return mMenuParent->QueryInterface(kISupportsIID,
(void**)&aParent);
} else if (nsnull != mMenuBarParent) {
return mMenuBarParent->QueryInterface(kISupportsIID,
(void**)&aParent);
}
return NS_ERROR_FAILURE;
}
//-------------------------------------------------------------------------
NS_METHOD nsMenu::GetLabel(nsString &aText)
{
aText = mLabel;
return NS_OK;
}
//-------------------------------------------------------------------------
NS_METHOD nsMenu::SetLabel(const nsString &aText)
{
/* we Do GetLabel() when we are adding the menu...
* but we might want to redo this.
*/
mLabel = aText;
return NS_OK;
}
//-------------------------------------------------------------------------
NS_METHOD nsMenu::GetAccessKey(nsString &aText)
{
aText = mAccessKey;
char *foo = mAccessKey.ToNewCString();
#ifdef DEBUG_pavlov
g_print("GetAccessKey returns \"%s\"\n", foo);
#endif
nsCRT::free(foo);
return NS_OK;
}
//-------------------------------------------------------------------------
NS_METHOD nsMenu::SetAccessKey(const nsString &aText)
{
mAccessKey = aText;
char *foo = mAccessKey.ToNewCString();
#ifdef DEBUG_pavlov
g_print("SetAccessKey setting to \"%s\"\n", foo);
#endif
nsCRT::free(foo);
return NS_OK;
}
//-------------------------------------------------------------------------
/**
* Set enabled state
*
*/
NS_METHOD nsMenu::SetEnabled(PRBool aIsEnabled)
{
return NS_OK;
}
//-------------------------------------------------------------------------
/**
* Get enabled state
*
*/
NS_METHOD nsMenu::GetEnabled(PRBool* aIsEnabled)
{
return NS_OK;
}
//-------------------------------------------------------------------------
/**
* Query if this is the help menu
*
*/
NS_METHOD nsMenu::IsHelpMenu(PRBool* aIsHelpMenu)
{
return NS_OK;
}
//-------------------------------------------------------------------------
NS_METHOD nsMenu::AddItem(nsISupports * aItem)
{
if(aItem)
{
nsIMenuItem * menuitem = nsnull;
aItem->QueryInterface(nsIMenuItem::GetIID(),
(void**)&menuitem);
if(menuitem)
{
AddMenuItem(menuitem); // nsMenu now owns this
NS_RELEASE(menuitem);
}
else
{
nsIMenu * menu = nsnull;
aItem->QueryInterface(nsIMenu::GetIID(),
(void**)&menu);
if(menu)
{
AddMenu(menu); // nsMenu now owns this
NS_RELEASE(menu);
}
}
}
return NS_OK;
}
// local method used by nsMenu::AddItem
//-------------------------------------------------------------------------
NS_METHOD nsMenu::AddMenuItem(nsIMenuItem * aMenuItem)
{
GtkWidget *widget;
void *voidData;
aMenuItem->GetNativeData(voidData);
widget = GTK_WIDGET(voidData);
gtk_menu_shell_append (GTK_MENU_SHELL (mMenu), widget);
// XXX add aMenuItem to internal data structor list
// Need to be adding an nsISupports *, not nsIMenuItem *
nsISupports * supports = nsnull;
aMenuItem->QueryInterface(kISupportsIID,
(void**)&supports);
{
mMenuItemVoidArray.AppendElement(supports);
mNumMenuItems++;
}
return NS_OK;
}
// local method used by nsMenu::AddItem
//-------------------------------------------------------------------------
NS_METHOD nsMenu::AddMenu(nsIMenu * aMenu)
{
nsString Label;
GtkWidget *newmenu=nsnull;
void *voidData=NULL;
aMenu->GetLabel(Label);
// Create nsMenuItem
nsIMenuItem * pnsMenuItem = nsnull;
nsresult rv = nsComponentManager::CreateInstance(kMenuItemCID,
nsnull,
nsIMenuItem::GetIID(),
(void**)&pnsMenuItem);
if (NS_OK == rv) {
nsISupports * supports = nsnull;
QueryInterface(kISupportsIID, (void**) &supports);
pnsMenuItem->Create(supports, Label, PR_FALSE); //PR_TRUE);
NS_RELEASE(supports);
pnsMenuItem->QueryInterface(kISupportsIID, (void**) &supports);
AddItem(supports); // Parent should now own menu item
NS_RELEASE(supports);
void * menuitem = nsnull;
pnsMenuItem->GetNativeData(menuitem);
voidData = NULL;
aMenu->GetNativeData(&voidData);
newmenu = GTK_WIDGET(voidData);
gtk_menu_item_set_submenu (GTK_MENU_ITEM (menuitem), newmenu);
NS_RELEASE(pnsMenuItem);
}
return NS_OK;
}
//-------------------------------------------------------------------------
NS_METHOD nsMenu::AddSeparator()
{
// Create nsMenuItem
nsIMenuItem * pnsMenuItem = nsnull;
nsresult rv = nsComponentManager::CreateInstance(
kMenuItemCID, nsnull, nsIMenuItem::GetIID(), (void**)&pnsMenuItem);
if (NS_OK == rv) {
nsString tmp = "menuseparator";
nsISupports * supports = nsnull;
QueryInterface(kISupportsIID, (void**) &supports);
pnsMenuItem->Create(supports, tmp, PR_TRUE);
NS_RELEASE(supports);
pnsMenuItem->QueryInterface(kISupportsIID, (void**) &supports);
AddItem(supports); // Parent should now own menu item
NS_RELEASE(supports);
NS_RELEASE(pnsMenuItem);
}
return NS_OK;
}
//-------------------------------------------------------------------------
NS_METHOD nsMenu::GetItemCount(PRUint32 &aCount)
{
// this should be right.. does it need to be +1 ?
aCount = g_list_length(GTK_MENU_SHELL(mMenu)->children);
//g_print("nsMenu::GetItemCount = %i\n", aCount);
return NS_OK;
}
//-------------------------------------------------------------------------
NS_METHOD nsMenu::GetItemAt(const PRUint32 aPos,
nsISupports *&aMenuItem)
{
return NS_OK;
}
//-------------------------------------------------------------------------
NS_METHOD nsMenu::InsertItemAt(const PRUint32 aPos,
nsISupports *aMenuItem)
{
return NS_OK;
}
//-------------------------------------------------------------------------
NS_METHOD nsMenu::RemoveItem(const PRUint32 aPos)
{
#if 0
// this may work here better than Removeall(), but i'm not sure how to test this one
nsISupports *item = mMenuItemVoidArray[aPos];
delete item;
mMenuItemVoidArray.RemoveElementAt(aPos);
#endif
/*
gtk_menu_shell_remove (GTK_MENU_SHELL (mMenu), item);
nsCRT::free(labelStr);
voidData = NULL;
aMenu->GetNativeData(&voidData);
newmenu = GTK_WIDGET(voidData);
gtk_menu_item_remove_submenu (GTK_MENU_ITEM (item));
*/
return NS_OK;
}
//-------------------------------------------------------------------------
NS_METHOD nsMenu::RemoveAll()
{
//g_print("nsMenu::RemoveAll()\n");
#if 0
// this doesn't work quite right, but this is about all that should really be needed
int i=0;
nsIMenu *menu = nsnull;
nsIMenuItem *menuitem = nsnull;
nsISupports *item = nsnull;
for (i=mMenuItemVoidArray.Count(); i>0; i--)
{
item = (nsISupports*)mMenuItemVoidArray[i-1];
if(nsnull != item)
{
if (NS_OK == item->QueryInterface(nsIMenuItem::GetIID(), (void**)&menuitem)) {
// we do this twice because we have to do it once for QueryInterface,
// then we want to get rid of it.
// g_print("remove nsMenuItem\n");
NS_RELEASE(menuitem);
NS_RELEASE(item);
menuitem = nsnull;
} else if (NS_OK == item->QueryInterface(nsIMenu::GetIID(), (void**)&menu)) {
// g_print("remove nsMenu\n");
NS_RELEASE(menu);
NS_RELEASE(item);
menu = nsnull;
}
// mMenuItemVoidArray.RemoveElementAt(i-1);
}
}
mMenuItemVoidArray.Clear();
#else
for (int i = mMenuItemVoidArray.Count(); i > 0; i--) {
if(nsnull != mMenuItemVoidArray[i-1]) {
nsIMenuItem * menuitem = nsnull;
((nsISupports*)mMenuItemVoidArray[i-1])->QueryInterface(nsIMenuItem::GetIID(),
(void**)&menuitem);
if(menuitem) {
void *gtkmenuitem = nsnull;
menuitem->GetNativeData(gtkmenuitem);
if (gtkmenuitem) {
// gtk_widget_ref(GTK_WIDGET(gtkmenuitem));
//gtk_widget_destroy(GTK_WIDGET(gtkmenuitem));
gtk_container_remove (GTK_CONTAINER (mMenu), GTK_WIDGET(gtkmenuitem));
}
} else {
nsIMenu * menu= nsnull;
((nsISupports*)mMenuItemVoidArray[i-1])->QueryInterface(nsIMenu::GetIID(),
(void**)&menu);
if(menu)
{
void * gtkmenu = nsnull;
menu->GetNativeData(&gtkmenu);
if(gtkmenu){
//g_print("gtkmenu removed");
//gtk_menu_item_remove_submenu (GTK_MENU_ITEM (item));
}
}
}
}
}
#endif
//g_print("end RemoveAll\n");
return NS_OK;
}
//-------------------------------------------------------------------------
NS_METHOD nsMenu::GetNativeData(void ** aData)
{
*aData = (void *)mMenu;
return NS_OK;
}
//-------------------------------------------------------------------------
NS_METHOD nsMenu::SetNativeData(void * aData)
{
return NS_OK;
}
GtkWidget *nsMenu::GetNativeParent()
{
void * voidData;
if (nsnull != mMenuParent) {
mMenuParent->GetNativeData(&voidData);
} else if (nsnull != mMenuBarParent) {
mMenuBarParent->GetNativeData(voidData);
} else {
return nsnull;
}
return GTK_WIDGET(voidData);
}
//-------------------------------------------------------------------------
NS_METHOD nsMenu::AddMenuListener(nsIMenuListener * aMenuListener)
{
mListener = aMenuListener;
NS_ADDREF(mListener);
return NS_OK;
}
//-------------------------------------------------------------------------
NS_METHOD nsMenu::RemoveMenuListener(nsIMenuListener * aMenuListener)
{
if (aMenuListener == mListener) {
NS_IF_RELEASE(mListener);
}
return NS_OK;
}
//-------------------------------------------------------------------------
// nsIMenuListener interface
//-------------------------------------------------------------------------
nsEventStatus nsMenu::MenuItemSelected(const nsMenuEvent & aMenuEvent)
{
if (nsnull != mListener) {
mListener->MenuSelected(aMenuEvent);
}
return nsEventStatus_eIgnore;
}
nsEventStatus nsMenu::MenuSelected(const nsMenuEvent & aMenuEvent)
{
if (nsnull != mListener) {
mListener->MenuSelected(aMenuEvent);
}
return nsEventStatus_eIgnore;
}
//-------------------------------------------------------------------------
nsEventStatus nsMenu::MenuDeselected(const nsMenuEvent & aMenuEvent)
{
if (nsnull != mListener) {
mListener->MenuDeselected(aMenuEvent);
}
return nsEventStatus_eIgnore;
}
//-------------------------------------------------------------------------
nsEventStatus nsMenu::MenuConstruct(const nsMenuEvent & aMenuEvent,
nsIWidget * aParentWindow,
void * menuNode,
void * aWebShell)
{
//g_print("nsMenu::MenuConstruct called \n");
if(menuNode){
SetDOMNode((nsIDOMNode*)menuNode);
}
if(!aWebShell){
aWebShell = mWebShell;
}
// First open the menu.
nsCOMPtr<nsIDOMElement> domElement = do_QueryInterface(mDOMNode);
if (domElement)
domElement->SetAttribute("open", "true");
/// Now get the kids. Retrieve our menupopup child.
nsCOMPtr<nsIDOMNode> menuPopupNode;
mDOMNode->GetFirstChild(getter_AddRefs(menuPopupNode));
while (menuPopupNode) {
nsCOMPtr<nsIDOMElement> menuPopupElement(do_QueryInterface(menuPopupNode));
if (menuPopupElement) {
nsString menuPopupNodeType;
menuPopupElement->GetNodeName(menuPopupNodeType);
if (menuPopupNodeType.Equals("menupopup"))
break;
}
nsCOMPtr<nsIDOMNode> oldMenuPopupNode(menuPopupNode);
oldMenuPopupNode->GetNextSibling(getter_AddRefs(menuPopupNode));
}
if (!menuPopupNode)
return nsEventStatus_eIgnore;
nsCOMPtr<nsIDOMNode> menuitemNode;
menuPopupNode->GetFirstChild(getter_AddRefs(menuitemNode));
unsigned short menuIndex = 0;
while (menuitemNode) {
nsCOMPtr<nsIDOMElement> menuitemElement(do_QueryInterface(menuitemNode));
if (menuitemElement) {
nsString menuitemNodeType;
nsString menuitemName;
menuitemElement->GetNodeName(menuitemNodeType);
if (menuitemNodeType.Equals("menuitem")) {
// LoadMenuItem
LoadMenuItem(this,
menuitemElement,
menuitemNode,
menuIndex,
(nsIWebShell*)aWebShell);
} else if (menuitemNodeType.Equals("menuseparator")) {
AddSeparator();
} else if (menuitemNodeType.Equals("menu")) {
// Load a submenu
LoadSubMenu(this, menuitemElement, menuitemNode);
}
}
++menuIndex;
nsCOMPtr<nsIDOMNode> oldmenuitemNode(menuitemNode);
oldmenuitemNode->GetNextSibling(getter_AddRefs(menuitemNode));
} // end menu item innner loop
return nsEventStatus_eIgnore;
}
//-------------------------------------------------------------------------
nsEventStatus nsMenu::MenuDestruct(const nsMenuEvent & aMenuEvent)
{
// Close the node.
nsCOMPtr<nsIDOMElement> domElement = do_QueryInterface(mDOMNode);
if (domElement)
domElement->RemoveAttribute("open");
//g_print("nsMenu::MenuDestruct called \n");
mConstructCalled = PR_FALSE;
RemoveAll();
return nsEventStatus_eIgnore;
}
//-------------------------------------------------------------------------
/**
* Set DOMNode
*
*/
NS_METHOD nsMenu::SetDOMNode(nsIDOMNode * aMenuNode)
{
mDOMNode = aMenuNode;
return NS_OK;
}
//-------------------------------------------------------------------------
/**
* Set DOMElement
*
*/
NS_METHOD nsMenu::SetDOMElement(nsIDOMElement * aMenuElement)
{
mDOMElement = aMenuElement;
return NS_OK;
}
//-------------------------------------------------------------------------
/**
* Set WebShell
*
*/
NS_METHOD nsMenu::SetWebShell(nsIWebShell * aWebShell)
{
mWebShell = aWebShell;
return NS_OK;
}
//----------------------------------------
void nsMenu::LoadMenuItem(nsIMenu * pParentMenu,
nsIDOMElement * menuitemElement,
nsIDOMNode * menuitemNode,
unsigned short menuitemIndex,
nsIWebShell * aWebShell)
{
static const char* NS_STRING_TRUE = "true";
nsString disabled;
nsString menuitemName;
nsString menuitemCmd;
menuitemElement->GetAttribute(nsAutoString("disabled"), disabled);
menuitemElement->GetAttribute(nsAutoString("value"), menuitemName);
menuitemElement->GetAttribute(nsAutoString("cmd"), menuitemCmd);
// Create nsMenuItem
nsIMenuItem * pnsMenuItem = nsnull;
nsresult rv = nsComponentManager::CreateInstance(kMenuItemCID,
nsnull,
nsIMenuItem::GetIID(),
(void**)&pnsMenuItem);
if (NS_OK == rv) {
pnsMenuItem->Create(pParentMenu, menuitemName, PR_FALSE);
nsISupports * supports = nsnull;
pnsMenuItem->QueryInterface(kISupportsIID, (void**) &supports);
pParentMenu->AddItem(supports); // Parent should now own menu item
NS_RELEASE(supports);
if(disabled == NS_STRING_TRUE ) {
pnsMenuItem->SetEnabled(PR_FALSE);
}
// Create MenuDelegate - this is the intermediator inbetween
// the DOM node and the nsIMenuItem
// The nsWebShellWindow wacthes for Document changes and then notifies the
// the appropriate nsMenuDelegate object
nsCOMPtr<nsIDOMElement> domElement(do_QueryInterface(menuitemNode));
if (!domElement) {
//return NS_ERROR_FAILURE;
return;
}
nsAutoString cmdAtom("oncommand");
nsString cmdName;
domElement->GetAttribute(cmdAtom, cmdName);
pnsMenuItem->SetCommand(cmdName);
// DO NOT use passed in webshell because of messed up windows dynamic loading
// code.
pnsMenuItem->SetWebShell(mWebShell);
pnsMenuItem->SetDOMElement(domElement);
NS_RELEASE(pnsMenuItem);
}
return;
}
//----------------------------------------
void nsMenu::LoadSubMenu(nsIMenu * pParentMenu,
nsIDOMElement * menuElement,
nsIDOMNode * menuNode)
{
nsString menuName;
menuElement->GetAttribute(nsAutoString("value"), menuName);
//printf("Creating Menu [%s] \n", menuName.ToNewCString()); // this leaks
// Create nsMenu
nsIMenu * pnsMenu = nsnull;
nsresult rv = nsComponentManager::CreateInstance(kMenuCID,
nsnull,
nsIMenu::GetIID(),
(void**)&pnsMenu);
if (NS_OK == rv) {
// Call Create
nsISupports * supports = nsnull;
pParentMenu->QueryInterface(kISupportsIID, (void**) &supports);
pnsMenu->Create(supports, menuName);
NS_RELEASE(supports); // Balance QI
// Set nsMenu Name
pnsMenu->SetLabel(menuName);
supports = nsnull;
pnsMenu->QueryInterface(kISupportsIID, (void**) &supports);
pParentMenu->AddItem(supports); // parent takes ownership
NS_RELEASE(supports);
pnsMenu->SetWebShell(mWebShell);
pnsMenu->SetDOMNode(menuNode);
/*
// Begin menuitem inner loop
unsigned short menuIndex = 0;
nsCOMPtr<nsIDOMNode> menuitemNode;
menuNode->GetFirstChild(getter_AddRefs(menuitemNode));
while (menuitemNode) {
nsCOMPtr<nsIDOMElement> menuitemElement(do_QueryInterface(menuitemNode));
if (menuitemElement) {
nsString menuitemNodeType;
menuitemElement->GetNodeName(menuitemNodeType);
#ifdef DEBUG_saari
printf("Type [%s] %d\n", menuitemNodeType.ToNewCString(), menuitemNodeType.Equals("menuseparator"));
#endif
if (menuitemNodeType.Equals("menuitem")) {
// Load a menuitem
LoadMenuItem(pnsMenu, menuitemElement, menuitemNode, menuIndex, mWebShell);
} else if (menuitemNodeType.Equals("menuseparator")) {
pnsMenu->AddSeparator();
} else if (menuitemNodeType.Equals("menu")) {
// Add a submenu
LoadSubMenu(pnsMenu, menuitemElement, menuitemNode);
}
}
++menuIndex;
nsCOMPtr<nsIDOMNode> oldmenuitemNode(menuitemNode);
oldmenuitemNode->GetNextSibling(getter_AddRefs(menuitemNode));
} // end menu item innner loop
*/
}
}

View File

@@ -0,0 +1,120 @@
/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*-
*
* The contents of this file are subject to the Netscape Public
* License Version 1.1 (the "License"); you may not use this file
* except in compliance with the License. You may obtain a copy of
* the License at http://www.mozilla.org/NPL/
*
* Software distributed under the License is distributed on an "AS
* IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or
* implied. See the License for the specific language governing
* rights and limitations under the License.
*
* The Original Code is mozilla.org code.
*
* The Initial Developer of the Original Code is Netscape
* Communications Corporation. Portions created by Netscape are
* Copyright (C) 1998 Netscape Communications Corporation. All
* Rights Reserved.
*
* Contributor(s):
*/
#ifndef nsMenu_h__
#define nsMenu_h__
#include "nsIMenu.h"
#include "nsIMenuListener.h"
#include "nsVoidArray.h"
class nsIDOMElement;
class nsIDOMNode;
class nsIMenuBar;
class nsIWebShell;
/**
* Native GTK+ Menu wrapper
*/
class nsMenu : public nsIMenu, public nsIMenuListener
{
public:
nsMenu();
virtual ~nsMenu();
NS_DECL_ISUPPORTS
// nsIMenuListener methods
nsEventStatus MenuItemSelected(const nsMenuEvent & aMenuEvent);
nsEventStatus MenuSelected(const nsMenuEvent & aMenuEvent);
nsEventStatus MenuDeselected(const nsMenuEvent & aMenuEvent);
nsEventStatus MenuConstruct(
const nsMenuEvent & aMenuEvent,
nsIWidget * aParentWindow,
void * menuNode,
void * aWebShell);
nsEventStatus MenuDestruct(const nsMenuEvent & aMenuEvent);
NS_IMETHOD Create(nsISupports * aParent, const nsString &aLabel);
// nsIMenu Methods
NS_IMETHOD GetParent(nsISupports *&aParent);
NS_IMETHOD GetLabel(nsString &aText);
NS_IMETHOD SetLabel(const nsString &aText);
NS_IMETHOD GetAccessKey(nsString &aText);
NS_IMETHOD SetAccessKey(const nsString &aText);
NS_IMETHOD AddItem(nsISupports * aItem);
NS_IMETHOD AddMenuItem(nsIMenuItem * aMenuItem);
NS_IMETHOD AddMenu(nsIMenu * aMenu);
NS_IMETHOD AddSeparator();
NS_IMETHOD GetItemCount(PRUint32 &aCount);
NS_IMETHOD GetItemAt(const PRUint32 aPos, nsISupports *& aMenuItem);
NS_IMETHOD InsertItemAt(const PRUint32 aPos, nsISupports * aMenuItem);
NS_IMETHOD RemoveItem(const PRUint32 aPos);
NS_IMETHOD RemoveAll();
NS_IMETHOD GetNativeData(void** aData);
NS_IMETHOD SetNativeData(void* aData);
NS_IMETHOD AddMenuListener(nsIMenuListener * aMenuListener);
NS_IMETHOD RemoveMenuListener(nsIMenuListener * aMenuListener);
NS_IMETHOD SetEnabled(PRBool aIsEnabled);
NS_IMETHOD GetEnabled(PRBool* aIsEnabled);
NS_IMETHOD IsHelpMenu(PRBool* aIsHelp);
NS_IMETHOD SetDOMNode(nsIDOMNode * aMenuNode);
NS_IMETHOD SetDOMElement(nsIDOMElement * aMenuElement);
NS_IMETHOD SetWebShell(nsIWebShell * aWebShell);
protected:
void LoadMenuItem(
nsIMenu * pParentMenu,
nsIDOMElement * menuitemElement,
nsIDOMNode * menuitemNode,
unsigned short menuitemIndex,
nsIWebShell * aWebShell);
void LoadSubMenu(
nsIMenu * pParentMenu,
nsIDOMElement * menuElement,
nsIDOMNode * menuNode);
GtkWidget *GetNativeParent();
nsString mLabel;
nsString mAccessKey;
PRUint32 mNumMenuItems;
GtkWidget *mMenu;
nsVoidArray mMenuItemVoidArray;
nsIMenu *mMenuParent;
nsIMenuBar *mMenuBarParent;
nsIMenuListener * mListener;
PRBool mConstructCalled;
nsIDOMNode * mDOMNode;
nsIWebShell * mWebShell;
nsIDOMElement * mDOMElement;
};
#endif // nsMenu_h__

View File

@@ -0,0 +1,354 @@
/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*-
*
* The contents of this file are subject to the Netscape Public
* License Version 1.1 (the "License"); you may not use this file
* except in compliance with the License. You may obtain a copy of
* the License at http://www.mozilla.org/NPL/
*
* Software distributed under the License is distributed on an "AS
* IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or
* implied. See the License for the specific language governing
* rights and limitations under the License.
*
* The Original Code is mozilla.org code.
*
* The Initial Developer of the Original Code is Netscape
* Communications Corporation. Portions created by Netscape are
* Copyright (C) 1998 Netscape Communications Corporation. All
* Rights Reserved.
*
* Contributor(s):
*/
#include <gtk/gtk.h>
#include "nsMenuBar.h"
#include "nsMenuItem.h"
#include "nsIComponentManager.h"
#include "nsIDOMNode.h"
#include "nsIMenu.h"
#include "nsIWebShell.h"
#include "nsIWidget.h"
#include "nsString.h"
#include "nsGtkEventHandler.h"
#include "nsCOMPtr.h"
#include "nsWidgetsCID.h"
static NS_DEFINE_CID(kMenuBarCID, NS_MENUBAR_CID);
static NS_DEFINE_CID(kMenuCID, NS_MENU_CID);
static NS_DEFINE_IID(kISupportsIID, NS_ISUPPORTS_IID);
nsresult nsMenuBar::QueryInterface(REFNSIID aIID, void** aInstancePtr)
{
if (NULL == aInstancePtr) {
return NS_ERROR_NULL_POINTER;
}
*aInstancePtr = NULL;
if (aIID.Equals(nsIMenuBar::GetIID())) {
*aInstancePtr = (void*) ((nsIMenuBar*) this);
NS_ADDREF_THIS();
return NS_OK;
}
if (aIID.Equals(kISupportsIID)) {
*aInstancePtr = (void*) ((nsISupports*)(nsIMenuBar*) this);
NS_ADDREF_THIS();
return NS_OK;
}
if (aIID.Equals(nsIMenuListener::GetIID())) {
*aInstancePtr = (void*) ((nsIMenuListener*)this);
NS_ADDREF_THIS();
return NS_OK;
}
return NS_NOINTERFACE;
}
NS_IMPL_ADDREF(nsMenuBar)
NS_IMPL_RELEASE(nsMenuBar)
//-------------------------------------------------------------------------
//
// nsMenuBar constructor
//
//-------------------------------------------------------------------------
nsMenuBar::nsMenuBar() : nsIMenuBar(), nsIMenuListener()
{
NS_INIT_REFCNT();
mNumMenus = 0;
mMenuBar = nsnull;
mParent = nsnull;
mIsMenuBarAdded = PR_FALSE;
mWebShell = nsnull;
mDOMNode = nsnull;
}
//-------------------------------------------------------------------------
//
// nsMenuBar destructor
//
//-------------------------------------------------------------------------
nsMenuBar::~nsMenuBar()
{
// Release the menus
RemoveAll();
}
//-------------------------------------------------------------------------
//
// Create the proper widget
//
//-------------------------------------------------------------------------
NS_METHOD nsMenuBar::Create(nsIWidget *aParent)
{
SetParent(aParent);
mMenuBar = gtk_menu_bar_new();
gtk_widget_show(mMenuBar);
mParent->SetMenuBar(this);
return NS_OK;
}
//-------------------------------------------------------------------------
NS_METHOD nsMenuBar::GetParent(nsIWidget *&aParent)
{
aParent = mParent;
return NS_OK;
}
//-------------------------------------------------------------------------
NS_METHOD nsMenuBar::SetParent(nsIWidget *aParent)
{
mParent = aParent;
return NS_OK;
}
//-------------------------------------------------------------------------
NS_METHOD nsMenuBar::AddMenu(nsIMenu * aMenu)
{
nsString Label;
GtkWidget *widget, *nmenu;
void *voidData;
nsISupports * supports = nsnull;
aMenu->QueryInterface(kISupportsIID, (void**)&supports);
if (supports) {
mMenusVoidArray.AppendElement(aMenu);
mNumMenus++;
}
aMenu->GetLabel(Label);
// get access key
nsString accessKey = " ";
aMenu->GetAccessKey(accessKey);
if(accessKey != " ")
{
// munge acess key into name
PRInt32 offset = Label.Find(accessKey);
if(offset != -1)
Label.Insert("_", offset);
}
char *foo = Label.ToNewCString();
g_print("%s\n", foo);
nsCRT::free(foo);
widget = nsMenuItem::CreateLocalized(Label);
gtk_widget_show(widget);
gtk_menu_bar_append (GTK_MENU_BAR (mMenuBar), widget);
aMenu->GetNativeData(&voidData);
nmenu = GTK_WIDGET(voidData);
gtk_menu_item_set_submenu (GTK_MENU_ITEM (widget), nmenu);
return NS_OK;
}
//-------------------------------------------------------------------------
NS_METHOD nsMenuBar::GetMenuCount(PRUint32 &aCount)
{
return NS_OK;
}
//-------------------------------------------------------------------------
NS_METHOD nsMenuBar::GetMenuAt(const PRUint32 aCount, nsIMenu *& aMenu)
{
return NS_OK;
}
//-------------------------------------------------------------------------
NS_METHOD nsMenuBar::InsertMenuAt(const PRUint32 aCount, nsIMenu *& aMenu)
{
return NS_OK;
}
//-------------------------------------------------------------------------
NS_METHOD nsMenuBar::RemoveMenu(const PRUint32 aCount)
{
return NS_OK;
}
//-------------------------------------------------------------------------
NS_METHOD nsMenuBar::RemoveAll()
{
for (int i = mMenusVoidArray.Count(); i > 0; i--) {
if(nsnull != mMenusVoidArray[i-1]) {
nsIMenu * menu = nsnull;
((nsISupports*)mMenusVoidArray[i-1])->QueryInterface(nsIMenu::GetIID(), (void**)&menu);
if(menu) {
//void * gtkmenu= nsnull;
//menu->GetNativeData(&gtkmenu);
//if(gtkmenu){
// gtk_container_remove (GTK_CONTAINER (mMenuBar), GTK_WIDGET(gtkmenu) );
//}
NS_RELEASE(menu);
g_print("menu release \n");
int num =((nsISupports*)mMenusVoidArray[i-1])->Release();
while(num) {
g_print("menu release again!\n");
num = ((nsISupports*)mMenusVoidArray[i-1])->Release();
}
}
}
}
return NS_OK;
}
//-------------------------------------------------------------------------
NS_METHOD nsMenuBar::GetNativeData(void *& aData)
{
aData = (void *)mMenuBar;
return NS_OK;
}
//-------------------------------------------------------------------------
NS_METHOD nsMenuBar::SetNativeData(void * aData)
{
// Temporary hack for MacOS. Will go away when nsMenuBar handles it's own
// construction
return NS_OK;
}
//-------------------------------------------------------------------------
NS_METHOD nsMenuBar::Paint()
{
return NS_OK;
}
//-------------------------------------------------------------------------
//
// nsMenuListener interface
//
//-------------------------------------------------------------------------
nsEventStatus nsMenuBar::MenuItemSelected(const nsMenuEvent & aMenuEvent)
{
return nsEventStatus_eIgnore;
}
nsEventStatus nsMenuBar::MenuSelected(const nsMenuEvent & aMenuEvent)
{
return nsEventStatus_eIgnore;
}
nsEventStatus nsMenuBar::MenuDeselected(const nsMenuEvent & aMenuEvent)
{
return nsEventStatus_eIgnore;
}
nsEventStatus nsMenuBar::MenuConstruct(
const nsMenuEvent & aMenuEvent,
nsIWidget * aParentWindow,
void * menubarNode,
void * aWebShell)
{
mWebShell = (nsIWebShell*) aWebShell;
mDOMNode = (nsIDOMNode*)menubarNode;
nsIMenuBar * pnsMenuBar = nsnull;
nsresult rv = nsComponentManager::CreateInstance(kMenuBarCID,
nsnull,
nsIMenuBar::GetIID(),
(void**)&pnsMenuBar);
if (NS_OK == rv) {
if (nsnull != pnsMenuBar) {
pnsMenuBar->Create(aParentWindow);
// set pnsMenuBar as a nsMenuListener on aParentWindow
nsCOMPtr<nsIMenuListener> menuListener;
pnsMenuBar->QueryInterface(nsIMenuListener::GetIID(), getter_AddRefs(menuListener));
aParentWindow->AddMenuListener(menuListener);
nsCOMPtr<nsIDOMNode> menuNode;
((nsIDOMNode*)menubarNode)->GetFirstChild(getter_AddRefs(menuNode));
while (menuNode) {
nsCOMPtr<nsIDOMElement> menuElement(do_QueryInterface(menuNode));
if (menuElement) {
nsString menuNodeType;
nsString menuName;
nsString menuAccessKey = " ";
menuElement->GetNodeName(menuNodeType);
if (menuNodeType.Equals("menu")) {
menuElement->GetAttribute(nsAutoString("value"), menuName);
menuElement->GetAttribute(nsAutoString("accesskey"), menuAccessKey);
// Don't create the menu yet, just add in the top level names
// Create nsMenu
nsIMenu * pnsMenu = nsnull;
rv = nsComponentManager::CreateInstance(kMenuCID, nsnull, nsIMenu::GetIID(), (void**)&pnsMenu);
if (NS_OK == rv) {
// Call Create
nsISupports * supports = nsnull;
pnsMenuBar->QueryInterface(kISupportsIID, (void**) &supports);
pnsMenu->Create(supports, menuName);
NS_RELEASE(supports);
pnsMenu->SetLabel(menuName);
pnsMenu->SetAccessKey(menuAccessKey);
pnsMenu->SetDOMNode(menuNode);
pnsMenu->SetDOMElement(menuElement);
pnsMenu->SetWebShell(mWebShell);
// Make nsMenu a child of nsMenuBar
// nsMenuBar takes ownership of the nsMenu
pnsMenuBar->AddMenu(pnsMenu);
// Release the menu now that the menubar owns it
NS_RELEASE(pnsMenu);
}
}
}
nsCOMPtr<nsIDOMNode> oldmenuNode(menuNode);
oldmenuNode->GetNextSibling(getter_AddRefs(menuNode));
} // end while (nsnull != menuNode)
// Give the aParentWindow this nsMenuBar to hold onto.
// The parent window should take ownership at this point
aParentWindow->SetMenuBar(pnsMenuBar);
// HACK: force a paint for now
pnsMenuBar->Paint();
NS_RELEASE(pnsMenuBar);
} // end if ( nsnull != pnsMenuBar )
}
return nsEventStatus_eIgnore;
return nsEventStatus_eIgnore;
}
nsEventStatus nsMenuBar::MenuDestruct(const nsMenuEvent & aMenuEvent)
{
return nsEventStatus_eIgnore;
}

View File

@@ -0,0 +1,85 @@
/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*-
*
* The contents of this file are subject to the Netscape Public
* License Version 1.1 (the "License"); you may not use this file
* except in compliance with the License. You may obtain a copy of
* the License at http://www.mozilla.org/NPL/
*
* Software distributed under the License is distributed on an "AS
* IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or
* implied. See the License for the specific language governing
* rights and limitations under the License.
*
* The Original Code is mozilla.org code.
*
* The Initial Developer of the Original Code is Netscape
* Communications Corporation. Portions created by Netscape are
* Copyright (C) 1998 Netscape Communications Corporation. All
* Rights Reserved.
*
* Contributor(s):
*/
#ifndef nsMenuBar_h__
#define nsMenuBar_h__
#include "nsIMenuBar.h"
#include "nsIMenuListener.h"
#include "nsVoidArray.h"
class nsIDOMNode;
class nsIWebShell;
class nsIWidget;
/**
* Native GTK+ MenuBar wrapper
*/
class nsMenuBar : public nsIMenuBar, public nsIMenuListener
{
public:
nsMenuBar();
virtual ~nsMenuBar();
// nsIMenuListener interface
nsEventStatus MenuItemSelected(const nsMenuEvent & aMenuEvent);
nsEventStatus MenuSelected(const nsMenuEvent & aMenuEvent);
nsEventStatus MenuDeselected(const nsMenuEvent & aMenuEvent);
nsEventStatus MenuConstruct(
const nsMenuEvent & aMenuEvent,
nsIWidget * aParentWindow,
void * menuNode,
void * aWebShell);
nsEventStatus MenuDestruct(const nsMenuEvent & aMenuEvent);
NS_DECL_ISUPPORTS
NS_IMETHOD Create(nsIWidget * aParent);
// nsIMenuBar Methods
NS_IMETHOD GetParent(nsIWidget *&aParent);
NS_IMETHOD SetParent(nsIWidget * aParent);
NS_IMETHOD AddMenu(nsIMenu * aMenu);
NS_IMETHOD GetMenuCount(PRUint32 &aCount);
NS_IMETHOD GetMenuAt(const PRUint32 aCount, nsIMenu *& aMenu);
NS_IMETHOD InsertMenuAt(const PRUint32 aCount, nsIMenu *& aMenu);
NS_IMETHOD RemoveMenu(const PRUint32 aCount);
NS_IMETHOD RemoveAll();
NS_IMETHOD GetNativeData(void*& aData);
NS_IMETHOD Paint();
NS_IMETHOD SetNativeData(void* aData);
protected:
GtkWidget * mMenuBar;
nsIWidget * mParent;
PRBool mIsMenuBarAdded;
nsIWebShell * mWebShell;
nsIDOMNode * mDOMNode;
nsVoidArray mMenusVoidArray;
PRUint32 mNumMenus;
};
#endif // nsMenuBar_h__

View File

@@ -0,0 +1,539 @@
/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*-
*
* The contents of this file are subject to the Netscape Public
* License Version 1.1 (the "License"); you may not use this file
* except in compliance with the License. You may obtain a copy of
* the License at http://www.mozilla.org/NPL/
*
* Software distributed under the License is distributed on an "AS
* IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or
* implied. See the License for the specific language governing
* rights and limitations under the License.
*
* The Original Code is mozilla.org code.
*
* The Initial Developer of the Original Code is Netscape
* Communications Corporation. Portions created by Netscape are
* Copyright (C) 1998 Netscape Communications Corporation. All
* Rights Reserved.
*
* Contributor(s):
*/
#include <gtk/gtk.h>
#include "nsMenuItem.h"
#include "nsIMenu.h"
#include "nsIMenuBar.h"
#include "nsIWidget.h"
#include "nsGtkEventHandler.h"
#include "nsIPopUpMenu.h"
#include "nsCOMPtr.h"
#include "nsIContent.h"
#include "nsIContentViewer.h"
#include "nsIDOMElement.h"
#include "nsIDocumentViewer.h"
#include "nsIPresContext.h"
#include "nsIWebShell.h"
#include "nsICharsetConverterManager.h"
#include "nsIPlatformCharset.h"
#include "nsIServiceManager.h"
static NS_DEFINE_IID(kISupportsIID, NS_ISUPPORTS_IID);
nsresult nsMenuItem::QueryInterface(REFNSIID aIID, void** aInstancePtr)
{
if (NULL == aInstancePtr) {
return NS_ERROR_NULL_POINTER;
}
*aInstancePtr = NULL;
if (aIID.Equals(nsIMenuItem::GetIID())) {
*aInstancePtr = (void*)(nsIMenuItem*)this;
NS_ADDREF_THIS();
return NS_OK;
}
if (aIID.Equals(kISupportsIID)) {
*aInstancePtr = (void*)(nsISupports*)(nsIMenuItem*)this;
NS_ADDREF_THIS();
return NS_OK;
}
if (aIID.Equals(nsIMenuListener::GetIID())) {
*aInstancePtr = (void*)(nsIMenuListener*)this;
NS_ADDREF_THIS();
return NS_OK;
}
return NS_NOINTERFACE;
}
NS_IMPL_ADDREF(nsMenuItem)
NS_IMPL_RELEASE(nsMenuItem)
//-------------------------------------------------------------------------
//
// nsMenuItem constructor
//
//-------------------------------------------------------------------------
nsMenuItem::nsMenuItem() : nsIMenuItem()
{
NS_INIT_REFCNT();
mMenuItem = nsnull;
mMenuParent = nsnull;
mPopUpParent = nsnull;
mTarget = nsnull;
mXULCommandListener = nsnull;
mIsSeparator = PR_FALSE;
mWebShell = nsnull;
mDOMElement = nsnull;
mIsSubMenu = PR_FALSE;
}
//-------------------------------------------------------------------------
//
// nsMenuItem destructor
//
//-------------------------------------------------------------------------
nsMenuItem::~nsMenuItem()
{
//g_print("nsMenuItem::~nsMenuItem called\n");
//NS_IF_RELEASE(mTarget);
gtk_widget_destroy(mMenuItem);
mMenuItem = nsnull;
//g_print("end nsMenuItem::~nsMenuItem\n");
}
//-------------------------------------------------------------------------
GtkWidget *nsMenuItem::GetNativeParent()
{
void * voidData;
if (nsnull != mMenuParent) {
mMenuParent->GetNativeData(&voidData);
} else if (nsnull != mPopUpParent) {
mPopUpParent->GetNativeData(voidData);
} else {
return nsnull;
}
return GTK_WIDGET(voidData);
}
//-------------------------------------------------------------------------
nsIWidget * nsMenuItem::GetMenuBarParent(nsISupports * aParent)
{
nsIWidget * widget = nsnull; // MenuBar's Parent
nsIMenu * menu = nsnull;
nsIMenuBar * menuBar = nsnull;
nsIPopUpMenu * popup = nsnull;
nsISupports * parent = aParent;
while(1) {
if (NS_OK == parent->QueryInterface(nsIMenu::GetIID(),(void**)&menu)) {
NS_RELEASE(parent);
if (NS_OK != menu->GetParent(parent)) {
NS_RELEASE(menu);
return nsnull;
}
NS_RELEASE(menu);
} else if (NS_OK == parent->QueryInterface(nsIPopUpMenu::GetIID(),(void**)&popup)) {
if (NS_OK != popup->GetParent(widget)) {
widget = nsnull;
}
NS_RELEASE(popup);
NS_RELEASE(parent);
return widget;
} else if (NS_OK == parent->QueryInterface(nsIMenuBar::GetIID(),(void**)&menuBar)) {
if (NS_OK != menuBar->GetParent(widget)) {
widget = nsnull;
}
NS_RELEASE(menuBar);
NS_RELEASE(parent);
return widget;
} else {
NS_RELEASE(parent);
return nsnull;
}
}
return nsnull;
}
GtkWidget*
nsMenuItem::CreateLocalized(const nsString& aLabel)
{
nsresult result;
static nsIUnicodeEncoder* converter = nsnull;
static int isLatin1 = 0;
static int initialized = 0;
if (!initialized) {
initialized = 1;
result = NS_ERROR_FAILURE;
NS_WITH_SERVICE(nsIPlatformCharset, platform, NS_PLATFORMCHARSET_PROGID,
&result);
if (platform && NS_SUCCEEDED(result)) {
nsAutoString charset("");
result = platform->GetCharset(kPlatformCharsetSel_Menu, charset);
if (NS_SUCCEEDED(result) && (charset.Length() > 0)) {
if (!charset.Compare("iso-8859-1", PR_TRUE)) {
isLatin1 = 1;
}
NS_WITH_SERVICE(nsICharsetConverterManager, manager,
NS_CHARSETCONVERTERMANAGER_PROGID, &result);
if (manager && NS_SUCCEEDED(result)) {
result = manager->GetUnicodeEncoder(&charset, &converter);
if (NS_FAILED(result) && converter) {
NS_RELEASE(converter);
converter = nsnull;
}
else if (converter) {
result = converter->SetOutputErrorBehavior(
nsIUnicodeEncoder::kOnError_Replace, nsnull, '?');
}
}
}
}
}
GtkWidget* menuItem = nsnull;
if (converter) {
char labelStr[128];
labelStr[0] = 0;
PRInt32 srcLen = aLabel.Length() + 1;
PRInt32 destLen = sizeof(labelStr);
result = converter->Convert(aLabel.GetUnicode(), &srcLen, labelStr,
&destLen);
if (labelStr[0] && NS_SUCCEEDED(result)) {
menuItem = gtk_menu_item_new_with_label(labelStr);
if (menuItem && (!isLatin1)) {
GtkWidget* label = GTK_BIN(menuItem)->child;
gtk_widget_ensure_style(label);
GtkStyle* style = gtk_style_copy(label->style);
gdk_font_unref(style->font);
style->font = gdk_fontset_load("*");
gtk_widget_set_style(label, style);
gtk_style_unref(style);
}
}
}
else {
char labelStr[128];
aLabel.ToCString(labelStr, sizeof(labelStr));
menuItem = gtk_menu_item_new_with_label(labelStr);
}
return menuItem;
}
//-------------------------------------------------------------------------
NS_METHOD nsMenuItem::Create(nsISupports *aParent,
const nsString &aLabel,
PRBool aIsSeparator)
{
if (nsnull == aParent) {
return NS_ERROR_FAILURE;
}
if(aParent) {
nsIMenu * menu;
aParent->QueryInterface(nsIMenu::GetIID(), (void**) &menu);
mMenuParent = menu;
NS_RELEASE(menu);
}
nsIWidget *widget = nsnull; // MenuBar's Parent
nsISupports *sups;
if (NS_OK == aParent->QueryInterface(kISupportsIID,(void**)&sups)) {
widget = GetMenuBarParent(sups);
// GetMenuBarParent will call release for us
// NS_RELEASE(sups);
mTarget = widget;
}
mIsSeparator = aIsSeparator;
mLabel = aLabel;
// create the native menu item
if(mIsSeparator) {
mMenuItem = gtk_menu_item_new();
} else {
mMenuItem = CreateLocalized(aLabel);
}
gtk_widget_show(mMenuItem);
gtk_signal_connect(GTK_OBJECT(mMenuItem), "activate",
GTK_SIGNAL_FUNC(menu_item_activate_handler),
this);
return NS_OK;
}
//-------------------------------------------------------------------------
NS_METHOD nsMenuItem::GetLabel(nsString &aText)
{
aText = mLabel;
return NS_OK;
}
//-------------------------------------------------------------------------
NS_METHOD nsMenuItem::SetLabel(nsString &aText)
{
mLabel = aText;
return NS_OK;
}
//-------------------------------------------------------------------------
NS_METHOD nsMenuItem::SetEnabled(PRBool aIsEnabled)
{
gtk_widget_set_sensitive(GTK_WIDGET(mMenuItem), aIsEnabled);
return NS_OK;
}
//-------------------------------------------------------------------------
NS_METHOD nsMenuItem::GetEnabled(PRBool *aIsEnabled)
{
*aIsEnabled = GTK_WIDGET_IS_SENSITIVE(mMenuItem);
return NS_OK;
}
//-------------------------------------------------------------------------
NS_METHOD nsMenuItem::SetChecked(PRBool aIsEnabled)
{
return NS_OK;
}
//-------------------------------------------------------------------------
NS_METHOD nsMenuItem::GetChecked(PRBool *aIsEnabled)
{
return NS_OK;
}
//-------------------------------------------------------------------------
NS_METHOD nsMenuItem::SetCheckboxType(PRBool aIsCheckbox)
{
return NS_OK;
}
//-------------------------------------------------------------------------
NS_METHOD nsMenuItem::GetCheckboxType(PRBool *aIsCheckbox)
{
return NS_OK;
}
//-------------------------------------------------------------------------
NS_METHOD nsMenuItem::GetCommand(PRUint32 & aCommand)
{
aCommand = mCommand;
return NS_OK;
}
//-------------------------------------------------------------------------
NS_METHOD nsMenuItem::GetTarget(nsIWidget *& aTarget)
{
aTarget = mTarget;
return NS_OK;
}
//-------------------------------------------------------------------------
NS_METHOD nsMenuItem::GetNativeData(void *& aData)
{
aData = (void *)mMenuItem;
return NS_OK;
}
//-------------------------------------------------------------------------
NS_METHOD nsMenuItem::AddMenuListener(nsIMenuListener * aMenuListener)
{
NS_IF_RELEASE(mXULCommandListener);
NS_IF_ADDREF(aMenuListener);
mXULCommandListener = aMenuListener;
return NS_OK;
}
//-------------------------------------------------------------------------
NS_METHOD nsMenuItem::RemoveMenuListener(nsIMenuListener * aMenuListener)
{
return NS_OK;
}
//-------------------------------------------------------------------------
NS_METHOD nsMenuItem::IsSeparator(PRBool & aIsSep)
{
aIsSep = mIsSeparator;
return NS_OK;
}
//-------------------------------------------------------------------------
// nsIMenuListener interface
//-------------------------------------------------------------------------
nsEventStatus nsMenuItem::MenuItemSelected(const nsMenuEvent & aMenuEvent)
{
if(!mIsSeparator) {
//g_print("nsMenuItem::MenuItemSelected\n");
DoCommand();
}else{
//g_print("nsMenuItem::MenuItemSelected is separator\n");
}
return nsEventStatus_eIgnore;
}
//-------------------------------------------------------------------------
nsEventStatus nsMenuItem::MenuSelected(const nsMenuEvent & aMenuEvent)
{
if(mXULCommandListener)
return mXULCommandListener->MenuSelected(aMenuEvent);
//g_print("nsMenuItem::MenuSelected\n");
return nsEventStatus_eIgnore;
}
//-------------------------------------------------------------------------
nsEventStatus nsMenuItem::MenuDeselected(const nsMenuEvent &aMenuEvent)
{
//g_print("nsMenuItem::MenuDeselected\n");
return nsEventStatus_eIgnore;
}
//-------------------------------------------------------------------------
nsEventStatus nsMenuItem::MenuConstruct(const nsMenuEvent &aMenuEvent,
nsIWidget *aParentWindow,
void *menuNode,
void *aWebShell)
{
//g_print("nsMenuItem::MenuConstruct\n");
return nsEventStatus_eIgnore;
}
//-------------------------------------------------------------------------
nsEventStatus nsMenuItem::MenuDestruct(const nsMenuEvent &aMenuEvent)
{
//g_print("nsMenuItem::MenuDestruct\n");
return nsEventStatus_eIgnore;
}
//-------------------------------------------------------------------------
/**
* Sets the JavaScript Command to be invoked when a "gui" event
* occurs on a source widget
* @param aStrCmd the JS command to be cached for later execution
* @return NS_OK
*/
NS_METHOD nsMenuItem::SetCommand(const nsString &aStrCmd)
{
return NS_OK;
}
//-------------------------------------------------------------------------
/**
* Executes the "cached" JavaScript Command
* @return NS_OK if the command was executed properly, otherwise an error code
*/
NS_METHOD nsMenuItem::DoCommand()
{
nsresult rv = NS_ERROR_FAILURE;
if(!mWebShell || !mDOMElement)
return rv;
nsCOMPtr<nsIContentViewer> contentViewer;
NS_ENSURE_SUCCESS(mWebShell->GetContentViewer(getter_AddRefs(contentViewer)),
NS_ERROR_FAILURE);
nsCOMPtr<nsIDocumentViewer> docViewer;
docViewer = do_QueryInterface(contentViewer);
if (!docViewer) {
NS_ERROR("Document viewer interface not supported by the content viewer.");
//g_print("Document viewer interface not supported by the content viewer.");
return rv;
}
nsCOMPtr<nsIPresContext> presContext;
if (NS_FAILED(rv = docViewer->GetPresContext(*getter_AddRefs(presContext)))) {
NS_ERROR("Unable to retrieve the doc viewer's presentation context.");
//g_print("Unable to retrieve the doc viewer's presentation context.");
return rv;
}
nsEventStatus status = nsEventStatus_eIgnore;
nsMouseEvent event;
event.eventStructType = NS_MOUSE_EVENT;
event.message = NS_MENU_ACTION;
nsCOMPtr<nsIContent> contentNode;
contentNode = do_QueryInterface(mDOMElement);
if (!contentNode) {
NS_ERROR("DOM Node doesn't support the nsIContent interface required to handle DOM events.");
//g_print("DOM Node doesn't support the nsIContent interface required to handle DOM events.");
return rv;
}
rv = contentNode->HandleDOMEvent(*presContext, &event, nsnull, NS_EVENT_FLAG_INIT, status);
//g_print("HandleDOMEvent called");
return rv;
}
//-------------------------------------------------------------------------
NS_METHOD nsMenuItem::SetDOMNode(nsIDOMNode * aDOMNode)
{
return NS_OK;
}
//-------------------------------------------------------------------------
NS_METHOD nsMenuItem::GetDOMNode(nsIDOMNode ** aDOMNode)
{
return NS_OK;
}
//-------------------------------------------------------------------------
NS_METHOD nsMenuItem::SetDOMElement(nsIDOMElement * aDOMElement)
{
mDOMElement = aDOMElement;
return NS_OK;
}
//-------------------------------------------------------------------------
NS_METHOD nsMenuItem::GetDOMElement(nsIDOMElement ** aDOMElement)
{
return NS_OK;
}
//-------------------------------------------------------------------------
NS_METHOD nsMenuItem::SetWebShell(nsIWebShell * aWebShell)
{
mWebShell = aWebShell;
return NS_OK;
}
//----------------------------------------------------------------------
NS_IMETHODIMP nsMenuItem::SetShortcutChar(const nsString &aText)
{
mKeyEquivalent = aText;
return NS_OK;
}
//----------------------------------------------------------------------
NS_IMETHODIMP nsMenuItem::GetShortcutChar(nsString &aText)
{
aText = mKeyEquivalent;
return NS_OK;
}
//----------------------------------------------------------------------
NS_IMETHODIMP nsMenuItem::SetModifiers(PRUint8 aModifiers)
{
mModifiers = aModifiers;
return NS_OK;
}
//----------------------------------------------------------------------
NS_IMETHODIMP nsMenuItem::GetModifiers(PRUint8 * aModifiers)
{
*aModifiers = mModifiers;
return NS_OK;
}

View File

@@ -0,0 +1,116 @@
/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*-
*
* The contents of this file are subject to the Netscape Public
* License Version 1.1 (the "License"); you may not use this file
* except in compliance with the License. You may obtain a copy of
* the License at http://www.mozilla.org/NPL/
*
* Software distributed under the License is distributed on an "AS
* IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or
* implied. See the License for the specific language governing
* rights and limitations under the License.
*
* The Original Code is mozilla.org code.
*
* The Initial Developer of the Original Code is Netscape
* Communications Corporation. Portions created by Netscape are
* Copyright (C) 1998 Netscape Communications Corporation. All
* Rights Reserved.
*
* Contributor(s):
*/
#ifndef nsMenuItem_h__
#define nsMenuItem_h__
#include "nsIMenuItem.h"
#include "nsString.h"
#include "nsIMenuListener.h"
class nsIDOMNode;
class nsIDOMElement;
class nsIMenu;
class nsIPopUpMenu;
class nsIWebShell;
class nsIWidget;
/**
* Native GTK+ MenuItem wrapper
*/
class nsMenuItem : public nsIMenuItem, public nsIMenuListener
{
public:
nsMenuItem();
virtual ~nsMenuItem();
// nsISupports
NS_DECL_ISUPPORTS
// nsIMenuItem Methods
NS_IMETHOD Create(nsISupports *aParent,
const nsString &aLabel,
PRBool aIsSeparator);
NS_IMETHOD GetLabel(nsString &aText);
NS_IMETHOD SetLabel(nsString &aText);
NS_IMETHOD SetEnabled(PRBool aIsEnabled);
NS_IMETHOD GetEnabled(PRBool *aIsEnabled);
NS_IMETHOD SetChecked(PRBool aIsEnabled);
NS_IMETHOD GetChecked(PRBool *aIsEnabled);
NS_IMETHOD SetCheckboxType(PRBool aIsCheckbox);
NS_IMETHOD GetCheckboxType(PRBool *aIsCheckbox);
NS_IMETHOD GetCommand(PRUint32 & aCommand);
NS_IMETHOD GetTarget(nsIWidget *& aTarget);
NS_IMETHOD GetNativeData(void*& aData);
NS_IMETHOD AddMenuListener(nsIMenuListener * aMenuListener);
NS_IMETHOD RemoveMenuListener(nsIMenuListener * aMenuListener);
NS_IMETHOD IsSeparator(PRBool & aIsSep);
NS_IMETHOD SetCommand(const nsString & aStrCmd);
NS_IMETHOD DoCommand();
NS_IMETHOD SetDOMNode(nsIDOMNode * aDOMNode);
NS_IMETHOD GetDOMNode(nsIDOMNode ** aDOMNode);
NS_IMETHOD SetDOMElement(nsIDOMElement * aDOMElement);
NS_IMETHOD GetDOMElement(nsIDOMElement ** aDOMElement);
NS_IMETHOD SetWebShell(nsIWebShell * aWebShell);
NS_IMETHOD SetShortcutChar(const nsString &aText);
NS_IMETHOD GetShortcutChar(nsString &aText);
NS_IMETHOD SetModifiers(PRUint8 aModifiers);
NS_IMETHOD GetModifiers(PRUint8 * aModifiers);
// nsIMenuListener interface
nsEventStatus MenuItemSelected(const nsMenuEvent & aMenuEvent);
nsEventStatus MenuSelected(const nsMenuEvent & aMenuEvent);
nsEventStatus MenuDeselected(const nsMenuEvent & aMenuEvent);
nsEventStatus MenuConstruct(const nsMenuEvent & aMenuEvent,
nsIWidget * aParentWindow,
void * menuNode,
void * aWebShell);
nsEventStatus MenuDestruct(const nsMenuEvent & aMenuEvent);
static GtkWidget* CreateLocalized(const nsString& aLabel);
protected:
nsIWidget *GetMenuBarParent(nsISupports * aParentSupports);
GtkWidget *GetNativeParent();
nsIMenuListener *mXULCommandListener;
nsString mLabel;
nsString mKeyEquivalent;
PRUint8 mModifiers;
PRUint32 mCommand;
nsIMenu *mMenuParent;
nsIPopUpMenu *mPopUpParent;
nsIWidget *mTarget;
GtkWidget *mMenuItem; // native cascade widget
PRBool mIsSeparator;
PRBool mIsSubMenu;
nsIWebShell * mWebShell;
nsIDOMElement * mDOMElement;
};
#endif // nsMenuItem_h__

View File

@@ -0,0 +1,214 @@
/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*-
*
* The contents of this file are subject to the Netscape Public
* License Version 1.1 (the "License"); you may not use this file
* except in compliance with the License. You may obtain a copy of
* the License at http://www.mozilla.org/NPL/
*
* Software distributed under the License is distributed on an "AS
* IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or
* implied. See the License for the specific language governing
* rights and limitations under the License.
*
* The Original Code is mozilla.org code.
*
* The Initial Developer of the Original Code is Netscape
* Communications Corporation. Portions created by Netscape are
* Copyright (C) 1998 Netscape Communications Corporation. All
* Rights Reserved.
*
* Contributor(s):
*/
#include "nsPopUpMenu.h"
#include "nsIMenu.h"
#include "nsIWidget.h"
#include "nsString.h"
#include "nsFileSpec.h" // XXX: For nsAutoCString
NS_IMPL_ISUPPORTS(nsPopUpMenu, nsIPopUpMenu::GetIID())
//-------------------------------------------------------------------------
//
// nsPopUpMenu constructor
//
//-------------------------------------------------------------------------
nsPopUpMenu::nsPopUpMenu() : nsIPopUpMenu()
{
NS_INIT_REFCNT();
mNumMenuItems = 0;
mParent = nsnull;
mMenu = nsnull;
}
//-------------------------------------------------------------------------
//
// nsPopUpMenu destructor
//
//-------------------------------------------------------------------------
nsPopUpMenu::~nsPopUpMenu()
{
NS_IF_RELEASE(mParent);
}
//-------------------------------------------------------------------------
//
// Create the proper widget
//
//-------------------------------------------------------------------------
NS_METHOD nsPopUpMenu::Create(nsIWidget *aParent)
{
mParent = aParent;
NS_ADDREF(mParent);
mMenu = gtk_menu_new();
return NS_OK;
}
//-------------------------------------------------------------------------
NS_METHOD nsPopUpMenu::AddItem(const nsString &aText)
{
GtkWidget *widget;
widget = gtk_menu_item_new_with_label ((const char*)nsAutoCString(mLabel));
gtk_widget_show(widget);
gtk_menu_shell_append (GTK_MENU_SHELL (mMenu), widget);
return NS_OK;
}
//-------------------------------------------------------------------------
NS_METHOD nsPopUpMenu::AddItem(nsIMenuItem * aMenuItem)
{
GtkWidget *widget;
void *voidData;
aMenuItem->GetNativeData(voidData);
widget = GTK_WIDGET(voidData);
gtk_menu_shell_append (GTK_MENU_SHELL (mMenu), widget);
// XXX add aMenuItem to internal data structor list
return NS_OK;
}
//-------------------------------------------------------------------------
NS_METHOD nsPopUpMenu::AddMenu(nsIMenu * aMenu)
{
nsString Label;
GtkWidget *item=NULL, *parentmenu=NULL, *newmenu=NULL;
void *voidData=NULL;
aMenu->GetLabel(Label);
GetNativeData(voidData);
parentmenu = GTK_WIDGET(voidData);
item = gtk_menu_item_new_with_label ((const char*)nsAutoCString(Label));
gtk_widget_show(item);
gtk_menu_shell_append (GTK_MENU_SHELL (parentmenu), item);
voidData = NULL;
aMenu->GetNativeData(&voidData);
newmenu = GTK_WIDGET(voidData);
gtk_menu_item_set_submenu (GTK_MENU_ITEM (item), newmenu);
// XXX add aMenu to internal data structor list
return NS_OK;
}
//-------------------------------------------------------------------------
NS_METHOD nsPopUpMenu::AddSeparator()
{
GtkWidget *widget;
widget = gtk_menu_item_new ();
gtk_widget_show(widget);
gtk_menu_shell_append (GTK_MENU_SHELL (mMenu), widget);
return NS_OK;
}
//-------------------------------------------------------------------------
NS_METHOD nsPopUpMenu::GetItemCount(PRUint32 &aCount)
{
return NS_OK;
}
//-------------------------------------------------------------------------
NS_METHOD nsPopUpMenu::GetItemAt(const PRUint32 aCount, nsIMenuItem *& aMenuItem)
{
return NS_OK;
}
//-------------------------------------------------------------------------
NS_METHOD nsPopUpMenu::InsertItemAt(const PRUint32 aCount, nsIMenuItem *& aMenuItem)
{
return NS_OK;
}
//-------------------------------------------------------------------------
NS_METHOD nsPopUpMenu::InsertItemAt(const PRUint32 aCount, const nsString & aMenuItemName)
{
return NS_OK;
}
//-------------------------------------------------------------------------
NS_METHOD nsPopUpMenu::InsertSeparator(const PRUint32 aCount)
{
return NS_OK;
}
//-------------------------------------------------------------------------
NS_METHOD nsPopUpMenu::RemoveItem(const PRUint32 aCount)
{
return NS_OK;
}
//-------------------------------------------------------------------------
NS_METHOD nsPopUpMenu::RemoveAll()
{
return NS_OK;
}
//-------------------------------------------------------------------------
void nsPopUpMenu::GetXY(GtkMenu *menu, gint *x, gint *y, gpointer user_data)
{
*x = ((nsPopUpMenu *)(user_data))->mX;
*y = ((nsPopUpMenu *)(user_data))->mY;
}
//-------------------------------------------------------------------------
NS_METHOD nsPopUpMenu::ShowMenu(PRInt32 aX, PRInt32 aY)
{
mX = aX;
mY = aY;
gtk_menu_popup (GTK_MENU(mMenu),
NULL,
NULL,
GetXY,
this,
0,
GDK_CURRENT_TIME);
return NS_OK;
}
//-------------------------------------------------------------------------
NS_METHOD nsPopUpMenu::GetNativeData(void *& aData)
{
aData = (void *)mMenu;
return NS_OK;
}
//-------------------------------------------------------------------------
NS_METHOD nsPopUpMenu::GetParent(nsIWidget *& aParent)
{
aParent = mParent;
return NS_OK;
}

View File

@@ -0,0 +1,77 @@
/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*-
*
* The contents of this file are subject to the Netscape Public
* License Version 1.1 (the "License"); you may not use this file
* except in compliance with the License. You may obtain a copy of
* the License at http://www.mozilla.org/NPL/
*
* Software distributed under the License is distributed on an "AS
* IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or
* implied. See the License for the specific language governing
* rights and limitations under the License.
*
* The Original Code is mozilla.org code.
*
* The Initial Developer of the Original Code is Netscape
* Communications Corporation. Portions created by Netscape are
* Copyright (C) 1998 Netscape Communications Corporation. All
* Rights Reserved.
*
* Contributor(s):
*/
#ifndef nsPopUpMenu_h__
#define nsPopUpMenu_h__
#include "nsIPopUpMenu.h"
#include <gtk/gtk.h>
class nsIWidget;
/**
* Native GTK+ PopUp wrapper
*/
class nsPopUpMenu : public nsIPopUpMenu
{
public:
nsPopUpMenu();
virtual ~nsPopUpMenu();
NS_DECL_ISUPPORTS
NS_IMETHOD Create(nsIWidget * aParent);
// nsIPopUpMenu Methods
NS_IMETHOD AddItem(const nsString &aText);
NS_IMETHOD AddItem(nsIMenuItem * aMenuItem);
NS_IMETHOD AddMenu(nsIMenu * aMenu);
NS_IMETHOD AddSeparator();
NS_IMETHOD GetItemCount(PRUint32 &aCount);
NS_IMETHOD GetItemAt(const PRUint32 aCount, nsIMenuItem *& aMenuItem);
NS_IMETHOD InsertItemAt(const PRUint32 aCount, nsIMenuItem *& aMenuItem);
NS_IMETHOD InsertItemAt(const PRUint32 aCount, const nsString & aMenuItemName);
NS_IMETHOD InsertSeparator(const PRUint32 aCount);
NS_IMETHOD RemoveItem(const PRUint32 aCount);
NS_IMETHOD RemoveAll();
static void GetXY(GtkMenu *menu, gint *x, gint *y, gpointer user_data);
NS_IMETHOD ShowMenu(PRInt32 aX, PRInt32 aY);
NS_IMETHOD GetNativeData(void*& aData);
NS_IMETHOD GetParent(nsIWidget*& aParent);
protected:
nsString mLabel;
PRUint32 mNumMenuItems;
nsIWidget *mParent;
GtkWidget *mMenu;
gint mX;
gint mY;
};
#endif // nsPopUpMenu_h__

View File

@@ -0,0 +1,240 @@
/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*-
*
* The contents of this file are subject to the Netscape Public
* License Version 1.1 (the "License"); you may not use this file
* except in compliance with the License. You may obtain a copy of
* the License at http://www.mozilla.org/NPL/
*
* Software distributed under the License is distributed on an "AS
* IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or
* implied. See the License for the specific language governing
* rights and limitations under the License.
*
* The Original Code is mozilla.org code.
*
* The Initial Developer of the Original Code is Netscape
* Communications Corporation. Portions created by Netscape are
* Copyright (C) 1998 Netscape Communications Corporation. All
* Rights Reserved.
*
* Contributor(s):
*/
#include <gtk/gtk.h>
#include "nsRadioButton.h"
#include "nsString.h"
#include "nsGtkEventHandler.h"
NS_IMPL_ADDREF_INHERITED(nsRadioButton, nsWidget)
NS_IMPL_RELEASE_INHERITED(nsRadioButton, nsWidget)
//-------------------------------------------------------------------------
//
// nsRadioButton constructor
//
//-------------------------------------------------------------------------
nsRadioButton::nsRadioButton() : nsWidget(), nsIRadioButton()
{
NS_INIT_REFCNT();
mLabel = nsnull;
mRadioButton = nsnull;
}
//-------------------------------------------------------------------------
//
// nsRadioButton destructor
//
//-------------------------------------------------------------------------
nsRadioButton::~nsRadioButton()
{
#if 0
if (mLabel)
gtk_widget_destroy(mLabel);
#endif
}
//-------------------------------------------------------------------------
//
// Query interface implementation
//
//-------------------------------------------------------------------------
nsresult nsRadioButton::QueryInterface(const nsIID& aIID, void** aInstancePtr)
{
nsresult result = nsWidget::QueryInterface(aIID, aInstancePtr);
if (result == NS_NOINTERFACE && aIID.Equals(nsIRadioButton::GetIID())) {
*aInstancePtr = (void*) ((nsIRadioButton*)this);
AddRef();
result = NS_OK;
}
return result;
}
//-------------------------------------------------------------------------
//
// Create the native RadioButton widget
//
//-------------------------------------------------------------------------
NS_METHOD nsRadioButton::CreateNative(GtkObject *parentWindow)
{
mWidget = gtk_event_box_new();
mRadioButton = gtk_radio_button_new(nsnull);
gtk_container_add(GTK_CONTAINER(mWidget), mRadioButton);
gtk_widget_show(mRadioButton);
gtk_widget_set_name(mWidget, "nsRadioButton");
gtk_radio_button_set_group(GTK_RADIO_BUTTON(mRadioButton), nsnull);
gtk_signal_connect(GTK_OBJECT(mRadioButton),
"destroy",
GTK_SIGNAL_FUNC(DestroySignal),
this);
return NS_OK;
}
void
nsRadioButton::OnDestroySignal(GtkWidget* aGtkWidget)
{
if (aGtkWidget == mLabel) {
mLabel = nsnull;
}
else if (aGtkWidget == mRadioButton) {
mRadioButton = nsnull;
}
else {
nsWidget::OnDestroySignal(aGtkWidget);
}
}
void nsRadioButton::InitCallbacks(char * aName)
{
InstallButtonPressSignal(mRadioButton);
InstallButtonReleaseSignal(mRadioButton);
InstallEnterNotifySignal(mWidget);
InstallLeaveNotifySignal(mWidget);
// These are needed so that the events will go to us and not our parent.
AddToEventMask(mWidget,
GDK_BUTTON_PRESS_MASK |
GDK_BUTTON_RELEASE_MASK |
GDK_ENTER_NOTIFY_MASK |
GDK_EXPOSURE_MASK |
GDK_FOCUS_CHANGE_MASK |
GDK_KEY_PRESS_MASK |
GDK_KEY_RELEASE_MASK |
GDK_LEAVE_NOTIFY_MASK |
GDK_POINTER_MOTION_MASK);
}
//-------------------------------------------------------------------------
//
// Set this button label
//
//-------------------------------------------------------------------------
NS_METHOD nsRadioButton::SetState(const PRBool aState)
{
if (mWidget) {
GtkToggleButton * item = GTK_TOGGLE_BUTTON(mRadioButton);
item->active = (gboolean) aState;
gtk_widget_queue_draw(GTK_WIDGET(item));
}
return NS_OK;
}
//-------------------------------------------------------------------------
//
// Set this button state
//-------------------------------------------------------------------------
NS_METHOD nsRadioButton::GetState(PRBool& aState)
{
if (mWidget) {
aState = (PRBool) GTK_TOGGLE_BUTTON(mRadioButton)->active;
}
else {
aState = PR_TRUE;
}
return NS_OK;
}
//-------------------------------------------------------------------------
//
// Set this button label
//
//-------------------------------------------------------------------------
NS_METHOD nsRadioButton::SetLabel(const nsString& aText)
{
if (mWidget) {
NS_ALLOC_STR_BUF(label, aText, 256);
g_print("nsRadioButton::SetLabel(%s)\n",label);
if (mLabel) {
gtk_label_set(GTK_LABEL(mLabel), label);
} else {
mLabel = gtk_label_new(label);
gtk_misc_set_alignment (GTK_MISC (mLabel), 0.0, 0.5);
gtk_container_add(GTK_CONTAINER(mRadioButton), mLabel);
gtk_widget_show(mLabel); /* XXX */
gtk_signal_connect(GTK_OBJECT(mLabel),
"destroy",
GTK_SIGNAL_FUNC(DestroySignal),
this);
}
NS_FREE_STR_BUF(label);
}
return NS_OK;
}
//-------------------------------------------------------------------------
//
// Get this button label
//
//-------------------------------------------------------------------------
NS_METHOD nsRadioButton::GetLabel(nsString& aBuffer)
{
aBuffer.Truncate();
if (mWidget) {
if (mLabel) {
char* text;
gtk_label_get(GTK_LABEL(mLabel), &text);
aBuffer.Append(text);
}
}
return NS_OK;
}
//////////////////////////////////////////////////////////////////////
// SetBackgroundColor for RadioButton
/*virtual*/
void nsRadioButton::SetBackgroundColorNative(GdkColor *aColorNor,
GdkColor *aColorBri,
GdkColor *aColorDark)
{
// use same style copy as SetFont
GtkStyle *style = gtk_style_copy(GTK_WIDGET (g_list_nth_data(gtk_container_children(GTK_CONTAINER (mWidget)),0))->style);
style->bg[GTK_STATE_NORMAL]=*aColorNor;
// Mouse over button
style->bg[GTK_STATE_PRELIGHT]=*aColorBri;
// Button is down
style->bg[GTK_STATE_ACTIVE]=*aColorDark;
// other states too? (GTK_STATE_ACTIVE, GTK_STATE_PRELIGHT,
// GTK_STATE_SELECTED, GTK_STATE_INSENSITIVE)
gtk_widget_set_style(GTK_WIDGET (g_list_nth_data(gtk_container_children(GTK_CONTAINER (mWidget)),0)), style);
// set style for eventbox too
gtk_widget_set_style(mWidget, style);
gtk_style_unref(style);
}

View File

@@ -0,0 +1,75 @@
/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*-
*
* The contents of this file are subject to the Netscape Public
* License Version 1.1 (the "License"); you may not use this file
* except in compliance with the License. You may obtain a copy of
* the License at http://www.mozilla.org/NPL/
*
* Software distributed under the License is distributed on an "AS
* IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or
* implied. See the License for the specific language governing
* rights and limitations under the License.
*
* The Original Code is mozilla.org code.
*
* The Initial Developer of the Original Code is Netscape
* Communications Corporation. Portions created by Netscape are
* Copyright (C) 1998 Netscape Communications Corporation. All
* Rights Reserved.
*
* Contributor(s):
*/
#ifndef nsRadioButton_h__
#define nsRadioButton_h__
#include "nsWidget.h"
#include "nsIRadioButton.h"
/**
* Native GTK+ Radiobutton wrapper
*/
class nsRadioButton : public nsWidget,
public nsIRadioButton
{
public:
nsRadioButton();
virtual ~nsRadioButton();
// nsISupports
NS_IMETHOD_(nsrefcnt) AddRef();
NS_IMETHOD_(nsrefcnt) Release();
NS_IMETHOD QueryInterface(const nsIID& aIID, void** aInstancePtr);
// nsIRadioButton part
NS_IMETHOD SetLabel(const nsString& aText);
NS_IMETHOD GetLabel(nsString& aBuffer);
NS_IMETHOD SetState(const PRBool aState);
NS_IMETHOD GetState(PRBool& aState);
virtual PRBool OnMove(PRInt32 aX, PRInt32 aY) { return PR_FALSE; }
virtual PRBool OnPaint(nsPaintEvent & aEvent) { return PR_FALSE; }
virtual PRBool OnResize(nsRect &aRect) { return PR_FALSE; }
// These are needed to Override the auto check behavior
void Armed();
void DisArmed();
protected:
NS_IMETHOD CreateNative(GtkObject *parentWindow);
virtual void InitCallbacks(char * aName = nsnull);
virtual void OnDestroySignal(GtkWidget* aGtkWidget);
// Sets background for checkbutton
virtual void SetBackgroundColorNative(GdkColor *aColorNor,
GdkColor *aColorBri,
GdkColor *aColorDark);
GtkWidget *mLabel;
GtkWidget *mRadioButton;
};
#endif // nsRadioButton_h__

View File

@@ -0,0 +1,455 @@
/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*-
* The contents of this file are subject to the Netscape Public
* License Version 1.1 (the "License"); you may not use this file
* except in compliance with the License. You may obtain a copy of
* the License at http://www.mozilla.org/NPL/
*
* Software distributed under the License is distributed on an "AS
* IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or
* implied. See the License for the specific language governing
* rights and limitations under the License.
*
* The Original Code is mozilla.org code.
*
* The Initial Developer of the Original Code is Netscape
* Communications Corporation. Portions created by Netscape are
* Copyright (C) 1998 Netscape Communications Corporation. All
* Rights Reserved.
*
* Contributor(s):
*/
#include <gtk/gtk.h>
#include "nsScrollbar.h"
#include "nsGUIEvent.h"
#include "nsGtkEventHandler.h"
NS_IMPL_ADDREF_INHERITED(nsScrollbar, nsWidget)
NS_IMPL_RELEASE_INHERITED(nsScrollbar, nsWidget)
NS_IMPL_QUERY_INTERFACE2(nsScrollbar, nsIScrollbar, nsIWidget)
//-------------------------------------------------------------------------
//
// nsScrollbar constructor
//
//-------------------------------------------------------------------------
nsScrollbar::nsScrollbar (PRBool aIsVertical):nsWidget (), nsIScrollbar ()
{
NS_INIT_REFCNT ();
mOrientation = (aIsVertical) ?
GTK_ORIENTATION_VERTICAL : GTK_ORIENTATION_HORIZONTAL;
}
//-------------------------------------------------------------------------
//
// nsScrollbar destructor
//
//-------------------------------------------------------------------------
nsScrollbar::~nsScrollbar ()
{
}
//-------------------------------------------------------------------------
//
// Create the native scrollbar widget
//
//-------------------------------------------------------------------------
NS_IMETHODIMP nsScrollbar::CreateNative (GtkObject * parentWindow)
{
// Create scrollbar, random default values
mAdjustment = GTK_ADJUSTMENT (gtk_adjustment_new (0, 0, 100, 1, 25, 25));
#ifdef USE_SUPERWIN
if (!GDK_IS_SUPERWIN(parentWindow)) {
g_print("Damn, brother. That's not a superwin.\n");
return NS_ERROR_FAILURE;
}
GdkSuperWin *superwin = GDK_SUPERWIN(parentWindow);
mMozBox = gtk_mozbox_new(superwin->bin_window);
#endif /* USE_SUPERWIN */
switch (mOrientation)
{
case GTK_ORIENTATION_HORIZONTAL:
mWidget = gtk_hscrollbar_new (mAdjustment);
break;
case GTK_ORIENTATION_VERTICAL:
mWidget = gtk_vscrollbar_new (mAdjustment);
break;
}
#ifdef USE_SUPERWIN
// make sure that we put the scrollbar into the mozbox
gtk_container_add(GTK_CONTAINER(mMozBox), mWidget);
#endif /* USE_SUPERWIN */
gtk_widget_set_name (mWidget, "nsScrollbar");
gtk_signal_connect (GTK_OBJECT (mAdjustment),
"value_changed",
GTK_SIGNAL_FUNC (handle_scrollbar_value_changed),
this);
gtk_signal_connect (GTK_OBJECT (mAdjustment),
"destroy",
GTK_SIGNAL_FUNC (DestroySignal),
this);
return NS_OK;
}
void
nsScrollbar::OnDestroySignal(GtkWidget* aGtkWidget)
{
if ((void*)aGtkWidget == (void*)mAdjustment) {
mAdjustment = nsnull;
}
else {
nsWidget::OnDestroySignal(aGtkWidget);
}
}
//-------------------------------------------------------------------------
//
// Define the range settings
//
//-------------------------------------------------------------------------
NS_IMETHODIMP nsScrollbar::SetMaxRange (PRUint32 aEndRange)
{
if (mAdjustment) {
GTK_ADJUSTMENT (mAdjustment)->upper = (float) aEndRange;
gtk_signal_emit_by_name (GTK_OBJECT (mAdjustment), "changed");
}
return NS_OK;
}
//-------------------------------------------------------------------------
//
// Return the range settings
//
//-------------------------------------------------------------------------
NS_IMETHODIMP nsScrollbar::GetMaxRange (PRUint32 & aMaxRange)
{
if (mAdjustment)
aMaxRange = (PRUint32) GTK_ADJUSTMENT (mAdjustment)->upper;
else
aMaxRange = 0;
return NS_OK;
}
//-------------------------------------------------------------------------
//
// Set the thumb position
//
//-------------------------------------------------------------------------
NS_IMETHODIMP nsScrollbar::SetPosition (PRUint32 aPos)
{
// if (mAdjustment)
// gtk_adjustment_set_value (GTK_ADJUSTMENT (mAdjustment), (float) aPos);
if (mAdjustment && mWidget)
{
//
// The following bit of code borrowed from gtkrange.c,
// gtk_range_adjustment_value_changed():
//
// Ok, so, like, the problem is that the view manager expects
// SetPosition() to simply do that - set the position of the
// scroll bar. Nothing else!
//
// Unfortunately, calling gtk_adjustment_set_value() causes
// the adjustment object (mAdjustment) to emit a
// "value_changed" signal which in turn causes the
// scrollbar widget (mWidget) to scroll to the given position.
//
// The net result of this is that the content is scrolled
// twice, once by the view manager and once by the
// scrollbar - and things get messed up from then onwards.
//
// The following bit of code does the equivalent of
// gtk_adjustment_set_value(), except no signal is emitted.
//
GtkRange * range = GTK_RANGE(mWidget);
GtkAdjustment * adjustment = GTK_ADJUSTMENT(mAdjustment);
adjustment->value = (float) aPos;
if (range->old_value != adjustment->value)
{
gtk_range_slider_update (range);
gtk_range_clear_background (range);
range->old_value = adjustment->value;
}
}
return NS_OK;
}
//-------------------------------------------------------------------------
//
// Get the current thumb position.
//
//-------------------------------------------------------------------------
NS_IMETHODIMP nsScrollbar::GetPosition (PRUint32 & aPos)
{
if (mAdjustment)
aPos = (PRUint32) GTK_ADJUSTMENT (mAdjustment)->value;
else
aPos = 0;
return NS_OK;
}
//-------------------------------------------------------------------------
//
// Set the thumb size
//
//-------------------------------------------------------------------------
NS_IMETHODIMP nsScrollbar::SetThumbSize (PRUint32 aSize)
{
if (aSize > 0)
{
if (mAdjustment) {
GTK_ADJUSTMENT (mAdjustment)->page_increment = (float) aSize;
GTK_ADJUSTMENT (mAdjustment)->page_size = (float) aSize;
gtk_signal_emit_by_name (GTK_OBJECT (mAdjustment), "changed");
}
}
return NS_OK;
}
//-------------------------------------------------------------------------
//
// Get the thumb size
//
//-------------------------------------------------------------------------
NS_IMETHODIMP nsScrollbar::GetThumbSize (PRUint32 & aThumbSize)
{
if (mAdjustment)
aThumbSize = (PRUint32) GTK_ADJUSTMENT (mAdjustment)->page_size;
else
aThumbSize = 0;
return NS_OK;
}
//-------------------------------------------------------------------------
//
// Set the line increment for this scrollbar
//
//-------------------------------------------------------------------------
NS_IMETHODIMP nsScrollbar::SetLineIncrement (PRUint32 aLineIncrement)
{
if (aLineIncrement > 0)
{
if (mAdjustment) {
GTK_ADJUSTMENT (mAdjustment)->step_increment = (float) aLineIncrement;
gtk_signal_emit_by_name (GTK_OBJECT (mAdjustment), "changed");
}
}
return NS_OK;
}
//-------------------------------------------------------------------------
//
// Get the line increment for this scrollbar
//
//-------------------------------------------------------------------------
NS_IMETHODIMP nsScrollbar::GetLineIncrement (PRUint32 & aLineInc)
{
if (mAdjustment) {
aLineInc = (PRUint32) GTK_ADJUSTMENT (mAdjustment)->step_increment;
}
else
aLineInc = 0;
return NS_OK;
}
//-------------------------------------------------------------------------
//
// Set all scrolling parameters
//
//-------------------------------------------------------------------------
NS_IMETHODIMP nsScrollbar::SetParameters (PRUint32 aMaxRange, PRUint32 aThumbSize,
PRUint32 aPosition, PRUint32 aLineIncrement)
{
if (mAdjustment) {
int thumbSize = (((int) aThumbSize) > 0 ? aThumbSize : 1);
int maxRange = (((int) aMaxRange) > 0 ? aMaxRange : 10);
int mLineIncrement = (((int) aLineIncrement) > 0 ? aLineIncrement : 1);
int maxPos = maxRange - thumbSize;
int pos = ((int) aPosition) > maxPos ? maxPos - 1 : ((int) aPosition);
GTK_ADJUSTMENT (mAdjustment)->lower = 0;
GTK_ADJUSTMENT (mAdjustment)->upper = maxRange;
GTK_ADJUSTMENT (mAdjustment)->page_size = thumbSize;
GTK_ADJUSTMENT (mAdjustment)->page_increment = thumbSize;
GTK_ADJUSTMENT (mAdjustment)->step_increment = mLineIncrement;
// this will emit the changed signal for us
gtk_adjustment_set_value (GTK_ADJUSTMENT (mAdjustment), pos);
}
return NS_OK;
}
//-------------------------------------------------------------------------
int nsScrollbar::AdjustScrollBarPosition (int aPosition)
{
return 0; /* XXX */
}
//-------------------------------------------------------------------------
//
// Deal with scrollbar messages (actually implemented only in nsScrollbar)
//
//-------------------------------------------------------------------------
PRBool nsScrollbar::OnScroll (nsScrollbarEvent & aEvent, PRUint32 cPos)
{
PRBool result = PR_TRUE;
float newPosition;
switch (aEvent.message)
{
// scroll one line right or down
case NS_SCROLLBAR_LINE_NEXT:
{
newPosition = GTK_ADJUSTMENT (mAdjustment)->value;
// newPosition += mLineIncrement;
newPosition += 10;
PRUint32 thumbSize;
PRUint32 maxRange;
GetThumbSize (thumbSize);
GetMaxRange (maxRange);
PRUint32 max = maxRange - thumbSize;
if (newPosition > (int) max)
newPosition = (int) max;
// if an event callback is registered, give it the chance
// to change the increment
if (mEventCallback)
{
aEvent.position = (PRUint32) newPosition;
result = ConvertStatus ((*mEventCallback) (&aEvent));
newPosition = aEvent.position;
}
break;
}
// scroll one line left or up
case NS_SCROLLBAR_LINE_PREV:
{
newPosition = GTK_ADJUSTMENT (mAdjustment)->value;
// newPosition -= mLineIncrement;
newPosition -= 10;
if (newPosition < 0)
newPosition = 0;
// if an event callback is registered, give it the chance
// to change the decrement
if (mEventCallback)
{
aEvent.position = (PRUint32) newPosition;
aEvent.widget = (nsWidget *) this;
result = ConvertStatus ((*mEventCallback) (&aEvent));
newPosition = aEvent.position;
}
break;
}
// Scrolls one page right or down
case NS_SCROLLBAR_PAGE_NEXT:
{
newPosition = GTK_ADJUSTMENT (mAdjustment)->value;
PRUint32 thumbSize;
GetThumbSize (thumbSize);
PRUint32 maxRange;
GetThumbSize (thumbSize);
GetMaxRange (maxRange);
PRUint32 max = maxRange - thumbSize;
if (newPosition > (int) max)
newPosition = (int) max;
// if an event callback is registered, give it the chance
// to change the increment
if (mEventCallback)
{
aEvent.position = (PRUint32) newPosition;
result = ConvertStatus ((*mEventCallback) (&aEvent));
newPosition = aEvent.position;
}
break;
}
// Scrolls one page left or up.
case NS_SCROLLBAR_PAGE_PREV:
{
newPosition = GTK_ADJUSTMENT (mAdjustment)->value;
if (newPosition < 0)
newPosition = 0;
// if an event callback is registered, give it the chance
// to change the increment
if (mEventCallback)
{
aEvent.position = (PRUint32) newPosition;
result = ConvertStatus ((*mEventCallback) (&aEvent));
newPosition = aEvent.position;
}
break;
}
// Scrolls to the absolute position. The current position is specified by
// the cPos parameter.
case NS_SCROLLBAR_POS:
{
newPosition = cPos;
// if an event callback is registered, give it the chance
// to change the increment
if (mEventCallback)
{
aEvent.position = (PRUint32) newPosition;
result = ConvertStatus ((*mEventCallback) (&aEvent));
newPosition = aEvent.position;
}
break;
}
}
/*
GTK_ADJUSTMENT(mAdjustment)->value = newPosition;
gtk_signal_emit_by_name(GTK_OBJECT(mAdjustment), "value_changed");
*/
/*
if (mEventCallback) {
aEvent.position = cPos;
result = ConvertStatus((*mEventCallback)(&aEvent));
newPosition = aEvent.position;
}
*/
return result;
}

View File

@@ -0,0 +1,66 @@
/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*-
*
* The contents of this file are subject to the Netscape Public
* License Version 1.1 (the "License"); you may not use this file
* except in compliance with the License. You may obtain a copy of
* the License at http://www.mozilla.org/NPL/
*
* Software distributed under the License is distributed on an "AS
* IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or
* implied. See the License for the specific language governing
* rights and limitations under the License.
*
* The Original Code is mozilla.org code.
*
* The Initial Developer of the Original Code is Netscape
* Communications Corporation. Portions created by Netscape are
* Copyright (C) 1998 Netscape Communications Corporation. All
* Rights Reserved.
*
* Contributor(s):
*/
#ifndef nsScrollbar_h__
#define nsScrollbar_h__
#include "nsWidget.h"
#include "nsIScrollbar.h"
/**
* Native GTK+ scrollbar wrapper.
*/
class nsScrollbar : public nsWidget,
public nsIScrollbar
{
public:
nsScrollbar(PRBool aIsVertical);
virtual ~nsScrollbar();
NS_DECL_ISUPPORTS_INHERITED
// nsIScrollBar implementation
NS_IMETHOD SetMaxRange(PRUint32 aEndRange);
NS_IMETHOD GetMaxRange(PRUint32& aMaxRange);
NS_IMETHOD SetPosition(PRUint32 aPos);
NS_IMETHOD GetPosition(PRUint32& aPos);
NS_IMETHOD SetThumbSize(PRUint32 aSize);
NS_IMETHOD GetThumbSize(PRUint32& aSize);
NS_IMETHOD SetLineIncrement(PRUint32 aSize);
NS_IMETHOD GetLineIncrement(PRUint32& aSize);
NS_IMETHOD SetParameters(PRUint32 aMaxRange, PRUint32 aThumbSize,
PRUint32 aPosition, PRUint32 aLineIncrement);
virtual PRBool OnScroll (nsScrollbarEvent & aEvent, PRUint32 cPos);
protected:
NS_IMETHOD CreateNative(GtkObject *parentWindow);
virtual void OnDestroySignal(GtkWidget* aGtkWidget);
private:
int mOrientation;
GtkAdjustment *mAdjustment;
int AdjustScrollBarPosition(int aPosition);
};
#endif /* nsScrollbar_h__ */

View File

@@ -0,0 +1,125 @@
/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*-
*
* The contents of this file are subject to the Netscape Public
* License Version 1.1 (the "License"); you may not use this file
* except in compliance with the License. You may obtain a copy of
* the License at http://www.mozilla.org/NPL/
*
* Software distributed under the License is distributed on an "AS
* IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or
* implied. See the License for the specific language governing
* rights and limitations under the License.
*
* The Original Code is mozilla.org code.
*
* The Initial Developer of the Original Code is Netscape
* Communications Corporation. Portions created by Netscape are
* Copyright (C) 1998 Netscape Communications Corporation. All
* Rights Reserved.
*
* Contributor(s):
*/
#include "nscore.h"
#include "nsIAllocator.h"
#include "plstr.h"
#include "stdio.h"
#include "prlink.h"
#include "nsSound.h"
#include <unistd.h>
#include <gtk/gtk.h>
/* used with esd_open_sound */
//static int esdref = -1;
static PRLibrary *lib = nsnull;
//typedef int (PR_CALLBACK *EsdOpenSoundType)(const char *host);
//typedef int (PR_CALLBACK *EsdCloseType)(int);
/* used to play the sounds from the find symbol call */
typedef int (PR_CALLBACK *EsdPlayFileType)(const char *, const char *, int);
NS_IMPL_ISUPPORTS1(nsSound, nsISound);
////////////////////////////////////////////////////////////////////////
nsSound::nsSound()
{
NS_INIT_REFCNT();
/* we don't need to do esd_open_sound if we are only going to play files
but we will if we want to do things like streams, etc
*/
// EsdOpenSoundType EsdOpenSound;
lib = PR_LoadLibrary("libesd.so");
/*
if (!lib)
return;
EsdOpenSound = (EsdOpenSoundType) PR_FindSymbol(lib, "esd_open_sound");
esdref = (*EsdOpenSound)("localhost");
*/
}
nsSound::~nsSound()
{
/* see above comment */
/*
if (esdref != -1)
{
EsdCloseType EsdClose = (EsdCloseType) PR_FindSymbol(lib, "esd_close");
(*EsdClose)(esdref);
esdref = -1;
}
*/
}
nsresult NS_NewSound(nsISound** aSound)
{
NS_PRECONDITION(aSound != nsnull, "null ptr");
if (! aSound)
return NS_ERROR_NULL_POINTER;
*aSound = new nsSound();
if (! *aSound)
return NS_ERROR_OUT_OF_MEMORY;
NS_ADDREF(*aSound);
return NS_OK;
}
NS_METHOD nsSound::Init(void)
{
return NS_OK;
}
NS_METHOD nsSound::Beep()
{
::gdk_beep();
return NS_OK;
}
NS_METHOD nsSound::Play(nsIFileSpec *filespec)
{
if (lib)
{
char *filename;
filespec->GetNativePath(&filename);
g_print("there are some issues with playing sound right now, but this should work\n");
EsdPlayFileType EsdPlayFile = (EsdPlayFileType) PR_FindSymbol(lib, "esd_play_file");
(*EsdPlayFile)("mozilla", filename, 1);
nsCRT::free(filename);
return NS_OK;
}
return NS_OK;
}

View File

@@ -0,0 +1,41 @@
/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*-
*
* The contents of this file are subject to the Netscape Public
* License Version 1.1 (the "License"); you may not use this file
* except in compliance with the License. You may obtain a copy of
* the License at http://www.mozilla.org/NPL/
*
* Software distributed under the License is distributed on an "AS
* IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or
* implied. See the License for the specific language governing
* rights and limitations under the License.
*
* The Original Code is mozilla.org code.
*
* The Initial Developer of the Original Code is Netscape
* Communications Corporation. Portions created by Netscape are
* Copyright (C) 1998 Netscape Communications Corporation. All
* Rights Reserved.
*
* Contributor(s):
*/
#ifndef __nsSound_h__
#define __nsSound_h__
#include "nsISound.h"
#include <gtk/gtk.h>
class nsSound : public nsISound {
public:
nsSound();
virtual ~nsSound();
NS_DECL_ISUPPORTS
NS_DECL_NSISOUND
};
#endif /* __nsSound_h__ */

View File

@@ -0,0 +1,97 @@
/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*-
*
* The contents of this file are subject to the Netscape Public
* License Version 1.1 (the "License"); you may not use this file
* except in compliance with the License. You may obtain a copy of
* the License at http://www.mozilla.org/NPL/
*
* Software distributed under the License is distributed on an "AS
* IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or
* implied. See the License for the specific language governing
* rights and limitations under the License.
*
* The Original Code is mozilla.org code.
*
* The Initial Developer of the Original Code is Netscape
* Communications Corporation. Portions created by Netscape are
* Copyright (C) 1998 Netscape Communications Corporation. All
* Rights Reserved.
*
* Contributor(s):
*/
#include <gtk/gtk.h>
#include "nsTextAreaWidget.h"
#include "nsString.h"
NS_IMPL_ADDREF_INHERITED(nsTextAreaWidget, nsWidget)
NS_IMPL_RELEASE_INHERITED(nsTextAreaWidget, nsWidget)
NS_IMPL_QUERY_INTERFACE2(nsTextAreaWidget, nsITextAreaWidget, nsIWidget)
//-------------------------------------------------------------------------
//
// nsTextAreaWidget constructor
//
//-------------------------------------------------------------------------
nsTextAreaWidget::nsTextAreaWidget()
{
mBackground = NS_RGB(124, 124, 124);
}
//-------------------------------------------------------------------------
//
// nsTextAreaWidget destructor
//
//-------------------------------------------------------------------------
nsTextAreaWidget::~nsTextAreaWidget()
{
gtk_widget_destroy(mTextWidget);
mTextWidget = nsnull;
}
//-------------------------------------------------------------------------
//
// Create the native Text widget
//
//-------------------------------------------------------------------------
NS_METHOD nsTextAreaWidget::CreateNative(GtkObject *parentWindow)
{
PRBool oldIsReadOnly;
mWidget = gtk_scrolled_window_new(nsnull, nsnull);
gtk_container_set_border_width(GTK_CONTAINER(mWidget), 0);
gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(mWidget),
GTK_POLICY_NEVER,
GTK_POLICY_ALWAYS);
mTextWidget = gtk_text_new(nsnull, nsnull);
gtk_text_set_word_wrap(GTK_TEXT(mTextWidget), PR_TRUE);
gtk_widget_set_name(mTextWidget, "nsTextAreaWidget");
gtk_widget_show(mTextWidget);
SetPassword(mIsPassword);
SetReadOnly(mIsReadOnly, oldIsReadOnly);
gtk_container_add(GTK_CONTAINER(mWidget), mTextWidget);
return NS_OK;
}
//-------------------------------------------------------------------------
//
// set font for textarea
//
//-------------------------------------------------------------------------
/* virtual */
void nsTextAreaWidget::SetFontNative(GdkFont *aFont)
{
GtkStyle *style = gtk_style_copy(GTK_WIDGET (g_list_nth_data(gtk_container_children(GTK_CONTAINER (mWidget)),0))->style);
// gtk_style_copy ups the ref count of the font
gdk_font_unref (style->font);
style->font = aFont;
gdk_font_ref(style->font);
gtk_widget_set_style(GTK_WIDGET (g_list_nth_data(gtk_container_children(GTK_CONTAINER (mWidget)),0)), style);
gtk_style_unref(style);
}

View File

@@ -0,0 +1,49 @@
/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*-
*
* The contents of this file are subject to the Netscape Public
* License Version 1.1 (the "License"); you may not use this file
* except in compliance with the License. You may obtain a copy of
* the License at http://www.mozilla.org/NPL/
*
* Software distributed under the License is distributed on an "AS
* IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or
* implied. See the License for the specific language governing
* rights and limitations under the License.
*
* The Original Code is mozilla.org code.
*
* The Initial Developer of the Original Code is Netscape
* Communications Corporation. Portions created by Netscape are
* Copyright (C) 1998 Netscape Communications Corporation. All
* Rights Reserved.
*
* Contributor(s):
*/
#ifndef nsTextAreaWidget_h__
#define nsTextAreaWidget_h__
#include "nsTextHelper.h"
#include "nsITextAreaWidget.h"
/**
* Native GTK+ multi-line edit control wrapper.
*/
class nsTextAreaWidget : public nsTextHelper
{
public:
nsTextAreaWidget();
virtual ~nsTextAreaWidget();
NS_DECL_ISUPPORTS_INHERITED
virtual void SetFontNative(GdkFont *aFont);
protected:
NS_METHOD CreateNative(GtkObject *parentWindow);
};
#endif // nsTextAreaWidget_h__

View File

@@ -0,0 +1,216 @@
/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*-
*
* The contents of this file are subject to the Netscape Public
* License Version 1.1 (the "License"); you may not use this file
* except in compliance with the License. You may obtain a copy of
* the License at http://www.mozilla.org/NPL/
*
* Software distributed under the License is distributed on an "AS
* IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or
* implied. See the License for the specific language governing
* rights and limitations under the License.
*
* The Original Code is mozilla.org code.
*
* The Initial Developer of the Original Code is Netscape
* Communications Corporation. Portions created by Netscape are
* Copyright (C) 1998 Netscape Communications Corporation. All
* Rights Reserved.
*
* Contributor(s):
*/
#include <gtk/gtk.h>
#include "nsTextHelper.h"
#include "nsTextWidget.h"
#include "nsString.h"
NS_IMPL_ADDREF_INHERITED(nsTextHelper, nsWidget)
NS_IMPL_RELEASE_INHERITED(nsTextHelper, nsWidget)
//-------------------------------------------------------------------------
//
// nsTextHelper constructor
//
//-------------------------------------------------------------------------
nsTextHelper::nsTextHelper() : nsWidget(), nsITextAreaWidget(), nsITextWidget()
{
mIsReadOnly = PR_FALSE;
mIsPassword = PR_FALSE;
}
//-------------------------------------------------------------------------
//
// nsTextHelper destructor
//
//-------------------------------------------------------------------------
nsTextHelper::~nsTextHelper()
{
}
//-------------------------------------------------------------------------
//
// Set initial parameters
//
//-------------------------------------------------------------------------
NS_IMETHODIMP nsTextHelper::PreCreateWidget(nsWidgetInitData *aInitData)
{
if (nsnull != aInitData) {
nsTextWidgetInitData* data = (nsTextWidgetInitData *) aInitData;
mIsPassword = data->mIsPassword;
mIsReadOnly = data->mIsReadOnly;
}
return NS_OK;
}
//-------------------------------------------------------------------------
NS_IMETHODIMP nsTextHelper::SetMaxTextLength(PRUint32 aChars)
{
// This is a normal entry only thing, not a text box
gtk_entry_set_max_length(GTK_ENTRY(mTextWidget), (int)aChars);
return NS_OK;
}
//-------------------------------------------------------------------------
NS_IMETHODIMP nsTextHelper::GetText(nsString& aTextBuffer, PRUint32 aBufferSize, PRUint32& aActualSize)
{
char *str = nsnull;
if (GTK_IS_ENTRY(mTextWidget))
{
str = gtk_entry_get_text(GTK_ENTRY(mTextWidget));
}
else if (GTK_IS_TEXT(mTextWidget))
{
str = gtk_editable_get_chars (GTK_EDITABLE (mTextWidget), 0,
gtk_text_get_length (GTK_TEXT (mTextWidget)));
}
aTextBuffer.SetLength(0);
aTextBuffer.Append(str);
PRUint32 len = (PRUint32)strlen(str);
aActualSize = len;
return NS_OK;
}
//-------------------------------------------------------------------------
NS_IMETHODIMP nsTextHelper::SetText(const nsString& aText, PRUint32& aActualSize)
{
if (GTK_IS_ENTRY(mTextWidget)) {
gtk_entry_set_text(GTK_ENTRY(mTextWidget),
(const gchar *)nsAutoCString(aText));
} else if (GTK_IS_TEXT(mTextWidget)) {
gtk_editable_delete_text(GTK_EDITABLE(mTextWidget), 0,
gtk_text_get_length(GTK_TEXT (mTextWidget)));
gtk_text_insert(GTK_TEXT(mTextWidget),
nsnull, nsnull, nsnull,
(const char *)nsAutoCString(aText),
aText.Length());
}
aActualSize = aText.Length();
return NS_OK;
}
//-------------------------------------------------------------------------
NS_IMETHODIMP nsTextHelper::InsertText(const nsString &aText,
PRUint32 aStartPos,
PRUint32 aEndPos,
PRUint32& aActualSize)
{
gtk_editable_insert_text(GTK_EDITABLE(mTextWidget),
(const gchar *)nsAutoCString(aText),
(gint)aText.Length(), (gint*)&aStartPos);
aActualSize = aText.Length();
return NS_OK;
}
//-------------------------------------------------------------------------
NS_IMETHODIMP nsTextHelper::RemoveText()
{
if (GTK_IS_ENTRY(mTextWidget)) {
gtk_entry_set_text(GTK_ENTRY(mTextWidget), "");
} else if (GTK_IS_TEXT(mTextWidget)) {
gtk_editable_delete_text(GTK_EDITABLE(mTextWidget), 0,
gtk_text_get_length(GTK_TEXT (mTextWidget)));
}
return NS_OK;
}
//-------------------------------------------------------------------------
NS_IMETHODIMP nsTextHelper::SetPassword(PRBool aIsPassword)
{
mIsPassword = aIsPassword?PR_FALSE:PR_TRUE;
if (GTK_IS_ENTRY(mTextWidget)) {
gtk_entry_set_visibility(GTK_ENTRY(mTextWidget), mIsPassword);
}
// this won't work for gtk_texts
return NS_OK;
}
//-------------------------------------------------------------------------
NS_IMETHODIMP nsTextHelper::SetReadOnly(PRBool aReadOnlyFlag, PRBool& aOldReadOnlyFlag)
{
NS_ASSERTION(nsnull != mTextWidget,
"SetReadOnly - Widget is NULL, Create may not have been called!");
aOldReadOnlyFlag = mIsReadOnly;
mIsReadOnly = aReadOnlyFlag?PR_FALSE:PR_TRUE;
gtk_editable_set_editable(GTK_EDITABLE(mTextWidget), mIsReadOnly);
return NS_OK;
}
//-------------------------------------------------------------------------
NS_IMETHODIMP nsTextHelper::SelectAll()
{
nsString text;
PRUint32 actualSize = 0;
PRUint32 numChars = GetText(text, 0, actualSize);
SetSelection(0, numChars);
return NS_OK;
}
//-------------------------------------------------------------------------
NS_IMETHODIMP nsTextHelper::SetSelection(PRUint32 aStartSel, PRUint32 aEndSel)
{
gtk_editable_select_region(GTK_EDITABLE(mTextWidget), aStartSel, aEndSel);
return NS_OK;
}
//-------------------------------------------------------------------------
NS_IMETHODIMP nsTextHelper::GetSelection(PRUint32 *aStartSel, PRUint32 *aEndSel)
{
#if 0
XmTextPosition left;
XmTextPosition right;
if (XmTextGetSelectionPosition(mTextWidget, &left, &right)) {
*aStartSel = (PRUint32)left;
*aEndSel = (PRUint32)right;
} else {
printf("nsTextHelper::GetSelection Error getting positions\n");
return NS_ERROR_FAILURE;
}
#endif
return NS_OK;
}
//-------------------------------------------------------------------------
NS_IMETHODIMP nsTextHelper::SetCaretPosition(PRUint32 aPosition)
{
gtk_editable_set_position(GTK_EDITABLE(mTextWidget), aPosition);
return NS_OK;
}
//-------------------------------------------------------------------------
NS_IMETHODIMP nsTextHelper::GetCaretPosition(PRUint32& aPosition)
{
aPosition = (PRUint32)GTK_EDITABLE(mTextWidget)->current_pos;
return NS_OK;
}

View File

@@ -0,0 +1,66 @@
/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*-
*
* The contents of this file are subject to the Netscape Public
* License Version 1.1 (the "License"); you may not use this file
* except in compliance with the License. You may obtain a copy of
* the License at http://www.mozilla.org/NPL/
*
* Software distributed under the License is distributed on an "AS
* IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or
* implied. See the License for the specific language governing
* rights and limitations under the License.
*
* The Original Code is mozilla.org code.
*
* The Initial Developer of the Original Code is Netscape
* Communications Corporation. Portions created by Netscape are
* Copyright (C) 1998 Netscape Communications Corporation. All
* Rights Reserved.
*
* Contributor(s):
*/
#ifndef nsTextHelper_h__
#define nsTextHelper_h__
#include "nsITextWidget.h"
#include "nsITextAreaWidget.h"
#include "nsWidget.h"
/**
* Base class for nsTextAreaWidget and nsTextWidget
*/
class nsTextHelper : public nsWidget,
public nsITextAreaWidget,
public nsITextWidget
{
public:
nsTextHelper();
virtual ~nsTextHelper();
// nsISupports
NS_IMETHOD_(nsrefcnt) AddRef();
NS_IMETHOD_(nsrefcnt) Release();
NS_IMETHOD SelectAll();
NS_IMETHOD PreCreateWidget(nsWidgetInitData *aInitData);
NS_IMETHOD SetMaxTextLength(PRUint32 aChars);
NS_IMETHOD GetText(nsString& aTextBuffer, PRUint32 aBufferSize, PRUint32& aActualSize);
NS_IMETHOD SetText(const nsString &aText, PRUint32& aActualSize);
NS_IMETHOD InsertText(const nsString &aText, PRUint32 aStartPos, PRUint32 aEndPos, PRUint32& aActualSize);
NS_IMETHOD RemoveText();
NS_IMETHOD SetPassword(PRBool aIsPassword);
NS_IMETHOD SetReadOnly(PRBool aNewReadOnlyFlag, PRBool& aOldReadOnlyFlag);
NS_IMETHOD SetSelection(PRUint32 aStartSel, PRUint32 aEndSel);
NS_IMETHOD GetSelection(PRUint32 *aStartSel, PRUint32 *aEndSel);
NS_IMETHOD SetCaretPosition(PRUint32 aPosition);
NS_IMETHOD GetCaretPosition(PRUint32& aPosition);
protected:
GtkWidget *mTextWidget;
PRBool mIsPassword;
PRBool mIsReadOnly;
};
#endif // nsTextHelper_h__

View File

@@ -0,0 +1,130 @@
/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*-
*
* The contents of this file are subject to the Netscape Public
* License Version 1.1 (the "License"); you may not use this file
* except in compliance with the License. You may obtain a copy of
* the License at http://www.mozilla.org/NPL/
*
* Software distributed under the License is distributed on an "AS
* IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or
* implied. See the License for the specific language governing
* rights and limitations under the License.
*
* The Original Code is mozilla.org code.
*
* The Initial Developer of the Original Code is Netscape
* Communications Corporation. Portions created by Netscape are
* Copyright (C) 1998 Netscape Communications Corporation. All
* Rights Reserved.
*
* Contributor(s):
*/
#include <gtk/gtk.h>
#include "nsTextWidget.h"
#include "nsString.h"
#include "nsGtkEventHandler.h"
extern int mIsPasswordCallBacksInstalled;
NS_IMPL_ADDREF_INHERITED(nsTextWidget, nsWidget)
NS_IMPL_RELEASE_INHERITED(nsTextWidget, nsWidget)
NS_IMPL_QUERY_INTERFACE2(nsTextWidget, nsITextWidget, nsIWidget)
//-------------------------------------------------------------------------
//
// nsTextWidget constructor
//
//-------------------------------------------------------------------------
nsTextWidget::nsTextWidget() : nsTextHelper()
{
}
//-------------------------------------------------------------------------
//
// nsTextWidget destructor
//
//-------------------------------------------------------------------------
nsTextWidget::~nsTextWidget()
{
// avoid freeing this twice in other destructors
mTextWidget = nsnull;
}
//-------------------------------------------------------------------------
//
// Create the native Entry widget
//
//-------------------------------------------------------------------------
NS_IMETHODIMP nsTextWidget::CreateNative(GtkObject *parentWindow)
{
PRBool oldIsReadOnly;
mWidget = gtk_entry_new();
#ifdef USE_SUPERWIN
if (!GDK_IS_SUPERWIN(parentWindow)) {
g_print("Damn, brother. That's not a superwin.\n");
return NS_ERROR_FAILURE;
}
GdkSuperWin *superwin = GDK_SUPERWIN(parentWindow);
mMozBox = gtk_mozbox_new(superwin->bin_window);
#endif /* USE_SUPERWIN */
// used by nsTextHelper because nsTextArea needs a scrolled_window
mTextWidget = mWidget;
gtk_widget_set_name(mWidget, "nsTextWidget");
/*
* GTK's text widget does XIM for us, so we don't want to use the default key handler
* which does XIM, so we connect to a non-XIM key event for the text widget
*/
gtk_signal_connect_after(GTK_OBJECT(mWidget),
"key_press_event",
GTK_SIGNAL_FUNC(handle_key_press_event_for_text),
this);
gtk_signal_connect(GTK_OBJECT(mWidget),
"key_release_event",
GTK_SIGNAL_FUNC(handle_key_release_event_for_text),
this);
SetPassword(mIsPassword);
SetReadOnly(mIsReadOnly, oldIsReadOnly);
gtk_widget_show(mWidget);
// These are needed so that the events will go to us and not our parent.
AddToEventMask(mWidget,
GDK_BUTTON_PRESS_MASK |
GDK_BUTTON_RELEASE_MASK |
GDK_ENTER_NOTIFY_MASK |
GDK_EXPOSURE_MASK |
GDK_FOCUS_CHANGE_MASK |
GDK_KEY_PRESS_MASK |
GDK_KEY_RELEASE_MASK |
GDK_LEAVE_NOTIFY_MASK |
GDK_POINTER_MOTION_MASK);
#ifdef USE_SUPERWIN
// make sure that we put the scrollbar into the mozbox
gtk_container_add(GTK_CONTAINER(mMozBox), mWidget);
#endif /* USE_SUPERWIN */
return NS_OK;
}
PRBool nsTextWidget::OnKey(nsKeyEvent &aEvent)
{
if (mEventCallback) {
return DispatchWindowEvent(&aEvent);
}
return PR_FALSE;
}

View File

@@ -0,0 +1,48 @@
/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*-
*
* The contents of this file are subject to the Netscape Public
* License Version 1.1 (the "License"); you may not use this file
* except in compliance with the License. You may obtain a copy of
* the License at http://www.mozilla.org/NPL/
*
* Software distributed under the License is distributed on an "AS
* IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or
* implied. See the License for the specific language governing
* rights and limitations under the License.
*
* The Original Code is mozilla.org code.
*
* The Initial Developer of the Original Code is Netscape
* Communications Corporation. Portions created by Netscape are
* Copyright (C) 1998 Netscape Communications Corporation. All
* Rights Reserved.
*
* Contributor(s):
*/
#ifndef nsTextWidget_h__
#define nsTextWidget_h__
#include "nsTextHelper.h"
#include "nsITextWidget.h"
/**
* Native GTK+ single line edit control wrapper.
*/
class nsTextWidget : public nsTextHelper
{
public:
nsTextWidget();
virtual ~nsTextWidget();
NS_DECL_ISUPPORTS_INHERITED
PRBool OnKey(nsKeyEvent &aEvent);
protected:
NS_IMETHOD CreateNative(GtkObject *parentWindow);
};
#endif // nsTextWidget_h__

View File

@@ -0,0 +1,144 @@
/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*-
*
* The contents of this file are subject to the Netscape Public
* License Version 1.1 (the "License"); you may not use this file
* except in compliance with the License. You may obtain a copy of
* the License at http://www.mozilla.org/NPL/
*
* Software distributed under the License is distributed on an "AS
* IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or
* implied. See the License for the specific language governing
* rights and limitations under the License.
*
* The Original Code is mozilla.org code.
*
* The Initial Developer of the Original Code is Netscape
* Communications Corporation. Portions created by Netscape are
* Copyright (C) 1998 Netscape Communications Corporation. All
* Rights Reserved.
*
* Contributor(s):
*/
#include "nscore.h" // needed for 'nsnull'
#include "nsToolkit.h"
//
// Static thread local storage index of the Toolkit
// object associated with a given thread...
//
static PRUintn gToolkitTLSIndex = 0;
//-------------------------------------------------------------------------
//
// constructor
//
//-------------------------------------------------------------------------
nsToolkit::nsToolkit()
{
NS_INIT_REFCNT();
mSharedGC = nsnull;
}
//-------------------------------------------------------------------------
//
// destructor
//
//-------------------------------------------------------------------------
nsToolkit::~nsToolkit()
{
if (mSharedGC)
gdk_gc_unref(mSharedGC);
// Remove the TLS reference to the toolkit...
PR_SetThreadPrivate(gToolkitTLSIndex, nsnull);
}
//-------------------------------------------------------------------------
//
// nsISupports implementation macro
//
//-------------------------------------------------------------------------
NS_IMPL_ISUPPORTS1(nsToolkit, nsIToolkit)
void nsToolkit::CreateSharedGC(void)
{
GdkPixmap *pixmap;
if (mSharedGC)
return;
pixmap = ::gdk_pixmap_new (NULL, 1, 1, gdk_rgb_get_visual()->depth);
mSharedGC = ::gdk_gc_new (pixmap);
gdk_pixmap_unref (pixmap);
mSharedGC = gdk_gc_ref(mSharedGC);
}
GdkGC *nsToolkit::GetSharedGC(void)
{
return gdk_gc_ref(mSharedGC);
}
//-------------------------------------------------------------------------
//
//
//-------------------------------------------------------------------------
NS_IMETHODIMP nsToolkit::Init(PRThread *aThread)
{
CreateSharedGC();
return NS_OK;
}
//-------------------------------------------------------------------------
//
// Return the nsIToolkit for the current thread. If a toolkit does not
// yet exist, then one will be created...
//
//-------------------------------------------------------------------------
NS_METHOD NS_GetCurrentToolkit(nsIToolkit* *aResult)
{
nsIToolkit* toolkit = nsnull;
nsresult rv = NS_OK;
PRStatus status;
// Create the TLS index the first time through...
if (0 == gToolkitTLSIndex) {
status = PR_NewThreadPrivateIndex(&gToolkitTLSIndex, NULL);
if (PR_FAILURE == status) {
rv = NS_ERROR_FAILURE;
}
}
if (NS_SUCCEEDED(rv)) {
toolkit = (nsIToolkit*)PR_GetThreadPrivate(gToolkitTLSIndex);
//
// Create a new toolkit for this thread...
//
if (!toolkit) {
toolkit = new nsToolkit();
if (!toolkit) {
rv = NS_ERROR_OUT_OF_MEMORY;
} else {
NS_ADDREF(toolkit);
toolkit->Init(PR_GetCurrentThread());
//
// The reference stored in the TLS is weak. It is removed in the
// nsToolkit destructor...
//
PR_SetThreadPrivate(gToolkitTLSIndex, (void*)toolkit);
}
} else {
NS_ADDREF(toolkit);
}
*aResult = toolkit;
}
return rv;
}

View File

@@ -0,0 +1,55 @@
/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*-
*
* The contents of this file are subject to the Netscape Public
* License Version 1.1 (the "License"); you may not use this file
* except in compliance with the License. You may obtain a copy of
* the License at http://www.mozilla.org/NPL/
*
* Software distributed under the License is distributed on an "AS
* IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or
* implied. See the License for the specific language governing
* rights and limitations under the License.
*
* The Original Code is mozilla.org code.
*
* The Initial Developer of the Original Code is Netscape
* Communications Corporation. Portions created by Netscape are
* Copyright (C) 1998 Netscape Communications Corporation. All
* Rights Reserved.
*
* Contributor(s):
*/
#ifndef TOOLKIT_H
#define TOOLKIT_H
#include "nsIToolkit.h"
#include <gtk/gtk.h>
/**
* Wrapper around the thread running the message pump.
* The toolkit abstraction is necessary because the message pump must
* execute within the same thread that created the widget under Win32.
*/
class nsToolkit : public nsIToolkit
{
public:
nsToolkit();
virtual ~nsToolkit();
NS_DECL_ISUPPORTS
NS_IMETHOD Init(PRThread *aThread);
void CreateSharedGC(void);
GdkGC *GetSharedGC(void);
private:
GdkGC *mSharedGC;
};
#endif // TOOLKIT_H

File diff suppressed because it is too large Load Diff

Some files were not shown because too many files have changed in this diff Show More