Bookmarks reworked



Hello all,

I've been working away for the past little while at restructuring the
bookmarks code of Epiphany. The result is a whopping great patch to the
current CVS or 1.3.8 version of Epiphany (a 4575 line .patch file).

A quick statistical summary of the patch:
      * Patch adds 889 lines (mainly because I add 4 files).
      * Patch removes 1638 lines (mainly because I remove 6 files).

A patch this large probably should have been done in sections/stages,
but since I am new to GTK+ programming I couldn't effectively plan out
what those sections/stages would be. So, instead I have this single one.

I have put a lot of time into this code, *but* that is more because of
inexperience with GTK+. I won't be surprised if this patch is wholly
rejected because of design or whatever. Thanks for the opportunity
though!

While this patch is mostly a code cleanup, it does change some user-
visible aspects and makes some large architecture changes. Just remember
that the main aims I was trying to achieve were:
      * Consolidate code which generates menu.
      * Consolidate code which handles actions and their behaviours.
      * Prepare for moving the whole thing into a plugin (even if this
        never happens, it would be nice to keep the code modular).




USER VISIBLE CHANGES
====================
      * The bookmarks bar no longer exists, and most references to it
        have been removed. Bookmarks and topics are added to the toolbar
        by drag-and-drop from the bookmark editor.
      * 'Open in tabs' is (temporarily) only available via the context
        menu for topics which are on the toolbar.
      * You cannot 'Move left' or 'Move right' a topic/bookmark on the
        toolbar. The only reason for removing this is to make code
        maintenance simpler. This can be done much more easily using the
        toolbar editor anyway. You can still 'Remove' topics/bookmarks
        from the toolbar by right-clicking.
      * Fixed a bug in the 'Remove' code which would occur if you tried
        to remove a bookmark/topic when it wasn't on the first toolbar.


MAIN SOURCE CHANGES
===================

ephy-bookmarksbar and ephy-bookmarksbar-model are no longer in use. They
are replaced by a minor modification to the normal toolbar, and the code
in ephy-bookmarks-ui.

ephy-bookmarks-menu now contains only functions to create (not maintain)
action-based bookmark menus. With the current patch ephy-bookmarks-menu
implements my hierarchical menu system, but could be easily switched
back (will do this later).

ephy-bookmarks-ui is new, and contains signal handlers which:
      * listen to changes in the bookmarks database and update menus and
        actions accordingly.
      * listen to requests for information coming from the toolbar
        model, allowing it to read/write bookmarks and topics on the
        toolbars.

ephy-bookmark-action and ephy-topic-action now focus on being actions
and actions only (they don't listen for changes in the bookmarks
database, they don't generate menus, etc.). There are functions to
find/create actions for EphyWindows, to get a standard name for these
actions, and to synchronise the information contained in the actions
with that in the bookmarks database.


DETAILED CHANGES
================

src/bookmarks/ephy-bookmarks-ui.c
      * New file consisting of new code and stuff copied and modified
        from other files.
      * Contains signal handlers which listen to changes in the
        bookmarks database and update actions and menus for each
        EphyWindow.
      * Contains signal handlers which are used to correctly read and
        write bookmark/topic entries in the toolbars XML.
      * Contains functions to attach the above signal handlers to the
        bookmarks database and the toolbar model.

src/bookmarks/ephy-bookmarks-menu.c
      * Completely gutted it and replaced with code which only generates
        bookmark menus. It no longer maintains the menu (this is now the
        responsibility of the ephy-bookmarks-ui code). You can call upon
        this 'menu factory' by calling ephy_bookmarks_menu_build which
        returns a GtkUIManager merge id.

src/bookmarks/ephy-bookmark-action.c
src/bookmarks/ephy-topic-action.c
      * Each action now has a pointer to the EphyNode which is being
        represented, and the EphyWindow which is the target of any
        activity. This is instead of keeping the node id.
      * Removed all signals and replaced with builtin behaviours.
      * Reworked code to handle interaction with the toolbar model. 
      * Removed drag-and-drop for the topic action. Have left it in for
        bookmark actions, but would like to remove it if noone uses it.
      * Removed checks which test if the widget is on the bookmarks bar.
      * Simplified property management by removing separate functions
        for different properties.
      * Removed signal handlers which received events from
        bookmarks/topics. This is now handled by the signal handlers in
        ephy-bookmarks-ui.
      * Added functions to get the standard names of actions (OpenTopic
        and OpenBmk), and to find/create instances of bookmark and topic
        actions within a given action group.
      * Replaced menu generation code for topic actions with a call to
        ephy_bookmarks_menu_build.

src/ephy-shell.c
      * Code to create the bookmarks bar was removed. It was replaced
        with a single call to ephy_bookmarks_ui_attach_toolbar_model
        which installs signal handlers giving the same functionality as
        the bookmarks bar.

src/ephy-toolbars-model.c
      * Modified to accept drag-and-drop of things other than
        application/x-toolitem types. This allows drag-and-drop of URLs
        and topics to the toolbar.

src/ephy-window.c
      * Removed most references to the bookmarks bar and to the
        favourites menu.
      * Added a call to ephy_bookmarks_ui_attach_window immediately
        below the ephy_extension_attach_window call and taking only the
        same information. This is to prepare for the possibility of
        turning the bookmarks system into a plugin.

src/bookmarks/Makefile.am
      * Removed any reference to the bookmarks bar.
      * Added the ephy-bookmarks-ui code.
      * Also added ephy-nodes-cover code (part of my bookmarks menu
        patch).

src/bookmarks/ephy-bookmarks.c
src/bookmarks/ephy-bookmark-properties.c
src/bookmarks/ephy-bookmarks-editor.c
data/ui/epiphany-bookmark-editor-ui.xml
      * Removed any reference to the bookmarks bar.

lib/widgets/ephy-node.c
src/bookmarks/ephy-topics-selector.c
      * Added code to provide markers (used in my bookmarks menu patch).



I will upload the patch and some Debian binaries in a few days. Keep in
mind that this patch isn't finished yet. There is still phase 2 to come
where a system for adding actions to the toolbar editor is created,
which will allow moving everything bookmark related into the
src/bookmarks/ directory, and then the creation of a plugin. I have some
ideas on how to do this.

Thanks again,
Peter Harvey.

Attachment: h5.patch.bz2
Description: application/bzip



[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]