* e: SPANK ! SPANK ! SPANK ! Fix multiple case of segv.

SVN revision: 51135
This commit is contained in:
Cedric BAIL 2010-08-15 18:17:59 +00:00
parent 2f0f8628ae
commit 8cbf2d3907
1 changed files with 59 additions and 59 deletions

View File

@ -44,37 +44,37 @@
static Eina_Bool _e_randr_init (void); static Eina_Bool _e_randr_init (void);
static void _e_randr_shutdown (void); static void _e_randr_shutdown (void);
static inline void _e_randr_event_listeners_add (void); static void _e_randr_event_listeners_add (void);
static inline void _e_randr_event_listeners_remove (void); static void _e_randr_event_listeners_remove (void);
static Eina_Bool _e_randr_event_cb (void *data, int type, void *e); static Eina_Bool _e_randr_event_cb (void *data, int type, void *e);
static E_Randr_Screen_Info * _e_randr_screen_info_new (void); static E_Randr_Screen_Info * _e_randr_screen_info_new (void);
static void _e_randr_screen_info_free (E_Randr_Screen_Info *screen_info); static void _e_randr_screen_info_free (E_Randr_Screen_Info *screen_info);
static E_Randr_Screen_Info_11 * _e_randr_screen_info_11_new (void); static E_Randr_Screen_Info_11 * _e_randr_screen_info_11_new (void);
static const Eina_Bool _e_randr_screen_info_11_set (void); static Eina_Bool _e_randr_screen_info_11_set (void);
static void _e_randr_screen_info_11_free (E_Randr_Screen_Info_11 *screen_info_11); static void _e_randr_screen_info_11_free (E_Randr_Screen_Info_11 *screen_info_11);
static E_Randr_Screen_Info_12 * _e_randr_screen_info_12_new (void); static E_Randr_Screen_Info_12 * _e_randr_screen_info_12_new (void);
static const Eina_Bool _e_randr_screen_info_12_set (E_Randr_Screen_Info_12 *screen_info_12); static Eina_Bool _e_randr_screen_info_12_set (E_Randr_Screen_Info_12 *screen_info_12);
static void _e_randr_screen_info_12_free (E_Randr_Screen_Info_12 *screen_info_12); static void _e_randr_screen_info_12_free (E_Randr_Screen_Info_12 *screen_info_12);
static E_Randr_Output_Info * _e_randr_output_info_new (int nrequested); static E_Randr_Output_Info * _e_randr_output_info_new (int nrequested);
static void _e_randr_output_info_free (E_Randr_Output_Info *output_info); static void _e_randr_output_info_free (E_Randr_Output_Info *output_info);
static E_Randr_Crtc_Info * _e_randr_crtc_info_new (int nrequested); static E_Randr_Crtc_Info * _e_randr_crtc_info_new (int nrequested);
static void _e_randr_crtc_info_free (E_Randr_Crtc_Info *crtc_info); static void _e_randr_crtc_info_free (E_Randr_Crtc_Info *crtc_info);
static inline Eina_Bool _e_randr_screen_outputs_init (void); static Eina_Bool _e_randr_screen_outputs_init (void);
static inline Eina_Bool _e_randr_screen_crtcs_init (void); static Eina_Bool _e_randr_screen_crtcs_init (void);
static inline Eina_Bool _e_randr_output_modes_add (E_Randr_Output_Info *output_info); static Eina_Bool _e_randr_output_modes_add (E_Randr_Output_Info *output_info);
static inline void _e_randr_notify_crtc_mode_change (E_Randr_Crtc_Info *crtc_info); static void _e_randr_notify_crtc_mode_change (E_Randr_Crtc_Info *crtc_info);
static inline void _e_randr_notify_output_change (E_Randr_Output_Info *output_info); static void _e_randr_notify_output_change (E_Randr_Output_Info *output_info);
static inline Ecore_X_Randr_Mode_Info * _e_randr_mode_info_get (Ecore_X_Randr_Mode mode); static Ecore_X_Randr_Mode_Info * _e_randr_mode_info_get (Ecore_X_Randr_Mode mode);
static inline E_Randr_Crtc_Info * _e_randr_crtc_info_get (Ecore_X_Randr_Crtc crtc); static E_Randr_Crtc_Info * _e_randr_crtc_info_get (Ecore_X_Randr_Crtc crtc);
static inline E_Randr_Output_Info * _e_randr_output_info_get (Ecore_X_Randr_Output output); static E_Randr_Output_Info * _e_randr_output_info_get (Ecore_X_Randr_Output output);
static void _e_randr_output_info_set (E_Randr_Output_Info *output_info); static void _e_randr_output_info_set (E_Randr_Output_Info *output_info);
static const inline Eina_Bool _e_randr_outputs_connected (Eina_List *outputs_info); static Eina_Bool _e_randr_outputs_connected (Eina_List *outputs_info);
static void _e_randr_crtc_info_set (E_Randr_Crtc_Info *crtc_info); static void _e_randr_crtc_info_set (E_Randr_Crtc_Info *crtc_info);
static const inline E_Randr_Crtc_Info * _e_randr_policy_crtc_get (E_Randr_Crtc_Info* but, E_Randr_Crtc_Info *hint, Ecore_X_Randr_Output_Policy policy); static const E_Randr_Crtc_Info * _e_randr_policy_crtc_get (E_Randr_Crtc_Info* but, E_Randr_Crtc_Info *hint, Ecore_X_Randr_Output_Policy policy);
static const inline Eina_Bool _e_randr_outputs_connected (Eina_List *outputs_info); static Eina_Bool _e_randr_outputs_connected (Eina_List *outputs_info);
static inline Ecore_X_Randr_Output * _e_randr_outputs_to_array (Eina_List *outputs_info); static Ecore_X_Randr_Output * _e_randr_outputs_to_array (Eina_List *outputs_info);
static int _e_randr_config_find_suiting_config_11 (E_Randr_Screen_Restore_Info_11** restore_info); static int _e_randr_config_find_suiting_config_11 (E_Randr_Screen_Restore_Info_11** restore_info);
static inline E_Randr_Screen_Restore_Info_12 * _e_randr_config_find_suiting_config_12 (void); static E_Randr_Screen_Restore_Info_12 * _e_randr_config_find_suiting_config_12 (void);
static Eina_Bool _e_randr_config_enable_11 (int size_index, Ecore_X_Randr_Refresh_Rate refresh_rate, Ecore_X_Randr_Orientation orientation); static Eina_Bool _e_randr_config_enable_11 (int size_index, Ecore_X_Randr_Refresh_Rate refresh_rate, Ecore_X_Randr_Orientation orientation);
static Eina_Bool _e_randr_config_enable_12 (const E_Randr_Screen_Restore_Info_12 *restore_info); static Eina_Bool _e_randr_config_enable_12 (const E_Randr_Screen_Restore_Info_12 *restore_info);
static Eina_Bool _e_randr_try_enable_output (E_Randr_Output_Info *output_info, Eina_Bool force); static Eina_Bool _e_randr_try_enable_output (E_Randr_Output_Info *output_info, Eina_Bool force);
@ -86,14 +86,14 @@ static int _outputs_size_sort_cb
static int _modes_size_sort_cb (const void *d1, const void *d2); static int _modes_size_sort_cb (const void *d1, const void *d2);
static Eina_List * _e_randr_outputs_common_modes_get (Eina_List *outputs, Ecore_X_Randr_Mode_Info *max_size_mode); static Eina_List * _e_randr_outputs_common_modes_get (Eina_List *outputs, Ecore_X_Randr_Mode_Info *max_size_mode);
static Ecore_X_Randr_Mode_Info * _e_randr_outputs_common_mode_max_get (Eina_List *outputs, Ecore_X_Randr_Mode_Info *max_size_mode); static Ecore_X_Randr_Mode_Info * _e_randr_outputs_common_mode_max_get (Eina_List *outputs, Ecore_X_Randr_Mode_Info *max_size_mode);
static inline Ecore_X_Randr_Mode_Info * _e_randr_mode_geo_identical_find (Eina_List *modes, Ecore_X_Randr_Mode_Info *mode); static Ecore_X_Randr_Mode_Info * _e_randr_mode_geo_identical_find (Eina_List *modes, Ecore_X_Randr_Mode_Info *mode);
static inline Eina_Bool _e_randr_crtc_mode_intersects_crtcs (E_Randr_Crtc_Info *crtc_info, Ecore_X_Randr_Mode_Info *mode); static Eina_Bool _e_randr_crtc_mode_intersects_crtcs (E_Randr_Crtc_Info *crtc_info, Ecore_X_Randr_Mode_Info *mode);
static inline Eina_Bool _e_randr_crtc_outputs_mode_max_set (E_Randr_Crtc_Info *crtc_info); static Eina_Bool _e_randr_crtc_outputs_mode_max_set (E_Randr_Crtc_Info *crtc_info);
static Eina_Bool _e_randr_crtcs_clone_crtc_removed (E_Randr_Crtc_Info *former_clone); static Eina_Bool _e_randr_crtcs_clone_crtc_removed (E_Randr_Crtc_Info *former_clone);
static void _e_randr_screen_primary_output_assign (E_Randr_Output_Info *removed); static void _e_randr_screen_primary_output_assign (E_Randr_Output_Info *removed);
static void _e_randr_output_info_hw_info_set (E_Randr_Output_Info *output_info); static void _e_randr_output_info_hw_info_set (E_Randr_Output_Info *output_info);
static void _e_randr_output_hw_info_free (E_Randr_Output_Info *output_info); static void _e_randr_output_hw_info_free (E_Randr_Output_Info *output_info);
static const inline Eina_Bool _e_randr_outputs_are_clones (E_Randr_Output_Info *output_info, Eina_List *outputs); static Eina_Bool _e_randr_outputs_are_clones (E_Randr_Output_Info *output_info, Eina_List *outputs);
E_Randr_Screen_Info * e_randr_screen_info = NULL; E_Randr_Screen_Info * e_randr_screen_info = NULL;
static Eina_List * _e_randr_event_handlers = NULL; static Eina_List * _e_randr_event_handlers = NULL;
@ -192,7 +192,7 @@ _e_randr_screen_info_new(void)
/** /**
* @param screen_info the screen info to free. * @param screen_info the screen info to free.
*/ */
static inline void static void
_e_randr_screen_info_free(E_Randr_Screen_Info *screen_info) _e_randr_screen_info_free(E_Randr_Screen_Info *screen_info)
{ {
if (!screen_info || !(screen_info->rrvd_info.randr_info_11)) return; if (!screen_info || !(screen_info->rrvd_info.randr_info_11)) return;
@ -281,7 +281,7 @@ _e_randr_screen_info_12_new(void)
return ret; return ret;
} }
static const Eina_Bool static Eina_Bool
_e_randr_screen_info_12_set(E_Randr_Screen_Info_12 *screen_info) _e_randr_screen_info_12_set(E_Randr_Screen_Info_12 *screen_info)
{ {
E_RANDR_NO_12_RET(EINA_FALSE); E_RANDR_NO_12_RET(EINA_FALSE);
@ -292,7 +292,7 @@ _e_randr_screen_info_12_set(E_Randr_Screen_Info_12 *screen_info)
return EINA_TRUE; return EINA_TRUE;
} }
static const Eina_Bool static Eina_Bool
_e_randr_screen_info_11_set(void) _e_randr_screen_info_11_set(void)
{ {
E_RANDR_NO_11_RET(EINA_FALSE); E_RANDR_NO_11_RET(EINA_FALSE);
@ -424,7 +424,7 @@ _e_randr_crtc_info_free(E_Randr_Crtc_Info *crtc_info)
* @return E_Randr_Output_Info element, or it could not be * @return E_Randr_Output_Info element, or it could not be
* created, NULL * created, NULL
*/ */
static inline E_Randr_Output_Info * static E_Randr_Output_Info *
_e_randr_output_info_new(int nrequested) _e_randr_output_info_new(int nrequested)
{ {
E_Randr_Output_Info *ret = NULL; E_Randr_Output_Info *ret = NULL;
@ -524,7 +524,7 @@ _e_randr_crtc_info_set(E_Randr_Crtc_Info *crtc_info)
* looks up modes supported by an output and adds them - if they are not already * looks up modes supported by an output and adds them - if they are not already
* known by - to the screen's information struct ant the output_info itself * known by - to the screen's information struct ant the output_info itself
*/ */
static inline Eina_Bool static Eina_Bool
_e_randr_output_modes_add(E_Randr_Output_Info *output_info) _e_randr_output_modes_add(E_Randr_Output_Info *output_info)
{ {
Ecore_X_Randr_Mode *modes; Ecore_X_Randr_Mode *modes;
@ -540,7 +540,7 @@ _e_randr_output_modes_add(E_Randr_Output_Info *output_info)
added_yet = EINA_FALSE; added_yet = EINA_FALSE;
EINA_LIST_FOREACH(e_randr_screen_info->rrvd_info.randr_info_12->modes, iter, mode_info) EINA_LIST_FOREACH(e_randr_screen_info->rrvd_info.randr_info_12->modes, iter, mode_info)
{ {
if (mode_info->xid == modes[nmodes]) if (mode_info && mode_info->xid == modes[nmodes])
{ {
added_yet = EINA_TRUE; added_yet = EINA_TRUE;
break; break;
@ -560,7 +560,7 @@ _e_randr_output_modes_add(E_Randr_Output_Info *output_info)
return EINA_TRUE; return EINA_TRUE;
} }
static inline Eina_Bool static Eina_Bool
_e_randr_screen_crtcs_init(void) _e_randr_screen_crtcs_init(void)
{ {
Ecore_X_Randr_Crtc *crtcs = NULL; Ecore_X_Randr_Crtc *crtcs = NULL;
@ -595,9 +595,7 @@ ecore_x_randr_screen_crtcs_init_fail_free_crtcs:
return EINA_FALSE; return EINA_FALSE;
} }
static Eina_Bool
static inline Eina_Bool
_e_randr_screen_outputs_init(void) _e_randr_screen_outputs_init(void)
{ {
Ecore_X_Randr_Output *outputs; Ecore_X_Randr_Output *outputs;
@ -631,7 +629,7 @@ _e_randr_screen_outputs_init_fail_free_outputs:
return EINA_FALSE; return EINA_FALSE;
} }
static inline Ecore_X_Randr_Mode_Info* static Ecore_X_Randr_Mode_Info*
_e_randr_mode_info_get(Ecore_X_Randr_Mode mode) _e_randr_mode_info_get(Ecore_X_Randr_Mode mode)
{ {
Eina_List *iter; Eina_List *iter;
@ -640,12 +638,12 @@ _e_randr_mode_info_get(Ecore_X_Randr_Mode mode)
E_RANDR_NO_MODE_RET(mode, NULL); E_RANDR_NO_MODE_RET(mode, NULL);
EINA_LIST_FOREACH(e_randr_screen_info->rrvd_info.randr_info_12->modes, iter, mode_info) EINA_LIST_FOREACH(e_randr_screen_info->rrvd_info.randr_info_12->modes, iter, mode_info)
{ {
if (mode_info->xid == mode) return mode_info; if (mode_info && mode_info->xid == mode) return mode_info;
} }
return NULL; return NULL;
} }
static inline E_Randr_Output_Info* static E_Randr_Output_Info*
_e_randr_output_info_get(Ecore_X_Randr_Output output) _e_randr_output_info_get(Ecore_X_Randr_Output output)
{ {
Eina_List *iter; Eina_List *iter;
@ -654,12 +652,12 @@ _e_randr_output_info_get(Ecore_X_Randr_Output output)
E_RANDR_NO_OUTPUTS_RET(NULL); E_RANDR_NO_OUTPUTS_RET(NULL);
EINA_LIST_FOREACH(e_randr_screen_info->rrvd_info.randr_info_12->outputs, iter, output_info) EINA_LIST_FOREACH(e_randr_screen_info->rrvd_info.randr_info_12->outputs, iter, output_info)
{ {
if (output_info->xid == output) return output_info; if (output_info && output_info->xid == output) return output_info;
} }
return NULL; return NULL;
} }
static inline E_Randr_Crtc_Info* static E_Randr_Crtc_Info*
_e_randr_crtc_info_get(Ecore_X_Randr_Crtc crtc) _e_randr_crtc_info_get(Ecore_X_Randr_Crtc crtc)
{ {
Eina_List *iter; Eina_List *iter;
@ -668,7 +666,7 @@ _e_randr_crtc_info_get(Ecore_X_Randr_Crtc crtc)
E_RANDR_NO_CRTCS_RET(NULL); E_RANDR_NO_CRTCS_RET(NULL);
EINA_LIST_FOREACH(e_randr_screen_info->rrvd_info.randr_info_12->crtcs, iter, crtc_info) EINA_LIST_FOREACH(e_randr_screen_info->rrvd_info.randr_info_12->crtcs, iter, crtc_info)
{ {
if (crtc_info->xid == crtc) return crtc_info; if (crtc_info && crtc_info->xid == crtc) return crtc_info;
} }
return NULL; return NULL;
} }
@ -819,9 +817,10 @@ _e_randr_event_cb(void *data, int type, void *ev)
//let's try to get a proper config for the new setup and crop the //let's try to get a proper config for the new setup and crop the
//screen afterwards. //screen afterwards.
if((restore_info = _e_randr_config_find_suiting_config_12())) if((restore_info = _e_randr_config_find_suiting_config_12()))
//in case we didn't have, init it anyway... {
//_e_randr_config_enable_12(restore_info); //in case we didn't have, init it anyway...
; //_e_randr_config_enable_12(restore_info);
}
} }
_e_randr_notify_output_change(output_info); _e_randr_notify_output_change(output_info);
_e_randr_output_hw_info_free(output_info); _e_randr_output_hw_info_free(output_info);
@ -844,7 +843,7 @@ _e_randr_event_cb(void *data, int type, void *ev)
return ECORE_CALLBACK_RENEW; return ECORE_CALLBACK_RENEW;
} }
static inline void static void
_e_randr_event_listeners_add(void) _e_randr_event_listeners_add(void)
{ {
if (E_RANDR_NO_12) return; if (E_RANDR_NO_12) return;
@ -854,7 +853,7 @@ _e_randr_event_listeners_add(void)
_e_randr_event_handlers= eina_list_append(_e_randr_event_handlers, ecore_event_handler_add(ECORE_X_EVENT_RANDR_OUTPUT_PROPERTY_NOTIFY, _e_randr_event_cb, NULL)); _e_randr_event_handlers= eina_list_append(_e_randr_event_handlers, ecore_event_handler_add(ECORE_X_EVENT_RANDR_OUTPUT_PROPERTY_NOTIFY, _e_randr_event_cb, NULL));
} }
static inline void static void
_e_randr_event_listeners_remove(void) _e_randr_event_listeners_remove(void)
{ {
Ecore_Event_Handler *_event_handler = NULL; Ecore_Event_Handler *_event_handler = NULL;
@ -862,7 +861,7 @@ _e_randr_event_listeners_remove(void)
ecore_event_handler_del(_event_handler); ecore_event_handler_del(_event_handler);
} }
static inline void static void
_e_randr_notify_crtc_mode_change(E_Randr_Crtc_Info *crtc_info) _e_randr_notify_crtc_mode_change(E_Randr_Crtc_Info *crtc_info)
{ {
// E_Notification *n; // E_Notification *n;
@ -877,7 +876,7 @@ _e_randr_notify_crtc_mode_change(E_Randr_Crtc_Info *crtc_info)
// e_notification_unref(n); // e_notification_unref(n);
} }
} }
static inline void static void
_e_randr_notify_output_change(E_Randr_Output_Info *output_info) _e_randr_notify_output_change(E_Randr_Output_Info *output_info)
{ {
// E_Notification *n; // E_Notification *n;
@ -905,7 +904,7 @@ _e_randr_notify_output_change(E_Randr_Output_Info *output_info)
* instead of trying to fill gaps like tetris. Though this could be done by * instead of trying to fill gaps like tetris. Though this could be done by
* simply implementing another policy. * simply implementing another policy.
*/ */
static const inline E_Randr_Crtc_Info* static const E_Randr_Crtc_Info*
_e_randr_policy_crtc_get(E_Randr_Crtc_Info *but, E_Randr_Crtc_Info *hint, Ecore_X_Randr_Output_Policy policy) _e_randr_policy_crtc_get(E_Randr_Crtc_Info *but, E_Randr_Crtc_Info *hint, Ecore_X_Randr_Output_Policy policy)
{ {
Eina_List *iter; Eina_List *iter;
@ -929,7 +928,7 @@ _e_randr_policy_crtc_get(E_Randr_Crtc_Info *but, E_Randr_Crtc_Info *hint, Ecore_
case ECORE_X_RANDR_OUTPUT_POLICY_ABOVE: case ECORE_X_RANDR_OUTPUT_POLICY_ABOVE:
EINA_LIST_FOREACH(e_randr_screen_info->rrvd_info.randr_info_12->crtcs, iter, crtc_info) EINA_LIST_FOREACH(e_randr_screen_info->rrvd_info.randr_info_12->crtcs, iter, crtc_info)
{ {
if ((crtc_info != but) && (crtc_info->geometry.y <= ret->geometry.y)) if (crtc_info && (crtc_info != but) && (crtc_info->geometry.y <= ret->geometry.y))
{ {
ret = crtc_info; ret = crtc_info;
} }
@ -938,7 +937,7 @@ _e_randr_policy_crtc_get(E_Randr_Crtc_Info *but, E_Randr_Crtc_Info *hint, Ecore_
case ECORE_X_RANDR_OUTPUT_POLICY_RIGHT: case ECORE_X_RANDR_OUTPUT_POLICY_RIGHT:
EINA_LIST_FOREACH(e_randr_screen_info->rrvd_info.randr_info_12->crtcs, iter, crtc_info) EINA_LIST_FOREACH(e_randr_screen_info->rrvd_info.randr_info_12->crtcs, iter, crtc_info)
{ {
if ((crtc_info != but) && ((crtc_info->geometry.x + crtc_info->geometry.w) >= (ret->geometry.x + ret->geometry.w))) if (crtc_info && (crtc_info != but) && ((crtc_info->geometry.x + crtc_info->geometry.w) >= (ret->geometry.x + ret->geometry.w)))
{ {
ret = crtc_info; ret = crtc_info;
} }
@ -948,7 +947,7 @@ _e_randr_policy_crtc_get(E_Randr_Crtc_Info *but, E_Randr_Crtc_Info *hint, Ecore_
case ECORE_X_RANDR_OUTPUT_POLICY_BELOW: case ECORE_X_RANDR_OUTPUT_POLICY_BELOW:
EINA_LIST_FOREACH(e_randr_screen_info->rrvd_info.randr_info_12->crtcs, iter, crtc_info) EINA_LIST_FOREACH(e_randr_screen_info->rrvd_info.randr_info_12->crtcs, iter, crtc_info)
{ {
if ((crtc_info != but) && ((crtc_info->geometry.y + crtc_info->geometry.h) >= (ret->geometry.y + ret->geometry.h))) if (crtc_info && (crtc_info != but) && ((crtc_info->geometry.y + crtc_info->geometry.h) >= (ret->geometry.y + ret->geometry.h)))
{ {
ret = crtc_info; ret = crtc_info;
} }
@ -958,7 +957,7 @@ _e_randr_policy_crtc_get(E_Randr_Crtc_Info *but, E_Randr_Crtc_Info *hint, Ecore_
case ECORE_X_RANDR_OUTPUT_POLICY_LEFT: case ECORE_X_RANDR_OUTPUT_POLICY_LEFT:
EINA_LIST_FOREACH(e_randr_screen_info->rrvd_info.randr_info_12->crtcs, iter, crtc_info) EINA_LIST_FOREACH(e_randr_screen_info->rrvd_info.randr_info_12->crtcs, iter, crtc_info)
{ {
if ((crtc_info != but) && (crtc_info->geometry.x <= ret->geometry.x)) if (crtc_info && (crtc_info != but) && (crtc_info->geometry.x <= ret->geometry.x))
{ {
ret = crtc_info; ret = crtc_info;
} }
@ -975,7 +974,7 @@ _e_randr_policy_crtc_get(E_Randr_Crtc_Info *but, E_Randr_Crtc_Info *hint, Ecore_
return ret; return ret;
} }
static const inline Eina_Bool static Eina_Bool
_e_randr_outputs_connected(Eina_List *outputs_info) _e_randr_outputs_connected(Eina_List *outputs_info)
{ {
Eina_List *iter; Eina_List *iter;
@ -1030,7 +1029,7 @@ _e_randr_config_enable_12(const E_Randr_Screen_Restore_Info_12* restore_info)
return EINA_FALSE; return EINA_FALSE;
} }
static inline int static int
_e_randr_config_find_suiting_config_11(E_Randr_Screen_Restore_Info_11 **restore_info) _e_randr_config_find_suiting_config_11(E_Randr_Screen_Restore_Info_11 **restore_info)
{ {
E_RANDR_NO_11_RET(Ecore_X_Randr_None); E_RANDR_NO_11_RET(Ecore_X_Randr_None);
@ -1044,6 +1043,7 @@ _e_randr_config_find_suiting_config_11(E_Randr_Screen_Restore_Info_11 **restore_
EINA_LIST_FOREACH(e_config->screen_info, cfg_screen_restore_info_iter, screen_restore_info) EINA_LIST_FOREACH(e_config->screen_info, cfg_screen_restore_info_iter, screen_restore_info)
{ {
if (!screen_restore_info) continue ;
if (screen_restore_info->randr_version != ECORE_X_RANDR_1_1) continue; if (screen_restore_info->randr_version != ECORE_X_RANDR_1_1) continue;
restore_info_11 = screen_restore_info->rrvd_restore_info.restore_info_11; restore_info_11 = screen_restore_info->rrvd_restore_info.restore_info_11;
if((sizes = ecore_x_randr_screen_primary_output_sizes_get(e_randr_screen_info->root, &nsizes))) if((sizes = ecore_x_randr_screen_primary_output_sizes_get(e_randr_screen_info->root, &nsizes)))
@ -1076,7 +1076,7 @@ _e_randr_config_find_suiting_config_11(E_Randr_Screen_Restore_Info_11 **restore_
/** /**
* @Brief find configuration with the most hardware currently available * @Brief find configuration with the most hardware currently available
*/ */
static inline E_Randr_Screen_Restore_Info_12 * static E_Randr_Screen_Restore_Info_12 *
_e_randr_config_find_suiting_config_12(void) _e_randr_config_find_suiting_config_12(void)
{ {
//TODO: write geometry based loading //TODO: write geometry based loading
@ -1111,7 +1111,7 @@ _e_randr_config_find_suiting_config_12(void)
} }
static inline Ecore_X_Randr_Output * static Ecore_X_Randr_Output *
_e_randr_outputs_to_array(Eina_List *outputs_info) _e_randr_outputs_to_array(Eina_List *outputs_info)
{ {
Ecore_X_Randr_Output *ret = NULL; Ecore_X_Randr_Output *ret = NULL;
@ -1121,7 +1121,7 @@ _e_randr_outputs_to_array(Eina_List *outputs_info)
if (!outputs_info || !(ret = malloc(sizeof(Ecore_X_Randr_Output) * eina_list_count(outputs_info)))) return NULL; if (!outputs_info || !(ret = malloc(sizeof(Ecore_X_Randr_Output) * eina_list_count(outputs_info)))) return NULL;
EINA_LIST_FOREACH(outputs_info, output_iter, output_info) EINA_LIST_FOREACH(outputs_info, output_iter, output_info)
ret[i++] = output_info->xid; ret[i++] = output_info ? output_info->xid : NULL;
return ret; return ret;
} }
@ -1150,7 +1150,7 @@ _e_randr_try_enable_output(E_Randr_Output_Info *output_info, Eina_Bool force)
*/ */
EINA_LIST_FOREACH(output_info->possible_crtcs, iter, crtc_info) EINA_LIST_FOREACH(output_info->possible_crtcs, iter, crtc_info)
{ {
if (!crtc_info->current_mode || force) if (crtc_info && (!crtc_info->current_mode || force))
{ {
usable_crtc = crtc_info; usable_crtc = crtc_info;
break; break;
@ -1469,7 +1469,7 @@ _modes_size_sort_cb(const void *d1, const void *d2)
* returns a mode within a given list of modes that is gemetrically identical. * returns a mode within a given list of modes that is gemetrically identical.
* If none is found, NULL is returned. * If none is found, NULL is returned.
*/ */
static inline Ecore_X_Randr_Mode_Info * static Ecore_X_Randr_Mode_Info *
_e_randr_mode_geo_identical_find(Eina_List *modes, Ecore_X_Randr_Mode_Info *mode) _e_randr_mode_geo_identical_find(Eina_List *modes, Ecore_X_Randr_Mode_Info *mode)
{ {
Eina_List *iter; Eina_List *iter;
@ -1487,7 +1487,7 @@ _e_randr_mode_geo_identical_find(Eina_List *modes, Ecore_X_Randr_Mode_Info *mode
* reconfigures a CRTC enabling the highest resolution amongst its outputs, * reconfigures a CRTC enabling the highest resolution amongst its outputs,
* without touching any other CRTC currently activated * without touching any other CRTC currently activated
*/ */
static inline Eina_Bool static Eina_Bool
_e_randr_crtc_outputs_mode_max_set(E_Randr_Crtc_Info *crtc_info) _e_randr_crtc_outputs_mode_max_set(E_Randr_Crtc_Info *crtc_info)
{ {
Ecore_X_Randr_Mode_Info *mode_info; Ecore_X_Randr_Mode_Info *mode_info;
@ -1523,7 +1523,7 @@ _e_randr_crtc_outputs_mode_max_set(E_Randr_Crtc_Info *crtc_info)
* returns EINA_TRUE if given CRTC would intersect with other CRTCs if set to * returns EINA_TRUE if given CRTC would intersect with other CRTCs if set to
* given mode * given mode
*/ */
static inline Eina_Bool static Eina_Bool
_e_randr_crtc_mode_intersects_crtcs(E_Randr_Crtc_Info *crtc_info, Ecore_X_Randr_Mode_Info *mode) _e_randr_crtc_mode_intersects_crtcs(E_Randr_Crtc_Info *crtc_info, Ecore_X_Randr_Mode_Info *mode)
{ {
Eina_List *iter; Eina_List *iter;
@ -1732,7 +1732,7 @@ _e_randr_output_hw_info_free(E_Randr_Output_Info *output_info)
/* /*
* checks whether a given output is a common clone of the given list's outputs * checks whether a given output is a common clone of the given list's outputs
*/ */
static const inline Eina_Bool static Eina_Bool
_e_randr_outputs_are_clones(E_Randr_Output_Info *output_info, Eina_List *outputs) _e_randr_outputs_are_clones(E_Randr_Output_Info *output_info, Eina_List *outputs)
{ {
E_Randr_Output_Info *output; E_Randr_Output_Info *output;