Updating branch refs/heads/nick/patch-queue to 4acb74d42f14aa2dd77467694d5840a6f0ccd858 (commit) from b27f37c639086a73ed98dfedf0a644e6bef75979 (commit)
commit 4acb74d42f14aa2dd77467694d5840a6f0ccd858 Author: Nick Schermer <n...@xfce.org> Date: Sun Dec 20 13:10:35 2009 +0100 Update patch queue. ...-refresh-of-view-after-new_files-callback.patch | 36 -- ...-Use-GIO-for-storing-the-emblems-metadata.patch | 4 +- ...icon-name-property-for-GtkAction-s-in-uca.patch | 156 ------ ...ed-function-thunar_gtk_icon_factory_inser.patch | 79 --- ...dd-startup-notification-to-the-UCA-plugin.patch | 512 -------------------- 5 files changed, 2 insertions(+), 785 deletions(-) diff --git a/0001-Force-refresh-of-view-after-new_files-callback.patch b/0001-Force-refresh-of-view-after-new_files-callback.patch deleted file mode 100644 index 6fb2914..0000000 --- a/0001-Force-refresh-of-view-after-new_files-callback.patch +++ /dev/null @@ -1,36 +0,0 @@ -From 81ddae351eef86f6499c6bd1223100b49ec4c80d Mon Sep 17 00:00:00 2001 -From: Nick Schermer <n...@xfce.org> -Date: Tue, 15 Dec 2009 12:06:02 +0100 -Subject: [PATCH] Force refresh of view after new_files callback. - -This makes the interface feel responsive when the user does -clipboard actions or creating new files/folders. - -One remaining point is pasting files. Problem with this is -that the changed signal of the clipboard manager is emitted -(because of gtk_clipboard_clear) before the new_files -closure is triggered, which invalids the closure in -thunar_standard_view_selection_changed(). - -Signed-off-by: Nick Schermer <n...@xfce.org> ---- - thunar/thunar-standard-view.c | 3 +++ - 1 files changed, 3 insertions(+), 0 deletions(-) - -diff --git a/thunar/thunar-standard-view.c b/thunar/thunar-standard-view.c -index 83139fc..b7362f9 100644 ---- a/thunar/thunar-standard-view.c -+++ b/thunar/thunar-standard-view.c -@@ -2321,6 +2321,9 @@ thunar_standard_view_new_files (ThunarStandardView *standard_view, - /* grab the focus to the view widget */ - gtk_widget_grab_focus (GTK_BIN (standard_view)->child); - } -+ -+ /* manually reload the folder to avoid a delay */ -+ thunar_standard_view_reload (THUNAR_VIEW (standard_view)); - } - } - --- -1.6.5.6 - diff --git a/0004-Use-GIO-for-storing-the-emblems-metadata.patch b/0001-Use-GIO-for-storing-the-emblems-metadata.patch similarity index 99% rename from 0004-Use-GIO-for-storing-the-emblems-metadata.patch rename to 0001-Use-GIO-for-storing-the-emblems-metadata.patch index 8cbf5c7..6d3eca0 100644 --- a/0004-Use-GIO-for-storing-the-emblems-metadata.patch +++ b/0001-Use-GIO-for-storing-the-emblems-metadata.patch @@ -1,4 +1,4 @@ -From 4330d2ea1dec9d197f338e267a8ce5763d5ed765 Mon Sep 17 00:00:00 2001 +From 6c45e614ed3484ce603de7b8a7f93a4f69e41caf Mon Sep 17 00:00:00 2001 From: Nick Schermer <n...@xfce.org> Date: Thu, 17 Dec 2009 14:39:47 +0100 Subject: [PATCH] Use GIO for storing the emblems metadata. @@ -37,7 +37,7 @@ index 18e2c9c..31f1065 100644 thunar \ docs \ diff --git a/configure.in.in b/configure.in.in -index b551100..f632ba9 100644 +index 8db5cf7..23b5236 100644 --- a/configure.in.in +++ b/configure.in.in @@ -275,8 +275,6 @@ plugins/thunar-uca/Makefile diff --git a/0002-Use-the-icon-name-property-for-GtkAction-s-in-uca.patch b/0002-Use-the-icon-name-property-for-GtkAction-s-in-uca.patch deleted file mode 100644 index 23a2df2..0000000 --- a/0002-Use-the-icon-name-property-for-GtkAction-s-in-uca.patch +++ /dev/null @@ -1,156 +0,0 @@ -From a34642baf5c0f1b5d93c0072a60dca63209eb174 Mon Sep 17 00:00:00 2001 -From: Nick Schermer <n...@xfce.org> -Date: Tue, 15 Dec 2009 12:12:19 +0100 -Subject: [PATCH] Use the icon-name property for GtkAction's in uca. - -Since GTK+ 2.10 there is an icon-name property for GtkActions. -Use this property instead of creating stock-id's. - -Signed-off-by: Nick Schermer <n...@xfce.org> ---- - plugins/thunar-uca/thunar-uca-chooser.c | 2 +- - plugins/thunar-uca/thunar-uca-model.c | 32 ------------------------------ - plugins/thunar-uca/thunar-uca-model.h | 1 - - plugins/thunar-uca/thunar-uca-provider.c | 9 ++++--- - 4 files changed, 6 insertions(+), 38 deletions(-) - -diff --git a/plugins/thunar-uca/thunar-uca-chooser.c b/plugins/thunar-uca/thunar-uca-chooser.c -index f9f40f8..f58799d 100644 ---- a/plugins/thunar-uca/thunar-uca-chooser.c -+++ b/plugins/thunar-uca/thunar-uca-chooser.c -@@ -159,7 +159,7 @@ thunar_uca_chooser_init (ThunarUcaChooser *uca_chooser) - - renderer = g_object_new (GTK_TYPE_CELL_RENDERER_PIXBUF, "stock-size", GTK_ICON_SIZE_DND, "xpad", 2, "ypad", 2, NULL); - gtk_tree_view_column_pack_start (column, renderer, FALSE); -- gtk_tree_view_column_set_attributes (column, renderer, "stock-id", THUNAR_UCA_MODEL_COLUMN_STOCK_ID, NULL); -+ gtk_tree_view_column_set_attributes (column, renderer, "icon-name", THUNAR_UCA_MODEL_COLUMN_ICON, NULL); - - renderer = gtk_cell_renderer_text_new (); - gtk_tree_view_column_pack_start (column, renderer, TRUE); -diff --git a/plugins/thunar-uca/thunar-uca-model.c b/plugins/thunar-uca/thunar-uca-model.c -index 822c8a2..fefb101 100644 ---- a/plugins/thunar-uca/thunar-uca-model.c -+++ b/plugins/thunar-uca/thunar-uca-model.c -@@ -165,7 +165,6 @@ struct _ThunarUcaModelItem - ThunarUcaTypes types; - - /* derived attributes */ -- gchar *stock_id; - gboolean multiple_selection : 1; - }; - -@@ -330,9 +329,6 @@ thunar_uca_model_get_column_type (GtkTreeModel *tree_model, - case THUNAR_UCA_MODEL_COLUMN_TYPES: - return G_TYPE_UINT; - -- case THUNAR_UCA_MODEL_COLUMN_STOCK_ID: -- return G_TYPE_STRING; -- - case THUNAR_UCA_MODEL_COLUMN_STOCK_LABEL: - return G_TYPE_STRING; - -@@ -390,8 +386,6 @@ thunar_uca_model_get_value (GtkTreeModel *tree_model, - { - ThunarUcaModelItem *item = ((GList *) iter->user_data)->data; - ThunarUcaModel *uca_model = THUNAR_UCA_MODEL (tree_model); -- GtkIconSource *icon_source; -- GtkIconSet *icon_set; - gchar *str; - - g_return_if_fail (THUNAR_UCA_IS_MODEL (uca_model)); -@@ -427,31 +421,6 @@ thunar_uca_model_get_value (GtkTreeModel *tree_model, - g_value_set_uint (value, item->types); - break; - -- case THUNAR_UCA_MODEL_COLUMN_STOCK_ID: -- if (item->stock_id == NULL && item->icon != NULL) -- { -- /* allocate a new icon set for the item */ -- icon_set = gtk_icon_set_new (); -- icon_source = gtk_icon_source_new (); -- if (g_path_is_absolute (item->icon)) -- gtk_icon_source_set_filename (icon_source, item->icon); -- else -- gtk_icon_source_set_icon_name (icon_source, item->icon); -- gtk_icon_set_add_source (icon_set, icon_source); -- gtk_icon_source_free (icon_source); -- -- /* generate a unique stock-id for the icon */ -- item->stock_id = g_strdup_printf ("thunar-uca-%p", item); -- -- /* register the icon set */ -- gtk_icon_factory_add (uca_model->icon_factory, item->stock_id, icon_set); -- -- /* cleanup */ -- gtk_icon_set_unref (icon_set); -- } -- g_value_set_static_string (value, item->stock_id); -- break; -- - case THUNAR_UCA_MODEL_COLUMN_STOCK_LABEL: - str = g_markup_printf_escaped ("<b>%s</b>\n%s", (item->name != NULL) ? item->name : "", (item->description != NULL) ? item->description : ""); - g_value_take_string (value, str); -@@ -608,7 +577,6 @@ thunar_uca_model_item_reset (ThunarUcaModelItem *item) - /* release the previous values... */ - g_strfreev (item->patterns); - g_free (item->description); -- g_free (item->stock_id); - g_free (item->command); - g_free (item->name); - g_free (item->icon); -diff --git a/plugins/thunar-uca/thunar-uca-model.h b/plugins/thunar-uca/thunar-uca-model.h -index 2d8e291..d778270 100644 ---- a/plugins/thunar-uca/thunar-uca-model.h -+++ b/plugins/thunar-uca/thunar-uca-model.h -@@ -43,7 +43,6 @@ typedef enum - THUNAR_UCA_MODEL_COLUMN_COMMAND, - THUNAR_UCA_MODEL_COLUMN_PATTERNS, - THUNAR_UCA_MODEL_COLUMN_TYPES, -- THUNAR_UCA_MODEL_COLUMN_STOCK_ID, - THUNAR_UCA_MODEL_COLUMN_STOCK_LABEL, - THUNAR_UCA_MODEL_N_COLUMNS, - } ThunarUcaModelColumn; -diff --git a/plugins/thunar-uca/thunar-uca-provider.c b/plugins/thunar-uca/thunar-uca-provider.c -index 63bae6c..3c5550a 100644 ---- a/plugins/thunar-uca/thunar-uca-provider.c -+++ b/plugins/thunar-uca/thunar-uca-provider.c -@@ -208,7 +208,7 @@ thunar_uca_provider_get_file_actions (ThunarxMenuProvider *menu_provider, - GList *actions = NULL; - GList *paths; - GList *lp; -- gchar *stock_id; -+ gchar *icon_name; - gchar *tooltip; - gchar *label; - gchar *name; -@@ -222,7 +222,7 @@ thunar_uca_provider_get_file_actions (ThunarxMenuProvider *menu_provider, - /* determine the label, tooltip and stock-id for the item */ - gtk_tree_model_get (GTK_TREE_MODEL (uca_provider->model), &iter, - THUNAR_UCA_MODEL_COLUMN_NAME, &label, -- THUNAR_UCA_MODEL_COLUMN_STOCK_ID, &stock_id, -+ THUNAR_UCA_MODEL_COLUMN_ICON, &icon_name, - THUNAR_UCA_MODEL_COLUMN_DESCRIPTION, &tooltip, - -1); - -@@ -230,7 +230,8 @@ thunar_uca_provider_get_file_actions (ThunarxMenuProvider *menu_provider, - name = g_strdup_printf ("ThunarUca::action-%d", ++uca_provider->last_action_id); - - /* create the new action with the given parameters */ -- action = gtk_action_new (name, label, tooltip, stock_id); -+ action = gtk_action_new (name, label, tooltip, NULL); -+ gtk_action_set_icon_name (action, icon_name); - - /* grab a tree row reference on the given path */ - row = gtk_tree_row_reference_new (GTK_TREE_MODEL (uca_provider->model), lp->data); -@@ -253,7 +254,7 @@ thunar_uca_provider_get_file_actions (ThunarxMenuProvider *menu_provider, - actions = g_list_prepend (actions, action); - - /* cleanup */ -- g_free (stock_id); -+ g_free (icon_name); - g_free (tooltip); - g_free (label); - g_free (name); --- -1.6.5.6 - diff --git a/0003-Remove-unused-function-thunar_gtk_icon_factory_inser.patch b/0003-Remove-unused-function-thunar_gtk_icon_factory_inser.patch deleted file mode 100644 index 702c357..0000000 --- a/0003-Remove-unused-function-thunar_gtk_icon_factory_inser.patch +++ /dev/null @@ -1,79 +0,0 @@ -From 5feeef12ab2d9bff8a7330a41d939201cd9ba021 Mon Sep 17 00:00:00 2001 -From: Nick Schermer <n...@xfce.org> -Date: Tue, 15 Dec 2009 12:19:18 +0100 -Subject: [PATCH] Remove unused function thunar_gtk_icon_factory_insert_icon(). - - -Signed-off-by: Nick Schermer <n...@xfce.org> ---- - thunar/thunar-gtk-extensions.c | 38 -------------------------------------- - thunar/thunar-gtk-extensions.h | 4 ---- - 2 files changed, 0 insertions(+), 42 deletions(-) - -diff --git a/thunar/thunar-gtk-extensions.c b/thunar/thunar-gtk-extensions.c -index 65d0439..42c8f0e 100644 ---- a/thunar/thunar-gtk-extensions.c -+++ b/thunar/thunar-gtk-extensions.c -@@ -94,44 +94,6 @@ thunar_gtk_action_group_set_action_sensitive (GtkActionGroup *action_group, - - - /** -- * thunar_gtk_icon_factory_insert_icon: -- * @icon_factory : a #GtkIconFactory. -- * @stock_id : the stock id of the icon to be inserted. -- * @icon_name : the name of the themed icon or an absolute -- * path to an icon file. -- * -- * Inserts an entry into the @icon_factory, with the specified -- * @stock_id, for the given @icon_name, which can be either an -- * icon name (of a themed icon) or an absolute path to an icon -- * file. -- **/ --void --thunar_gtk_icon_factory_insert_icon (GtkIconFactory *icon_factory, -- const gchar *stock_id, -- const gchar *icon_name) --{ -- GtkIconSource *icon_source; -- GtkIconSet *icon_set; -- -- _thunar_return_if_fail (GTK_IS_ICON_FACTORY (icon_factory)); -- _thunar_return_if_fail (icon_name != NULL); -- _thunar_return_if_fail (stock_id != NULL); -- -- icon_set = gtk_icon_set_new (); -- icon_source = gtk_icon_source_new (); -- if (G_UNLIKELY (g_path_is_absolute (icon_name))) -- gtk_icon_source_set_filename (icon_source, icon_name); -- else -- gtk_icon_source_set_icon_name (icon_source, icon_name); -- gtk_icon_set_add_source (icon_set, icon_source); -- gtk_icon_factory_add (icon_factory, stock_id, icon_set); -- gtk_icon_source_free (icon_source); -- gtk_icon_set_unref (icon_set); --} -- -- -- --/** - * thunar_gtk_label_set_a11y_relation: - * @label : a #GtkLabel. - * @widget : a #GtkWidget. -diff --git a/thunar/thunar-gtk-extensions.h b/thunar/thunar-gtk-extensions.h -index 4fe57fe..276394d 100644 ---- a/thunar/thunar-gtk-extensions.h -+++ b/thunar/thunar-gtk-extensions.h -@@ -32,10 +32,6 @@ void thunar_gtk_action_group_set_action_sensitive (GtkActionGroup *a - const gchar *action_name, - gboolean sensitive); - --void thunar_gtk_icon_factory_insert_icon (GtkIconFactory *icon_factory, -- const gchar *stock_id, -- const gchar *icon_name); -- - void thunar_gtk_label_set_a11y_relation (GtkLabel *label, - GtkWidget *widget); - --- -1.6.5.6 - diff --git a/0005-Add-startup-notification-to-the-UCA-plugin.patch b/0005-Add-startup-notification-to-the-UCA-plugin.patch deleted file mode 100644 index 4888e4c..0000000 --- a/0005-Add-startup-notification-to-the-UCA-plugin.patch +++ /dev/null @@ -1,512 +0,0 @@ -From bc54e6e5e04ba88a88a9bf02a9c52fc717566529 Mon Sep 17 00:00:00 2001 -From: Nick Schermer <n...@xfce.org> -Date: Thu, 17 Dec 2009 22:08:23 +0100 -Subject: [PATCH] Add startup notification to the UCA plugin. - -This makes the UCA plugin work properly with focus stealing. It -requires a version of libxfce4ui with the -xfce_spawn_on_screen_with_child_watch() function. - -Signed-off-by: Nick Schermer <n...@xfce.org> ---- - plugins/thunar-uca/Makefile.am | 6 ++ - plugins/thunar-uca/thunar-uca-editor.c | 22 ++++- - plugins/thunar-uca/thunar-uca-model.c | 27 +++++++ - plugins/thunar-uca/thunar-uca-model.h | 2 + - plugins/thunar-uca/thunar-uca-provider.c | 124 +++++++++++++++++------------- - 5 files changed, 122 insertions(+), 59 deletions(-) - -diff --git a/plugins/thunar-uca/Makefile.am b/plugins/thunar-uca/Makefile.am -index e9a05a4..2e37016 100644 ---- a/plugins/thunar-uca/Makefile.am -+++ b/plugins/thunar-uca/Makefile.am -@@ -33,8 +33,14 @@ thunar_uca_la_SOURCES = \ - thunar_uca_la_CFLAGS = \ - $(EXO_CFLAGS) \ - $(LIBXFCE4UTIL_CFLAGS) \ -+ $(LIBXFCE4UI_CFLAGS) \ - $(PLATFORM_CFLAGS) - -+thunar_uca_la_LIBADD = \ -+ $(EXO_LIBS) \ -+ $(LIBXFCE4UTIL_LIBS) \ -+ $(LIBXFCE4UI_LIBS) -+ - thunar_uca_la_LDFLAGS = \ - -avoid-version \ - -export-dynamic \ -diff --git a/plugins/thunar-uca/thunar-uca-editor.c b/plugins/thunar-uca/thunar-uca-editor.c -index e513fbd..00add99 100644 ---- a/plugins/thunar-uca/thunar-uca-editor.c -+++ b/plugins/thunar-uca/thunar-uca-editor.c -@@ -59,6 +59,7 @@ struct _ThunarUcaEditor - GtkWidget *description_entry; - GtkWidget *icon_button; - GtkWidget *command_entry; -+ GtkWidget *sn_button; - GtkWidget *parameter_entry; - GtkWidget *patterns_entry; - GtkWidget *directories_button; -@@ -119,7 +120,7 @@ thunar_uca_editor_init (ThunarUcaEditor *uca_editor) - Basic - */ - label = gtk_label_new (_("Basic")); -- table = gtk_table_new (6, 2, FALSE); -+ table = gtk_table_new (7, 2, FALSE); - gtk_table_set_col_spacings (GTK_TABLE (table), 12); - gtk_table_set_row_spacings (GTK_TABLE (table), 6); - gtk_container_set_border_width (GTK_CONTAINER (table), 12); -@@ -199,12 +200,19 @@ thunar_uca_editor_init (ThunarUcaEditor *uca_editor) - atk_relation_set_add (relations, relation); - g_object_unref (G_OBJECT (relation)); - -+ uca_editor->sn_button = gtk_check_button_new_with_label (_("Use Startup Notification")); -+ gtk_widget_set_tooltip_text (uca_editor->sn_button, _("Enable this option if you want a waiting cursor to be shown while the " -+ "action is launched. This is also highly recommended if you have focus " -+ "stealing prevention enabled in your window manager.")); -+ gtk_table_attach (GTK_TABLE (table), uca_editor->sn_button, 1, 2, 3, 4, GTK_EXPAND | GTK_FILL, GTK_FILL, 0, 0); -+ gtk_widget_show (uca_editor->sn_button); -+ - label = g_object_new (GTK_TYPE_LABEL, "label", _("_Icon:"), "use-underline", TRUE, "xalign", 0.0f, NULL); -- gtk_table_attach (GTK_TABLE (table), label, 0, 1, 3, 4, GTK_FILL, GTK_FILL, 0, 0); -+ gtk_table_attach (GTK_TABLE (table), label, 0, 1, 4, 5, GTK_FILL, GTK_FILL, 0, 0); - gtk_widget_show (label); - - align = gtk_alignment_new (0.0f, 0.5f, 0.0f, 0.0f); -- gtk_table_attach (GTK_TABLE (table), align, 1, 2, 3, 4, GTK_EXPAND | GTK_FILL, GTK_FILL, 0, 0); -+ gtk_table_attach (GTK_TABLE (table), align, 1, 2, 4, 5, GTK_EXPAND | GTK_FILL, GTK_FILL, 0, 0); - gtk_widget_show (align); - - uca_editor->icon_button = gtk_button_new_with_label (_("No icon")); -@@ -223,11 +231,11 @@ thunar_uca_editor_init (ThunarUcaEditor *uca_editor) - g_object_unref (G_OBJECT (relation)); - - align = g_object_new (GTK_TYPE_ALIGNMENT, "height-request", 12, NULL); -- gtk_table_attach (GTK_TABLE (table), align, 0, 2, 4, 5, GTK_EXPAND | GTK_FILL, GTK_FILL, 0, 0); -+ gtk_table_attach (GTK_TABLE (table), align, 0, 2, 5, 6, GTK_EXPAND | GTK_FILL, GTK_FILL, 0, 0); - gtk_widget_show (align); - - hbox = gtk_hbox_new (FALSE, 6); -- gtk_table_attach (GTK_TABLE (table), hbox, 0, 2, 5, 6, GTK_EXPAND | GTK_FILL, GTK_FILL, 0, 0); -+ gtk_table_attach (GTK_TABLE (table), hbox, 0, 2, 6, 7, GTK_EXPAND | GTK_FILL, GTK_FILL, 0, 0); - gtk_widget_show (hbox); - - image = gtk_image_new_from_stock (GTK_STOCK_DIALOG_INFO, GTK_ICON_SIZE_DND); -@@ -763,6 +771,7 @@ thunar_uca_editor_load (ThunarUcaEditor *uca_editor, - gchar *command; - gchar *icon; - gchar *name; -+ gboolean startup_notify; - - g_return_if_fail (THUNAR_UCA_IS_EDITOR (uca_editor)); - g_return_if_fail (THUNAR_UCA_IS_MODEL (uca_model)); -@@ -776,6 +785,7 @@ thunar_uca_editor_load (ThunarUcaEditor *uca_editor, - THUNAR_UCA_MODEL_COLUMN_TYPES, &types, - THUNAR_UCA_MODEL_COLUMN_ICON, &icon, - THUNAR_UCA_MODEL_COLUMN_NAME, &name, -+ THUNAR_UCA_MODEL_COLUMN_STARTUP_NOTIFY, &startup_notify, - -1); - - /* setup the new selection */ -@@ -789,6 +799,7 @@ thunar_uca_editor_load (ThunarUcaEditor *uca_editor, - gtk_entry_set_text (GTK_ENTRY (uca_editor->patterns_entry), (patterns != NULL) ? patterns : ""); - gtk_entry_set_text (GTK_ENTRY (uca_editor->command_entry), (command != NULL) ? command : ""); - gtk_entry_set_text (GTK_ENTRY (uca_editor->name_entry), (name != NULL) ? name : ""); -+ gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (uca_editor->sn_button), startup_notify); - - /* cleanup */ - g_free (description); -@@ -823,6 +834,7 @@ thunar_uca_editor_save (ThunarUcaEditor *uca_editor, - gtk_entry_get_text (GTK_ENTRY (uca_editor->description_entry)), - thunar_uca_editor_get_icon_name (uca_editor), - gtk_entry_get_text (GTK_ENTRY (uca_editor->command_entry)), -+ gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (uca_editor->sn_button)), - gtk_entry_get_text (GTK_ENTRY (uca_editor->patterns_entry)), - thunar_uca_editor_get_types (uca_editor)); - } -diff --git a/plugins/thunar-uca/thunar-uca-model.c b/plugins/thunar-uca/thunar-uca-model.c -index fefb101..d5cb8e4 100644 ---- a/plugins/thunar-uca/thunar-uca-model.c -+++ b/plugins/thunar-uca/thunar-uca-model.c -@@ -74,6 +74,7 @@ typedef enum - PARSER_ICON, - PARSER_NAME, - PARSER_COMMAND, -+ PARSER_STARTUP_NOTIFY, - PARSER_PATTERNS, - PARSER_DESCRIPTION, - PARSER_DIRECTORIES, -@@ -161,6 +162,7 @@ struct _ThunarUcaModelItem - gchar *description; - gchar *icon; - gchar *command; -+ guint startup_notify : 1; - gchar **patterns; - ThunarUcaTypes types; - -@@ -182,6 +184,7 @@ typedef struct - GString *command; - GString *patterns; - GString *description; -+ gboolean startup_notify; - gboolean description_use; - guint description_match; - ThunarUcaTypes types; -@@ -323,6 +326,9 @@ thunar_uca_model_get_column_type (GtkTreeModel *tree_model, - case THUNAR_UCA_MODEL_COLUMN_COMMAND: - return G_TYPE_STRING; - -+ case THUNAR_UCA_MODEL_COLUMN_STARTUP_NOTIFY: -+ return G_TYPE_BOOLEAN; -+ - case THUNAR_UCA_MODEL_COLUMN_PATTERNS: - return G_TYPE_STRING; - -@@ -412,6 +418,10 @@ thunar_uca_model_get_value (GtkTreeModel *tree_model, - g_value_set_static_string (value, item->command); - break; - -+ case THUNAR_UCA_MODEL_COLUMN_STARTUP_NOTIFY: -+ g_value_set_boolean (value, item->startup_notify); -+ break; -+ - case THUNAR_UCA_MODEL_COLUMN_PATTERNS: - str = g_strjoinv (";", item->patterns); - g_value_take_string (value, str); -@@ -549,6 +559,7 @@ thunar_uca_model_load_from_file (ThunarUcaModel *uca_model, - parser.command = g_string_new (NULL); - parser.patterns = g_string_new (NULL); - parser.description = g_string_new (NULL); -+ parser.startup_notify = FALSE; - xfce_stack_push (parser.stack, PARSER_START); - - /* parse the file */ -@@ -622,6 +633,7 @@ start_element_handler (GMarkupParseContext *context, - parser->name_match = XFCE_LOCALE_NO_MATCH; - parser->description_match = XFCE_LOCALE_NO_MATCH; - parser->types = 0; -+ parser->startup_notify = FALSE; - g_string_truncate (parser->icon, 0); - g_string_truncate (parser->name, 0); - g_string_truncate (parser->command, 0); -@@ -707,6 +719,11 @@ start_element_handler (GMarkupParseContext *context, - - xfce_stack_push (parser->stack, PARSER_DESCRIPTION); - } -+ else if (strcmp (element_name, "startup-notify") == 0) -+ { -+ parser->startup_notify = TRUE; -+ xfce_stack_push (parser->stack, PARSER_STARTUP_NOTIFY); -+ } - else if (strcmp (element_name, "directories") == 0) - { - parser->types |= THUNAR_UCA_TYPE_DIRECTORIES; -@@ -784,6 +801,7 @@ end_element_handler (GMarkupParseContext *context, - parser->description->str, - parser->icon->str, - parser->command->str, -+ parser->startup_notify, - parser->patterns->str, - parser->types); - } -@@ -816,6 +834,11 @@ end_element_handler (GMarkupParseContext *context, - goto unknown_element; - break; - -+ case PARSER_STARTUP_NOTIFY: -+ if (strcmp (element_name, "startup-notify") != 0) -+ goto unknown_element; -+ break; -+ - case PARSER_DIRECTORIES: - if (strcmp (element_name, "directories") != 0) - goto unknown_element; -@@ -1215,6 +1238,7 @@ thunar_uca_model_update (ThunarUcaModel *uca_model, - const gchar *description, - const gchar *icon, - const gchar *command, -+ gboolean startup_notify, - const gchar *patterns, - ThunarUcaTypes types) - { -@@ -1239,6 +1263,7 @@ thunar_uca_model_update (ThunarUcaModel *uca_model, - if (G_LIKELY (description != NULL && *description != '\0')) - item->description = g_strdup (description); - item->types = types; -+ item->startup_notify = startup_notify; - - /* setup the patterns */ - item->patterns = g_strsplit ((patterns != NULL && *patterns != '\0') ? patterns : "*", ";", -1); -@@ -1334,6 +1359,8 @@ thunar_uca_model_save (ThunarUcaModel *uca_model, - fprintf (fp, "%s", escaped); - g_free (patterns); - g_free (escaped); -+ if (item->startup_notify) -+ fprintf (fp, "<startup-notify/>"); - if ((item->types & THUNAR_UCA_TYPE_DIRECTORIES) != 0) - fprintf (fp, "<directories/>"); - if ((item->types & THUNAR_UCA_TYPE_AUDIO_FILES) != 0) -diff --git a/plugins/thunar-uca/thunar-uca-model.h b/plugins/thunar-uca/thunar-uca-model.h -index d778270..9bef6df 100644 ---- a/plugins/thunar-uca/thunar-uca-model.h -+++ b/plugins/thunar-uca/thunar-uca-model.h -@@ -41,6 +41,7 @@ typedef enum - THUNAR_UCA_MODEL_COLUMN_DESCRIPTION, - THUNAR_UCA_MODEL_COLUMN_ICON, - THUNAR_UCA_MODEL_COLUMN_COMMAND, -+ THUNAR_UCA_MODEL_COLUMN_STARTUP_NOTIFY, - THUNAR_UCA_MODEL_COLUMN_PATTERNS, - THUNAR_UCA_MODEL_COLUMN_TYPES, - THUNAR_UCA_MODEL_COLUMN_STOCK_LABEL, -@@ -90,6 +91,7 @@ void thunar_uca_model_update (ThunarUcaModel *uca_mod - const gchar *description, - const gchar *icon, - const gchar *command, -+ gboolean startup_notify, - const gchar *patterns, - ThunarUcaTypes types); - -diff --git a/plugins/thunar-uca/thunar-uca-provider.c b/plugins/thunar-uca/thunar-uca-provider.c -index 3c5550a..3ac481d 100644 ---- a/plugins/thunar-uca/thunar-uca-provider.c -+++ b/plugins/thunar-uca/thunar-uca-provider.c -@@ -23,9 +23,11 @@ - #include <config.h> - #endif - --#include <glib/gi18n.h> - #include <gio/gio.h> - -+#include <libxfce4util/libxfce4util.h> -+#include <libxfce4ui/libxfce4ui.h> -+ - #include <thunar-uca/thunar-uca-chooser.h> - #include <thunar-uca/thunar-uca-context.h> - #include <thunar-uca/thunar-uca-model.h> -@@ -47,10 +49,10 @@ static GList *thunar_uca_provider_get_folder_actions (ThunarxMenuProvider - ThunarxFileInfo *folder); - static void thunar_uca_provider_activated (ThunarUcaProvider *uca_provider, - GtkAction *action); --static void thunar_uca_provider_child_watch (GPid pid, -- gint status, -- gpointer user_data); --static void thunar_uca_provider_child_watch_destroy (gpointer user_data); -+static void thunar_uca_provider_child_watch (ThunarUcaProvider *uca_provider, -+ gint exit_status); -+static void thunar_uca_provider_child_watch_destroy (gpointer user_data, -+ GClosure *closure); - - - -@@ -71,7 +73,7 @@ struct _ThunarUcaProvider - * child process has terminated. - */ - gchar *child_watch_path; -- gint child_watch_id; -+ GClosure *child_watch; - }; - - -@@ -133,10 +135,6 @@ thunar_uca_provider_init (ThunarUcaProvider *uca_provider) - - /* grab a reference on the default model */ - uca_provider->model = thunar_uca_model_get_default (); -- -- /* initialize child watch support */ -- uca_provider->child_watch_path = NULL; -- uca_provider->child_watch_id = -1; - } - - -@@ -145,18 +143,9 @@ static void - thunar_uca_provider_finalize (GObject *object) - { - ThunarUcaProvider *uca_provider = THUNAR_UCA_PROVIDER (object); -- GSource *source; - - /* give up maintaince of any pending child watch */ -- if (G_UNLIKELY (uca_provider->child_watch_id >= 0)) -- { -- /* reset the callback function to g_spawn_close_pid() so the plugin can be -- * safely unloaded and the child will still not become a zombie afterwards. -- * This also resets the child_watch_id and child_watch_path properties. -- */ -- source = g_main_context_find_source_by_id (NULL, uca_provider->child_watch_id); -- g_source_set_callback (source, (GSourceFunc) g_spawn_close_pid, NULL, NULL); -- } -+ thunar_uca_provider_child_watch_destroy (uca_provider, NULL); - - /* drop our reference on the model */ - g_object_unref (G_OBJECT (uca_provider->model)); -@@ -307,7 +296,6 @@ thunar_uca_provider_activated (ThunarUcaProvider *uca_provider, - GtkWidget *dialog; - GtkWidget *window; - gboolean succeed; -- GSource *source; - GError *error = NULL; - GList *files; - gchar **argv; -@@ -316,7 +304,9 @@ thunar_uca_provider_activated (ThunarUcaProvider *uca_provider, - gchar *label; - gchar *uri; - gint argc; -- gint pid; -+ gchar *icon_name = NULL; -+ gboolean startup_notify; -+ GClosure *child_watch; - - g_return_if_fail (THUNAR_UCA_IS_PROVIDER (uca_provider)); - g_return_if_fail (GTK_IS_ACTION (action)); -@@ -340,6 +330,12 @@ thunar_uca_provider_activated (ThunarUcaProvider *uca_provider, - succeed = thunar_uca_model_parse_argv (uca_provider->model, &iter, files, &argc, &argv, &error); - if (G_LIKELY (succeed)) - { -+ /* get the icon name and whether startup notification is active */ -+ gtk_tree_model_get (GTK_TREE_MODEL (uca_provider->model), &iter, -+ THUNAR_UCA_MODEL_COLUMN_ICON, &icon_name, -+ THUNAR_UCA_MODEL_COLUMN_STARTUP_NOTIFY, &startup_notify, -+ -1); -+ - /* determine the working from the first file */ - if (G_LIKELY (files != NULL)) - { -@@ -363,36 +359,45 @@ thunar_uca_provider_activated (ThunarUcaProvider *uca_provider, - g_free (uri); - } - -+ /* build closre for child watch */ -+ child_watch = g_cclosure_new_swap (G_CALLBACK (thunar_uca_provider_child_watch), -+ uca_provider, thunar_uca_provider_child_watch_destroy); -+ g_closure_ref (child_watch); -+ g_closure_sink (child_watch); -+ - /* spawn the command on the window's screen */ -- succeed = gdk_spawn_on_screen (gtk_widget_get_screen (GTK_WIDGET (window)), working_directory, -- argv, NULL, G_SPAWN_DO_NOT_REAP_CHILD | G_SPAWN_SEARCH_PATH, -- NULL, NULL, &pid, &error); -+ succeed = xfce_spawn_on_screen_with_child_watch (gtk_widget_get_screen (GTK_WIDGET (window)), -+ working_directory, argv, NULL, -+ G_SPAWN_SEARCH_PATH, -+ startup_notify, -+ gtk_get_current_event_time (), -+ icon_name, -+ child_watch, -+ &error); - - /* check if we succeed */ - if (G_LIKELY (succeed)) - { -- /* check if we already have a child watch */ -- if (G_UNLIKELY (uca_provider->child_watch_id >= 0)) -- { -- /* reset the callback function to g_spawn_close_pid() so the plugin can be -- * safely unloaded and the child will still not become a zombie afterwards. -- */ -- source = g_main_context_find_source_by_id (NULL, uca_provider->child_watch_id); -- g_source_set_callback (source, (GSourceFunc) g_spawn_close_pid, NULL, NULL); -- } -+ /* release existing child watch */ -+ thunar_uca_provider_child_watch_destroy (uca_provider, NULL); - -- /* schedule the new child watch */ -- uca_provider->child_watch_id = g_child_watch_add_full (G_PRIORITY_LOW, pid, thunar_uca_provider_child_watch, -- uca_provider, thunar_uca_provider_child_watch_destroy); -+ /* set new closure */ -+ uca_provider->child_watch = child_watch; - - /* take over ownership of the working directory as child watch path */ - uca_provider->child_watch_path = working_directory; - working_directory = NULL; - } -+ else -+ { -+ /* spawn failed, release watch */ -+ g_closure_unref (child_watch); -+ } - - /* cleanup */ - g_free (working_directory); - g_strfreev (argv); -+ g_free (icon_name); - } - - /* present error message to the user */ -@@ -416,14 +421,14 @@ thunar_uca_provider_activated (ThunarUcaProvider *uca_provider, - - - static void --thunar_uca_provider_child_watch (GPid pid, -- gint status, -- gpointer user_data) -+thunar_uca_provider_child_watch (ThunarUcaProvider *uca_provider, -+ gint exit_status) -+ - { -- ThunarUcaProvider *uca_provider = THUNAR_UCA_PROVIDER (user_data); -- GFileMonitor *monitor; -- GError *error = NULL; -- GFile *file; -+ GFileMonitor *monitor; -+ GFile *file; -+ -+ g_return_if_fail (THUNAR_UCA_IS_PROVIDER (uca_provider)); - - GDK_THREADS_ENTER (); - -@@ -434,7 +439,7 @@ thunar_uca_provider_child_watch (GPid pid, - file = g_file_new_for_path (uca_provider->child_watch_path); - - /* schedule a changed notification on the path */ -- monitor = g_file_monitor (file, G_FILE_MONITOR_NONE, NULL, &error); -+ monitor = g_file_monitor (file, G_FILE_MONITOR_NONE, NULL, NULL); - - if (monitor != NULL) - { -@@ -446,8 +451,7 @@ thunar_uca_provider_child_watch (GPid pid, - g_object_unref (file); - } - -- /* need to cleanup */ -- g_spawn_close_pid (pid); -+ thunar_uca_provider_child_watch_destroy (uca_provider, NULL); - - GDK_THREADS_LEAVE (); - } -@@ -455,15 +459,27 @@ thunar_uca_provider_child_watch (GPid pid, - - - static void --thunar_uca_provider_child_watch_destroy (gpointer user_data) -+thunar_uca_provider_child_watch_destroy (gpointer user_data, -+ GClosure *closure) - { - ThunarUcaProvider *uca_provider = THUNAR_UCA_PROVIDER (user_data); -+ GClosure *child_watch; - -- /* reset child watch id and path */ -- g_free (uca_provider->child_watch_path); -- uca_provider->child_watch_path = NULL; -- uca_provider->child_watch_id = -1; --} -- -+ /* leave if the closure is not the one we're watching */ -+ if (uca_provider->child_watch == closure -+ || closure == NULL) -+ { -+ /* reset child watch and path */ -+ if (G_UNLIKELY (uca_provider->child_watch != NULL)) -+ { -+ child_watch = uca_provider->child_watch; -+ uca_provider->child_watch = NULL; - -+ g_closure_invalidate (child_watch); -+ g_closure_unref (child_watch); -+ } - -+ g_free (uca_provider->child_watch_path); -+ uca_provider->child_watch_path = NULL; -+ } -+} --- -1.6.5.6 - _______________________________________________ Xfce4-commits mailing list Xfce4-commits@xfce.org http://foo-projects.org/mailman/listinfo/xfce4-commits