1 /**
2  * Elementary Layout-based widgets may declare part proxies, i.e., aliases for
3  * real theme part names to expose to the API calls:
4  * - elm_layout_text_set()
5  * - elm_layout_text_get()
6  * - elm_layout_content_set()
7  * - elm_layout_content_get()
8  * - elm_layout_content_unset()
9  * and their equivalents. This list must be set on the "_smart_set_user()"
10  * function of inheriting widgets, so that part aliasing is handled
11  * automatically for them.
12  *
13  * @deprecated Should not be used outside of EFL internal code.
14  */
15 
16 struct _Elm_Layout_Part_Alias_Description
17 {
18   const char *alias; /**< Alternate name for a given (real) part. Calls
19                       * receiving this string as a part name will be translated
20                       * to the string at
21                       * Efl.Ui.Layout_Part_Proxies_Description::real_part */
22   const char *real_part; /**< Target part name for the alias set on
23                           * Efl.Ui.Layout_Part_Proxies_Description::real_part. An
24                           * example of usage would be "default" on that field,
25                           * with "elm.content.swallow" on this one */
26 };
27 
28 typedef Eo Elm_Layout;
29 
30 typedef struct _Elm_Layout_Part_Alias_Description Elm_Layout_Part_Alias_Description;
31 
32 /**
33  * Add a new layout to the parent
34  *
35  * @param parent The parent object
36  * @return The new object or NULL if it cannot be created
37  *
38  * @see elm_layout_file_set()
39  * @see elm_layout_theme_set()
40  *
41  * @ingroup Elm_Layout
42  */
43 EAPI Evas_Object                 *elm_layout_add(Evas_Object *parent);
44 
45 /**
46  * @brief Set the edje group from the elementary theme that will be used as
47  * layout.
48  *
49  * Note that @c style will be the new style of @c obj too, as in an @ref
50  * elm_object_style_set call.
51  *
52  * @param[in] klass The class of the group.
53  * @param[in] group The group.
54  * @param[in] style The style to used.
55  *
56  * @return @c true on success, @c false otherwise
57  *
58  * @ingroup Elm_Layout
59  */
60 EAPI Eina_Bool elm_layout_theme_set(Evas_Object *obj, const char *klass, const char *group, const char *style);
61 
62 /**
63  * @brief Get the edje data from the given layout.
64  *
65  * This function fetches data specified inside the edje theme of this layout.
66  * This function return NULL if data is not found.
67  *
68  * In EDC this comes from a data block within the group block that @c obj was
69  * loaded from.
70  *
71  * @param[in] key The data key.
72  *
73  * @return The edje data string.
74  */
75 EAPI const char *elm_layout_data_get(const Evas_Object *obj, const char *key);
76 
77 /**
78  * @brief Eval sizing.
79  *
80  * Manually forces a sizing re-evaluation. This is useful when the minimum size
81  * required by the edje theme of this layout has changed. The change on the
82  * minimum size required by the edje theme is not immediately reported to the
83  * elementary layout, so one needs to call this function in order to tell the
84  * widget (layout) that it needs to reevaluate its own size.
85  *
86  * The minimum size of the theme is calculated based on minimum size of parts,
87  * the size of elements inside containers like box and table, etc. All of this
88  * can change due to state changes, and that's when this function should be
89  * called.
90  *
91  * Also note that a standard signal of "size,eval" "elm" emitted from the edje
92  * object will cause this to happen too.
93  *
94  * @ingroup Elm_Layout
95  */
96 EAPI void elm_layout_sizing_eval(Evas_Object *obj);
97 
98 /**
99  * @brief Request sizing reevaluation, restricted to current width and/or
100  * height.
101  *
102  * Useful mostly when there are TEXTBLOCK parts defining the height of the
103  * object and nothing else restricting it to a minimum width. Calling this
104  * function will restrict the minimum size in the Edje calculation to whatever
105  * size it the layout has at the moment.
106  *
107  * @param[in] width Restrict minimum size to the current width.
108  * @param[in] height Restrict minimum size ot the current height.
109  *
110  * @since 1.8
111  *
112  * @ingroup Elm_Layout
113  */
114 EAPI void elm_layout_sizing_restricted_eval(Evas_Object *obj, Eina_Bool width, Eina_Bool height);
115 
116 /**
117  * @brief Add a callback for a (Edje) signal emitted by a layout widget's
118  * underlying Edje object.
119  *
120  * This function connects a callback function to a signal emitted by the
121  * underlying Edje object of @c obj. Globs are accepted in either the emission
122  * or source strings.
123  *
124  * @param[in] emission The signal's name string.
125  * @param[in] source The signal's source string.
126  * @param[in] func The callback function to be executed when the signal is
127  * emitted.
128  * @param[in] data A pointer to data to pass in to the callback function.
129  *
130  * @ingroup Elm_Layout
131  */
132 EAPI void elm_layout_signal_callback_add(Evas_Object *obj, const char *emission, const char *source, Edje_Signal_Cb func, void *data);
133 
134 /**
135  * @brief Remove a signal-triggered callback from a given layout widget.
136  *
137  * This function removes the last callback attached to a signal emitted by the
138  * underlying Edje object of @c obj, with parameters @c emission, @c source and
139  * @c func matching exactly those passed to a previous call to
140  * @ref elm_layout_signal_callback_add. The data pointer that was passed to
141  * this call will be returned.
142  *
143  * @param[in] emission The signal's name string.
144  * @param[in] source The signal's source string.
145  * @param[in] func The callback function being executed when the signal was
146  * emitted.
147  *
148  * @return The data pointer of the signal callback (passed on
149  * @ref elm_layout_signal_callback_add) or @c null on errors.
150  *
151  * @ingroup Elm_Layout
152  */
153 EAPI void *elm_layout_signal_callback_del(Evas_Object *obj, const char *emission, const char *source, Edje_Signal_Cb func);
154 
155 /**
156  * @brief Send a (Edje) signal to a given layout widget's underlying Edje
157  * object.
158  *
159  * This function sends a signal to the underlying Edje object of @c obj. An
160  * Edje program on that Edje object's definition can respond to a signal by
161  * specifying matching 'signal' and 'source' fields.
162  *
163  * @param[in] emission The signal's name string.
164  * @param[in] source The signal's source string.
165  *
166  * @ingroup Elm_Layout
167  */
168 EAPI void elm_layout_signal_emit(Evas_Object *obj, const char *emission, const char *source);
169 
170 /**
171  * @brief Get the edje layout
172  *
173  * This returns the edje object. It is not expected to be used to then swallow
174  * objects via @ref edje_object_part_swallow for example. Use @ref
175  * elm_layout_content_set instead so child object handling and sizing is done
176  * properly.
177  *
178  * @note This function should only be used if you really need to call some low
179  * level Edje function on this edje object. All the common stuff (setting text,
180  * emitting signals, hooking callbacks to signals, etc.) can be done with
181  * proper elementary functions.
182  *
183  * @return An Evas_Object with the edje layout settings loaded @ref
184  * elm_layout_file_set.
185  *
186  * @ingroup Elm_Layout
187  */
188 EAPI Efl_Canvas_Object *elm_layout_edje_get(const Evas_Object *obj);
189 
190 /**
191  * Get the list of swallow parts of a given container widget
192  *
193  * @param obj The layout object
194  *
195  * @return list of swallow parts which should be freed by the user program with elm_list_free()
196  *
197  * @since 1.9
198  *
199  * @ingroup Elm_Layout
200  */
201 EAPI Eina_List                   *elm_layout_content_swallow_list_get(const Evas_Object *obj);
202 
203 /**
204  * Set the layout content.
205  *
206  * @param obj The layout object
207  * @param swallow The swallow part name in the edje file
208  * @param content The child that will be added in this layout object
209  * @return @c EINA_TRUE on success, @c EINA_FALSE otherwise
210  *
211  * Once the content object is set, a previously set one will be deleted.
212  * If you want to keep that old content object, use the
213  * elm_layout_content_unset() function.
214  *
215  * @note In an Edje theme, the part used as a content container is called
216  * @c SWALLOW. This is why the parameter name is called @p swallow, but it is
217  * expected to be a part name just like the second parameter of
218  * elm_layout_box_append().
219  *
220  * @see elm_layout_box_append()
221  * @see elm_layout_content_get()
222  * @see elm_layout_content_unset()
223  *
224  * @see @ref secBox
225  *
226  * @ingroup Elm_Layout
227  */
228 EAPI Eina_Bool                    elm_layout_content_set(Evas_Object *obj, const char *swallow, Evas_Object *content);
229 
230 /**
231  * Get the child object in the given content part.
232  *
233  * @param obj The layout object
234  * @param swallow The SWALLOW part to get its content
235  *
236  * @return The swallowed object or NULL if none or an error occurred
237  *
238  * @ingroup Elm_Layout
239  */
240 EAPI Evas_Object                 *elm_layout_content_get(const Evas_Object *obj, const char *swallow);
241 
242 /**
243  * Unset the layout content.
244  *
245  * @param obj The layout object
246  * @param swallow The swallow part name in the edje file
247  * @return The content that was being used
248  *
249  * Unparent and return the content object which was set for this part.
250  *
251  * @ingroup Elm_Layout
252  */
253 EAPI Evas_Object                 *elm_layout_content_unset(Evas_Object *obj, const char *swallow);
254 
255 /**
256  * Set the file that will be used as layout
257  *
258  * @return (1 = success, 0 = error)
259  *
260  * @ingroup Elm_Layout
261  *
262  * @param[in] file The path to file (edj) that will be used as layout
263  * @param[in] group The group that the layout belongs in edje file
264  */
265 EAPI Eina_Bool elm_layout_file_set(Eo *obj, const char *file, const char *group);
266 
267 /**
268  * Get the loaded file
269  *
270  *
271  * @ingroup Elm_Layout
272  *
273  * @param file The path to file (edj) used as layout
274  * @param group The group that the layout belongs in edje file
275  *
276  * @since 1.14
277  */
278 EAPI void elm_layout_file_get(Eo *obj, const char **file, const char **group);
279 
280 /**
281  * Set the mmap file that will be used as layout
282  *
283  * @return (1 = success, 0 = error)
284  *
285  * @ingroup Elm_Layout
286  *
287  * @param[in] file Eina_File (edj) that will be used as layout
288  * @param[in] group The group that the layout belongs in edje file
289  *
290  * @since 1.19
291  */
292 EAPI Eina_Bool elm_layout_mmap_set(Eo *obj, const Eina_File *file, const char *group);
293 
294 /**
295  * Get the loaded mmap file
296  *
297  * @ingroup Elm_Layout
298  *
299  * @param file Eina_File (edj) used as layout
300  * @param group The group that the layout belongs in edje file
301  *
302  * @since 1.19
303  */
304 EAPI void elm_layout_mmap_get(Eo *obj, const Eina_File **file, const char **group);
305 
306 /**
307  * @brief Freezes the Elementary layout object.
308  *
309  * This function puts all changes on hold. Successive freezes will nest,
310  * requiring an equal number of thaws.
311  *
312  * See also @ref elm_layout_thaw.
313  *
314  * @return The frozen state or 0 on error.
315  */
316 EAPI int elm_layout_freeze(Evas_Object *obj);
317 
318 /**
319  * @brief Thaws the Elementary object.
320  *
321  * This function thaws the given Edje object and the Elementary sizing calc.
322  *
323  * @note If successive freezings were done, an equal number of thaws will be
324  * required.
325  *
326  * See also @ref elm_layout_freeze.
327  *
328  * @return The frozen state or 0 if the object is not frozen or on error.
329  */
330 EAPI int elm_layout_thaw(Evas_Object *obj);
331 
332 /**
333  * @brief Append child to layout box part.
334  *
335  * Once the object is appended, it will become child of the layout. Its
336  * lifetime will be bound to the layout, whenever the layout dies the child
337  * will be deleted automatically. One should use @ref elm_layout_box_remove to
338  * make this layout forget about the object.
339  *
340  * @param[in] child The child object to append to box.
341  *
342  * @ingroup Elm_Layout
343  */
344 EAPI Eina_Bool elm_layout_box_append(Evas_Object *obj, const char *part, Evas_Object *child);
345 
346 /**
347  * @brief Prepend child to layout box part.
348  *
349  * Once the object is prepended, it will become child of the layout. Its
350  * lifetime will be bound to the layout, whenever the layout dies the child
351  * will be deleted automatically. One should use @ref elm_layout_box_remove to
352  * make this layout forget about the object.
353  *
354  * @param[in] child The child object to prepend to box.
355  *
356  * @ingroup Elm_Layout
357  */
358 EAPI Eina_Bool elm_layout_box_prepend(Evas_Object *obj, const char *part, Evas_Object *child);
359 
360 /**
361  * @brief Insert child to layout box part before a reference object.
362  *
363  * Once the object is inserted, it will become child of the layout. Its
364  * lifetime will be bound to the layout, whenever the layout dies the child
365  * will be deleted automatically. One should use @ref elm_layout_box_remove to
366  * make this layout forget about the object.
367  *
368  * @param[in] child The child object to insert into box.
369  * @param[in] reference Another reference object to insert before in box.
370  *
371  * @ingroup Elm_Layout
372  */
373 EAPI Eina_Bool elm_layout_box_insert_before(Evas_Object *obj, const char *part, Evas_Object *child, const Evas_Object *reference);
374 
375 /**
376  * @brief Insert child to layout box part at a given position.
377  *
378  * Once the object is inserted, it will become child of the layout. Its
379  * lifetime will be bound to the layout, whenever the layout dies the child
380  * will be deleted automatically. One should use @ref elm_layout_box_remove to
381  * make this layout forget about the object.
382  *
383  * @param[in] child The child object to insert into box.
384  * @param[in] pos The numeric position >=0 to insert the child.
385  *
386  * @ingroup Elm_Layout
387  */
388 EAPI Eina_Bool elm_layout_box_insert_at(Evas_Object *obj, const char *part, Evas_Object *child, unsigned int pos);
389 
390 /**
391  * @brief Remove a child of the given part box.
392  *
393  * The object will be removed from the box part and its lifetime will not be
394  * handled by the layout anymore. This is equivalent to @ref
395  * elm_layout_content_unset for box.
396  *
397  * @param[in] child The object to remove from box.
398  *
399  * @return The object that was being used, or @c null if not found.
400  *
401  * @ingroup Elm_Layout
402  */
403 EAPI Evas_Object *elm_layout_box_remove(Evas_Object *obj, const char *part, Evas_Object *child);
404 
405 /**
406  * @brief Remove all children of the given part box.
407  *
408  * The objects will be removed from the box part and their lifetime will not be
409  * handled by the layout anymore. This is equivalent to
410  * @ref elm_layout_box_remove for all box children.
411  *
412  * @param[in] clear If true, then all objects will be deleted as well,
413  * otherwise they will just be removed and will be dangling on the canvas.
414  *
415  * @ingroup Elm_Layout
416  */
417 EAPI Eina_Bool elm_layout_box_remove_all(Evas_Object *obj, const char *part, Eina_Bool clear);
418 
419 /**
420  * @brief Insert child to layout table part.
421  *
422  * Once the object is inserted, it will become child of the table. Its lifetime
423  * will be bound to the layout, and whenever the layout dies the child will be
424  * deleted automatically. One should use @ref elm_layout_table_unpack to make
425  * this layout forget about the object.
426  *
427  * If @c colspan or @c rowspan are bigger than 1, that object will occupy more
428  * space than a single cell.
429  *
430  * See also @ref elm_layout_table_unpack, @ref elm_layout_table_clear.
431  *
432  * @param[in] child The child object to pack into table.
433  * @param[in] col The column to which the child should be added. (>= 0)
434  * @param[in] row The row to which the child should be added. (>= 0)
435  * @param[in] colspan How many columns should be used to store this object. (>=
436  * 1)
437  * @param[in] rowspan How many rows should be used to store this object. (>= 1)
438  *
439  * @ingroup Elm_Layout
440  */
441 EAPI Eina_Bool elm_layout_table_pack(Evas_Object *obj, const char *part, Evas_Object *child, unsigned short col, unsigned short row, unsigned short colspan, unsigned short rowspan);
442 
443 /**
444  * @brief Unpack (remove) a child of the given part table.
445  *
446  * The object will be unpacked from the table part and its lifetime will not be
447  * handled by the layout anymore. This is equivalent to @ref
448  * elm_layout_content_unset for table.
449  *
450  * @param[in] child The object to remove from table.
451  *
452  * @return The object that was being used, or @c null if not found.
453  *
454  * @ingroup Elm_Layout
455  */
456 EAPI Evas_Object *elm_layout_table_unpack(Evas_Object *obj, const char *part, Evas_Object *child);
457 
458 /**
459  * @brief Remove all the child objects of the given part table.
460  *
461  * The objects will be removed from the table part and their lifetime will not
462  * be handled by the layout anymore. This is equivalent to
463  * @ref elm_layout_table_unpack for all table children.
464  *
465  * @param[in] clear If true, then all objects will be deleted as well,
466  * otherwise they will just be removed and will be dangling on the canvas.
467  *
468  * @ingroup Elm_Layout
469  */
470 EAPI Eina_Bool elm_layout_table_clear(Evas_Object *obj, const char *part, Eina_Bool clear);
471 
472 /**
473  * @brief Get the edje data from the given layout.
474  *
475  * This function fetches data specified inside the edje theme of this layout.
476  * This function return NULL if data is not found.
477  *
478  * In EDC this comes from a data block within the group block that @c obj was
479  * loaded from.
480  *
481  * @param[in] key The data key.
482  *
483  * @return The edje data string.
484  *
485  * @ingroup Elm_Layout
486  */
487 EAPI const char *elm_layout_data_get(const Evas_Object *obj, const char *key);
488 
489 /**
490  * @brief Send a (Edje) signal to a given layout widget's underlying Edje
491  * object.
492  *
493  * This function sends a signal to the underlying Edje object of @c obj. An
494  * Edje program on that Edje object's definition can respond to a signal by
495  * specifying matching 'signal' and 'source' fields.
496  *
497  * @param[in] emission The signal's name string.
498  * @param[in] source The signal's source string.
499  *
500  * @ingroup Elm_Layout
501  */
502 EAPI void elm_layout_signal_emit(Evas_Object *obj, const char *emission, const char *source);
503 
504 /**
505  * @brief Add a callback for a (Edje) signal emitted by a layout widget's
506  * underlying Edje object.
507  *
508  * This function connects a callback function to a signal emitted by the
509  * underlying Edje object of @c obj. Globs are accepted in either the emission
510  * or source strings.
511  *
512  * @param[in] emission The signal's name string.
513  * @param[in] source The signal's source string.
514  * @param[in] func The callback function to be executed when the signal is
515  * emitted.
516  * @param[in] data A pointer to data to pass in to the callback function.
517  *
518  * @ingroup Elm_Layout
519  */
520 EAPI void elm_layout_signal_callback_add(Evas_Object *obj, const char *emission, const char *source, Edje_Signal_Cb func, void *data);
521 
522 /**
523  * @brief Remove a signal-triggered callback from a given layout widget.
524  *
525  * This function removes the last callback attached to a signal emitted by the
526  * underlying Edje object of @c obj, with parameters @c emission, @c source and
527  * @c func matching exactly those passed to a previous call to
528  * @ref elm_layout_signal_callback_add. The data pointer that was passed to
529  * this call will be returned.
530  *
531  * @param[in] emission The signal's name string.
532  * @param[in] source The signal's source string.
533  * @param[in] func The callback function being executed when the signal was
534  * emitted.
535  *
536  * @return The data pointer of the signal callback (passed on
537  * @ref elm_layout_signal_callback_add) or @c null on errors.
538  *
539  * @ingroup Elm_Layout
540  */
541 EAPI void *elm_layout_signal_callback_del(Evas_Object *obj, const char *emission, const char *source, Edje_Signal_Cb func);
542 
543 /**
544  * @brief Freezes the Elementary layout object.
545  *
546  * This function puts all changes on hold. Successive freezes will nest,
547  * requiring an equal number of thaws.
548  *
549  * See also @ref elm_layout_thaw.
550  *
551  * @return The frozen state or 0 on error.
552  *
553  * @ingroup Elm_Layout
554  */
555 EAPI int elm_layout_freeze(Evas_Object *obj);
556 
557 /**
558  * @brief Thaws the Elementary object.
559  *
560  * This function thaws the given Edje object and the Elementary sizing calc.
561  *
562  * @note If successive freezings were done, an equal number of thaws will be
563  * required.
564  *
565  * See also @ref elm_layout_freeze.
566  *
567  * @return The frozen state or 0 if the object is not frozen or on error.
568  *
569  * @ingroup Elm_Layout
570  */
571 EAPI int elm_layout_thaw(Evas_Object *obj);
572 
573 /**
574  * @brief Set the text of the given part.
575  *
576  * @param[in] part The TEXT part where to set the text.
577  * @param[in] text The text to set.
578  *
579  * @return @c true on success, @c false otherwise
580  *
581  * @ingroup Elm_Layout
582  */
583 EAPI Eina_Bool elm_layout_text_set(Evas_Object *obj, const char * part, const char *text);
584 
585 /**
586  * @brief Get the text set in the given part.
587  *
588  * @param[in] part The TEXT part where to set the text.
589  *
590  * @return The text to set.
591  *
592  * @ingroup Elm_Layout
593  */
594 EAPI const char *elm_layout_text_get(const Evas_Object *obj, const char * part);
595 
596 /**
597  * @brief Set accessibility to all texblock(text) parts in the layout object.
598  *
599  * @param[in] can_access Makes all textblock(text) parts in the layout @c obj
600  * possible to have accessibility. @c true means textblock(text) parts can be
601  * accessible.
602  *
603  * @return @c true on success or @c false on failure. If @c obj is not a proper
604  * layout object, @c false is returned.
605  *
606  * @since 1.7
607  *
608  * @ingroup Elm_Layout
609  */
610 EAPI Eina_Bool elm_layout_edje_object_can_access_set(Evas_Object *obj, Eina_Bool can_access);
611 
612 /**
613  * @brief Get accessibility state of texblock(text) parts in the layout object
614  *
615  * @return Makes all textblock(text) parts in the layout @c obj possible to
616  * have accessibility. @c true means textblock(text) parts can be accessible.
617  *
618  * @since 1.7
619  *
620  * @ingroup Elm_Layout
621  */
622 EAPI Eina_Bool elm_layout_edje_object_can_access_get(const Evas_Object *obj);
623 
624 /**
625  * @brief Sets if the cursor set should be searched on the theme or should use
626  * the provided by the engine, only.
627  *
628  * @note Before you set if should look on theme you should define a cursor with
629  * @ref elm_layout_part_cursor_set. By default it will only look for cursors
630  * provided by the engine.
631  *
632  * @param[in] part_name A part from loaded edje group.
633  * @param[in] engine_only If cursors should be just provided by the engine
634  * ($true) or should also search on widget's theme as well ($false)
635  *
636  * @return @c true on success or @c false on failure, that may be part not
637  * exists or it did not had a cursor set.
638  *
639  * @ingroup Elm_Layout
640  */
641 EAPI Eina_Bool elm_layout_part_cursor_engine_only_set(Evas_Object *obj, const char *part_name, Eina_Bool engine_only);
642 
643 /**
644  * @brief Get a specific cursor engine_only for an edje part.
645  *
646  * @param[in] part_name A part from loaded edje group.
647  *
648  * @return Whenever the cursor is just provided by engine or also from theme.
649  *
650  * @ingroup Elm_Layout
651  */
652 EAPI Eina_Bool elm_layout_part_cursor_engine_only_get(const Evas_Object *obj, const char *part_name);
653 
654 /**
655  * @brief Sets a specific cursor for an edje part.
656  *
657  * @param[in] part_name A part from loaded edje group.
658  * @param[in] cursor Cursor name to use, see Elementary_Cursor.h.
659  *
660  * @return @c true on success or @c false on failure, that may be part not
661  * exists or it has "mouse_events: 0".
662  *
663  * @ingroup Elm_Layout
664  */
665 EAPI Eina_Bool elm_layout_part_cursor_set(Evas_Object *obj, const char *part_name, const char *cursor);
666 
667 /**
668  * @brief Get the cursor to be shown when mouse is over an edje part.
669  *
670  * @param[in] part_name A part from loaded edje group.
671  *
672  * @return Cursor name
673  *
674  * @ingroup Elm_Layout
675  */
676 EAPI const char *elm_layout_part_cursor_get(const Evas_Object *obj, const char *part_name);
677 
678 /**
679  * @brief Sets a specific cursor style for an edje part.
680  *
681  * @param[in] part_name A part from loaded edje group.
682  * @param[in] style The theme style to use (default, transparent, ...).
683  *
684  * @return @c true on success or @c false on failure, that may be part not
685  * exists or it did not had a cursor set.
686  *
687  * @ingroup Elm_Layout
688  */
689 EAPI Eina_Bool elm_layout_part_cursor_style_set(Evas_Object *obj, const char *part_name, const char *style);
690 
691 /**
692  * @brief Get a specific cursor style for an edje part.
693  *
694  * @param[in] part_name A part from loaded edje group.
695  *
696  * @return The theme style in use, defaults to "default". If the object does
697  * not have a cursor set, then @c null is returned.
698  *
699  * @ingroup Elm_Layout
700  */
701 EAPI const char *elm_layout_part_cursor_style_get(const Evas_Object *obj, const char *part_name);
702 
703 /**
704  * @brief Unsets a cursor previously set with @ref elm_layout_part_cursor_set.
705  *
706  * @param[in] part_name A part from loaded edje group, that had a cursor set
707  * wit @ref elm_layout_part_cursor_set.
708  *
709  * @return @c true on success, @c false otherwise
710  *
711  * @ingroup Elm_Layout
712  */
713 EAPI Eina_Bool elm_layout_part_cursor_unset(Evas_Object *obj, const char *part_name);
714