The eldbus_connection_unref does not mean that the connection is released.
So a signal hander of the connection should be removed if it is not used
any more.
We did not remove the signal hander but called only eldbus_connection_ref.
So there was a crash with following stack.
0 Dali::BaseSignal::Emit<Dali::Internal::Adaptor::WindowBase::AccessibilityInfo const&> (this=0x822f1b30, args#0=...) at /usr/include/dali/public-api/signals/base-signal.h:235
1 0xa4a6ca1b in Dali::Signal<void (Dali::Internal::Adaptor::WindowBase::AccessibilityInfo const&)>::Emit(Dali::Internal::Adaptor::WindowBase::AccessibilityInfo const&) (arg0=..., this=0x823b11a4) at /usr/include/dali/public-api/signals/dali-signal.h:531
2 Dali::Internal::Adaptor::WindowBaseEcoreWl2::OnEcoreElDBusAccessibilityNotification (this=0x823b1170, context=0x823b1170, message=0x820e83e0)
at /home/abuild/rpmbuild/BUILD/dali2-adaptor-2.1.19/dali/internal/window-system/tizen-wayland/ecore-wl2/window-base-ecore-wl2.cpp:1380
3 0xa4a6ca94 in Dali::Internal::Adaptor::(anonymous namespace)::EcoreElDBusAccessibilityNotification (context=0x823b1170, message=0x820e83e0)
at /home/abuild/rpmbuild/BUILD/dali2-adaptor-2.1.19/dali/internal/window-system/tizen-wayland/ecore-wl2/window-base-ecore-wl2.cpp:604
We do not use this signal on the AT-SPI world.
So this patch removing unnecessary lines instead of calling the
eldbus_signal_handler_del.
Change-Id: I1df91170ca9bff1e369080ccac8046954948714e
mSelectionDataSendSignal(),
mSelectionDataReceivedSignal(),
mStyleChangedSignal(),
- mAccessibilitySignal(),
mTransitionEffectEventSignal(),
mKeyboardRepeatSettingsChangedSignal(),
mUpdatePositionSizeSignal(),
return mStyleChangedSignal;
}
-WindowBase::AccessibilitySignalType& WindowBase::AccessibilitySignal()
-{
- return mAccessibilitySignal;
-}
-
WindowBase::TransitionEffectEventSignalType& WindowBase::TransitionEffectEventSignal()
{
return mTransitionEffectEventSignal;
// Accessibility
typedef Signal<void(StyleChange::Type)> StyleSignalType;
- typedef Signal<void(const AccessibilityInfo&)> AccessibilitySignalType;
/**
* @brief Default constructor
StyleSignalType& StyleChangedSignal();
/**
- * @brief This signal is emitted when an accessibility event is received.
- */
- AccessibilitySignalType& AccessibilitySignal();
-
- /**
* @brief This signal is emitted when window's transition animation is started or ended.
*/
TransitionEffectEventSignalType& TransitionEffectEventSignal();
SelectionSignalType mSelectionDataSendSignal;
SelectionSignalType mSelectionDataReceivedSignal;
StyleSignalType mStyleChangedSignal;
- AccessibilitySignalType mAccessibilitySignal;
TransitionEffectEventSignalType mTransitionEffectEventSignal;
KeyboardRepeatSettingsChangedSignalType mKeyboardRepeatSettingsChangedSignal;
WindowRedrawRequestSignalType mWindowRedrawRequestSignal;
}
}
-/////////////////////////////////////////////////////////////////////////////////////////////////
-// ElDBus Accessibility Callbacks
-/////////////////////////////////////////////////////////////////////////////////////////////////
-
-#ifdef DALI_ELDBUS_AVAILABLE
-// Callback for Ecore ElDBus accessibility events.
-static void EcoreElDBusAccessibilityNotification(void* context, const Eldbus_Message* message)
-{
- WindowBaseEcoreWl* windowBase = static_cast<WindowBaseEcoreWl*>(context);
- if(windowBase)
- {
- windowBase->OnEcoreElDBusAccessibilityNotification(context, message);
- }
-}
-#endif // DALI_ELDBUS_AVAILABLE
-
static void RegistryGlobalCallback(void* data, struct wl_registry* registry, uint32_t name, const char* interface, uint32_t version)
{
WindowBaseEcoreWl* windowBase = static_cast<WindowBaseEcoreWl*>(data);
mWindowRotationAngle(0),
mScreenRotationAngle(0),
mSupportedPreProtation(0)
-#ifdef DALI_ELDBUS_AVAILABLE
- ,
- mSystemConnection(NULL)
-#endif
{
Initialize(positionSize, surface, isTransparent);
}
WindowBaseEcoreWl::~WindowBaseEcoreWl()
{
-#ifdef DALI_ELDBUS_AVAILABLE
- // Close down ElDBus connections.
- if(mSystemConnection)
- {
- eldbus_connection_unref(mSystemConnection);
- }
-#endif // DALI_ELDBUS_AVAILABLE
-
vconf_ignore_key_changed(VCONFKEY_SETAPPL_ACCESSIBILITY_FONT_SIZE, VconfNotifyFontSizeChanged);
vconf_ignore_key_changed(DALI_VCONFKEY_SETAPPL_ACCESSIBILITY_FONT_NAME, VconfNotifyFontNameChanged);
vconf_notify_key_changed(DALI_VCONFKEY_SETAPPL_ACCESSIBILITY_FONT_NAME, VconfNotifyFontNameChanged, this);
vconf_notify_key_changed(VCONFKEY_SETAPPL_ACCESSIBILITY_FONT_SIZE, VconfNotifyFontSizeChanged, this);
- InitializeEcoreElDBus();
-
mDisplay = ecore_wl_display_get();
if(mDisplay)
mStyleChangedSignal.Emit(StyleChange::DEFAULT_FONT_SIZE_CHANGE);
}
-void WindowBaseEcoreWl::OnEcoreElDBusAccessibilityNotification(void* context, const Eldbus_Message* message)
-{
-#ifdef DALI_ELDBUS_AVAILABLE
- AccessibilityInfo info;
-
- // The string defines the arg-list's respective types.
- if(!eldbus_message_arguments_get(message, "iiiiiiu", &info.gestureValue, &info.startX, &info.startY, &info.endX, &info.endY, &info.state, &info.eventTime))
- {
- DALI_LOG_ERROR("OnEcoreElDBusAccessibilityNotification: Error getting arguments\n");
- }
-
- mAccessibilitySignal.Emit(info);
-#endif
-}
-
void WindowBaseEcoreWl::RegistryGlobalCallback(void* data, struct wl_registry* registry, uint32_t name, const char* interface, uint32_t version)
{
if(strcmp(interface, tizen_policy_interface.name) == 0)
ecore_wl_window_alpha_set(mEcoreWindow, transparent);
}
-void WindowBaseEcoreWl::InitializeEcoreElDBus()
-{
-#ifdef DALI_ELDBUS_AVAILABLE
- Eldbus_Object* object;
- Eldbus_Proxy* manager;
-
- if(!(mSystemConnection = eldbus_connection_get(ELDBUS_CONNECTION_TYPE_SYSTEM)))
- {
- DALI_LOG_ERROR("Unable to get system bus\n");
- }
-
- object = eldbus_object_get(mSystemConnection, BUS, PATH);
- if(!object)
- {
- DALI_LOG_ERROR("Getting object failed\n");
- return;
- }
-
- manager = eldbus_proxy_get(object, INTERFACE);
- if(!manager)
- {
- DALI_LOG_ERROR("Getting proxy failed\n");
- return;
- }
-
- if(!eldbus_proxy_signal_handler_add(manager, "GestureDetected", EcoreElDBusAccessibilityNotification, this))
- {
- DALI_LOG_ERROR("No signal handler returned\n");
- }
-#endif
-}
-
void WindowBaseEcoreWl::CreateWindow(PositionSize positionSize)
{
mEcoreWindow = ecore_wl_window_new(0, positionSize.x, positionSize.y, positionSize.width, positionSize.height, ECORE_WL_WINDOW_BUFFER_TYPE_EGL_WINDOW);
#include <tizen-extension-client-protocol.h>
#include <wayland-egl.h>
-#ifdef DALI_ELDBUS_AVAILABLE
-#include <Eldbus.h>
-#endif
-
namespace Dali
{
namespace Internal
*/
void OnFontSizeChanged();
-#ifdef DALI_ELDBUS_AVAILABLE
- /**
- * @brief Called when Ecore ElDBus accessibility event is received.
- */
- void OnEcoreElDBusAccessibilityNotification(void* context, const Eldbus_Message* message);
-#endif
-
/**
* @brief RegistryGlobalCallback
*/
void Initialize(PositionSize positionSize, Any surface, bool isTransparent);
/**
- * Initialize Ecore ElDBus
- */
- void InitializeEcoreElDBus();
-
- /**
* @brief Create window
*/
void CreateWindow(PositionSize positionSize);
int mWindowRotationAngle;
int mScreenRotationAngle;
int mSupportedPreProtation;
-#ifdef DALI_ELDBUS_AVAILABLE
- Eldbus_Connection* mSystemConnection;
-#endif // DALI_ELDBUS_AVAILABLE
};
} // namespace Adaptor
const char* DALI_VCONFKEY_SETAPPL_ACCESSIBILITY_FONT_NAME = "db/setting/accessibility/font_name"; // It will be update at vconf-key.h and replaced.
-#ifdef DALI_ELDBUS_AVAILABLE
-// DBUS accessibility
-const char* BUS = "org.enlightenment.wm-screen-reader";
-const char* INTERFACE = "org.tizen.GestureNavigation";
-const char* PATH = "/org/tizen/GestureNavigation";
-#endif // DALI_ELDBUS_AVAILABLE
-
struct KeyCodeMap
{
xkb_keysym_t keySym;
return ECORE_CALLBACK_RENEW;
}
-/////////////////////////////////////////////////////////////////////////////////////////////////
-// ElDBus Accessibility Callbacks
-/////////////////////////////////////////////////////////////////////////////////////////////////
-
-#ifdef DALI_ELDBUS_AVAILABLE
-// Callback for Ecore ElDBus accessibility events.
-static void EcoreElDBusAccessibilityNotification(void* context, const Eldbus_Message* message)
-{
- WindowBaseEcoreWl2* windowBase = static_cast<WindowBaseEcoreWl2*>(context);
- if(windowBase)
- {
- windowBase->OnEcoreElDBusAccessibilityNotification(context, message);
- }
-}
-#endif // DALI_ELDBUS_AVAILABLE
-
static void RegistryGlobalCallback(void* data, struct wl_registry* registry, uint32_t name, const char* interface, uint32_t version)
{
WindowBaseEcoreWl2* windowBase = static_cast<WindowBaseEcoreWl2*>(data);
mVisible(true),
mOwnSurface(false),
mBrightnessChangeDone(true)
-#ifdef DALI_ELDBUS_AVAILABLE
- ,
- mSystemConnection(NULL)
-#endif
{
Initialize(positionSize, surface, isTransparent);
}
WindowBaseEcoreWl2::~WindowBaseEcoreWl2()
{
-#ifdef DALI_ELDBUS_AVAILABLE
- // Close down ElDBus connections.
- if(mSystemConnection)
- {
- eldbus_connection_unref(mSystemConnection);
- }
-#endif // DALI_ELDBUS_AVAILABLE
-
vconf_ignore_key_changed(VCONFKEY_SETAPPL_ACCESSIBILITY_FONT_SIZE, VconfNotifyFontSizeChanged);
vconf_ignore_key_changed(DALI_VCONFKEY_SETAPPL_ACCESSIBILITY_FONT_NAME, VconfNotifyFontNameChanged);
vconf_notify_key_changed(DALI_VCONFKEY_SETAPPL_ACCESSIBILITY_FONT_NAME, VconfNotifyFontNameChanged, this);
vconf_notify_key_changed(VCONFKEY_SETAPPL_ACCESSIBILITY_FONT_SIZE, VconfNotifyFontSizeChanged, this);
- InitializeEcoreElDBus();
-
Ecore_Wl2_Display* display = ecore_wl2_connected_display_get(NULL);
mDisplay = ecore_wl2_display_get(display);
mStyleChangedSignal.Emit(StyleChange::DEFAULT_FONT_SIZE_CHANGE);
}
-#ifdef DALI_ELDBUS_AVAILABLE
-void WindowBaseEcoreWl2::OnEcoreElDBusAccessibilityNotification(void* context, const Eldbus_Message* message)
-{
- AccessibilityInfo info;
-
- // The string defines the arg-list's respective types.
- if(!eldbus_message_arguments_get(message, "iiiiiiu", &info.gestureValue, &info.startX, &info.startY, &info.endX, &info.endY, &info.state, &info.eventTime))
- {
- DALI_LOG_ERROR("OnEcoreElDBusAccessibilityNotification: Error getting arguments\n");
- }
-
- mAccessibilitySignal.Emit(info);
-}
-#endif // DALI_ELDBUS_AVAILABLE
-
void WindowBaseEcoreWl2::OnTransitionEffectEvent(WindowEffectState state, WindowEffectType type)
{
mTransitionEffectEventSignal.Emit(state, type);
ecore_wl2_window_alpha_set(mEcoreWindow, transparent);
}
-void WindowBaseEcoreWl2::InitializeEcoreElDBus()
-{
-#ifdef DALI_ELDBUS_AVAILABLE
- Eldbus_Object* object;
- Eldbus_Proxy* manager;
-
- if(!(mSystemConnection = eldbus_connection_get(ELDBUS_CONNECTION_TYPE_SYSTEM)))
- {
- DALI_LOG_ERROR("Unable to get system bus\n");
- }
-
- object = eldbus_object_get(mSystemConnection, BUS, PATH);
- if(!object)
- {
- DALI_LOG_ERROR("Getting object failed\n");
- return;
- }
-
- manager = eldbus_proxy_get(object, INTERFACE);
- if(!manager)
- {
- DALI_LOG_ERROR("Getting proxy failed\n");
- return;
- }
-
- if(!eldbus_proxy_signal_handler_add(manager, "GestureDetected", EcoreElDBusAccessibilityNotification, this))
- {
- DALI_LOG_ERROR("No signal handler returned\n");
- }
-#endif
-}
-
void WindowBaseEcoreWl2::CreateWindow(PositionSize positionSize)
{
Ecore_Wl2_Display* display = ecore_wl2_display_connect(NULL);
#include <wayland-egl.h>
#include <xkbcommon/xkbcommon.h>
-#ifdef DALI_ELDBUS_AVAILABLE
-#include <Eldbus.h>
-#endif
-
namespace Dali
{
namespace Internal
*/
void OnEcoreEventWindowAuxiliaryMessage(void* event);
-#ifdef DALI_ELDBUS_AVAILABLE
- /**
- * @brief Called when Ecore ElDBus accessibility event is received.
- */
- void OnEcoreElDBusAccessibilityNotification(void* context, const Eldbus_Message* message);
-#endif
-
/**
* @brief Called when a keymap is changed.
*/
void Initialize(PositionSize positionSize, Any surface, bool isTransparent);
/**
- * Initialize Ecore ElDBus
- */
- void InitializeEcoreElDBus();
-
- /**
* @brief Create window
*/
void CreateWindow(PositionSize positionSize);
bool mVisible : 1;
bool mOwnSurface;
bool mBrightnessChangeDone;
-
-#ifdef DALI_ELDBUS_AVAILABLE
- Eldbus_Connection* mSystemConnection;
-#endif // DALI_ELDBUS_AVAILABLE
};
} // namespace Adaptor