[maemo-commits] [maemo-commits] r18848 - in projects/haf/trunk/hildon-control-panel: . src
From: subversion at stage.maemo.org subversion at stage.maemo.orgDate: Sat Jul 11 01:49:27 EEST 2009
- Previous message: [maemo-commits] r18847 - in projects/haf/trunk/hildon-control-panel: . src
- Next message: [maemo-commits] r18849 - projects/haf/trunk/ke-recv/debian
- Messages sorted by: [ date ] [ thread ] [ subject ] [ author ]
Author: paradi Date: 2009-07-11 01:49:20 +0300 (Sat, 11 Jul 2009) New Revision: 18848 Modified: projects/haf/trunk/hildon-control-panel/ChangeLog projects/haf/trunk/hildon-control-panel/src/hcp-app-list.c projects/haf/trunk/hildon-control-panel/src/hcp-app.c Log: * src/hcp-app-list.c: * src/hcp-app.c: added functionality for ordering applets Modified: projects/haf/trunk/hildon-control-panel/ChangeLog =================================================================== --- projects/haf/trunk/hildon-control-panel/ChangeLog 2009-07-10 10:08:53 UTC (rev 18847) +++ projects/haf/trunk/hildon-control-panel/ChangeLog 2009-07-10 22:49:20 UTC (rev 18848) @@ -1,3 +1,9 @@ +2009-07-10 Peter Aradi <peter.aradi at maemo.org> + + * src/hcp-app.c: + * src/hcp-app-list.c: + Added functionality for ordering applets. + 2009-07-09 Peter Aradi <peter.aradi at maemo.org> Added ellipsize to text renderer. GtkIconView cannot truncate text Modified: projects/haf/trunk/hildon-control-panel/src/hcp-app-list.c =================================================================== --- projects/haf/trunk/hildon-control-panel/src/hcp-app-list.c 2009-07-10 10:08:53 UTC (rev 18847) +++ projects/haf/trunk/hildon-control-panel/src/hcp-app-list.c 2009-07-10 22:49:20 UTC (rev 18848) @@ -72,6 +72,7 @@ * the entries in msecs */ #define HCP_DIR_READ_DELAY 500 +#define HCP_POS_REL_PATH "apporder/applets.desktop" static int callback_pending = 0; static gboolean @@ -357,7 +358,7 @@ g_type_class_add_private (g_object_class, sizeof (HCPAppListPrivate)); } - + static void hcp_app_list_read_desktop_entries (HCPAppList *al, const gchar *dir_path) { @@ -365,7 +366,9 @@ GDir *dir; GError *error = NULL; const char *filename; - GKeyFile *keyfile; + GKeyFile *keyfile, *pos_keyfile; + gchar *pos_path = NULL; + gboolean use_pos = TRUE; g_return_if_fail (al); g_return_if_fail (HCP_IS_APP_LIST (al)); @@ -384,6 +387,15 @@ keyfile = g_key_file_new (); + /* try to open keyfile with app positions */ + pos_keyfile = g_key_file_new (); + pos_path = g_strdup_printf ( "%s/"HCP_POS_REL_PATH, dir_path ); + if (!g_key_file_load_from_file (pos_keyfile, pos_path, G_KEY_FILE_NONE, NULL)) + { + g_debug ("no keyfile found or there was a problem while parsing %s", pos_path); + use_pos = FALSE; + } + while ((filename = g_dir_read_name (dir))) { GObject *app = NULL; @@ -394,11 +406,12 @@ gchar *icon = NULL; gchar *category = NULL; gchar *text_domain = NULL; + gint pos = 0; /* Only consider .desktop files */ if (!g_str_has_suffix (filename, ".desktop")) - continue; - + continue; + desktop_path = g_build_filename (dir_path, filename, NULL); g_key_file_load_from_file (keyfile, @@ -439,7 +452,8 @@ g_error_free (error); continue; } - icon = g_key_file_get_string (keyfile, + + icon = g_key_file_get_string (keyfile, HCP_DESKTOP_GROUP, HCP_DESKTOP_KEY_ICON, &error); @@ -448,7 +462,7 @@ g_error_free (error); error = NULL; } - + category = g_key_file_get_string (keyfile, HCP_DESKTOP_GROUP, HCP_DESKTOP_KEY_CATEGORY, @@ -471,26 +485,44 @@ error = NULL; } + /* try to read position from global .desktop file */ + if (use_pos && category) + { + gchar* group_title = g_ascii_strdown (category, -1); + pos = g_key_file_get_integer (pos_keyfile, + group_title, + filename, + NULL); + g_free(group_title); + } + app = hcp_app_new (); - g_object_set (G_OBJECT (app), + g_object_set (G_OBJECT (app), "name", name, "plugin", plugin, "icon", icon, NULL); if (category != NULL) - g_object_set (G_OBJECT (app), + g_object_set (G_OBJECT (app), "category", category, NULL); - + if (text_domain != NULL) { - g_object_set (G_OBJECT (app), + g_object_set (G_OBJECT (app), "text-domain", text_domain, NULL); } - + + if (pos) + { + g_object_set (G_OBJECT (app), + "suggested-pos", pos, + NULL); + } + g_hash_table_insert (priv->apps, g_strdup (plugin), app); g_free (name); @@ -501,7 +533,9 @@ } g_key_file_free (keyfile); + g_key_file_free (pos_keyfile); g_dir_close (dir); + g_free (pos_path); } static gint Modified: projects/haf/trunk/hildon-control-panel/src/hcp-app.c =================================================================== --- projects/haf/trunk/hildon-control-panel/src/hcp-app.c 2009-07-10 10:08:53 UTC (rev 18847) +++ projects/haf/trunk/hildon-control-panel/src/hcp-app.c 2009-07-10 22:49:20 UTC (rev 18848) @@ -50,6 +50,7 @@ PROP_IS_RUNNING, PROP_GRID, PROP_ITEM_POS, + PROP_SUGGESTED_POS, PROP_TEXT_DOMAIN }; @@ -62,6 +63,7 @@ gboolean is_running; GtkWidget *grid; gint item_pos; + gint sugg_pos; gchar *text_domain; void *handle; hcp_plugin_exec_f *exec; @@ -91,6 +93,7 @@ app->priv->item_pos = -1; app->priv->text_domain = NULL; app->priv->save_state = NULL; + app->priv->sugg_pos = G_MAXINT; } static void @@ -314,6 +317,10 @@ g_value_set_int (value, priv->item_pos); break; + case PROP_SUGGESTED_POS: + g_value_set_int (value, priv->sugg_pos); + break; + case PROP_TEXT_DOMAIN: g_value_set_string (value, priv->text_domain); break; @@ -370,6 +377,10 @@ priv->item_pos = g_value_get_int (value); break; + case PROP_SUGGESTED_POS: + priv->sugg_pos = g_value_get_int (value); + break; + case PROP_TEXT_DOMAIN: g_free (priv->text_domain); priv->text_domain = g_strdup (g_value_get_string (value)); @@ -450,6 +461,16 @@ (G_PARAM_READABLE | G_PARAM_WRITABLE))); g_object_class_install_property (g_object_class, + PROP_SUGGESTED_POS, + g_param_spec_int ("suggested-pos", + "Suggested item position", + "Application position defined in the .desktop file", + 0, + G_MAXINT, + G_MAXINT, + (G_PARAM_READABLE | G_PARAM_WRITABLE))); + + g_object_class_install_property (g_object_class, PROP_TEXT_DOMAIN, g_param_spec_string ("text-domain", "Text Domain", @@ -560,6 +581,10 @@ { g_return_val_if_fail (a && b, 0); - /* Sort by the translated name */ - return strcmp (_(a->priv->name), _(b->priv->name)); + /* sort by position or translated name (if position is equal) */ + gint ret = a->priv->sugg_pos != b->priv->sugg_pos ? \ + (a->priv->sugg_pos < b->priv->sugg_pos ? -1 : 1) : \ + strcmp (_(a->priv->name), _(b->priv->name)); + + return ret; }
- Previous message: [maemo-commits] r18847 - in projects/haf/trunk/hildon-control-panel: . src
- Next message: [maemo-commits] r18849 - projects/haf/trunk/ke-recv/debian
- Messages sorted by: [ date ] [ thread ] [ subject ] [ author ]