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." ]
Hi Frank, You wrote:
If anyone has any bright ideas on how to assign widgets sizes which are relative to their container, speak up...
I don't know Dillo internal widgets, but Gtk provides the GtkFixed widget where you can specify where the widgets are to be positioned. The API reference says that in that case the size is also fixed (but it does not say how). Check also the Gtk2 reference for this widget, as it looks more complete there. HTH -- Melvin Hadasht
Hi, <size problems>
<...> 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...
About a week ago I decided to look into Frames with your tabs patch put was overwhelmed by my non-knowledge of GTK. Luckily I saw your note "Now working on frames" in one of your e-mails and I figured at the rate Frank produces code I will never have anything ready ;-) And the description sounds great ! Great work ! I'll try it out now. Anyways, getting to the point. What about tracking the sizes of the widgets ? E.g. putting the sizes in DilloDoc And also maybe putting the parent widget in DilloDoc ? That way one could "cascade" down the sizes. I haven't looked at the new patch though - just some ideas. The problem might be that all these sizes would only be calculated sizes and that GTK may calculate the sizes differently and hence may be getting different rounding errors. A lot of resizing may be getting the actual sizes and the calculated sizes heavily out of sync. One would have to see.
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)
And again at http://www.hs.uni-hamburg.de/~stcd102/dillo-20030804-tabs.patch.gz Cheers Andreas -- **************************** NEW ADDRESS ****************************** Hamburger Sternwarte Universitaet Hamburg Gojenbergsweg 112 Tel. ++49 40 42891 4016 D-21029 Hamburg, Germany Fax. ++49 40 42891 4198
On Tue, Aug 05, Frank de Lange wrote:
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...
I would not call this an overkill. Creating a new widget with a rather limited functionality (since only used for framesets) is not a big deal, at least for someone who is a bit expierienced in it, but in most cases better that working around limitations of other widgets. Furthermore, it gives us more control over extensions becoming necessary in the future.
- the full_screen_off_button is not shown in frame documents. Use double-click instead to toggle the full screen setting...
You may put the "Show Controls" button into the new widget, look at GtkScrolledWindow for inspiration. Sebastian
participants (4)
-
Andreas Schweitzer
-
Frank de Lange
-
Melvin Hadasht
-
Sebastian Geerken