Hi all,
I've committed Inkboard to Inkscape CVS. This consists of the Inkboard code (in src/jabber_whiteboard), C/Gtk+ dialogs (in src/dialogs), some conversions of those dialogs to C++/Gtkmm (in ui/dialog), and modifications to some existing files.
To enable Inkboard, pass the --enable-inkboard switch to the configure script. You will need libloudmouth http://loudmouth.imendio.org and Boost http://www.boost.org. I have tested Inkboard with libloudmouth v0.17.2 and v0.90, although ~v0.13 should also work. (Let me know if it really does.) I have developed this code with Boost v.1.31.0.
Inkboard no longer relies on Boost smart pointers as I stated in my mailing list response to Bryce re: Summer of Code updates; I have switched all smart pointer-reliant code over to code managed by the garbage collector. However, it still uses Boost.Bind, Boost.Function, and Boost's lexical_cast. The reliance on Boost.Bind can probably be scrapped as soon as I do the work to convert the involved function objects to be used by the C++ standard library's argument-binding facilities.
I think this is all the code necessary to compile Inkboard. There may be another commit coming if I forgot something, which happens more often than I'd like. If something doesn't work, please let me know.
Inkboard usage ========= The "Whiteboard" toplevel menu should be present. If it isn't, try removing your menus.xml file in your Inkscape preferences directory and try again -- this will force the file to be regenerated from the built-in menu skeleton. Or, you can copy the necessary XML from src/menus-skeleton.h.
You must first connect to a Jabber server; this is done by selecting Whiteboard -> Connect to server... After that, you may choose to engage in a user-to-user sharing session or a chatroom sharing session.
The "Dump XML tracker" menu item is intended only for debugging; it probably should not make it into a release.
Known issues ======== 1) Chatrooms must be specially created for them to work with Inkboard. Here are the conditions:
A) The chatroom must broadcast the message INKBOARD-JOINED (case-sensitive) when a Jabber user enters it. This is necessary because mu-conference v0.6 doesn't seem to follow JEP-0045 with regards to the order of broadcasting presence messages. (See http://www.jabber.org/jeps/jep-0045.html#enter-pres.) Hopefully, this won't be a problem in the future. In the meantime, this special behavior is easy to set up with e.g. gaim.
B) If regular Jabber users are present in an Inkboard chatroom before any Inkscape client joins, there will be synchronization problems, since the current Inkboard chatroom code implements the following logic:
non-empty room => request synchronization. empty room => become "master".
This can be worked around -- to an extent -- by checking the resource tags associated with each JID in the chatroom, since Inkboard has its own resource tag (specifically, "Inkboard"). Malicious users can, of course, defeat this, so maybe it's not the best way. We'll see.
2) Although Inkboard identifies itself as speaking the Jabber MUC protocol (which I do intend to make it do) it currently actually only acts on the "groupchat 1.0" subset of messages.
3) The bug in Ted's menus code affects Inkboard in any code path that may cause a new document window to appear. In particular, these are the cases I think are associated with said bug, based on backtraces:
A) The "accept invitation in new document" option presented when a user is given the choice to accept or decline a user-to-user whiteboard session causes a crash.
B) Establishing a new Inkboard session in a new document after an Inkboard session has already been established causes a crash.
4) Session files are disabled for now. They work, but only for documents that involve no references to automatically-named internal elements, which makes them a little useless. (For example, gradient/pattern fills aren't recorded correctly just yet.) If you'd like to use them, though, all the code is there. To enable them, you can (1) uncomment lines 183-184 in src/menus-skeleton.h, remove your menus.xml file, and rebuild/restart Inkscape, or (2) add in those lines to your menus.xml file.
5) Loudmouth sometimes throws errors indicating that it was asked to extract attributes or child nodes from a NULL root node. I'm not sure why it does this -- I'm pretty sure I wrapped all the code that deals with node/attribute extraction with the appropriate conditionals -- but it's possible that I've missed something. In any case, these warnings appear to be harmless -- just annoying.
6) There's quite a few g_log() debug calls still present. I apologize for this -- I think they're useful, but maybe they really aren't. I'll remove them upon request, and certainly before release.
Phew. I think that's all for now. Have fun!
-- David