There are some issues in garcon (previously libxfce4menu, with API changes and GIO support) that needs some discussion, most important: file monitoring support.
Specifications: Desktop Menu, Desktop Entry.
Sources: Garcon, Alacarte.
We'd like the give the library built-in support for monitoring menu changes. This means we monitor the .menu file(s) for changes (for example made by Alacarte) and the .desktop file directories for added/removed/changed desktop files. When something changed we don't want to rebuild everything, but rather update and trigger some signals and notify properties.
Description:
Description: URI → GarconMenuItem item relation (hash table).
Maybe a signal when a item is added or removed to the pool, but I doubt this is very useful.
Description: Desktop-ID → GarconMenuItem item relation (hash table).
Maybe a signal when a item is added or removed to the pool, but I doubt this is very useful.
Description: The desktop file.
We're not going to implement file monitoring on this level. However there will be some new API to reload a desktop entry (possibly from a new location) and the possibility to watch changes (signal, property notifications).
GarconMenuItem::changed (VOID:VOID)
Always triggered then the item is reloaded.
void garcon_menu_item_reload (void)
Reload the menu item from the same GFile. This will notify the changed properties and trigger the 'changed' signal.
void garcon_menu_item_reload_from_file (GFile *file)
Will do the same as garcon_menu_item_reload()
but from another location, useful when a user changed a desktop file in a read-only location and the menu editor moved the file to ~/.local/share/applications/
.
Description:
This is where we will do all the monitoring work. We will setup monitors for the menu file itself, as well for the merged files and the desktop entry directories. The object will probably get some signals when an item is added/removed/moved, but we need to do this in such a way it is efficient to update menu or tree implementations.
g_list_foreach (list, (GFunc) g_object_unref, NULL);
or unref in their own loop. This is not a bad thing tho, because of the file monitoring it could be that the menu implementation releases an item (because the .desktop file was destroyed), so apps _should_ have their own references.#define garcon_free_list(l) G_STMT_START { g_list_foreach ((l), (GFunc) g_object_unref, NULL); g_list_free (l); } G_STMT_END
garcon_init()
and garcon_shutdown()
. Still needs some thoughts, but it would be nice if we can simplify this as much as possibleGarconMenuSeparator
and GarconMenuItemCache
as a singletong_thread_init()
. This should be possible if we use GStaticMutex
instead of GMutex
garcon_set_environment()
, this will 'leak' once if they don't call garcon_set_environment (NULL)
, but I don't think we really careg_type_init()
yet. Probably not needed 99% of the time, so I think if we mention this in the API docs we're pretty much safeGarconMenuDirectory
g_strv_length()
calls in loops