[3.0] Add key grab/ungrab API for Tizen (X11/Wayland) accepted/tizen/mobile/20150808.024823 accepted/tizen/tv/20150808.025727 accepted/tizen/wearable/20150808.030123 submit/tizen/20150807.101753
authorYoonsang Lee <ysang114.lee@samsung.com>
Mon, 27 Apr 2015 10:33:06 +0000 (19:33 +0900)
committerYoonsang Lee <ysang114.lee@samsung.com>
Fri, 7 Aug 2015 10:12:14 +0000 (19:12 +0900)
- Key grab feature is designed for following example scenarios:
  - TV : A user might want to change the volume or channel of the background TV contents while focusing on the foregrund app.
  - Mobile : When a user presses Home key, the homescreen appears regardless of current foreground app.
  - Mobile : Using volume up/down as zoom up/down in camera apps.

- Add --enable-profile option to build.sh of automated-tests
  - Key grab feature is available only in Tizen. It's UTCs should not be compiled in Ubuntu.
  - Desktop dali-adaptor automated-tests should be built with --enable-profile=UBUNTU similar to desktop dali-adaptor.

Change-Id: I04c97f90c2b09ecae3e9a41024095ee7aaddeb0f

13 files changed:
adaptors/tizen/file.list
adaptors/tizen/key-grab.h [new file with mode: 0644]
adaptors/wayland/file.list
adaptors/wayland/key-grab-wl.cpp [new file with mode: 0644]
adaptors/wayland/window-impl-wl.cpp
adaptors/x11/file.list
adaptors/x11/key-grab-x.cpp [new file with mode: 0644]
automated-tests/build.sh
automated-tests/src/CMakeLists.txt
automated-tests/src/dali-adaptor/CMakeLists.txt
automated-tests/src/dali-adaptor/utc-Dali-KeyGrab.cpp [new file with mode: 0644]
build/tizen/adaptor/Makefile.am
build/tizen/configure.ac

index 0525f6d..04aa224 100644 (file)
@@ -7,3 +7,6 @@ adaptor_tizen_internal_src_files = \
   $(adaptor_tizen_dir)/vsync-monitor-tizen.cpp \
   $(adaptor_tizen_dir)/tilt-sensor-impl-tizen.cpp \
   $(adaptor_tizen_dir)/tts-player-impl-tizen.cpp
+
+public_api_adaptor_tizen_header_files = \
+  $(adaptor_tizen_dir)/key-grab.h
diff --git a/adaptors/tizen/key-grab.h b/adaptors/tizen/key-grab.h
new file mode 100644 (file)
index 0000000..3fe847e
--- /dev/null
@@ -0,0 +1,98 @@
+#ifndef __DALI_KEY_GRAB_H__
+#define __DALI_KEY_GRAB_H__
+
+/*
+ * Copyright (c) 2014 Samsung Electronics Co., Ltd.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ */
+
+// INTERNAL INCLUDES
+#include <dali/public-api/common/dali-common.h>
+#include "key.h"
+
+namespace Dali
+{
+class Window;
+
+namespace KeyGrab
+{
+
+/**
+ * @brief Grabs the key specfied by @a key for @a window only when @a window is the topmost window.
+ *
+ * This function can be used for following example scenarios:
+ * Mobile - Using volume up/down as zoom up/down in camera apps.
+ *
+ * @note This function is only specified by Tizen.
+ * @param[in] window The window to set
+ * @param[in] dailKey The key code to grab (defined in key.h)
+ * @return true if the grab succeed.
+ */
+DALI_IMPORT_API bool GrabKeyTopmost( Window window, Dali::KEY daliKey );
+
+/**
+ * @brief Ungrabs the key specfied by @a key for @a window.
+ *
+ * @note This function is only specified by Tizen.
+ * @param[in] window The window to set
+ * @param[in] dailKey The key code to ungrab (defined in key.h)
+ * @return true if the ungrab succeed.
+ */
+DALI_IMPORT_API bool UngrabKeyTopmost( Window window, Dali::KEY daliKey );
+
+/**
+ * @brief Key grab mode for platform-level APIs.
+ */
+enum KeyGrabMode
+{
+  TOPMOST = 0,             ///< Grab a key only when on the top of the grabbing-window stack mode.
+  SHARED,                  ///< Grab a key together with the other client window(s) mode.
+  OVERRIDE_EXCLUSIVE,      ///< Grab a key exclusively regardless of the grabbing-window's position on the window stack with the possibility of overriding the grab by the other client window mode.
+  EXCLUSIVE                ///< Grab a key exclusively regardless of the grabbing-window's position on the window stack mode.
+};
+
+/**
+ * @brief Grabs the key specfied by @a key for @a window in @a grabMode.
+ *
+ * This function can be used for following example scenarios:
+ * TV - A user might want to change the volume or channel of the background TV contents while focusing on the foregrund app.
+ * Mobile - When a user presses Home key, the homescreen appears regardless of current foreground app.
+ * Mobile - Using volume up/down as zoom up/down in camera apps.
+ *
+ * @privlevel platform
+ * @note This function is only specified by Tizen.
+ * @param[in] window The window to set
+ * @param[in] dailKey The key code to grab (defined in key.h)
+ * @param[in] grabMode The grab mode for the key
+ * @return true if the grab succeed.
+ */
+DALI_IMPORT_API bool GrabKey( Window window, Dali::KEY daliKey, KeyGrabMode grabMode );
+
+/**
+ * @brief Ungrabs the key specfied by @a key for @a window.
+ *
+ * @privlevel platform
+ * @note This function is only specified by Tizen.
+ * @param[in] window The window to set
+ * @param[in] dailKey The key code to ungrab (defined in key.h)
+ * @return true if the ungrab succeed.
+ */
+DALI_IMPORT_API bool UngrabKey( Window window, Dali::KEY daliKey );
+
+} // namespace KeyGrab
+
+} // namespace Dali
+
+#endif // __DALI_KEY_GRAB_H__
index d74e99e..c0c6bfe 100644 (file)
@@ -15,7 +15,8 @@ adaptor_wayland_tizen_internal_src_files = \
   $(adaptor_wayland_dir)/pixmap-render-surface-wl.cpp \
   $(adaptor_wayland_dir)/ecore-wl-render-surface.cpp \
   $(adaptor_wayland_dir)/window-render-surface-wl.cpp \
