2013-04-25 22:13:00 -07:00
# ifdef HAVE_CONFIG_H
# include "elementary_config.h"
# endif
2012-01-12 01:10:27 -08:00
# include <Elementary.h>
2012-08-06 05:05:53 -07:00
# include <Elementary_Cursor.h>
2013-04-25 22:13:00 -07:00
2008-09-29 23:58:56 -07:00
# include "elm_priv.h"
2013-01-17 14:11:27 -08:00
# include "elm_widget_menu.h"
2012-05-03 15:42:15 -07:00
2012-11-25 22:32:53 -08:00
EAPI Eo_Op ELM_OBJ_WIN_BASE_ID = EO_NOOP ;
# define MY_CLASS ELM_OBJ_WIN_CLASS
# define MY_CLASS_NAME "elm_win"
2012-05-03 15:42:15 -07:00
2012-07-18 21:35:50 -07:00
static const Elm_Win_Trap * trap = NULL ;
# define TRAP(sd, name, ...) \
do \
{ \
if ( ( ! trap ) | | ( ! trap - > name ) | | \
( ( trap - > name ) & & \
2012-11-25 22:32:53 -08:00
( trap - > name ( sd - > trap_data , sd - > obj , # # __VA_ARGS__ ) ) ) ) \
2012-07-18 21:35:50 -07:00
ecore_evas_ # # name ( sd - > ee , # # __VA_ARGS__ ) ; \
} \
while ( 0 )
2012-05-03 15:42:15 -07:00
# define ELM_WIN_DATA_GET(o, sd) \
2013-04-24 04:41:37 -07:00
Elm_Win_Smart_Data * sd = eo_data_scope_get ( o , MY_CLASS )
2012-05-03 15:42:15 -07:00
# define ELM_WIN_DATA_GET_OR_RETURN(o, ptr) \
ELM_WIN_DATA_GET ( o , ptr ) ; \
if ( ! ptr ) \
{ \
CRITICAL ( " No widget data for object %p (%s) " , \
o , evas_object_type_get ( o ) ) ; \
return ; \
}
# define ELM_WIN_DATA_GET_OR_RETURN_VAL(o, ptr, val) \
ELM_WIN_DATA_GET ( o , ptr ) ; \
if ( ! ptr ) \
{ \
CRITICAL ( " No widget data for object %p (%s) " , \
o , evas_object_type_get ( o ) ) ; \
return val ; \
}
# define ELM_WIN_CHECK(obj) \
2012-11-25 22:32:53 -08:00
if ( ! obj | | ! eo_isa ( obj , MY_CLASS ) ) \
2012-05-03 15:42:15 -07:00
return
2012-08-20 00:09:44 -07:00
# define ENGINE_GET() (_elm_preferred_engine ? _elm_preferred_engine : (_elm_config->engine ? _elm_config->engine : ""))
# define ENGINE_COMPARE(name) (!strcmp(ENGINE_GET(), name))
2012-12-19 10:07:09 -08:00
# define EE_ENGINE_COMPARE(ee, name) (!strcmp(ecore_evas_engine_name_get(ee), name))
2012-06-15 07:11:47 -07:00
2012-05-03 15:42:15 -07:00
typedef struct _Elm_Win_Smart_Data Elm_Win_Smart_Data ;
struct _Elm_Win_Smart_Data
{
2012-07-17 11:46:18 -07:00
Ecore_Evas * ee ;
Evas * evas ;
Evas_Object * parent ; /* parent *window* object*/
Evas_Object * img_obj , * frame_obj ;
2013-01-17 14:11:15 -08:00
Eo * layout ;
Eo * box ;
2012-11-25 22:32:53 -08:00
Evas_Object * obj ; /* The object itself */
2010-04-12 01:27:10 -07:00
# ifdef HAVE_ELEMENTARY_X
2012-06-06 01:25:12 -07:00
struct
{
2012-07-17 11:46:18 -07:00
Ecore_X_Window xwin ;
Ecore_Event_Handler * client_message_handler ;
2012-11-19 08:51:44 -08:00
Ecore_Event_Handler * property_handler ;
2012-06-06 01:25:12 -07:00
} x ;
2010-09-24 09:41:25 -07:00
# endif
2012-06-06 06:55:15 -07:00
# ifdef HAVE_ELEMENTARY_WAYLAND
struct
{
2012-07-17 11:46:18 -07:00
Ecore_Wl_Window * win ;
2012-06-06 06:55:15 -07:00
} wl ;
# endif
2012-05-03 15:42:15 -07:00
Ecore_Job * deferred_resize_job ;
Ecore_Job * deferred_child_eval_job ;
2009-11-14 17:51:39 -08:00
2012-05-03 15:42:15 -07:00
Elm_Win_Type type ;
Elm_Win_Keyboard_Mode kbdmode ;
Elm_Win_Indicator_Mode indmode ;
2012-03-07 06:27:36 -08:00
Elm_Win_Indicator_Opacity_Mode ind_o_mode ;
2012-03-28 02:02:22 -07:00
struct
2012-05-03 15:42:15 -07:00
{
const char * info ;
Ecore_Timer * timer ;
int repeat_count ;
int shot_counter ;
} shot ;
int resize_location ;
int * autodel_clear , rot ;
2012-03-28 02:02:22 -07:00
struct
2012-05-03 15:42:15 -07:00
{
int x , y ;
} screen ;
2012-03-28 02:02:22 -07:00
struct
2012-05-03 15:42:15 -07:00
{
Ecore_Evas * ee ;
Evas * evas ;
Evas_Object * obj , * hot_obj ;
int hot_x , hot_y ;
} pointer ;
2012-03-28 02:02:22 -07:00
struct
2012-05-03 15:42:15 -07:00
{
2013-08-04 01:37:30 -07:00
Evas_Object * fobj ; /* focus highlight edje object */
2010-10-04 05:48:15 -07:00
2012-05-03 15:42:15 -07:00
struct
{
Evas_Object * target ;
Eina_Bool visible : 1 ;
Eina_Bool handled : 1 ;
} cur , prev ;
Begins highlight on focused object.
There's still work to do here, particularly in the theme, but it has
something nice and fun to see the code working.
The idea behind this:
Window tracks focused object and sends the highlight object(s) to it. These
are simple edje objects, one on top, one below the focused widget for nice
effects. Widgets can choose to ignore the highlight and this will be sent to
the parent object, if it doesn't ignore it as well.
About the bottom object, it doesn't work now. For the most part, focused
widget will always be a member of some smart object, so stacking won't work
and the desired effect is nowhere to be seen. This will be worked out later.
To be done now:
- Let the theme for a widget define its own highlight, disabling if needed
the standard one for those objects.
- Needed base in code to allow animations when switching focus. All in theme.
- Properly test all widgets and fix some things that will most likely work
in weird ways, given the nature of Evas/Edje and how Elementary makes use
of them.
- Forgot the rest, stay tuned, test, report, give ideas, plant a tree.
Work started by glima, continued with some refactors by me when he
decided he needed vacations.
SVN revision: 52524
2010-09-20 15:18:58 -07:00
2012-05-03 15:42:15 -07:00
const char * style ;
Ecore_Job * reconf_job ;
Begins highlight on focused object.
There's still work to do here, particularly in the theme, but it has
something nice and fun to see the code working.
The idea behind this:
Window tracks focused object and sends the highlight object(s) to it. These
are simple edje objects, one on top, one below the focused widget for nice
effects. Widgets can choose to ignore the highlight and this will be sent to
the parent object, if it doesn't ignore it as well.
About the bottom object, it doesn't work now. For the most part, focused
widget will always be a member of some smart object, so stacking won't work
and the desired effect is nowhere to be seen. This will be worked out later.
To be done now:
- Let the theme for a widget define its own highlight, disabling if needed
the standard one for those objects.
- Needed base in code to allow animations when switching focus. All in theme.
- Properly test all widgets and fix some things that will most likely work
in weird ways, given the nature of Evas/Edje and how Elementary makes use
of them.
- Forgot the rest, stay tuned, test, report, give ideas, plant a tree.
Work started by glima, continued with some refactors by me when he
decided he needed vacations.
SVN revision: 52524
2010-09-20 15:18:58 -07:00
2012-05-03 15:42:15 -07:00
Eina_Bool enabled : 1 ;
2013-08-04 01:09:44 -07:00
Eina_Bool theme_changed : 1 ; /* set true when the focus theme is changed */
2013-08-04 01:52:54 -07:00
Eina_Bool animate : 1 ; /* set true when the focus highlight animate is enabled */
2013-08-11 02:58:28 -07:00
Eina_Bool animate_supported : 1 ; /* set true when the focus highlight animate is supported by theme */
2012-05-03 15:42:15 -07:00
Eina_Bool geometry_changed : 1 ;
} focus_highlight ;
2012-02-28 03:20:35 -08:00
2012-02-29 04:06:12 -08:00
Evas_Object * icon ;
2012-05-03 15:42:15 -07:00
const char * title ;
const char * icon_name ;
const char * role ;
2012-12-27 05:38:33 -08:00
Evas_Object * main_menu ;
2012-12-04 22:50:27 -08:00
struct
{
const char * name ;
const char * * available_list ;
unsigned int count ;
} profile ;
2012-07-18 21:35:50 -07:00
void * trap_data ;
2012-05-03 15:42:15 -07:00
double aspect ;
2012-06-12 03:15:19 -07:00
int size_base_w , size_base_h ;
int size_step_w , size_step_h ;
2012-08-21 01:48:47 -07:00
int norender ;
2012-05-03 15:42:15 -07:00
Eina_Bool urgent : 1 ;
Eina_Bool modal : 1 ;
Eina_Bool demand_attention : 1 ;
Eina_Bool autodel : 1 ;
Eina_Bool constrain : 1 ;
Eina_Bool resizing : 1 ;
Eina_Bool iconified : 1 ;
Eina_Bool withdrawn : 1 ;
Eina_Bool sticky : 1 ;
Eina_Bool fullscreen : 1 ;
Eina_Bool maximized : 1 ;
Eina_Bool skip_focus : 1 ;
2012-09-14 06:06:57 -07:00
Eina_Bool floating : 1 ;
2008-09-29 23:58:56 -07:00
} ;
2011-04-21 17:42:32 -07:00
static const char SIG_DELETE_REQUEST [ ] = " delete,request " ;
elm: added more "focused" and "unfocused" documentations.
genlist, hover, index, list, map, photocam, progressbar, radio, scroller, slider, slideshow, spinner, toolbar, win.
2013-06-09 22:12:51 -07:00
static const char SIG_FOCUS_OUT [ ] = " focus,out " ; // deprecated. use "focused" instead.
static const char SIG_FOCUS_IN [ ] = " focus,in " ; // deprecated. use "unfocused" instead.
2011-04-21 17:42:32 -07:00
static const char SIG_MOVED [ ] = " moved " ;
2012-02-28 03:20:35 -08:00
static const char SIG_WITHDRAWN [ ] = " withdrawn " ;
static const char SIG_ICONIFIED [ ] = " iconified " ;
static const char SIG_NORMAL [ ] = " normal " ;
static const char SIG_STICK [ ] = " stick " ;
static const char SIG_UNSTICK [ ] = " unstick " ;
static const char SIG_FULLSCREEN [ ] = " fullscreen " ;
static const char SIG_UNFULLSCREEN [ ] = " unfullscreen " ;
static const char SIG_MAXIMIZED [ ] = " maximized " ;
static const char SIG_UNMAXIMIZED [ ] = " unmaximized " ;
2012-08-05 21:09:02 -07:00
static const char SIG_IOERR [ ] = " ioerr " ;
2012-09-02 23:55:07 -07:00
static const char SIG_INDICATOR_PROP_CHANGED [ ] = " indicator,prop,changed " ;
static const char SIG_ROTATION_CHANGED [ ] = " rotation,changed " ;
2012-12-04 22:50:27 -08:00
static const char SIG_PROFILE_CHANGED [ ] = " profile,changed " ;
elm: added more "focused" and "unfocused" documentations.
genlist, hover, index, list, map, photocam, progressbar, radio, scroller, slider, slideshow, spinner, toolbar, win.
2013-06-09 22:12:51 -07:00
static const char SIG_FOCUSED [ ] = " focused " ;
static const char SIG_UNFOCUSED [ ] = " unfocused " ;
2011-04-21 17:42:32 -07:00
2012-05-03 15:42:15 -07:00
static const Evas_Smart_Cb_Description _smart_callbacks [ ] = {
2011-04-21 17:42:32 -07:00
{ SIG_DELETE_REQUEST , " " } ,
{ SIG_FOCUS_OUT , " " } ,
{ SIG_FOCUS_IN , " " } ,
{ SIG_MOVED , " " } ,
2012-02-28 03:20:35 -08:00
{ SIG_WITHDRAWN , " " } ,
{ SIG_ICONIFIED , " " } ,
{ SIG_NORMAL , " " } ,
{ SIG_STICK , " " } ,
{ SIG_UNSTICK , " " } ,
{ SIG_FULLSCREEN , " " } ,
{ SIG_UNFULLSCREEN , " " } ,
{ SIG_MAXIMIZED , " " } ,
{ SIG_UNMAXIMIZED , " " } ,
2012-08-05 21:09:02 -07:00
{ SIG_IOERR , " " } ,
2012-09-02 23:55:07 -07:00
{ SIG_INDICATOR_PROP_CHANGED , " " } ,
{ SIG_ROTATION_CHANGED , " " } ,
2012-12-04 22:50:27 -08:00
{ SIG_PROFILE_CHANGED , " " } ,
elm: added more "focused" and "unfocused" documentations.
genlist, hover, index, list, map, photocam, progressbar, radio, scroller, slider, slideshow, spinner, toolbar, win.
2013-06-09 22:12:51 -07:00
{ SIG_FOCUSED , " " } ,
{ SIG_UNFOCUSED , " " } ,
2011-04-21 17:42:32 -07:00
{ NULL , NULL }
} ;
2010-04-12 01:27:10 -07:00
Eina_List * _elm_win_list = NULL ;
2011-03-09 22:35:33 -08:00
int _elm_win_deferred_free = 0 ;
2008-10-06 18:23:49 -07:00
2012-08-28 03:37:02 -07:00
static int _elm_win_count = 0 ;
static Eina_Bool _elm_win_auto_throttled = EINA_FALSE ;
static Ecore_Job * _elm_win_state_eval_job = NULL ;
2013-01-17 14:11:15 -08:00
static void
_elm_win_on_resize_obj_changed_size_hints ( void * data ,
Evas * e ,
Evas_Object * obj ,
void * event_info ) ;
2013-03-20 01:37:40 -07:00
EAPI double _elm_startup_time = 0 ;
static void
2013-08-11 01:30:56 -07:00
_elm_win_first_frame_do ( void * data , Evas * e EINA_UNUSED , void * event_info EINA_UNUSED )
2013-03-20 01:37:40 -07:00
{
double end = ecore_time_unix_get ( ) ;
2013-08-11 01:30:56 -07:00
char * first = data ;
2013-03-20 01:37:40 -07:00
switch ( * first )
{
case ' A ' : abort ( ) ;
case ' E ' :
case ' D ' : exit ( - 1 ) ;
2013-08-01 04:03:19 -07:00
case ' T ' : fprintf ( stderr , " Startup time: '%f' - '%f' = '%f' sec \n " , end , _elm_startup_time , end - _elm_startup_time ) ;
2013-08-11 01:30:56 -07:00
break ;
2013-03-20 01:37:40 -07:00
}
2013-08-11 01:30:56 -07:00
evas_event_callback_del_full ( e , EVAS_CALLBACK_RENDER_POST , _elm_win_first_frame_do , data ) ;
2013-03-20 01:37:40 -07:00
}
2012-08-28 03:37:02 -07:00
static void
_elm_win_state_eval ( void * data __UNUSED__ )
{
Eina_List * l ;
Evas_Object * obj ;
2013-01-14 01:46:25 -08:00
int _elm_win_count_shown = 0 ;
int _elm_win_count_iconified = 0 ;
int _elm_win_count_withdrawn = 0 ;
2012-10-10 17:35:00 -07:00
2012-08-28 03:37:02 -07:00
_elm_win_state_eval_job = NULL ;
2012-10-10 17:35:00 -07:00
2012-08-28 03:37:02 -07:00
if ( _elm_config - > auto_norender_withdrawn )
{
EINA_LIST_FOREACH ( _elm_win_list , l , obj )
{
if ( ( elm_win_withdrawn_get ( obj ) ) | |
2012-10-10 17:35:00 -07:00
( ( elm_win_iconified_get ( obj ) & &
2012-08-28 03:37:02 -07:00
( _elm_config - > auto_norender_iconified_same_as_withdrawn ) ) ) )
{
if ( ! evas_object_data_get ( obj , " __win_auto_norender " ) )
{
Evas * evas = evas_object_evas_get ( obj ) ;
2012-10-10 17:35:00 -07:00
2012-08-28 03:37:02 -07:00
elm_win_norender_push ( obj ) ;
evas_object_data_set ( obj , " __win_auto_norender " , obj ) ;
2012-10-10 17:35:00 -07:00
2012-08-28 03:37:02 -07:00
if ( _elm_config - > auto_flush_withdrawn )
{
edje_file_cache_flush ( ) ;
edje_collection_cache_flush ( ) ;
evas_image_cache_flush ( evas ) ;
evas_font_cache_flush ( evas ) ;
}
if ( _elm_config - > auto_dump_withdrawn )
{
evas_render_dump ( evas ) ;
}
}
}
else
{
if ( evas_object_data_get ( obj , " __win_auto_norender " ) )
{
elm_win_norender_pop ( obj ) ;
evas_object_data_del ( obj , " __win_auto_norender " ) ;
}
}
}
}
2013-07-25 06:17:52 -07:00
if ( ( ( _elm_config - > auto_throttle ) & &
( elm_policy_get ( ELM_POLICY_THROTTLE ) ! = ELM_POLICY_THROTTLE_NEVER ) ) | |
( elm_policy_get ( ELM_POLICY_THROTTLE ) = = ELM_POLICY_THROTTLE_HIDDEN_ALWAYS ) )
2012-08-28 03:37:02 -07:00
{
if ( _elm_win_count = = 0 )
{
if ( _elm_win_auto_throttled )
{
ecore_throttle_adjust ( - _elm_config - > auto_throttle_amount ) ;
_elm_win_auto_throttled = EINA_FALSE ;
}
}
else
{
2013-01-14 01:46:25 -08:00
EINA_LIST_FOREACH ( _elm_win_list , l , obj )
{
if ( elm_win_withdrawn_get ( obj ) )
_elm_win_count_withdrawn + + ;
else if ( elm_win_iconified_get ( obj ) )
_elm_win_count_iconified + + ;
else if ( evas_object_visible_get ( obj ) )
_elm_win_count_shown + + ;
}
if ( _elm_win_count_shown < = 0 )
2012-08-28 03:37:02 -07:00
{
if ( ! _elm_win_auto_throttled )
{
ecore_throttle_adjust ( _elm_config - > auto_throttle_amount ) ;
_elm_win_auto_throttled = EINA_TRUE ;
}
}
else
{
if ( _elm_win_auto_throttled )
{
ecore_throttle_adjust ( - _elm_config - > auto_throttle_amount ) ;
_elm_win_auto_throttled = EINA_FALSE ;
}
}
}
}
}
static void
_elm_win_state_eval_queue ( void )
{
if ( _elm_win_state_eval_job ) ecore_job_del ( _elm_win_state_eval_job ) ;
_elm_win_state_eval_job = ecore_job_add ( _elm_win_state_eval , NULL ) ;
}
2012-05-16 00:28:29 -07:00
// example shot spec (wait 0.1 sec then save as my-window.png):
2011-05-04 03:09:59 -07:00
// ELM_ENGINE="shot:delay=0.1:file=my-window.png"
static double
2012-05-03 15:42:15 -07:00
_shot_delay_get ( Elm_Win_Smart_Data * sd )
2011-05-04 03:09:59 -07:00
{
char * p , * pd ;
2012-05-03 15:42:15 -07:00
char * d = strdup ( sd - > shot . info ) ;
2011-05-07 01:37:47 -07:00
2011-05-04 03:09:59 -07:00
if ( ! d ) return 0.5 ;
2012-05-03 15:42:15 -07:00
for ( p = ( char * ) sd - > shot . info ; * p ; p + + )
2011-05-04 03:09:59 -07:00
{
if ( ! strncmp ( p , " delay= " , 6 ) )
{
double v ;
2011-05-07 01:37:47 -07:00
2011-05-04 03:09:59 -07:00
for ( pd = d , p + = 6 ; ( * p ) & & ( * p ! = ' : ' ) ; p + + , pd + + )
{
* pd = * p ;
}
* pd = 0 ;
2012-04-25 20:32:18 -07:00
v = _elm_atof ( d ) ;
2011-05-04 03:09:59 -07:00
free ( d ) ;
return v ;
}
}
free ( d ) ;
2012-05-03 15:42:15 -07:00
2011-05-04 03:09:59 -07:00
return 0.5 ;
}
static char *
2012-05-03 15:42:15 -07:00
_shot_file_get ( Elm_Win_Smart_Data * sd )
2011-05-04 03:09:59 -07:00
{
char * p ;
2012-05-03 15:42:15 -07:00
char * tmp = strdup ( sd - > shot . info ) ;
2011-07-05 01:17:39 -07:00
char * repname = NULL ;
2011-05-07 01:37:47 -07:00
2011-05-04 03:09:59 -07:00
if ( ! tmp ) return NULL ;
2011-07-05 01:17:39 -07:00
2012-05-03 15:42:15 -07:00
for ( p = ( char * ) sd - > shot . info ; * p ; p + + )
2011-05-04 03:09:59 -07:00
{
if ( ! strncmp ( p , " file= " , 5 ) )
{
strcpy ( tmp , p + 5 ) ;
2012-05-03 15:42:15 -07:00
if ( ! sd - > shot . repeat_count ) return tmp ;
2011-07-05 01:17:39 -07:00
else
{
2011-07-10 21:15:42 -07:00
char * dotptr = strrchr ( tmp , ' . ' ) ;
2011-07-05 01:17:39 -07:00
if ( dotptr )
{
2012-05-03 15:42:15 -07:00
size_t size = sizeof ( char ) * ( strlen ( tmp ) + 16 ) ;
2012-01-02 21:30:13 -08:00
repname = malloc ( size ) ;
2011-07-05 01:17:39 -07:00
strncpy ( repname , tmp , dotptr - tmp ) ;
2012-05-03 15:42:15 -07:00
snprintf ( repname + ( dotptr - tmp ) , size -
( dotptr - tmp ) , " %03i " ,
sd - > shot . shot_counter + 1 ) ;
2011-07-05 01:17:39 -07:00
strcat ( repname , dotptr ) ;
2011-10-16 23:53:10 -07:00
free ( tmp ) ;
2011-07-05 01:17:39 -07:00
return repname ;
}
}
2011-05-04 03:09:59 -07:00
}
}
free ( tmp ) ;
2012-05-03 15:42:15 -07:00
if ( ! sd - > shot . repeat_count ) return strdup ( " out.png " ) ;
2012-01-02 21:30:13 -08:00
repname = malloc ( sizeof ( char ) * 24 ) ;
2012-05-03 15:42:15 -07:00
snprintf ( repname , sizeof ( char ) * 24 , " out%03i.png " ,
sd - > shot . shot_counter + 1 ) ;
2012-01-02 21:30:13 -08:00
return repname ;
2011-07-05 01:17:39 -07:00
}
static int
2012-05-03 15:42:15 -07:00
_shot_repeat_count_get ( Elm_Win_Smart_Data * sd )
2011-07-05 01:17:39 -07:00
{
char * p , * pd ;
2012-05-03 15:42:15 -07:00
char * d = strdup ( sd - > shot . info ) ;
2011-07-05 01:17:39 -07:00
if ( ! d ) return 0 ;
2012-05-03 15:42:15 -07:00
for ( p = ( char * ) sd - > shot . info ; * p ; p + + )
2011-07-05 01:17:39 -07:00
{
if ( ! strncmp ( p , " repeat= " , 7 ) )
{
int v ;
for ( pd = d , p + = 7 ; ( * p ) & & ( * p ! = ' : ' ) ; p + + , pd + + )
{
* pd = * p ;
}
* pd = 0 ;
v = atoi ( d ) ;
if ( v < 0 ) v = 0 ;
if ( v > 1000 ) v = 999 ;
free ( d ) ;
return v ;
}
}
free ( d ) ;
2012-05-03 15:42:15 -07:00
2011-07-05 01:17:39 -07:00
return 0 ;
2011-05-04 03:09:59 -07:00
}
static char *
2012-05-03 15:42:15 -07:00
_shot_key_get ( Elm_Win_Smart_Data * sd __UNUSED__ )
2011-05-04 03:09:59 -07:00
{
return NULL ;
}
static char *
2012-05-03 15:42:15 -07:00
_shot_flags_get ( Elm_Win_Smart_Data * sd __UNUSED__ )
2011-05-04 03:09:59 -07:00
{
return NULL ;
}
static void
2012-05-03 15:42:15 -07:00
_shot_do ( Elm_Win_Smart_Data * sd )
2011-05-04 03:09:59 -07:00
{
Ecore_Evas * ee ;
Evas_Object * o ;
unsigned int * pixels ;
int w , h ;
char * file , * key , * flags ;
2012-05-03 15:42:15 -07:00
ecore_evas_manual_render ( sd - > ee ) ;
pixels = ( void * ) ecore_evas_buffer_pixels_get ( sd - > ee ) ;
2011-05-04 03:09:59 -07:00
if ( ! pixels ) return ;
2012-05-03 15:42:15 -07:00
ecore_evas_geometry_get ( sd - > ee , NULL , NULL , & w , & h ) ;
2011-05-04 03:09:59 -07:00
if ( ( w < 1 ) | | ( h < 1 ) ) return ;
2012-05-03 15:42:15 -07:00
file = _shot_file_get ( sd ) ;
2011-05-04 03:09:59 -07:00
if ( ! file ) return ;
2012-05-03 15:42:15 -07:00
key = _shot_key_get ( sd ) ;
flags = _shot_flags_get ( sd ) ;
2011-05-04 03:09:59 -07:00
ee = ecore_evas_buffer_new ( 1 , 1 ) ;
o = evas_object_image_add ( ecore_evas_get ( ee ) ) ;
2012-05-03 15:42:15 -07:00
evas_object_image_alpha_set ( o , ecore_evas_alpha_get ( sd - > ee ) ) ;
2011-05-04 03:09:59 -07:00
evas_object_image_size_set ( o , w , h ) ;
evas_object_image_data_set ( o , pixels ) ;
if ( ! evas_object_image_save ( o , file , key , flags ) )
{
ERR ( " Cannot save window to '%s' (key '%s', flags '%s') " ,
file , key , flags ) ;
}
free ( file ) ;
if ( key ) free ( key ) ;
if ( flags ) free ( flags ) ;
ecore_evas_free ( ee ) ;
2012-05-03 15:42:15 -07:00
if ( sd - > shot . repeat_count ) sd - > shot . shot_counter + + ;
2011-05-04 03:09:59 -07:00
}
static Eina_Bool
_shot_delay ( void * data )
{
2013-04-24 04:41:37 -07:00
ELM_WIN_DATA_GET ( data , sd ) ;
2012-05-03 15:42:15 -07:00
_shot_do ( sd ) ;
if ( sd - > shot . repeat_count )
2011-07-05 01:17:39 -07:00
{
2012-05-03 15:42:15 -07:00
int remainshot = ( sd - > shot . repeat_count - sd - > shot . shot_counter ) ;
2011-07-05 01:17:39 -07:00
if ( remainshot > 0 ) return EINA_TRUE ;
2011-07-05 09:59:23 -07:00
}
2012-05-03 15:42:15 -07:00
sd - > shot . timer = NULL ;
2011-05-04 03:09:59 -07:00
elm_exit ( ) ;
2012-05-03 15:42:15 -07:00
2011-05-04 03:09:59 -07:00
return EINA_FALSE ;
}
2011-07-05 01:17:39 -07:00
static void
2012-05-03 15:42:15 -07:00
_shot_init ( Elm_Win_Smart_Data * sd )
2011-07-05 01:17:39 -07:00
{
2012-05-03 15:42:15 -07:00
if ( ! sd - > shot . info ) return ;
sd - > shot . repeat_count = _shot_repeat_count_get ( sd ) ;
sd - > shot . shot_counter = 0 ;
2011-07-05 01:17:39 -07:00
}
2011-05-04 03:09:59 -07:00
static void
2012-05-03 15:42:15 -07:00
_shot_handle ( Elm_Win_Smart_Data * sd )
2011-05-04 03:09:59 -07:00
{
2012-05-03 15:42:15 -07:00
if ( ! sd - > shot . info ) return ;
2013-05-20 03:09:13 -07:00
if ( ! sd - > shot . timer )
sd - > shot . timer = ecore_timer_add ( _shot_delay_get ( sd ) , _shot_delay ,
sd - > obj ) ;
2011-05-04 03:09:59 -07:00
}
2012-07-18 21:35:50 -07:00
/* elm-win specific associate, does the trap while ecore_evas_object_associate()
* does not .
*/
static Elm_Win_Smart_Data *
_elm_win_associate_get ( const Ecore_Evas * ee )
{
2013-04-24 04:41:37 -07:00
ELM_WIN_DATA_GET ( ecore_evas_data_get ( ee , " elm_win " ) , sd ) ;
return sd ;
2012-07-18 21:35:50 -07:00
}
/* Interceptors Callbacks */
static void
_elm_win_obj_intercept_raise ( void * data , Evas_Object * obj __UNUSED__ )
{
2013-04-24 04:41:37 -07:00
ELM_WIN_DATA_GET ( data , sd ) ;
2012-07-18 21:35:50 -07:00
TRAP ( sd , raise ) ;
}
static void
_elm_win_obj_intercept_lower ( void * data , Evas_Object * obj __UNUSED__ )
{
2013-04-24 04:41:37 -07:00
ELM_WIN_DATA_GET ( data , sd ) ;
2012-07-18 21:35:50 -07:00
TRAP ( sd , lower ) ;
}
static void
_elm_win_obj_intercept_stack_above ( void * data __UNUSED__ , Evas_Object * obj __UNUSED__ , Evas_Object * above __UNUSED__ )
{
INF ( " TODO: %s " , __FUNCTION__ ) ;
}
static void
_elm_win_obj_intercept_stack_below ( void * data __UNUSED__ , Evas_Object * obj __UNUSED__ , Evas_Object * below __UNUSED__ )
{
INF ( " TODO: %s " , __FUNCTION__ ) ;
}
static void
_elm_win_obj_intercept_layer_set ( void * data , Evas_Object * obj __UNUSED__ , int l )
{
2013-04-24 04:41:37 -07:00
ELM_WIN_DATA_GET ( data , sd ) ;
2012-07-18 21:35:50 -07:00
TRAP ( sd , layer_set , l ) ;
}
/* Event Callbacks */
static void
_elm_win_obj_callback_changed_size_hints ( void * data , Evas * e __UNUSED__ , Evas_Object * obj , void * event_info __UNUSED__ )
{
2013-04-24 04:41:37 -07:00
ELM_WIN_DATA_GET ( data , sd ) ;
2012-07-18 21:35:50 -07:00
Evas_Coord w , h ;
evas_object_size_hint_min_get ( obj , & w , & h ) ;
TRAP ( sd , size_min_set , w , h ) ;
evas_object_size_hint_max_get ( obj , & w , & h ) ;
if ( w < 1 ) w = - 1 ;
if ( h < 1 ) h = - 1 ;
TRAP ( sd , size_max_set , w , h ) ;
}
/* end of elm-win specific associate */
2009-12-01 03:03:14 -08:00
static void
_elm_win_move ( Ecore_Evas * ee )
{
2012-07-18 21:35:50 -07:00
Elm_Win_Smart_Data * sd = _elm_win_associate_get ( ee ) ;
2009-12-01 03:03:14 -08:00
int x , y ;
2010-09-24 09:41:25 -07:00
2012-07-18 21:35:50 -07:00
EINA_SAFETY_ON_NULL_RETURN ( sd ) ;
2012-05-03 15:42:15 -07:00
2009-12-01 03:03:14 -08:00
ecore_evas_geometry_get ( ee , & x , & y , NULL , NULL ) ;
2012-05-03 15:42:15 -07:00
sd - > screen . x = x ;
sd - > screen . y = y ;
2012-11-25 22:32:53 -08:00
evas_object_smart_callback_call ( sd - > obj , SIG_MOVED , NULL ) ;
2012-05-03 15:42:15 -07:00
}
static void
_elm_win_resize_job ( void * data )
{
2013-04-24 04:41:37 -07:00
ELM_WIN_DATA_GET ( data , sd ) ;
2012-05-03 15:42:15 -07:00
int w , h ;
sd - > deferred_resize_job = NULL ;
ecore_evas_request_geometry_get ( sd - > ee , NULL , NULL , & w , & h ) ;
if ( sd - > constrain )
{
int sw , sh ;
ecore_evas_screen_geometry_get ( sd - > ee , NULL , NULL , & sw , & sh ) ;
w = MIN ( w , sw ) ;
h = MIN ( h , sh ) ;
}
2012-07-30 03:06:28 -07:00
2012-05-03 15:42:15 -07:00
if ( sd - > frame_obj )
2013-03-25 10:50:12 -07:00
{
2013-04-29 07:25:02 -07:00
int fx , fy , fw , fh ;
2013-03-25 10:50:12 -07:00
2013-04-29 07:25:02 -07:00
evas_output_framespace_get ( sd - > evas , & fx , & fy , & fw , & fh ) ;
2013-03-25 10:50:12 -07:00
evas_object_resize ( sd - > frame_obj , w + fw , h + fh ) ;
2013-04-29 07:25:02 -07:00
evas_object_move ( sd - > frame_obj , - fx , - fy ) ;
2013-03-25 10:50:12 -07:00
}
2012-08-22 02:21:28 -07:00
2012-11-25 22:32:53 -08:00
evas_object_resize ( sd - > obj , w , h ) ;
2013-01-17 14:11:21 -08:00
evas_object_resize ( sd - > layout , w , h ) ;
2009-12-01 03:03:14 -08:00
}
2008-09-29 23:58:56 -07:00
static void
2008-10-06 18:23:49 -07:00
_elm_win_resize ( Ecore_Evas * ee )
2008-09-29 23:58:56 -07:00
{
2012-07-18 21:35:50 -07:00
Elm_Win_Smart_Data * sd = _elm_win_associate_get ( ee ) ;
EINA_SAFETY_ON_NULL_RETURN ( sd ) ;
2012-05-03 15:42:15 -07:00
if ( sd - > deferred_resize_job ) ecore_job_del ( sd - > deferred_resize_job ) ;
2013-04-24 04:41:37 -07:00
sd - > deferred_resize_job = ecore_job_add ( _elm_win_resize_job , sd - > obj ) ;
2008-09-29 23:58:56 -07:00
}
2012-03-28 02:02:22 -07:00
static void
2012-01-08 03:23:59 -08:00
_elm_win_mouse_in ( Ecore_Evas * ee )
{
2012-07-18 21:35:50 -07:00
Elm_Win_Smart_Data * sd = _elm_win_associate_get ( ee ) ;
EINA_SAFETY_ON_NULL_RETURN ( sd ) ;
2012-05-03 15:42:15 -07:00
if ( sd - > resizing ) sd - > resizing = EINA_FALSE ;
}
static void
_elm_win_focus_highlight_reconfigure_job_stop ( Elm_Win_Smart_Data * sd )
{
2013-05-29 05:11:46 -07:00
ELM_SAFE_FREE ( sd - > focus_highlight . reconf_job , ecore_job_del ) ;
2012-05-03 15:42:15 -07:00
}
static void
_elm_win_focus_highlight_visible_set ( Elm_Win_Smart_Data * sd ,
Eina_Bool visible )
{
2013-08-04 01:38:02 -07:00
Evas_Object * fobj = sd - > focus_highlight . fobj ;
if ( ! fobj ) return ;
2012-05-03 15:42:15 -07:00
if ( visible )
{
2013-08-04 01:38:02 -07:00
evas_object_show ( fobj ) ;
edje_object_signal_emit ( fobj , " elm,action,focus,show " , " elm " ) ;
2012-05-03 15:42:15 -07:00
}
else
{
2013-08-04 01:38:02 -07:00
edje_object_signal_emit ( fobj , " elm,action,focus,hide " , " elm " ) ;
2012-05-03 15:42:15 -07:00
}
}
static void
_elm_win_focus_highlight_anim_setup ( Elm_Win_Smart_Data * sd ,
Evas_Object * obj )
{
Evas_Coord tx , ty , tw , th ;
Evas_Coord w , h , px , py , pw , ph ;
Edje_Message_Int_Set * m ;
Evas_Object * previous = sd - > focus_highlight . prev . target ;
Evas_Object * target = sd - > focus_highlight . cur . target ;
2012-11-25 22:32:53 -08:00
evas_object_geometry_get ( sd - > obj , NULL , NULL , & w , & h ) ;
2012-05-03 15:42:15 -07:00
evas_object_geometry_get ( target , & tx , & ty , & tw , & th ) ;
evas_object_geometry_get ( previous , & px , & py , & pw , & ph ) ;
2013-03-04 03:16:35 -08:00
evas_object_move ( obj , tx , ty ) ;
2012-05-03 15:42:15 -07:00
evas_object_resize ( obj , tw , th ) ;
evas_object_clip_unset ( obj ) ;
m = alloca ( sizeof ( * m ) + ( sizeof ( int ) * 8 ) ) ;
m - > count = 8 ;
2013-03-04 03:16:35 -08:00
m - > val [ 0 ] = px - tx ;
m - > val [ 1 ] = py - ty ;
2012-05-03 15:42:15 -07:00
m - > val [ 2 ] = pw ;
m - > val [ 3 ] = ph ;
2013-03-04 03:16:35 -08:00
m - > val [ 4 ] = 0 ;
m - > val [ 5 ] = 0 ;
2012-05-03 15:42:15 -07:00
m - > val [ 6 ] = tw ;
m - > val [ 7 ] = th ;
edje_object_message_send ( obj , EDJE_MESSAGE_INT_SET , 1 , m ) ;
}
static void
_elm_win_focus_highlight_simple_setup ( Elm_Win_Smart_Data * sd ,
Evas_Object * obj )
{
Evas_Object * clip , * target = sd - > focus_highlight . cur . target ;
Evas_Coord x , y , w , h ;
clip = evas_object_clip_get ( target ) ;
evas_object_geometry_get ( target , & x , & y , & w , & h ) ;
evas_object_move ( obj , x , y ) ;
evas_object_resize ( obj , w , h ) ;
evas_object_clip_set ( obj , clip ) ;
}
static void
_elm_win_focus_highlight_reconfigure ( Elm_Win_Smart_Data * sd )
{
Evas_Object * target = sd - > focus_highlight . cur . target ;
Evas_Object * previous = sd - > focus_highlight . prev . target ;
2013-08-04 01:37:30 -07:00
Evas_Object * fobj = sd - > focus_highlight . fobj ;
2012-05-03 15:42:15 -07:00
Eina_Bool visible_changed ;
Eina_Bool common_visible ;
const char * sig = NULL ;
_elm_win_focus_highlight_reconfigure_job_stop ( sd ) ;
visible_changed = ( sd - > focus_highlight . cur . visible ! =
sd - > focus_highlight . prev . visible ) ;
if ( ( target = = previous ) & & ( ! visible_changed ) & &
2013-03-18 02:44:19 -07:00
( ! sd - > focus_highlight . geometry_changed ) & &
2013-08-04 01:09:44 -07:00
( ! sd - > focus_highlight . theme_changed ) )
2012-05-03 15:42:15 -07:00
return ;
if ( ( previous ) & & ( sd - > focus_highlight . prev . handled ) )
elm_widget_signal_emit
( previous , " elm,action,focus_highlight,hide " , " elm " ) ;
if ( ! target )
common_visible = EINA_FALSE ;
else if ( sd - > focus_highlight . cur . handled )
{
common_visible = EINA_FALSE ;
if ( sd - > focus_highlight . cur . visible )
sig = " elm,action,focus_highlight,show " ;
else
sig = " elm,action,focus_highlight,hide " ;
}
else
common_visible = sd - > focus_highlight . cur . visible ;
_elm_win_focus_highlight_visible_set ( sd , common_visible ) ;
if ( sig )
elm_widget_signal_emit ( target , sig , " elm " ) ;
if ( ( ! target ) | | ( ! common_visible ) | | ( sd - > focus_highlight . cur . handled ) )
goto the_end ;
2013-08-04 01:09:44 -07:00
if ( sd - > focus_highlight . theme_changed )
2012-05-03 15:42:15 -07:00
{
const char * str ;
if ( sd - > focus_highlight . style )
str = sd - > focus_highlight . style ;
else
str = " default " ;
elm_widget_theme_object_set
2013-08-04 01:37:30 -07:00
( sd - > obj , fobj , " focus_highlight " , " top " , str ) ;
2013-08-04 01:09:44 -07:00
sd - > focus_highlight . theme_changed = EINA_FALSE ;
2012-05-03 15:42:15 -07:00
2013-08-11 02:58:28 -07:00
if ( sd - > focus_highlight . animate )
2012-05-03 15:42:15 -07:00
{
2013-08-04 01:37:30 -07:00
str = edje_object_data_get ( sd - > focus_highlight . fobj , " animate " ) ;
2013-08-11 02:58:28 -07:00
sd - > focus_highlight . animate_supported = ( ( str ) & & ( ! strcmp ( str , " on " ) ) ) ;
2012-05-03 15:42:15 -07:00
}
}
2013-08-11 02:58:28 -07:00
if ( ( sd - > focus_highlight . animate_supported ) & & ( previous ) & &
2012-05-03 15:42:15 -07:00
( ! sd - > focus_highlight . prev . handled ) )
2013-08-04 01:37:30 -07:00
_elm_win_focus_highlight_anim_setup ( sd , fobj ) ;
2012-05-03 15:42:15 -07:00
else
2013-08-04 01:37:30 -07:00
_elm_win_focus_highlight_simple_setup ( sd , fobj ) ;
evas_object_raise ( fobj ) ;
2012-05-03 15:42:15 -07:00
the_end :
sd - > focus_highlight . geometry_changed = EINA_FALSE ;
sd - > focus_highlight . prev = sd - > focus_highlight . cur ;
}
static void
_elm_win_focus_highlight_reconfigure_job ( void * data )
{
2013-04-24 04:41:37 -07:00
ELM_WIN_DATA_GET ( data , sd ) ;
_elm_win_focus_highlight_reconfigure ( sd ) ;
2012-05-03 15:42:15 -07:00
}
static void
_elm_win_focus_highlight_reconfigure_job_start ( Elm_Win_Smart_Data * sd )
{
if ( sd - > focus_highlight . reconf_job )
ecore_job_del ( sd - > focus_highlight . reconf_job ) ;
sd - > focus_highlight . reconf_job = ecore_job_add (
2013-04-24 04:41:37 -07:00
_elm_win_focus_highlight_reconfigure_job , sd - > obj ) ;
2012-01-08 03:23:59 -08:00
}
2009-04-04 09:58:28 -07:00
static void
_elm_win_focus_in ( Ecore_Evas * ee )
{
2012-07-18 21:35:50 -07:00
Elm_Win_Smart_Data * sd = _elm_win_associate_get ( ee ) ;
Evas_Object * obj ;
2013-03-07 23:23:34 -08:00
unsigned int order = 0 ;
2010-09-24 09:41:25 -07:00
2012-07-18 21:35:50 -07:00
EINA_SAFETY_ON_NULL_RETURN ( sd ) ;
2012-05-03 15:42:15 -07:00
2012-11-25 22:32:53 -08:00
obj = sd - > obj ;
2012-10-10 17:35:00 -07:00
2012-05-03 15:42:15 -07:00
_elm_widget_top_win_focused_set ( obj , EINA_TRUE ) ;
2013-03-07 23:23:34 -08:00
if ( ! elm_widget_focus_order_get ( obj )
| | ( obj = = elm_widget_newest_focus_order_get ( obj , & order , EINA_TRUE ) ) )
2011-09-06 18:41:19 -07:00
{
2012-05-03 15:42:15 -07:00
elm_widget_focus_steal ( obj ) ;
2011-09-06 18:41:19 -07:00
}
else
2012-05-03 15:42:15 -07:00
elm_widget_focus_restore ( obj ) ;
evas_object_smart_callback_call ( obj , SIG_FOCUS_IN , NULL ) ;
elm: added more "focused" and "unfocused" documentations.
genlist, hover, index, list, map, photocam, progressbar, radio, scroller, slider, slideshow, spinner, toolbar, win.
2013-06-09 22:12:51 -07:00
evas_object_smart_callback_call ( obj , SIG_FOCUSED , NULL ) ;
2012-05-03 15:42:15 -07:00
sd - > focus_highlight . cur . visible = EINA_TRUE ;
_elm_win_focus_highlight_reconfigure_job_start ( sd ) ;
if ( sd - > frame_obj )
2011-04-14 03:48:43 -07:00
{
2012-05-03 15:42:15 -07:00
edje_object_signal_emit ( sd - > frame_obj , " elm,action,focus " , " elm " ) ;
2011-04-14 03:48:43 -07:00
}
2012-08-22 02:21:28 -07:00
/* do nothing */
/* else if (sd->img_obj) */
/* { */
/* } */
2009-04-04 09:58:28 -07:00
}
static void
_elm_win_focus_out ( Ecore_Evas * ee )
{
2012-07-18 21:35:50 -07:00
Elm_Win_Smart_Data * sd = _elm_win_associate_get ( ee ) ;
Evas_Object * obj ;
2010-09-24 09:41:25 -07:00
2012-07-18 21:35:50 -07:00
EINA_SAFETY_ON_NULL_RETURN ( sd ) ;
2012-05-03 15:42:15 -07:00
2012-11-25 22:32:53 -08:00
obj = sd - > obj ;
2012-05-03 15:42:15 -07:00
elm_object_focus_set ( obj , EINA_FALSE ) ;
_elm_widget_top_win_focused_set ( obj , EINA_FALSE ) ;
evas_object_smart_callback_call ( obj , SIG_FOCUS_OUT , NULL ) ;
elm: added more "focused" and "unfocused" documentations.
genlist, hover, index, list, map, photocam, progressbar, radio, scroller, slider, slideshow, spinner, toolbar, win.
2013-06-09 22:12:51 -07:00
evas_object_smart_callback_call ( obj , SIG_UNFOCUSED , NULL ) ;
2012-05-03 15:42:15 -07:00
sd - > focus_highlight . cur . visible = EINA_FALSE ;
_elm_win_focus_highlight_reconfigure_job_start ( sd ) ;
if ( sd - > frame_obj )
2011-04-14 03:48:43 -07:00
{
2012-05-03 15:42:15 -07:00
edje_object_signal_emit ( sd - > frame_obj , " elm,action,unfocus " , " elm " ) ;
2011-04-14 03:48:43 -07:00
}
2012-08-22 02:21:28 -07:00
2013-03-06 23:59:51 -08:00
/* access */
_elm_access_object_hilight_disable ( evas_object_evas_get ( obj ) ) ;
2012-08-22 02:21:28 -07:00
/* do nothing */
/* if (sd->img_obj) */
/* { */
/* } */
2009-04-04 09:58:28 -07:00
}
2012-12-04 22:50:27 -08:00
static void
_elm_win_available_profiles_del ( Elm_Win_Smart_Data * sd )
{
if ( ! sd - > profile . available_list ) return ;
unsigned int i ;
for ( i = 0 ; i < sd - > profile . count ; i + + )
2013-05-29 05:11:46 -07:00
ELM_SAFE_FREE ( sd - > profile . available_list [ i ] , eina_stringshare_del ) ;
2012-12-04 22:50:27 -08:00
sd - > profile . count = 0 ;
2013-05-29 05:11:46 -07:00
ELM_SAFE_FREE ( sd - > profile . available_list , free ) ;
2012-12-04 22:50:27 -08:00
}
static void
_elm_win_profile_del ( Elm_Win_Smart_Data * sd )
{
2013-05-29 05:11:46 -07:00
ELM_SAFE_FREE ( sd - > profile . name , eina_stringshare_del ) ;
2012-12-04 22:50:27 -08:00
}
static Eina_Bool
_elm_win_profile_set ( Elm_Win_Smart_Data * sd , const char * profile )
{
Eina_Bool changed = EINA_FALSE ;
if ( profile )
{
if ( sd - > profile . name )
{
if ( strcmp ( sd - > profile . name , profile ) ! = 0 )
{
eina_stringshare_replace ( & ( sd - > profile . name ) , profile ) ;
changed = EINA_TRUE ;
}
}
else
{
sd - > profile . name = eina_stringshare_add ( profile ) ;
changed = EINA_TRUE ;
}
}
else
_elm_win_profile_del ( sd ) ;
return changed ;
}
static void
_elm_win_profile_update ( Elm_Win_Smart_Data * sd )
{
if ( sd - > profile . available_list )
{
Eina_Bool found = EINA_FALSE ;
if ( sd - > profile . name )
{
unsigned int i ;
for ( i = 0 ; i < sd - > profile . count ; i + + )
{
if ( ! strcmp ( sd - > profile . name ,
sd - > profile . available_list [ i ] ) )
{
found = EINA_TRUE ;
break ;
}
}
}
/* If current profile is not present in an available profiles,
* change current profile to the 1 st element of an array .
*/
if ( ! found )
_elm_win_profile_set ( sd , sd - > profile . available_list [ 0 ] ) ;
}
_elm_config_profile_set ( sd - > profile . name ) ;
/* update sub ee */
Ecore_Evas * ee2 ;
Eina_List * sub , * l = NULL ;
sub = ecore_evas_sub_ecore_evas_list_get ( sd - > ee ) ;
EINA_LIST_FOREACH ( sub , l , ee2 )
ecore_evas_window_profile_set ( ee2 , sd - > profile . name ) ;
evas_object_smart_callback_call ( sd - > obj , SIG_PROFILE_CHANGED , NULL ) ;
}
2012-03-28 02:02:22 -07:00
static void
2012-02-28 03:20:35 -08:00
_elm_win_state_change ( Ecore_Evas * ee )
{
2012-07-18 21:35:50 -07:00
Elm_Win_Smart_Data * sd = _elm_win_associate_get ( ee ) ;
2012-02-28 03:20:35 -08:00
Evas_Object * obj ;
Eina_Bool ch_withdrawn = EINA_FALSE ;
Eina_Bool ch_sticky = EINA_FALSE ;
Eina_Bool ch_iconified = EINA_FALSE ;
Eina_Bool ch_fullscreen = EINA_FALSE ;
Eina_Bool ch_maximized = EINA_FALSE ;
2012-12-04 22:50:27 -08:00
Eina_Bool ch_profile = EINA_FALSE ;
const char * profile ;
2012-02-28 03:20:35 -08:00
2012-07-18 21:35:50 -07:00
EINA_SAFETY_ON_NULL_RETURN ( sd ) ;
2012-03-28 02:02:22 -07:00
2012-11-25 22:32:53 -08:00
obj = sd - > obj ;
2012-02-28 03:20:35 -08:00
2012-05-03 15:42:15 -07:00
if ( sd - > withdrawn ! = ecore_evas_withdrawn_get ( sd - > ee ) )
2012-02-28 03:20:35 -08:00
{
2012-05-03 15:42:15 -07:00
sd - > withdrawn = ecore_evas_withdrawn_get ( sd - > ee ) ;
2012-02-28 03:20:35 -08:00
ch_withdrawn = EINA_TRUE ;
}
2012-05-03 15:42:15 -07:00
if ( sd - > sticky ! = ecore_evas_sticky_get ( sd - > ee ) )
2012-02-28 03:20:35 -08:00
{
2012-05-03 15:42:15 -07:00
sd - > sticky = ecore_evas_sticky_get ( sd - > ee ) ;
2012-02-28 03:20:35 -08:00
ch_sticky = EINA_TRUE ;
}
2012-05-03 15:42:15 -07:00
if ( sd - > iconified ! = ecore_evas_iconified_get ( sd - > ee ) )
2012-02-28 03:20:35 -08:00
{
2012-05-03 15:42:15 -07:00
sd - > iconified = ecore_evas_iconified_get ( sd - > ee ) ;
2012-02-28 03:20:35 -08:00
ch_iconified = EINA_TRUE ;
}
2012-05-03 15:42:15 -07:00
if ( sd - > fullscreen ! = ecore_evas_fullscreen_get ( sd - > ee ) )
2012-02-28 03:20:35 -08:00
{
2012-05-03 15:42:15 -07:00
sd - > fullscreen = ecore_evas_fullscreen_get ( sd - > ee ) ;
2012-02-28 03:20:35 -08:00
ch_fullscreen = EINA_TRUE ;
}
2012-05-03 15:42:15 -07:00
if ( sd - > maximized ! = ecore_evas_maximized_get ( sd - > ee ) )
2012-02-28 03:20:35 -08:00
{
2012-05-03 15:42:15 -07:00
sd - > maximized = ecore_evas_maximized_get ( sd - > ee ) ;
2012-02-28 03:20:35 -08:00
ch_maximized = EINA_TRUE ;
}
2012-08-28 03:37:02 -07:00
2013-01-10 03:53:39 -08:00
2012-12-04 22:50:27 -08:00
profile = ecore_evas_window_profile_get ( sd - > ee ) ;
ch_profile = _elm_win_profile_set ( sd , profile ) ;
2012-08-28 03:37:02 -07:00
_elm_win_state_eval_queue ( ) ;
2012-10-10 17:35:00 -07:00
2012-02-28 03:20:35 -08:00
if ( ( ch_withdrawn ) | | ( ch_iconified ) )
{
2012-05-03 15:42:15 -07:00
if ( sd - > withdrawn )
evas_object_smart_callback_call ( obj , SIG_WITHDRAWN , NULL ) ;
else if ( sd - > iconified )
evas_object_smart_callback_call ( obj , SIG_ICONIFIED , NULL ) ;
2012-02-28 03:20:35 -08:00
else
2012-05-03 15:42:15 -07:00
evas_object_smart_callback_call ( obj , SIG_NORMAL , NULL ) ;
2012-02-28 03:20:35 -08:00
}
if ( ch_sticky )
{
2012-05-03 15:42:15 -07:00
if ( sd - > sticky )
evas_object_smart_callback_call ( obj , SIG_STICK , NULL ) ;
2012-02-28 03:20:35 -08:00
else
2012-05-03 15:42:15 -07:00
evas_object_smart_callback_call ( obj , SIG_UNSTICK , NULL ) ;
2012-02-28 03:20:35 -08:00
}
if ( ch_fullscreen )
{
2012-05-03 15:42:15 -07:00
if ( sd - > fullscreen )
evas_object_smart_callback_call ( obj , SIG_FULLSCREEN , NULL ) ;
2012-02-28 03:20:35 -08:00
else
2012-05-03 15:42:15 -07:00
evas_object_smart_callback_call ( obj , SIG_UNFULLSCREEN , NULL ) ;
2012-02-28 03:20:35 -08:00
}
if ( ch_maximized )
{
2012-05-03 15:42:15 -07:00
if ( sd - > maximized )
evas_object_smart_callback_call ( obj , SIG_MAXIMIZED , NULL ) ;
2012-02-28 03:20:35 -08:00
else
2012-05-03 15:42:15 -07:00
evas_object_smart_callback_call ( obj , SIG_UNMAXIMIZED , NULL ) ;
2012-02-28 03:20:35 -08:00
}
2012-12-04 22:50:27 -08:00
if ( ch_profile )
{
_elm_win_profile_update ( sd ) ;
}
2012-02-28 03:20:35 -08:00
}
2012-11-25 22:32:53 -08:00
static void
_elm_win_smart_focus_next_manager_is ( Eo * obj EINA_UNUSED , void * _pd EINA_UNUSED , va_list * list )
2010-09-24 07:47:59 -07:00
{
2012-11-25 22:32:53 -08:00
Eina_Bool * ret = va_arg ( * list , Eina_Bool * ) ;
* ret = EINA_TRUE ;
}
static void
_elm_win_smart_focus_next ( Eo * obj , void * _pd EINA_UNUSED , va_list * list )
{
Elm_Focus_Direction dir = va_arg ( * list , Elm_Focus_Direction ) ;
Evas_Object * * next = va_arg ( * list , Evas_Object * * ) ;
Eina_Bool * ret = va_arg ( * list , Eina_Bool * ) ;
if ( ret ) * ret = EINA_FALSE ;
2013-04-24 04:41:37 -07:00
Elm_Widget_Smart_Data * wd = eo_data_scope_get ( obj , ELM_OBJ_WIDGET_CLASS ) ;
2012-05-02 18:19:05 -07:00
2012-05-03 15:42:15 -07:00
const Eina_List * items ;
void * ( * list_data_get ) ( const Eina_List * list ) ;
2010-09-24 07:47:59 -07:00
/* Focus chain */
2012-11-25 22:32:53 -08:00
if ( wd - > subobjs )
2010-10-06 13:24:22 -07:00
{
2010-10-21 11:58:43 -07:00
if ( ! ( items = elm_widget_focus_custom_chain_get ( obj ) ) )
2012-05-03 15:42:15 -07:00
{
2012-11-25 22:32:53 -08:00
items = wd - > subobjs ;
2012-05-03 15:42:15 -07:00
if ( ! items )
2012-11-25 22:32:53 -08:00
return ;
2012-05-03 15:42:15 -07:00
}
2010-10-21 11:58:43 -07:00
list_data_get = eina_list_data_get ;
2010-09-24 07:47:59 -07:00
2010-10-21 11:58:43 -07:00
elm_widget_focus_list_next_get ( obj , items , list_data_get , dir , next ) ;
2010-09-24 07:47:59 -07:00
2010-10-21 11:58:43 -07:00
if ( * next )
2012-11-25 22:32:53 -08:00
{
if ( ret ) * ret = EINA_TRUE ;
return ;
}
2010-10-21 11:58:43 -07:00
}
* next = ( Evas_Object * ) obj ;
2012-11-25 22:32:53 -08:00
return ;
2010-09-24 07:47:59 -07:00
}
2012-11-25 22:32:53 -08:00
static void
_elm_win_smart_focus_direction_manager_is ( Eo * obj EINA_UNUSED , void * _pd EINA_UNUSED , va_list * list )
{
Eina_Bool * ret = va_arg ( * list , Eina_Bool * ) ;
* ret = EINA_TRUE ;
}
static void
_elm_win_smart_focus_direction ( Eo * obj , void * _pd EINA_UNUSED , va_list * list )
2012-05-02 20:02:54 -07:00
{
2012-11-25 22:32:53 -08:00
const Evas_Object * base = va_arg ( * list , Evas_Object * ) ;
double degree = va_arg ( * list , double ) ;
Evas_Object * * direction = va_arg ( * list , Evas_Object * * ) ;
double * weight = va_arg ( * list , double * ) ;
Eina_Bool * ret = va_arg ( * list , Eina_Bool * ) ;
if ( ret ) * ret = EINA_FALSE ;
Eina_Bool int_ret = EINA_FALSE ;
2012-05-02 20:02:54 -07:00
const Eina_List * items ;
2012-05-03 15:42:15 -07:00
void * ( * list_data_get ) ( const Eina_List * list ) ;
2012-05-02 20:02:54 -07:00
2013-04-24 04:41:37 -07:00
Elm_Widget_Smart_Data * wd = eo_data_scope_get ( obj , ELM_OBJ_WIDGET_CLASS ) ;
2012-05-02 20:02:54 -07:00
/* Focus chain */
2012-11-25 22:32:53 -08:00
if ( wd - > subobjs )
2012-05-02 20:02:54 -07:00
{
if ( ! ( items = elm_widget_focus_custom_chain_get ( obj ) ) )
2012-11-25 22:32:53 -08:00
items = wd - > subobjs ;
2012-05-02 20:02:54 -07:00
list_data_get = eina_list_data_get ;
2012-11-25 22:32:53 -08:00
int_ret = elm_widget_focus_list_direction_get
2012-05-03 15:42:15 -07:00
( obj , base , items , list_data_get , degree , direction , weight ) ;
2012-11-25 22:32:53 -08:00
if ( ret ) * ret = int_ret ;
2012-05-02 20:02:54 -07:00
}
}
2012-11-25 22:32:53 -08:00
static void
_elm_win_smart_on_focus ( Eo * obj , void * _pd , va_list * list )
2010-10-21 11:58:43 -07:00
{
2012-11-25 22:32:53 -08:00
Eina_Bool * ret = va_arg ( * list , Eina_Bool * ) ;
if ( ret ) * ret = EINA_TRUE ;
Elm_Win_Smart_Data * sd = _pd ;
2013-06-06 09:13:37 -07:00
Eina_Bool int_ret = EINA_FALSE ;
eo_do_super ( obj , MY_CLASS , elm_wdg_on_focus ( & int_ret ) ) ;
if ( ! int_ret ) return ;
2011-04-20 07:16:51 -07:00
2012-05-03 15:42:15 -07:00
if ( sd - > img_obj )
evas_object_focus_set ( sd - > img_obj , elm_widget_focus_get ( obj ) ) ;
2010-10-21 11:58:43 -07:00
else
2012-05-03 15:42:15 -07:00
evas_object_focus_set ( obj , elm_widget_focus_get ( obj ) ) ;
2010-10-21 11:58:43 -07:00
}
2012-11-25 22:32:53 -08:00
static void
_elm_win_smart_event ( Eo * obj , void * _pd EINA_UNUSED , va_list * list )
2010-09-24 07:47:59 -07:00
{
2012-11-25 22:32:53 -08:00
Evas_Object * source = va_arg ( * list , Evas_Object * ) ;
( void ) source ;
Evas_Callback_Type type = va_arg ( * list , Evas_Callback_Type ) ;
void * event_info = va_arg ( * list , void * ) ;
Eina_Bool * ret = va_arg ( * list , Eina_Bool * ) ;
if ( ret ) * ret = EINA_FALSE ;
2012-05-03 15:42:15 -07:00
Evas_Event_Key_Down * ev = event_info ;
2012-11-25 22:32:53 -08:00
if ( elm_widget_disabled_get ( obj ) ) return ;
2012-05-03 15:42:15 -07:00
if ( type ! = EVAS_CALLBACK_KEY_DOWN )
2012-11-25 22:32:53 -08:00
return ;
2012-05-03 15:42:15 -07:00
2013-07-30 23:14:09 -07:00
if ( ( ! strcmp ( ev - > key , " Tab " ) ) | |
( ! strcmp ( ev - > key , " ISO_Left_Tab " ) ) )
2012-05-02 09:58:56 -07:00
{
2013-02-17 06:19:53 -08:00
if ( evas_key_modifier_is_set ( ev - > modifiers , " Control " ) | |
evas_key_modifier_is_set ( ev - > modifiers , " Alt " ) )
2013-02-19 08:26:11 -08:00
return ;
2012-05-03 15:42:15 -07:00
if ( evas_key_modifier_is_set ( ev - > modifiers , " Shift " ) )
elm_widget_focus_cycle ( obj , ELM_FOCUS_PREVIOUS ) ;
else
elm_widget_focus_cycle ( obj , ELM_FOCUS_NEXT ) ;
2012-05-02 20:02:54 -07:00
2012-05-03 15:42:15 -07:00
goto success ;
}
2013-07-30 23:14:09 -07:00
else if ( ( ! strcmp ( ev - > key , " Left " ) ) | |
( ( ! strcmp ( ev - > key , " KP_Left " ) ) & & ( ! ev - > string ) ) )
2012-05-03 15:42:15 -07:00
{
2013-03-22 17:41:34 -07:00
elm_widget_focus_cycle ( obj , ELM_FOCUS_LEFT ) ;
2012-05-03 15:42:15 -07:00
goto success ;
}
2013-07-30 23:14:09 -07:00
else if ( ( ! strcmp ( ev - > key , " Right " ) ) | |
( ( ! strcmp ( ev - > key , " KP_Right " ) ) & & ( ! ev - > string ) ) )
2012-05-03 15:42:15 -07:00
{
2013-03-22 17:41:34 -07:00
elm_widget_focus_cycle ( obj , ELM_FOCUS_RIGHT ) ;
2012-05-03 15:42:15 -07:00
goto success ;
}
2013-07-30 23:14:09 -07:00
else if ( ( ! strcmp ( ev - > key , " Up " ) ) | |
( ( ! strcmp ( ev - > key , " KP_Up " ) ) & & ( ! ev - > string ) ) )
2012-05-03 15:42:15 -07:00
{
2013-03-22 17:41:34 -07:00
elm_widget_focus_cycle ( obj , ELM_FOCUS_UP ) ;
2012-05-03 15:42:15 -07:00
goto success ;
}
2013-07-30 23:14:09 -07:00
else if ( ( ! strcmp ( ev - > key , " Down " ) ) | |
( ( ! strcmp ( ev - > key , " KP_Down " ) ) & & ( ! ev - > string ) ) )
2012-05-03 15:42:15 -07:00
{
2013-03-22 17:41:34 -07:00
elm_widget_focus_cycle ( obj , ELM_FOCUS_DOWN ) ;
2012-05-03 15:42:15 -07:00
goto success ;
2010-09-24 07:47:59 -07:00
}
2012-11-25 22:32:53 -08:00
return ;
2012-05-03 15:42:15 -07:00
success :
ev - > event_flags | = EVAS_EVENT_FLAG_ON_HOLD ;
2012-11-25 22:32:53 -08:00
if ( ret ) * ret = EINA_TRUE ;
2010-09-24 07:47:59 -07:00
}
2008-10-24 19:11:06 -07:00
static void
_deferred_ecore_evas_free ( void * data )
{
ecore_evas_free ( data ) ;
2011-03-09 22:35:33 -08:00
_elm_win_deferred_free - - ;
2008-10-24 19:11:06 -07:00
}
2010-10-21 11:58:43 -07:00
static void
2012-11-25 22:32:53 -08:00
_elm_win_smart_show ( Eo * obj , void * _pd , va_list * list EINA_UNUSED )
2010-10-21 11:58:43 -07:00
{
2012-11-25 22:32:53 -08:00
Elm_Win_Smart_Data * sd = _pd ;
2012-05-03 15:42:15 -07:00
2012-08-28 03:37:02 -07:00
if ( ! evas_object_visible_get ( obj ) )
2013-01-14 01:46:25 -08:00
_elm_win_state_eval_queue ( ) ;
2013-03-18 09:07:38 -07:00
eo_do_super ( obj , MY_CLASS , evas_obj_smart_show ( ) ) ;
2011-05-07 01:37:47 -07:00
2012-07-18 21:35:50 -07:00
TRAP ( sd , show ) ;
2012-05-03 15:42:15 -07:00
if ( sd - > shot . info ) _shot_handle ( sd ) ;
2010-10-21 11:58:43 -07:00
}
2008-09-29 23:58:56 -07:00
static void
2012-11-25 22:32:53 -08:00
_elm_win_smart_hide ( Eo * obj , void * _pd , va_list * list EINA_UNUSED )
2011-04-14 03:48:43 -07:00
{
2012-11-25 22:32:53 -08:00
Elm_Win_Smart_Data * sd = _pd ;
2011-04-14 04:43:43 -07:00
2012-08-28 03:37:02 -07:00
if ( evas_object_visible_get ( obj ) )
2013-01-14 01:46:25 -08:00
_elm_win_state_eval_queue ( ) ;
2013-03-18 09:07:38 -07:00
eo_do_super ( obj , MY_CLASS , evas_obj_smart_hide ( ) ) ;
2012-05-03 15:42:15 -07:00
2012-07-18 21:35:50 -07:00
TRAP ( sd , hide ) ;
2012-05-03 15:42:15 -07:00
if ( sd - > frame_obj )
2011-04-14 03:48:43 -07:00
{
2012-05-03 15:42:15 -07:00
evas_object_hide ( sd - > frame_obj ) ;
2011-04-14 03:48:43 -07:00
}
2012-08-22 02:21:28 -07:00
if ( sd - > img_obj )
2011-04-14 03:48:43 -07:00
{
2012-05-03 15:42:15 -07:00
evas_object_hide ( sd - > img_obj ) ;
2011-04-14 03:48:43 -07:00
}
2012-05-03 15:42:15 -07:00
if ( sd - > pointer . obj )
2012-02-10 00:37:16 -08:00
{
2012-05-03 15:42:15 -07:00
evas_object_hide ( sd - > pointer . obj ) ;
ecore_evas_hide ( sd - > pointer . ee ) ;
2012-02-10 00:37:16 -08:00
}
2011-04-14 03:48:43 -07:00
}
static void
2012-05-03 15:42:15 -07:00
_elm_win_on_parent_del ( void * data ,
Evas * e __UNUSED__ ,
Evas_Object * obj ,
void * event_info __UNUSED__ )
2012-05-02 18:19:05 -07:00
{
2013-04-24 04:41:37 -07:00
ELM_WIN_DATA_GET ( data , sd ) ;
2012-05-02 18:19:05 -07:00
2012-05-03 15:42:15 -07:00
if ( obj = = sd - > parent ) sd - > parent = NULL ;
}
static void
_elm_win_focus_target_move ( void * data ,
Evas * e __UNUSED__ ,
Evas_Object * obj __UNUSED__ ,
void * event_info __UNUSED__ )
{
2013-04-24 04:41:37 -07:00
ELM_WIN_DATA_GET ( data , sd ) ;
2012-05-03 15:42:15 -07:00
sd - > focus_highlight . geometry_changed = EINA_TRUE ;
_elm_win_focus_highlight_reconfigure_job_start ( sd ) ;
}
static void
_elm_win_focus_target_resize ( void * data ,
Evas * e __UNUSED__ ,
Evas_Object * obj __UNUSED__ ,
void * event_info __UNUSED__ )
{
2013-04-24 04:41:37 -07:00
ELM_WIN_DATA_GET ( data , sd ) ;
2012-05-03 15:42:15 -07:00
sd - > focus_highlight . geometry_changed = EINA_TRUE ;
_elm_win_focus_highlight_reconfigure_job_start ( sd ) ;
}
static void
_elm_win_focus_target_del ( void * data ,
Evas * e __UNUSED__ ,
Evas_Object * obj __UNUSED__ ,
void * event_info __UNUSED__ )
{
2013-04-24 04:41:37 -07:00
ELM_WIN_DATA_GET ( data , sd ) ;
2012-05-03 15:42:15 -07:00
sd - > focus_highlight . cur . target = NULL ;
_elm_win_focus_highlight_reconfigure_job_start ( sd ) ;
}
static Evas_Object *
_elm_win_focus_target_get ( Evas_Object * obj )
{
Evas_Object * o = obj ;
do
2012-05-02 18:19:05 -07:00
{
2012-05-03 15:42:15 -07:00
if ( elm_widget_is ( o ) )
2012-05-02 18:19:05 -07:00
{
2012-05-03 15:42:15 -07:00
if ( ! elm_widget_highlight_ignore_get ( o ) )
break ;
o = elm_widget_parent_get ( o ) ;
if ( ! o )
o = evas_object_smart_parent_get ( o ) ;
}
else
{
o = elm_widget_parent_widget_get ( o ) ;
if ( ! o )
o = evas_object_smart_parent_get ( o ) ;
}
}
while ( o ) ;
return o ;
}
static void
_elm_win_focus_target_callbacks_add ( Elm_Win_Smart_Data * sd )
{
Evas_Object * obj = sd - > focus_highlight . cur . target ;
2012-12-07 23:00:55 -08:00
if ( ! obj ) return ;
2012-05-03 15:42:15 -07:00
evas_object_event_callback_add
2013-04-24 04:41:37 -07:00
( obj , EVAS_CALLBACK_MOVE , _elm_win_focus_target_move , sd - > obj ) ;
2012-05-03 15:42:15 -07:00
evas_object_event_callback_add
2013-04-24 04:41:37 -07:00
( obj , EVAS_CALLBACK_RESIZE , _elm_win_focus_target_resize , sd - > obj ) ;
2012-05-03 15:42:15 -07:00
evas_object_event_callback_add
2013-04-24 04:41:37 -07:00
( obj , EVAS_CALLBACK_DEL , _elm_win_focus_target_del , sd - > obj ) ;
2012-05-03 15:42:15 -07:00
}
static void
_elm_win_focus_target_callbacks_del ( Elm_Win_Smart_Data * sd )
{
Evas_Object * obj = sd - > focus_highlight . cur . target ;
evas_object_event_callback_del_full
2013-04-24 04:41:37 -07:00
( obj , EVAS_CALLBACK_MOVE , _elm_win_focus_target_move , sd - > obj ) ;
2012-05-03 15:42:15 -07:00
evas_object_event_callback_del_full
2013-04-24 04:41:37 -07:00
( obj , EVAS_CALLBACK_RESIZE , _elm_win_focus_target_resize , sd - > obj ) ;
2012-05-03 15:42:15 -07:00
evas_object_event_callback_del_full
2013-04-24 04:41:37 -07:00
( obj , EVAS_CALLBACK_DEL , _elm_win_focus_target_del , sd - > obj ) ;
2012-05-03 15:42:15 -07:00
}
static void
_elm_win_object_focus_in ( void * data ,
Evas * e __UNUSED__ ,
void * event_info )
{
Evas_Object * obj = event_info , * target ;
2013-04-24 04:41:37 -07:00
ELM_WIN_DATA_GET ( data , sd ) ;
2012-05-03 15:42:15 -07:00
if ( sd - > focus_highlight . cur . target = = obj )
return ;
target = _elm_win_focus_target_get ( obj ) ;
sd - > focus_highlight . cur . target = target ;
if ( elm_widget_highlight_in_theme_get ( target ) )
sd - > focus_highlight . cur . handled = EINA_TRUE ;
else
_elm_win_focus_target_callbacks_add ( sd ) ;
_elm_win_focus_highlight_reconfigure_job_start ( sd ) ;
}
static void
_elm_win_object_focus_out ( void * data ,
Evas * e __UNUSED__ ,
void * event_info __UNUSED__ )
{
2013-04-24 04:41:37 -07:00
ELM_WIN_DATA_GET ( data , sd ) ;
2012-05-03 15:42:15 -07:00
if ( ! sd - > focus_highlight . cur . target )
return ;
if ( ! sd - > focus_highlight . cur . handled )
_elm_win_focus_target_callbacks_del ( sd ) ;
sd - > focus_highlight . cur . target = NULL ;
sd - > focus_highlight . cur . handled = EINA_FALSE ;
_elm_win_focus_highlight_reconfigure_job_start ( sd ) ;
}
static void
_elm_win_focus_highlight_shutdown ( Elm_Win_Smart_Data * sd )
{
_elm_win_focus_highlight_reconfigure_job_stop ( sd ) ;
if ( sd - > focus_highlight . cur . target )
{
2013-07-12 20:37:03 -07:00
elm_widget_signal_emit ( sd - > focus_highlight . cur . target ,
" elm,action,focus_highlight,hide " , " elm " ) ;
2012-05-03 15:42:15 -07:00
_elm_win_focus_target_callbacks_del ( sd ) ;
sd - > focus_highlight . cur . target = NULL ;
}
2013-08-04 01:37:30 -07:00
ELM_SAFE_FREE ( sd - > focus_highlight . fobj , evas_object_del ) ;
2012-05-03 15:42:15 -07:00
evas_event_callback_del_full
( sd - > evas , EVAS_CALLBACK_CANVAS_OBJECT_FOCUS_IN ,
2013-04-24 04:41:37 -07:00
_elm_win_object_focus_in , sd - > obj ) ;
2012-05-03 15:42:15 -07:00
evas_event_callback_del_full
( sd - > evas , EVAS_CALLBACK_CANVAS_OBJECT_FOCUS_OUT ,
2013-04-24 04:41:37 -07:00
_elm_win_object_focus_out , sd - > obj ) ;
2012-05-03 15:42:15 -07:00
}
2012-07-23 01:23:01 -07:00
static void
_elm_win_on_img_obj_del ( void * data ,
Evas * e __UNUSED__ ,
Evas_Object * obj __UNUSED__ ,
void * event_info __UNUSED__ )
{
2013-04-24 04:41:37 -07:00
ELM_WIN_DATA_GET ( data , sd ) ;
2012-07-23 01:23:01 -07:00
sd - > img_obj = NULL ;
}
2012-05-03 15:42:15 -07:00
static void
2012-11-25 22:32:53 -08:00
_elm_win_smart_del ( Eo * obj , void * _pd , va_list * list EINA_UNUSED )
2012-05-03 15:42:15 -07:00
{
2012-11-25 22:32:53 -08:00
Elm_Win_Smart_Data * sd = _pd ;
2012-05-03 15:42:15 -07:00
2013-01-17 14:11:15 -08:00
evas_object_event_callback_del_full ( sd - > layout ,
2013-01-18 07:56:25 -08:00
EVAS_CALLBACK_CHANGED_SIZE_HINTS ,
_elm_win_on_resize_obj_changed_size_hints ,
obj ) ;
2013-01-17 14:11:15 -08:00
evas_object_del ( sd - > box ) ;
evas_object_del ( sd - > layout ) ;
2012-05-03 15:42:15 -07:00
/* NB: child deletion handled by parent's smart del */
2012-07-18 21:35:50 -07:00
if ( ( trap ) & & ( trap - > del ) )
trap - > del ( sd - > trap_data , obj ) ;
2012-05-03 15:42:15 -07:00
if ( sd - > parent )
{
evas_object_event_callback_del_full
2013-04-24 04:41:37 -07:00
( sd - > parent , EVAS_CALLBACK_DEL , _elm_win_on_parent_del , obj ) ;
2012-05-03 15:42:15 -07:00
sd - > parent = NULL ;
}
if ( sd - > autodel_clear ) * ( sd - > autodel_clear ) = - 1 ;
_elm_win_list = eina_list_remove ( _elm_win_list , obj ) ;
2012-08-28 03:37:02 -07:00
_elm_win_count - - ;
_elm_win_state_eval_queue ( ) ;
2012-10-10 17:35:00 -07:00
2012-05-03 15:42:15 -07:00
if ( sd - > ee )
{
ecore_evas_callback_delete_request_set ( sd - > ee , NULL ) ;
ecore_evas_callback_resize_set ( sd - > ee , NULL ) ;
}
2013-05-22 23:54:49 -07:00
2013-05-29 05:11:46 -07:00
if ( sd - > deferred_resize_job ) ecore_job_del ( sd - > deferred_resize_job ) ;
if ( sd - > deferred_child_eval_job ) ecore_job_del ( sd - > deferred_child_eval_job ) ;
if ( sd - > shot . info ) eina_stringshare_del ( sd - > shot . info ) ;
if ( sd - > shot . timer ) ecore_timer_del ( sd - > shot . timer ) ;
2012-05-03 15:42:15 -07:00
2012-05-02 18:19:05 -07:00
# ifdef HAVE_ELEMENTARY_X
2012-06-06 01:25:12 -07:00
if ( sd - > x . client_message_handler )
ecore_event_handler_del ( sd - > x . client_message_handler ) ;
2012-11-19 08:51:44 -08:00
if ( sd - > x . property_handler )
ecore_event_handler_del ( sd - > x . property_handler ) ;
2012-05-02 18:19:05 -07:00
# endif
2008-10-06 18:23:49 -07:00
2012-05-03 15:42:15 -07:00
if ( sd - > img_obj )
2012-05-02 18:19:05 -07:00
{
2012-07-23 01:23:01 -07:00
evas_object_event_callback_del_full
2013-04-24 04:41:37 -07:00
( sd - > img_obj , EVAS_CALLBACK_DEL , _elm_win_on_img_obj_del , obj ) ;
2012-05-03 15:42:15 -07:00
sd - > img_obj = NULL ;
2012-05-02 18:19:05 -07:00
}
else
{
2012-05-03 15:42:15 -07:00
if ( sd - > ee )
2012-05-02 18:19:05 -07:00
{
2012-05-03 15:42:15 -07:00
ecore_job_add ( _deferred_ecore_evas_free , sd - > ee ) ;
2012-05-02 18:19:05 -07:00
_elm_win_deferred_free + + ;
}
}
2011-03-09 22:35:33 -08:00
2012-05-03 15:42:15 -07:00
_elm_win_focus_highlight_shutdown ( sd ) ;
eina_stringshare_del ( sd - > focus_highlight . style ) ;
2012-05-02 18:19:05 -07:00
2012-05-03 15:42:15 -07:00
if ( sd - > title ) eina_stringshare_del ( sd - > title ) ;
if ( sd - > icon_name ) eina_stringshare_del ( sd - > icon_name ) ;
if ( sd - > role ) eina_stringshare_del ( sd - > role ) ;
if ( sd - > icon ) evas_object_del ( sd - > icon ) ;
Begins highlight on focused object.
There's still work to do here, particularly in the theme, but it has
something nice and fun to see the code working.
The idea behind this:
Window tracks focused object and sends the highlight object(s) to it. These
are simple edje objects, one on top, one below the focused widget for nice
effects. Widgets can choose to ignore the highlight and this will be sent to
the parent object, if it doesn't ignore it as well.
About the bottom object, it doesn't work now. For the most part, focused
widget will always be a member of some smart object, so stacking won't work
and the desired effect is nowhere to be seen. This will be worked out later.
To be done now:
- Let the theme for a widget define its own highlight, disabling if needed
the standard one for those objects.
- Needed base in code to allow animations when switching focus. All in theme.
- Properly test all widgets and fix some things that will most likely work
in weird ways, given the nature of Evas/Edje and how Elementary makes use
of them.
- Forgot the rest, stay tuned, test, report, give ideas, plant a tree.
Work started by glima, continued with some refactors by me when he
decided he needed vacations.
SVN revision: 52524
2010-09-20 15:18:58 -07:00
2012-12-27 05:38:33 -08:00
if ( sd - > main_menu ) evas_object_del ( sd - > main_menu ) ;
2012-12-04 22:50:27 -08:00
_elm_win_profile_del ( sd ) ;
_elm_win_available_profiles_del ( sd ) ;
2012-07-19 21:20:06 -07:00
/* Don't let callback in the air that point to sd */
ecore_evas_callback_delete_request_set ( sd - > ee , NULL ) ;
ecore_evas_callback_resize_set ( sd - > ee , NULL ) ;
ecore_evas_callback_mouse_in_set ( sd - > ee , NULL ) ;
ecore_evas_callback_focus_in_set ( sd - > ee , NULL ) ;
ecore_evas_callback_focus_out_set ( sd - > ee , NULL ) ;
ecore_evas_callback_move_set ( sd - > ee , NULL ) ;
ecore_evas_callback_state_change_set ( sd - > ee , NULL ) ;
2013-03-18 09:07:38 -07:00
eo_do_super ( obj , MY_CLASS , evas_obj_smart_del ( ) ) ;
2012-05-02 18:19:05 -07:00
if ( ( ! _elm_win_list ) & &
( elm_policy_get ( ELM_POLICY_QUIT ) = = ELM_POLICY_QUIT_LAST_WINDOW_CLOSED ) )
{
edje_file_cache_flush ( ) ;
edje_collection_cache_flush ( ) ;
2012-05-03 15:42:15 -07:00
evas_image_cache_flush ( evas_object_evas_get ( obj ) ) ;
evas_font_cache_flush ( evas_object_evas_get ( obj ) ) ;
2012-05-02 18:19:05 -07:00
elm_exit ( ) ;
}
2012-05-02 09:58:56 -07:00
}
Begins highlight on focused object.
There's still work to do here, particularly in the theme, but it has
something nice and fun to see the code working.
The idea behind this:
Window tracks focused object and sends the highlight object(s) to it. These
are simple edje objects, one on top, one below the focused widget for nice
effects. Widgets can choose to ignore the highlight and this will be sent to
the parent object, if it doesn't ignore it as well.
About the bottom object, it doesn't work now. For the most part, focused
widget will always be a member of some smart object, so stacking won't work
and the desired effect is nowhere to be seen. This will be worked out later.
To be done now:
- Let the theme for a widget define its own highlight, disabling if needed
the standard one for those objects.
- Needed base in code to allow animations when switching focus. All in theme.
- Properly test all widgets and fix some things that will most likely work
in weird ways, given the nature of Evas/Edje and how Elementary makes use
of them.
- Forgot the rest, stay tuned, test, report, give ideas, plant a tree.
Work started by glima, continued with some refactors by me when he
decided he needed vacations.
SVN revision: 52524
2010-09-20 15:18:58 -07:00
2011-04-14 03:48:43 -07:00
static void
2012-05-03 15:42:15 -07:00
_elm_win_obj_intercept_show ( void * data ,
Evas_Object * obj )
2011-04-14 03:48:43 -07:00
{
2013-04-24 04:41:37 -07:00
ELM_WIN_DATA_GET ( data , sd ) ;
2012-05-03 15:42:15 -07:00
2009-10-07 22:26:58 -07:00
// this is called to make sure all smart containers have calculated their
// sizes BEFORE we show the window to make sure it initially appears at
// our desired size (ie min size is known first)
2009-10-26 01:27:08 -07:00
evas_smart_objects_calculate ( evas_object_evas_get ( obj ) ) ;
2012-05-03 15:42:15 -07:00
if ( sd - > frame_obj )
2011-04-14 03:48:43 -07:00
{
2012-05-03 15:42:15 -07:00
evas_object_show ( sd - > frame_obj ) ;
2011-04-14 03:48:43 -07:00
}
2012-08-22 02:21:28 -07:00
if ( sd - > img_obj )
2011-04-14 03:48:43 -07:00
{
2012-05-03 15:42:15 -07:00
evas_object_show ( sd - > img_obj ) ;
2011-04-14 03:48:43 -07:00
}
2012-05-03 15:42:15 -07:00
if ( sd - > pointer . obj )
2012-02-10 00:37:16 -08:00
{
2012-05-03 15:42:15 -07:00
ecore_evas_show ( sd - > pointer . ee ) ;
evas_object_show ( sd - > pointer . obj ) ;
2012-02-10 00:37:16 -08:00
}
2012-01-02 17:45:22 -08:00
evas_object_show ( obj ) ;
2009-10-07 22:26:58 -07:00
}
2011-03-23 06:29:26 -07:00
static void
2012-11-25 22:32:53 -08:00
_elm_win_smart_move ( Eo * obj , void * _pd EINA_UNUSED , va_list * list )
2011-03-23 06:29:26 -07:00
{
2012-11-25 22:32:53 -08:00
Evas_Coord x = va_arg ( * list , Evas_Coord ) ;
Evas_Coord y = va_arg ( * list , Evas_Coord ) ;
Elm_Win_Smart_Data * sd = _pd ;
2011-04-01 04:20:18 -07:00
2012-07-18 21:35:50 -07:00
if ( sd - > img_obj )
{
if ( ( x ! = sd - > screen . x ) | | ( y ! = sd - > screen . y ) )
{
sd - > screen . x = x ;
sd - > screen . y = y ;
evas_object_smart_callback_call ( obj , SIG_MOVED , NULL ) ;
}
return ;
}
else
{
TRAP ( sd , move , x , y ) ;
if ( ! ecore_evas_override_get ( sd - > ee ) ) return ;
}
2013-03-18 09:07:38 -07:00
eo_do_super ( obj , MY_CLASS , evas_obj_smart_move ( x , y ) ) ;
2012-05-02 18:19:05 -07:00
2012-05-03 15:42:15 -07:00
if ( ecore_evas_override_get ( sd - > ee ) )
{
sd - > screen . x = x ;
sd - > screen . y = y ;
evas_object_smart_callback_call ( obj , SIG_MOVED , NULL ) ;
2011-03-23 06:29:26 -07:00
}
2012-05-03 15:42:15 -07:00
if ( sd - > frame_obj )
2011-04-14 03:48:43 -07:00
{
2012-08-22 02:21:28 -07:00
/* FIXME: We should update ecore_wl_window_location here !! */
2012-05-03 15:42:15 -07:00
sd - > screen . x = x ;
sd - > screen . y = y ;
2011-04-14 03:48:43 -07:00
}
2012-08-22 02:21:28 -07:00
if ( sd - > img_obj )
2011-04-14 03:48:43 -07:00
{
2012-05-03 15:42:15 -07:00
sd - > screen . x = x ;
sd - > screen . y = y ;
2011-04-14 03:48:43 -07:00
}
}
static void
2012-11-25 22:32:53 -08:00
_elm_win_smart_resize ( Eo * obj , void * _pd , va_list * list )
2011-04-14 03:48:43 -07:00
{
2012-11-25 22:32:53 -08:00
Evas_Coord w = va_arg ( * list , Evas_Coord ) ;
Evas_Coord h = va_arg ( * list , Evas_Coord ) ;
2011-04-14 03:48:43 -07:00
2012-11-25 22:32:53 -08:00
Elm_Win_Smart_Data * sd = _pd ;
2013-03-18 09:07:38 -07:00
eo_do_super ( obj , MY_CLASS , evas_obj_smart_resize ( w , h ) ) ;
2012-05-02 18:19:05 -07:00
2012-05-03 15:42:15 -07:00
if ( sd - > img_obj )
{
if ( sd - > constrain )
2011-12-03 14:51:12 -08:00
{
int sw , sh ;
2012-05-03 15:42:15 -07:00
ecore_evas_screen_geometry_get ( sd - > ee , NULL , NULL , & sw , & sh ) ;
2011-12-03 14:51:12 -08:00
w = MIN ( w , sw ) ;
h = MIN ( h , sh ) ;
}
2011-12-04 14:02:02 -08:00
if ( w < 1 ) w = 1 ;
if ( h < 1 ) h = 1 ;
2012-05-03 15:42:15 -07:00
evas_object_image_size_set ( sd - > img_obj , w , h ) ;
2011-04-14 03:48:43 -07:00
}
2012-07-18 21:35:50 -07:00
2012-07-30 03:06:28 -07:00
TRAP ( sd , resize , w , h ) ;
2011-03-23 06:29:26 -07:00
}
2008-09-29 23:58:56 -07:00
static void
_elm_win_delete_request ( Ecore_Evas * ee )
{
2012-07-18 21:35:50 -07:00
Elm_Win_Smart_Data * sd = _elm_win_associate_get ( ee ) ;
Evas_Object * obj ;
2008-09-29 23:58:56 -07:00
2012-07-18 21:35:50 -07:00
EINA_SAFETY_ON_NULL_RETURN ( sd ) ;
2012-11-25 22:32:53 -08:00
obj = sd - > obj ;
2009-07-06 23:46:51 -07:00
2012-05-03 15:42:15 -07:00
int autodel = sd - > autodel ;
sd - > autodel_clear = & autodel ;
evas_object_ref ( obj ) ;
evas_object_smart_callback_call ( obj , SIG_DELETE_REQUEST , NULL ) ;
// FIXME: if above callback deletes - then the below will be invalid
if ( autodel ) evas_object_del ( obj ) ;
else sd - > autodel_clear = NULL ;
evas_object_unref ( obj ) ;
2008-09-29 23:58:56 -07:00
}
2012-07-11 04:53:29 -07:00
Ecore_X_Window
2012-05-28 05:28:46 -07:00
_elm_ee_xwin_get ( const Ecore_Evas * ee )
2008-09-29 23:58:56 -07:00
{
2012-05-29 21:57:31 -07:00
# ifdef HAVE_ELEMENTARY_X
Ecore_X_Window xwin = 0 ;
2010-11-01 14:10:07 -07:00
2012-05-28 05:28:46 -07:00
if ( ! ee ) return 0 ;
2012-12-19 10:07:09 -08:00
if ( EE_ENGINE_COMPARE ( ee , ELM_SOFTWARE_X11 ) )
2010-11-01 14:10:07 -07:00
{
2012-05-28 05:28:46 -07:00
if ( ee ) xwin = ecore_evas_software_x11_window_get ( ee ) ;
2010-11-01 14:10:07 -07:00
}
2012-12-19 10:07:09 -08:00
else if ( EE_ENGINE_COMPARE ( ee , ELM_SOFTWARE_FB ) | |
EE_ENGINE_COMPARE ( ee , ELM_SOFTWARE_16_WINCE ) | |
EE_ENGINE_COMPARE ( ee , ELM_SOFTWARE_SDL ) | |
EE_ENGINE_COMPARE ( ee , ELM_SOFTWARE_16_SDL ) | |
EE_ENGINE_COMPARE ( ee , ELM_OPENGL_SDL ) | |
EE_ENGINE_COMPARE ( ee , ELM_OPENGL_COCOA ) )
2010-11-01 14:10:07 -07:00
{
}
2012-12-19 10:07:09 -08:00
else if ( EE_ENGINE_COMPARE ( ee , ELM_OPENGL_X11 ) )
2010-11-01 14:10:07 -07:00
{
2012-05-28 05:28:46 -07:00
if ( ee ) xwin = ecore_evas_gl_x11_window_get ( ee ) ;
2010-11-01 14:10:07 -07:00
}
2012-12-19 10:07:09 -08:00
else if ( EE_ENGINE_COMPARE ( ee , ELM_SOFTWARE_WIN32 ) )
2010-11-01 14:10:07 -07:00
{
2012-05-28 05:28:46 -07:00
if ( ee ) xwin = ( long ) ecore_evas_win32_window_get ( ee ) ;
2008-10-06 18:23:49 -07:00
}
2012-05-28 05:28:46 -07:00
return xwin ;
# endif
return 0 ;
}
# ifdef HAVE_ELEMENTARY_X
static void
_elm_win_xwindow_get ( Elm_Win_Smart_Data * sd )
{
2012-06-06 01:25:12 -07:00
sd - > x . xwin = _elm_ee_xwin_get ( sd - > ee ) ;
2008-11-18 22:23:08 -08:00
}
2012-07-17 11:46:18 -07:00
2010-04-12 01:27:10 -07:00
# endif
2008-11-18 22:23:08 -08:00
2010-04-12 01:27:10 -07:00
# ifdef HAVE_ELEMENTARY_X
2008-11-18 22:23:08 -08:00
static void
2012-05-03 15:42:15 -07:00
_elm_win_xwin_update ( Elm_Win_Smart_Data * sd )
2008-11-18 22:23:08 -08:00
{
2012-02-29 04:06:12 -08:00
const char * s ;
2012-03-28 02:02:22 -07:00
2012-05-03 15:42:15 -07:00
_elm_win_xwindow_get ( sd ) ;
if ( sd - > parent )
2008-10-06 18:23:49 -07:00
{
2012-05-03 15:42:15 -07:00
ELM_WIN_DATA_GET ( sd - > parent , sdp ) ;
if ( sdp )
2011-04-01 04:20:18 -07:00
{
2012-06-06 01:25:12 -07:00
if ( sd - > x . xwin )
ecore_x_icccm_transient_for_set ( sd - > x . xwin , sdp - > x . xwin ) ;
2011-04-01 04:20:18 -07:00
}
2008-10-06 18:23:49 -07:00
}
2009-04-14 19:08:07 -07:00
2012-06-06 01:25:12 -07:00
if ( ! sd - > x . xwin ) return ; /* nothing more to do */
2009-04-14 19:08:07 -07:00
2012-05-03 15:42:15 -07:00
s = sd - > title ;
2012-02-29 04:06:12 -08:00
if ( ! s ) s = _elm_appname ;
if ( ! s ) s = " " ;
2012-05-03 15:42:15 -07:00
if ( sd - > icon_name ) s = sd - > icon_name ;
2012-06-06 01:25:12 -07:00
ecore_x_icccm_icon_name_set ( sd - > x . xwin , s ) ;
ecore_x_netwm_icon_name_set ( sd - > x . xwin , s ) ;
2012-02-29 04:06:12 -08:00
2012-05-03 15:42:15 -07:00
s = sd - > role ;
2012-06-06 01:25:12 -07:00
if ( s ) ecore_x_icccm_window_role_set ( sd - > x . xwin , s ) ;
2012-03-28 02:02:22 -07:00
2012-02-29 04:06:12 -08:00
// set window icon
2012-05-03 15:42:15 -07:00
if ( sd - > icon )
2012-02-29 04:06:12 -08:00
{
void * data ;
2012-05-03 15:42:15 -07:00
data = evas_object_image_data_get ( sd - > icon , EINA_FALSE ) ;
2012-02-29 04:06:12 -08:00
if ( data )
{
Ecore_X_Icon ic ;
int w = 0 , h = 0 , stride , x , y ;
unsigned char * p ;
unsigned int * p2 ;
2012-03-28 02:02:22 -07:00
2012-05-03 15:42:15 -07:00
evas_object_image_size_get ( sd - > icon , & w , & h ) ;
stride = evas_object_image_stride_get ( sd - > icon ) ;
2012-03-28 02:02:22 -07:00
if ( ( w > 0 ) & & ( h > 0 ) & &
2012-02-29 04:06:12 -08:00
( stride > = ( int ) ( w * sizeof ( unsigned int ) ) ) )
{
ic . width = w ;
ic . height = h ;
ic . data = malloc ( w * h * sizeof ( unsigned int ) ) ;
2012-03-28 02:02:22 -07:00
2012-02-29 04:06:12 -08:00
if ( ic . data )
{
p = ( unsigned char * ) data ;
p2 = ( unsigned int * ) ic . data ;
for ( y = 0 ; y < h ; y + + )
{
for ( x = 0 ; x < w ; x + + )
{
* p2 = * ( ( unsigned int * ) p ) ;
p + = sizeof ( unsigned int ) ;
p2 + + ;
}
2012-03-28 02:02:22 -07:00
p + = ( stride - ( w * sizeof ( unsigned int ) ) ) ;
2012-02-29 04:06:12 -08:00
}
2012-06-06 01:25:12 -07:00
ecore_x_netwm_icons_set ( sd - > x . xwin , & ic , 1 ) ;
2012-02-29 04:06:12 -08:00
free ( ic . data ) ;
}
}
2012-05-03 15:42:15 -07:00
evas_object_image_data_set ( sd - > icon , data ) ;
2012-02-29 04:06:12 -08:00
}
}
2012-03-28 02:02:22 -07:00
2012-05-03 15:42:15 -07:00
switch ( sd - > type )
2008-10-06 18:23:49 -07:00
{
2009-04-14 19:08:07 -07:00
case ELM_WIN_BASIC :
2012-06-06 01:25:12 -07:00
ecore_x_netwm_window_type_set ( sd - > x . xwin , ECORE_X_WINDOW_TYPE_NORMAL ) ;
2012-05-03 15:42:15 -07:00
break ;
2009-04-14 19:08:07 -07:00
case ELM_WIN_DIALOG_BASIC :
2012-06-06 01:25:12 -07:00
ecore_x_netwm_window_type_set ( sd - > x . xwin , ECORE_X_WINDOW_TYPE_DIALOG ) ;
2012-05-03 15:42:15 -07:00
break ;
2009-04-14 19:08:07 -07:00
case ELM_WIN_DESKTOP :
2012-06-06 01:25:12 -07:00
ecore_x_netwm_window_type_set ( sd - > x . xwin , ECORE_X_WINDOW_TYPE_DESKTOP ) ;
2012-05-03 15:42:15 -07:00
break ;
2009-04-14 19:08:07 -07:00
case ELM_WIN_DOCK :
2012-06-06 01:25:12 -07:00
ecore_x_netwm_window_type_set ( sd - > x . xwin , ECORE_X_WINDOW_TYPE_DOCK ) ;
2012-05-03 15:42:15 -07:00
break ;
2009-04-14 19:08:07 -07:00
case ELM_WIN_TOOLBAR :
2012-06-06 01:25:12 -07:00
ecore_x_netwm_window_type_set ( sd - > x . xwin , ECORE_X_WINDOW_TYPE_TOOLBAR ) ;
2012-05-03 15:42:15 -07:00
break ;
2009-04-14 19:08:07 -07:00
case ELM_WIN_MENU :
2012-06-06 01:25:12 -07:00
ecore_x_netwm_window_type_set ( sd - > x . xwin , ECORE_X_WINDOW_TYPE_MENU ) ;
2012-05-03 15:42:15 -07:00
break ;
2009-04-14 19:08:07 -07:00
case ELM_WIN_UTILITY :
2012-06-06 01:25:12 -07:00
ecore_x_netwm_window_type_set ( sd - > x . xwin , ECORE_X_WINDOW_TYPE_UTILITY ) ;
2012-05-03 15:42:15 -07:00
break ;
2009-04-14 19:08:07 -07:00
case ELM_WIN_SPLASH :
2012-06-06 01:25:12 -07:00
ecore_x_netwm_window_type_set ( sd - > x . xwin , ECORE_X_WINDOW_TYPE_SPLASH ) ;
2012-05-03 15:42:15 -07:00
break ;
2011-03-22 08:46:52 -07:00
case ELM_WIN_DROPDOWN_MENU :
2012-05-03 15:42:15 -07:00
ecore_x_netwm_window_type_set
2012-06-06 01:25:12 -07:00
( sd - > x . xwin , ECORE_X_WINDOW_TYPE_DROPDOWN_MENU ) ;
2012-05-03 15:42:15 -07:00
break ;
2011-03-22 08:46:52 -07:00
case ELM_WIN_POPUP_MENU :
2012-05-03 15:42:15 -07:00
ecore_x_netwm_window_type_set
2012-06-06 01:25:12 -07:00
( sd - > x . xwin , ECORE_X_WINDOW_TYPE_POPUP_MENU ) ;
2012-05-03 15:42:15 -07:00
break ;
2011-03-22 08:46:52 -07:00
case ELM_WIN_TOOLTIP :
2012-06-06 01:25:12 -07:00
ecore_x_netwm_window_type_set ( sd - > x . xwin , ECORE_X_WINDOW_TYPE_TOOLTIP ) ;
2012-05-03 15:42:15 -07:00
break ;
2011-03-22 08:46:52 -07:00
case ELM_WIN_NOTIFICATION :
2012-05-03 15:42:15 -07:00
ecore_x_netwm_window_type_set
2012-06-06 01:25:12 -07:00
( sd - > x . xwin , ECORE_X_WINDOW_TYPE_NOTIFICATION ) ;
2012-05-03 15:42:15 -07:00
break ;
2011-03-22 08:46:52 -07:00
case ELM_WIN_COMBO :
2012-06-06 01:25:12 -07:00
ecore_x_netwm_window_type_set ( sd - > x . xwin , ECORE_X_WINDOW_TYPE_COMBO ) ;
2012-05-03 15:42:15 -07:00
break ;
2011-03-22 08:46:52 -07:00
case ELM_WIN_DND :
2012-06-06 01:25:12 -07:00
ecore_x_netwm_window_type_set ( sd - > x . xwin , ECORE_X_WINDOW_TYPE_DND ) ;
2012-05-03 15:42:15 -07:00
break ;
2009-04-14 19:08:07 -07:00
default :
2012-05-03 15:42:15 -07:00
break ;
2008-10-06 18:23:49 -07:00
}
2009-04-14 19:08:07 -07:00
ecore_x_e_virtual_keyboard_state_set
2012-06-06 01:25:12 -07:00
( sd - > x . xwin , ( Ecore_X_Virtual_Keyboard_State ) sd - > kbdmode ) ;
2012-05-03 15:42:15 -07:00
if ( sd - > indmode = = ELM_WIN_INDICATOR_SHOW )
2012-02-24 21:14:19 -08:00
ecore_x_e_illume_indicator_state_set
2012-06-06 01:25:12 -07:00
( sd - > x . xwin , ECORE_X_ILLUME_INDICATOR_STATE_ON ) ;
2012-05-03 15:42:15 -07:00
else if ( sd - > indmode = = ELM_WIN_INDICATOR_HIDE )
2012-02-24 21:14:19 -08:00
ecore_x_e_illume_indicator_state_set
2012-06-06 01:25:12 -07:00
( sd - > x . xwin , ECORE_X_ILLUME_INDICATOR_STATE_OFF ) ;
2008-09-29 23:58:56 -07:00
}
2012-07-17 11:46:18 -07:00
2010-04-12 01:27:10 -07:00
# endif
2008-09-29 23:58:56 -07:00
2013-07-02 21:19:56 -07:00
/**
* @ internal
*
* Resize the window according to window layout ' s min and weight .
* If the window layout ' s weight is 0.0 , the window max is limited to layout ' s
* min size .
*
* This is called when the window layout ' s weight hint is changed or when the
* window is rotated .
*
* @ param obj window object
*/
2008-10-06 18:23:49 -07:00
static void
2012-05-03 15:42:15 -07:00
_elm_win_resize_objects_eval ( Evas_Object * obj )
2008-10-06 18:23:49 -07:00
{
2012-05-03 15:42:15 -07:00
ELM_WIN_DATA_GET ( obj , sd ) ;
2013-01-17 14:11:21 -08:00
Evas_Coord w , h , minw , minh , maxw , maxh ;
2008-10-06 18:23:49 -07:00
double wx , wy ;
2013-01-17 14:11:21 -08:00
evas_object_size_hint_min_get ( sd - > layout , & minw , & minh ) ;
if ( minw < 1 ) minw = 1 ;
if ( minh < 1 ) minh = 1 ;
2011-04-01 04:20:18 -07:00
2013-01-17 14:11:21 -08:00
evas_object_size_hint_weight_get ( sd - > layout , & wx , & wy ) ;
if ( ! wx ) maxw = minw ;
2008-10-06 18:23:49 -07:00
else maxw = 32767 ;
2013-01-17 14:11:21 -08:00
if ( ! wy ) maxh = minh ;
2008-10-06 18:23:49 -07:00
else maxh = 32767 ;
2013-01-17 14:11:21 -08:00
2008-10-06 18:23:49 -07:00
evas_object_size_hint_min_set ( obj , minw , minh ) ;
evas_object_size_hint_max_set ( obj , maxw , maxh ) ;
evas_object_geometry_get ( obj , NULL , NULL , & w , & h ) ;
if ( w < minw ) w = minw ;
if ( h < minh ) h = minh ;
2013-01-17 14:11:21 -08:00
if ( w > maxw ) w = maxw ;
if ( h > maxh ) h = maxh ;
2012-11-20 20:21:24 -08:00
evas_object_move ( obj , 0 , 0 ) ;
2013-01-11 08:43:14 -08:00
evas_object_resize ( obj , w , h ) ;
2008-10-06 18:23:49 -07:00
}
static void
2012-05-03 15:42:15 -07:00
_elm_win_on_resize_obj_changed_size_hints ( void * data ,
Evas * e __UNUSED__ ,
Evas_Object * obj __UNUSED__ ,
void * event_info __UNUSED__ )
2008-10-06 18:23:49 -07:00
{
2012-05-03 15:42:15 -07:00
_elm_win_resize_objects_eval ( data ) ;
2008-10-06 18:23:49 -07:00
}
void
_elm_win_shutdown ( void )
{
2012-08-28 03:37:02 -07:00
while ( _elm_win_list ) evas_object_del ( _elm_win_list - > data ) ;
2013-05-29 05:11:46 -07:00
ELM_SAFE_FREE ( _elm_win_state_eval_job , ecore_job_del ) ;
2008-10-06 18:23:49 -07:00
}
2008-11-14 22:09:04 -08:00
void
2012-05-03 15:42:15 -07:00
_elm_win_rescale ( Elm_Theme * th ,
Eina_Bool use_theme )
2008-11-14 22:09:04 -08:00
{
2009-02-25 11:50:45 -08:00
const Eina_List * l ;
Evas_Object * obj ;
2009-11-14 17:51:39 -08:00
2010-11-05 01:37:31 -07:00
if ( ! use_theme )
{
2012-08-05 21:09:02 -07:00
EINA_LIST_FOREACH ( _elm_win_list , l , obj )
2010-11-05 01:37:31 -07:00
elm_widget_theme ( obj ) ;
}
else
{
2012-08-05 21:09:02 -07:00
EINA_LIST_FOREACH ( _elm_win_list , l , obj )
2010-11-05 01:37:31 -07:00
elm_widget_theme_specific ( obj , th , EINA_FALSE ) ;
}
2008-11-14 22:09:04 -08:00
}
2012-08-18 06:52:03 -07:00
void
_elm_win_access ( Eina_Bool is_access )
{
2013-04-10 01:28:08 -07:00
Evas * evas ;
2012-08-18 06:52:03 -07:00
const Eina_List * l ;
Evas_Object * obj ;
2013-08-05 22:00:50 -07:00
Evas_Object * fobj ;
2012-08-18 06:52:03 -07:00
2012-08-28 03:37:02 -07:00
EINA_LIST_FOREACH ( _elm_win_list , l , obj )
2013-04-10 01:28:08 -07:00
{
elm_widget_access ( obj , is_access ) ;
2013-08-05 22:00:50 -07:00
/* floating orphan object. if there are A, B, C objects and user does
as below , then there would be floating orphan objects .
1. elm_object_content_set ( layout , A ) ;
2. elm_object_content_set ( layout , B ) ;
3. elm_object_content_set ( layout , C ) ;
now , the object A and B are floating orphan objects */
fobj = obj ;
for ( ; ; )
{
fobj = evas_object_below_get ( fobj ) ;
if ( ! fobj ) break ;
if ( elm_widget_is ( fobj ) & & ! elm_widget_parent_get ( fobj ) )
{
elm_widget_access ( fobj , is_access ) ;
}
}
2013-04-10 01:28:08 -07:00
if ( ! is_access )
{
evas = evas_object_evas_get ( obj ) ;
if ( evas ) _elm_access_object_hilight_disable ( evas ) ;
}
}
2012-08-18 06:52:03 -07:00
}
2011-10-19 07:17:14 -07:00
void
_elm_win_translate ( void )
{
const Eina_List * l ;
Evas_Object * obj ;
2012-08-05 21:09:02 -07:00
EINA_LIST_FOREACH ( _elm_win_list , l , obj )
2012-05-03 15:42:15 -07:00
elm_widget_translate ( obj ) ;
2011-10-19 07:17:14 -07:00
}
2010-04-12 01:27:10 -07:00
# ifdef HAVE_ELEMENTARY_X
2010-06-25 02:58:14 -07:00
static Eina_Bool
2012-05-03 15:42:15 -07:00
_elm_win_client_message ( void * data ,
int type __UNUSED__ ,
void * event )
2010-04-12 01:27:10 -07:00
{
2013-04-24 04:41:37 -07:00
ELM_WIN_DATA_GET ( data , sd ) ;
2010-04-12 01:27:10 -07:00
Ecore_X_Event_Client_Message * e = event ;
2010-06-25 02:58:14 -07:00
if ( e - > format ! = 32 ) return ECORE_CALLBACK_PASS_ON ;
2010-04-12 01:27:10 -07:00
if ( e - > message_type = = ECORE_X_ATOM_E_COMP_FLUSH )
{
2012-06-06 01:25:12 -07:00
if ( ( unsigned int ) e - > data . l [ 0 ] = = sd - > x . xwin )
2010-04-12 01:27:10 -07:00
{
2012-11-25 22:32:53 -08:00
Evas * evas = evas_object_evas_get ( sd - > obj ) ;
2010-04-21 00:46:03 -07:00
if ( evas )
2010-04-12 01:27:10 -07:00
{
edje_file_cache_flush ( ) ;
edje_collection_cache_flush ( ) ;
2010-04-21 00:46:03 -07:00
evas_image_cache_flush ( evas ) ;
evas_font_cache_flush ( evas ) ;
2010-04-12 01:27:10 -07:00
}
}
}
else if ( e - > message_type = = ECORE_X_ATOM_E_COMP_DUMP )
{
2012-06-06 01:25:12 -07:00
if ( ( unsigned int ) e - > data . l [ 0 ] = = sd - > x . xwin )
2010-04-12 01:27:10 -07:00
{
2012-11-25 22:32:53 -08:00
Evas * evas = evas_object_evas_get ( sd - > obj ) ;
2010-04-21 00:46:03 -07:00
if ( evas )
2010-04-12 01:27:10 -07:00
{
edje_file_cache_flush ( ) ;
edje_collection_cache_flush ( ) ;
2010-04-21 00:46:03 -07:00
evas_image_cache_flush ( evas ) ;
evas_font_cache_flush ( evas ) ;
evas_render_dump ( evas ) ;
2010-04-12 01:27:10 -07:00
}
}
}
2012-05-22 05:13:49 -07:00
else if ( e - > message_type = = ECORE_X_ATOM_E_ILLUME_ACCESS_CONTROL )
{
2012-06-06 01:25:12 -07:00
if ( ( unsigned int ) e - > data . l [ 0 ] = = sd - > x . xwin )
2012-05-22 05:13:49 -07:00
{
if ( ( unsigned int ) e - > data . l [ 1 ] = =
ECORE_X_ATOM_E_ILLUME_ACCESS_ACTION_NEXT )
{
// XXX: call right access func
}
else if ( ( unsigned int ) e - > data . l [ 1 ] = =
ECORE_X_ATOM_E_ILLUME_ACCESS_ACTION_PREV )
{
// XXX: call right access func
}
2012-07-17 11:46:18 -07:00
else if ( ( unsigned int ) e - > data . l [ 1 ] = =
2012-05-22 05:13:49 -07:00
ECORE_X_ATOM_E_ILLUME_ACCESS_ACTION_ACTIVATE )
{
2012-09-16 20:01:46 -07:00
_elm_access_highlight_object_activate
2012-11-25 22:32:53 -08:00
( sd - > obj , ELM_ACTIVATE_DEFAULT ) ;
2012-05-22 05:13:49 -07:00
}
else if ( ( unsigned int ) e - > data . l [ 1 ] = =
ECORE_X_ATOM_E_ILLUME_ACCESS_ACTION_READ )
{
2012-11-30 03:50:52 -08:00
/* there would be better way to read highlight object */
2013-01-17 03:32:14 -08:00
Evas * evas ;
evas = evas_object_evas_get ( sd - > obj ) ;
if ( ! evas ) return ECORE_CALLBACK_PASS_ON ;
_elm_access_mouse_event_enabled_set ( EINA_TRUE ) ;
evas_event_feed_mouse_in ( evas , 0 , NULL ) ;
evas_event_feed_mouse_move
( evas , e - > data . l [ 2 ] , e - > data . l [ 3 ] , 0 , NULL ) ;
_elm_access_mouse_event_enabled_set ( EINA_FALSE ) ;
2012-05-22 05:13:49 -07:00
}
2012-07-17 11:46:18 -07:00
else if ( ( unsigned int ) e - > data . l [ 1 ] = =
2012-05-22 05:13:49 -07:00
ECORE_X_ATOM_E_ILLUME_ACCESS_ACTION_READ_NEXT )
{
2012-11-30 03:50:52 -08:00
_elm_access_highlight_cycle ( sd - > obj , ELM_FOCUS_NEXT ) ;
2012-05-22 05:13:49 -07:00
}
2012-07-17 11:46:18 -07:00
else if ( ( unsigned int ) e - > data . l [ 1 ] = =
2012-05-22 05:13:49 -07:00
ECORE_X_ATOM_E_ILLUME_ACCESS_ACTION_READ_PREV )
{
2012-11-30 03:50:52 -08:00
_elm_access_highlight_cycle ( sd - > obj , ELM_FOCUS_PREVIOUS ) ;
2012-05-22 05:13:49 -07:00
}
2012-09-03 02:43:35 -07:00
else if ( ( unsigned int ) e - > data . l [ 1 ] = =
ECORE_X_ATOM_E_ILLUME_ACCESS_ACTION_UP )
{
2012-09-16 20:01:46 -07:00
_elm_access_highlight_object_activate
2012-11-25 22:32:53 -08:00
( sd - > obj , ELM_ACTIVATE_UP ) ;
2012-09-03 02:43:35 -07:00
}
else if ( ( unsigned int ) e - > data . l [ 1 ] = =
ECORE_X_ATOM_E_ILLUME_ACCESS_ACTION_DOWN )
{
2012-09-16 20:01:46 -07:00
_elm_access_highlight_object_activate
2012-11-25 22:32:53 -08:00
( sd - > obj , ELM_ACTIVATE_DOWN ) ;
2012-09-03 02:43:35 -07:00
}
2012-05-22 05:13:49 -07:00
}
}
2010-06-25 02:58:14 -07:00
return ECORE_CALLBACK_PASS_ON ;
2010-04-12 01:27:10 -07:00
}
2012-05-02 18:19:05 -07:00
2012-11-19 08:51:44 -08:00
static Eina_Bool
_elm_win_property_change ( void * data ,
int type __UNUSED__ ,
void * event )
{
2013-05-03 03:23:53 -07:00
ELM_WIN_DATA_GET ( data , sd ) ;
2012-11-19 08:51:44 -08:00
Ecore_X_Event_Window_Property * e = event ;
if ( e - > atom = = ECORE_X_ATOM_E_ILLUME_INDICATOR_STATE )
{
if ( e - > win = = sd - > x . xwin )
{
2013-06-26 09:54:26 -07:00
sd - > indmode = ( Elm_Win_Indicator_Mode ) ecore_x_e_illume_indicator_state_get ( e - > win ) ;
2012-11-25 22:32:53 -08:00
evas_object_smart_callback_call ( sd - > obj , SIG_INDICATOR_PROP_CHANGED , NULL ) ;
2012-11-19 08:51:44 -08:00
}
}
return ECORE_CALLBACK_PASS_ON ;
}
2012-05-03 15:42:15 -07:00
# endif
Begins highlight on focused object.
There's still work to do here, particularly in the theme, but it has
something nice and fun to see the code working.
The idea behind this:
Window tracks focused object and sends the highlight object(s) to it. These
are simple edje objects, one on top, one below the focused widget for nice
effects. Widgets can choose to ignore the highlight and this will be sent to
the parent object, if it doesn't ignore it as well.
About the bottom object, it doesn't work now. For the most part, focused
widget will always be a member of some smart object, so stacking won't work
and the desired effect is nowhere to be seen. This will be worked out later.
To be done now:
- Let the theme for a widget define its own highlight, disabling if needed
the standard one for those objects.
- Needed base in code to allow animations when switching focus. All in theme.
- Properly test all widgets and fix some things that will most likely work
in weird ways, given the nature of Evas/Edje and how Elementary makes use
of them.
- Forgot the rest, stay tuned, test, report, give ideas, plant a tree.
Work started by glima, continued with some refactors by me when he
decided he needed vacations.
SVN revision: 52524
2010-09-20 15:18:58 -07:00
static void
2012-05-03 15:42:15 -07:00
_elm_win_focus_highlight_hide ( void * data __UNUSED__ ,
Evas_Object * obj ,
const char * emission __UNUSED__ ,
const char * source __UNUSED__ )
Begins highlight on focused object.
There's still work to do here, particularly in the theme, but it has
something nice and fun to see the code working.
The idea behind this:
Window tracks focused object and sends the highlight object(s) to it. These
are simple edje objects, one on top, one below the focused widget for nice
effects. Widgets can choose to ignore the highlight and this will be sent to
the parent object, if it doesn't ignore it as well.
About the bottom object, it doesn't work now. For the most part, focused
widget will always be a member of some smart object, so stacking won't work
and the desired effect is nowhere to be seen. This will be worked out later.
To be done now:
- Let the theme for a widget define its own highlight, disabling if needed
the standard one for those objects.
- Needed base in code to allow animations when switching focus. All in theme.
- Properly test all widgets and fix some things that will most likely work
in weird ways, given the nature of Evas/Edje and how Elementary makes use
of them.
- Forgot the rest, stay tuned, test, report, give ideas, plant a tree.
Work started by glima, continued with some refactors by me when he
decided he needed vacations.
SVN revision: 52524
2010-09-20 15:18:58 -07:00
{
2012-05-03 15:42:15 -07:00
evas_object_hide ( obj ) ;
2012-05-02 18:19:05 -07:00
}
static void
2012-05-03 15:42:15 -07:00
_elm_win_focus_highlight_anim_end ( void * data ,
Evas_Object * obj ,
const char * emission __UNUSED__ ,
const char * source __UNUSED__ )
2012-05-02 18:19:05 -07:00
{
2013-04-24 04:41:37 -07:00
ELM_WIN_DATA_GET ( data , sd ) ;
2012-05-02 18:19:05 -07:00
2012-05-03 15:42:15 -07:00
_elm_win_focus_highlight_simple_setup ( sd , obj ) ;
2012-05-02 18:19:05 -07:00
}
static void
2012-05-03 15:42:15 -07:00
_elm_win_focus_highlight_init ( Elm_Win_Smart_Data * sd )
2012-05-02 18:19:05 -07:00
{
2012-05-03 15:42:15 -07:00
evas_event_callback_add ( sd - > evas , EVAS_CALLBACK_CANVAS_OBJECT_FOCUS_IN ,
2013-04-24 04:41:37 -07:00
_elm_win_object_focus_in , sd - > obj ) ;
2012-05-03 15:42:15 -07:00
evas_event_callback_add ( sd - > evas ,
Begins highlight on focused object.
There's still work to do here, particularly in the theme, but it has
something nice and fun to see the code working.
The idea behind this:
Window tracks focused object and sends the highlight object(s) to it. These
are simple edje objects, one on top, one below the focused widget for nice
effects. Widgets can choose to ignore the highlight and this will be sent to
the parent object, if it doesn't ignore it as well.
About the bottom object, it doesn't work now. For the most part, focused
widget will always be a member of some smart object, so stacking won't work
and the desired effect is nowhere to be seen. This will be worked out later.
To be done now:
- Let the theme for a widget define its own highlight, disabling if needed
the standard one for those objects.
- Needed base in code to allow animations when switching focus. All in theme.
- Properly test all widgets and fix some things that will most likely work
in weird ways, given the nature of Evas/Edje and how Elementary makes use
of them.
- Forgot the rest, stay tuned, test, report, give ideas, plant a tree.
Work started by glima, continued with some refactors by me when he
decided he needed vacations.
SVN revision: 52524
2010-09-20 15:18:58 -07:00
EVAS_CALLBACK_CANVAS_OBJECT_FOCUS_OUT ,
2013-04-24 04:41:37 -07:00
_elm_win_object_focus_out , sd - > obj ) ;
Begins highlight on focused object.
There's still work to do here, particularly in the theme, but it has
something nice and fun to see the code working.
The idea behind this:
Window tracks focused object and sends the highlight object(s) to it. These
are simple edje objects, one on top, one below the focused widget for nice
effects. Widgets can choose to ignore the highlight and this will be sent to
the parent object, if it doesn't ignore it as well.
About the bottom object, it doesn't work now. For the most part, focused
widget will always be a member of some smart object, so stacking won't work
and the desired effect is nowhere to be seen. This will be worked out later.
To be done now:
- Let the theme for a widget define its own highlight, disabling if needed
the standard one for those objects.
- Needed base in code to allow animations when switching focus. All in theme.
- Properly test all widgets and fix some things that will most likely work
in weird ways, given the nature of Evas/Edje and how Elementary makes use
of them.
- Forgot the rest, stay tuned, test, report, give ideas, plant a tree.
Work started by glima, continued with some refactors by me when he
decided he needed vacations.
SVN revision: 52524
2010-09-20 15:18:58 -07:00
2012-05-03 15:42:15 -07:00
sd - > focus_highlight . cur . target = evas_focus_get ( sd - > evas ) ;
2013-08-04 01:37:30 -07:00
sd - > focus_highlight . fobj = edje_object_add ( sd - > evas ) ;
2013-08-04 01:09:44 -07:00
sd - > focus_highlight . theme_changed = EINA_TRUE ;
2013-08-04 01:37:30 -07:00
edje_object_signal_callback_add ( sd - > focus_highlight . fobj ,
Begins highlight on focused object.
There's still work to do here, particularly in the theme, but it has
something nice and fun to see the code working.
The idea behind this:
Window tracks focused object and sends the highlight object(s) to it. These
are simple edje objects, one on top, one below the focused widget for nice
effects. Widgets can choose to ignore the highlight and this will be sent to
the parent object, if it doesn't ignore it as well.
About the bottom object, it doesn't work now. For the most part, focused
widget will always be a member of some smart object, so stacking won't work
and the desired effect is nowhere to be seen. This will be worked out later.
To be done now:
- Let the theme for a widget define its own highlight, disabling if needed
the standard one for those objects.
- Needed base in code to allow animations when switching focus. All in theme.
- Properly test all widgets and fix some things that will most likely work
in weird ways, given the nature of Evas/Edje and how Elementary makes use
of them.
- Forgot the rest, stay tuned, test, report, give ideas, plant a tree.
Work started by glima, continued with some refactors by me when he
decided he needed vacations.
SVN revision: 52524
2010-09-20 15:18:58 -07:00
" elm,action,focus,hide,end " , " " ,
_elm_win_focus_highlight_hide , NULL ) ;
2013-08-04 01:37:30 -07:00
edje_object_signal_callback_add ( sd - > focus_highlight . fobj ,
2010-09-28 09:54:11 -07:00
" elm,action,focus,anim,end " , " " ,
2013-04-24 04:41:37 -07:00
_elm_win_focus_highlight_anim_end , sd - > obj ) ;
2012-05-03 15:42:15 -07:00
_elm_win_focus_highlight_reconfigure_job_start ( sd ) ;
2012-05-02 18:19:05 -07:00
}
static void
2012-05-03 15:42:15 -07:00
_elm_win_frame_cb_move_start ( void * data ,
Evas_Object * obj __UNUSED__ ,
const char * sig __UNUSED__ ,
const char * source __UNUSED__ )
2012-05-02 18:19:05 -07:00
{
2013-04-24 04:41:37 -07:00
ELM_WIN_DATA_GET ( data , sd ) ;
2012-05-02 18:19:05 -07:00
2013-04-24 04:41:37 -07:00
if ( ! sd ) return ;
2012-05-02 18:19:05 -07:00
/* FIXME: Change mouse pointer */
2012-05-03 15:42:15 -07:00
/* NB: Wayland handles moving surfaces by itself so we cannot
* specify a specific x / y we want . Instead , we will pass in the
* existing x / y values so they can be recorded as ' previous '
* position . The new position will get updated automatically when
* the move is finished */
2012-05-02 18:19:05 -07:00
2012-05-03 15:42:15 -07:00
ecore_evas_wayland_move ( sd - > ee , sd - > screen . x , sd - > screen . y ) ;
2012-05-02 18:19:05 -07:00
}
2013-04-24 16:22:22 -07:00
# ifdef HAVE_ELEMENTARY_WAYLAND
struct _resize_info
{
const char * name ;
int location ;
} ;
static struct _resize_info _border_side [ 4 ] =
{
{ ELM_CURSOR_TOP_SIDE , 1 } ,
{ ELM_CURSOR_LEFT_SIDE , 4 } ,
{ ELM_CURSOR_BOTTOM_SIDE , 2 } ,
{ ELM_CURSOR_RIGHT_SIDE , 8 } ,
} ;
static struct _resize_info _border_corner [ 4 ] =
{
{ ELM_CURSOR_TOP_LEFT_CORNER , 5 } ,
{ ELM_CURSOR_BOTTOM_LEFT_CORNER , 6 } ,
{ ELM_CURSOR_BOTTOM_RIGHT_CORNER , 10 } ,
{ ELM_CURSOR_TOP_RIGHT_CORNER , 9 } ,
} ;
# endif
2012-08-06 05:05:53 -07:00
static void
_elm_win_frame_cb_resize_show ( void * data ,
Evas_Object * obj __UNUSED__ ,
const char * sig __UNUSED__ ,
const char * source )
{
2013-04-24 04:41:37 -07:00
ELM_WIN_DATA_GET ( data , sd ) ;
2012-08-06 05:05:53 -07:00
2013-04-24 04:41:37 -07:00
if ( ! sd ) return ;
2012-08-06 05:05:53 -07:00
if ( sd - > resizing ) return ;
# ifdef HAVE_ELEMENTARY_WAYLAND
2013-04-24 16:22:22 -07:00
int i ;
i = sd - > rot / 90 ;
2012-08-06 05:05:53 -07:00
if ( ! strcmp ( source , " elm.event.resize.t " ) )
2013-04-24 16:22:22 -07:00
ecore_wl_window_cursor_from_name_set ( sd - > wl . win ,
_border_side [ ( 0 + i ) % 4 ] . name ) ;
2012-08-06 05:05:53 -07:00
else if ( ! strcmp ( source , " elm.event.resize.b " ) )
2013-04-24 16:22:22 -07:00
ecore_wl_window_cursor_from_name_set ( sd - > wl . win ,
_border_side [ ( 2 + i ) % 4 ] . name ) ;
2012-08-06 05:05:53 -07:00
else if ( ! strcmp ( source , " elm.event.resize.l " ) )
2013-04-24 16:22:22 -07:00
ecore_wl_window_cursor_from_name_set ( sd - > wl . win ,
_border_side [ ( 1 + i ) % 4 ] . name ) ;
2012-08-06 05:05:53 -07:00
else if ( ! strcmp ( source , " elm.event.resize.r " ) )
2013-04-24 16:22:22 -07:00
ecore_wl_window_cursor_from_name_set ( sd - > wl . win ,
_border_side [ ( 3 + i ) % 4 ] . name ) ;
2012-08-06 05:05:53 -07:00
else if ( ! strcmp ( source , " elm.event.resize.tl " ) )
2012-10-10 17:35:00 -07:00
ecore_wl_window_cursor_from_name_set ( sd - > wl . win ,
2013-04-24 16:22:22 -07:00
_border_corner [ ( 0 + i ) % 4 ] . name ) ;
2012-08-06 05:05:53 -07:00
else if ( ! strcmp ( source , " elm.event.resize.tr " ) )
2012-10-10 17:35:00 -07:00
ecore_wl_window_cursor_from_name_set ( sd - > wl . win ,
2013-04-24 16:22:22 -07:00
_border_corner [ ( 3 + i ) % 4 ] . name ) ;
2012-08-06 05:05:53 -07:00
else if ( ! strcmp ( source , " elm.event.resize.bl " ) )
2012-10-10 17:35:00 -07:00
ecore_wl_window_cursor_from_name_set ( sd - > wl . win ,
2013-04-24 16:22:22 -07:00
_border_corner [ ( 1 + i ) % 4 ] . name ) ;
2012-08-06 05:05:53 -07:00
else if ( ! strcmp ( source , " elm.event.resize.br " ) )
2012-10-10 17:35:00 -07:00
ecore_wl_window_cursor_from_name_set ( sd - > wl . win ,
2013-04-24 16:22:22 -07:00
_border_corner [ ( 2 + i ) % 4 ] . name ) ;
2012-08-06 05:05:53 -07:00
else
ecore_wl_window_cursor_default_restore ( sd - > wl . win ) ;
2012-08-08 01:10:22 -07:00
# else
( void ) source ;
2012-08-06 05:05:53 -07:00
# endif
}
2012-08-16 02:40:02 -07:00
static void
_elm_win_frame_cb_resize_hide ( void * data ,
Evas_Object * obj __UNUSED__ ,
const char * sig __UNUSED__ ,
const char * source __UNUSED__ )
{
2013-04-24 04:41:37 -07:00
ELM_WIN_DATA_GET ( data , sd ) ;
2012-08-16 02:40:02 -07:00
2013-04-24 04:41:37 -07:00
if ( ! sd ) return ;
2012-08-16 02:40:02 -07:00
if ( sd - > resizing ) return ;
# ifdef HAVE_ELEMENTARY_WAYLAND
ecore_wl_window_cursor_default_restore ( sd - > wl . win ) ;
# endif
}
2012-05-02 18:19:05 -07:00
static void
2012-05-03 15:42:15 -07:00
_elm_win_frame_cb_resize_start ( void * data ,
Evas_Object * obj __UNUSED__ ,
const char * sig __UNUSED__ ,
const char * source )
2012-05-02 18:19:05 -07:00
{
2013-04-24 16:22:22 -07:00
# ifdef HAVE_ELEMENTARY_WAYLAND
2013-04-24 04:41:37 -07:00
ELM_WIN_DATA_GET ( data , sd ) ;
2013-04-24 16:22:22 -07:00
int i ;
2012-05-03 15:42:15 -07:00
2013-04-24 04:41:37 -07:00
if ( ! sd ) return ;
2012-05-03 15:42:15 -07:00
if ( sd - > resizing ) return ;
2012-05-02 18:19:05 -07:00
2012-05-03 15:42:15 -07:00
sd - > resizing = EINA_TRUE ;
2013-04-24 16:22:22 -07:00
i = sd - > rot / 90 ;
2012-01-08 03:23:59 -08:00
if ( ! strcmp ( source , " elm.event.resize.t " ) )
2013-04-24 16:22:22 -07:00
sd - > resize_location = _border_side [ ( 0 + i ) % 4 ] . location ;
2012-01-08 03:23:59 -08:00
else if ( ! strcmp ( source , " elm.event.resize.b " ) )
2013-04-24 16:22:22 -07:00
sd - > resize_location = _border_side [ ( 2 + i ) % 4 ] . location ;
2012-01-08 03:23:59 -08:00
else if ( ! strcmp ( source , " elm.event.resize.l " ) )
2013-04-24 16:22:22 -07:00
sd - > resize_location = _border_side [ ( 1 + i ) % 4 ] . location ;
2012-01-08 03:23:59 -08:00
else if ( ! strcmp ( source , " elm.event.resize.r " ) )
2013-04-24 16:22:22 -07:00
sd - > resize_location = _border_side [ ( 3 + i ) % 4 ] . location ;
2012-01-08 03:23:59 -08:00
else if ( ! strcmp ( source , " elm.event.resize.tl " ) )
2013-04-24 16:22:22 -07:00
sd - > resize_location = _border_corner [ ( 0 + i ) % 4 ] . location ;
2012-01-08 03:23:59 -08:00
else if ( ! strcmp ( source , " elm.event.resize.tr " ) )
2013-04-24 16:22:22 -07:00
sd - > resize_location = _border_corner [ ( 3 + i ) % 4 ] . location ;
2012-01-08 03:23:59 -08:00
else if ( ! strcmp ( source , " elm.event.resize.bl " ) )
2013-04-24 16:22:22 -07:00
sd - > resize_location = _border_corner [ ( 1 + i ) % 4 ] . location ;
2012-01-08 03:23:59 -08:00
else if ( ! strcmp ( source , " elm.event.resize.br " ) )
2013-04-24 16:22:22 -07:00
sd - > resize_location = _border_corner [ ( 2 + i ) % 4 ] . location ;
2012-01-08 03:23:59 -08:00
else
2012-05-03 15:42:15 -07:00
sd - > resize_location = 0 ;
2012-01-08 03:23:59 -08:00
2012-05-03 15:42:15 -07:00
if ( sd - > resize_location > 0 )
ecore_evas_wayland_resize ( sd - > ee , sd - > resize_location ) ;
2013-05-01 06:51:25 -07:00
# else
( void ) data ;
( void ) source ;
2013-04-24 16:22:22 -07:00
# endif
2012-01-04 01:30:05 -08:00
}
2012-03-28 02:02:22 -07:00
static void
2012-05-03 15:42:15 -07:00
_elm_win_frame_cb_minimize ( void * data ,
Evas_Object * obj __UNUSED__ ,
const char * sig __UNUSED__ ,
const char * source __UNUSED__ )
2012-01-04 01:30:05 -08:00
{
2013-04-24 04:41:37 -07:00
ELM_WIN_DATA_GET ( data , sd ) ;
2012-01-04 01:30:05 -08:00
2013-04-24 04:41:37 -07:00
if ( ! sd ) return ;
2013-01-10 03:53:39 -08:00
// sd->iconified = EINA_TRUE;
2012-07-18 21:35:50 -07:00
TRAP ( sd , iconified_set , EINA_TRUE ) ;
2012-01-03 12:41:49 -08:00
}
2012-03-28 02:02:22 -07:00
static void
2012-05-03 15:42:15 -07:00
_elm_win_frame_cb_maximize ( void * data ,
Evas_Object * obj __UNUSED__ ,
const char * sig __UNUSED__ ,
const char * source __UNUSED__ )
2012-01-03 12:41:49 -08:00
{
2013-04-24 04:41:37 -07:00
ELM_WIN_DATA_GET ( data , sd ) ;
2012-01-04 01:30:05 -08:00
2013-04-24 04:41:37 -07:00
if ( ! sd ) return ;
2012-05-03 15:42:15 -07:00
if ( sd - > maximized ) sd - > maximized = EINA_FALSE ;
else sd - > maximized = EINA_TRUE ;
2012-07-18 21:35:50 -07:00
TRAP ( sd , maximized_set , sd - > maximized ) ;
2012-01-04 01:30:05 -08:00
}
2012-03-28 02:02:22 -07:00
static void
2012-05-03 15:42:15 -07:00
_elm_win_frame_cb_close ( void * data ,
Evas_Object * obj __UNUSED__ ,
const char * sig __UNUSED__ ,
const char * source __UNUSED__ )
2012-01-04 01:30:05 -08:00
{
2013-04-24 04:41:37 -07:00
ELM_WIN_DATA_GET ( data , sd ) ;
2012-08-06 07:34:25 -07:00
Evas_Object * win ;
/* FIXME: After the current freeze, this should be handled differently.
2012-10-10 17:35:00 -07:00
*
* Ideally , we would want to mimic the X11 backend and use something
* like ECORE_WL_EVENT_WINDOW_DELETE and handle the delete_request
* inside of ecore_evas . That would be the ' proper ' way , but since we are
* in a freeze right now , I cannot add a new event value , or a new
2012-08-06 07:34:25 -07:00
* event structure to ecore_wayland .
2012-10-10 17:35:00 -07:00
*
* So yes , this is a temporary ' stop - gap ' solution which will be fixed
* when the freeze is over , but it does fix a trac bug for now , and in a
2012-08-06 07:34:25 -07:00
* way which does not break API or the freeze . - dh
*/
2012-01-04 01:30:05 -08:00
2013-04-24 04:41:37 -07:00
if ( ! sd ) return ;
2012-08-06 07:34:25 -07:00
2012-11-25 22:32:53 -08:00
win = sd - > obj ;
2012-08-06 07:34:25 -07:00
int autodel = sd - > autodel ;
sd - > autodel_clear = & autodel ;
evas_object_ref ( win ) ;
evas_object_smart_callback_call ( win , SIG_DELETE_REQUEST , NULL ) ;
// FIXME: if above callback deletes - then the below will be invalid
if ( autodel ) evas_object_del ( win ) ;
else sd - > autodel_clear = NULL ;
evas_object_unref ( win ) ;
2012-01-04 01:30:05 -08:00
}
2012-03-28 02:02:22 -07:00
static void
2012-05-03 15:42:15 -07:00
_elm_win_frame_add ( Elm_Win_Smart_Data * sd ,
const char * style )
2012-02-10 00:37:16 -08:00
{
2012-11-25 22:32:53 -08:00
Evas_Object * obj = sd - > obj ;
2013-05-06 16:08:58 -07:00
int w , h ;
2012-11-20 20:21:24 -08:00
short layer ;
2013-05-21 12:32:48 -07:00
const char * framespacestr ;
int fx = 0 , fy = 0 , fw = 0 , fh = 0 ;
2012-11-20 20:21:24 -08:00
2012-05-03 15:42:15 -07:00
sd - > frame_obj = edje_object_add ( sd - > evas ) ;
2012-11-20 20:21:24 -08:00
layer = evas_object_layer_get ( obj ) ;
evas_object_layer_set ( sd - > frame_obj , layer + 1 ) ;
2013-05-21 12:32:48 -07:00
if ( ! elm_widget_theme_object_set
( sd - > obj , sd - > frame_obj , " border " , " base " , style ) )
{
evas_object_del ( sd - > frame_obj ) ;
sd - > frame_obj = NULL ;
return ;
}
framespacestr = edje_object_data_get ( sd - > frame_obj , " framespace " ) ;
if ( framespacestr )
sscanf ( framespacestr , " %d %d %d %d " , & fx , & fy , & fw , & fh ) ;
evas_output_framespace_set ( sd - > evas , fx , fy , fw , fh ) ;
2012-05-15 07:48:30 -07:00
2012-05-03 15:42:15 -07:00
evas_object_move ( sd - > frame_obj , 0 , 0 ) ;
evas_object_resize ( sd - > frame_obj , 1 , 1 ) ;
2012-05-02 18:19:05 -07:00
2012-05-03 15:42:15 -07:00
edje_object_signal_callback_add
( sd - > frame_obj , " elm,action,move,start " , " elm " ,
2013-04-24 04:41:37 -07:00
_elm_win_frame_cb_move_start , obj ) ;
2012-08-06 05:05:53 -07:00
edje_object_signal_callback_add
( sd - > frame_obj , " elm,action,resize,show " , " * " ,
2013-04-24 04:41:37 -07:00
_elm_win_frame_cb_resize_show , obj ) ;
2012-08-16 02:40:02 -07:00
edje_object_signal_callback_add
( sd - > frame_obj , " elm,action,resize,hide " , " * " ,
2013-04-24 04:41:37 -07:00
_elm_win_frame_cb_resize_hide , obj ) ;
2012-05-03 15:42:15 -07:00
edje_object_signal_callback_add
( sd - > frame_obj , " elm,action,resize,start " , " * " ,
2013-04-24 04:41:37 -07:00
_elm_win_frame_cb_resize_start , obj ) ;
2012-05-03 15:42:15 -07:00
edje_object_signal_callback_add
( sd - > frame_obj , " elm,action,minimize " , " elm " ,
2013-04-24 04:41:37 -07:00
_elm_win_frame_cb_minimize , obj ) ;
2012-05-03 15:42:15 -07:00
edje_object_signal_callback_add
( sd - > frame_obj , " elm,action,maximize " , " elm " ,
2013-04-24 04:41:37 -07:00
_elm_win_frame_cb_maximize , obj ) ;
2012-05-03 15:42:15 -07:00
edje_object_signal_callback_add
2013-04-24 04:41:37 -07:00
( sd - > frame_obj , " elm,action,close " , " elm " , _elm_win_frame_cb_close , obj ) ;
2012-08-15 03:57:31 -07:00
if ( sd - > title )
{
edje_object_part_text_escaped_set
( sd - > frame_obj , " elm.text.title " , sd - > title ) ;
}
2013-05-06 16:08:58 -07:00
ecore_evas_geometry_get ( sd - > ee , NULL , NULL , & w , & h ) ;
ecore_evas_resize ( sd - > ee , w , h ) ;
2012-08-15 03:57:31 -07:00
}
2012-10-10 17:35:00 -07:00
static void
2012-08-15 03:57:31 -07:00
_elm_win_frame_del ( Elm_Win_Smart_Data * sd )
{
2013-05-06 16:08:58 -07:00
int w , h ;
2012-08-15 03:57:31 -07:00
if ( sd - > frame_obj )
{
edje_object_signal_callback_del
( sd - > frame_obj , " elm,action,move,start " , " elm " ,
_elm_win_frame_cb_move_start ) ;
edje_object_signal_callback_del
( sd - > frame_obj , " elm,action,resize,show " , " * " ,
_elm_win_frame_cb_resize_show ) ;
2012-08-16 02:40:02 -07:00
edje_object_signal_callback_del
( sd - > frame_obj , " elm,action,resize,hide " , " * " ,
_elm_win_frame_cb_resize_hide ) ;
2012-08-15 03:57:31 -07:00
edje_object_signal_callback_del
( sd - > frame_obj , " elm,action,resize,start " , " * " ,
_elm_win_frame_cb_resize_start ) ;
edje_object_signal_callback_del
( sd - > frame_obj , " elm,action,minimize " , " elm " ,
_elm_win_frame_cb_minimize ) ;
edje_object_signal_callback_del
( sd - > frame_obj , " elm,action,maximize " , " elm " ,
_elm_win_frame_cb_maximize ) ;
edje_object_signal_callback_del
2012-10-10 17:35:00 -07:00
( sd - > frame_obj , " elm,action,close " , " elm " ,
2012-08-15 03:57:31 -07:00
_elm_win_frame_cb_close ) ;
evas_object_del ( sd - > frame_obj ) ;
sd - > frame_obj = NULL ;
}
2013-05-06 16:08:58 -07:00
evas_output_framespace_set ( sd - > evas , 0 , 0 , 0 , 0 ) ;
ecore_evas_geometry_get ( sd - > ee , NULL , NULL , & w , & h ) ;
ecore_evas_resize ( sd - > ee , w , h ) ;
2012-02-10 00:37:16 -08:00
}
2010-10-20 05:38:30 -07:00
# ifdef ELM_DEBUG
static void
2012-05-03 15:42:15 -07:00
_debug_key_down ( void * data __UNUSED__ ,
Evas * e __UNUSED__ ,
Evas_Object * obj ,
void * event_info )
2010-10-20 05:38:30 -07:00
{
Evas_Event_Key_Down * ev = event_info ;
if ( ev - > event_flags & EVAS_EVENT_FLAG_ON_HOLD )
2011-04-01 04:20:18 -07:00
return ;
2010-10-20 05:38:30 -07:00
2013-07-30 23:14:09 -07:00
if ( ( strcmp ( ev - > key , " F12 " ) ) | |
2010-10-20 05:38:30 -07:00
( ! evas_key_modifier_is_set ( ev - > modifiers , " Control " ) ) )
return ;
2013-06-06 21:46:47 -07:00
INF ( " Tree graph generated. " ) ;
2010-10-20 05:38:30 -07:00
elm_object_tree_dot_dump ( obj , " ./dump.dot " ) ;
}
2012-05-03 15:42:15 -07:00
2010-10-20 05:38:30 -07:00
# endif
2011-04-14 05:47:16 -07:00
static void
2012-05-03 15:42:15 -07:00
_win_img_hide ( void * data ,
Evas * e __UNUSED__ ,
2011-04-14 05:47:16 -07:00
Evas_Object * obj __UNUSED__ ,
2012-05-03 15:42:15 -07:00
void * event_info __UNUSED__ )
2011-04-14 05:47:16 -07:00
{
2013-04-24 04:41:37 -07:00
elm_widget_focus_hide_handle ( data ) ;
2011-04-14 05:47:16 -07:00
}
static void
2012-05-03 15:42:15 -07:00
_win_img_mouse_up ( void * data ,
Evas * e __UNUSED__ ,
2011-08-08 03:32:32 -07:00
Evas_Object * obj __UNUSED__ ,
2012-05-03 15:42:15 -07:00
void * event_info )
2011-04-14 05:47:16 -07:00
{
2011-08-08 03:32:32 -07:00
Evas_Event_Mouse_Up * ev = event_info ;
if ( ! ( ev - > event_flags & EVAS_EVENT_FLAG_ON_HOLD ) )
2013-04-24 04:41:37 -07:00
elm_widget_focus_mouse_up_handle ( data ) ;
2011-04-14 05:47:16 -07:00
}
static void
2012-05-03 15:42:15 -07:00
_win_img_focus_in ( void * data ,
Evas * e __UNUSED__ ,
2011-04-14 05:47:16 -07:00
Evas_Object * obj __UNUSED__ ,
2012-05-03 15:42:15 -07:00
void * event_info __UNUSED__ )
2011-04-14 05:47:16 -07:00
{
2013-04-24 04:41:37 -07:00
elm_widget_focus_steal ( data ) ;
2011-04-14 05:47:16 -07:00
}
static void
2012-05-03 15:42:15 -07:00
_win_img_focus_out ( void * data ,
Evas * e __UNUSED__ ,
2011-04-14 05:47:16 -07:00
Evas_Object * obj __UNUSED__ ,
2012-05-03 15:42:15 -07:00
void * event_info __UNUSED__ )
2011-04-14 05:47:16 -07:00
{
2013-04-24 04:41:37 -07:00
elm_widget_focused_object_clear ( data ) ;
2011-04-14 05:47:16 -07:00
}
2011-12-04 20:26:32 -08:00
static void
2012-05-03 15:42:15 -07:00
_win_inlined_image_set ( Elm_Win_Smart_Data * sd )
2011-12-04 20:26:32 -08:00
{
2012-05-03 15:42:15 -07:00
evas_object_image_alpha_set ( sd - > img_obj , EINA_FALSE ) ;
evas_object_image_filled_set ( sd - > img_obj , EINA_TRUE ) ;
2012-05-02 09:58:56 -07:00
2012-05-03 15:42:15 -07:00
evas_object_event_callback_add
2013-04-24 04:41:37 -07:00
( sd - > img_obj , EVAS_CALLBACK_DEL , _elm_win_on_img_obj_del , sd - > obj ) ;
2012-05-03 15:42:15 -07:00
evas_object_event_callback_add
2013-04-24 04:41:37 -07:00
( sd - > img_obj , EVAS_CALLBACK_HIDE , _win_img_hide , sd - > obj ) ;
2012-05-03 15:42:15 -07:00
evas_object_event_callback_add
2013-04-24 04:41:37 -07:00
( sd - > img_obj , EVAS_CALLBACK_MOUSE_UP , _win_img_mouse_up , sd - > obj ) ;
2012-05-03 15:42:15 -07:00
evas_object_event_callback_add
2013-04-24 04:41:37 -07:00
( sd - > img_obj , EVAS_CALLBACK_FOCUS_IN , _win_img_focus_in , sd - > obj ) ;
2012-05-03 15:42:15 -07:00
evas_object_event_callback_add
2013-04-24 04:41:37 -07:00
( sd - > img_obj , EVAS_CALLBACK_FOCUS_OUT , _win_img_focus_out , sd - > obj ) ;
2011-12-04 20:26:32 -08:00
}
2012-02-29 04:06:12 -08:00
static void
2012-05-03 15:42:15 -07:00
_elm_win_on_icon_del ( void * data ,
Evas * e __UNUSED__ ,
Evas_Object * obj ,
void * event_info __UNUSED__ )
2012-02-29 04:06:12 -08:00
{
2013-04-24 04:41:37 -07:00
ELM_WIN_DATA_GET ( data , sd ) ;
2012-05-03 15:42:15 -07:00
if ( sd - > icon = = obj ) sd - > icon = NULL ;
}
static void
2012-11-25 22:32:53 -08:00
_elm_win_smart_add ( Eo * obj , void * _pd EINA_UNUSED , va_list * list EINA_UNUSED )
2012-05-03 15:42:15 -07:00
{
2013-03-18 09:07:38 -07:00
eo_do_super ( obj , MY_CLASS , evas_obj_smart_add ( ) ) ;
2012-05-03 15:42:15 -07:00
elm_widget_can_focus_set ( obj , EINA_TRUE ) ;
elm_widget_highlight_ignore_set ( obj , EINA_TRUE ) ;
2012-05-02 09:58:56 -07:00
}
2012-08-05 21:09:02 -07:00
# ifdef HAVE_ELEMENTARY_X
static void
2012-08-06 03:30:55 -07:00
_elm_x_io_err ( void * data __UNUSED__ )
2012-08-05 21:09:02 -07:00
{
Eina_List * l ;
Evas_Object * obj ;
2012-08-06 03:30:55 -07:00
2012-08-05 21:09:02 -07:00
EINA_LIST_FOREACH ( _elm_win_list , l , obj )
2012-08-28 03:37:02 -07:00
evas_object_smart_callback_call ( obj , SIG_IOERR , NULL ) ;
2012-08-05 21:09:02 -07:00
elm_exit ( ) ;
}
# endif
2008-10-06 18:23:49 -07:00
EAPI Evas_Object *
2012-05-03 15:42:15 -07:00
elm_win_add ( Evas_Object * parent ,
const char * name ,
Elm_Win_Type type )
2008-09-29 23:58:56 -07:00
{
2012-11-25 22:32:53 -08:00
Evas_Object * obj = eo_add_custom ( MY_CLASS , parent , elm_obj_win_constructor ( name , type ) ) ;
eo_unref ( obj ) ;
return obj ;
}
2013-01-10 03:53:39 -08:00
static void
_elm_win_cb_hide ( void * data __UNUSED__ ,
Evas * e __UNUSED__ ,
Evas_Object * obj __UNUSED__ ,
void * event_info __UNUSED__ )
{
_elm_win_state_eval_queue ( ) ;
}
static void
_elm_win_cb_show ( void * data __UNUSED__ ,
Evas * e __UNUSED__ ,
Evas_Object * obj __UNUSED__ ,
void * event_info __UNUSED__ )
{
_elm_win_state_eval_queue ( ) ;
}
2013-07-02 21:19:56 -07:00
/**
* @ internal
*
* Recalculate the size of window considering its resize objects ' weight and
* min size . If any of its resize objects ' weight equals to 0.0 , window
* layout ' s weight will be set to 0.0 .
*
* @ param o box object
* @ param p box ' s private data
* @ param data window object
*/
2013-01-17 14:11:15 -08:00
static void
_window_layout_stack ( Evas_Object * o , Evas_Object_Box_Data * p , void * data )
{
const Eina_List * l ;
Evas_Object * child ;
Evas_Object_Box_Option * opt ;
Evas_Coord x , y , w , h ;
double wx , wy ;
Evas_Coord minw = - 1 , minh = - 1 ;
double weight_x = EVAS_HINT_EXPAND ;
double weight_y = EVAS_HINT_EXPAND ;
EINA_LIST_FOREACH ( p - > children , l , opt )
{
child = opt - > obj ;
evas_object_size_hint_weight_get ( child , & wx , & wy ) ;
if ( wx = = 0.0 ) weight_x = 0 ;
if ( wy = = 0.0 ) weight_y = 0 ;
evas_object_size_hint_min_get ( child , & w , & h ) ;
if ( w > minw ) minw = w ;
if ( h > minh ) minh = h ;
}
evas_object_size_hint_min_set ( o , minw , minh ) ;
evas_object_geometry_get ( o , & x , & y , & w , & h ) ;
if ( w < minw ) w = minw ;
if ( h < minh ) h = minh ;
evas_object_resize ( o , w , h ) ;
EINA_LIST_FOREACH ( p - > children , l , opt )
{
child = opt - > obj ;
evas_object_move ( child , x , y ) ;
evas_object_resize ( child , w , h ) ;
}
ELM_WIN_DATA_GET ( data , sd ) ;
evas_object_size_hint_weight_set ( sd - > layout , weight_x , weight_y ) ;
evas_object_smart_changed ( sd - > layout ) ;
}
2012-11-25 22:32:53 -08:00
static void
2012-12-27 05:38:33 -08:00
_win_constructor ( Eo * obj , void * _pd , va_list * list )
2012-11-25 22:32:53 -08:00
{
Elm_Win_Smart_Data * sd = _pd ;
sd - > obj = obj ; // in ctor
const char * name = va_arg ( * list , const char * ) ;
Elm_Win_Type type = va_arg ( * list , Elm_Win_Type ) ;
Evas_Object * parent = eo_parent_get ( obj ) ;
2012-05-03 15:42:15 -07:00
Evas * e ;
2009-02-25 11:50:45 -08:00
const Eina_List * l ;
2012-08-20 00:09:44 -07:00
const char * fontpath , * fallback = NULL ;
2009-07-06 23:46:51 -07:00
2012-05-03 15:42:15 -07:00
Elm_Win_Smart_Data tmp_sd ;
2010-11-01 14:10:07 -07:00
2012-05-03 15:42:15 -07:00
/* just to store some data while trying out to create a canvas */
memset ( & tmp_sd , 0 , sizeof ( Elm_Win_Smart_Data ) ) ;
2011-04-14 03:48:43 -07:00
2012-08-20 00:09:44 -07:00
# define FALLBACK_TRY(engine) \
if ( ! tmp_sd . ee ) { \
CRITICAL ( engine " engine creation failed. Trying default. " ) ; \
} while ( 0 )
# define FALLBACK_STORE(engine) \
if ( tmp_sd . ee ) \
{ \
CRITICAL ( engine " Fallback to %s successful. " , engine ) ; \
fallback = engine ; \
}
2012-05-03 15:42:15 -07:00
2011-04-14 03:48:43 -07:00
switch ( type )
2008-09-29 23:58:56 -07:00
{
2011-04-14 03:48:43 -07:00
case ELM_WIN_INLINED_IMAGE :
2011-07-23 10:27:39 -07:00
if ( ! parent ) break ;
{
2012-05-03 15:42:15 -07:00
e = evas_object_evas_get ( parent ) ;
2011-07-23 10:27:39 -07:00
Ecore_Evas * ee ;
2012-05-03 15:42:15 -07:00
2011-07-23 10:27:39 -07:00
if ( ! e ) break ;
2012-05-03 15:42:15 -07:00
2011-07-23 10:27:39 -07:00
ee = ecore_evas_ecore_evas_get ( e ) ;
if ( ! ee ) break ;
2012-05-03 15:42:15 -07:00
tmp_sd . img_obj = ecore_evas_object_image_new ( ee ) ;
if ( ! tmp_sd . img_obj ) break ;
tmp_sd . ee = ecore_evas_object_ecore_evas_get ( tmp_sd . img_obj ) ;
if ( ! tmp_sd . ee )
2011-07-23 10:27:39 -07:00
{
2012-05-03 15:42:15 -07:00
evas_object_del ( tmp_sd . img_obj ) ;
tmp_sd . img_obj = NULL ;
2011-07-23 10:27:39 -07:00
}
}
2011-04-14 03:48:43 -07:00
break ;
2012-01-16 09:18:20 -08:00
case ELM_WIN_SOCKET_IMAGE :
2012-05-03 15:42:15 -07:00
tmp_sd . ee = ecore_evas_extn_socket_new ( 1 , 1 ) ;
2012-01-16 09:18:20 -08:00
break ;
2011-04-14 03:48:43 -07:00
default :
if ( ENGINE_COMPARE ( ELM_SOFTWARE_X11 ) )
{
2012-05-03 15:42:15 -07:00
tmp_sd . ee = ecore_evas_software_x11_new ( NULL , 0 , 0 , 0 , 1 , 1 ) ;
2012-08-20 00:09:44 -07:00
FALLBACK_TRY ( " Software X11 " ) ;
2012-07-05 02:23:38 -07:00
if ( ! tmp_sd . ee )
{
tmp_sd . ee = ecore_evas_fb_new ( NULL , 0 , 1 , 1 ) ;
2012-08-20 00:09:44 -07:00
FALLBACK_STORE ( " Software FB " ) ;
2012-07-05 02:23:38 -07:00
}
2011-04-14 03:48:43 -07:00
}
else if ( ENGINE_COMPARE ( ELM_SOFTWARE_FB ) )
{
2012-05-03 15:42:15 -07:00
tmp_sd . ee = ecore_evas_fb_new ( NULL , 0 , 1 , 1 ) ;
2012-08-20 00:09:44 -07:00
FALLBACK_TRY ( " Software FB " ) ;
2012-07-05 02:23:38 -07:00
if ( ! tmp_sd . ee )
{
tmp_sd . ee = ecore_evas_software_x11_new ( NULL , 0 , 0 , 0 , 1 , 1 ) ;
2012-08-20 00:09:44 -07:00
FALLBACK_STORE ( " Software X11 " ) ;
2012-07-05 02:23:38 -07:00
}
2011-04-14 03:48:43 -07:00
}
else if ( ENGINE_COMPARE ( ELM_OPENGL_X11 ) )
{
2011-05-11 02:06:59 -07:00
int opt [ 10 ] ;
int opt_i = 0 ;
2011-05-12 19:50:00 -07:00
2011-05-11 02:06:59 -07:00
if ( _elm_config - > vsync )
{
opt [ opt_i ] = ECORE_EVAS_GL_X11_OPT_VSYNC ;
opt_i + + ;
opt [ opt_i ] = 1 ;
opt_i + + ;
2013-02-19 19:08:33 -08:00
opt [ opt_i ] = 0 ;
2011-05-11 02:06:59 -07:00
}
if ( opt_i > 0 )
2012-05-03 15:42:15 -07:00
tmp_sd . ee = ecore_evas_gl_x11_options_new
( NULL , 0 , 0 , 0 , 1 , 1 , opt ) ;
2011-05-11 02:06:59 -07:00
else
2012-05-03 15:42:15 -07:00
tmp_sd . ee = ecore_evas_gl_x11_new ( NULL , 0 , 0 , 0 , 1 , 1 ) ;
2011-04-14 03:48:43 -07:00
FALLBACK_TRY ( " OpenGL " ) ;
2012-07-05 02:23:38 -07:00
if ( ! tmp_sd . ee )
{
tmp_sd . ee = ecore_evas_software_x11_new ( NULL , 0 , 0 , 0 , 1 , 1 ) ;
2012-08-20 00:09:44 -07:00
FALLBACK_STORE ( " Software X11 " ) ;
2012-07-05 02:23:38 -07:00
if ( ! tmp_sd . ee )
{
tmp_sd . ee = ecore_evas_fb_new ( NULL , 0 , 1 , 1 ) ;
2012-08-20 00:09:44 -07:00
FALLBACK_STORE ( " Software FB " ) ;
2012-07-05 02:23:38 -07:00
}
}
2011-04-14 03:48:43 -07:00
}
else if ( ENGINE_COMPARE ( ELM_SOFTWARE_WIN32 ) )
{
2012-05-03 15:42:15 -07:00
tmp_sd . ee = ecore_evas_software_gdi_new ( NULL , 0 , 0 , 1 , 1 ) ;
2012-08-20 00:09:44 -07:00
FALLBACK_TRY ( " Software Win32 " ) ;
2011-04-14 03:48:43 -07:00
}
2011-11-05 10:50:09 -07:00
else if ( ENGINE_COMPARE ( ELM_SOFTWARE_PSL1GHT ) )
{
2012-05-03 15:42:15 -07:00
tmp_sd . ee = ecore_evas_psl1ght_new ( NULL , 1 , 1 ) ;
2011-11-05 10:50:09 -07:00
FALLBACK_TRY ( " PSL1GHT " ) ;
}
2011-04-14 03:48:43 -07:00
else if ( ENGINE_COMPARE ( ELM_SOFTWARE_SDL ) )
{
2012-05-03 15:42:15 -07:00
tmp_sd . ee = ecore_evas_sdl_new ( NULL , 0 , 0 , 0 , 0 , 0 , 1 ) ;
2012-08-20 00:09:44 -07:00
FALLBACK_TRY ( " Software SDL " ) ;
2012-07-05 02:23:38 -07:00
if ( ! tmp_sd . ee )
{
tmp_sd . ee = ecore_evas_software_x11_new ( NULL , 0 , 0 , 0 , 1 , 1 ) ;
2012-08-20 00:09:44 -07:00
FALLBACK_STORE ( " Software X11 " ) ;
2012-07-05 02:23:38 -07:00
if ( ! tmp_sd . ee )
{
tmp_sd . ee = ecore_evas_fb_new ( NULL , 0 , 1 , 1 ) ;
2012-08-20 00:09:44 -07:00
FALLBACK_STORE ( " Software FB " ) ;
2012-07-05 02:23:38 -07:00
}
}
2011-04-14 03:48:43 -07:00
}
else if ( ENGINE_COMPARE ( ELM_SOFTWARE_16_SDL ) )
{
2012-05-03 15:42:15 -07:00
tmp_sd . ee = ecore_evas_sdl16_new ( NULL , 0 , 0 , 0 , 0 , 0 , 1 ) ;
2012-08-20 00:09:44 -07:00
FALLBACK_TRY ( " Software-16-SDL " ) ;
2012-07-05 02:23:38 -07:00
if ( ! tmp_sd . ee )
{
tmp_sd . ee = ecore_evas_software_x11_new ( NULL , 0 , 0 , 0 , 1 , 1 ) ;
2012-08-20 00:09:44 -07:00
FALLBACK_STORE ( " Software X11 " ) ;
2012-07-05 02:23:38 -07:00
if ( ! tmp_sd . ee )
{
tmp_sd . ee = ecore_evas_fb_new ( NULL , 0 , 1 , 1 ) ;
2012-08-20 00:09:44 -07:00
FALLBACK_STORE ( " Software FB " ) ;
2012-07-05 02:23:38 -07:00
}
}
2011-04-14 03:48:43 -07:00
}
else if ( ENGINE_COMPARE ( ELM_OPENGL_SDL ) )
{
2012-05-03 15:42:15 -07:00
tmp_sd . ee = ecore_evas_gl_sdl_new ( NULL , 1 , 1 , 0 , 0 ) ;
2011-04-14 03:48:43 -07:00
FALLBACK_TRY ( " OpenGL SDL " ) ;
2012-07-05 02:23:38 -07:00
if ( ! tmp_sd . ee )
{
tmp_sd . ee = ecore_evas_software_x11_new ( NULL , 0 , 0 , 0 , 1 , 1 ) ;
2012-08-20 00:09:44 -07:00
FALLBACK_STORE ( " Software X11 " ) ;
2012-07-05 02:23:38 -07:00
if ( ! tmp_sd . ee )
{
tmp_sd . ee = ecore_evas_fb_new ( NULL , 0 , 1 , 1 ) ;
2012-08-20 00:09:44 -07:00
FALLBACK_STORE ( " Software FB " ) ;
2012-07-05 02:23:38 -07:00
}
}
2011-04-14 03:48:43 -07:00
}
2011-11-02 12:26:29 -07:00
else if ( ENGINE_COMPARE ( ELM_OPENGL_COCOA ) )
{
2012-05-03 15:42:15 -07:00
tmp_sd . ee = ecore_evas_cocoa_new ( NULL , 1 , 1 , 0 , 0 ) ;
2011-11-02 12:26:29 -07:00
FALLBACK_TRY ( " OpenGL Cocoa " ) ;
}
2011-07-25 05:02:52 -07:00
else if ( ENGINE_COMPARE ( ELM_BUFFER ) )
{
2012-05-03 15:42:15 -07:00
tmp_sd . ee = ecore_evas_buffer_new ( 1 , 1 ) ;
2011-07-25 05:02:52 -07:00
}
2011-10-05 15:18:22 -07:00
else if ( ENGINE_COMPARE ( ELM_EWS ) )
{
2012-05-03 15:42:15 -07:00
tmp_sd . ee = ecore_evas_ews_new ( 0 , 0 , 1 , 1 ) ;
2011-10-05 15:18:22 -07:00
}
2012-03-28 02:02:22 -07:00
else if ( ENGINE_COMPARE ( ELM_WAYLAND_SHM ) )
2012-01-02 17:45:22 -08:00
{
2012-05-03 15:42:15 -07:00
tmp_sd . ee = ecore_evas_wayland_shm_new ( NULL , 0 , 0 , 0 , 1 , 1 , 0 ) ;
2012-01-12 01:10:27 -08:00
}
2012-03-28 02:02:22 -07:00
else if ( ENGINE_COMPARE ( ELM_WAYLAND_EGL ) )
2012-01-12 01:10:27 -08:00
{
2012-05-03 15:42:15 -07:00
tmp_sd . ee = ecore_evas_wayland_egl_new ( NULL , 0 , 0 , 0 , 1 , 1 , 0 ) ;
2012-05-02 18:19:05 -07:00
}
2012-08-20 00:09:44 -07:00
else if ( ! strncmp ( ENGINE_GET ( ) , " shot: " , 5 ) )
2012-05-02 18:19:05 -07:00
{
2012-05-03 15:42:15 -07:00
tmp_sd . ee = ecore_evas_buffer_new ( 1 , 1 ) ;
ecore_evas_manual_render_set ( tmp_sd . ee , EINA_TRUE ) ;
tmp_sd . shot . info = eina_stringshare_add
2012-08-20 00:09:44 -07:00
( ENGINE_GET ( ) + 5 ) ;
2012-05-02 18:19:05 -07:00
}
# undef FALLBACK_TRY
break ;
}
2012-05-02 09:58:56 -07:00
2012-05-03 15:42:15 -07:00
if ( ! tmp_sd . ee )
{
ERR ( " Cannot create window. " ) ;
2012-11-25 22:32:53 -08:00
eo_error_set ( obj ) ;
return ;
2012-05-03 15:42:15 -07:00
}
2012-07-17 11:46:18 -07:00
2012-11-25 22:32:53 -08:00
eo_parent_set ( obj , ecore_evas_get ( tmp_sd . ee ) ) ;
2013-03-18 09:07:38 -07:00
eo_do_super ( obj , MY_CLASS , eo_constructor ( ) ) ;
2012-11-25 22:32:53 -08:00
eo_do ( obj ,
evas_obj_type_set ( MY_CLASS_NAME ) ,
evas_obj_smart_callbacks_descriptions_set ( _smart_callbacks , NULL ) ) ;
2012-05-03 15:42:15 -07:00
2013-03-20 01:37:40 -07:00
if ( getenv ( " ELM_FIRST_FRAME " ) )
evas_event_callback_add ( ecore_evas_get ( tmp_sd . ee ) , EVAS_CALLBACK_RENDER_POST ,
2013-08-11 01:30:56 -07:00
_elm_win_first_frame_do , getenv ( " ELM_FIRST_FRAME " ) ) ;
2013-03-20 01:37:40 -07:00
2012-05-03 15:42:15 -07:00
/* copying possibly altered fields back */
# define SD_CPY(_field) \
do \
{ \
sd - > _field = tmp_sd . _field ; \
} while ( 0 )
SD_CPY ( ee ) ;
SD_CPY ( img_obj ) ;
SD_CPY ( shot . info ) ;
# undef SD_CPY
2012-07-18 21:35:50 -07:00
if ( ( trap ) & & ( trap - > add ) )
sd - > trap_data = trap - > add ( obj ) ;
2012-05-03 15:42:15 -07:00
/* complementary actions, which depend on final smart data
* pointer */
if ( type = = ELM_WIN_INLINED_IMAGE )
_win_inlined_image_set ( sd ) ;
# ifdef HAVE_ELEMENTARY_X
2012-11-16 06:26:01 -08:00
else if ( ENGINE_COMPARE ( ELM_SOFTWARE_X11 ) | |
ENGINE_COMPARE ( ELM_SOFTWARE_16_X11 ) | |
ENGINE_COMPARE ( ELM_SOFTWARE_8_X11 ) | |
ENGINE_COMPARE ( ELM_OPENGL_X11 ) )
2012-11-19 08:51:44 -08:00
{
sd - > x . client_message_handler = ecore_event_handler_add
2013-04-24 04:41:37 -07:00
( ECORE_X_EVENT_CLIENT_MESSAGE , _elm_win_client_message , obj ) ;
2012-11-19 08:51:44 -08:00
sd - > x . property_handler = ecore_event_handler_add
2013-04-24 04:41:37 -07:00
( ECORE_X_EVENT_WINDOW_PROPERTY , _elm_win_property_change , obj ) ;
2012-11-19 08:51:44 -08:00
}
2012-05-03 15:42:15 -07:00
# endif
2012-08-20 00:09:44 -07:00
else if ( ! strncmp ( ENGINE_GET ( ) , " shot: " , 5 ) )
2012-05-03 15:42:15 -07:00
_shot_init ( sd ) ;
sd - > kbdmode = ELM_WIN_KEYBOARD_UNKNOWN ;
sd - > indmode = ELM_WIN_INDICATOR_UNKNOWN ;
2010-04-12 01:27:10 -07:00
# ifdef HAVE_ELEMENTARY_X
2012-05-03 15:42:15 -07:00
_elm_win_xwindow_get ( sd ) ;
2012-08-05 21:09:02 -07:00
if ( sd - > x . xwin )
{
ecore_x_io_error_handler_set ( _elm_x_io_err , NULL ) ;
}
2010-09-24 09:41:25 -07:00
# endif
2012-05-03 15:42:15 -07:00
2012-06-06 06:55:15 -07:00
# ifdef HAVE_ELEMENTARY_WAYLAND
2012-12-19 06:41:45 -08:00
if ( ( ENGINE_COMPARE ( ELM_WAYLAND_SHM ) ) | | ( ENGINE_COMPARE ( ELM_WAYLAND_EGL ) ) )
sd - > wl . win = ecore_evas_wayland_window_get ( sd - > ee ) ;
2012-06-06 06:55:15 -07:00
# endif
2012-11-30 03:00:01 -08:00
if ( ( _elm_config - > bgpixmap )
2012-11-30 02:26:18 -08:00
# ifdef HAVE_ELEMENTARY_X
2012-11-30 03:00:01 -08:00
& &
2012-11-30 02:26:18 -08:00
( ( ( sd - > x . xwin ) & & ( ! ecore_x_screen_is_composited ( 0 ) ) ) | |
( ! sd - > x . xwin ) ) )
2012-11-30 03:00:01 -08:00
# else
2012-11-30 02:26:18 -08:00
)
2012-11-30 03:00:01 -08:00
# endif
2012-07-18 21:35:50 -07:00
TRAP ( sd , avoid_damage_set , ECORE_EVAS_AVOID_DAMAGE_EXPOSE ) ;
2011-04-01 04:20:18 -07:00
// bg pixmap done by x - has other issues like can be redrawn by x before it
// is filled/ready by app
2012-07-18 21:35:50 -07:00
// TRAP(sd, avoid_damage_set, ECORE_EVAS_AVOID_DAMAGE_BUILT_IN);
2012-05-03 15:42:15 -07:00
sd - > type = type ;
sd - > parent = parent ;
if ( sd - > parent )
evas_object_event_callback_add
2013-04-24 04:41:37 -07:00
( sd - > parent , EVAS_CALLBACK_DEL , _elm_win_on_parent_del , obj ) ;
2012-05-03 15:42:15 -07:00
sd - > evas = ecore_evas_get ( sd - > ee ) ;
evas_object_color_set ( obj , 0 , 0 , 0 , 0 ) ;
evas_object_move ( obj , 0 , 0 ) ;
evas_object_resize ( obj , 1 , 1 ) ;
evas_object_layer_set ( obj , 50 ) ;
evas_object_pass_events_set ( obj , EINA_TRUE ) ;
2011-08-02 03:34:30 -07:00
if ( type = = ELM_WIN_INLINED_IMAGE )
2012-05-03 15:42:15 -07:00
elm_widget_parent2_set ( obj , parent ) ;
2012-07-18 21:35:50 -07:00
/* use own version of ecore_evas_object_associate() that does TRAP() */
2013-04-24 04:41:37 -07:00
ecore_evas_data_set ( sd - > ee , " elm_win " , obj ) ;
2012-05-03 15:42:15 -07:00
2012-07-18 21:35:50 -07:00
evas_object_event_callback_add
( obj , EVAS_CALLBACK_CHANGED_SIZE_HINTS ,
2013-04-24 04:41:37 -07:00
_elm_win_obj_callback_changed_size_hints , obj ) ;
2012-07-18 21:35:50 -07:00
evas_object_intercept_raise_callback_add
2013-04-24 04:41:37 -07:00
( obj , _elm_win_obj_intercept_raise , obj ) ;
2012-07-18 21:35:50 -07:00
evas_object_intercept_lower_callback_add
2013-04-24 04:41:37 -07:00
( obj , _elm_win_obj_intercept_lower , obj ) ;
2012-07-18 21:35:50 -07:00
evas_object_intercept_stack_above_callback_add
2013-04-24 04:41:37 -07:00
( obj , _elm_win_obj_intercept_stack_above , obj ) ;
2012-07-18 21:35:50 -07:00
evas_object_intercept_stack_below_callback_add
2013-04-24 04:41:37 -07:00
( obj , _elm_win_obj_intercept_stack_below , obj ) ;
2012-07-18 21:35:50 -07:00
evas_object_intercept_layer_set_callback_add
2013-04-24 04:41:37 -07:00
( obj , _elm_win_obj_intercept_layer_set , obj ) ;
2012-05-03 15:42:15 -07:00
evas_object_intercept_show_callback_add
2013-04-24 04:41:37 -07:00
( obj , _elm_win_obj_intercept_show , obj ) ;
2012-05-03 15:42:15 -07:00
2012-07-18 21:35:50 -07:00
TRAP ( sd , name_class_set , name , _elm_appname ) ;
2012-05-03 15:42:15 -07:00
ecore_evas_callback_delete_request_set ( sd - > ee , _elm_win_delete_request ) ;
ecore_evas_callback_resize_set ( sd - > ee , _elm_win_resize ) ;
ecore_evas_callback_mouse_in_set ( sd - > ee , _elm_win_mouse_in ) ;
ecore_evas_callback_focus_in_set ( sd - > ee , _elm_win_focus_in ) ;
ecore_evas_callback_focus_out_set ( sd - > ee , _elm_win_focus_out ) ;
ecore_evas_callback_move_set ( sd - > ee , _elm_win_move ) ;
ecore_evas_callback_state_change_set ( sd - > ee , _elm_win_state_change ) ;
2013-04-24 04:41:37 -07:00
evas_object_event_callback_add ( obj , EVAS_CALLBACK_HIDE , _elm_win_cb_hide , NULL ) ;
evas_object_event_callback_add ( obj , EVAS_CALLBACK_SHOW , _elm_win_cb_show , NULL ) ;
2012-05-03 15:42:15 -07:00
evas_image_cache_set ( sd - > evas , ( _elm_config - > image_cache * 1024 ) ) ;
evas_font_cache_set ( sd - > evas , ( _elm_config - > font_cache * 1024 ) ) ;
2012-08-05 21:09:02 -07:00
EINA_LIST_FOREACH ( _elm_config - > font_dirs , l , fontpath )
2012-05-03 15:42:15 -07:00
evas_font_path_append ( sd - > evas , fontpath ) ;
2010-10-22 14:41:27 -07:00
if ( ! _elm_config - > font_hinting )
2012-05-03 15:42:15 -07:00
evas_font_hinting_set ( sd - > evas , EVAS_FONT_HINTING_NONE ) ;
2009-02-03 02:27:52 -08:00
else if ( _elm_config - > font_hinting = = 1 )
2012-05-03 15:42:15 -07:00
evas_font_hinting_set ( sd - > evas , EVAS_FONT_HINTING_AUTO ) ;
2009-02-03 02:27:52 -08:00
else if ( _elm_config - > font_hinting = = 2 )
2012-05-03 15:42:15 -07:00
evas_font_hinting_set ( sd - > evas , EVAS_FONT_HINTING_BYTECODE ) ;
2008-09-29 23:58:56 -07:00
2010-04-12 01:27:10 -07:00
# ifdef HAVE_ELEMENTARY_X
2012-05-03 15:42:15 -07:00
_elm_win_xwin_update ( sd ) ;
2010-04-12 01:27:10 -07:00
# endif
2010-09-24 09:41:25 -07:00
2012-05-03 15:42:15 -07:00
_elm_win_list = eina_list_append ( _elm_win_list , obj ) ;
2012-08-28 03:37:02 -07:00
_elm_win_count + + ;
2012-10-10 17:35:00 -07:00
2012-08-20 00:09:44 -07:00
if ( ( ( fallback ) & & ( ! strcmp ( fallback , " Software FB " ) ) ) | |
( ( ! fallback ) & & ( ENGINE_COMPARE ( ELM_SOFTWARE_FB ) ) ) )
2008-12-09 22:33:24 -08:00
{
2012-07-18 21:35:50 -07:00
TRAP ( sd , fullscreen_set , 1 ) ;
2008-12-09 22:33:24 -08:00
}
2012-10-15 13:51:23 -07:00
else if ( ( type ! = ELM_WIN_INLINED_IMAGE ) & &
( ENGINE_COMPARE ( ELM_WAYLAND_SHM ) | |
ENGINE_COMPARE ( ELM_WAYLAND_EGL ) ) )
2012-05-15 07:48:30 -07:00
_elm_win_frame_add ( sd , " default " ) ;
2010-10-04 09:55:32 -07:00
if ( _elm_config - > focus_highlight_enable )
2012-05-03 15:42:15 -07:00
elm_win_focus_highlight_enabled_set ( obj , EINA_TRUE ) ;
2013-08-11 02:58:28 -07:00
if ( _elm_config - > focus_highlight_animate )
elm_win_focus_highlight_animate_set ( obj , EINA_TRUE ) ;
2010-10-04 09:55:32 -07:00
2010-10-20 05:38:30 -07:00
# ifdef ELM_DEBUG
2012-05-03 15:42:15 -07:00
Evas_Modifier_Mask mask = evas_key_modifier_mask_get ( sd - > evas , " Control " ) ;
evas_object_event_callback_add
2013-04-24 04:41:37 -07:00
( obj , EVAS_CALLBACK_KEY_DOWN , _debug_key_down , NULL ) ;
2011-04-14 04:43:43 -07:00
2012-05-03 15:42:15 -07:00
if ( evas_object_key_grab ( obj , " F12 " , mask , 0 , EINA_TRUE ) )
INF ( " Ctrl+F12 key combination exclusive for dot tree generation \n " ) ;
else
ERR ( " failed to grab F12 key to elm widgets (dot) tree generation " ) ;
2010-10-20 05:38:30 -07:00
# endif
2011-04-21 17:42:32 -07:00
2012-07-05 02:23:38 -07:00
if ( ( _elm_config - > softcursor_mode = = ELM_SOFTCURSOR_MODE_ON ) | |
( ( _elm_config - > softcursor_mode = = ELM_SOFTCURSOR_MODE_AUTO ) & &
2012-08-20 00:09:44 -07:00
( ( ( fallback ) & & ( ! strcmp ( fallback , " Software FB " ) ) ) | |
( ( ! fallback ) & & ( ENGINE_COMPARE ( ELM_SOFTWARE_FB ) ) ) ) ) )
2012-07-05 02:23:38 -07:00
{
Evas_Object * o ;
Evas_Coord mw = 1 , mh = 1 , hx = 0 , hy = 0 ;
2012-07-17 11:46:18 -07:00
2012-07-05 02:23:38 -07:00
sd - > pointer . obj = o = edje_object_add ( ecore_evas_get ( tmp_sd . ee ) ) ;
2013-02-25 20:26:22 -08:00
_elm_theme_object_set ( obj , o , " pointer " , " base " , " default " ) ;
2012-07-05 02:23:38 -07:00
edje_object_size_min_calc ( o , & mw , & mh ) ;
evas_object_resize ( o , mw , mh ) ;
edje_object_part_geometry_get ( o , " elm.swallow.hotspot " ,
& hx , & hy , NULL , NULL ) ;
sd - > pointer . hot_x = hx ;
sd - > pointer . hot_y = hy ;
evas_object_show ( o ) ;
ecore_evas_object_cursor_set ( tmp_sd . ee , o , EVAS_LAYER_MAX , hx , hy ) ;
}
else if ( _elm_config - > softcursor_mode = = ELM_SOFTCURSOR_MODE_OFF )
{
// do nothing
}
2013-01-17 14:11:15 -08:00
sd - > layout = edje_object_add ( sd - > evas ) ;
2013-02-25 20:26:22 -08:00
_elm_theme_object_set ( obj , sd - > layout , " win " , " base " , " default " ) ;
2013-01-17 14:11:15 -08:00
sd - > box = evas_object_box_add ( sd - > evas ) ;
evas_object_box_layout_set ( sd - > box , _window_layout_stack , obj , NULL ) ;
edje_object_part_swallow ( sd - > layout , " elm.swallow.contents " , sd - > box ) ;
evas_object_move ( sd - > layout , 0 , 0 ) ;
evas_object_resize ( sd - > layout , 1 , 1 ) ;
edje_object_update_hints_set ( sd - > layout , EINA_TRUE ) ;
evas_object_event_callback_add ( sd - > layout , EVAS_CALLBACK_CHANGED_SIZE_HINTS ,
_elm_win_on_resize_obj_changed_size_hints , obj ) ;
evas_object_show ( sd - > layout ) ;
2012-11-25 22:32:53 -08:00
}
2012-07-05 02:23:38 -07:00
2012-11-25 22:32:53 -08:00
static void
_constructor ( Eo * obj , void * _pd EINA_UNUSED , va_list * list EINA_UNUSED )
{
eo_error_set ( obj ) ;
ERR ( " only custom constructor can be used with '%s' class " , MY_CLASS_NAME ) ;
2008-10-06 18:23:49 -07:00
}
2011-10-25 01:45:56 -07:00
EAPI Evas_Object *
2012-05-03 15:42:15 -07:00
elm_win_util_standard_add ( const char * name ,
const char * title )
2011-10-25 01:45:56 -07:00
{
Evas_Object * win , * bg ;
2011-11-30 09:44:00 -08:00
2011-10-25 01:45:56 -07:00
win = elm_win_add ( NULL , name , ELM_WIN_BASIC ) ;
2011-10-25 05:30:10 -07:00
if ( ! win ) return NULL ;
2012-05-03 15:42:15 -07:00
2011-10-25 01:45:56 -07:00
elm_win_title_set ( win , title ) ;
bg = elm_bg_add ( win ) ;
if ( ! bg )
{
evas_object_del ( win ) ;
return NULL ;
}
evas_object_size_hint_weight_set ( bg , EVAS_HINT_EXPAND , EVAS_HINT_EXPAND ) ;
elm_win_resize_object_add ( win , bg ) ;
evas_object_show ( bg ) ;
2012-05-03 15:42:15 -07:00
2011-10-25 01:45:56 -07:00
return win ;
}
2008-10-06 18:23:49 -07:00
EAPI void
2012-05-03 15:42:15 -07:00
elm_win_resize_object_add ( Evas_Object * obj ,
Evas_Object * subobj )
2008-10-06 18:23:49 -07:00
{
2012-11-25 22:32:53 -08:00
ELM_WIN_CHECK ( obj ) ;
eo_do ( obj , elm_obj_win_resize_object_add ( subobj ) ) ;
}
static void
_resize_object_add ( Eo * obj , void * _pd , va_list * list )
{
Evas_Object * subobj = va_arg ( * list , Evas_Object * ) ;
2012-05-03 15:42:15 -07:00
2012-11-25 22:32:53 -08:00
Elm_Win_Smart_Data * sd = _pd ;
2012-05-03 15:42:15 -07:00
2013-04-02 19:28:53 -07:00
elm_widget_sub_object_add ( obj , subobj ) ;
2012-05-03 15:42:15 -07:00
2013-01-17 14:11:21 -08:00
if ( ! evas_object_box_append ( sd - > box , subobj ) )
ERR ( " could not append %p to box " , subobj ) ;
2008-10-06 18:23:49 -07:00
}
EAPI void
2012-05-03 15:42:15 -07:00
elm_win_resize_object_del ( Evas_Object * obj ,
Evas_Object * subobj )
{
ELM_WIN_CHECK ( obj ) ;
2012-11-25 22:32:53 -08:00
eo_do ( obj , elm_obj_win_resize_object_del ( subobj ) ) ;
}
static void
_resize_object_del ( Eo * obj , void * _pd , va_list * list )
{
Evas_Object * subobj = va_arg ( * list , Evas_Object * ) ;
Elm_Win_Smart_Data * sd = _pd ;
2012-05-03 15:42:15 -07:00
2012-11-25 22:32:53 -08:00
if ( ! elm_widget_sub_object_del ( obj , subobj ) )
2012-05-03 15:42:15 -07:00
ERR ( " could not remove sub object %p from %p " , subobj , obj ) ;
2013-01-17 14:11:21 -08:00
evas_object_box_remove ( sd - > box , subobj ) ;
2008-10-06 18:23:49 -07:00
}
EAPI void
2012-05-03 15:42:15 -07:00
elm_win_title_set ( Evas_Object * obj ,
const char * title )
2008-10-06 18:23:49 -07:00
{
2012-05-03 15:42:15 -07:00
ELM_WIN_CHECK ( obj ) ;
2012-11-25 22:32:53 -08:00
eo_do ( obj , elm_obj_win_title_set ( title ) ) ;
}
static void
_title_set ( Eo * obj EINA_UNUSED , void * _pd , va_list * list )
{
const char * title = va_arg ( * list , const char * ) ;
Elm_Win_Smart_Data * sd = _pd ;
2012-05-03 15:42:15 -07:00
if ( ! title ) return ;
eina_stringshare_replace ( & ( sd - > title ) , title ) ;
2012-07-18 21:35:50 -07:00
TRAP ( sd , title_set , sd - > title ) ;
2012-05-03 15:42:15 -07:00
if ( sd - > frame_obj )
edje_object_part_text_escaped_set
( sd - > frame_obj , " elm.text.title " , sd - > title ) ;
2008-10-06 18:23:49 -07:00
}
2009-07-06 23:46:51 -07:00
2010-10-27 07:38:37 -07:00
EAPI const char *
elm_win_title_get ( const Evas_Object * obj )
{
2012-05-03 15:42:15 -07:00
ELM_WIN_CHECK ( obj ) NULL ;
2012-11-25 22:32:53 -08:00
const char * ret = NULL ;
eo_do ( ( Eo * ) obj , elm_obj_win_title_get ( & ret ) ) ;
return ret ;
}
2012-05-03 15:42:15 -07:00
2012-11-25 22:32:53 -08:00
static void
_title_get ( Eo * obj EINA_UNUSED , void * _pd , va_list * list )
{
const char * * ret = va_arg ( * list , const char * * ) ;
Elm_Win_Smart_Data * sd = _pd ;
* ret = sd - > title ;
2012-02-29 04:06:12 -08:00
}
EAPI void
2012-05-03 15:42:15 -07:00
elm_win_icon_name_set ( Evas_Object * obj ,
const char * icon_name )
2012-02-29 04:06:12 -08:00
{
2012-05-03 15:42:15 -07:00
ELM_WIN_CHECK ( obj ) ;
2012-11-25 22:32:53 -08:00
eo_do ( obj , elm_obj_win_icon_name_set ( icon_name ) ) ;
}
static void
_icon_name_set ( Eo * obj EINA_UNUSED , void * _pd , va_list * list )
{
const char * icon_name = va_arg ( * list , const char * ) ;
Elm_Win_Smart_Data * sd = _pd ;
2012-05-03 15:42:15 -07:00
if ( ! icon_name ) return ;
eina_stringshare_replace ( & ( sd - > icon_name ) , icon_name ) ;
2012-02-29 04:06:12 -08:00
# ifdef HAVE_ELEMENTARY_X
2012-05-03 15:42:15 -07:00
_elm_win_xwin_update ( sd ) ;
2012-02-29 04:06:12 -08:00
# endif
}
EAPI const char *
elm_win_icon_name_get ( const Evas_Object * obj )
{
2012-05-03 15:42:15 -07:00
ELM_WIN_CHECK ( obj ) NULL ;
2012-11-25 22:32:53 -08:00
const char * ret = NULL ;
eo_do ( ( Eo * ) obj , elm_obj_win_icon_name_get ( & ret ) ) ;
return ret ;
}
2012-05-03 15:42:15 -07:00
2012-11-25 22:32:53 -08:00
static void
_icon_name_get ( Eo * obj EINA_UNUSED , void * _pd , va_list * list )
{
const char * * ret = va_arg ( * list , const char * * ) ;
Elm_Win_Smart_Data * sd = _pd ;
* ret = sd - > icon_name ;
2012-02-29 04:06:12 -08:00
}
EAPI void
elm_win_role_set ( Evas_Object * obj , const char * role )
{
2012-05-03 15:42:15 -07:00
ELM_WIN_CHECK ( obj ) ;
2012-11-25 22:32:53 -08:00
eo_do ( obj , elm_obj_win_role_set ( role ) ) ;
}
static void
_role_set ( Eo * obj EINA_UNUSED , void * _pd , va_list * list )
{
const char * role = va_arg ( * list , const char * ) ;
Elm_Win_Smart_Data * sd = _pd ;
2012-05-03 15:42:15 -07:00
if ( ! role ) return ;
eina_stringshare_replace ( & ( sd - > role ) , role ) ;
2012-02-29 04:06:12 -08:00
# ifdef HAVE_ELEMENTARY_X
2012-05-03 15:42:15 -07:00
_elm_win_xwin_update ( sd ) ;
2012-02-29 04:06:12 -08:00
# endif
}
EAPI const char *
elm_win_role_get ( const Evas_Object * obj )
{
2012-05-03 15:42:15 -07:00
ELM_WIN_CHECK ( obj ) NULL ;
2012-11-25 22:32:53 -08:00
const char * ret = NULL ;
eo_do ( ( Eo * ) obj , elm_obj_win_role_get ( & ret ) ) ;
return ret ;
}
2012-05-03 15:42:15 -07:00
2012-11-25 22:32:53 -08:00
static void
_role_get ( Eo * obj EINA_UNUSED , void * _pd , va_list * list )
{
const char * * ret = va_arg ( * list , const char * * ) ;
Elm_Win_Smart_Data * sd = _pd ;
* ret = sd - > role ;
2012-02-29 04:06:12 -08:00
}
EAPI void
2012-05-03 15:42:15 -07:00
elm_win_icon_object_set ( Evas_Object * obj ,
Evas_Object * icon )
{
ELM_WIN_CHECK ( obj ) ;
2012-11-25 22:32:53 -08:00
eo_do ( obj , elm_obj_win_icon_object_set ( icon ) ) ;
}
static void
2013-04-24 04:41:37 -07:00
_icon_object_set ( Eo * obj , void * _pd , va_list * list )
2012-11-25 22:32:53 -08:00
{
Evas_Object * icon = va_arg ( * list , Evas_Object * ) ;
Elm_Win_Smart_Data * sd = _pd ;
2012-05-03 15:42:15 -07:00
if ( sd - > icon )
evas_object_event_callback_del_full
2013-04-24 04:41:37 -07:00
( sd - > icon , EVAS_CALLBACK_DEL , _elm_win_on_icon_del , obj ) ;
2012-05-03 15:42:15 -07:00
sd - > icon = icon ;
if ( sd - > icon )
evas_object_event_callback_add
2013-04-24 04:41:37 -07:00
( sd - > icon , EVAS_CALLBACK_DEL , _elm_win_on_icon_del , obj ) ;
2012-02-29 04:06:12 -08:00
# ifdef HAVE_ELEMENTARY_X
2012-05-03 15:42:15 -07:00
_elm_win_xwin_update ( sd ) ;
2012-02-29 04:06:12 -08:00
# endif
}
EAPI const Evas_Object *
elm_win_icon_object_get ( const Evas_Object * obj )
{
2012-05-03 15:42:15 -07:00
ELM_WIN_CHECK ( obj ) NULL ;
2012-11-25 22:32:53 -08:00
const Evas_Object * ret = NULL ;
eo_do ( ( Eo * ) obj , elm_obj_win_icon_object_get ( & ret ) ) ;
return ret ;
}
2012-05-03 15:42:15 -07:00
2012-11-25 22:32:53 -08:00
static void
_icon_object_get ( Eo * obj EINA_UNUSED , void * _pd , va_list * list )
{
const Evas_Object * * ret = va_arg ( * list , const Evas_Object * * ) ;
Elm_Win_Smart_Data * sd = _pd ;
* ret = sd - > icon ;
2010-10-27 07:38:37 -07:00
}
2008-10-06 18:23:49 -07:00
EAPI void
2012-05-03 15:42:15 -07:00
elm_win_autodel_set ( Evas_Object * obj ,
Eina_Bool autodel )
2008-10-06 18:23:49 -07:00
{
2012-05-03 15:42:15 -07:00
ELM_WIN_CHECK ( obj ) ;
2012-11-25 22:32:53 -08:00
eo_do ( obj , elm_obj_win_autodel_set ( autodel ) ) ;
}
2012-05-03 15:42:15 -07:00
2012-11-25 22:32:53 -08:00
static void
_autodel_set ( Eo * obj EINA_UNUSED , void * _pd , va_list * list )
{
Eina_Bool autodel = va_arg ( * list , int ) ;
Elm_Win_Smart_Data * sd = _pd ;
2012-05-03 15:42:15 -07:00
sd - > autodel = autodel ;
2008-10-06 18:23:49 -07:00
}
2010-10-27 07:38:37 -07:00
EAPI Eina_Bool
elm_win_autodel_get ( const Evas_Object * obj )
{
2012-05-03 15:42:15 -07:00
ELM_WIN_CHECK ( obj ) EINA_FALSE ;
2012-11-25 22:32:53 -08:00
Eina_Bool ret = EINA_FALSE ;
eo_do ( ( Eo * ) obj , elm_obj_win_autodel_get ( & ret ) ) ;
return ret ;
}
2012-05-03 15:42:15 -07:00
2012-11-25 22:32:53 -08:00
static void
_autodel_get ( Eo * obj EINA_UNUSED , void * _pd , va_list * list )
{
Eina_Bool * ret = va_arg ( * list , Eina_Bool * ) ;
Elm_Win_Smart_Data * sd = _pd ;
* ret = sd - > autodel ;
2010-10-27 07:38:37 -07:00
}
2008-10-06 18:23:49 -07:00
EAPI void
elm_win_activate ( Evas_Object * obj )
{
2012-05-03 15:42:15 -07:00
ELM_WIN_CHECK ( obj ) ;
2012-11-25 22:32:53 -08:00
eo_do ( obj , elm_obj_win_activate ( ) ) ;
}
2012-05-03 15:42:15 -07:00
2012-11-25 22:32:53 -08:00
static void
_activate ( Eo * obj EINA_UNUSED , void * _pd , va_list * list EINA_UNUSED )
{
Elm_Win_Smart_Data * sd = _pd ;
2012-07-18 21:35:50 -07:00
TRAP ( sd , activate ) ;
2008-10-06 18:23:49 -07:00
}
2009-04-03 14:52:01 -07:00
EAPI void
elm_win_lower ( Evas_Object * obj )
{
2012-05-03 15:42:15 -07:00
ELM_WIN_CHECK ( obj ) ;
2012-11-25 22:32:53 -08:00
eo_do ( obj , elm_obj_win_lower ( ) ) ;
}
2012-05-03 15:42:15 -07:00
2012-11-25 22:32:53 -08:00
static void
_lower ( Eo * obj EINA_UNUSED , void * _pd , va_list * list EINA_UNUSED )
{
Elm_Win_Smart_Data * sd = _pd ;
2012-07-18 21:35:50 -07:00
TRAP ( sd , lower ) ;
2009-04-03 14:52:01 -07:00
}
EAPI void
elm_win_raise ( Evas_Object * obj )
{
2012-05-03 15:42:15 -07:00
ELM_WIN_CHECK ( obj ) ;
2012-11-25 22:32:53 -08:00
eo_do ( obj , elm_obj_win_raise ( ) ) ;
}
2012-05-03 15:42:15 -07:00
2012-11-25 22:32:53 -08:00
static void
_raise ( Eo * obj EINA_UNUSED , void * _pd , va_list * list EINA_UNUSED )
{
Elm_Win_Smart_Data * sd = _pd ;
2012-07-18 21:35:50 -07:00
TRAP ( sd , raise ) ;
2009-04-03 14:52:01 -07:00
}
2011-12-03 14:51:12 -08:00
EAPI void
2012-05-03 15:42:15 -07:00
elm_win_center ( Evas_Object * obj ,
Eina_Bool h ,
Eina_Bool v )
2011-12-03 14:51:12 -08:00
{
2012-11-25 22:32:53 -08:00
ELM_WIN_CHECK ( obj ) ;
eo_do ( obj , elm_obj_win_center ( h , v ) ) ;
}
static void
_center ( Eo * obj , void * _pd , va_list * list )
{
Eina_Bool h = va_arg ( * list , int ) ;
Eina_Bool v = va_arg ( * list , int ) ;
2011-12-03 14:51:12 -08:00
int win_w , win_h , screen_w , screen_h , nx , ny ;
2012-05-03 15:42:15 -07:00
2012-11-25 22:32:53 -08:00
Elm_Win_Smart_Data * sd = _pd ;
2012-05-03 15:42:15 -07:00
2012-07-18 21:35:50 -07:00
if ( ( trap ) & & ( trap - > center ) & & ( ! trap - > center ( sd - > trap_data , obj ) ) )
return ;
2012-05-03 15:42:15 -07:00
ecore_evas_screen_geometry_get ( sd - > ee , NULL , NULL , & screen_w , & screen_h ) ;
2011-12-04 12:44:41 -08:00
if ( ( ! screen_w ) | | ( ! screen_h ) ) return ;
2012-05-03 15:42:15 -07:00
2011-12-03 14:51:12 -08:00
evas_object_geometry_get ( obj , NULL , NULL , & win_w , & win_h ) ;
2011-12-04 12:44:41 -08:00
if ( ( ! win_w ) | | ( ! win_h ) ) return ;
2012-05-03 15:42:15 -07:00
2011-12-03 14:51:12 -08:00
if ( h ) nx = win_w > = screen_w ? 0 : ( screen_w / 2 ) - ( win_w / 2 ) ;
2012-05-03 15:42:15 -07:00
else nx = sd - > screen . x ;
2011-12-03 14:51:12 -08:00
if ( v ) ny = win_h > = screen_h ? 0 : ( screen_h / 2 ) - ( win_h / 2 ) ;
2012-05-03 15:42:15 -07:00
else ny = sd - > screen . y ;
2011-12-04 12:44:41 -08:00
if ( nx < 0 ) nx = 0 ;
if ( ny < 0 ) ny = 0 ;
2012-05-03 15:42:15 -07:00
2011-12-03 14:51:12 -08:00
evas_object_move ( obj , nx , ny ) ;
}
2008-10-06 18:23:49 -07:00
EAPI void
2012-05-03 15:42:15 -07:00
elm_win_borderless_set ( Evas_Object * obj ,
Eina_Bool borderless )
2008-10-06 18:23:49 -07:00
{
2012-05-03 15:42:15 -07:00
ELM_WIN_CHECK ( obj ) ;
2012-11-25 22:32:53 -08:00
eo_do ( obj , elm_obj_win_borderless_set ( borderless ) ) ;
}
static void
_borderless_set ( Eo * obj EINA_UNUSED , void * _pd , va_list * list )
{
Eina_Bool borderless = va_arg ( * list , int ) ;
Elm_Win_Smart_Data * sd = _pd ;
2012-05-03 15:42:15 -07:00
2013-05-06 16:08:58 -07:00
if ( borderless )
{
if ( EE_ENGINE_COMPARE ( sd - > ee , ELM_WAYLAND_SHM ) | |
EE_ENGINE_COMPARE ( sd - > ee , ELM_WAYLAND_EGL ) )
_elm_win_frame_del ( sd ) ;
}
else
{
if ( EE_ENGINE_COMPARE ( sd - > ee , ELM_WAYLAND_SHM ) | |
EE_ENGINE_COMPARE ( sd - > ee , ELM_WAYLAND_EGL ) )
_elm_win_frame_add ( sd , " default " ) ;
2013-05-21 12:32:48 -07:00
if ( sd - > frame_obj )
evas_object_show ( sd - > frame_obj ) ;
2013-05-06 16:08:58 -07:00
}
2012-07-18 21:35:50 -07:00
TRAP ( sd , borderless_set , borderless ) ;
2010-04-12 01:27:10 -07:00
# ifdef HAVE_ELEMENTARY_X
2012-05-03 15:42:15 -07:00
_elm_win_xwin_update ( sd ) ;
2010-04-12 01:27:10 -07:00
# endif
2008-10-06 18:23:49 -07:00
}
2009-10-12 02:09:55 -07:00
EAPI Eina_Bool
2010-03-23 20:06:00 -07:00
elm_win_borderless_get ( const Evas_Object * obj )
2009-10-12 02:09:55 -07:00
{
2012-05-03 15:42:15 -07:00
ELM_WIN_CHECK ( obj ) EINA_FALSE ;
2012-11-25 22:32:53 -08:00
Eina_Bool ret = EINA_FALSE ;
eo_do ( ( Eo * ) obj , elm_obj_win_borderless_get ( & ret ) ) ;
return ret ;
}
2012-05-03 15:42:15 -07:00
2012-11-25 22:32:53 -08:00
static void
_borderless_get ( Eo * obj EINA_UNUSED , void * _pd , va_list * list )
{
Eina_Bool * ret = va_arg ( * list , Eina_Bool * ) ;
Elm_Win_Smart_Data * sd = _pd ;
* ret = ecore_evas_borderless_get ( sd - > ee ) ;
2009-10-12 02:09:55 -07:00
}
2008-10-06 18:23:49 -07:00
EAPI void
2012-05-03 15:42:15 -07:00
elm_win_shaped_set ( Evas_Object * obj ,
Eina_Bool shaped )
2008-10-06 18:23:49 -07:00
{
2012-05-03 15:42:15 -07:00
ELM_WIN_CHECK ( obj ) ;
2012-11-25 22:32:53 -08:00
eo_do ( obj , elm_obj_win_shaped_set ( shaped ) ) ;
}
static void
_shaped_set ( Eo * obj EINA_UNUSED , void * _pd , va_list * list )
{
Eina_Bool shaped = va_arg ( * list , int ) ;
Elm_Win_Smart_Data * sd = _pd ;
2012-05-03 15:42:15 -07:00
2012-07-18 21:35:50 -07:00
TRAP ( sd , shaped_set , shaped ) ;
2010-04-12 01:27:10 -07:00
# ifdef HAVE_ELEMENTARY_X
2012-05-03 15:42:15 -07:00
_elm_win_xwin_update ( sd ) ;
2010-04-12 01:27:10 -07:00
# endif
2008-10-06 18:23:49 -07:00
}
2009-10-12 02:09:55 -07:00
EAPI Eina_Bool
2010-03-23 20:06:00 -07:00
elm_win_shaped_get ( const Evas_Object * obj )
2009-10-12 02:09:55 -07:00
{
2012-05-03 15:42:15 -07:00
ELM_WIN_CHECK ( obj ) EINA_FALSE ;
2012-11-25 22:32:53 -08:00
Eina_Bool ret = EINA_FALSE ;
eo_do ( ( Eo * ) obj , elm_obj_win_shaped_get ( & ret ) ) ;
return ret ;
}
2012-05-03 15:42:15 -07:00
2012-11-25 22:32:53 -08:00
static void
_shaped_get ( Eo * obj EINA_UNUSED , void * _pd , va_list * list )
{
Eina_Bool * ret = va_arg ( * list , Eina_Bool * ) ;
Elm_Win_Smart_Data * sd = _pd ;
* ret = ecore_evas_shaped_get ( sd - > ee ) ;
2009-10-12 02:09:55 -07:00
}
2008-10-06 18:23:49 -07:00
EAPI void
2012-05-03 15:42:15 -07:00
elm_win_alpha_set ( Evas_Object * obj ,
2012-11-07 00:49:37 -08:00
Eina_Bool enabled )
2008-10-06 18:23:49 -07:00
{
2012-05-03 15:42:15 -07:00
ELM_WIN_CHECK ( obj ) ;
2012-11-25 22:32:53 -08:00
eo_do ( obj , elm_obj_win_alpha_set ( enabled ) ) ;
}
static void
_alpha_set ( Eo * obj , void * _pd , va_list * list )
{
Eina_Bool enabled = va_arg ( * list , int ) ;
Elm_Win_Smart_Data * sd = _pd ;
2012-05-03 15:42:15 -07:00
2012-05-15 07:48:30 -07:00
if ( sd - > img_obj )
2008-10-06 18:23:49 -07:00
{
2012-11-07 00:49:37 -08:00
evas_object_image_alpha_set ( sd - > img_obj , enabled ) ;
ecore_evas_alpha_set ( sd - > ee , enabled ) ;
2011-04-14 03:48:43 -07:00
}
else
{
# ifdef HAVE_ELEMENTARY_X
2012-06-06 01:25:12 -07:00
if ( sd - > x . xwin )
2011-04-01 04:20:18 -07:00
{
2012-11-07 00:49:37 -08:00
if ( enabled )
2011-04-14 03:48:43 -07:00
{
2012-11-30 02:26:18 -08:00
if ( ! ecore_x_screen_is_composited ( 0 ) )
2012-11-07 00:49:37 -08:00
elm_win_shaped_set ( obj , enabled ) ;
2011-04-14 03:48:43 -07:00
else
2012-11-07 00:49:37 -08:00
TRAP ( sd , alpha_set , enabled ) ;
2011-04-14 03:48:43 -07:00
}
2011-04-01 04:20:18 -07:00
else
2012-11-07 00:49:37 -08:00
TRAP ( sd , alpha_set , enabled ) ;
2012-05-03 15:42:15 -07:00
_elm_win_xwin_update ( sd ) ;
2011-04-01 04:20:18 -07:00
}
else
2010-04-12 01:27:10 -07:00
# endif
2012-11-07 00:49:37 -08:00
TRAP ( sd , alpha_set , enabled ) ;
2011-04-14 03:48:43 -07:00
}
2008-10-06 18:23:49 -07:00
}
2009-10-12 02:09:55 -07:00
EAPI Eina_Bool
2010-03-23 20:06:00 -07:00
elm_win_alpha_get ( const Evas_Object * obj )
2009-10-12 02:09:55 -07:00
{
2012-05-03 15:42:15 -07:00
ELM_WIN_CHECK ( obj ) EINA_FALSE ;
2012-11-25 22:32:53 -08:00
Eina_Bool ret = EINA_FALSE ;
eo_do ( ( Eo * ) obj , elm_obj_win_alpha_get ( & ret ) ) ;
return ret ;
}
static void
_alpha_get ( Eo * obj EINA_UNUSED , void * _pd , va_list * list )
{
Eina_Bool * ret = va_arg ( * list , Eina_Bool * ) ;
Elm_Win_Smart_Data * sd = _pd ;
2012-05-03 15:42:15 -07:00
2012-05-15 07:48:30 -07:00
if ( sd - > img_obj )
2011-10-14 00:30:52 -07:00
{
2012-11-25 22:32:53 -08:00
* ret = evas_object_image_alpha_get ( sd - > img_obj ) ;
}
else
{
* ret = ecore_evas_alpha_get ( sd - > ee ) ;
2011-10-14 00:30:52 -07:00
}
2009-10-12 02:09:55 -07:00
}
2008-10-06 18:23:49 -07:00
EAPI void
2012-05-03 15:42:15 -07:00
elm_win_override_set ( Evas_Object * obj ,
Eina_Bool override )
2008-10-06 18:23:49 -07:00
{
2012-05-03 15:42:15 -07:00
ELM_WIN_CHECK ( obj ) ;
2012-11-25 22:32:53 -08:00
eo_do ( obj , elm_obj_win_override_set ( override ) ) ;
}
static void
_override_set ( Eo * obj EINA_UNUSED , void * _pd , va_list * list )
{
Eina_Bool override = va_arg ( * list , int ) ;
Elm_Win_Smart_Data * sd = _pd ;
2012-05-03 15:42:15 -07:00
2012-07-18 21:35:50 -07:00
TRAP ( sd , override_set , override ) ;
2010-04-12 01:27:10 -07:00
# ifdef HAVE_ELEMENTARY_X
2012-05-03 15:42:15 -07:00
_elm_win_xwin_update ( sd ) ;
2010-04-12 01:27:10 -07:00
# endif
2008-09-29 23:58:56 -07:00
}
2008-11-18 02:11:57 -08:00
2009-10-12 02:09:55 -07:00
EAPI Eina_Bool
2010-03-23 20:06:00 -07:00
elm_win_override_get ( const Evas_Object * obj )
2009-10-12 02:09:55 -07:00
{
2012-05-03 15:42:15 -07:00
ELM_WIN_CHECK ( obj ) EINA_FALSE ;
2012-11-25 22:32:53 -08:00
Eina_Bool ret = EINA_FALSE ;
eo_do ( ( Eo * ) obj , elm_obj_win_override_get ( & ret ) ) ;
return ret ;
}
2012-05-03 15:42:15 -07:00
2012-11-25 22:32:53 -08:00
static void
_override_get ( Eo * obj EINA_UNUSED , void * _pd , va_list * list )
{
Eina_Bool * ret = va_arg ( * list , Eina_Bool * ) ;
Elm_Win_Smart_Data * sd = _pd ;
* ret = ecore_evas_override_get ( sd - > ee ) ;
2009-10-12 02:09:55 -07:00
}
2009-03-12 22:50:38 -07:00
EAPI void
2012-05-03 15:42:15 -07:00
elm_win_fullscreen_set ( Evas_Object * obj ,
Eina_Bool fullscreen )
2009-03-12 22:50:38 -07:00
{
2012-05-03 15:42:15 -07:00
ELM_WIN_CHECK ( obj ) ;
2012-11-25 22:32:53 -08:00
eo_do ( obj , elm_obj_win_fullscreen_set ( fullscreen ) ) ;
}
static void
_fullscreen_set ( Eo * obj EINA_UNUSED , void * _pd , va_list * list )
{
Eina_Bool fullscreen = va_arg ( * list , int ) ;
Elm_Win_Smart_Data * sd = _pd ;
2012-05-03 15:42:15 -07:00
// YYY: handle if sd->img_obj
2010-11-01 14:10:07 -07:00
if ( ENGINE_COMPARE ( ELM_SOFTWARE_FB ) | |
ENGINE_COMPARE ( ELM_SOFTWARE_16_WINCE ) )
2009-03-14 11:03:19 -07:00
{
2011-04-01 04:20:18 -07:00
// these engines... can ONLY be fullscreen
return ;
2010-11-01 14:10:07 -07:00
}
else
{
2013-01-10 03:53:39 -08:00
// sd->fullscreen = fullscreen;
2012-08-15 03:57:31 -07:00
2013-05-08 14:45:02 -07:00
TRAP ( sd , fullscreen_set , fullscreen ) ;
2012-08-15 03:57:31 -07:00
if ( fullscreen )
{
2012-12-19 10:07:09 -08:00
if ( EE_ENGINE_COMPARE ( sd - > ee , ELM_WAYLAND_SHM ) | |
EE_ENGINE_COMPARE ( sd - > ee , ELM_WAYLAND_EGL ) )
2012-08-15 03:57:31 -07:00
_elm_win_frame_del ( sd ) ;
}
else
{
2012-12-19 10:07:09 -08:00
if ( EE_ENGINE_COMPARE ( sd - > ee , ELM_WAYLAND_SHM ) | |
EE_ENGINE_COMPARE ( sd - > ee , ELM_WAYLAND_EGL ) )
2012-08-15 03:57:31 -07:00
_elm_win_frame_add ( sd , " default " ) ;
2013-05-21 12:32:48 -07:00
if ( sd - > frame_obj )
evas_object_show ( sd - > frame_obj ) ;
2012-08-15 03:57:31 -07:00
}
2010-04-12 01:27:10 -07:00
# ifdef HAVE_ELEMENTARY_X
2012-05-03 15:42:15 -07:00
_elm_win_xwin_update ( sd ) ;
2010-04-12 01:27:10 -07:00
# endif
2009-03-14 11:03:19 -07:00
}
2009-03-12 22:50:38 -07:00
}
2009-10-12 02:09:55 -07:00
EAPI Eina_Bool
2010-03-23 20:06:00 -07:00
elm_win_fullscreen_get ( const Evas_Object * obj )
2009-10-12 02:09:55 -07:00
{
2012-05-03 15:42:15 -07:00
ELM_WIN_CHECK ( obj ) EINA_FALSE ;
2012-11-25 22:32:53 -08:00
Eina_Bool ret = EINA_FALSE ;
eo_do ( ( Eo * ) obj , elm_obj_win_fullscreen_get ( & ret ) ) ;
return ret ;
}
static void
_fullscreen_get ( Eo * obj EINA_UNUSED , void * _pd , va_list * list )
{
Eina_Bool * ret = va_arg ( * list , Eina_Bool * ) ;
Elm_Win_Smart_Data * sd = _pd ;
2012-05-03 15:42:15 -07:00
2012-12-19 10:07:09 -08:00
if ( EE_ENGINE_COMPARE ( sd - > ee , ELM_SOFTWARE_FB ) | |
EE_ENGINE_COMPARE ( sd - > ee , ELM_SOFTWARE_16_WINCE ) )
2009-10-12 02:09:55 -07:00
{
2011-04-01 04:20:18 -07:00
// these engines... can ONLY be fullscreen
2012-11-25 22:32:53 -08:00
* ret = EINA_TRUE ;
2010-11-01 14:10:07 -07:00
}
else
{
2012-11-25 22:32:53 -08:00
* ret = sd - > fullscreen ;
2009-10-12 02:09:55 -07:00
}
}
2012-12-27 05:38:33 -08:00
EAPI Evas_Object *
elm_win_main_menu_get ( const Evas_Object * obj )
{
ELM_WIN_CHECK ( obj ) NULL ;
Evas_Object * ret ;
eo_do ( ( Eo * ) obj , elm_obj_win_main_menu_get ( & ret ) ) ;
return ret ;
}
2013-01-17 14:11:33 -08:00
static void
2013-01-30 19:30:53 -08:00
_dbus_menu_set ( Eina_Bool dbus_connect , void * data )
2013-01-17 14:11:33 -08:00
{
2013-01-22 10:51:16 -08:00
ELM_WIN_DATA_GET_OR_RETURN ( data , sd ) ;
2013-01-17 14:11:33 -08:00
2013-01-30 19:30:53 -08:00
if ( dbus_connect )
2013-01-17 14:11:33 -08:00
{
2013-01-22 10:51:16 -08:00
DBG ( " Setting menu to D-Bus " ) ;
edje_object_part_unswallow ( sd - > layout , sd - > main_menu ) ;
edje_object_signal_emit ( sd - > layout , " elm,action,hide_menu " , " elm " ) ;
_elm_menu_menu_bar_hide ( sd - > main_menu ) ;
}
else
{
DBG ( " Setting menu to local mode " ) ;
edje_object_part_swallow ( sd - > layout , " elm.swallow.menu " , sd - > main_menu ) ;
edje_object_signal_emit ( sd - > layout , " elm,action,show_menu " , " elm " ) ;
evas_object_show ( sd - > main_menu ) ;
2013-01-17 14:11:33 -08:00
}
}
2012-12-27 05:38:33 -08:00
static void
_main_menu_get ( Eo * obj , void * _pd , va_list * list )
{
Eo * * ret = va_arg ( * list , Eo * * ) ;
Elm_Win_Smart_Data * sd = _pd ;
2013-01-17 14:11:33 -08:00
Eina_Bool use_dbus = EINA_FALSE ;
2012-12-27 05:38:33 -08:00
if ( sd - > main_menu ) goto end ;
sd - > main_menu = elm_menu_add ( obj ) ;
2013-01-22 10:51:16 -08:00
_elm_menu_menu_bar_set ( sd - > main_menu , EINA_TRUE ) ;
2012-12-27 05:38:33 -08:00
# ifdef HAVE_ELEMENTARY_X
2013-01-22 10:51:24 -08:00
if ( ! _elm_config - > disable_external_menu & & sd - > x . xwin ) use_dbus = EINA_TRUE ;
2012-12-27 05:38:33 -08:00
# endif
2013-01-17 14:11:33 -08:00
2013-05-13 04:18:24 -07:00
# ifdef HAVE_ELEMENTARY_X
2013-01-22 10:51:16 -08:00
if ( use_dbus & & _elm_dbus_menu_register ( sd - > main_menu ) )
2012-12-27 05:38:33 -08:00
{
2013-01-17 14:11:33 -08:00
_elm_dbus_menu_app_menu_register ( sd - > x . xwin , sd - > main_menu ,
2013-01-22 10:51:16 -08:00
_dbus_menu_set , obj ) ;
2012-12-27 05:38:33 -08:00
}
2013-01-17 14:11:33 -08:00
else
2013-05-13 04:18:24 -07:00
# endif
2013-01-22 10:51:16 -08:00
_dbus_menu_set ( EINA_FALSE , obj ) ;
2013-01-17 14:11:33 -08:00
2012-12-27 05:38:33 -08:00
end :
* ret = sd - > main_menu ;
}
2009-03-12 22:50:38 -07:00
EAPI void
2012-05-03 15:42:15 -07:00
elm_win_maximized_set ( Evas_Object * obj ,
Eina_Bool maximized )
{
ELM_WIN_CHECK ( obj ) ;
2012-11-25 22:32:53 -08:00
eo_do ( obj , elm_obj_win_maximized_set ( maximized ) ) ;
}
static void
_maximized_set ( Eo * obj EINA_UNUSED , void * _pd , va_list * list )
{
Eina_Bool maximized = va_arg ( * list , int ) ;
Elm_Win_Smart_Data * sd = _pd ;
2012-05-03 15:42:15 -07:00
2013-01-10 03:53:39 -08:00
// sd->maximized = maximized;
2012-05-03 15:42:15 -07:00
// YYY: handle if sd->img_obj
2012-07-18 21:35:50 -07:00
TRAP ( sd , maximized_set , maximized ) ;
2010-04-12 01:27:10 -07:00
# ifdef HAVE_ELEMENTARY_X
2012-05-03 15:42:15 -07:00
_elm_win_xwin_update ( sd ) ;
2010-04-12 01:27:10 -07:00
# endif
2009-03-12 22:50:38 -07:00
}
2009-10-12 02:09:55 -07:00
EAPI Eina_Bool
2010-03-23 20:06:00 -07:00
elm_win_maximized_get ( const Evas_Object * obj )
2009-10-12 02:09:55 -07:00
{
2012-05-03 15:42:15 -07:00
ELM_WIN_CHECK ( obj ) EINA_FALSE ;
2012-11-25 22:32:53 -08:00
Eina_Bool ret = EINA_FALSE ;
eo_do ( ( Eo * ) obj , elm_obj_win_maximized_get ( & ret ) ) ;
return ret ;
}
2012-05-03 15:42:15 -07:00
2012-11-25 22:32:53 -08:00
static void
_maximized_get ( Eo * obj EINA_UNUSED , void * _pd , va_list * list )
{
Eina_Bool * ret = va_arg ( * list , Eina_Bool * ) ;
Elm_Win_Smart_Data * sd = _pd ;
* ret = sd - > maximized ;
2009-10-12 02:09:55 -07:00
}
2009-03-12 22:50:38 -07:00
EAPI void
2012-05-03 15:42:15 -07:00
elm_win_iconified_set ( Evas_Object * obj ,
Eina_Bool iconified )
{
ELM_WIN_CHECK ( obj ) ;
2012-11-25 22:32:53 -08:00
eo_do ( obj , elm_obj_win_iconified_set ( iconified ) ) ;
}
static void
_iconified_set ( Eo * obj EINA_UNUSED , void * _pd , va_list * list )
{
Eina_Bool iconified = va_arg ( * list , int ) ;
Elm_Win_Smart_Data * sd = _pd ;
2012-05-03 15:42:15 -07:00
2013-01-10 03:53:39 -08:00
// sd->iconified = iconified;
2012-07-18 21:35:50 -07:00
TRAP ( sd , iconified_set , iconified ) ;
2010-04-12 01:27:10 -07:00
# ifdef HAVE_ELEMENTARY_X
2012-05-03 15:42:15 -07:00
_elm_win_xwin_update ( sd ) ;
2010-04-12 01:27:10 -07:00
# endif
2009-03-12 22:50:38 -07:00
}
2009-10-12 02:09:55 -07:00
EAPI Eina_Bool
2010-03-23 20:06:00 -07:00
elm_win_iconified_get ( const Evas_Object * obj )
2009-10-12 02:09:55 -07:00
{
2012-05-03 15:42:15 -07:00
ELM_WIN_CHECK ( obj ) EINA_FALSE ;
2012-11-25 22:32:53 -08:00
Eina_Bool ret = EINA_FALSE ;
eo_do ( ( Eo * ) obj , elm_obj_win_iconified_get ( & ret ) ) ;
return ret ;
}
2012-05-03 15:42:15 -07:00
2012-11-25 22:32:53 -08:00
static void
_iconified_get ( Eo * obj EINA_UNUSED , void * _pd , va_list * list )
{
Eina_Bool * ret = va_arg ( * list , Eina_Bool * ) ;
Elm_Win_Smart_Data * sd = _pd ;
* ret = sd - > iconified ;
2012-02-28 03:20:35 -08:00
}
EAPI void
2012-05-03 15:42:15 -07:00
elm_win_withdrawn_set ( Evas_Object * obj ,
Eina_Bool withdrawn )
{
ELM_WIN_CHECK ( obj ) ;
2012-11-25 22:32:53 -08:00
eo_do ( obj , elm_obj_win_withdrawn_set ( withdrawn ) ) ;
}
static void
_withdrawn_set ( Eo * obj EINA_UNUSED , void * _pd , va_list * list )
{
Eina_Bool withdrawn = va_arg ( * list , int ) ;
Elm_Win_Smart_Data * sd = _pd ;
2012-05-03 15:42:15 -07:00
2013-01-10 03:53:39 -08:00
// sd->withdrawn = withdrawn;
2012-07-18 21:35:50 -07:00
TRAP ( sd , withdrawn_set , withdrawn ) ;
2012-02-28 03:20:35 -08:00
# ifdef HAVE_ELEMENTARY_X
2012-05-03 15:42:15 -07:00
_elm_win_xwin_update ( sd ) ;
2012-02-28 03:20:35 -08:00
# endif
}
EAPI Eina_Bool
2012-02-29 00:56:40 -08:00
elm_win_withdrawn_get ( const Evas_Object * obj )
2012-02-28 03:20:35 -08:00
{
2012-05-03 15:42:15 -07:00
ELM_WIN_CHECK ( obj ) EINA_FALSE ;
2012-11-25 22:32:53 -08:00
Eina_Bool ret = EINA_FALSE ;
eo_do ( ( Eo * ) obj , elm_obj_win_withdrawn_get ( & ret ) ) ;
return ret ;
}
2012-05-03 15:42:15 -07:00
2012-11-25 22:32:53 -08:00
static void
_withdrawn_get ( Eo * obj EINA_UNUSED , void * _pd , va_list * list )
{
Eina_Bool * ret = va_arg ( * list , Eina_Bool * ) ;
Elm_Win_Smart_Data * sd = _pd ;
* ret = sd - > withdrawn ;
2012-02-28 03:20:35 -08:00
}
2012-12-04 22:50:27 -08:00
EAPI void
elm_win_available_profiles_set ( Evas_Object * obj ,
const char * * profiles ,
unsigned int count )
{
ELM_WIN_CHECK ( obj ) ;
eo_do ( ( Eo * ) obj , elm_obj_win_available_profiles_set ( profiles , count ) ) ;
}
static void
_available_profiles_set ( Eo * obj EINA_UNUSED , void * _pd , va_list * list )
{
const char * * profiles = va_arg ( * list , const char * * ) ;
unsigned int count = va_arg ( * list , unsigned int ) ;
Elm_Win_Smart_Data * sd = _pd ;
Eina_Bool found = EINA_FALSE ;
_elm_win_available_profiles_del ( sd ) ;
if ( ( profiles ) & & ( count > = 1 ) )
{
sd - > profile . available_list = calloc ( count , sizeof ( char * ) ) ;
if ( sd - > profile . available_list )
{
if ( ! sd - > profile . name ) found = EINA_TRUE ;
unsigned int i ;
for ( i = 0 ; i < count ; i + + )
{
sd - > profile . available_list [ i ] = eina_stringshare_add ( profiles [ i ] ) ;
/* check to see if a given array has a current profile of elm_win */
if ( ( sd - > profile . name ) & &
( ! strcmp ( sd - > profile . name , profiles [ i ] ) ) )
{
found = EINA_TRUE ;
}
}
sd - > profile . count = count ;
}
}
if ( ecore_evas_window_profile_supported_get ( sd - > ee ) )
{
ecore_evas_window_available_profiles_set ( sd - > ee ,
sd - > profile . available_list ,
sd - > profile . count ) ;
/* current profile of elm_win is wrong, change profile */
if ( ( sd - > profile . available_list ) & & ( ! found ) )
{
eina_stringshare_replace ( & ( sd - > profile . name ) ,
sd - > profile . available_list [ 0 ] ) ;
ecore_evas_window_profile_set ( sd - > ee , sd - > profile . name ) ;
}
}
else
{
if ( sd - > profile . available_list )
_elm_win_profile_update ( sd ) ;
}
}
EAPI Eina_Bool
elm_win_available_profiles_get ( Evas_Object * obj ,
char * * * profiles ,
unsigned int * count )
{
ELM_WIN_CHECK ( obj ) EINA_FALSE ;
Eina_Bool ret = EINA_FALSE ;
eo_do ( ( Eo * ) obj , elm_obj_win_available_profiles_get ( & ret , profiles , count ) ) ;
return ret ;
}
static void
_available_profiles_get ( Eo * obj EINA_UNUSED , void * _pd , va_list * list )
{
Eina_Bool * ret = va_arg ( * list , Eina_Bool * ) ;
char * * * profiles = va_arg ( * list , char * * * ) ;
unsigned int * count = va_arg ( * list , unsigned int * ) ;
Elm_Win_Smart_Data * sd = _pd ;
Eina_Bool res ;
if ( ecore_evas_window_profile_supported_get ( sd - > ee ) )
{
res = ecore_evas_window_available_profiles_get ( sd - > ee ,
profiles ,
count ) ;
}
else
{
if ( profiles ) * profiles = ( char * * ) sd - > profile . available_list ;
if ( count ) * count = sd - > profile . count ;
res = EINA_TRUE ;
}
* ret = res ;
}
EAPI void
elm_win_profile_set ( Evas_Object * obj ,
const char * profile )
{
ELM_WIN_CHECK ( obj ) ;
eo_do ( ( Eo * ) obj , elm_obj_win_profile_set ( profile ) ) ;
}
static void
_profile_set ( Eo * obj EINA_UNUSED , void * _pd , va_list * list )
{
const char * profile = va_arg ( * list , const char * ) ;
Elm_Win_Smart_Data * sd = _pd ;
/* check to see if a given profile is present in an available profiles */
if ( ( profile ) & & ( sd - > profile . available_list ) )
{
Eina_Bool found = EINA_FALSE ;
unsigned int i ;
for ( i = 0 ; i < sd - > profile . count ; i + + )
{
if ( ! strcmp ( profile ,
sd - > profile . available_list [ i ] ) )
{
found = EINA_TRUE ;
break ;
}
}
if ( ! found ) return ;
}
if ( ecore_evas_window_profile_supported_get ( sd - > ee ) )
{
if ( ! profile ) _elm_win_profile_del ( sd ) ;
ecore_evas_window_profile_set ( sd - > ee , profile ) ;
}
else
{
if ( _elm_win_profile_set ( sd , profile ) )
_elm_win_profile_update ( sd ) ;
}
}
EAPI const char *
elm_win_profile_get ( const Evas_Object * obj )
{
ELM_WIN_CHECK ( obj ) NULL ;
const char * ret = NULL ;
eo_do ( ( Eo * ) obj , elm_obj_win_profile_get ( & ret ) ) ;
return ret ;
}
static void
_profile_get ( Eo * obj EINA_UNUSED , void * _pd , va_list * list )
{
const char * * ret = va_arg ( * list , const char * * ) ;
Elm_Win_Smart_Data * sd = _pd ;
* ret = sd - > profile . name ;
}
2012-02-28 03:20:35 -08:00
EAPI void
2012-05-03 15:42:15 -07:00
elm_win_urgent_set ( Evas_Object * obj ,
Eina_Bool urgent )
{
ELM_WIN_CHECK ( obj ) ;
2012-11-25 22:32:53 -08:00
eo_do ( obj , elm_obj_win_urgent_set ( urgent ) ) ;
}
static void
_urgent_set ( Eo * obj EINA_UNUSED , void * _pd , va_list * list )
{
Eina_Bool urgent = va_arg ( * list , int ) ;
Elm_Win_Smart_Data * sd = _pd ;
2012-05-03 15:42:15 -07:00
sd - > urgent = urgent ;
2012-07-18 21:35:50 -07:00
TRAP ( sd , urgent_set , urgent ) ;
2012-02-28 03:20:35 -08:00
# ifdef HAVE_ELEMENTARY_X
2012-05-03 15:42:15 -07:00
_elm_win_xwin_update ( sd ) ;
2012-02-28 03:20:35 -08:00
# endif
}
EAPI Eina_Bool
elm_win_urgent_get ( const Evas_Object * obj )
{
2012-05-03 15:42:15 -07:00
ELM_WIN_CHECK ( obj ) EINA_FALSE ;
2012-11-25 22:32:53 -08:00
Eina_Bool ret = EINA_FALSE ;
eo_do ( ( Eo * ) obj , elm_obj_win_urgent_get ( & ret ) ) ;
return ret ;
}
2012-05-03 15:42:15 -07:00
2012-11-25 22:32:53 -08:00
static void
_urgent_get ( Eo * obj EINA_UNUSED , void * _pd , va_list * list )
{
Eina_Bool * ret = va_arg ( * list , Eina_Bool * ) ;
Elm_Win_Smart_Data * sd = _pd ;
* ret = sd - > urgent ;
2012-02-28 03:20:35 -08:00
}
EAPI void
2012-05-03 15:42:15 -07:00
elm_win_demand_attention_set ( Evas_Object * obj ,
Eina_Bool demand_attention )
{
ELM_WIN_CHECK ( obj ) ;
2012-11-25 22:32:53 -08:00
eo_do ( obj , elm_obj_win_demand_attention_set ( demand_attention ) ) ;
}
static void
_demand_attention_set ( Eo * obj EINA_UNUSED , void * _pd , va_list * list )
{
Eina_Bool demand_attention = va_arg ( * list , int ) ;
Elm_Win_Smart_Data * sd = _pd ;
2012-05-03 15:42:15 -07:00
sd - > demand_attention = demand_attention ;
2012-07-18 21:35:50 -07:00
TRAP ( sd , demand_attention_set , demand_attention ) ;
2012-02-28 03:20:35 -08:00
# ifdef HAVE_ELEMENTARY_X
2012-05-03 15:42:15 -07:00
_elm_win_xwin_update ( sd ) ;
2012-02-28 03:20:35 -08:00
# endif
}
EAPI Eina_Bool
elm_win_demand_attention_get ( const Evas_Object * obj )
{
2012-05-03 15:42:15 -07:00
ELM_WIN_CHECK ( obj ) EINA_FALSE ;
2012-11-25 22:32:53 -08:00
Eina_Bool ret = EINA_FALSE ;
eo_do ( ( Eo * ) obj , elm_obj_win_demand_attention_get ( & ret ) ) ;
return ret ;
}
2012-05-03 15:42:15 -07:00
2012-11-25 22:32:53 -08:00
static void
_demand_attention_get ( Eo * obj EINA_UNUSED , void * _pd , va_list * list )
{
Eina_Bool * ret = va_arg ( * list , Eina_Bool * ) ;
Elm_Win_Smart_Data * sd = _pd ;
* ret = sd - > demand_attention ;
2012-02-28 03:20:35 -08:00
}
EAPI void
2012-05-03 15:42:15 -07:00
elm_win_modal_set ( Evas_Object * obj ,
Eina_Bool modal )
{
ELM_WIN_CHECK ( obj ) ;
2012-11-25 22:32:53 -08:00
eo_do ( obj , elm_obj_win_modal_set ( modal ) ) ;
}
static void
_modal_set ( Eo * obj EINA_UNUSED , void * _pd , va_list * list )
{
Eina_Bool modal = va_arg ( * list , int ) ;
Elm_Win_Smart_Data * sd = _pd ;
2012-05-03 15:42:15 -07:00
sd - > modal = modal ;
2012-07-18 21:35:50 -07:00
TRAP ( sd , modal_set , modal ) ;
2012-02-28 03:20:35 -08:00
# ifdef HAVE_ELEMENTARY_X
2012-05-03 15:42:15 -07:00
_elm_win_xwin_update ( sd ) ;
2012-02-28 03:20:35 -08:00
# endif
}
EAPI Eina_Bool
elm_win_modal_get ( const Evas_Object * obj )
{
2012-05-03 15:42:15 -07:00
ELM_WIN_CHECK ( obj ) EINA_FALSE ;
2012-11-25 22:32:53 -08:00
Eina_Bool ret = EINA_FALSE ;
eo_do ( ( Eo * ) obj , elm_obj_win_modal_get ( & ret ) ) ;
return ret ;
}
2012-05-03 15:42:15 -07:00
2012-11-25 22:32:53 -08:00
static void
_modal_get ( Eo * obj EINA_UNUSED , void * _pd , va_list * list )
{
Eina_Bool * ret = va_arg ( * list , Eina_Bool * ) ;
Elm_Win_Smart_Data * sd = _pd ;
* ret = sd - > modal ;
2012-02-28 03:20:35 -08:00
}
EAPI void
2012-05-03 15:42:15 -07:00
elm_win_aspect_set ( Evas_Object * obj ,
double aspect )
{
ELM_WIN_CHECK ( obj ) ;
2012-11-25 22:32:53 -08:00
eo_do ( obj , elm_obj_win_aspect_set ( aspect ) ) ;
}
static void
_aspect_set ( Eo * obj EINA_UNUSED , void * _pd , va_list * list )
{
double aspect = va_arg ( * list , double ) ;
Elm_Win_Smart_Data * sd = _pd ;
2012-05-03 15:42:15 -07:00
sd - > aspect = aspect ;
2012-07-18 21:35:50 -07:00
TRAP ( sd , aspect_set , aspect ) ;
2012-02-28 03:20:35 -08:00
# ifdef HAVE_ELEMENTARY_X
2012-05-03 15:42:15 -07:00
_elm_win_xwin_update ( sd ) ;
2012-02-28 03:20:35 -08:00
# endif
}
EAPI double
elm_win_aspect_get ( const Evas_Object * obj )
{
2012-06-12 03:15:19 -07:00
ELM_WIN_CHECK ( obj ) 0.0 ;
2012-11-25 22:32:53 -08:00
double ret = 0.0 ;
eo_do ( ( Eo * ) obj , elm_obj_win_aspect_get ( & ret ) ) ;
return ret ;
}
2012-05-03 15:42:15 -07:00
2012-11-25 22:32:53 -08:00
static void
_aspect_get ( Eo * obj EINA_UNUSED , void * _pd , va_list * list )
{
double * ret = va_arg ( * list , double * ) ;
Elm_Win_Smart_Data * sd = _pd ;
* ret = sd - > aspect ;
2009-10-12 02:09:55 -07:00
}
2012-06-12 03:15:19 -07:00
EAPI void
elm_win_size_base_set ( Evas_Object * obj , int w , int h )
{
ELM_WIN_CHECK ( obj ) ;
2012-11-25 22:32:53 -08:00
eo_do ( obj , elm_obj_win_size_base_set ( w , h ) ) ;
}
static void
_size_base_set ( Eo * obj EINA_UNUSED , void * _pd , va_list * list )
{
int w = va_arg ( * list , int ) ;
int h = va_arg ( * list , int ) ;
Elm_Win_Smart_Data * sd = _pd ;
2012-06-12 03:15:19 -07:00
sd - > size_base_w = w ;
sd - > size_base_h = h ;
2012-07-18 21:35:50 -07:00
TRAP ( sd , size_base_set , w , h ) ;
2012-06-12 03:15:19 -07:00
# ifdef HAVE_ELEMENTARY_X
_elm_win_xwin_update ( sd ) ;
# endif
}
EAPI void
elm_win_size_base_get ( Evas_Object * obj , int * w , int * h )
{
ELM_WIN_CHECK ( obj ) ;
2012-11-25 22:32:53 -08:00
eo_do ( obj , elm_obj_win_size_base_get ( w , h ) ) ;
}
static void
_size_base_get ( Eo * obj EINA_UNUSED , void * _pd , va_list * list )
{
int * w = va_arg ( * list , int * ) ;
int * h = va_arg ( * list , int * ) ;
Elm_Win_Smart_Data * sd = _pd ;
2012-06-12 03:15:19 -07:00
if ( w ) * w = sd - > size_base_w ;
if ( w ) * h = sd - > size_base_h ;
}
EAPI void
elm_win_size_step_set ( Evas_Object * obj , int w , int h )
{
ELM_WIN_CHECK ( obj ) ;
2012-11-25 22:32:53 -08:00
eo_do ( obj , elm_obj_win_size_step_set ( w , h ) ) ;
}
static void
_size_step_set ( Eo * obj EINA_UNUSED , void * _pd , va_list * list )
{
int w = va_arg ( * list , int ) ;
int h = va_arg ( * list , int ) ;
Elm_Win_Smart_Data * sd = _pd ;
2012-06-12 03:15:19 -07:00
sd - > size_step_w = w ;
sd - > size_step_h = h ;
2012-07-18 21:35:50 -07:00
TRAP ( sd , size_step_set , w , h ) ;
2012-06-12 03:15:19 -07:00
# ifdef HAVE_ELEMENTARY_X
_elm_win_xwin_update ( sd ) ;
# endif
}
EAPI void
elm_win_size_step_get ( Evas_Object * obj , int * w , int * h )
{
ELM_WIN_CHECK ( obj ) ;
2012-11-25 22:32:53 -08:00
eo_do ( obj , elm_obj_win_size_step_get ( w , h ) ) ;
}
static void
_size_step_get ( Eo * obj EINA_UNUSED , void * _pd , va_list * list )
{
int * w = va_arg ( * list , int * ) ;
int * h = va_arg ( * list , int * ) ;
Elm_Win_Smart_Data * sd = _pd ;
2012-06-12 03:15:19 -07:00
if ( w ) * w = sd - > size_step_w ;
if ( w ) * h = sd - > size_step_h ;
}
2009-03-12 22:50:38 -07:00
EAPI void
2012-05-03 15:42:15 -07:00
elm_win_layer_set ( Evas_Object * obj ,
int layer )
2009-03-12 22:50:38 -07:00
{
2012-05-03 15:42:15 -07:00
ELM_WIN_CHECK ( obj ) ;
2012-11-25 22:32:53 -08:00
eo_do ( obj , elm_obj_win_layer_set ( layer ) ) ;
}
static void
_layer_set ( Eo * obj EINA_UNUSED , void * _pd , va_list * list )
{
int layer = va_arg ( * list , int ) ;
Elm_Win_Smart_Data * sd = _pd ;
2012-05-03 15:42:15 -07:00
2012-07-18 21:35:50 -07:00
TRAP ( sd , layer_set , layer ) ;
2010-04-12 01:27:10 -07:00
# ifdef HAVE_ELEMENTARY_X
2012-05-03 15:42:15 -07:00
_elm_win_xwin_update ( sd ) ;
2010-04-12 01:27:10 -07:00
# endif
2009-03-12 22:50:38 -07:00
}
2009-10-12 02:09:55 -07:00
EAPI int
2010-03-23 20:06:00 -07:00
elm_win_layer_get ( const Evas_Object * obj )
2009-10-12 02:09:55 -07:00
{
2012-05-03 15:42:15 -07:00
ELM_WIN_CHECK ( obj ) - 1 ;
2012-11-25 22:32:53 -08:00
int ret = - 1 ;
eo_do ( ( Eo * ) obj , elm_obj_win_layer_get ( & ret ) ) ;
return ret ;
}
2012-05-03 15:42:15 -07:00
2012-11-25 22:32:53 -08:00
static void
_layer_get ( Eo * obj EINA_UNUSED , void * _pd , va_list * list )
{
int * ret = va_arg ( * list , int * ) ;
Elm_Win_Smart_Data * sd = _pd ;
* ret = ecore_evas_layer_get ( sd - > ee ) ;
2009-10-12 02:09:55 -07:00
}
2012-08-21 01:48:47 -07:00
EAPI void
elm_win_norender_push ( Evas_Object * obj )
{
ELM_WIN_CHECK ( obj ) ;
ELM_WIN_DATA_GET_OR_RETURN ( obj , sd ) ;
2012-10-10 17:35:00 -07:00
2012-08-21 01:48:47 -07:00
sd - > norender + + ;
if ( sd - > norender = = 1 ) ecore_evas_manual_render_set ( sd - > ee , EINA_TRUE ) ;
}
EAPI void
elm_win_norender_pop ( Evas_Object * obj )
{
ELM_WIN_CHECK ( obj ) ;
ELM_WIN_DATA_GET_OR_RETURN ( obj , sd ) ;
if ( sd - > norender < = 0 ) return ;
sd - > norender - - ;
if ( sd - > norender = = 0 ) ecore_evas_manual_render_set ( sd - > ee , EINA_FALSE ) ;
}
EAPI int
elm_win_norender_get ( Evas_Object * obj )
{
ELM_WIN_CHECK ( obj ) - 1 ;
ELM_WIN_DATA_GET_OR_RETURN_VAL ( obj , sd , - 1 ) ;
return sd - > norender ;
}
EAPI void
elm_win_render ( Evas_Object * obj )
{
ELM_WIN_CHECK ( obj ) ;
ELM_WIN_DATA_GET_OR_RETURN ( obj , sd ) ;
ecore_evas_manual_render ( sd - > ee ) ;
}
2012-11-21 03:48:02 -08:00
static int
_win_rotation_degree_check ( int rotation )
{
2012-11-21 03:42:52 -08:00
if ( ( rotation > 360 ) | | ( rotation < 0 ) )
{
2012-11-21 04:50:17 -08:00
WRN ( " Rotation degree should be 0 ~ 360 (passed degree: %d) " , rotation ) ;
rotation % = 360 ;
2012-11-21 03:42:52 -08:00
if ( rotation < 0 ) rotation + = 360 ;
}
2012-11-21 03:48:02 -08:00
return rotation ;
}
EAPI void
elm_win_rotation_set ( Evas_Object * obj ,
int rotation )
{
ELM_WIN_CHECK ( obj ) ;
2012-11-25 22:32:53 -08:00
eo_do ( obj , elm_obj_win_rotation_set ( rotation ) ) ;
}
static void
2013-02-13 03:47:51 -08:00
_win_rotate ( Evas_Object * obj , Elm_Win_Smart_Data * sd , int rotation , Eina_Bool resize )
2012-11-25 22:32:53 -08:00
{
2012-11-21 03:48:02 -08:00
rotation = _win_rotation_degree_check ( rotation ) ;
2012-05-03 15:42:15 -07:00
if ( sd - > rot = = rotation ) return ;
sd - > rot = rotation ;
2013-02-13 03:47:51 -08:00
if ( resize ) TRAP ( sd , rotation_with_resize_set , rotation ) ;
else TRAP ( sd , rotation_set , rotation ) ;
2009-05-06 05:41:23 -07:00
evas_object_size_hint_min_set ( obj , - 1 , - 1 ) ;
evas_object_size_hint_max_set ( obj , - 1 , - 1 ) ;
2012-05-03 15:42:15 -07:00
_elm_win_resize_objects_eval ( obj ) ;
2010-04-12 01:27:10 -07:00
# ifdef HAVE_ELEMENTARY_X
2012-05-03 15:42:15 -07:00
_elm_win_xwin_update ( sd ) ;
2010-04-12 01:27:10 -07:00
# endif
2013-02-13 21:38:26 -08:00
elm_widget_orientation_set ( obj , rotation ) ;
2012-09-02 23:55:07 -07:00
evas_object_smart_callback_call ( obj , SIG_ROTATION_CHANGED , NULL ) ;
2009-03-14 11:03:19 -07:00
}
2013-02-13 03:47:51 -08:00
static void
_rotation_set ( Eo * obj , void * _pd , va_list * list )
{
int rotation = va_arg ( * list , int ) ;
Elm_Win_Smart_Data * sd = _pd ;
_win_rotate ( obj , sd , rotation , EINA_FALSE ) ;
}
2010-02-10 06:38:08 -08:00
EAPI void
2012-05-03 15:42:15 -07:00
elm_win_rotation_with_resize_set ( Evas_Object * obj ,
int rotation )
{
ELM_WIN_CHECK ( obj ) ;
2012-11-25 22:32:53 -08:00
eo_do ( obj , elm_obj_win_rotation_with_resize_set ( rotation ) ) ;
}
static void
_rotation_with_resize_set ( Eo * obj , void * _pd , va_list * list )
{
int rotation = va_arg ( * list , int ) ;
Elm_Win_Smart_Data * sd = _pd ;
2013-02-13 03:47:51 -08:00
_win_rotate ( obj , sd , rotation , EINA_TRUE ) ;
2010-02-10 06:38:08 -08:00
}
2009-10-12 02:09:55 -07:00
EAPI int
2010-03-23 20:06:00 -07:00
elm_win_rotation_get ( const Evas_Object * obj )
2009-10-12 02:09:55 -07:00
{
2012-05-03 15:42:15 -07:00
ELM_WIN_CHECK ( obj ) - 1 ;
2012-11-25 22:32:53 -08:00
int ret = - 1 ;
eo_do ( ( Eo * ) obj , elm_obj_win_rotation_get ( & ret ) ) ;
return ret ;
}
2012-05-03 15:42:15 -07:00
2012-11-25 22:32:53 -08:00
static void
_rotation_get ( Eo * obj EINA_UNUSED , void * _pd , va_list * list )
{
int * ret = va_arg ( * list , int * ) ;
Elm_Win_Smart_Data * sd = _pd ;
* ret = sd - > rot ;
2009-10-12 02:09:55 -07:00
}
2009-04-03 14:52:01 -07:00
EAPI void
2012-05-03 15:42:15 -07:00
elm_win_sticky_set ( Evas_Object * obj ,
Eina_Bool sticky )
{
ELM_WIN_CHECK ( obj ) ;
2012-11-25 22:32:53 -08:00
eo_do ( obj , elm_obj_win_sticky_set ( sticky ) ) ;
}
static void
_sticky_set ( Eo * obj EINA_UNUSED , void * _pd , va_list * list )
{
Eina_Bool sticky = va_arg ( * list , int ) ;
Elm_Win_Smart_Data * sd = _pd ;
2012-05-03 15:42:15 -07:00
2013-01-10 03:53:39 -08:00
// sd->sticky = sticky;
2012-07-18 21:35:50 -07:00
TRAP ( sd , sticky_set , sticky ) ;
2010-04-12 01:27:10 -07:00
# ifdef HAVE_ELEMENTARY_X
2012-05-03 15:42:15 -07:00
_elm_win_xwin_update ( sd ) ;
2010-04-12 01:27:10 -07:00
# endif
2009-04-03 14:52:01 -07:00
}
2009-10-12 02:09:55 -07:00
EAPI Eina_Bool
2010-03-23 20:06:00 -07:00
elm_win_sticky_get ( const Evas_Object * obj )
2009-10-12 02:09:55 -07:00
{
2012-05-03 15:42:15 -07:00
ELM_WIN_CHECK ( obj ) EINA_FALSE ;
2012-11-25 22:32:53 -08:00
Eina_Bool ret = EINA_FALSE ;
eo_do ( ( Eo * ) obj , elm_obj_win_sticky_get ( & ret ) ) ;
return ret ;
}
2012-05-03 15:42:15 -07:00
2012-11-25 22:32:53 -08:00
static void
_sticky_get ( Eo * obj EINA_UNUSED , void * _pd , va_list * list )
{
Eina_Bool * ret = va_arg ( * list , Eina_Bool * ) ;
Elm_Win_Smart_Data * sd = _pd ;
* ret = sd - > sticky ;
2009-10-12 02:09:55 -07:00
}
2008-11-18 02:11:57 -08:00
EAPI void
2012-05-03 15:42:15 -07:00
elm_win_keyboard_mode_set ( Evas_Object * obj ,
Elm_Win_Keyboard_Mode mode )
2008-11-18 02:11:57 -08:00
{
2012-05-03 15:42:15 -07:00
ELM_WIN_CHECK ( obj ) ;
2012-11-25 22:32:53 -08:00
eo_do ( obj , elm_obj_win_keyboard_mode_set ( mode ) ) ;
}
static void
_keyboard_mode_set ( Eo * obj EINA_UNUSED , void * _pd , va_list * list )
{
Elm_Win_Keyboard_Mode mode = va_arg ( * list , Elm_Win_Keyboard_Mode ) ;
Elm_Win_Smart_Data * sd = _pd ;
2012-05-03 15:42:15 -07:00
if ( mode = = sd - > kbdmode ) return ;
2010-04-12 01:27:10 -07:00
# ifdef HAVE_ELEMENTARY_X
2012-05-03 15:42:15 -07:00
_elm_win_xwindow_get ( sd ) ;
2010-04-12 01:27:10 -07:00
# endif
2012-05-03 15:42:15 -07:00
sd - > kbdmode = mode ;
2009-07-06 23:46:51 -07:00
# ifdef HAVE_ELEMENTARY_X
2012-06-06 01:25:12 -07:00
if ( sd - > x . xwin )
2008-11-18 02:11:57 -08:00
ecore_x_e_virtual_keyboard_state_set
2012-06-06 01:25:12 -07:00
( sd - > x . xwin , ( Ecore_X_Virtual_Keyboard_State ) sd - > kbdmode ) ;
2009-07-06 23:46:51 -07:00
# endif
2008-11-18 02:11:57 -08:00
}
2010-10-27 07:38:37 -07:00
EAPI Elm_Win_Keyboard_Mode
elm_win_keyboard_mode_get ( const Evas_Object * obj )
{
2012-05-03 15:42:15 -07:00
ELM_WIN_CHECK ( obj ) ELM_WIN_KEYBOARD_UNKNOWN ;
2012-11-25 22:32:53 -08:00
Elm_Win_Keyboard_Mode ret = ELM_WIN_KEYBOARD_UNKNOWN ;
eo_do ( ( Eo * ) obj , elm_obj_win_keyboard_mode_get ( & ret ) ) ;
return ret ;
}
2012-05-03 15:42:15 -07:00
2012-11-25 22:32:53 -08:00
static void
_keyboard_mode_get ( Eo * obj EINA_UNUSED , void * _pd , va_list * list )
{
Elm_Win_Keyboard_Mode * ret = va_arg ( * list , Elm_Win_Keyboard_Mode * ) ;
Elm_Win_Smart_Data * sd = _pd ;
* ret = sd - > kbdmode ;
2010-10-27 07:38:37 -07:00
}
2008-11-18 02:11:57 -08:00
EAPI void
2012-05-03 15:42:15 -07:00
elm_win_keyboard_win_set ( Evas_Object * obj ,
Eina_Bool is_keyboard )
2008-11-18 02:11:57 -08:00
{
2012-05-03 15:42:15 -07:00
ELM_WIN_CHECK ( obj ) ;
2012-11-25 22:32:53 -08:00
eo_do ( obj , elm_obj_win_keyboard_win_set ( is_keyboard ) ) ;
}
static void
_keyboard_win_set ( Eo * obj EINA_UNUSED , void * _pd , va_list * list )
{
Eina_Bool is_keyboard = va_arg ( * list , int ) ;
Elm_Win_Smart_Data * sd = _pd ;
2012-05-03 15:42:15 -07:00
2009-07-06 23:46:51 -07:00
# ifdef HAVE_ELEMENTARY_X
2012-05-03 15:42:15 -07:00
_elm_win_xwindow_get ( sd ) ;
2012-06-06 01:25:12 -07:00
if ( sd - > x . xwin )
ecore_x_e_virtual_keyboard_set ( sd - > x . xwin , is_keyboard ) ;
2011-11-20 06:00:41 -08:00
# else
2012-05-03 15:42:15 -07:00
( void ) is_keyboard ;
2009-07-06 23:46:51 -07:00
# endif
2008-11-18 02:11:57 -08:00
}
2008-11-18 22:23:08 -08:00
2010-10-27 07:38:37 -07:00
EAPI Eina_Bool
elm_win_keyboard_win_get ( const Evas_Object * obj )
{
2012-05-03 15:42:15 -07:00
ELM_WIN_CHECK ( obj ) EINA_FALSE ;
2012-11-25 22:32:53 -08:00
Eina_Bool ret = EINA_FALSE ;
eo_do ( ( Eo * ) obj , elm_obj_win_keyboard_win_get ( & ret ) ) ;
return ret ;
}
static void
_keyboard_win_get ( Eo * obj EINA_UNUSED , void * _pd , va_list * list )
{
Eina_Bool * ret = va_arg ( * list , Eina_Bool * ) ;
Elm_Win_Smart_Data * sd = _pd ;
2012-05-03 15:42:15 -07:00
2010-10-27 07:38:37 -07:00
# ifdef HAVE_ELEMENTARY_X
2012-05-03 15:42:15 -07:00
_elm_win_xwindow_get ( sd ) ;
2012-06-06 01:25:12 -07:00
if ( sd - > x . xwin )
2012-11-25 22:32:53 -08:00
{
* ret = ecore_x_e_virtual_keyboard_get ( sd - > x . xwin ) ;
return ;
}
2010-10-27 07:38:37 -07:00
# endif
2012-11-25 22:32:53 -08:00
* ret = EINA_FALSE ;
2010-10-27 07:38:37 -07:00
}
2012-02-24 21:14:19 -08:00
EAPI void
2012-05-03 15:42:15 -07:00
elm_win_indicator_mode_set ( Evas_Object * obj ,
2012-11-25 22:32:53 -08:00
Elm_Win_Indicator_Mode mode )
2012-02-24 21:14:19 -08:00
{
2012-05-03 15:42:15 -07:00
ELM_WIN_CHECK ( obj ) ;
2012-11-25 22:32:53 -08:00
eo_do ( obj , elm_obj_win_indicator_mode_set ( mode ) ) ;
}
static void
_indicator_mode_set ( Eo * obj EINA_UNUSED , void * _pd , va_list * list )
{
Elm_Win_Indicator_Mode mode = va_arg ( * list , Elm_Win_Indicator_Mode ) ;
Elm_Win_Smart_Data * sd = _pd ;
2012-05-03 15:42:15 -07:00
if ( mode = = sd - > indmode ) return ;
2012-02-24 21:14:19 -08:00
# ifdef HAVE_ELEMENTARY_X
2012-05-03 15:42:15 -07:00
_elm_win_xwindow_get ( sd ) ;
2012-02-24 21:14:19 -08:00
# endif
2012-05-03 15:42:15 -07:00
sd - > indmode = mode ;
2012-02-24 21:14:19 -08:00
# ifdef HAVE_ELEMENTARY_X
2012-06-06 01:25:12 -07:00
if ( sd - > x . xwin )
2012-02-24 21:14:19 -08:00
{
2012-05-03 15:42:15 -07:00
if ( sd - > indmode = = ELM_WIN_INDICATOR_SHOW )
2012-02-24 21:14:19 -08:00
ecore_x_e_illume_indicator_state_set
2012-06-06 01:25:12 -07:00
( sd - > x . xwin , ECORE_X_ILLUME_INDICATOR_STATE_ON ) ;
2012-05-03 15:42:15 -07:00
else if ( sd - > indmode = = ELM_WIN_INDICATOR_HIDE )
2012-02-24 21:14:19 -08:00
ecore_x_e_illume_indicator_state_set
2012-06-06 01:25:12 -07:00
( sd - > x . xwin , ECORE_X_ILLUME_INDICATOR_STATE_OFF ) ;
2012-02-24 21:14:19 -08:00
}
# endif
2012-09-02 23:55:07 -07:00
evas_object_smart_callback_call ( obj , SIG_INDICATOR_PROP_CHANGED , NULL ) ;
2012-02-24 21:14:19 -08:00
}
EAPI Elm_Win_Indicator_Mode
elm_win_indicator_mode_get ( const Evas_Object * obj )
{
2012-05-03 15:42:15 -07:00
ELM_WIN_CHECK ( obj ) ELM_WIN_INDICATOR_UNKNOWN ;
2012-11-25 22:32:53 -08:00
Elm_Win_Indicator_Mode ret = ELM_WIN_INDICATOR_UNKNOWN ;
eo_do ( ( Eo * ) obj , elm_obj_win_indicator_mode_get ( & ret ) ) ;
return ret ;
}
2012-05-03 15:42:15 -07:00
2012-11-25 22:32:53 -08:00
static void
_indicator_mode_get ( Eo * obj EINA_UNUSED , void * _pd , va_list * list )
{
Elm_Win_Indicator_Mode * ret = va_arg ( * list , Elm_Win_Indicator_Mode * ) ;
Elm_Win_Smart_Data * sd = _pd ;
* ret = sd - > indmode ;
2012-02-24 21:14:19 -08:00
}
2012-03-07 06:27:36 -08:00
EAPI void
2012-05-03 15:42:15 -07:00
elm_win_indicator_opacity_set ( Evas_Object * obj ,
Elm_Win_Indicator_Opacity_Mode mode )
{
ELM_WIN_CHECK ( obj ) ;
2012-11-25 22:32:53 -08:00
eo_do ( obj , elm_obj_win_indicator_opacity_set ( mode ) ) ;
}
static void
_indicator_opacity_set ( Eo * obj EINA_UNUSED , void * _pd , va_list * list )
{
Elm_Win_Indicator_Opacity_Mode mode = va_arg ( * list , Elm_Win_Indicator_Opacity_Mode ) ;
Elm_Win_Smart_Data * sd = _pd ;
2012-05-03 15:42:15 -07:00
if ( mode = = sd - > ind_o_mode ) return ;
sd - > ind_o_mode = mode ;
2012-03-07 06:27:36 -08:00
# ifdef HAVE_ELEMENTARY_X
2012-05-03 15:42:15 -07:00
_elm_win_xwindow_get ( sd ) ;
2012-06-06 01:25:12 -07:00
if ( sd - > x . xwin )
2012-03-07 06:27:36 -08:00
{
2012-05-03 15:42:15 -07:00
if ( sd - > ind_o_mode = = ELM_WIN_INDICATOR_OPAQUE )
2012-03-07 06:27:36 -08:00
ecore_x_e_illume_indicator_opacity_set
2012-06-06 01:25:12 -07:00
( sd - > x . xwin , ECORE_X_ILLUME_INDICATOR_OPAQUE ) ;
2012-05-03 15:42:15 -07:00
else if ( sd - > ind_o_mode = = ELM_WIN_INDICATOR_TRANSLUCENT )
2012-03-07 06:27:36 -08:00
ecore_x_e_illume_indicator_opacity_set
2012-06-06 01:25:12 -07:00
( sd - > x . xwin , ECORE_X_ILLUME_INDICATOR_TRANSLUCENT ) ;
2012-05-03 15:42:15 -07:00
else if ( sd - > ind_o_mode = = ELM_WIN_INDICATOR_TRANSPARENT )
2012-03-07 06:27:36 -08:00
ecore_x_e_illume_indicator_opacity_set
2012-06-06 01:25:12 -07:00
( sd - > x . xwin , ECORE_X_ILLUME_INDICATOR_TRANSPARENT ) ;
2012-03-07 06:27:36 -08:00
}
# endif
2012-09-02 23:55:07 -07:00
evas_object_smart_callback_call ( obj , SIG_INDICATOR_PROP_CHANGED , NULL ) ;
2012-03-07 06:27:36 -08:00
}
EAPI Elm_Win_Indicator_Opacity_Mode
elm_win_indicator_opacity_get ( const Evas_Object * obj )
{
2012-05-03 15:42:15 -07:00
ELM_WIN_CHECK ( obj ) ELM_WIN_INDICATOR_OPACITY_UNKNOWN ;
2012-11-25 22:32:53 -08:00
Elm_Win_Indicator_Opacity_Mode ret = ELM_WIN_INDICATOR_OPACITY_UNKNOWN ;
eo_do ( ( Eo * ) obj , elm_obj_win_indicator_opacity_get ( & ret ) ) ;
return ret ;
}
2012-05-03 15:42:15 -07:00
2012-11-25 22:32:53 -08:00
static void
_indicator_opacity_get ( Eo * obj EINA_UNUSED , void * _pd , va_list * list )
{
Elm_Win_Indicator_Opacity_Mode * ret = va_arg ( * list , Elm_Win_Indicator_Opacity_Mode * ) ;
Elm_Win_Smart_Data * sd = _pd ;
* ret = sd - > ind_o_mode ;
2012-03-07 06:27:36 -08:00
}
2009-12-01 03:03:14 -08:00
EAPI void
2012-05-03 15:42:15 -07:00
elm_win_screen_position_get ( const Evas_Object * obj ,
int * x ,
int * y )
2009-12-01 03:03:14 -08:00
{
2012-05-03 15:42:15 -07:00
ELM_WIN_CHECK ( obj ) ;
2012-11-25 22:32:53 -08:00
eo_do ( ( Eo * ) obj , elm_obj_win_screen_position_get ( x , y ) ) ;
}
static void
_screen_position_get ( Eo * obj EINA_UNUSED , void * _pd , va_list * list )
{
int * x = va_arg ( * list , int * ) ;
int * y = va_arg ( * list , int * ) ;
Elm_Win_Smart_Data * sd = _pd ;
2012-05-03 15:42:15 -07:00
if ( x ) * x = sd - > screen . x ;
if ( y ) * y = sd - > screen . y ;
2009-12-01 03:03:14 -08:00
}
2011-11-21 11:41:53 -08:00
EAPI Eina_Bool
elm_win_focus_get ( const Evas_Object * obj )
{
2012-05-03 15:42:15 -07:00
ELM_WIN_CHECK ( obj ) EINA_FALSE ;
2012-11-25 22:32:53 -08:00
Eina_Bool ret = EINA_FALSE ;
eo_do ( ( Eo * ) obj , elm_obj_win_focus_get ( & ret ) ) ;
return ret ;
}
2012-05-03 15:42:15 -07:00
2012-11-25 22:32:53 -08:00
static void
_focus_get ( Eo * obj EINA_UNUSED , void * _pd , va_list * list )
{
Eina_Bool * ret = va_arg ( * list , Eina_Bool * ) ;
Elm_Win_Smart_Data * sd = _pd ;
* ret = ecore_evas_focus_get ( sd - > ee ) ;
2011-11-21 11:41:53 -08:00
}
2011-12-03 14:51:12 -08:00
EAPI void
2012-05-03 15:42:15 -07:00
elm_win_screen_constrain_set ( Evas_Object * obj ,
Eina_Bool constrain )
2011-12-03 14:51:12 -08:00
{
2012-05-03 15:42:15 -07:00
ELM_WIN_CHECK ( obj ) ;
2012-11-25 22:32:53 -08:00
eo_do ( obj , elm_obj_win_screen_constrain_set ( constrain ) ) ;
}
2012-05-03 15:42:15 -07:00
2012-11-25 22:32:53 -08:00
static void
_screen_constrain_set ( Eo * obj EINA_UNUSED , void * _pd , va_list * list )
{
Eina_Bool constrain = va_arg ( * list , int ) ;
Elm_Win_Smart_Data * sd = _pd ;
2012-05-03 15:42:15 -07:00
sd - > constrain = ! ! constrain ;
2011-12-03 14:51:12 -08:00
}
EAPI Eina_Bool
elm_win_screen_constrain_get ( Evas_Object * obj )
{
2012-05-03 15:42:15 -07:00
ELM_WIN_CHECK ( obj ) EINA_FALSE ;
2012-11-25 22:32:53 -08:00
Eina_Bool ret = EINA_FALSE ;
eo_do ( obj , elm_obj_win_screen_constrain_get ( & ret ) ) ;
return ret ;
}
2012-05-03 15:42:15 -07:00
2012-11-25 22:32:53 -08:00
static void
_screen_constrain_get ( Eo * obj EINA_UNUSED , void * _pd , va_list * list )
{
Eina_Bool * ret = va_arg ( * list , Eina_Bool * ) ;
Elm_Win_Smart_Data * sd = _pd ;
* ret = sd - > constrain ;
2011-12-03 14:51:12 -08:00
}
2011-11-21 11:51:24 -08:00
EAPI void
2012-05-03 15:42:15 -07:00
elm_win_screen_size_get ( const Evas_Object * obj ,
int * x ,
int * y ,
int * w ,
int * h )
2011-11-21 11:51:24 -08:00
{
2012-05-03 15:42:15 -07:00
ELM_WIN_CHECK ( obj ) ;
2012-11-25 22:32:53 -08:00
eo_do ( ( Eo * ) obj , elm_obj_win_screen_size_get ( x , y , w , h ) ) ;
}
static void
_screen_size_get ( Eo * obj EINA_UNUSED , void * _pd , va_list * list )
{
int * x = va_arg ( * list , int * ) ;
int * y = va_arg ( * list , int * ) ;
int * w = va_arg ( * list , int * ) ;
int * h = va_arg ( * list , int * ) ;
Elm_Win_Smart_Data * sd = _pd ;
2012-05-03 15:42:15 -07:00
ecore_evas_screen_geometry_get ( sd - > ee , x , y , w , h ) ;
2011-11-21 11:51:24 -08:00
}
2012-07-05 05:59:06 -07:00
EAPI void
elm_win_screen_dpi_get ( const Evas_Object * obj ,
2012-07-17 11:46:18 -07:00
int * xdpi ,
int * ydpi )
2012-07-05 05:59:06 -07:00
{
ELM_WIN_CHECK ( obj ) ;
2012-11-25 22:32:53 -08:00
eo_do ( ( Eo * ) obj , elm_obj_win_screen_dpi_get ( xdpi , ydpi ) ) ;
}
static void
_screen_dpi_get ( Eo * obj EINA_UNUSED , void * _pd , va_list * list )
{
int * xdpi = va_arg ( * list , int * ) ;
int * ydpi = va_arg ( * list , int * ) ;
Elm_Win_Smart_Data * sd = _pd ;
2012-07-05 05:59:06 -07:00
ecore_evas_screen_dpi_get ( sd - > ee , xdpi , ydpi ) ;
}
2010-02-08 19:04:18 -08:00
EAPI void
2012-05-03 15:42:15 -07:00
elm_win_conformant_set ( Evas_Object * obj ,
Eina_Bool conformant )
2010-01-14 21:17:54 -08:00
{
2012-05-03 15:42:15 -07:00
ELM_WIN_CHECK ( obj ) ;
2012-11-25 22:32:53 -08:00
eo_do ( obj , elm_obj_win_conformant_set ( conformant ) ) ;
}
static void
_conformant_set ( Eo * obj EINA_UNUSED , void * _pd , va_list * list )
{
Eina_Bool conformant = va_arg ( * list , int ) ;
Elm_Win_Smart_Data * sd = _pd ;
2012-05-03 15:42:15 -07:00
2010-01-14 21:17:54 -08:00
# ifdef HAVE_ELEMENTARY_X
2012-05-03 15:42:15 -07:00
_elm_win_xwindow_get ( sd ) ;
2012-06-06 01:25:12 -07:00
if ( sd - > x . xwin )
ecore_x_e_illume_conformant_set ( sd - > x . xwin , conformant ) ;
2011-11-20 06:00:41 -08:00
# else
2012-05-03 15:42:15 -07:00
( void ) conformant ;
2010-01-14 21:17:54 -08:00
# endif
}
2010-02-08 19:04:18 -08:00
EAPI Eina_Bool
2010-03-23 20:06:00 -07:00
elm_win_conformant_get ( const Evas_Object * obj )
2010-01-14 21:17:54 -08:00
{
2012-05-03 15:42:15 -07:00
ELM_WIN_CHECK ( obj ) EINA_FALSE ;
2012-11-25 22:32:53 -08:00
Eina_Bool ret = EINA_FALSE ;
eo_do ( ( Eo * ) obj , elm_obj_win_conformant_get ( & ret ) ) ;
return ret ;
}
static void
_conformant_get ( Eo * obj EINA_UNUSED , void * _pd , va_list * list )
{
Eina_Bool * ret = va_arg ( * list , Eina_Bool * ) ;
Elm_Win_Smart_Data * sd = _pd ;
* ret = EINA_FALSE ;
2012-05-03 15:42:15 -07:00
2010-01-14 21:17:54 -08:00
# ifdef HAVE_ELEMENTARY_X
2012-05-03 15:42:15 -07:00
_elm_win_xwindow_get ( sd ) ;
2012-06-06 01:25:12 -07:00
if ( sd - > x . xwin )
2012-11-25 22:32:53 -08:00
* ret = ecore_x_e_illume_conformant_get ( sd - > x . xwin ) ;
2010-01-14 21:17:54 -08:00
# endif
}
2010-02-08 19:04:18 -08:00
EAPI void
2012-05-03 15:42:15 -07:00
elm_win_quickpanel_set ( Evas_Object * obj ,
Eina_Bool quickpanel )
2010-01-24 02:12:57 -08:00
{
2012-05-03 15:42:15 -07:00
ELM_WIN_CHECK ( obj ) ;
2012-11-25 22:32:53 -08:00
eo_do ( obj , elm_obj_win_quickpanel_set ( quickpanel ) ) ;
}
static void
_quickpanel_set ( Eo * obj EINA_UNUSED , void * _pd , va_list * list )
{
Eina_Bool quickpanel = va_arg ( * list , int ) ;
Elm_Win_Smart_Data * sd = _pd ;
2010-01-24 02:12:57 -08:00
# ifdef HAVE_ELEMENTARY_X
2012-05-03 15:42:15 -07:00
_elm_win_xwindow_get ( sd ) ;
2012-06-06 01:25:12 -07:00
if ( sd - > x . xwin )
2010-01-24 12:05:09 -08:00
{
2012-06-06 01:25:12 -07:00
ecore_x_e_illume_quickpanel_set ( sd - > x . xwin , quickpanel ) ;
2010-02-08 19:04:18 -08:00
if ( quickpanel )
2010-01-24 12:05:09 -08:00
{
Ecore_X_Window_State states [ 2 ] ;
states [ 0 ] = ECORE_X_WINDOW_STATE_SKIP_TASKBAR ;
states [ 1 ] = ECORE_X_WINDOW_STATE_SKIP_PAGER ;
2012-06-06 01:25:12 -07:00
ecore_x_netwm_window_state_set ( sd - > x . xwin , states , 2 ) ;
ecore_x_icccm_hints_set ( sd - > x . xwin , 0 , 0 , 0 , 0 , 0 , 0 , 0 ) ;
2010-01-24 12:05:09 -08:00
}
}
2011-11-20 06:00:41 -08:00
# else
2012-05-03 15:42:15 -07:00
( void ) quickpanel ;
2010-01-24 02:12:57 -08:00
# endif
}
2010-02-08 19:04:18 -08:00
EAPI Eina_Bool
2010-03-23 20:06:00 -07:00
elm_win_quickpanel_get ( const Evas_Object * obj )
2010-01-24 02:12:57 -08:00
{
2012-05-03 15:42:15 -07:00
ELM_WIN_CHECK ( obj ) EINA_FALSE ;
2012-11-25 22:32:53 -08:00
Eina_Bool ret = EINA_FALSE ;
eo_do ( ( Eo * ) obj , elm_obj_win_quickpanel_get ( & ret ) ) ;
return ret ;
}
static void
_quickpanel_get ( Eo * obj EINA_UNUSED , void * _pd , va_list * list )
{
Eina_Bool * ret = va_arg ( * list , Eina_Bool * ) ;
Elm_Win_Smart_Data * sd = _pd ;
* ret = EINA_FALSE ;
2012-05-03 15:42:15 -07:00
2010-01-24 02:12:57 -08:00
# ifdef HAVE_ELEMENTARY_X
2012-05-03 15:42:15 -07:00
_elm_win_xwindow_get ( sd ) ;
2012-06-06 01:25:12 -07:00
if ( sd - > x . xwin )
2012-11-25 22:32:53 -08:00
* ret = ecore_x_e_illume_quickpanel_get ( sd - > x . xwin ) ;
2010-01-24 02:12:57 -08:00
# endif
}
2010-02-08 19:04:18 -08:00
EAPI void
2012-05-03 15:42:15 -07:00
elm_win_quickpanel_priority_major_set ( Evas_Object * obj ,
int priority )
2010-01-24 02:21:54 -08:00
{
2012-05-03 15:42:15 -07:00
ELM_WIN_CHECK ( obj ) ;
2012-11-25 22:32:53 -08:00
eo_do ( obj , elm_obj_win_quickpanel_priority_major_set ( priority ) ) ;
}
static void
_quickpanel_priority_major_set ( Eo * obj EINA_UNUSED , void * _pd , va_list * list )
{
int priority = va_arg ( * list , int ) ;
Elm_Win_Smart_Data * sd = _pd ;
2012-05-03 15:42:15 -07:00
2010-01-24 02:21:54 -08:00
# ifdef HAVE_ELEMENTARY_X
2012-05-03 15:42:15 -07:00
_elm_win_xwindow_get ( sd ) ;
2012-06-06 01:25:12 -07:00
if ( sd - > x . xwin )
ecore_x_e_illume_quickpanel_priority_major_set ( sd - > x . xwin , priority ) ;
2011-11-20 06:00:41 -08:00
# else
2012-05-03 15:42:15 -07:00
( void ) priority ;
2010-01-24 02:21:54 -08:00
# endif
}
2010-02-08 19:04:18 -08:00
EAPI int
2010-03-23 20:06:00 -07:00
elm_win_quickpanel_priority_major_get ( const Evas_Object * obj )
2010-01-24 02:21:54 -08:00
{
2012-05-03 15:42:15 -07:00
ELM_WIN_CHECK ( obj ) - 1 ;
2012-11-25 22:32:53 -08:00
int ret = - 1 ;
eo_do ( ( Eo * ) obj , elm_obj_win_quickpanel_priority_major_get ( & ret ) ) ;
return ret ;
}
static void
_quickpanel_priority_major_get ( Eo * obj EINA_UNUSED , void * _pd , va_list * list )
{
int * ret = va_arg ( * list , int * ) ;
Elm_Win_Smart_Data * sd = _pd ;
* ret = - 1 ;
2012-05-03 15:42:15 -07:00
2010-01-24 02:21:54 -08:00
# ifdef HAVE_ELEMENTARY_X
2012-05-03 15:42:15 -07:00
_elm_win_xwindow_get ( sd ) ;
2012-06-06 01:25:12 -07:00
if ( sd - > x . xwin )
2012-11-25 22:32:53 -08:00
* ret = ecore_x_e_illume_quickpanel_priority_major_get ( sd - > x . xwin ) ;
2010-01-24 02:21:54 -08:00
# endif
}
2010-02-08 19:04:18 -08:00
EAPI void
2012-05-03 15:42:15 -07:00
elm_win_quickpanel_priority_minor_set ( Evas_Object * obj ,
int priority )
2010-01-24 02:21:54 -08:00
{
2012-05-03 15:42:15 -07:00
ELM_WIN_CHECK ( obj ) ;
2012-11-25 22:32:53 -08:00
eo_do ( obj , elm_obj_win_quickpanel_priority_minor_set ( priority ) ) ;
}
static void
_quickpanel_priority_minor_set ( Eo * obj EINA_UNUSED , void * _pd , va_list * list )
{
int priority = va_arg ( * list , int ) ;
Elm_Win_Smart_Data * sd = _pd ;
2012-05-03 15:42:15 -07:00
2010-01-24 02:21:54 -08:00
# ifdef HAVE_ELEMENTARY_X
2012-05-03 15:42:15 -07:00
_elm_win_xwindow_get ( sd ) ;
2012-06-06 01:25:12 -07:00
if ( sd - > x . xwin )
ecore_x_e_illume_quickpanel_priority_minor_set ( sd - > x . xwin , priority ) ;
2011-11-20 06:00:41 -08:00
# else
2012-05-03 15:42:15 -07:00
( void ) priority ;
2010-01-24 02:21:54 -08:00
# endif
}
2010-02-08 19:04:18 -08:00
EAPI int
2010-03-23 20:06:00 -07:00
elm_win_quickpanel_priority_minor_get ( const Evas_Object * obj )
2010-01-24 02:21:54 -08:00
{
2012-05-03 15:42:15 -07:00
ELM_WIN_CHECK ( obj ) - 1 ;
2012-11-25 22:32:53 -08:00
int ret = - 1 ;
eo_do ( ( Eo * ) obj , elm_obj_win_quickpanel_priority_minor_get ( & ret ) ) ;
return ret ;
}
static void
_quickpanel_priority_minor_get ( Eo * obj EINA_UNUSED , void * _pd , va_list * list )
{
int * ret = va_arg ( * list , int * ) ;
Elm_Win_Smart_Data * sd = _pd ;
* ret = - 1 ;
2012-05-03 15:42:15 -07:00
2010-01-24 02:21:54 -08:00
# ifdef HAVE_ELEMENTARY_X
2012-05-03 15:42:15 -07:00
_elm_win_xwindow_get ( sd ) ;
2012-06-06 01:25:12 -07:00
if ( sd - > x . xwin )
2012-11-25 22:32:53 -08:00
* ret = ecore_x_e_illume_quickpanel_priority_minor_get ( sd - > x . xwin ) ;
2010-01-24 02:21:54 -08:00
# endif
}
2010-02-08 19:04:18 -08:00
EAPI void
2012-05-03 15:42:15 -07:00
elm_win_quickpanel_zone_set ( Evas_Object * obj ,
int zone )
2010-01-24 12:05:09 -08:00
{
2012-05-03 15:42:15 -07:00
ELM_WIN_CHECK ( obj ) ;
2012-11-25 22:32:53 -08:00
eo_do ( obj , elm_obj_win_quickpanel_zone_set ( zone ) ) ;
}
static void
_quickpanel_zone_set ( Eo * obj EINA_UNUSED , void * _pd , va_list * list )
{
int zone = va_arg ( * list , int ) ;
Elm_Win_Smart_Data * sd = _pd ;
2012-05-03 15:42:15 -07:00
2010-01-24 12:05:09 -08:00
# ifdef HAVE_ELEMENTARY_X
2012-05-03 15:42:15 -07:00
_elm_win_xwindow_get ( sd ) ;
2012-06-06 01:25:12 -07:00
if ( sd - > x . xwin )
ecore_x_e_illume_quickpanel_zone_set ( sd - > x . xwin , zone ) ;
2011-11-20 06:00:41 -08:00
# else
2012-05-03 15:42:15 -07:00
( void ) zone ;
2010-01-24 12:05:09 -08:00
# endif
}
2010-10-27 07:38:37 -07:00
EAPI int
elm_win_quickpanel_zone_get ( const Evas_Object * obj )
{
2012-05-03 15:42:15 -07:00
ELM_WIN_CHECK ( obj ) 0 ;
2012-11-25 22:32:53 -08:00
int ret = 0 ;
eo_do ( ( Eo * ) obj , elm_obj_win_quickpanel_zone_get ( & ret ) ) ;
return ret ;
}
static void
_quickpanel_zone_get ( Eo * obj EINA_UNUSED , void * _pd , va_list * list )
{
int * ret = va_arg ( * list , int * ) ;
Elm_Win_Smart_Data * sd = _pd ;
* ret = 0 ;
2012-05-03 15:42:15 -07:00
2010-10-27 07:38:37 -07:00
# ifdef HAVE_ELEMENTARY_X
2012-05-03 15:42:15 -07:00
_elm_win_xwindow_get ( sd ) ;
2012-06-06 01:25:12 -07:00
if ( sd - > x . xwin )
2012-11-25 22:32:53 -08:00
* ret = ecore_x_e_illume_quickpanel_zone_get ( sd - > x . xwin ) ;
2010-10-27 07:38:37 -07:00
# endif
}
2011-02-17 02:56:32 -08:00
EAPI void
2012-05-03 15:42:15 -07:00
elm_win_prop_focus_skip_set ( Evas_Object * obj ,
Eina_Bool skip )
2011-02-17 02:56:32 -08:00
{
2012-05-03 15:42:15 -07:00
ELM_WIN_CHECK ( obj ) ;
2012-11-25 22:32:53 -08:00
eo_do ( obj , elm_obj_win_prop_focus_skip_set ( skip ) ) ;
}
static void
_prop_focus_skip_set ( Eo * obj EINA_UNUSED , void * _pd , va_list * list )
{
Eina_Bool skip = va_arg ( * list , int ) ;
Elm_Win_Smart_Data * sd = _pd ;
2012-05-03 15:42:15 -07:00
sd - > skip_focus = skip ;
2012-07-18 21:35:50 -07:00
TRAP ( sd , focus_skip_set , skip ) ;
2011-02-17 02:56:32 -08:00
}
EAPI void
2012-05-03 15:42:15 -07:00
elm_win_illume_command_send ( Evas_Object * obj ,
Elm_Illume_Command command ,
2012-11-25 22:32:53 -08:00
void * params )
2011-02-17 02:56:32 -08:00
{
2012-05-03 15:42:15 -07:00
ELM_WIN_CHECK ( obj ) ;
2012-11-25 22:32:53 -08:00
eo_do ( obj , elm_obj_win_illume_command_send ( command , params ) ) ;
}
static void
_illume_command_send ( Eo * obj EINA_UNUSED , void * _pd , va_list * list )
{
Elm_Illume_Command command = va_arg ( * list , Elm_Illume_Command ) ;
void * params = va_arg ( * list , void * ) ;
( void ) params ;
Elm_Win_Smart_Data * sd = _pd ;
2012-05-03 15:42:15 -07:00
2011-02-17 02:56:32 -08:00
# ifdef HAVE_ELEMENTARY_X
2012-05-03 15:42:15 -07:00
_elm_win_xwindow_get ( sd ) ;
2012-06-06 01:25:12 -07:00
if ( sd - > x . xwin )
2011-02-17 02:56:32 -08:00
{
switch ( command )
{
case ELM_ILLUME_COMMAND_FOCUS_BACK :
2012-06-06 01:25:12 -07:00
ecore_x_e_illume_focus_back_send ( sd - > x . xwin ) ;
2012-05-03 15:42:15 -07:00
break ;
2011-02-17 02:56:32 -08:00
case ELM_ILLUME_COMMAND_FOCUS_FORWARD :
2012-06-06 01:25:12 -07:00
ecore_x_e_illume_focus_forward_send ( sd - > x . xwin ) ;
2012-05-03 15:42:15 -07:00
break ;
2011-02-17 02:56:32 -08:00
case ELM_ILLUME_COMMAND_FOCUS_HOME :
2012-06-06 01:25:12 -07:00
ecore_x_e_illume_focus_home_send ( sd - > x . xwin ) ;
2012-05-03 15:42:15 -07:00
break ;
2011-02-17 02:56:32 -08:00
case ELM_ILLUME_COMMAND_CLOSE :
2012-06-06 01:25:12 -07:00
ecore_x_e_illume_close_send ( sd - > x . xwin ) ;
2012-05-03 15:42:15 -07:00
break ;
2011-02-17 02:56:32 -08:00
default :
2012-05-03 15:42:15 -07:00
break ;
2011-02-17 02:56:32 -08:00
}
}
2011-11-20 06:00:41 -08:00
# else
2012-05-03 15:42:15 -07:00
( void ) command ;
2011-02-17 02:56:32 -08:00
# endif
}
2011-04-14 03:48:43 -07:00
EAPI Evas_Object *
elm_win_inlined_image_object_get ( Evas_Object * obj )
{
2012-05-03 15:42:15 -07:00
ELM_WIN_CHECK ( obj ) NULL ;
2012-11-25 22:32:53 -08:00
Evas_Object * ret = NULL ;
eo_do ( obj , elm_obj_win_inlined_image_object_get ( & ret ) ) ;
return ret ;
}
2012-05-03 15:42:15 -07:00
2012-11-25 22:32:53 -08:00
static void
_inlined_image_object_get ( Eo * obj EINA_UNUSED , void * _pd , va_list * list )
{
Evas_Object * * ret = va_arg ( * list , Evas_Object * * ) ;
Elm_Win_Smart_Data * sd = _pd ;
* ret = sd - > img_obj ;
2011-04-14 03:48:43 -07:00
}
Begins highlight on focused object.
There's still work to do here, particularly in the theme, but it has
something nice and fun to see the code working.
The idea behind this:
Window tracks focused object and sends the highlight object(s) to it. These
are simple edje objects, one on top, one below the focused widget for nice
effects. Widgets can choose to ignore the highlight and this will be sent to
the parent object, if it doesn't ignore it as well.
About the bottom object, it doesn't work now. For the most part, focused
widget will always be a member of some smart object, so stacking won't work
and the desired effect is nowhere to be seen. This will be worked out later.
To be done now:
- Let the theme for a widget define its own highlight, disabling if needed
the standard one for those objects.
- Needed base in code to allow animations when switching focus. All in theme.
- Properly test all widgets and fix some things that will most likely work
in weird ways, given the nature of Evas/Edje and how Elementary makes use
of them.
- Forgot the rest, stay tuned, test, report, give ideas, plant a tree.
Work started by glima, continued with some refactors by me when he
decided he needed vacations.
SVN revision: 52524
2010-09-20 15:18:58 -07:00
EAPI void
2012-05-03 15:42:15 -07:00
elm_win_focus_highlight_enabled_set ( Evas_Object * obj ,
Eina_Bool enabled )
Begins highlight on focused object.
There's still work to do here, particularly in the theme, but it has
something nice and fun to see the code working.
The idea behind this:
Window tracks focused object and sends the highlight object(s) to it. These
are simple edje objects, one on top, one below the focused widget for nice
effects. Widgets can choose to ignore the highlight and this will be sent to
the parent object, if it doesn't ignore it as well.
About the bottom object, it doesn't work now. For the most part, focused
widget will always be a member of some smart object, so stacking won't work
and the desired effect is nowhere to be seen. This will be worked out later.
To be done now:
- Let the theme for a widget define its own highlight, disabling if needed
the standard one for those objects.
- Needed base in code to allow animations when switching focus. All in theme.
- Properly test all widgets and fix some things that will most likely work
in weird ways, given the nature of Evas/Edje and how Elementary makes use
of them.
- Forgot the rest, stay tuned, test, report, give ideas, plant a tree.
Work started by glima, continued with some refactors by me when he
decided he needed vacations.
SVN revision: 52524
2010-09-20 15:18:58 -07:00
{
2012-05-03 15:42:15 -07:00
ELM_WIN_CHECK ( obj ) ;
2012-11-25 22:32:53 -08:00
eo_do ( obj , elm_obj_win_focus_highlight_enabled_set ( enabled ) ) ;
}
static void
_focus_highlight_enabled_set ( Eo * obj EINA_UNUSED , void * _pd , va_list * list )
{
Eina_Bool enabled = va_arg ( * list , int ) ;
Elm_Win_Smart_Data * sd = _pd ;
Begins highlight on focused object.
There's still work to do here, particularly in the theme, but it has
something nice and fun to see the code working.
The idea behind this:
Window tracks focused object and sends the highlight object(s) to it. These
are simple edje objects, one on top, one below the focused widget for nice
effects. Widgets can choose to ignore the highlight and this will be sent to
the parent object, if it doesn't ignore it as well.
About the bottom object, it doesn't work now. For the most part, focused
widget will always be a member of some smart object, so stacking won't work
and the desired effect is nowhere to be seen. This will be worked out later.
To be done now:
- Let the theme for a widget define its own highlight, disabling if needed
the standard one for those objects.
- Needed base in code to allow animations when switching focus. All in theme.
- Properly test all widgets and fix some things that will most likely work
in weird ways, given the nature of Evas/Edje and how Elementary makes use
of them.
- Forgot the rest, stay tuned, test, report, give ideas, plant a tree.
Work started by glima, continued with some refactors by me when he
decided he needed vacations.
SVN revision: 52524
2010-09-20 15:18:58 -07:00
enabled = ! ! enabled ;
2012-05-03 15:42:15 -07:00
if ( sd - > focus_highlight . enabled = = enabled )
Begins highlight on focused object.
There's still work to do here, particularly in the theme, but it has
something nice and fun to see the code working.
The idea behind this:
Window tracks focused object and sends the highlight object(s) to it. These
are simple edje objects, one on top, one below the focused widget for nice
effects. Widgets can choose to ignore the highlight and this will be sent to
the parent object, if it doesn't ignore it as well.
About the bottom object, it doesn't work now. For the most part, focused
widget will always be a member of some smart object, so stacking won't work
and the desired effect is nowhere to be seen. This will be worked out later.
To be done now:
- Let the theme for a widget define its own highlight, disabling if needed
the standard one for those objects.
- Needed base in code to allow animations when switching focus. All in theme.
- Properly test all widgets and fix some things that will most likely work
in weird ways, given the nature of Evas/Edje and how Elementary makes use
of them.
- Forgot the rest, stay tuned, test, report, give ideas, plant a tree.
Work started by glima, continued with some refactors by me when he
decided he needed vacations.
SVN revision: 52524
2010-09-20 15:18:58 -07:00
return ;
2012-05-03 15:42:15 -07:00
sd - > focus_highlight . enabled = enabled ;
Begins highlight on focused object.
There's still work to do here, particularly in the theme, but it has
something nice and fun to see the code working.
The idea behind this:
Window tracks focused object and sends the highlight object(s) to it. These
are simple edje objects, one on top, one below the focused widget for nice
effects. Widgets can choose to ignore the highlight and this will be sent to
the parent object, if it doesn't ignore it as well.
About the bottom object, it doesn't work now. For the most part, focused
widget will always be a member of some smart object, so stacking won't work
and the desired effect is nowhere to be seen. This will be worked out later.
To be done now:
- Let the theme for a widget define its own highlight, disabling if needed
the standard one for those objects.
- Needed base in code to allow animations when switching focus. All in theme.
- Properly test all widgets and fix some things that will most likely work
in weird ways, given the nature of Evas/Edje and how Elementary makes use
of them.
- Forgot the rest, stay tuned, test, report, give ideas, plant a tree.
Work started by glima, continued with some refactors by me when he
decided he needed vacations.
SVN revision: 52524
2010-09-20 15:18:58 -07:00
2012-05-03 15:42:15 -07:00
if ( sd - > focus_highlight . enabled )
_elm_win_focus_highlight_init ( sd ) ;
Begins highlight on focused object.
There's still work to do here, particularly in the theme, but it has
something nice and fun to see the code working.
The idea behind this:
Window tracks focused object and sends the highlight object(s) to it. These
are simple edje objects, one on top, one below the focused widget for nice
effects. Widgets can choose to ignore the highlight and this will be sent to
the parent object, if it doesn't ignore it as well.
About the bottom object, it doesn't work now. For the most part, focused
widget will always be a member of some smart object, so stacking won't work
and the desired effect is nowhere to be seen. This will be worked out later.
To be done now:
- Let the theme for a widget define its own highlight, disabling if needed
the standard one for those objects.
- Needed base in code to allow animations when switching focus. All in theme.
- Properly test all widgets and fix some things that will most likely work
in weird ways, given the nature of Evas/Edje and how Elementary makes use
of them.
- Forgot the rest, stay tuned, test, report, give ideas, plant a tree.
Work started by glima, continued with some refactors by me when he
decided he needed vacations.
SVN revision: 52524
2010-09-20 15:18:58 -07:00
else
2012-05-03 15:42:15 -07:00
_elm_win_focus_highlight_shutdown ( sd ) ;
Begins highlight on focused object.
There's still work to do here, particularly in the theme, but it has
something nice and fun to see the code working.
The idea behind this:
Window tracks focused object and sends the highlight object(s) to it. These
are simple edje objects, one on top, one below the focused widget for nice
effects. Widgets can choose to ignore the highlight and this will be sent to
the parent object, if it doesn't ignore it as well.
About the bottom object, it doesn't work now. For the most part, focused
widget will always be a member of some smart object, so stacking won't work
and the desired effect is nowhere to be seen. This will be worked out later.
To be done now:
- Let the theme for a widget define its own highlight, disabling if needed
the standard one for those objects.
- Needed base in code to allow animations when switching focus. All in theme.
- Properly test all widgets and fix some things that will most likely work
in weird ways, given the nature of Evas/Edje and how Elementary makes use
of them.
- Forgot the rest, stay tuned, test, report, give ideas, plant a tree.
Work started by glima, continued with some refactors by me when he
decided he needed vacations.
SVN revision: 52524
2010-09-20 15:18:58 -07:00
}
EAPI Eina_Bool
elm_win_focus_highlight_enabled_get ( const Evas_Object * obj )
{
2012-05-03 15:42:15 -07:00
ELM_WIN_CHECK ( obj ) EINA_FALSE ;
2012-11-25 22:32:53 -08:00
Eina_Bool ret = EINA_FALSE ;
eo_do ( ( Eo * ) obj , elm_obj_win_focus_highlight_enabled_get ( & ret ) ) ;
return ret ;
}
Begins highlight on focused object.
There's still work to do here, particularly in the theme, but it has
something nice and fun to see the code working.
The idea behind this:
Window tracks focused object and sends the highlight object(s) to it. These
are simple edje objects, one on top, one below the focused widget for nice
effects. Widgets can choose to ignore the highlight and this will be sent to
the parent object, if it doesn't ignore it as well.
About the bottom object, it doesn't work now. For the most part, focused
widget will always be a member of some smart object, so stacking won't work
and the desired effect is nowhere to be seen. This will be worked out later.
To be done now:
- Let the theme for a widget define its own highlight, disabling if needed
the standard one for those objects.
- Needed base in code to allow animations when switching focus. All in theme.
- Properly test all widgets and fix some things that will most likely work
in weird ways, given the nature of Evas/Edje and how Elementary makes use
of them.
- Forgot the rest, stay tuned, test, report, give ideas, plant a tree.
Work started by glima, continued with some refactors by me when he
decided he needed vacations.
SVN revision: 52524
2010-09-20 15:18:58 -07:00
2012-11-25 22:32:53 -08:00
static void
_focus_highlight_enabled_get ( Eo * obj EINA_UNUSED , void * _pd , va_list * list )
{
Eina_Bool * ret = va_arg ( * list , Eina_Bool * ) ;
Elm_Win_Smart_Data * sd = _pd ;
* ret = sd - > focus_highlight . enabled ;
Begins highlight on focused object.
There's still work to do here, particularly in the theme, but it has
something nice and fun to see the code working.
The idea behind this:
Window tracks focused object and sends the highlight object(s) to it. These
are simple edje objects, one on top, one below the focused widget for nice
effects. Widgets can choose to ignore the highlight and this will be sent to
the parent object, if it doesn't ignore it as well.
About the bottom object, it doesn't work now. For the most part, focused
widget will always be a member of some smart object, so stacking won't work
and the desired effect is nowhere to be seen. This will be worked out later.
To be done now:
- Let the theme for a widget define its own highlight, disabling if needed
the standard one for those objects.
- Needed base in code to allow animations when switching focus. All in theme.
- Properly test all widgets and fix some things that will most likely work
in weird ways, given the nature of Evas/Edje and how Elementary makes use
of them.
- Forgot the rest, stay tuned, test, report, give ideas, plant a tree.
Work started by glima, continued with some refactors by me when he
decided he needed vacations.
SVN revision: 52524
2010-09-20 15:18:58 -07:00
}
2010-10-04 10:34:35 -07:00
EAPI void
2012-05-03 15:42:15 -07:00
elm_win_focus_highlight_style_set ( Evas_Object * obj ,
const char * style )
2010-10-04 10:34:35 -07:00
{
2012-05-03 15:42:15 -07:00
ELM_WIN_CHECK ( obj ) ;
2012-11-25 22:32:53 -08:00
eo_do ( obj , elm_obj_win_focus_highlight_style_set ( style ) ) ;
}
static void
_focus_highlight_style_set ( Eo * obj EINA_UNUSED , void * _pd , va_list * list )
{
const char * style = va_arg ( * list , const char * ) ;
Elm_Win_Smart_Data * sd = _pd ;
2010-10-04 10:34:35 -07:00
2012-05-03 15:42:15 -07:00
eina_stringshare_replace ( & sd - > focus_highlight . style , style ) ;
2013-08-04 01:09:44 -07:00
sd - > focus_highlight . theme_changed = EINA_TRUE ;
2012-05-03 15:42:15 -07:00
_elm_win_focus_highlight_reconfigure_job_start ( sd ) ;
2010-10-04 10:34:35 -07:00
}
EAPI const char *
elm_win_focus_highlight_style_get ( const Evas_Object * obj )
{
2012-05-03 15:42:15 -07:00
ELM_WIN_CHECK ( obj ) NULL ;
2012-11-25 22:32:53 -08:00
const char * ret = NULL ;
eo_do ( ( Eo * ) obj , elm_obj_win_focus_highlight_style_get ( & ret ) ) ;
return ret ;
}
2012-05-03 15:42:15 -07:00
2012-11-25 22:32:53 -08:00
static void
_focus_highlight_style_get ( Eo * obj EINA_UNUSED , void * _pd , va_list * list )
{
const char * * ret = va_arg ( * list , const char * * ) ;
Elm_Win_Smart_Data * sd = _pd ;
* ret = sd - > focus_highlight . style ;
2012-05-03 15:42:15 -07:00
}
2013-08-11 02:58:28 -07:00
EAPI void
elm_win_focus_highlight_animate_set ( Evas_Object * obj ,
Eina_Bool animate )
{
ELM_WIN_CHECK ( obj ) ;
eo_do ( obj , elm_obj_win_focus_highlight_animate_set ( animate ) ) ;
}
static void
_focus_highlight_animate_set ( Eo * obj EINA_UNUSED , void * _pd , va_list * list )
{
Eina_Bool animate = va_arg ( * list , int ) ;
Elm_Win_Smart_Data * sd = _pd ;
const char * str ;
animate = ! ! animate ;
if ( sd - > focus_highlight . animate = = animate )
return ;
sd - > focus_highlight . animate = animate ;
if ( animate )
{
str = edje_object_data_get ( sd - > focus_highlight . fobj , " animate " ) ;
sd - > focus_highlight . animate_supported = ( ( str ) & & ( ! strcmp ( str , " on " ) ) ) ;
}
else
sd - > focus_highlight . animate_supported = EINA_FALSE ;
}
EAPI Eina_Bool
elm_win_focus_highlight_animate_get ( const Evas_Object * obj )
{
ELM_WIN_CHECK ( obj ) EINA_FALSE ;
Eina_Bool ret = EINA_FALSE ;
eo_do ( ( Eo * ) obj , elm_obj_win_focus_highlight_animate_get ( & ret ) ) ;
return ret ;
}
static void
_focus_highlight_animate_get ( Eo * obj EINA_UNUSED , void * _pd , va_list * list )
{
Eina_Bool * ret = va_arg ( * list , Eina_Bool * ) ;
Elm_Win_Smart_Data * sd = _pd ;
* ret = sd - > focus_highlight . animate ;
}
2012-05-03 15:42:15 -07:00
EAPI Eina_Bool
elm_win_socket_listen ( Evas_Object * obj ,
const char * svcname ,
int svcnum ,
Eina_Bool svcsys )
{
ELM_WIN_CHECK ( obj ) EINA_FALSE ;
2012-11-25 22:32:53 -08:00
Eina_Bool ret = EINA_FALSE ;
eo_do ( obj , elm_obj_win_socket_listen ( svcname , svcnum , svcsys , & ret ) ) ;
return ret ;
}
2010-10-04 10:34:35 -07:00
2012-11-25 22:32:53 -08:00
static void
_socket_listen ( Eo * obj EINA_UNUSED , void * _pd , va_list * list )
{
const char * svcname = va_arg ( * list , const char * ) ;
int svcnum = va_arg ( * list , int ) ;
Eina_Bool svcsys = va_arg ( * list , int ) ;
Eina_Bool * ret = va_arg ( * list , Eina_Bool * ) ;
Elm_Win_Smart_Data * sd = _pd ;
* ret = EINA_FALSE ;
if ( ! sd - > ee ) return ;
2012-05-03 15:42:15 -07:00
if ( ! ecore_evas_extn_socket_listen ( sd - > ee , svcname , svcnum , svcsys ) )
2012-11-25 22:32:53 -08:00
return ;
2010-10-04 10:34:35 -07:00
2012-11-25 22:32:53 -08:00
* ret = EINA_TRUE ;
2010-10-04 10:34:35 -07:00
}
2012-05-03 15:42:15 -07:00
/* windowing specific calls - shall we do this differently? */
2012-05-02 09:58:56 -07:00
2012-05-03 15:42:15 -07:00
EAPI Ecore_X_Window
elm_win_xwindow_get ( const Evas_Object * obj )
{
if ( ! obj ) return 0 ;
2012-05-02 09:58:56 -07:00
2012-11-25 22:32:53 -08:00
if ( ! evas_object_smart_type_check_ptr ( obj , MY_CLASS_NAME ) )
2012-05-28 05:28:46 -07:00
{
Ecore_Evas * ee = ecore_evas_ecore_evas_get ( evas_object_evas_get ( obj ) ) ;
return _elm_ee_xwin_get ( ee ) ;
}
2012-05-02 09:58:56 -07:00
2012-05-03 15:42:15 -07:00
ELM_WIN_CHECK ( obj ) 0 ;
2012-11-25 22:32:53 -08:00
Ecore_X_Window ret = 0 ;
eo_do ( ( Eo * ) obj , elm_obj_win_xwindow_get ( & ret ) ) ;
return ret ;
}
static void
_xwindow_get ( Eo * obj EINA_UNUSED , void * _pd , va_list * list )
{
Ecore_X_Window * ret = va_arg ( * list , Ecore_X_Window * ) ;
Elm_Win_Smart_Data * sd = _pd ;
2012-05-02 09:58:56 -07:00
2012-05-03 15:42:15 -07:00
# ifdef HAVE_ELEMENTARY_X
2012-11-25 22:32:53 -08:00
if ( sd - > x . xwin )
{
* ret = sd - > x . xwin ;
return ;
}
if ( sd - > parent )
{
* ret = elm_win_xwindow_get ( sd - > parent ) ;
return ;
}
2012-05-03 15:42:15 -07:00
# endif
2012-11-25 22:32:53 -08:00
* ret = 0 ;
2012-05-02 18:19:05 -07:00
}
2012-06-06 06:55:15 -07:00
EAPI Ecore_Wl_Window *
elm_win_wl_window_get ( const Evas_Object * obj )
{
if ( ! obj ) return NULL ;
2013-01-24 08:05:12 -08:00
if ( ( ! ENGINE_COMPARE ( ELM_WAYLAND_SHM ) ) & &
2012-12-19 06:41:45 -08:00
( ! ENGINE_COMPARE ( ELM_WAYLAND_EGL ) ) )
return NULL ;
2012-11-25 22:32:53 -08:00
if ( ! evas_object_smart_type_check_ptr ( obj , MY_CLASS_NAME ) )
2012-06-06 06:55:15 -07:00
{
Ecore_Evas * ee = ecore_evas_ecore_evas_get ( evas_object_evas_get ( obj ) ) ;
return ecore_evas_wayland_window_get ( ee ) ;
}
ELM_WIN_CHECK ( obj ) NULL ;
2012-11-25 22:32:53 -08:00
Ecore_Wl_Window * ret = NULL ;
eo_do ( ( Eo * ) obj , elm_obj_win_wl_window_get ( & ret ) ) ;
return ret ;
}
static void
_wl_window_get ( Eo * obj EINA_UNUSED , void * _pd EINA_UNUSED , va_list * list )
{
Ecore_Wl_Window * * ret = va_arg ( * list , Ecore_Wl_Window * * ) ;
2012-12-06 01:49:43 -08:00
# if HAVE_ELEMENTARY_WAYLAND
2012-11-25 22:32:53 -08:00
Elm_Win_Smart_Data * sd = _pd ;
2012-11-26 21:35:48 -08:00
if ( sd - > wl . win )
2012-11-25 22:32:53 -08:00
{
2012-11-26 21:35:48 -08:00
* ret = sd - > wl . win ;
2012-11-25 22:32:53 -08:00
return ;
}
if ( sd - > parent )
{
* ret = elm_win_wl_window_get ( sd - > parent ) ;
return ;
}
2012-12-06 01:38:25 -08:00
# endif
2012-11-25 22:32:53 -08:00
* ret = NULL ;
2012-06-06 06:55:15 -07:00
}
2012-07-18 21:35:50 -07:00
EAPI Eina_Bool
elm_win_trap_set ( const Elm_Win_Trap * t )
{
DBG ( " old %p, new %p " , trap , t ) ;
if ( ( t ) & & ( t - > version ! = ELM_WIN_TRAP_VERSION ) )
{
CRITICAL ( " trying to set a trap version %lu while %lu was expected! " ,
t - > version , ELM_WIN_TRAP_VERSION ) ;
return EINA_FALSE ;
}
trap = t ;
return EINA_TRUE ;
}
2012-09-14 06:06:57 -07:00
EAPI void
elm_win_floating_mode_set ( Evas_Object * obj , Eina_Bool floating )
{
ELM_WIN_CHECK ( obj ) ;
ELM_WIN_DATA_GET_OR_RETURN ( obj , sd ) ;
if ( floating = = sd - > floating ) return ;
sd - > floating = floating ;
# ifdef HAVE_ELEMENTARY_X
_elm_win_xwindow_get ( sd ) ;
if ( sd - > x . xwin )
{
if ( sd - > floating )
ecore_x_e_illume_window_state_set
( sd - > x . xwin , ECORE_X_ILLUME_WINDOW_STATE_FLOATING ) ;
else
ecore_x_e_illume_window_state_set
( sd - > x . xwin , ECORE_X_ILLUME_WINDOW_STATE_NORMAL ) ;
}
# endif
}
EAPI Eina_Bool
elm_win_floating_mode_get ( const Evas_Object * obj )
{
ELM_WIN_CHECK ( obj ) EINA_FALSE ;
ELM_WIN_DATA_GET_OR_RETURN_VAL ( obj , sd , EINA_FALSE ) ;
return sd - > floating ;
}
2012-11-25 22:32:53 -08:00
static void
_class_constructor ( Eo_Class * klass )
{
const Eo_Op_Func_Description func_desc [ ] = {
EO_OP_FUNC ( EO_BASE_ID ( EO_BASE_SUB_ID_CONSTRUCTOR ) , _constructor ) ,
EO_OP_FUNC ( EVAS_OBJ_SMART_ID ( EVAS_OBJ_SMART_SUB_ID_ADD ) , _elm_win_smart_add ) ,
EO_OP_FUNC ( EVAS_OBJ_SMART_ID ( EVAS_OBJ_SMART_SUB_ID_DEL ) , _elm_win_smart_del ) ,
EO_OP_FUNC ( EVAS_OBJ_SMART_ID ( EVAS_OBJ_SMART_SUB_ID_RESIZE ) , _elm_win_smart_resize ) ,
EO_OP_FUNC ( EVAS_OBJ_SMART_ID ( EVAS_OBJ_SMART_SUB_ID_MOVE ) , _elm_win_smart_move ) ,
EO_OP_FUNC ( EVAS_OBJ_SMART_ID ( EVAS_OBJ_SMART_SUB_ID_SHOW ) , _elm_win_smart_show ) ,
EO_OP_FUNC ( EVAS_OBJ_SMART_ID ( EVAS_OBJ_SMART_SUB_ID_HIDE ) , _elm_win_smart_hide ) ,
EO_OP_FUNC ( ELM_WIDGET_ID ( ELM_WIDGET_SUB_ID_ON_FOCUS ) , _elm_win_smart_on_focus ) ,
EO_OP_FUNC ( ELM_WIDGET_ID ( ELM_WIDGET_SUB_ID_EVENT ) , _elm_win_smart_event ) ,
EO_OP_FUNC ( ELM_WIDGET_ID ( ELM_WIDGET_SUB_ID_FOCUS_NEXT_MANAGER_IS ) , _elm_win_smart_focus_next_manager_is ) ,
EO_OP_FUNC ( ELM_WIDGET_ID ( ELM_WIDGET_SUB_ID_FOCUS_NEXT ) , _elm_win_smart_focus_next ) ,
EO_OP_FUNC ( ELM_WIDGET_ID ( ELM_WIDGET_SUB_ID_FOCUS_DIRECTION_MANAGER_IS ) , _elm_win_smart_focus_direction_manager_is ) ,
EO_OP_FUNC ( ELM_WIDGET_ID ( ELM_WIDGET_SUB_ID_FOCUS_DIRECTION ) , _elm_win_smart_focus_direction ) ,
EO_OP_FUNC ( ELM_OBJ_WIN_ID ( ELM_OBJ_WIN_SUB_ID_WIN_CONSTRUCTOR ) , _win_constructor ) ,
EO_OP_FUNC ( ELM_OBJ_WIN_ID ( ELM_OBJ_WIN_SUB_ID_RESIZE_OBJECT_ADD ) , _resize_object_add ) ,
EO_OP_FUNC ( ELM_OBJ_WIN_ID ( ELM_OBJ_WIN_SUB_ID_RESIZE_OBJECT_DEL ) , _resize_object_del ) ,
EO_OP_FUNC ( ELM_OBJ_WIN_ID ( ELM_OBJ_WIN_SUB_ID_TITLE_SET ) , _title_set ) ,
EO_OP_FUNC ( ELM_OBJ_WIN_ID ( ELM_OBJ_WIN_SUB_ID_TITLE_GET ) , _title_get ) ,
EO_OP_FUNC ( ELM_OBJ_WIN_ID ( ELM_OBJ_WIN_SUB_ID_ICON_NAME_SET ) , _icon_name_set ) ,
EO_OP_FUNC ( ELM_OBJ_WIN_ID ( ELM_OBJ_WIN_SUB_ID_ICON_NAME_GET ) , _icon_name_get ) ,
EO_OP_FUNC ( ELM_OBJ_WIN_ID ( ELM_OBJ_WIN_SUB_ID_ROLE_SET ) , _role_set ) ,
EO_OP_FUNC ( ELM_OBJ_WIN_ID ( ELM_OBJ_WIN_SUB_ID_ROLE_GET ) , _role_get ) ,
EO_OP_FUNC ( ELM_OBJ_WIN_ID ( ELM_OBJ_WIN_SUB_ID_ICON_OBJECT_SET ) , _icon_object_set ) ,
EO_OP_FUNC ( ELM_OBJ_WIN_ID ( ELM_OBJ_WIN_SUB_ID_ICON_OBJECT_GET ) , _icon_object_get ) ,
EO_OP_FUNC ( ELM_OBJ_WIN_ID ( ELM_OBJ_WIN_SUB_ID_AUTODEL_SET ) , _autodel_set ) ,
EO_OP_FUNC ( ELM_OBJ_WIN_ID ( ELM_OBJ_WIN_SUB_ID_AUTODEL_GET ) , _autodel_get ) ,
EO_OP_FUNC ( ELM_OBJ_WIN_ID ( ELM_OBJ_WIN_SUB_ID_ACTIVATE ) , _activate ) ,
EO_OP_FUNC ( ELM_OBJ_WIN_ID ( ELM_OBJ_WIN_SUB_ID_LOWER ) , _lower ) ,
EO_OP_FUNC ( ELM_OBJ_WIN_ID ( ELM_OBJ_WIN_SUB_ID_RAISE ) , _raise ) ,
EO_OP_FUNC ( ELM_OBJ_WIN_ID ( ELM_OBJ_WIN_SUB_ID_CENTER ) , _center ) ,
EO_OP_FUNC ( ELM_OBJ_WIN_ID ( ELM_OBJ_WIN_SUB_ID_BORDERLESS_SET ) , _borderless_set ) ,
EO_OP_FUNC ( ELM_OBJ_WIN_ID ( ELM_OBJ_WIN_SUB_ID_BORDERLESS_GET ) , _borderless_get ) ,
EO_OP_FUNC ( ELM_OBJ_WIN_ID ( ELM_OBJ_WIN_SUB_ID_SHAPED_SET ) , _shaped_set ) ,
EO_OP_FUNC ( ELM_OBJ_WIN_ID ( ELM_OBJ_WIN_SUB_ID_SHAPED_GET ) , _shaped_get ) ,
EO_OP_FUNC ( ELM_OBJ_WIN_ID ( ELM_OBJ_WIN_SUB_ID_ALPHA_SET ) , _alpha_set ) ,
EO_OP_FUNC ( ELM_OBJ_WIN_ID ( ELM_OBJ_WIN_SUB_ID_ALPHA_GET ) , _alpha_get ) ,
EO_OP_FUNC ( ELM_OBJ_WIN_ID ( ELM_OBJ_WIN_SUB_ID_OVERRIDE_SET ) , _override_set ) ,
EO_OP_FUNC ( ELM_OBJ_WIN_ID ( ELM_OBJ_WIN_SUB_ID_OVERRIDE_GET ) , _override_get ) ,
EO_OP_FUNC ( ELM_OBJ_WIN_ID ( ELM_OBJ_WIN_SUB_ID_FULLSCREEN_SET ) , _fullscreen_set ) ,
EO_OP_FUNC ( ELM_OBJ_WIN_ID ( ELM_OBJ_WIN_SUB_ID_FULLSCREEN_GET ) , _fullscreen_get ) ,
2012-12-27 05:38:33 -08:00
EO_OP_FUNC ( ELM_OBJ_WIN_ID ( ELM_OBJ_WIN_SUB_ID_MAIN_MENU_GET ) , _main_menu_get ) ,
2012-11-25 22:32:53 -08:00
EO_OP_FUNC ( ELM_OBJ_WIN_ID ( ELM_OBJ_WIN_SUB_ID_MAXIMIZED_SET ) , _maximized_set ) ,
EO_OP_FUNC ( ELM_OBJ_WIN_ID ( ELM_OBJ_WIN_SUB_ID_MAXIMIZED_GET ) , _maximized_get ) ,
EO_OP_FUNC ( ELM_OBJ_WIN_ID ( ELM_OBJ_WIN_SUB_ID_ICONIFIED_SET ) , _iconified_set ) ,
EO_OP_FUNC ( ELM_OBJ_WIN_ID ( ELM_OBJ_WIN_SUB_ID_ICONIFIED_GET ) , _iconified_get ) ,
EO_OP_FUNC ( ELM_OBJ_WIN_ID ( ELM_OBJ_WIN_SUB_ID_WITHDRAWN_SET ) , _withdrawn_set ) ,
EO_OP_FUNC ( ELM_OBJ_WIN_ID ( ELM_OBJ_WIN_SUB_ID_WITHDRAWN_GET ) , _withdrawn_get ) ,
2012-12-04 22:50:27 -08:00
EO_OP_FUNC ( ELM_OBJ_WIN_ID ( ELM_OBJ_WIN_SUB_ID_AVAILABLE_PROFILES_SET ) , _available_profiles_set ) ,
EO_OP_FUNC ( ELM_OBJ_WIN_ID ( ELM_OBJ_WIN_SUB_ID_AVAILABLE_PROFILES_GET ) , _available_profiles_get ) ,
EO_OP_FUNC ( ELM_OBJ_WIN_ID ( ELM_OBJ_WIN_SUB_ID_PROFILE_SET ) , _profile_set ) ,
EO_OP_FUNC ( ELM_OBJ_WIN_ID ( ELM_OBJ_WIN_SUB_ID_PROFILE_GET ) , _profile_get ) ,
2012-11-25 22:32:53 -08:00
EO_OP_FUNC ( ELM_OBJ_WIN_ID ( ELM_OBJ_WIN_SUB_ID_URGENT_SET ) , _urgent_set ) ,
EO_OP_FUNC ( ELM_OBJ_WIN_ID ( ELM_OBJ_WIN_SUB_ID_URGENT_GET ) , _urgent_get ) ,
EO_OP_FUNC ( ELM_OBJ_WIN_ID ( ELM_OBJ_WIN_SUB_ID_DEMAND_ATTENTION_SET ) , _demand_attention_set ) ,
EO_OP_FUNC ( ELM_OBJ_WIN_ID ( ELM_OBJ_WIN_SUB_ID_DEMAND_ATTENTION_GET ) , _demand_attention_get ) ,
EO_OP_FUNC ( ELM_OBJ_WIN_ID ( ELM_OBJ_WIN_SUB_ID_MODAL_SET ) , _modal_set ) ,
EO_OP_FUNC ( ELM_OBJ_WIN_ID ( ELM_OBJ_WIN_SUB_ID_MODAL_GET ) , _modal_get ) ,
EO_OP_FUNC ( ELM_OBJ_WIN_ID ( ELM_OBJ_WIN_SUB_ID_ASPECT_SET ) , _aspect_set ) ,
EO_OP_FUNC ( ELM_OBJ_WIN_ID ( ELM_OBJ_WIN_SUB_ID_ASPECT_GET ) , _aspect_get ) ,
EO_OP_FUNC ( ELM_OBJ_WIN_ID ( ELM_OBJ_WIN_SUB_ID_SIZE_BASE_SET ) , _size_base_set ) ,
EO_OP_FUNC ( ELM_OBJ_WIN_ID ( ELM_OBJ_WIN_SUB_ID_SIZE_BASE_GET ) , _size_base_get ) ,
EO_OP_FUNC ( ELM_OBJ_WIN_ID ( ELM_OBJ_WIN_SUB_ID_SIZE_STEP_SET ) , _size_step_set ) ,
EO_OP_FUNC ( ELM_OBJ_WIN_ID ( ELM_OBJ_WIN_SUB_ID_SIZE_STEP_GET ) , _size_step_get ) ,
EO_OP_FUNC ( ELM_OBJ_WIN_ID ( ELM_OBJ_WIN_SUB_ID_LAYER_SET ) , _layer_set ) ,
EO_OP_FUNC ( ELM_OBJ_WIN_ID ( ELM_OBJ_WIN_SUB_ID_LAYER_GET ) , _layer_get ) ,
EO_OP_FUNC ( ELM_OBJ_WIN_ID ( ELM_OBJ_WIN_SUB_ID_ROTATION_SET ) , _rotation_set ) ,
EO_OP_FUNC ( ELM_OBJ_WIN_ID ( ELM_OBJ_WIN_SUB_ID_ROTATION_WITH_RESIZE_SET ) , _rotation_with_resize_set ) ,
EO_OP_FUNC ( ELM_OBJ_WIN_ID ( ELM_OBJ_WIN_SUB_ID_ROTATION_GET ) , _rotation_get ) ,
EO_OP_FUNC ( ELM_OBJ_WIN_ID ( ELM_OBJ_WIN_SUB_ID_STICKY_SET ) , _sticky_set ) ,
EO_OP_FUNC ( ELM_OBJ_WIN_ID ( ELM_OBJ_WIN_SUB_ID_STICKY_GET ) , _sticky_get ) ,
EO_OP_FUNC ( ELM_OBJ_WIN_ID ( ELM_OBJ_WIN_SUB_ID_KEYBOARD_MODE_SET ) , _keyboard_mode_set ) ,
EO_OP_FUNC ( ELM_OBJ_WIN_ID ( ELM_OBJ_WIN_SUB_ID_KEYBOARD_MODE_GET ) , _keyboard_mode_get ) ,
EO_OP_FUNC ( ELM_OBJ_WIN_ID ( ELM_OBJ_WIN_SUB_ID_KEYBOARD_WIN_SET ) , _keyboard_win_set ) ,
EO_OP_FUNC ( ELM_OBJ_WIN_ID ( ELM_OBJ_WIN_SUB_ID_KEYBOARD_WIN_GET ) , _keyboard_win_get ) ,
EO_OP_FUNC ( ELM_OBJ_WIN_ID ( ELM_OBJ_WIN_SUB_ID_INDICATOR_MODE_SET ) , _indicator_mode_set ) ,
EO_OP_FUNC ( ELM_OBJ_WIN_ID ( ELM_OBJ_WIN_SUB_ID_INDICATOR_MODE_GET ) , _indicator_mode_get ) ,
EO_OP_FUNC ( ELM_OBJ_WIN_ID ( ELM_OBJ_WIN_SUB_ID_INDICATOR_OPACITY_SET ) , _indicator_opacity_set ) ,
EO_OP_FUNC ( ELM_OBJ_WIN_ID ( ELM_OBJ_WIN_SUB_ID_INDICATOR_OPACITY_GET ) , _indicator_opacity_get ) ,
EO_OP_FUNC ( ELM_OBJ_WIN_ID ( ELM_OBJ_WIN_SUB_ID_SCREEN_POSITION_GET ) , _screen_position_get ) ,
EO_OP_FUNC ( ELM_OBJ_WIN_ID ( ELM_OBJ_WIN_SUB_ID_FOCUS_GET ) , _focus_get ) ,
EO_OP_FUNC ( ELM_OBJ_WIN_ID ( ELM_OBJ_WIN_SUB_ID_SCREEN_CONSTRAIN_SET ) , _screen_constrain_set ) ,
EO_OP_FUNC ( ELM_OBJ_WIN_ID ( ELM_OBJ_WIN_SUB_ID_SCREEN_CONSTRAIN_GET ) , _screen_constrain_get ) ,
EO_OP_FUNC ( ELM_OBJ_WIN_ID ( ELM_OBJ_WIN_SUB_ID_SCREEN_SIZE_GET ) , _screen_size_get ) ,
EO_OP_FUNC ( ELM_OBJ_WIN_ID ( ELM_OBJ_WIN_SUB_ID_SCREEN_DPI_GET ) , _screen_dpi_get ) ,
EO_OP_FUNC ( ELM_OBJ_WIN_ID ( ELM_OBJ_WIN_SUB_ID_CONFORMANT_SET ) , _conformant_set ) ,
EO_OP_FUNC ( ELM_OBJ_WIN_ID ( ELM_OBJ_WIN_SUB_ID_CONFORMANT_GET ) , _conformant_get ) ,
EO_OP_FUNC ( ELM_OBJ_WIN_ID ( ELM_OBJ_WIN_SUB_ID_QUICKPANEL_SET ) , _quickpanel_set ) ,
EO_OP_FUNC ( ELM_OBJ_WIN_ID ( ELM_OBJ_WIN_SUB_ID_QUICKPANEL_GET ) , _quickpanel_get ) ,
EO_OP_FUNC ( ELM_OBJ_WIN_ID ( ELM_OBJ_WIN_SUB_ID_QUICKPANEL_PRIORITY_MAJOR_SET ) , _quickpanel_priority_major_set ) ,
EO_OP_FUNC ( ELM_OBJ_WIN_ID ( ELM_OBJ_WIN_SUB_ID_QUICKPANEL_PRIORITY_MAJOR_GET ) , _quickpanel_priority_major_get ) ,
EO_OP_FUNC ( ELM_OBJ_WIN_ID ( ELM_OBJ_WIN_SUB_ID_QUICKPANEL_PRIORITY_MINOR_SET ) , _quickpanel_priority_minor_set ) ,
EO_OP_FUNC ( ELM_OBJ_WIN_ID ( ELM_OBJ_WIN_SUB_ID_QUICKPANEL_PRIORITY_MINOR_GET ) , _quickpanel_priority_minor_get ) ,
EO_OP_FUNC ( ELM_OBJ_WIN_ID ( ELM_OBJ_WIN_SUB_ID_QUICKPANEL_ZONE_SET ) , _quickpanel_zone_set ) ,
EO_OP_FUNC ( ELM_OBJ_WIN_ID ( ELM_OBJ_WIN_SUB_ID_QUICKPANEL_ZONE_GET ) , _quickpanel_zone_get ) ,
EO_OP_FUNC ( ELM_OBJ_WIN_ID ( ELM_OBJ_WIN_SUB_ID_PROP_FOCUS_SKIP_SET ) , _prop_focus_skip_set ) ,
EO_OP_FUNC ( ELM_OBJ_WIN_ID ( ELM_OBJ_WIN_SUB_ID_ILLUME_COMMAND_SEND ) , _illume_command_send ) ,
EO_OP_FUNC ( ELM_OBJ_WIN_ID ( ELM_OBJ_WIN_SUB_ID_INLINED_IMAGE_OBJECT_GET ) , _inlined_image_object_get ) ,
EO_OP_FUNC ( ELM_OBJ_WIN_ID ( ELM_OBJ_WIN_SUB_ID_FOCUS_HIGHLIGHT_ENABLED_SET ) , _focus_highlight_enabled_set ) ,
EO_OP_FUNC ( ELM_OBJ_WIN_ID ( ELM_OBJ_WIN_SUB_ID_FOCUS_HIGHLIGHT_ENABLED_GET ) , _focus_highlight_enabled_get ) ,
EO_OP_FUNC ( ELM_OBJ_WIN_ID ( ELM_OBJ_WIN_SUB_ID_FOCUS_HIGHLIGHT_STYLE_SET ) , _focus_highlight_style_set ) ,
EO_OP_FUNC ( ELM_OBJ_WIN_ID ( ELM_OBJ_WIN_SUB_ID_FOCUS_HIGHLIGHT_STYLE_GET ) , _focus_highlight_style_get ) ,
2013-08-11 02:58:28 -07:00
EO_OP_FUNC ( ELM_OBJ_WIN_ID ( ELM_OBJ_WIN_SUB_ID_FOCUS_HIGHLIGHT_ANIMATE_SET ) , _focus_highlight_animate_set ) ,
EO_OP_FUNC ( ELM_OBJ_WIN_ID ( ELM_OBJ_WIN_SUB_ID_FOCUS_HIGHLIGHT_ANIMATE_GET ) , _focus_highlight_animate_get ) ,
2012-11-25 22:32:53 -08:00
EO_OP_FUNC ( ELM_OBJ_WIN_ID ( ELM_OBJ_WIN_SUB_ID_SOCKET_LISTEN ) , _socket_listen ) ,
EO_OP_FUNC ( ELM_OBJ_WIN_ID ( ELM_OBJ_WIN_SUB_ID_XWINDOW_GET ) , _xwindow_get ) ,
EO_OP_FUNC ( ELM_OBJ_WIN_ID ( ELM_OBJ_WIN_SUB_ID_WL_WINDOW_GET ) , _wl_window_get ) ,
EO_OP_FUNC_SENTINEL
} ;
eo_class_funcs_set ( klass , func_desc ) ;
2013-02-09 23:52:31 -08:00
evas_smart_legacy_type_register ( MY_CLASS_NAME , klass ) ;
2012-11-25 22:32:53 -08:00
}
static const Eo_Op_Description op_desc [ ] = {
EO_OP_DESCRIPTION ( ELM_OBJ_WIN_SUB_ID_WIN_CONSTRUCTOR , " Adds a window object. " ) ,
EO_OP_DESCRIPTION ( ELM_OBJ_WIN_SUB_ID_RESIZE_OBJECT_ADD , " Add subobj as a resize object of window obj. " ) ,
EO_OP_DESCRIPTION ( ELM_OBJ_WIN_SUB_ID_RESIZE_OBJECT_DEL , " Delete subobj as a resize object of window obj. " ) ,
EO_OP_DESCRIPTION ( ELM_OBJ_WIN_SUB_ID_TITLE_SET , " Set the title of the window. " ) ,
EO_OP_DESCRIPTION ( ELM_OBJ_WIN_SUB_ID_TITLE_GET , " Get the title of the window. " ) ,
EO_OP_DESCRIPTION ( ELM_OBJ_WIN_SUB_ID_ICON_NAME_SET , " Set the icon name of the window. " ) ,
EO_OP_DESCRIPTION ( ELM_OBJ_WIN_SUB_ID_ICON_NAME_GET , " Get the icon name of the window. " ) ,
EO_OP_DESCRIPTION ( ELM_OBJ_WIN_SUB_ID_ROLE_SET , " Set the role of the window. " ) ,
EO_OP_DESCRIPTION ( ELM_OBJ_WIN_SUB_ID_ROLE_GET , " Get the role of the window. " ) ,
EO_OP_DESCRIPTION ( ELM_OBJ_WIN_SUB_ID_ICON_OBJECT_SET , " Set a window object's icon. " ) ,
EO_OP_DESCRIPTION ( ELM_OBJ_WIN_SUB_ID_ICON_OBJECT_GET , " Get the icon object used for the window. " ) ,
EO_OP_DESCRIPTION ( ELM_OBJ_WIN_SUB_ID_AUTODEL_SET , " Set the window's autodel state. " ) ,
EO_OP_DESCRIPTION ( ELM_OBJ_WIN_SUB_ID_AUTODEL_GET , " Get the window's autodel state. " ) ,
EO_OP_DESCRIPTION ( ELM_OBJ_WIN_SUB_ID_ACTIVATE , " Activate a window object. " ) ,
EO_OP_DESCRIPTION ( ELM_OBJ_WIN_SUB_ID_LOWER , " Lower a window object. " ) ,
EO_OP_DESCRIPTION ( ELM_OBJ_WIN_SUB_ID_RAISE , " Raise a window object. " ) ,
EO_OP_DESCRIPTION ( ELM_OBJ_WIN_SUB_ID_CENTER , " Center a window on its screen. " ) ,
EO_OP_DESCRIPTION ( ELM_OBJ_WIN_SUB_ID_BORDERLESS_SET , " Set the borderless state of a window. " ) ,
EO_OP_DESCRIPTION ( ELM_OBJ_WIN_SUB_ID_BORDERLESS_GET , " Get the borderless state of a window. " ) ,
EO_OP_DESCRIPTION ( ELM_OBJ_WIN_SUB_ID_SHAPED_SET , " Set the shaped state of a window. " ) ,
EO_OP_DESCRIPTION ( ELM_OBJ_WIN_SUB_ID_SHAPED_GET , " Get the shaped state of a window. " ) ,
EO_OP_DESCRIPTION ( ELM_OBJ_WIN_SUB_ID_ALPHA_SET , " Set the alpha channel state of a window. " ) ,
EO_OP_DESCRIPTION ( ELM_OBJ_WIN_SUB_ID_ALPHA_GET , " Get the alpha channel state of a window. " ) ,
EO_OP_DESCRIPTION ( ELM_OBJ_WIN_SUB_ID_OVERRIDE_SET , " Set the override state of a window. " ) ,
EO_OP_DESCRIPTION ( ELM_OBJ_WIN_SUB_ID_OVERRIDE_GET , " Get the override state of a window. " ) ,
EO_OP_DESCRIPTION ( ELM_OBJ_WIN_SUB_ID_FULLSCREEN_SET , " Set the fullscreen state of a window. " ) ,
EO_OP_DESCRIPTION ( ELM_OBJ_WIN_SUB_ID_FULLSCREEN_GET , " Get the fullscreen state of a window. " ) ,
2012-12-27 05:38:33 -08:00
EO_OP_DESCRIPTION ( ELM_OBJ_WIN_SUB_ID_MAIN_MENU_GET , " Get the Main Menu of a window. " ) ,
2012-11-25 22:32:53 -08:00
EO_OP_DESCRIPTION ( ELM_OBJ_WIN_SUB_ID_MAXIMIZED_SET , " Set the maximized state of a window. " ) ,
EO_OP_DESCRIPTION ( ELM_OBJ_WIN_SUB_ID_MAXIMIZED_GET , " Get the maximized state of a window. " ) ,
EO_OP_DESCRIPTION ( ELM_OBJ_WIN_SUB_ID_ICONIFIED_SET , " Set the iconified state of a window. " ) ,
EO_OP_DESCRIPTION ( ELM_OBJ_WIN_SUB_ID_ICONIFIED_GET , " Get the iconified state of a window. " ) ,
EO_OP_DESCRIPTION ( ELM_OBJ_WIN_SUB_ID_WITHDRAWN_SET , " Set the withdrawn state of a window. " ) ,
EO_OP_DESCRIPTION ( ELM_OBJ_WIN_SUB_ID_WITHDRAWN_GET , " Get the withdrawn state of a window. " ) ,
2012-12-04 22:50:27 -08:00
EO_OP_DESCRIPTION ( ELM_OBJ_WIN_SUB_ID_AVAILABLE_PROFILES_SET , " Set the array of available profiles to a window. " ) ,
EO_OP_DESCRIPTION ( ELM_OBJ_WIN_SUB_ID_AVAILABLE_PROFILES_GET , " Get the array of available profiles of a window. " ) ,
EO_OP_DESCRIPTION ( ELM_OBJ_WIN_SUB_ID_PROFILE_SET , " Set the profile of a window. " ) ,
EO_OP_DESCRIPTION ( ELM_OBJ_WIN_SUB_ID_PROFILE_GET , " Get the profile of a window. " ) ,
2012-11-25 22:32:53 -08:00
EO_OP_DESCRIPTION ( ELM_OBJ_WIN_SUB_ID_URGENT_SET , " Set the urgent state of a window. " ) ,
EO_OP_DESCRIPTION ( ELM_OBJ_WIN_SUB_ID_URGENT_GET , " Get the urgent state of a window. " ) ,
EO_OP_DESCRIPTION ( ELM_OBJ_WIN_SUB_ID_DEMAND_ATTENTION_SET , " Set the demand_attention state of a window. " ) ,
EO_OP_DESCRIPTION ( ELM_OBJ_WIN_SUB_ID_DEMAND_ATTENTION_GET , " Get the demand_attention state of a window. " ) ,
EO_OP_DESCRIPTION ( ELM_OBJ_WIN_SUB_ID_MODAL_SET , " Set the modal state of a window. " ) ,
EO_OP_DESCRIPTION ( ELM_OBJ_WIN_SUB_ID_MODAL_GET , " Get the modal state of a window. " ) ,
EO_OP_DESCRIPTION ( ELM_OBJ_WIN_SUB_ID_ASPECT_SET , " Set the aspect ratio of a window. " ) ,
EO_OP_DESCRIPTION ( ELM_OBJ_WIN_SUB_ID_ASPECT_GET , " Get the aspect ratio of a window. " ) ,
EO_OP_DESCRIPTION ( ELM_OBJ_WIN_SUB_ID_SIZE_BASE_SET , " Set the base window size used with stepping calculation. " ) ,
EO_OP_DESCRIPTION ( ELM_OBJ_WIN_SUB_ID_SIZE_BASE_GET , " Get the base size of a window. " ) ,
EO_OP_DESCRIPTION ( ELM_OBJ_WIN_SUB_ID_SIZE_STEP_SET , " Set the window stepping used with sizing calculation. " ) ,
EO_OP_DESCRIPTION ( ELM_OBJ_WIN_SUB_ID_SIZE_STEP_GET , " Get the stepping of a window. " ) ,
EO_OP_DESCRIPTION ( ELM_OBJ_WIN_SUB_ID_LAYER_SET , " Set the layer of the window. " ) ,
EO_OP_DESCRIPTION ( ELM_OBJ_WIN_SUB_ID_LAYER_GET , " Get the layer of the window. " ) ,
EO_OP_DESCRIPTION ( ELM_OBJ_WIN_SUB_ID_ROTATION_SET , " Set the rotation of the window. " ) ,
EO_OP_DESCRIPTION ( ELM_OBJ_WIN_SUB_ID_ROTATION_WITH_RESIZE_SET , " Rotates the window and resizes it. " ) ,
EO_OP_DESCRIPTION ( ELM_OBJ_WIN_SUB_ID_ROTATION_GET , " Get the rotation of the window. " ) ,
EO_OP_DESCRIPTION ( ELM_OBJ_WIN_SUB_ID_STICKY_SET , " Set the sticky state of the window. " ) ,
EO_OP_DESCRIPTION ( ELM_OBJ_WIN_SUB_ID_STICKY_GET , " Get the sticky state of the window. " ) ,
EO_OP_DESCRIPTION ( ELM_OBJ_WIN_SUB_ID_KEYBOARD_MODE_SET , " Sets the keyboard mode of the window. " ) ,
EO_OP_DESCRIPTION ( ELM_OBJ_WIN_SUB_ID_KEYBOARD_MODE_GET , " Gets the keyboard mode of the window. " ) ,
EO_OP_DESCRIPTION ( ELM_OBJ_WIN_SUB_ID_KEYBOARD_WIN_SET , " Sets whether the window is a keyboard. " ) ,
EO_OP_DESCRIPTION ( ELM_OBJ_WIN_SUB_ID_KEYBOARD_WIN_GET , " Gets whether the window is a keyboard. " ) ,
EO_OP_DESCRIPTION ( ELM_OBJ_WIN_SUB_ID_INDICATOR_MODE_SET , " Sets the indicator mode of the window. " ) ,
EO_OP_DESCRIPTION ( ELM_OBJ_WIN_SUB_ID_INDICATOR_MODE_GET , " Gets the indicator mode of the window. " ) ,
EO_OP_DESCRIPTION ( ELM_OBJ_WIN_SUB_ID_INDICATOR_OPACITY_SET , " Sets the indicator opacity mode of the window. " ) ,
EO_OP_DESCRIPTION ( ELM_OBJ_WIN_SUB_ID_INDICATOR_OPACITY_GET , " Gets the indicator opacity mode of the window. " ) ,
EO_OP_DESCRIPTION ( ELM_OBJ_WIN_SUB_ID_SCREEN_POSITION_GET , " Get the screen position of a window. " ) ,
EO_OP_DESCRIPTION ( ELM_OBJ_WIN_SUB_ID_FOCUS_GET , " Determine whether a window has focus. " ) ,
EO_OP_DESCRIPTION ( ELM_OBJ_WIN_SUB_ID_SCREEN_CONSTRAIN_SET , " Constrain the maximum width and height of a window to the width and height of its screen. " ) ,
EO_OP_DESCRIPTION ( ELM_OBJ_WIN_SUB_ID_SCREEN_CONSTRAIN_GET , " Retrieve the constraints on the maximum width and height of a window relative to the width and height of its screen. " ) ,
EO_OP_DESCRIPTION ( ELM_OBJ_WIN_SUB_ID_SCREEN_SIZE_GET , " Get screen geometry details for the screen that a window is on. " ) ,
EO_OP_DESCRIPTION ( ELM_OBJ_WIN_SUB_ID_SCREEN_DPI_GET , " Get screen dpi for the screen that a window is on. " ) ,
EO_OP_DESCRIPTION ( ELM_OBJ_WIN_SUB_ID_CONFORMANT_SET , " Set if this window is an illume conformant window. " ) ,
EO_OP_DESCRIPTION ( ELM_OBJ_WIN_SUB_ID_CONFORMANT_GET , " Get if this window is an illume conformant window. " ) ,
EO_OP_DESCRIPTION ( ELM_OBJ_WIN_SUB_ID_QUICKPANEL_SET , " Set a window to be an illume quickpanel window. " ) ,
EO_OP_DESCRIPTION ( ELM_OBJ_WIN_SUB_ID_QUICKPANEL_GET , " Get if this window is a quickpanel or not. " ) ,
EO_OP_DESCRIPTION ( ELM_OBJ_WIN_SUB_ID_QUICKPANEL_PRIORITY_MAJOR_SET , " Set the major priority of a quickpanel window. " ) ,
EO_OP_DESCRIPTION ( ELM_OBJ_WIN_SUB_ID_QUICKPANEL_PRIORITY_MAJOR_GET , " Get the major priority of a quickpanel window. " ) ,
EO_OP_DESCRIPTION ( ELM_OBJ_WIN_SUB_ID_QUICKPANEL_PRIORITY_MINOR_SET , " Set the minor priority of a quickpanel window. " ) ,
EO_OP_DESCRIPTION ( ELM_OBJ_WIN_SUB_ID_QUICKPANEL_PRIORITY_MINOR_GET , " Get the minor priority of a quickpanel window. " ) ,
EO_OP_DESCRIPTION ( ELM_OBJ_WIN_SUB_ID_QUICKPANEL_ZONE_SET , " Set which zone this quickpanel should appear in. " ) ,
EO_OP_DESCRIPTION ( ELM_OBJ_WIN_SUB_ID_QUICKPANEL_ZONE_GET , " Get which zone this quickpanel should appear in. " ) ,
EO_OP_DESCRIPTION ( ELM_OBJ_WIN_SUB_ID_PROP_FOCUS_SKIP_SET , " Set the window to be skipped by keyboard focus. " ) ,
EO_OP_DESCRIPTION ( ELM_OBJ_WIN_SUB_ID_ILLUME_COMMAND_SEND , " Send a command to the windowing environment. " ) ,
EO_OP_DESCRIPTION ( ELM_OBJ_WIN_SUB_ID_INLINED_IMAGE_OBJECT_GET , " Get the inlined image object handle. " ) ,
EO_OP_DESCRIPTION ( ELM_OBJ_WIN_SUB_ID_FOCUS_HIGHLIGHT_ENABLED_SET , " Set the enabled status for the focus highlight in a window. " ) ,
EO_OP_DESCRIPTION ( ELM_OBJ_WIN_SUB_ID_FOCUS_HIGHLIGHT_ENABLED_GET , " Get the enabled value of the focus highlight for this window. " ) ,
EO_OP_DESCRIPTION ( ELM_OBJ_WIN_SUB_ID_FOCUS_HIGHLIGHT_STYLE_SET , " Set the style for the focus highlight on this window. " ) ,
EO_OP_DESCRIPTION ( ELM_OBJ_WIN_SUB_ID_FOCUS_HIGHLIGHT_STYLE_GET , " Get the style set for the focus highlight object. " ) ,
2013-08-11 02:58:28 -07:00
EO_OP_DESCRIPTION ( ELM_OBJ_WIN_SUB_ID_FOCUS_HIGHLIGHT_ANIMATE_SET , " Set the animate status for the focus highlight for this window. " ) ,
EO_OP_DESCRIPTION ( ELM_OBJ_WIN_SUB_ID_FOCUS_HIGHLIGHT_ANIMATE_GET , " Get the animate status for the focus highlight for this window. " ) ,
2012-11-25 22:32:53 -08:00
EO_OP_DESCRIPTION ( ELM_OBJ_WIN_SUB_ID_SOCKET_LISTEN , " Create a socket to provide the service for Plug widget. " ) ,
EO_OP_DESCRIPTION ( ELM_OBJ_WIN_SUB_ID_XWINDOW_GET , " Get the Ecore_X_Window of an Evas_Object. " ) ,
EO_OP_DESCRIPTION ( ELM_OBJ_WIN_SUB_ID_WL_WINDOW_GET , " Get the Ecore_Wl_Window of and Evas_Object. " ) ,
EO_OP_DESCRIPTION_SENTINEL
} ;
static const Eo_Class_Description class_desc = {
EO_VERSION ,
MY_CLASS_NAME ,
EO_CLASS_TYPE_REGULAR ,
EO_CLASS_DESCRIPTION_OPS ( & ELM_OBJ_WIN_BASE_ID , op_desc , ELM_OBJ_WIN_SUB_ID_LAST ) ,
NULL ,
sizeof ( Elm_Win_Smart_Data ) ,
_class_constructor ,
NULL
} ;
EO_DEFINE_CLASS ( elm_obj_win_class_get , & class_desc , ELM_OBJ_WIDGET_CLASS , NULL ) ;