I've made two patches for the elementary entry context menu.
The first one disables the "Paste" and "Cut" hoversel items if the
selected entry is not editable (otherwise anyone could edit it by using
the context menu).
The second patch add new APIs to allow to disable the context menu at
all.
Feedback?
From 0cbef2131c3a2256b1dd4f59627b90fcb570f513 Mon Sep 17 00:00:00 2001
From: =?utf-8?q?Trevi=C3=B1o=20-=203v1n0?= <m...@3v1n0.net>
Date: Tue, 15 Sep 2009 19:33:47 +0200
Subject: [PATCH] elm_entry don't allow to paste or cut if not editable
---
src/lib/elm_entry.c | 10 ++++++++--
1 files changed, 8 insertions(+), 2 deletions(-)
diff --git a/src/lib/elm_entry.c b/src/lib/elm_entry.c
index b35b011..dc818b8 100644
--- a/src/lib/elm_entry.c
+++ b/src/lib/elm_entry.c
@@ -330,12 +330,18 @@ _long_press(void *data)
if (!wd->selmode)
{
elm_hoversel_item_add(wd->hoversel, "Select", NULL, ELM_ICON_NONE, _select, data);
- elm_hoversel_item_add(wd->hoversel, "Paste", NULL, ELM_ICON_NONE, _paste, data);
+ if (wd->editable)
+ {
+ elm_hoversel_item_add(wd->hoversel, "Paste", NULL, ELM_ICON_NONE, _paste, data);
+ }
}
else
{
elm_hoversel_item_add(wd->hoversel, "Copy", NULL, ELM_ICON_NONE, _copy, data);
- elm_hoversel_item_add(wd->hoversel, "Cut", NULL, ELM_ICON_NONE, _cut, data);
+ if (wd->editable)
+ {
+ elm_hoversel_item_add(wd->hoversel, "Cut", NULL, ELM_ICON_NONE, _cut, data);
+ }
elm_hoversel_item_add(wd->hoversel, "Cancel", NULL, ELM_ICON_NONE, _cancel, data);
}
EINA_LIST_FOREACH(wd->items, l, it)
--
1.6.0.4
From 1120924fba7f1ef4ef354adcf5b35024923024c0 Mon Sep 17 00:00:00 2001
From: =?utf-8?q?Trevi=C3=B1o=20-=203v1n0?= <m...@3v1n0.net>
Date: Tue, 15 Sep 2009 19:34:55 +0200
Subject: [PATCH] elm_entry context menu disable options
---
src/lib/Elementary.h.in | 2 ++
src/lib/elm_entry.c | 32 +++++++++++++++++++++++++++++---
2 files changed, 31 insertions(+), 3 deletions(-)
diff --git a/src/lib/Elementary.h.in b/src/lib/Elementary.h.in
index 722afab..cdd323a 100644
--- a/src/lib/Elementary.h.in
+++ b/src/lib/Elementary.h.in
@@ -458,6 +458,8 @@ extern "C" {
EAPI void elm_entry_select_all(Evas_Object *obj);
EAPI void elm_entry_context_menu_clear(Evas_Object *obj);
EAPI void elm_entry_context_menu_item_add(Evas_Object *obj, const char *label, const char *icon_file, Elm_Icon_Type icon_type, void (*func) (void *data, Evas_Object *obj, void *event_info), const void *data);
+ EAPI void elm_entry_context_menu_disabled_set(Evas_Object *obj, Eina_Bool disabled);
+ EAPI Eina_Bool elm_entry_context_menu_disabled_get(Evas_Object *obj);
EAPI char *elm_entry_markup_to_utf8(const char *s);
EAPI char *elm_entry_utf8_to_markup(const char *s);
diff --git a/src/lib/elm_entry.c b/src/lib/elm_entry.c
index dc818b8..795d165 100644
--- a/src/lib/elm_entry.c
+++ b/src/lib/elm_entry.c
@@ -27,6 +27,7 @@ struct _Widget_Data
Eina_Bool selmode : 1;
Eina_Bool deferred_cur : 1;
Eina_Bool disabled : 1;
+ Eina_Bool context_menu : 1;
};
struct _Elm_Entry_Context_Menu_Item
@@ -975,9 +976,10 @@ elm_entry_add(Evas_Object *parent)
elm_widget_disable_hook_set(obj, _disable_hook);
elm_widget_can_focus_set(obj, 1);
- wd->linewrap = EINA_TRUE;
- wd->editable = EINA_TRUE;
- wd->disabled = EINA_FALSE;
+ wd->linewrap = EINA_TRUE;
+ wd->editable = EINA_TRUE;
+ wd->disabled = EINA_FALSE;
+ wd->context_menu = EINA_TRUE;
wd->ent = edje_object_add(e);
evas_object_event_callback_add(wd->ent, EVAS_CALLBACK_MOVE, _move, obj);
@@ -1187,6 +1189,30 @@ elm_entry_context_menu_item_add(Evas_Object *obj, const char *label, const char
it->data = (void *)data;
}
+EAPI void
+elm_entry_context_menu_disabled_set(Evas_Object *obj, Eina_Bool disabled) {
+ Widget_Data *wd = elm_widget_data_get(obj);
+ if (!wd) return;
+ if (wd->context_menu == !disabled) return;
+ wd->context_menu = !disabled;
+
+ if (wd->context_menu)
+ {
+ evas_object_event_callback_add(wd->ent, EVAS_CALLBACK_MOUSE_DOWN, _mouse_down, obj);
+ evas_object_event_callback_add(wd->ent, EVAS_CALLBACK_MOUSE_UP, _mouse_up, obj);
+ } else {
+ evas_object_event_callback_del(wd->ent, EVAS_CALLBACK_MOUSE_DOWN, _mouse_down);
+ evas_object_event_callback_del(wd->ent, EVAS_CALLBACK_MOUSE_UP, _mouse_up);
+ }
+}
+
+EAPI Eina_Bool
+elm_entry_context_menu_disabled_get(Evas_Object *obj) {
+ Widget_Data *wd = elm_widget_data_get(obj);
+ if (!wd) return EINA_FALSE;
+ return !wd->context_menu;
+}
+
EAPI char *
elm_entry_markup_to_utf8(const char *s)
{
--
1.6.0.4
------------------------------------------------------------------------------
Come build with us! The BlackBerry® Developer Conference in SF, CA
is the only developer event you need to attend this year. Jumpstart your
developing skills, take BlackBerry mobile applications to market and stay
ahead of the curve. Join us from November 9-12, 2009. Register now!
http://p.sf.net/sfu/devconf
_______________________________________________
enlightenment-devel mailing list
enlightenment-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/enlightenment-devel