-  $(adaptor_wayland_dir)/key-mapping-wl.cpp
+  $(adaptor_wayland_dir)/key-mapping-wl.cpp \
+  $(adaptor_wayland_dir)/key-grab-wl.cpp
 
 adaptor_wayland_tizen_common_internal_default_profile_src_files = \
   $(adaptor_wayland_dir)/ecore-wl-render-surface-factory.cpp \
diff --git a/adaptors/wayland/key-grab-wl.cpp b/adaptors/wayland/key-grab-wl.cpp
new file mode 100644 (file)
index 0000000..b5f41fd
--- /dev/null
@@ -0,0 +1,88 @@
+/*
+ * Copyright (c) 2014 Samsung Electronics Co., Ltd.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ */
+
+// CLASS HEADER
+#include <key-grab.h>
+
+// EXTERNAL INCLUDES
+#include <Ecore_Wayland.h>
+#include <dali/integration-api/debug.h>
+
+// INTERNAL INCLUDES
+#include <window.h>
+#include <key-impl.h>
+
+#include <iostream>
+using namespace std;
+
+namespace Dali
+{
+
+namespace KeyGrab
+{
+
+bool GrabKeyTopmost( Window window, Dali::KEY daliKey )
+{
+  return GrabKey( window, daliKey, TOPMOST);
+}
+
+bool UngrabKeyTopmost( Window window, Dali::KEY daliKey )
+{
+  return UngrabKey( window, daliKey );
+}
+
+bool GrabKey( Window window, Dali::KEY daliKey, KeyGrabMode grabMode )
+{
+  Ecore_Wl_Window_Keygrab_Mode wlGrabMode;
+  if( grabMode == TOPMOST )
+  {
+    wlGrabMode = ECORE_WL_WINDOW_KEYGRAB_TOPMOST;
+  }
+  else if( grabMode == SHARED )
+  {
+    wlGrabMode = ECORE_WL_WINDOW_KEYGRAB_SHARED;
+  }
+  else if( grabMode == OVERRIDE_EXCLUSIVE )
+  {
+    wlGrabMode = ECORE_WL_WINDOW_KEYGRAB_EXCLUSIVE;
+  }
+  else if( grabMode == EXCLUSIVE )
+  {
+    wlGrabMode = ECORE_WL_WINDOW_KEYGRAB_OVERRIDE_EXCLUSIVE;
+  }
+  else
+  {
+    return false;
+  }
+
+  return ecore_wl_window_keygrab_set( AnyCast<Ecore_Wl_Window*>( window.GetNativeHandle() ),
+                                      Dali::Internal::Adaptor::KeyLookup::GetKeyName( daliKey ),
+                                      0, 0, 0, wlGrabMode );
+}
+
+bool UngrabKey( Window window, Dali::KEY daliKey )
+{
+  return ecore_wl_window_keygrab_unset( AnyCast<Ecore_Wl_Window*>( window.GetNativeHandle() ),
+                                      Dali::Internal::Adaptor::KeyLookup::GetKeyName( daliKey ),
+                                      0, 0 );
+}
+
+} // namespace KeyGrab
+
+} // namespace Dali
+
+
index 0d7cadc..5633d64 100644 (file)
@@ -67,6 +67,13 @@ struct Window::EventHandler
     mClientMessagehandler( NULL ),
     mEcoreWindow( 0 )
   {
+    // store ecore window handle
+    ECore::WindowRenderSurface* wlWindow( dynamic_cast< ECore::WindowRenderSurface * >( mWindow->mSurface ) );
+    if( wlWindow )
+    {
+      mEcoreWindow = wlWindow->GetWlWindow();
+    }
+    DALI_ASSERT_ALWAYS( mEcoreWindow != 0 && "There is no ecore wl window");
   }
 
   /**
index 0e4468e..e074050 100644 (file)
@@ -24,7 +24,8 @@ adaptor_x11_tizen_internal_src_files = \
   $(adaptor_x11_dir)/accessibility-manager-impl-x.cpp \
   $(adaptor_x11_dir)/framework-x.cpp \
   $(adaptor_x11_dir)/key-mapping-x.cpp \
-  $(adaptor_x11_dir)/window-extensions.cpp
+  $(adaptor_x11_dir)/window-extensions.cpp \
+  $(adaptor_x11_dir)/key-grab-x.cpp
 
 adaptor_x11_tv_internal_src_files = \
   $(_adaptor_x11_internal_src_files) \
diff --git a/adaptors/x11/key-grab-x.cpp b/adaptors/x11/key-grab-x.cpp
new file mode 100644 (file)
index 0000000..be0cfd9
--- /dev/null
@@ -0,0 +1,89 @@
+/*
+ * Copyright (c) 2014 Samsung Electronics Co., Ltd.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ */
+
+// CLASS HEADER
+#include <key-grab.h>
+
+// EXTERNAL INCLUDES
+#include <Ecore.h>
+#include <Ecore_X.h>
+#include <utilX.h>
+
+// INTERNAL INCLUDES
+#include <window.h>
+#include <key-impl.h>
+#include <ecore-x-types.h>
+
+namespace Dali
+{
+
+namespace KeyGrab
+{
+
+bool GrabKeyTopmost( Window window, Dali::KEY daliKey )
+{
+  return GrabKey( window, daliKey, TOPMOST);
+}
+
+bool UngrabKeyTopmost( Window window, Dali::KEY daliKey )
+{
+  return UngrabKey( window, daliKey );
+}
+
+bool GrabKey( Window window, Dali::KEY daliKey, KeyGrabMode grabMode )
+{
+  int xGrabMode;
+  if( grabMode == TOPMOST )
+  {
+    xGrabMode = TOP_POSITION_GRAB;
+  }
+  else if( grabMode == SHARED )
+  {
+    xGrabMode = SHARED_GRAB;
+  }
+  else if( grabMode == OVERRIDE_EXCLUSIVE )
+  {
+    xGrabMode = OR_EXCLUSIVE_GRAB;
+  }
+  else if( grabMode == EXCLUSIVE )
+  {
+    xGrabMode = EXCLUSIVE_GRAB;
+  }
+  else
+  {
+    return false;
+  }
+
+  int ret = utilx_grab_key ( static_cast<Display*>( ecore_x_display_get() ),
+                             static_cast<XWindow>( AnyCast<Ecore_X_Window>( window.GetNativeHandle() ) ),
+                             Dali::Internal::Adaptor::KeyLookup::GetKeyName( daliKey ), xGrabMode );
+  return ret==0;
+}
+
+bool UngrabKey( Window window, Dali::KEY daliKey )
+{
+  int ret = utilx_ungrab_key ( static_cast<Display*>( ecore_x_display_get() ),
+                               static_cast<XWindow>( AnyCast<Ecore_X_Window>( window.GetNativeHandle() ) ),
+                               Dali::Internal::Adaptor::KeyLookup::GetKeyName( daliKey ) );
+  return ret==0;
+}
+
+} // namespace KeyGrab
+
+} // namespace Dali
+
+
index 7c7584b..becb278 100755 (executable)
@@ -1,7 +1,7 @@
 #!/bin/bash
 
 
