Add key grab/ungrab interfaces for Tizen 52/38252/9
authorYoonsang Lee <ysang114.lee@samsung.com>
Mon, 27 Apr 2015 10:33:06 +0000 (19:33 +0900)
committerYoonsang Lee <ysang114.lee@samsung.com>
Tue, 12 May 2015 14:42:44 +0000 (23:42 +0900)
The 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.

Change-Id: I152a5068d513d4b6dca748887da199a1c7516f6d

12 files changed:
adaptors/common/key-impl.h
adaptors/public-api/adaptor-framework/window.h
adaptors/tv/tv-key-impl.cpp
adaptors/ubuntu/key-impl-ubuntu.cpp
adaptors/wayland/key-impl-wl.cpp
adaptors/x11/file.list
adaptors/x11/key-grab-x.cpp [new file with mode: 0644]
adaptors/x11/key-grab.h [new file with mode: 0644]
adaptors/x11/key-impl-x.cpp
adaptors/x11/window-extensions.h
build/tizen/adaptor/Makefile.am
build/tizen/configure.ac

index dc103d5..776c5b6 100644 (file)
@@ -39,7 +39,7 @@ namespace KeyLookup
 /**
  * @copydoc Dali::IsKey()
  */
-bool IsKey( const Dali::KeyEvent& keyEvent, Dali::KEY daliKey);
+bool IsKey( const Dali::KeyEvent& keyEvent, Dali::KEY daliKey );
 
 /**
  * Check if a the given key name string is a button on the device itself.
@@ -48,6 +48,13 @@ bool IsKey( const Dali::KeyEvent& keyEvent, Dali::KEY daliKey);
  */
 bool IsDeviceButton( const char* keyName );
 
+/**
+ * Get the key name from the dali key code.
+ * @param daliKey The dali key code
+ * @return The key name
+ */
+const char* GetKeyName( Dali::KEY daliKey );
+
 } // namespace KeyLookup
 
 } // namespace Adaptor
index a4c11e8..c653468 100644 (file)
@@ -73,9 +73,9 @@ public:
    */
   enum IndicatorBgOpacity
   {
-    OPAQUE = 100, // Fully opaque indicator Bg
-    TRANSLUCENT = 50, // Semi translucent indicator Bg
-    TRANSPARENT = 0 // Fully transparent indicator Bg
+    OPAQUE = 100,     ///< Fully opaque indicator Bg
+    TRANSLUCENT = 50, ///< Semi translucent indicator Bg
+    TRANSPARENT = 0   ///< Fully transparent indicator Bg
   };
 
   /**
@@ -83,9 +83,9 @@ public:
    */
   enum IndicatorVisibleMode
   {
-    INVISIBLE = 0, // hide indicator
-    VISIBLE = 1, // show indicator
-    AUTO = 2 // hide in default, will show when necessary
+    INVISIBLE = 0, ///< hide indicator
+    VISIBLE = 1,   ///< show indicator
+    AUTO = 2       ///< hide in default, will show when necessary
   };
 
   // Methods
index a265bf6..5e5e587 100644 (file)
@@ -169,6 +169,19 @@ class KeyMap
     }
   }
 
+  const char* GetKeyName( int daliKeyCode ) const
+  {
+    for( size_t i = 0; i < KEY_LOOKUP_COUNT ; ++i )
+    {
+      const KeyLookup& keyLookup( KeyLookupTable[i] );
+      if( keyLookup.daliKeyCode == daliKeyCode )
+      {
+        return keyLookup.keyName;
+      }
+    }
+    return "";
+  }
+
   bool IsDeviceButton( const char* keyName ) const
   {
     Lookup::const_iterator i = mLookup.find( keyName );
@@ -209,6 +222,11 @@ bool IsDeviceButton( const char* keyName )
   return globalKeyLookup.IsDeviceButton( keyName );
 }
 
+const char* GetKeyName( Dali::KEY daliKey )
+{
+  return globalKeyLookup.GetKeyName( daliKey );
+}
+
 } // namespace KeyLookup
 
 } // namespace Adaptor
index 6585d66..54dbc3d 100644 (file)
@@ -216,6 +216,19 @@ class KeyMap
     }
   }
 
+  const char* GetKeyName( int daliKeyCode ) const
+  {
+    for( size_t i = 0; i < KEY_LOOKUP_COUNT ; ++i )
+    {
+      const KeyLookup& keyLookup( KeyLookupTable[i] );
+      if( keyLookup.daliKeyCode == daliKeyCode )
+      {
+        return keyLookup.keyName;
+      }
+    }
+    return "";
+  }
+
   bool IsDeviceButton( const char* keyName ) const
   {
     Lookup::const_iterator i = mLookup.find( keyName );
@@ -256,6 +269,11 @@ bool IsDeviceButton( const char* keyName )
   return globalKeyLookup.IsDeviceButton( keyName );
 }
 
+const char* GetKeyName( Dali::KEY daliKey )
+{
+  return globalKeyLookup.GetKeyName( daliKey );
+}
+
 } // namespace KeyLookup
 
 } // namespace Adaptor
