2011-11-05 23:41:39 -07:00
# include "e_int_config_randr.h"
# include "e_randr.h"
# ifndef ECORE_X_RANDR_1_2
2011-11-09 07:42:00 -08:00
# define ECORE_X_RANDR_1_2 ((1 << 16) | 2)
2011-11-05 23:41:39 -07:00
# endif
# ifndef ECORE_X_RANDR_1_3
2011-11-09 07:42:00 -08:00
# define ECORE_X_RANDR_1_3 ((1 << 16) | 3)
2011-11-05 23:41:39 -07:00
# endif
# ifndef Ecore_X_Randr_Unset
2011-11-09 07:42:00 -08:00
# define Ecore_X_Randr_Unset -1
2011-11-05 23:41:39 -07:00
# endif
2011-11-09 07:39:26 -08:00
Evas_Object * dialog_subdialog_policies_basic_create_widgets ( Evas * canvas ) ;
2011-12-14 09:37:33 -08:00
Eina_Bool dialog_subdialog_policies_create_data ( E_Config_Dialog_Data * e_config_runtime_info ) ;
2011-11-09 07:42:00 -08:00
Eina_Bool dialog_subdialog_policies_basic_apply_data ( E_Config_Dialog * cfd , E_Config_Dialog_Data * cfdata ) ;
Eina_Bool dialog_subdialog_policies_basic_check_changed ( E_Config_Dialog * cfd , E_Config_Dialog_Data * cfdata ) ;
Eina_Bool dialog_subdialog_policies_basic_apply_data ( E_Config_Dialog * cfd , E_Config_Dialog_Data * cfdata ) ;
void dialog_subdialog_policies_update_radio_buttons ( Evas_Object * crtc ) ;
2011-11-05 23:41:39 -07:00
2011-11-09 07:42:00 -08:00
static void _dialog_subdialog_policies_policy_mouse_up_cb ( void * data , Evas * e , Evas_Object * obj , void * event_info ) ;
2011-11-05 23:41:39 -07:00
extern E_Config_Dialog_Data * e_config_runtime_info ;
extern char _theme_file_path [ ] ;
2011-12-14 09:37:33 -08:00
static const char * _ECORE_X_RANDR_POLICIES_STRINGS [ ] = {
" ECORE_X_RANDR_OUTPUT_POLICY_ABOVE " ,
" ECORE_X_RANDR_OUTPUT_POLICY_RIGHT " ,
" ECORE_X_RANDR_OUTPUT_POLICY_BELOW " ,
" ECORE_X_RANDR_OUTPUT_POLICY_LEFT " ,
" ECORE_X_RANDR_OUTPUT_POLICY_CLONE " ,
" ECORE_X_RANDR_OUTPUT_POLICY_NONE " } ;
2011-11-05 23:41:39 -07:00
/*
2011-11-09 07:42:00 -08:00
static void
_dialog_subdialog_policies_radio_add_callbacks ( void )
{
2011-11-09 07:39:26 -08:00
evas_object_event_callback_add ( e_config_runtime_info - > gui . subdialogs . policies . radio_none , EVAS_CALLBACK_MOUSE_UP , _dialog_subdialog_policies_policy_mouse_up_cb , NULL ) ;
evas_object_event_callback_add ( e_config_runtime_info - > gui . subdialogs . policies . radio_clone , EVAS_CALLBACK_MOUSE_UP , _dialog_subdialog_policies_policy_mouse_up_cb , NULL ) ;
evas_object_event_callback_add ( e_config_runtime_info - > gui . subdialogs . policies . radio_left , EVAS_CALLBACK_MOUSE_UP , _dialog_subdialog_policies_policy_mouse_up_cb , NULL ) ;
evas_object_event_callback_add ( e_config_runtime_info - > gui . subdialogs . policies . radio_below , EVAS_CALLBACK_MOUSE_UP , _dialog_subdialog_policies_policy_mouse_up_cb , NULL ) ;
evas_object_event_callback_add ( e_config_runtime_info - > gui . subdialogs . policies . radio_above , EVAS_CALLBACK_MOUSE_UP , _dialog_subdialog_policies_policy_mouse_up_cb , NULL ) ;
evas_object_event_callback_add ( e_config_runtime_info - > gui . subdialogs . policies . radio_right , EVAS_CALLBACK_MOUSE_UP , _dialog_subdialog_policies_policy_mouse_up_cb , NULL ) ;
2011-11-09 07:42:00 -08:00
}
*/
2011-11-05 23:41:39 -07:00
2011-11-09 07:42:00 -08:00
Eina_Bool
2011-11-09 07:39:26 -08:00
dialog_subdialog_policies_create_data ( E_Config_Dialog_Data * e_config_runtime_info )
2011-11-05 23:41:39 -07:00
{
E_Config_Randr_Dialog_Output_Dialog_Data * odd ;
Eina_List * iter ;
if ( ! e_config_runtime_info | | ! e_config_runtime_info - > output_dialog_data_list ) return EINA_FALSE ;
2011-11-09 08:13:26 -08:00
EINA_LIST_FOREACH ( e_config_runtime_info - > output_dialog_data_list , iter , odd )
2011-11-05 23:41:39 -07:00
{
2011-11-07 15:04:25 -08:00
E_Randr_Output_Info * oi ;
2011-11-05 23:41:39 -07:00
if ( odd - > crtc )
oi = eina_list_data_get ( eina_list_last ( odd - > crtc - > outputs ) ) ;
else if ( odd - > output )
oi = odd - > output ;
2011-11-07 15:04:25 -08:00
else continue ;
2011-11-05 23:41:39 -07:00
odd - > previous_policy = oi - > policy ;
2011-12-14 09:37:33 -08:00
odd - > new_policy = oi - > policy ;
2011-11-05 23:41:39 -07:00
}
return EINA_TRUE ;
}
Evas_Object *
2011-11-09 07:39:26 -08:00
dialog_subdialog_policies_basic_create_widgets ( Evas * canvas )
2011-11-05 23:41:39 -07:00
{
Evas_Object * subdialog ;
E_Radio_Group * rg ;
//char signal[29];
if ( ! canvas | | ! e_config_runtime_info ) return NULL ;
if ( e_config_runtime_info - > gui . subdialogs . policies . dialog ) return e_config_runtime_info - > gui . subdialogs . policies . dialog ;
2011-11-09 07:42:00 -08:00
if ( ! ( subdialog = e_widget_framelist_add ( canvas , _ ( " Screen attachement policy " ) , EINA_FALSE ) ) ) return NULL ;
2011-11-05 23:41:39 -07:00
// Add radio buttons
2011-11-09 07:39:26 -08:00
if ( ! ( rg = e_widget_radio_group_new ( & e_config_runtime_info - > gui . subdialogs . policies . radio_val ) ) ) goto _dialog_subdialog_policies_radio_add_fail ;
2011-11-05 23:41:39 -07:00
//IMPROVABLE: use enum to determine objects via 'switch'-statement
e_config_runtime_info - > gui . subdialogs . policies . radio_above = e_widget_radio_add ( canvas , _ ( " Above " ) , ECORE_X_RANDR_OUTPUT_POLICY_ABOVE , rg ) ;
e_widget_framelist_object_append ( subdialog , e_config_runtime_info - > gui . subdialogs . policies . radio_above ) ;
e_config_runtime_info - > gui . subdialogs . policies . radio_right = e_widget_radio_add ( canvas , _ ( " Right " ) , ECORE_X_RANDR_OUTPUT_POLICY_RIGHT , rg ) ;
e_widget_framelist_object_append ( subdialog , e_config_runtime_info - > gui . subdialogs . policies . radio_right ) ;
e_config_runtime_info - > gui . subdialogs . policies . radio_below = e_widget_radio_add ( canvas , _ ( " Below " ) , ECORE_X_RANDR_OUTPUT_POLICY_BELOW , rg ) ;
e_widget_framelist_object_append ( subdialog , e_config_runtime_info - > gui . subdialogs . policies . radio_below ) ;
e_config_runtime_info - > gui . subdialogs . policies . radio_left = e_widget_radio_add ( canvas , _ ( " Left " ) , ECORE_X_RANDR_OUTPUT_POLICY_LEFT , rg ) ;
e_widget_framelist_object_append ( subdialog , e_config_runtime_info - > gui . subdialogs . policies . radio_left ) ;
e_config_runtime_info - > gui . subdialogs . policies . radio_clone = e_widget_radio_add ( canvas , _ ( " Clone display content " ) , ECORE_X_RANDR_OUTPUT_POLICY_CLONE , rg ) ;
e_widget_framelist_object_append ( subdialog , e_config_runtime_info - > gui . subdialogs . policies . radio_clone ) ;
e_config_runtime_info - > gui . subdialogs . policies . radio_none = e_widget_radio_add ( canvas , _ ( " No reaction " ) , ECORE_X_RANDR_OUTPUT_POLICY_NONE , rg ) ;
e_widget_framelist_object_append ( subdialog , e_config_runtime_info - > gui . subdialogs . policies . radio_none ) ;
2011-11-09 07:39:26 -08:00
//_dialog_subdialog_policies_radio_add_callbacks();
2011-11-05 23:41:39 -07:00
/*
2011-11-09 07:42:00 -08:00
// Add policies demonstration edje
if ( ! ( e_config_runtime_info - > gui . subdialogs . policies . swallowing_edje = edje_object_add ( canvas ) ) )
{
2011-11-09 07:39:26 -08:00
goto _dialog_subdialog_policies_edje_add_fail ;
2011-11-05 23:41:39 -07:00
2011-11-09 07:42:00 -08:00
}
if ( ! edje_object_file_set ( e_config_runtime_info - > gui . subdialogs . policies . swallowing_edje , _theme_file_path , " e/conf/randr/dialog/subdialog/policies " ) )
{
2011-11-09 07:39:26 -08:00
goto _dialog_subdialog_policies_edje_set_fail ;
2011-11-09 07:42:00 -08:00
}
2011-11-05 23:41:39 -07:00
2011-11-09 07:42:00 -08:00
e_widget_table_object_align_append ( subdialog , e_config_runtime_info - > gui . subdialogs . policies . swallowing_edje , 1 , 0 , 1 , 1 , 1 , 1 , 1 , 1 , 1.0 , 1.0 ) ;
*/
2011-11-05 23:41:39 -07:00
/*
2011-11-09 07:42:00 -08:00
evas_object_show ( e_config_runtime_info - > gui . subdialogs . policies . swallowing_edje ) ;
//emit signal to edje so a demonstration can be shown
snprintf ( signal , sizeof ( signal ) , " conf,randr,dialog,policies,%d " , e_randr_screen_info - > rrvd_info . randr_info_12 - > output_policy ) ;
edje_object_signal_emit ( e_config_runtime_info - > gui . subdialogs . policies . swallowing_edje , signal , " e " ) ;
fprintf ( stderr , " CONF_RANDR: Initial signal emitted to policy dialog: %s \n " , signal ) ;
//Use theme's background as screen representation
e_config_runtime_info - > gui . subdialogs . policies . new_display = edje_object_add ( canvas ) ;
e_theme_edje_object_set ( e_config_runtime_info - > gui . subdialogs . policies . new_display , " base/theme/widgets " , " e/widgets/frame " ) ;
e_config_runtime_info - > gui . subdialogs . policies . new_display_background = edje_object_add ( canvas ) ;
e_theme_edje_object_set ( e_config_runtime_info - > gui . subdialogs . policies . new_display_background , " base/theme/background " , " e/desktop/background " ) ;
edje_object_part_swallow ( e_config_runtime_info - > gui . subdialogs . policies . new_display , " e.swallow.content " , e_config_runtime_info - > gui . subdialogs . policies . new_display_background ) ;
edje_object_part_text_set ( e_config_runtime_info - > gui . subdialogs . policies . new_display , " e.text.label " , _ ( " New display " ) ) ;
edje_object_part_swallow ( e_config_runtime_info - > gui . subdialogs . policies . swallowing_edje , " new_display.swallow.content " , e_config_runtime_info - > gui . subdialogs . policies . new_display ) ;
//add theme's frame
//for now use the theme's background for the new display as well
e_config_runtime_info - > gui . subdialogs . policies . current_displays_setup = edje_object_add ( canvas ) ;
e_theme_edje_object_set ( e_config_runtime_info - > gui . subdialogs . policies . current_displays_setup , " base/theme/widgets " , " e/widgets/frame " ) ;
e_config_runtime_info - > gui . subdialogs . policies . current_displays_setup_background = edje_object_add ( canvas ) ;
e_theme_edje_object_set ( e_config_runtime_info - > gui . subdialogs . policies . current_displays_setup_background , " base/theme/background " , " e/desktop/background " ) ;
edje_object_part_swallow ( e_config_runtime_info - > gui . subdialogs . policies . current_displays_setup , " e.swallow.content " , e_config_runtime_info - > gui . subdialogs . policies . current_displays_setup_background ) ;
edje_object_part_text_set ( e_config_runtime_info - > gui . subdialogs . policies . current_displays_setup , " e.text.label " , _ ( " Used display " ) ) ;
edje_object_part_swallow ( e_config_runtime_info - > gui . subdialogs . policies . swallowing_edje , " current_displays_setup.swallow.content " , e_config_runtime_info - > gui . subdialogs . policies . current_displays_setup ) ;
*/
2011-11-05 23:41:39 -07:00
evas_object_show ( subdialog ) ;
return subdialog ;
/*
2011-11-09 07:42:00 -08:00
_dialog_subdialog_policies_edje_set_fail :
evas_object_del ( e_config_runtime_info - > gui . subdialogs . policies . swallowing_edje ) ;
_dialog_subdialog_policies_edje_add_fail :
fprintf ( stderr , " CONF_RANDR: Couldn't set edj for policies subdialog! \n " ) ;
evas_object_del ( subdialog ) ;
return NULL ;
*/
2011-11-09 07:39:26 -08:00
_dialog_subdialog_policies_radio_add_fail :
2011-11-05 23:41:39 -07:00
evas_object_del ( subdialog ) ;
return NULL ;
}
2011-11-09 07:42:00 -08:00
static void
2011-11-09 07:39:26 -08:00
_dialog_subdialog_policies_policy_mouse_up_cb ( void * data __UNUSED__ , Evas * e __UNUSED__ , Evas_Object * obj , void * event_info __UNUSED__ )
2011-11-05 23:41:39 -07:00
{
char signal [ 29 ] ;
int policy = ECORE_X_RANDR_OUTPUT_POLICY_NONE ;
/*
* IMPROVABLE :
* " sadly " the evas callbacks are called before radio_val is set to its new
* value . If that is ever changed , remove the used code below and just use the
* 1 - liner below .
* snprintf ( signal , sizeof ( signal ) , " conf,randr,dialog,policies,%d " , e_config_runtime_info - > gui . subdialogs . policies . radio_val ) ;
*/
if ( obj = = e_config_runtime_info - > gui . subdialogs . policies . radio_above ) policy = ECORE_X_RANDR_OUTPUT_POLICY_ABOVE ;
if ( obj = = e_config_runtime_info - > gui . subdialogs . policies . radio_right ) policy = ECORE_X_RANDR_OUTPUT_POLICY_RIGHT ;
if ( obj = = e_config_runtime_info - > gui . subdialogs . policies . radio_below ) policy = ECORE_X_RANDR_OUTPUT_POLICY_BELOW ;
if ( obj = = e_config_runtime_info - > gui . subdialogs . policies . radio_left ) policy = ECORE_X_RANDR_OUTPUT_POLICY_LEFT ;
if ( obj = = e_config_runtime_info - > gui . subdialogs . policies . radio_clone ) policy = ECORE_X_RANDR_OUTPUT_POLICY_CLONE ;
if ( obj = = e_config_runtime_info - > gui . subdialogs . policies . radio_none ) policy = ECORE_X_RANDR_OUTPUT_POLICY_NONE ;
snprintf ( signal , sizeof ( signal ) , " conf,randr,dialog,policies,%d " , policy ) ;
//edje_object_signal_emit(e_config_runtime_info->gui.subdialogs.policies.swallowing_edje, signal, "e");
fprintf ( stderr , " CONF_RANDR: mouse button released. Emitted signal to policy: %s \n " , signal ) ;
}
2011-11-09 07:42:00 -08:00
Eina_Bool
2011-11-09 07:39:26 -08:00
dialog_subdialog_policies_basic_apply_data ( E_Config_Dialog * cfd __UNUSED__ , E_Config_Dialog_Data * cfdata __UNUSED__ )
2011-11-05 23:41:39 -07:00
{
if ( ! e_randr_screen_info | | ! e_config_runtime_info - > gui . selected_output_dd ) return EINA_FALSE ;
//policy update
e_config_runtime_info - > gui . selected_output_dd - > previous_policy = e_config_runtime_info - > gui . selected_output_dd - > new_policy ;
e_config_runtime_info - > gui . selected_output_dd - > new_policy = e_config_runtime_info - > gui . subdialogs . policies . radio_val ;
2011-12-14 09:37:33 -08:00
fprintf ( stderr , " CONF_RANDR: 'New display attached'-policy set to %s. \n " , _ECORE_X_RANDR_POLICIES_STRINGS [ e_config_runtime_info - > gui . selected_output_dd - > new_policy - 1 ] ) ;
2011-11-05 23:41:39 -07:00
return EINA_TRUE ;
}
2011-11-09 07:42:00 -08:00
Eina_Bool
2011-11-09 07:39:26 -08:00
dialog_subdialog_policies_basic_check_changed ( E_Config_Dialog * cfd __UNUSED__ , E_Config_Dialog_Data * cfdata )
2011-11-05 23:41:39 -07:00
{
if ( ! e_randr_screen_info | | ! cfdata | | ! cfdata - > gui . selected_output_dd ) return EINA_FALSE ;
2011-11-09 07:42:00 -08:00
return ( int ) cfdata - > gui . selected_output_dd - > previous_policy ! = ( int ) cfdata - > gui . subdialogs . policies . radio_val ;
2011-11-05 23:41:39 -07:00
}
2011-11-09 07:42:00 -08:00
void
2011-11-09 07:39:26 -08:00
dialog_subdialog_policies_update_radio_buttons ( Evas_Object * crtc )
2011-11-05 23:41:39 -07:00
{
E_Config_Randr_Dialog_Output_Dialog_Data * output_dialog_data ;
2011-11-07 15:03:07 -08:00
E_Randr_Output_Info * output = NULL ;
2011-11-05 23:41:39 -07:00
Ecore_X_Randr_Output_Policy policy ;
//disable widgets, if no crtc is selected
if ( ! crtc | | ! ( output_dialog_data = evas_object_data_get ( crtc , " output_info " ) ) )
{
//Evas_Object *radio_above, *radio_right, *radio_below, *radio_left, *radio_clone, *radio_none;
e_widget_disabled_set ( e_config_runtime_info - > gui . subdialogs . policies . radio_above , EINA_TRUE ) ;
e_widget_disabled_set ( e_config_runtime_info - > gui . subdialogs . policies . radio_right , EINA_TRUE ) ;
e_widget_disabled_set ( e_config_runtime_info - > gui . subdialogs . policies . radio_below , EINA_TRUE ) ;
e_widget_disabled_set ( e_config_runtime_info - > gui . subdialogs . policies . radio_left , EINA_TRUE ) ;
e_widget_disabled_set ( e_config_runtime_info - > gui . subdialogs . policies . radio_clone , EINA_TRUE ) ;
e_widget_disabled_set ( e_config_runtime_info - > gui . subdialogs . policies . radio_none , EINA_TRUE ) ;
return ;
}
else
{
e_widget_disabled_set ( e_config_runtime_info - > gui . subdialogs . policies . radio_above , EINA_FALSE ) ;
e_widget_disabled_set ( e_config_runtime_info - > gui . subdialogs . policies . radio_right , EINA_FALSE ) ;
e_widget_disabled_set ( e_config_runtime_info - > gui . subdialogs . policies . radio_below , EINA_FALSE ) ;
e_widget_disabled_set ( e_config_runtime_info - > gui . subdialogs . policies . radio_left , EINA_FALSE ) ;
e_widget_disabled_set ( e_config_runtime_info - > gui . subdialogs . policies . radio_clone , EINA_FALSE ) ;
e_widget_disabled_set ( e_config_runtime_info - > gui . subdialogs . policies . radio_none , EINA_FALSE ) ;
}
if ( output_dialog_data - > crtc & & output_dialog_data - > crtc - > outputs )
{
2011-11-09 07:42:00 -08:00
output = ( E_Randr_Output_Info * ) eina_list_data_get ( eina_list_last ( output_dialog_data - > crtc - > outputs ) ) ;
2011-11-05 23:41:39 -07:00
}
else if ( output_dialog_data - > output )
{
output = output_dialog_data - > output ;
}
if ( ! output ) return ;
policy = output - > policy ;
e_config_runtime_info - > gui . selected_output_dd = output_dialog_data ;
//toggle the switch of the currently used policies
switch ( policy )
{
case ECORE_X_RANDR_OUTPUT_POLICY_RIGHT :
2011-11-09 07:42:00 -08:00
e_widget_radio_toggle_set ( e_config_runtime_info - > gui . subdialogs . policies . radio_right , EINA_TRUE ) ;
break ;
2011-11-05 23:41:39 -07:00
case ECORE_X_RANDR_OUTPUT_POLICY_BELOW :
2011-11-09 07:42:00 -08:00
e_widget_radio_toggle_set ( e_config_runtime_info - > gui . subdialogs . policies . radio_below , EINA_TRUE ) ;
break ;
2011-11-05 23:41:39 -07:00
case ECORE_X_RANDR_OUTPUT_POLICY_LEFT :
2011-11-09 07:42:00 -08:00
e_widget_radio_toggle_set ( e_config_runtime_info - > gui . subdialogs . policies . radio_left , EINA_TRUE ) ;
break ;
2011-11-05 23:41:39 -07:00
case ECORE_X_RANDR_OUTPUT_POLICY_CLONE :
2011-11-09 07:42:00 -08:00
e_widget_radio_toggle_set ( e_config_runtime_info - > gui . subdialogs . policies . radio_clone , EINA_TRUE ) ;
break ;
2011-11-05 23:41:39 -07:00
case ECORE_X_RANDR_OUTPUT_POLICY_NONE :
2011-11-09 07:42:00 -08:00
e_widget_radio_toggle_set ( e_config_runtime_info - > gui . subdialogs . policies . radio_none , EINA_TRUE ) ;
break ;
2011-11-05 23:41:39 -07:00
default : //== ECORE_X_RANDR_OUTPUT_POLICY_ABOVE:
2011-11-09 07:42:00 -08:00
e_widget_radio_toggle_set ( e_config_runtime_info - > gui . subdialogs . policies . radio_above , EINA_TRUE ) ;
2011-11-05 23:41:39 -07:00
}
}
2011-11-09 07:42:00 -08:00
void
2011-11-09 07:39:26 -08:00
dialog_subdialog_policies_keep_changes ( E_Config_Dialog_Data * cfdata )
2011-11-05 23:41:39 -07:00
{
E_Config_Randr_Dialog_Output_Dialog_Data * odd ;
Eina_List * iter ;
if ( ! cfdata ) return ;
2011-11-09 08:13:26 -08:00
EINA_LIST_FOREACH ( cfdata - > output_dialog_data_list , iter , odd )
2011-11-05 23:41:39 -07:00
{
odd - > previous_policy = odd - > new_policy ;
2011-11-18 00:07:48 -08:00
if ( odd - > output )
odd - > output - > policy = odd - > new_policy ;
2011-11-05 23:41:39 -07:00
}
}
2011-11-09 07:42:00 -08:00
void
2011-11-09 07:39:26 -08:00
dialog_subdialog_policies_discard_changes ( E_Config_Dialog_Data * cfdata )
2011-11-05 23:41:39 -07:00
{
E_Config_Randr_Dialog_Output_Dialog_Data * odd ;
Eina_List * iter ;
if ( ! cfdata ) return ;
2011-11-09 08:13:26 -08:00
EINA_LIST_FOREACH ( cfdata - > output_dialog_data_list , iter , odd )
2011-11-05 23:41:39 -07:00
{
odd - > new_policy = odd - > previous_policy ;
}
}
2011-11-09 07:42:00 -08:00