Updating branch refs/heads/master to 9ff22e379d31bac748a04a9b896a9b1e93b57a01 (commit) from 9d1777980c832796696b0d21ca7e34b13723f44e (commit)
commit 9ff22e379d31bac748a04a9b896a9b1e93b57a01 Author: Nick Schermer <n...@xfce.org> Date: Sat Aug 29 18:06:05 2009 +0200 Add reload functions to GarconMenuItem. Not entirly finished because we need a global changed signal for the menu item too, but it's a start. garcon/garcon-menu-item.c | 100 +++++++++++++++++++++++++++++++++++++++++++++ garcon/garcon-menu-item.h | 7 +++ 2 files changed, 107 insertions(+), 0 deletions(-) diff --git a/garcon/garcon-menu-item.c b/garcon/garcon-menu-item.c index a4ad9fa..5440a1a 100644 --- a/garcon/garcon-menu-item.c +++ b/garcon/garcon-menu-item.c @@ -32,6 +32,8 @@ #define GARCON_MENU_ITEM_GET_PRIVATE(obj) (G_TYPE_INSTANCE_GET_PRIVATE ((obj), GARCON_TYPE_MENU_ITEM, GarconMenuItemPrivate)) +#define GET_LOCALE_KEY(type, key) g_key_file_get_locale_##type (rc, G_KEY_FILE_DESKTOP_GROUP, key, NULL, NULL) +#define GET_KEY(type, key) g_key_file_get_##type (rc, G_KEY_FILE_DESKTOP_GROUP, key, NULL) @@ -687,6 +689,104 @@ garcon_menu_item_new_for_uri (const gchar *uri) +gboolean +garcon_menu_item_reload (GarconMenuItem *item, + GError **error) +{ + g_return_val_if_fail (GARCON_IS_MENU_ITEM (item), FALSE); + g_return_val_if_fail (error == NULL || *error == NULL, FALSE); + + return garcon_menu_item_reload_from_file (item, item->priv->file, error); +} + + + +gboolean +garcon_menu_item_reload_from_file (GarconMenuItem *item, + GFile *file, + GError **error) +{ + GKeyFile *rc; + gchar *contents; + gsize length = 0; + gboolean succeed; + gchar *string; + gboolean boolean; + + g_return_val_if_fail (GARCON_IS_MENU_ITEM (item), FALSE); + g_return_val_if_fail (G_IS_FILE (file), FALSE); + g_return_val_if_fail (error == NULL || *error == NULL, FALSE); + + /* Load the contents of the file */ + if (!g_file_load_contents (file, NULL, &contents, &length, NULL, error)) + return FALSE; + + /* Leave when the file is empty */ + if (G_UNLIKELY (length == 0)) + { + g_set_error_literal (error, 0, 0, "The desktop file if empty."); + return FALSE; + } + + /* Open the keyfile */ + rc = g_key_file_new (); + succeed = g_key_file_load_from_data (rc, contents, length, G_KEY_FILE_NONE, error); + g_free (contents); + if (G_UNLIKELY (!succeed)) + return FALSE; + + /* Queue property notifications */ + g_object_freeze_notify (G_OBJECT (item)); + + /* Update properties */ + string = GET_LOCALE_KEY (string, G_KEY_FILE_DESKTOP_KEY_NAME); + garcon_menu_item_set_name (item, string); + g_free (string); + + string = GET_KEY (string, G_KEY_FILE_DESKTOP_KEY_EXEC); + garcon_menu_item_set_command (item, string); + g_free (string); + + string = GET_LOCALE_KEY (string, G_KEY_FILE_DESKTOP_KEY_GENERIC_NAME); + garcon_menu_item_set_generic_name (item, string); + g_free (string); + + string = GET_LOCALE_KEY (string, G_KEY_FILE_DESKTOP_KEY_COMMENT); + garcon_menu_item_set_comment (item, string); + g_free (string); + + string = GET_KEY (string, G_KEY_FILE_DESKTOP_KEY_TRY_EXEC); + garcon_menu_item_set_try_exec (item, string); + g_free (string); + + string = GET_KEY (string, G_KEY_FILE_DESKTOP_KEY_ICON); + garcon_menu_item_set_icon_name (item, string); + g_free (string); + + string = GET_KEY (string, G_KEY_FILE_DESKTOP_KEY_PATH); + garcon_menu_item_set_path (item, string); + g_free (string); + + boolean = GET_KEY (boolean, G_KEY_FILE_DESKTOP_KEY_TERMINAL); + garcon_menu_item_set_requires_terminal (item, boolean); + + boolean = GET_KEY (boolean, G_KEY_FILE_DESKTOP_KEY_NO_DISPLAY); + garcon_menu_item_set_no_display (item, boolean); + + boolean = GET_KEY (boolean, G_KEY_FILE_DESKTOP_KEY_STARTUP_NOTIFY) + || GET_KEY (boolean, "X-KDE-StartupNotify"); + garcon_menu_item_set_supports_startup_notification (item, boolean); + + /* Flush property notifications */ + g_object_thaw_notify (G_OBJECT (item)); + + g_key_file_free (rc); + + return TRUE; +} + + + /** * garcon_menu_item_get_file: * diff --git a/garcon/garcon-menu-item.h b/garcon/garcon-menu-item.h index 7dec619..d305e63 100644 --- a/garcon/garcon-menu-item.h +++ b/garcon/garcon-menu-item.h @@ -49,6 +49,13 @@ GarconMenuItem *garcon_menu_item_new (GFile GarconMenuItem *garcon_menu_item_new_for_path (const gchar *filename) G_GNUC_MALLOC G_GNUC_WARN_UNUSED_RESULT; GarconMenuItem *garcon_menu_item_new_for_uri (const gchar *uri) G_GNUC_MALLOC G_GNUC_WARN_UNUSED_RESULT; +gboolean garcon_menu_item_reload (GarconMenuItem *item, + GError **error); + +gboolean garcon_menu_item_reload_from_file (GarconMenuItem *item, + GFile *file, + GError **error); + GFile *garcon_menu_item_get_file (GarconMenuItem *item); gchar *garcon_menu_item_get_uri (GarconMenuItem *item) G_GNUC_MALLOC G_GNUC_WARN_UNUSED_RESULT; _______________________________________________ Xfce4-commits mailing list Xfce4-commits@xfce.org http://foo-projects.org/mailman/listinfo/xfce4-commits