[evolution/wip/webkit-composer: 14/262] Change Copy/Cut/Paste sensitivity according to selection
- From: Tomas Popela <tpopela src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [evolution/wip/webkit-composer: 14/262] Change Copy/Cut/Paste sensitivity according to selection
- Date: Thu, 16 Jan 2014 09:49:03 +0000 (UTC)
commit 23876f7c05a9d64940a0ad8cb28e90496e303203
Author: Dan Vrátil <dvratil redhat com>
Date: Mon Jul 30 19:35:44 2012 +0200
Change Copy/Cut/Paste sensitivity according to selection
Automatically control sensitivity of the Copy, Cut and Paste actions
depending on focus and selection in the EEditorWidget.
e-util/e-editor-actions.c | 14 +++++++-
e-util/e-editor-actions.h | 2 +
e-util/e-editor-widget.c | 79 +++++++++++++++++++++++++++++++++++++++++++++
3 files changed, 94 insertions(+), 1 deletions(-)
---
diff --git a/e-util/e-editor-actions.c b/e-util/e-editor-actions.c
index 5aef1a9..a492953 100644
--- a/e-util/e-editor-actions.c
+++ b/e-util/e-editor-actions.c
@@ -2445,5 +2445,17 @@ editor_actions_init (EEditor *editor)
editor_widget, "can-undo",
ACTION (UNDO), "sensitive",
G_BINDING_SYNC_CREATE);
+ g_object_bind_property (
+ editor_widget, "can-copy",
+ ACTION (COPY), "sensitive",
+ G_BINDING_SYNC_CREATE);
+ g_object_bind_property (
+ editor_widget, "can-cut",
+ ACTION (CUT), "sensitive",
+ G_BINDING_SYNC_CREATE);
+ g_object_bind_property (
+ editor_widget, "can-paste",
+ ACTION (PASTE), "sensitive",
+ G_BINDING_SYNC_CREATE);
+
}
-
diff --git a/e-util/e-editor-actions.h b/e-util/e-editor-actions.h
index 52b8199..488451b 100644
--- a/e-util/e-editor-actions.h
+++ b/e-util/e-editor-actions.h
@@ -112,6 +112,8 @@
E_EDITOR_ACTION ((editor), "mode-plain")
#define E_EDITOR_ACTION_MONOSPACED(editor) \
E_EDITOR_ACTION ((editor), "monospaced")
+#define E_EDITOR_ACTION_PASTE(editor) \
+ E_EDITOR_ACTION ((editor), "paste")
#define E_EDITOR_ACTION_PROPERTIES_RULE(editor) \
E_EDITOR_ACTION ((editor), "properties-rule")
#define E_EDITOR_ACTION_PROPERTIES_TABLE(editor) \
diff --git a/e-util/e-editor-widget.c b/e-util/e-editor-widget.c
index b88ef8d..7930595 100644
--- a/e-util/e-editor-widget.c
+++ b/e-util/e-editor-widget.c
@@ -30,6 +30,9 @@ struct _EEditorWidgetPrivate {
gint inline_spelling : 1;
gint magic_links : 1;
gint magic_smileys : 1;
+ gint can_copy : 1;
+ gint can_cut : 1;
+ gint can_paste : 1;
gint can_redo : 1;
gint can_undo : 1;
@@ -51,6 +54,9 @@ enum {
PROP_MAGIC_LINKS,
PROP_MAGIC_SMILEYS,
PROP_SPELL_LANGUAGES,
+ PROP_CAN_COPY,
+ PROP_CAN_CUT,
+ PROP_CAN_PASTE,
PROP_CAN_REDO,
PROP_CAN_UNDO
};
@@ -61,6 +67,7 @@ editor_widget_user_changed_contents_cb (EEditorWidget *widget,
gpointer user_data)
{
gboolean can_redo, can_undo;
+
e_editor_widget_set_changed (widget, TRUE);
can_redo = webkit_web_view_can_redo (WEBKIT_WEB_VIEW (widget));
@@ -77,6 +84,31 @@ editor_widget_user_changed_contents_cb (EEditorWidget *widget,
}
static void
+editor_widget_selection_changed_cb (EEditorWidget *widget,
+ gpointer user_data)
+{
+ gboolean can_copy, can_cut, can_paste;
+
+ can_copy = webkit_web_view_can_copy_clipboard (WEBKIT_WEB_VIEW (widget));
+ if ((widget->priv->can_copy ? TRUE : FALSE) != (can_copy ? TRUE : FALSE)) {
+ widget->priv->can_copy = can_copy;
+ g_object_notify (G_OBJECT (widget), "can-copy");
+ }
+
+ can_cut = webkit_web_view_can_cut_clipboard (WEBKIT_WEB_VIEW (widget));
+ if ((widget->priv->can_cut ? TRUE : FALSE) != (can_cut ? TRUE : FALSE)) {
+ widget->priv->can_cut = can_cut;
+ g_object_notify (G_OBJECT (widget), "can-cut");
+ }
+
+ can_paste = webkit_web_view_can_paste_clipboard (WEBKIT_WEB_VIEW (widget));
+ if ((widget->priv->can_paste ? TRUE : FALSE) != (can_paste ? TRUE : FALSE)) {
+ widget->priv->can_paste = can_paste;
+ g_object_notify (G_OBJECT (widget), "can-paste");
+ }
+}
+
+static void
e_editor_widget_get_property (GObject *object,
guint property_id,
GValue *value,
@@ -112,6 +144,21 @@ e_editor_widget_get_property (GObject *object,
value, e_editor_widget_get_changed (
E_EDITOR_WIDGET (object)));
return;
+ case PROP_CAN_COPY:
+ g_value_set_boolean (
+ value, webkit_web_view_can_copy_clipboard (
+ WEBKIT_WEB_VIEW (object)));
+ return;
+ case PROP_CAN_CUT:
+ g_value_set_boolean (
+ value, webkit_web_view_can_cut_clipboard (
+ WEBKIT_WEB_VIEW (object)));
+ return;
+ case PROP_CAN_PASTE:
+ g_value_set_boolean (
+ value, webkit_web_view_can_paste_clipboard (
+ WEBKIT_WEB_VIEW (object)));
+ return;
case PROP_CAN_REDO:
g_value_set_boolean (
value, webkit_web_view_can_redo (
@@ -241,6 +288,36 @@ e_editor_widget_class_init (EEditorWidgetClass *klass)
g_object_class_install_property (
object_class,
+ PROP_CAN_COPY,
+ g_param_spec_boolean (
+ "can-copy",
+ "Can Copy",
+ NULL,
+ FALSE,
+ G_PARAM_READABLE));
+
+ g_object_class_install_property (
+ object_class,
+ PROP_CAN_CUT,
+ g_param_spec_boolean (
+ "can-cut",
+ "Can Cut",
+ NULL,
+ FALSE,
+ G_PARAM_READABLE));
+
+ g_object_class_install_property (
+ object_class,
+ PROP_CAN_PASTE,
+ g_param_spec_boolean (
+ "can-paste",
+ "Can Paste",
+ NULL,
+ FALSE,
+ G_PARAM_READABLE));
+
+ g_object_class_install_property (
+ object_class,
PROP_CAN_REDO,
g_param_spec_boolean (
"can-redo",
@@ -299,6 +376,8 @@ e_editor_widget_init (EEditorWidget *editor)
g_signal_connect (editor, "user-changed-contents",
G_CALLBACK (editor_widget_user_changed_contents_cb), NULL);
+ g_signal_connect (editor, "selection-changed",
+ G_CALLBACK (editor_widget_selection_changed_cb), NULL);
}
EEditorWidget *
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]