[Xfce4-commits] <design:master> Save custom commands and check completion sorting.

Nick Schermer noreply at xfce.org
Mon Jun 6 19:54:02 CEST 2011


Updating branch refs/heads/master
         to 20d0ce081c6f5e83f320ac9dd22ed8215c114622 (commit)
       from a23f44210c81d1550cac59c0543a590a9db585ea (commit)

commit 20d0ce081c6f5e83f320ac9dd22ed8215c114622
Author: Nick Schermer <nick at xfce.org>
Date:   Mon Jun 6 19:53:17 2011 +0200

    Save custom commands and check completion sorting.

 .../merge-with-xfrun/demo-code/c/Makefile          |    2 +-
 .../merge-with-xfrun/demo-code/c/appfinder-model.c |   34 +++++++++++++------
 .../merge-with-xfrun/demo-code/c/appfinder-model.h |    3 +-
 .../demo-code/c/appfinder-window.c                 |   26 ++++++---------
 4 files changed, 37 insertions(+), 28 deletions(-)

diff --git a/xfce4-appfinder/merge-with-xfrun/demo-code/c/Makefile b/xfce4-appfinder/merge-with-xfrun/demo-code/c/Makefile
index fe3261a..38572a4 100644
--- a/xfce4-appfinder/merge-with-xfrun/demo-code/c/Makefile
+++ b/xfce4-appfinder/merge-with-xfrun/demo-code/c/Makefile
@@ -1,5 +1,5 @@
 
-CFLAGS= -Wall -Werror -O2 -pipe `pkg-config --libs --cflags gtk+-2.0 libxfce4util-1.0 garcon-1 gthread-2.0 libxfce4ui-1`
+CFLAGS= -Wall -Werror -g -O2 -pipe `pkg-config --libs --cflags gtk+-2.0 libxfce4util-1.0 garcon-1 gthread-2.0 libxfce4ui-1`
 DEPS = appfinder-window.h appfinder-model.h appfinder-category-model.h
 OBJ = appfinder-window.o appfinder-model.o appfinder-category-model.o main.o
 
diff --git a/xfce4-appfinder/merge-with-xfrun/demo-code/c/appfinder-model.c b/xfce4-appfinder/merge-with-xfrun/demo-code/c/appfinder-model.c
index d0fe836..ef8cf72 100644
--- a/xfce4-appfinder/merge-with-xfrun/demo-code/c/appfinder-model.c
+++ b/xfce4-appfinder/merge-with-xfrun/demo-code/c/appfinder-model.c
@@ -579,17 +579,20 @@ xfce_appfinder_model_item_compare (gconstpointer a,
   const ModelItem *item_a = a, *item_b = b;
   const gchar     *name_a, *name_b;
 
-  if (item_a->item != NULL)
-    name_a = garcon_menu_item_get_name (item_a->item);
-  else
-    name_a = item_a->command;
+  /* sort custom commands before desktop files */
+  if ((item_a->item != NULL) != (item_b->item != NULL))
+    return (item_a->item != NULL) ? 1 : -1;
 
-  if (item_b->item != NULL)
-    name_b = garcon_menu_item_get_name (item_b->item);
-  else
-    name_b = item_b->command;
+  /* sort desktop entries */
+  if (item_a->item != NULL)
+    {
+      name_a = garcon_menu_item_get_name (item_a->item);
+      name_b = garcon_menu_item_get_name (item_b->item);
+      return g_utf8_collate (name_a, name_b);
+    }
 
-  return g_utf8_collate (name_a, name_b);
+  /* sort custom commands */
+  return g_utf8_collate (item_a->command, item_b->command);
 }
 
 
