From 4a101290fdb546296f7bc0a9a34ba342e741895a Mon Sep 17 00:00:00 2001 From: Milan Crha Date: Fri, 21 Jun 2013 15:56:34 +0200 Subject: Calendar views inline text edit with Ctrl+C/V/X does not work The shortcuts Ctrl+C/V/X are used for whole calendar items copy/paste/cut, not for text when editing event details inline, either in a day/week view or in a list view. By tracking the is-editing property of respective cell editor and using it when enabling/disabling clipboard actions makes the respective text operations work as expected. --- e-util/e-tree.c | 36 ++++++++++++++++++++++++++++++++++++ 1 file changed, 36 insertions(+) (limited to 'e-util/e-tree.c') diff --git a/e-util/e-tree.c b/e-util/e-tree.c index 8db2009fa0..d8fb95e6d2 100644 --- a/e-util/e-tree.c +++ b/e-util/e-tree.c @@ -97,6 +97,7 @@ enum { PROP_DRAW_FOCUS, PROP_ETTA, PROP_UNIFORM_ROW_HEIGHT, + PROP_IS_EDITING, PROP_ALWAYS_SEARCH, PROP_HADJUSTMENT, PROP_VADJUSTMENT, @@ -258,6 +259,16 @@ static void context_destroyed (gpointer data, GObject *ctx); G_DEFINE_TYPE_WITH_CODE (ETree, e_tree, GTK_TYPE_TABLE, G_IMPLEMENT_INTERFACE (GTK_TYPE_SCROLLABLE, NULL)) +static void +tree_item_is_editing_changed_cb (ETableItem *item, + GParamSpec *param, + ETree *tree) +{ + g_return_if_fail (E_IS_TREE (tree)); + + g_object_notify (G_OBJECT (tree), "is-editing"); +} + static void et_disconnect_from_etta (ETree *tree) { @@ -1131,6 +1142,9 @@ et_build_item (ETree *tree) g_signal_connect ( tree->priv->item, "start_drag", G_CALLBACK (item_start_drag), tree); + g_signal_connect ( + tree->priv->item, "notify::is-editing", + G_CALLBACK (tree_item_is_editing_changed_cb), tree); } static void @@ -1888,6 +1902,10 @@ et_get_property (GObject *object, g_value_set_boolean (value, tree->priv->uniform_row_height); break; + case PROP_IS_EDITING: + g_value_set_boolean (value, e_tree_is_editing (tree)); + break; + case PROP_ALWAYS_SEARCH: g_value_set_boolean (value, tree->priv->always_search); break; @@ -3196,6 +3214,16 @@ e_tree_class_init (ETreeClass *class) FALSE, G_PARAM_READWRITE)); + g_object_class_install_property ( + object_class, + PROP_IS_EDITING, + g_param_spec_boolean ( + "is-editing", + "Whether is in an editing mode", + "Whether is in an editing mode", + FALSE, + G_PARAM_READABLE)); + g_object_class_install_property ( object_class, PROP_ALWAYS_SEARCH, @@ -3336,3 +3364,11 @@ e_tree_thaw_state_change (ETree *tree) e_tree_state_change (tree); } } + +gboolean +e_tree_is_editing (ETree *tree) +{ + g_return_val_if_fail (E_IS_TREE (tree), FALSE); + + return tree->priv->item && e_table_item_is_editing (E_TABLE_ITEM (tree->priv->item)); +} -- cgit v1.2.3