[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, ®ular_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