2 * Copyright (c) 2017 Samsung Electronics Co., Ltd.
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
8 * http://www.apache.org/licenses/LICENSE-2.0
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
19 #include <dali/internal/window-system/ubuntu-x11/window-interface-ecore-x.h>
22 #include <X11/Xatom.h>
24 #include <X11/Xutil.h>
26 #include <dali/integration-api/debug.h>
29 #include <dali/internal/window-system/ubuntu-x11/ecore-x-types.h>
43 namespace WindowInterface
46 const char* const CBHM_WINDOW = "CBHM_XWIN";
48 Ecore_X_Window GetWindow()
50 Ecore_X_Atom xAtomCbhm = ecore_x_atom_get( CBHM_WINDOW );
52 Ecore_X_Window xCbhmWin = 0;
53 unsigned char *buf = NULL;
55 // XA_WINDOW is a macro with C cast
56 #pragma GCC diagnostic push
57 #pragma GCC diagnostic ignored "-Wold-style-cast"
58 int ret = ecore_x_window_prop_property_get( 0, xAtomCbhm, XA_WINDOW, 0, &buf, &num );
59 #pragma GCC diagnostic pop
63 memcpy( &xCbhmWin, buf, sizeof( Ecore_X_Window ) );
73 std::string GetWindowProperty( Ecore_X_Atom property, Ecore_X_Atom *xDataType, unsigned int num )
84 long unsigned int numRet = 0, bytes = 0;
87 unsigned char *propRet;
90 // X11 Function to get window property
91 ret = XGetWindowProperty( static_cast<Display*>(ecore_x_display_get()), // Display* X Server Connection
92 GetWindow(), // Window window in question
93 property, // Atom name of property
94 num, // long offset where required data is stored
95 LONG_MAX, // long length of data to retrieve
96 False, // Bool flag to delete data
97 ecore_x_window_prop_any_type(), // Atom atom id associated to property type
98 reinterpret_cast< Atom * >( &typeRet ), // Atom actual_type_return, atom id property type
99 &sizeRet, // int* format of property
100 &numRet, // unsigned long* number of items being returned in prop_return
101 &bytes, // unsigned long* remaining bytes if partial retrieval
102 &propRet ); // unsigned char** return data
103 if ( ret != Success )
114 numRet--; // As propRet in XGetWindowProperty gets an extra 0 added for compatibility reasons.
116 switch ( sizeRet ) // Format returned by XGetWindowProperty int, short, long
120 for ( i = 0; i < numRet; i++ )
129 for ( i = 0; i < numRet; i++ )
131 data += ( propRet )[i];
138 for ( i = 0; i < numRet; i++ )
140 data += ( propRet )[i];
150 *xDataType = typeRet;
156 void SendXEvent(Ecore_X_Display* display, Ecore_X_Window window, bool propagate,
157 long int eventMask, Ecore_X_Atom messageType, int messageFormat, const char *msg )
159 XClientMessageEvent message;
160 memset(&message, 0, sizeof( message ) );
161 message.type = ClientMessage;
162 message.display = static_cast<Display*>( display );
163 message.message_type = messageType;
164 message.format = messageFormat;
165 message.window = window;
166 snprintf(message.data.b, 20, "%s", msg);
168 XSendEvent( static_cast<Display*>( display ), window, propagate, eventMask, reinterpret_cast< XEvent* >( &message ) );
172 } // namespace WindowInterface
177 } // namespace Adaptor
179 } // namespace Internal