[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 ]
