[maemo-commits] [maemo-commits] r18848 - in projects/haf/trunk/hildon-control-panel: . src

From: subversion at stage.maemo.org subversion at stage.maemo.org
Date: Sat Jul 11 01:49:27 EEST 2009
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;
 }

More information about the maemo-commits mailing list