-TEMP=`getopt -o rn --long rebuild,no-gen \
+TEMP=`getopt -o rn --long rebuild,no-gen,enable-profile: \
      -n 'genmake' -- "$@"`
 
 if [ $? != 0 ] ; then echo "Terminating..." >&2 ; exit 1 ; fi
@@ -11,11 +11,13 @@ eval set -- "$TEMP"
 
 opt_rebuild=false
 opt_generate=true
+enable_profile=""
 
 while true ; do
     case "$1" in
         -r|--rebuild) opt_rebuild=true ; shift ;;
         -n|--no-gen)  opt_generate=false ; shift ;;
+        --enable-profile) enable_profile=$2 ; shift ;;
         --) shift ; break ;;
         *) shift ;;   # Ignore
     esac
@@ -32,7 +34,7 @@ function build
         (cd src/$1; ../../scripts/tcheadgen.sh tct-$1-core.h)
         if [ $? -ne 0 ]; then echo "Aborting..."; exit 1; fi
     fi
-    (cd build ; cmake .. -DMODULE=$1 ; make -j7 )
+    (cd build ; cmake .. -DMODULE=$1 -DENABLE_PROFILE=$enable_profile; make -j7 )
 }
 
 if [ -n "$1" ] ; then
index e4f0a2b..b2ed538 100644 (file)
@@ -1,3 +1,6 @@
+include(CMakeDependentOption)
+CMAKE_DEPENDENT_OPTION(UBUNTU_PROFILE "Ubuntu Profile" ON "ENABLE_PROFILE STREQUAL UBUNTU" OFF)
+
 IF( DEFINED MODULE )
     MESSAGE(STATUS "Building: ${CMAKE_CURRENT_SOURCE_DIR}/${MODULE}")
     ADD_SUBDIRECTORY(${MODULE})
index fe4968d..7ff48a9 100644 (file)
@@ -14,6 +14,12 @@ SET(TC_SOURCES
     utc-Dali-Application.cpp
 )
 
+if(NOT UBUNTU_PROFILE)
+LIST(APPEND TC_SOURCES
+    utc-Dali-KeyGrab.cpp
+)
+endif()
+
 LIST(APPEND TC_SOURCES
     dali-test-suite-utils/test-harness.cpp
     dali-test-suite-utils/dali-test-suite-utils.cpp
diff --git a/automated-tests/src/dali-adaptor/utc-Dali-KeyGrab.cpp b/automated-tests/src/dali-adaptor/utc-Dali-KeyGrab.cpp
new file mode 100644 (file)
index 0000000..d1a1d4e
--- /dev/null
@@ -0,0 +1,222 @@
+/*
+ * Copyright (c) 2014 Samsung Electronics Co., Ltd.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ */
+
+// EXTERNAL INCLUDES
+#include <map>
+#include <string.h>
+#include <iostream>
+
+// CLASS HEADER
+#include <stdlib.h>
+#include <iostream>
+#include <dali.h>
+#include <dali-test-suite-utils.h>
+#include <dali/public-api/adaptor-framework/key-grab.h>
+
+extern int gArgc;
+extern char ** gArgv;
+
+using namespace Dali;
+
+void utc_dali_adaptor_keygrab_startup(void)
+{
+  test_return_value = TET_UNDEF;
+}
+
+void utc_dali_adaptor_keygrab_cleanup(void)
+{
+  test_return_value = TET_PASS;
+}
+
+// Copied from key-impl.h
+struct KeyLookup
+{
+  const char* keyName;      ///< X string representation
+  const KEY   daliKeyCode;  ///< Dali Enum Representation
+  const bool  deviceButton; ///< Whether the key is from a button on the device
+};
+
+KeyLookup TestKeyLookupTable[]=
+{
+  { "XF86Camera",            DALI_KEY_CAMERA,          false },
+  { "XF86Camera_Full",       DALI_KEY_CONFIG,          false },
+  { "XF86PowerOff",          DALI_KEY_POWER,           true  },
+  { "Cancel",                DALI_KEY_CANCEL,          false },
+  { "XF86AudioStop",         DALI_KEY_STOP_CD,         false },
+  { "XF86AudioPause",        DALI_KEY_PAUSE_CD,        false },
+  { "XF86AudioNext",         DALI_KEY_NEXT_SONG,       false },
+  { "XF86AudioPrev",         DALI_KEY_PREVIOUS_SONG,   false },
+  { "XF86AudioRewind",       DALI_KEY_REWIND,          false },
+  { "XF86AudioForward",      DALI_KEY_FASTFORWARD,     false },
+  { "XF86AudioMedia",        DALI_KEY_MEDIA,           false },
+  { "XF86AudioPlayPause",    DALI_KEY_PLAY_PAUSE,      false },
+  { "XF86AudioMute",         DALI_KEY_MUTE,            false },
+  { "XF86HomePage",          DALI_KEY_HOMEPAGE,        false },
+  { "XF86WWW",               DALI_KEY_WEBPAGE,         false },
+  { "XF86ScreenSaver",       DALI_KEY_SCREENSAVER,     false },
+  { "XF86MonBrightnessUp",   DALI_KEY_BRIGHTNESS_UP,   false },
+  { "XF86MonBrightnessDown", DALI_KEY_BRIGHTNESS_DOWN, false },
+  { "XF86SoftKBD",           DALI_KEY_SOFT_KBD,        false },
+  { "XF86QuickPanel",        DALI_KEY_QUICK_PANEL,     false },
+  { "XF86TaskPane",          DALI_KEY_TASK_SWITCH,     false },
+  { "XF86Apps",              DALI_KEY_APPS,            false },
+  { "XF86Search",            DALI_KEY_SEARCH,          false },
+  { "XF86Voice",             DALI_KEY_VOICE,           false },
+  { "Hangul",                DALI_KEY_LANGUAGE,        false },
+  { "XF86AudioRaiseVolume",  DALI_KEY_VOLUME_UP,       true  },
+  { "XF86AudioLowerVolume",  DALI_KEY_VOLUME_DOWN,     true  },
+};
+
+const std::size_t KEY_LOOKUP_COUNT = (sizeof( TestKeyLookupTable))/ (sizeof(KeyLookup));
+
+enum TEST_TYPE
+{
+  GRAB_KEY_P,
+  UNGRAB_KEY_P,
+  GRAB_KEY_TOPMOST_P,
+  UNGRAB_KEY_TOPMOST_P
+};
+
+struct MyTestApp : public ConnectionTracker
+{
+  MyTestApp( Application& app, int type )
+  : mApplication( app ),
+    mTestType( type )
+  {
+    mApplication.InitSignal().Connect( this, &MyTestApp::OnInit );
+  }
+
+  void OnInit(Application& app)
+  {
+    mStartTimer = Timer::New( 100 );
+    mStartTimer.TickSignal().Connect( this, &MyTestApp::StartTick );
+    mStartTimer.Start();
+
+    mTimer = Timer::New( 500 );
+    mTimer.TickSignal().Connect( this, &MyTestApp::Tick );
+    mTimer.Start();
+  }
+
+  bool StartTick()
+  {
+    mStartTimer.Stop();
+    ExcuteTest();
+    return true;
+  }
+
+  bool Tick()
+  {
+    mTimer.Stop();
+    mApplication.Quit();
+    return true;
+  }
+
+  void ExcuteTest()
+  {
+    switch (mTestType)
+    {
+      case GRAB_KEY_P:
+        TestGrabKeyP();
+        break;
+      case UNGRAB_KEY_P:
+        TestUngrabKeyP();
+        break;
+      case UNGRAB_KEY_N:
+        TestUngrabKeyN();
+        break;
+      case GRAB_KEY_TOPMOST_P:
+        TestGrabKeyTopmostP();
+        break;
+      case UNGRAB_KEY_TOPMOST_P:
+        TestUngrabKeyTopmostP();
+        break;
+    }
+  }
+
+  void TestGrabKeyP()
+  {
+    for ( std::size_t i = 0; i < KEY_LOOKUP_COUNT; ++i )
+    {
+      DALI_TEST_CHECK( KeyGrab::GrabKey( mApplication.GetWindow(), TestKeyLookupTable[i].daliKeyCode, KeyGrab::TOPMOST ) );
+      DALI_TEST_CHECK( KeyGrab::GrabKey( mApplication.GetWindow(), TestKeyLookupTable[i].daliKeyCode, KeyGrab::SHARED ) );
+    }
+  }
+
+  void TestUngrabKeyP()
+  {
+    for ( std::size_t i = 0; i < KEY_LOOKUP_COUNT; ++i )
+    {
+      DALI_TEST_CHECK( KeyGrab::GrabKey( mApplication.GetWindow(), TestKeyLookupTable[i].daliKeyCode, KeyGrab::TOPMOST ) );
+      DALI_TEST_CHECK( KeyGrab::UngrabKey( mApplication.GetWindow(), TestKeyLookupTable[i].daliKeyCode ) );
+    }
+  }
+
+  void TestGrabKeyTopmostP()
+  {
+    for ( std::size_t i = 0; i < KEY_LOOKUP_COUNT; ++i )
+    {
+      DALI_TEST_CHECK( KeyGrab::GrabKeyTopmost( mApplication.GetWindow(), TestKeyLookupTable[i].daliKeyCode ) );
+    }
+  }
+
+  void TestUngrabKeyTopmostP()
+  {
+    for ( std::size_t i = 0; i < KEY_LOOKUP_COUNT; ++i )
+    {
+      DALI_TEST_CHECK( KeyGrab::GrabKeyTopmost( mApplication.GetWindow(), TestKeyLookupTable[i].daliKeyCode ) );
+      DALI_TEST_CHECK( KeyGrab::UngrabKeyTopmost( mApplication.GetWindow(), TestKeyLookupTable[i].daliKeyCode ) );
+    }
+  }
+
+  // Data
+  Application& mApplication;
+  int mTestType;
+  Timer mTimer, mStartTimer;
+};
+
+int UtcDaliKeyGrabGrabKeyP(void)
+{
+  Application application = Application::New( &gArgc, &gArgv );
+  MyTestApp testApp( application, GRAB_KEY_P );
+  application.MainLoop();
+  END_TEST;
+}
+
+int UtcDaliKeyGrabUngrabKeyP(void)
+{
+  Application application = Application::New( &gArgc, &gArgv );
+  MyTestApp testApp( application, UNGRAB_KEY_P );
+  application.MainLoop();
+  END_TEST;
+}
+
+int UtcDaliKeyGrabGrabKeyTopmostP(void)
+{
+  Application application = Application::New( &gArgc, &gArgv );
+  MyTestApp testApp( application, GRAB_KEY_TOPMOST_P );
+  application.MainLoop();
+  END_TEST;
+}
+
+int UtcDaliKeyGrabUngrabKeyTopmostP(void)
+{
+  Application application = Application::New( &gArgc, &gArgv );
+  MyTestApp testApp( application, UNGRAB_KEY_TOPMOST_P );
+  application.MainLoop();
+  END_TEST;
+}
+
index ed609c7..bce707a 100644 (file)
@@ -350,6 +350,15 @@ else
 libdali_adaptor_la_LIBADD += -ljpeg
 endif
 
+if !UBUNTU_PROFILE
+if WAYLAND
+else
+# X11
+libdali_adaptor_la_CXXFLAGS += $(UTILX_CFLAGS)
+libdali_adaptor_la_LIBADD += $(UTILX_LIBS)
+endif
+endif
+
 tizenadaptorpublicapidir = $(devincludepath)/dali/public-api
 tizenadaptorpublicapi_HEADERS = $(public_api_header_files)
 
@@ -376,6 +385,7 @@ tizentextabstractiondevelapidir = $(tizenadaptordevelapidir)/text-abstraction
 tizentextabstractiondevelapi_HEADERS = $(text_abstraction_header_files)
 
 if !UBUNTU_PROFILE
+tizenadaptorframeworkpublicapi_HEADERS += $(public_api_adaptor_tizen_header_files)
 
 if !WAYLAND
 tizenadaptorframeworkpublicapi_HEADERS += $(public_api_adaptor_tizen_x11_header_files)
index d760e20..d14723f 100644 (file)
@@ -186,6 +186,10 @@ PKG_CHECK_MODULES(TTS, tts)
 PKG_CHECK_MODULES(VCONF, vconf)
 PKG_CHECK_MODULES(CAPI_SYSTEM_SYSTEM_SETTINGS, capi-system-system-settings)
 
+if test "x$enable_wayland" != "xyes"; then
+PKG_CHECK_MODULES(UTILX, utilX)
+fi
+
 if test "x$with_over_tizen_2_2" = "xyes"; then
 PKG_CHECK_MODULES(CAPI_SYSTEM_INFO, capi-system-info)
 fi