index b13b85a..e5e41de 100644 (file)
@@ -132,6 +132,19 @@ class KeyMap
     }
   }
 
+  const char* GetKeyName( int daliKeyCode ) const
+  {
+    for( size_t i = 0; i < KEY_LOOKUP_COUNT ; ++i )
+    {
+      const KeyLookup& keyLookup( KeyLookupTable[i] );
+      if( keyLookup.daliKeyCode == daliKeyCode )
+      {
+        return keyLookup.keyName;
+      }
+    }
+    return "";
+  }
+
   bool IsDeviceButton( const char* keyName ) const
   {
     Lookup::const_iterator i = mLookup.find( keyName );
@@ -172,6 +185,11 @@ bool IsDeviceButton( const char* keyName )
   return globalKeyLookup.IsDeviceButton( keyName );
 }
 
+const char* GetKeyName( Dali::KEY daliKey )
+{
+  return globalKeyLookup.GetKeyName( daliKey );
+}
+
 } // namespace KeyLookup
 
 } // namespace Adaptor
index f9573c4..daf4e3e 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-impl-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) \
@@ -36,4 +37,5 @@ adaptor_x11_internal_default_profile_src_files = \
   $(adaptor_x11_dir)/system-settings-x.cpp
 
 public_api_adaptor_tizen_x11_header_files = \
-  $(adaptor_x11_dir)/window-extensions.h
+  $(adaptor_x11_dir)/window-extensions.h \
+  $(adaptor_x11_dir)/key-grab.h
diff --git a/adaptors/x11/key-grab-x.cpp b/adaptors/x11/key-grab-x.cpp
new file mode 100644 (file)
index 0000000..8fc44fa
--- /dev/null
@@ -0,0 +1,71 @@
+/*
+ * 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 GrabKey( Window window, Dali::KEY daliKey, KeyGrabMode grabMode )
+{
+  int xGrabMode;
+  if( grabMode == TOP_POSITION )
+  {
+    xGrabMode = TOP_POSITION_GRAB;
+  }
+  else if( grabMode == SHARED )
+  {
+    xGrabMode = SHARED_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
+
+
diff --git a/adaptors/x11/key-grab.h b/adaptors/x11/key-grab.h
new file mode 100644 (file)
index 0000000..7d74da8
--- /dev/null
@@ -0,0 +1,69 @@
+#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 Key grab mode.
+ */
+enum KeyGrabMode
+{
+  TOP_POSITION = 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.
+};
+
+/**
+ * @brief Grabs the key specfied by @a key for @a window in @a grabMode.
+ *
+ * The 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.
+ *
+ * @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.
+ * @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 eccfcc7..091fe50 100644 (file)
@@ -172,6 +172,19 @@ class KeyMap
     }
   }
 
+  const char* GetKeyName( int daliKeyCode ) const
+  {
+    for( size_t i = 0; i < KEY_LOOKUP_COUNT ; ++i )
+    {
+      const KeyLookup& keyLookup( KeyLookupTable[i] );
+      if( keyLookup.daliKeyCode == daliKeyCode )
+      {
+        return keyLookup.keyName;
+      }
+    }
+    return "";
+  }
+
   bool IsDeviceButton( const char* keyName ) const
   {
     Lookup::const_iterator i = mLookup.find( keyName );
@@ -212,6 +225,11 @@ bool IsDeviceButton( const char* keyName )
   return globalKeyLookup.IsDeviceButton( keyName );
 }
 
+const char* GetKeyName( Dali::KEY daliKey )
+{
+  return globalKeyLookup.GetKeyName( daliKey );
+}
+
 } // namespace KeyLookup
 
 } // namespace Adaptor
index 243d006..ecef330 100644 (file)
@@ -33,7 +33,7 @@ namespace WindowExtensions
  *
  * The effect will be shown when the application is launched, quit, shown and hiden.
  *
- * @note This function is only specified by tizen.
+ * @note This function is only specified by Tizen.
  *
  * @param[in] window The window to set.
  * @param[in] enable True if the effect is enabled.
@@ -43,7 +43,7 @@ DALI_IMPORT_API void EnableEffect( Window window, bool enable );
 /**
  * @brief Retrieve whether the effect is enabled or not.
  *
- * @note This function is only specified by tizen.
+ * @note This function is only specified by Tizen.
  *
  * @param[in] window The window to set.
  * @return True if the effect is enabled.
index 8d8cffb..53a34fe 100644 (file)
@@ -334,6 +334,15 @@ libdali_adaptor_la_CXXFLAGS += $(HAPTIC_CFLAGS)
 libdali_adaptor_la_LIBADD +=
 endif
 
+if !UBUNTU_PROFILE
+if WAYLAND
+else
+# X11
+libdali_adaptor_la_CXXFLAGS += $(UTILX_CFLAGS)
+libdali_adaptor_la_LIBADD += $(UTILX_LIBS)
+endif
+endif
+
 if TURBO_JPEG_IS_ON
 libdali_adaptor_la_LIBADD += -lturbojpeg
 CFLAGS += -D_TURBO_JPEG_LOADER
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