aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMichal Pakula vel Rutka <m.pakula@samsung.com>2012-10-10 09:17:21 +0000
committerCarsten Haitzler <raster@rasterman.com>2012-10-10 09:17:21 +0000
commit0a8bed1b668197c27eb50819bec11e08f822aa8e (patch)
treec385fea7a0e917373dda0dd416a418217c1c64b9
parentedje/edje_entry : Add more tags(preedit_sub1~4) for supporting a (diff)
downloadefl-0a8bed1b668197c27eb50819bec11e08f822aa8e.tar.gz
From: Michal Pakula vel Rutka <m.pakula@samsung.com>
Subject: [E-devel] [Patch] [Ecore] Allow to send SelectionNotify event if there is no data from XGetWindowProperty. The issue I want to fix is that elementary clipboard does not return paste callback if selection does not contain any data. Currently when ecore_x_window_prop_property_get function is called asking for AnyProperty it returns 0 if there is no data (number of items stored equals 0). This causes ecore_x_event_handle_selection _notify to exit before SelectionNotify event is added and eventually elementary paste callback is not fired. My patch removes this condition and changes behaviour of this function by allowing to add SelectionNotify event even if data returned is empty. SVN revision: 77732
-rw-r--r--legacy/ecore/AUTHORS1
-rw-r--r--legacy/ecore/ChangeLog4
-rw-r--r--legacy/ecore/NEWS1
-rw-r--r--legacy/ecore/src/lib/ecore_x/xcb/ecore_xcb_events.c10
-rw-r--r--legacy/ecore/src/lib/ecore_x/xcb/ecore_xcb_selection.c4
-rw-r--r--legacy/ecore/src/lib/ecore_x/xlib/ecore_x_events.c12
-rw-r--r--legacy/ecore/src/lib/ecore_x/xlib/ecore_x_selection.c4
7 files changed, 17 insertions, 19 deletions
diff --git a/legacy/ecore/AUTHORS b/legacy/ecore/AUTHORS
index ff9f752f4c..2de0ab8794 100644
--- a/legacy/ecore/AUTHORS
+++ b/legacy/ecore/AUTHORS
@@ -55,3 +55,4 @@ Vikram Narayanan <vikram186@gmail.com>
Seong-ho Cho (DarkCircle) <darkcircle.0426@gmail.com>
Patryk Kaczmarek <patryk.k@samsung.com>
Daniel Willmann <d.willmann@samsung.com>
+Michal Pakula vel Rutka <m.pakula@samsung.com>
diff --git a/legacy/ecore/ChangeLog b/legacy/ecore/ChangeLog
index e1db999616..3a94577a0a 100644
--- a/legacy/ecore/ChangeLog
+++ b/legacy/ecore/ChangeLog
@@ -998,3 +998,7 @@
* Wayland SHM now features a mechanism to synchronize rendering with
the compositor, removing tearing effect in animations when using that
engine.
+
+2012-10-10 Michal Pakula vel Rutka
+
+ * Fix: Send ECORE_X_EVENT_SELECTION_NOTIFY even if there is no data.
diff --git a/legacy/ecore/NEWS b/legacy/ecore/NEWS
index a34205f14f..b98676bb85 100644
--- a/legacy/ecore/NEWS
+++ b/legacy/ecore/NEWS
@@ -37,6 +37,7 @@ Fixes:
- ecore_x_randr to actually return crtcs properly.
- ecore_x_randr to actually return crtcs possible outputs properly.
- ecore_x_randr to actually return crtcs outputs properly.
+ - send ECORE_X_EVENT_SELECTION_NOTIFY even if there is no data.
Improvements:
diff --git a/legacy/ecore/src/lib/ecore_x/xcb/ecore_xcb_events.c b/legacy/ecore/src/lib/ecore_x/xcb/ecore_xcb_events.c
index 1763397a26..b9acccebf4 100644
--- a/legacy/ecore/src/lib/ecore_x/xcb/ecore_xcb_events.c
+++ b/legacy/ecore/src/lib/ecore_x/xcb/ecore_xcb_events.c
@@ -1356,13 +1356,9 @@ _ecore_xcb_event_handle_selection_notify(xcb_generic_event_t *event)
}
}
else
- {
- format =
- ecore_x_window_prop_property_get(ev->requestor, ev->property,
- XCB_GET_PROPERTY_TYPE_ANY, 8,
- &data, &num);
- if (!format) return;
- }
+ format = ecore_x_window_prop_property_get(ev->requestor, ev->property,
+ XCB_GET_PROPERTY_TYPE_ANY, 8,
+ &data, &num);
e = calloc(1, sizeof(Ecore_X_Event_Selection_Notify));
if (!e) return;
diff --git a/legacy/ecore/src/lib/ecore_x/xcb/ecore_xcb_selection.c b/legacy/ecore/src/lib/ecore_x/xcb/ecore_xcb_selection.c
index 2fe148ba5e..d7fbf05982 100644
--- a/legacy/ecore/src/lib/ecore_x/xcb/ecore_xcb_selection.c
+++ b/legacy/ecore/src/lib/ecore_x/xcb/ecore_xcb_selection.c
@@ -748,7 +748,7 @@ _ecore_xcb_selection_parser_text(const char *target __UNUSED__,
sel = calloc(1, sizeof(Ecore_X_Selection_Data_Text));
if (!sel) return NULL;
- if (_data[size - 1])
+ if (data && data[size - 1])
{
size++;
t = realloc(_data, size);
@@ -790,7 +790,7 @@ _ecore_xcb_selection_parser_files(const char *target,
ECORE_XCB_SELECTION_DATA(sel)->free = _ecore_xcb_selection_data_files_free;
- if (_data[size - 1])
+ if (data && data[size - 1])
{
size++;
t = realloc(_data, size);
diff --git a/legacy/ecore/src/lib/ecore_x/xlib/ecore_x_events.c b/legacy/ecore/src/lib/ecore_x/xlib/ecore_x_events.c
index 7d685cf83f..2e780aa19b 100644
--- a/legacy/ecore/src/lib/ecore_x/xlib/ecore_x_events.c
+++ b/legacy/ecore/src/lib/ecore_x/xlib/ecore_x_events.c
@@ -1415,14 +1415,10 @@ _ecore_x_event_handle_selection_notify(XEvent *xevent)
}
}
else
- {
- format = ecore_x_window_prop_property_get(xevent->xselection.requestor,
- xevent->xselection.property,
- AnyPropertyType, 8, &data,
- &num_ret);
- if (!format)
- return;
- }
+ format = ecore_x_window_prop_property_get(xevent->xselection.requestor,
+ xevent->xselection.property,
+ AnyPropertyType, 8, &data,
+ &num_ret);
e = calloc(1, sizeof(Ecore_X_Event_Selection_Notify));
if (!e)
diff --git a/legacy/ecore/src/lib/ecore_x/xlib/ecore_x_selection.c b/legacy/ecore/src/lib/ecore_x/xlib/ecore_x_selection.c
index e94d5a3a14..476621a289 100644
--- a/legacy/ecore/src/lib/ecore_x/xlib/ecore_x_selection.c
+++ b/legacy/ecore/src/lib/ecore_x/xlib/ecore_x_selection.c
@@ -810,7 +810,7 @@ _ecore_x_selection_parser_files(const char *target,
if (!sel) return NULL;
ECORE_X_SELECTION_DATA(sel)->free = _ecore_x_selection_data_files_free;
- if (data[size - 1])
+ if (data && data[size - 1])
{
/* Isn't nul terminated */
size++;
@@ -909,7 +909,7 @@ _ecore_x_selection_parser_text(const char *target __UNUSED__,
sel = calloc(1, sizeof(Ecore_X_Selection_Data_Text));
if (!sel) return NULL;
- if (data[size - 1])
+ if (data && data[size - 1])
{
/* Isn't nul terminated */
size++;