@@ -1141,8 +1144,9 @@ xfce_appfinder_model_load_pixbuf (const gchar *icon_name,
 
 
 gboolean
-xfce_appfinder_model_save_commands (XfceAppfinderModel  *model,
-                                    GError             **error)
+xfce_appfinder_model_save_command (XfceAppfinderModel  *model,
+                                   const gchar         *command,
+                                   GError             **error)
 {
   GSList    *li;
   GString   *contents;
@@ -1152,6 +1156,10 @@ xfce_appfinder_model_save_commands (XfceAppfinderModel  *model,
 
   g_return_val_if_fail (XFCE_IS_APPFINDER_MODEL (model), FALSE);
 
+  if (!IS_STRING (command)
+      || g_hash_table_lookup (model->items_hash, command) != NULL)
+    return TRUE;
+
   contents = g_string_new (NULL);
 
   g_message ("saving history");
@@ -1168,6 +1176,10 @@ xfce_appfinder_model_save_commands (XfceAppfinderModel  *model,
       g_string_append_c (contents, '\n');
     }
 
+  /* add the new command */
+  g_string_append (contents, command);
+  g_string_append_c (contents, '\n');
+
   if (contents->len > 0)
     {
       filename = xfce_resource_save_location (XFCE_RESOURCE_CACHE, HISTORY_PATH, TRUE);
diff --git a/xfce4-appfinder/merge-with-xfrun/demo-code/c/appfinder-model.h b/xfce4-appfinder/merge-with-xfrun/demo-code/c/appfinder-model.h
index abf3003..259da2f 100644
--- a/xfce4-appfinder/merge-with-xfrun/demo-code/c/appfinder-model.h
+++ b/xfce4-appfinder/merge-with-xfrun/demo-code/c/appfinder-model.h
@@ -59,7 +59,8 @@ gboolean            xfce_appfinder_model_execute              (XfceAppfinderMode
 GdkPixbuf          *xfce_appfinder_model_load_pixbuf          (const gchar         *icon_name,
                                                                gint                 size) G_GNUC_MALLOC;
 
-gboolean            xfce_appfinder_model_save_commands        (XfceAppfinderModel  *model,
+gboolean            xfce_appfinder_model_save_command         (XfceAppfinderModel  *model,
+                                                               const gchar         *command,
                                                                GError             **error);
 
 GdkPixbuf          *xfce_appfinder_model_get_icon_for_command (XfceAppfinderModel  *model,
diff --git a/xfce4-appfinder/merge-with-xfrun/demo-code/c/appfinder-window.c b/xfce4-appfinder/merge-with-xfrun/demo-code/c/appfinder-window.c
index 46c1285..d11d01a 100644
--- a/xfce4-appfinder/merge-with-xfrun/demo-code/c/appfinder-window.c
+++ b/xfce4-appfinder/merge-with-xfrun/demo-code/c/appfinder-window.c
@@ -262,13 +262,13 @@ xfce_appfinder_window_init (XfceAppfinderWindow *window)
 
   renderer = gtk_cell_renderer_pixbuf_new ();
   gtk_tree_view_column_pack_start (GTK_TREE_VIEW_COLUMN (column), renderer, FALSE);
-  gtk_tree_view_column_set_attributes (GTK_TREE_VIEW_COLUMN (column), renderer, 
+  gtk_tree_view_column_set_attributes (GTK_TREE_VIEW_COLUMN (column), renderer,
                                        "pixbuf", XFCE_APPFINDER_MODEL_COLUMN_ICON_SMALL, NULL);
 
   renderer = gtk_cell_renderer_text_new ();
   g_object_set (renderer, "ellipsize", PANGO_ELLIPSIZE_END, NULL);
   gtk_tree_view_column_pack_start (GTK_TREE_VIEW_COLUMN (column), renderer, TRUE);
-  gtk_tree_view_column_set_attributes (GTK_TREE_VIEW_COLUMN (column), renderer, 
+  gtk_tree_view_column_set_attributes (GTK_TREE_VIEW_COLUMN (column), renderer,
                                        "markup", XFCE_APPFINDER_MODEL_COLUMN_ABSTRACT, NULL);
 
   window->bin_expanded = gtk_alignment_new (0.0, 0.0, 1.0, 1.0);
@@ -641,7 +641,7 @@ xfce_appfinder_window_execute (XfceAppfinderWindow *window)
   gboolean          result = FALSE;
   GdkScreen        *screen;
   const gchar      *text;
-  gchar            *cmd;
+  gchar            *cmd = NULL;
   gboolean          regular_command = FALSE;
 
   if (!gtk_widget_get_sensitive (window->button_launch))
@@ -656,7 +656,7 @@ xfce_appfinder_window_execute (XfceAppfinderWindow *window)
           gtk_tree_model_filter_convert_iter_to_child_iter (GTK_TREE_MODEL_FILTER (model), &orig, &iter);
           result = xfce_appfinder_model_execute (window->model, &orig, screen, &regular_command, &error);
 
-          if (result == FALSE && regular_command == TRUE)
+         if (!result && regular_command)
             {
               gtk_tree_model_get (model, &iter, XFCE_APPFINDER_MODEL_COLUMN_COMMAND, &cmd, -1);
               result = xfce_appfinder_window_execute_command (cmd, screen, &error);
@@ -667,7 +667,8 @@ xfce_appfinder_window_execute (XfceAppfinderWindow *window)
   else
     {
       text = gtk_entry_get_text (GTK_ENTRY (window->entry));
-      result = xfce_appfinder_window_execute_command (text, screen, &error);
+      if (xfce_appfinder_window_execute_command (text, screen, &error))
+        result = xfce_appfinder_model_save_command (window->model, text, &error);
     }
 
   gtk_entry_set_icon_from_stock (GTK_ENTRY (window->entry), GTK_ENTRY_ICON_PRIMARY,
@@ -676,18 +677,13 @@ xfce_appfinder_window_execute (XfceAppfinderWindow *window)
                                    error != NULL ? error->message : NULL);
 
   if (error != NULL)
-    g_clear_error (&error);
-
-  if (result)
     {
-      if (!xfce_appfinder_model_save_commands (window->model, &error))
-        {
-          g_warning ("Failed to save history: %s", error->message);
-          g_error_free (error);
-        }
-
-      gtk_main_quit ();
+      g_warning ("Failed to execute: %s", error->message);
+      g_error_free (error);
     }
+
+  if (result)
+    gtk_main_quit ();
 }
 
 



More information about the Xfce4-commits mailing list