Hi'all, The next version (7) of my tab patch is ready (see bottom of this message for download instructions). Most notable change is that it now also contains an experimental, not-really-ready-but-quite-entertaining implementation of frame/iframe support. The not-quite-ready part has to do with the sizing of frames (more on this later). Frame support, like tab support, is optional. It is enabled by default, but you can disable it using (frames) --disable-frames and (tabs) --disable-tabs during configure. Other new features: - title of window/tab set to url if file has no title (this can be disabled with the preference 'document_title_use_url=NO', default enabled) - navigation buttons (back, forward, stop, reload) in popup menu (can be disabled with preference 'show_popup_navigation=NO', default enabled) - duplicate page (open current page in new window, keyboard ALT-N) and, if tab support is enabled, duplicate tab (open current page in new tab, keyboard ALT-T) options in popup menu. Of course, the patch also fixes some bugs (and possibly introduces new ones). I had to back out my stopgap fix for the Gdk-CRITICAL warnings, which caused more problems than it solved. Instead, I patched dw_widget. The warnings were generated from within Dw_widget_mouse_event(dw_widget:729) when it tried to set a cursor on a non-existing window. I added a NULL-check, and made the widget generate a debug message (set DEBUG_LEVEL to 10 to see the warning). More on frame/iframe support ============================ What works: - loading (nested) framesets, displaying frames at their appropriate location (but not at their appropriate size... yet...) - loading (nested) iframes, displaying iframes at their appropriate location and with (mostly) appropriate size and alignment. - all frame-related menu options (in the popup menu). Frame menus can be accessed using the 'This Frame...' button in the popup menu, nested framesets have their own 'This Frameset...' menu. This way, Dillo allows you to limit actions to a subset of a framed document, eg. you can search for text in just one frame/iframe/frameset. Top-level menu options usually refer to the whole document (the frameset). An exception to this is the 'Jump To' option, which refers to the frame in which the menu was opened (question: should this contain the anchors for all frames?). Use the 'Show only this Frame' option in the Frame Options menu to get a full-page view of a frame (which is what you'd get with an unpatched version of Dillo). What does not work yet: - obeying frameset proportions. Currently all frames are allocated a default size. I have the appropriate sizes for the frames at hand, but GTK does not provide a means to size multiple widgets in a container relative to the size of that container. The 'gtk_widget_set_usize()' (or GTK2's gtk_widget_set_size_request() replacement function) are not suitable for this purpose, although they can be used to set a minimum or absolute size for rows/columns which have been specified that way (frameset rows=100,100,* is easy, frameset rows=100,20%,3*,* is not...). - the full_screen_off_button is not shown in frame documents. Use double-click instead to toggle the full screen setting... These problems can be solved by creating a new widget for the frameset, but that might be overkill. DwTable provides some of the needed features, but is is overcomplicated for the task at hand (no colspan or rowspan in framesets, etc) and lacks direct control over the height of table cells. If anyone has any bright ideas on how to assign widgets sizes which are relative to their container, speak up... Or, if anyone has already created (or at least thought about creating) a 'frameset' widget, please let me know. No need to re-invent the wheel... If I get no response, I will probably create a new widget based on GtkTable, with some built-in sizing magic. I chose GtkTable over DwTable because the former seems to be more suitable for the purpose than the latter. I might be wrong, please tell me... Tabs, frames and browser bloat ============================== For those who wonder if all this will add much to the size of Dillo, rest assured that it does not. I did some size comparisons between CVS Dillo (unpatched) and several configurations with the patch applied. The main results are (compiled with gcc 3.2.2, binutils 2.13.90.0.18 for x86, optimisation -Os, stripped binary) CVS unpatched: 285024 bytes Patched, no tabs, no frames: 289884 bytes Patched, no tabs, with frames: 294076 bytes Patched, with tabs, no frames: 297596 bytes Patched, with tabs and frames: 301692 bytes So, some 15 Kb for tabs and frames together, bearing in mind the patch has not been optimised for size yet (premature optimisation is... well, a bad idea). Not too bad, I think. Download instructions ===================== The patch is made against 20030804 CVS. It can be downloaded from the usual (ad-happy, but...) Geocities site: http://www.geocities.com/ikbenfrank/ More specifically, it can be found here: http://www.geocities.com/ikbenfrank/dillo-20030804-tabs.patch.gz size: 53262 bytes (gzipped, as downloaded) 220519 bytes (uncompressed) md5sum: 5c218077382d6c6e7300f1dd7d41e024 (gzipped, as downloaded) f6242c4f01f0eed60645db91a8882b2c (uncompressed) As always, check the site for the most recent version: That's all for now, Cheers//Frank -- WWWWW ________________________ ## o o\ / Frank de Lange \ }# \| / +46-734352015 \ \ `--| _/ <Hacker for Hire> \ `---' \ +31-640037120 / \ frank@unternet.org / `------------------------' [ "Omnis enim res, quae dando non deficit, dum habetur et non datur, nondum habetur, quomodo habenda est." ]