diff --git a/src/bin/e_randr.c b/src/bin/e_randr.c
deleted file mode 100644
index a8cf3a7ed..000000000
--- a/src/bin/e_randr.c
+++ /dev/null
@@ -1,158 +0,0 @@
-/*
- * vim:ts=8:sw=3:sts=8:expandtab:cino=>5n-3f0^-2{2
- */
-#include "e.h"
-#include "e_randr_private.h"
-
-#define ECORE_X_RANDR_1_1 ((1 << 16) | 1)
-#define ECORE_X_RANDR_1_2 ((1 << 16) | 2)
-#define ECORE_X_RANDR_1_3 ((1 << 16) | 3)
-
-#define Ecore_X_Randr_None 0
-#define Ecore_X_Randr_Unset -1
-
-/*
- * Save mechanism:
- * Single monitor:
- * - Save monitor using the resolution
- *
- * Multiple monitors:
- * - Use the EDID information to make sure we restore the right monitor.
- * - Depend on the sequence in which the XIDs are returned provided by the X
- * server. This means that relative indexes are used for setup store/restore.
- *
- */
-
-static Eina_Bool _init(void);
-static void _shutdown(void);
-static Eina_Bool _screen_info_refresh(void);
-static Eina_Bool _e_event_config_loaded_cb(void *data, int type, void *e);
-static void _event_listeners_add(void);
-static void _event_listeners_remove(void);
-
-EAPI E_Randr_Screen_Info e_randr_screen_info;
-static Eina_List *_event_handlers = NULL;
-
-EAPI Eina_Bool
-e_randr_screen_info_refresh(void)
-{
- return _screen_info_refresh();
-}
-
-EINTERN Eina_Bool
-e_randr_init(void)
-{
- return _init();
-}
-
-EINTERN int
-e_randr_shutdown(void)
-{
- _shutdown();
- return 1;
-}
-
-static Eina_Bool
-_init(void)
-{
- if (!e_randr_screen_info_refresh())
- return EINA_FALSE;
- _event_listeners_add();
-
- if (e_config->randr_serialized_setup)
- {
- e_randr_try_restore_configuration();
-
- if (e_randr_screen_info.randr_version >= ECORE_X_RANDR_1_2)
- {
- if (e_config->randr_serialized_setup->outputs_policies)
- _12_policies_restore();
- }
- }
-
- return EINA_TRUE;
-}
-
-static void
-_shutdown(void)
-{
- if (e_randr_screen_info.randr_version == ECORE_X_RANDR_1_1)
- {
- _11_screen_info_free(e_randr_screen_info.rrvd_info.randr_info_11);
- e_randr_screen_info.rrvd_info.randr_info_11 = NULL;
- }
- else if (e_randr_screen_info.randr_version >= ECORE_X_RANDR_1_2)
- {
- _12_screen_info_free(e_randr_screen_info.rrvd_info.randr_info_12);
- e_randr_screen_info.rrvd_info.randr_info_12 = NULL;
- }
- _event_listeners_remove();
-}
-
-/**
- * @return EINA_TRUE if info could be refreshed, else EINA_FALSE
- */
-static Eina_Bool
-_screen_info_refresh(void)
-{
- Ecore_X_Window *roots;
- Ecore_X_Window root;
- int n;
-
- EINA_SAFETY_ON_FALSE_RETURN_VAL(ecore_x_randr_query(), EINA_FALSE);
-
- if (!(roots = ecore_x_window_root_list(&n))) return EINA_FALSE;
- /* first (and only) root window */
- root = roots[0];
- free(roots);
-
- e_randr_screen_info.randr_version = ecore_x_randr_version_get();
- e_randr_screen_info.root = root;
- e_randr_screen_info.rrvd_info.randr_info_11 = NULL;
-
- // Value set/retrieval helper functions
- if (e_randr_screen_info.randr_version == ECORE_X_RANDR_1_1)
- {
- return _11_screen_info_refresh();
- }
- else if (e_randr_screen_info.randr_version >= ECORE_X_RANDR_1_2)
- {
- return _12_screen_info_refresh();
- }
-
- return EINA_FALSE;
-}
-
-static Eina_Bool
-_e_event_config_loaded_cb(void *data __UNUSED__, int type, void *ev __UNUSED__)
-{
- if (type != E_EVENT_CONFIG_LOADED) return EINA_TRUE;
-
- return e_randr_try_restore_configuration();
-}
-
-static void
-_event_listeners_add(void)
-{
- _event_handlers = eina_list_append(_event_handlers, ecore_event_handler_add(E_EVENT_CONFIG_LOADED, _e_event_config_loaded_cb, NULL));
-
- if (e_randr_screen_info.randr_version >= ECORE_X_RANDR_1_2)
- {
- _12_event_listeners_add();
- }
-}
-
-// "Free" helper functions
-static void
-_event_listeners_remove(void)
-{
- Ecore_Event_Handler *_event_handler = NULL;
- EINA_LIST_FREE(_event_handlers, _event_handler)
- ecore_event_handler_del(_event_handler);
-
- if (e_randr_screen_info.randr_version >= ECORE_X_RANDR_1_2)
- {
- _12_event_listeners_remove();
- }
-}
-
diff --git a/src/bin/e_randr.h b/src/bin/e_randr.h
deleted file mode 100644
index 361760e7a..000000000
--- a/src/bin/e_randr.h
+++ /dev/null
@@ -1,200 +0,0 @@
-#ifdef E_TYPEDEFS
-
-typedef struct _E_Randr_Crtc_Info E_Randr_Crtc_Info;
-typedef struct _E_Randr_Edid_Hash E_Randr_Edid_Hash;
-typedef struct _E_Randr_Monitor_Info E_Randr_Monitor_Info;
-typedef struct _E_Randr_Output_Info E_Randr_Output_Info;
-typedef struct _E_Randr_Screen_Info_11 E_Randr_Screen_Info_11;
-typedef struct _E_Randr_Screen_Info_12 E_Randr_Screen_Info_12;
-typedef union _E_Randr_Screen_RRVD_Info E_Randr_Screen_RRVD_Info;
-typedef struct _E_Randr_Screen_Info E_Randr_Screen_Info;
-typedef struct _E_Randr_Serialized_Output_Policy E_Randr_Serialized_Output_Policy;
-typedef struct _E_Randr_Serialized_Output E_Randr_Serialized_Output;
-typedef struct _E_Randr_Serialized_Crtc E_Randr_Serialized_Crtc;
-typedef struct _E_Randr_Serialized_Setup_11 E_Randr_Serialized_Setup_11;
-typedef struct _E_Randr_Serialized_Setup_12 E_Randr_Serialized_Setup_12;
-typedef struct _E_Randr_Serialized_Setup E_Randr_Serialized_Setup;
-
-typedef enum _E_Randr_Configuration_Store_Modifier
-{
- E_RANDR_CONFIGURATION_STORE_POLICIES = (1 << 0),
- E_RANDR_CONFIGURATION_STORE_RESOLUTIONS = (1 << 1),
- E_RANDR_CONFIGURATION_STORE_ARRANGEMENT = (1 << 2),
- E_RANDR_CONFIGURATION_STORE_ORIENTATIONS = (1 << 3),
- E_RANDR_CONFIGURATION_STORE_ALL = (
- E_RANDR_CONFIGURATION_STORE_POLICIES
- | E_RANDR_CONFIGURATION_STORE_RESOLUTIONS
- | E_RANDR_CONFIGURATION_STORE_ARRANGEMENT
- | E_RANDR_CONFIGURATION_STORE_ORIENTATIONS)
-} E_Randr_Configuration_Store_Modifier;
-
-#else
-#ifndef E_RANDR_H
-#define E_RANDR_H
-
-struct _E_Randr_Crtc_Info
-{
- Ecore_X_Randr_Crtc xid;
- Eina_Rectangle geometry;
- Eina_Rectangle panning;
- Eina_Rectangle tracking;
- Eina_Rectangle border;
- Ecore_X_Randr_Orientation current_orientation;
- Ecore_X_Randr_Orientation orientations;
- Ecore_X_Randr_Crtc_Gamma **gamma_ramps;
- int gamma_ramp_size;
- Eina_List *outputs;
- Eina_List *possible_outputs;
- Eina_List *outputs_common_modes;
- Ecore_X_Randr_Mode_Info *current_mode;
-};
-
-struct _E_Randr_Edid_Hash
-{
- int hash;
-};
-
-struct _E_Randr_Monitor_Info
-{
- Eina_List *modes;
- Eina_List *preferred_modes;
- Ecore_X_Randr_Screen_Size size_mm;
- unsigned char *edid;
- unsigned long edid_length;
- E_Randr_Edid_Hash edid_hash;
- int max_backlight;
- double backlight_level;
-};
-
-struct _E_Randr_Output_Info
-{
- Ecore_X_Randr_Output xid;
- Eina_Stringshare *name;
- int name_length;
- E_Randr_Crtc_Info *crtc;
- Eina_List *wired_clones;
- Ecore_X_Randr_Signal_Format signalformats;
- Ecore_X_Randr_Signal_Format signalformat;
- int connector_number;
- Ecore_X_Randr_Connector_Type connector_type;
- Ecore_X_Randr_Connection_Status connection_status;
- Ecore_X_Randr_Output_Policy policy;
- Eina_List *possible_crtcs;
- Eina_List *compatibility_list;
- Ecore_X_Render_Subpixel_Order subpixel_order;
- /*
- * Attached Monitor specific:
- */
- E_Randr_Monitor_Info *monitor;
-};
-
-struct _E_Randr_Screen_Info_11
-{
- Ecore_X_Randr_Screen_Size_MM *sizes;
- int nsizes;
- int csize_index;
- Ecore_X_Randr_Orientation corientation;
- Ecore_X_Randr_Orientation orientations;
- Ecore_X_Randr_Refresh_Rate **rates;
- int *nrates; // size is nsizes
- Ecore_X_Randr_Refresh_Rate current_rate;
-};
-
-struct _E_Randr_Screen_Info_12
-{
- Ecore_X_Randr_Screen_Size min_size;
- Ecore_X_Randr_Screen_Size max_size;
- Ecore_X_Randr_Screen_Size current_size;
- Eina_List *modes;
- Eina_List *crtcs;
- Eina_List *outputs;
- E_Randr_Output_Info *primary_output;
- Ecore_X_Randr_Relative_Alignment alignment;
-};
-
-//RRVD == RandR(R) Version Depended
-union _E_Randr_Screen_RRVD_Info
-{
- E_Randr_Screen_Info_11 *randr_info_11;
- E_Randr_Screen_Info_12 *randr_info_12;
-};
-
-struct _E_Randr_Screen_Info
-{
- Ecore_X_Window root;
- int randr_version;
- E_Randr_Screen_RRVD_Info rrvd_info;
-};
-
-//Following stuff is just for configuration purposes
-
-struct _E_Randr_Serialized_Output_Policy
-{
- Eina_Stringshare *name;
- Ecore_X_Randr_Output_Policy policy;
-};
-
-struct _E_Randr_Serialized_Output
-{
- Eina_Stringshare *name;
- double backlight_level;
-};
-
-struct _E_Randr_Serialized_Crtc
-{
- int index;
- //List of E_Randr_Serialized_Output objects that were used on the same output
- Eina_List *outputs;
- Evas_Coord_Point pos;
- Ecore_X_Randr_Orientation orientation;
- //the serialized mode_info
- Ecore_X_Randr_Mode_Info *mode_info;
-};
-
-struct _E_Randr_Serialized_Setup_12
-{
- double timestamp;
- //List of E_Randr_Serialized_Crtc objects
- Eina_List *crtcs;
- /*
- * List of E_Randr_Edid_Hash elements of all connected monitors
- */
- Eina_List *edid_hashes;
-};
-
-struct _E_Randr_Serialized_Setup_11
-{
- Ecore_X_Randr_Screen_Size_MM size;
- Ecore_X_Randr_Refresh_Rate refresh_rate;
- Ecore_X_Randr_Orientation orientation;
-};
-
-struct _E_Randr_Serialized_Setup
-{
- E_Randr_Serialized_Setup_11 *serialized_setup_11;
- //List of E_Randr_Serialized_Setup_12 objects
- Eina_List *serialized_setups_12;
- //List of E_Randr_Serialized_Output_Policy objects
- Eina_List *outputs_policies;
-};
-
-EAPI Eina_Bool e_randr_screen_info_refresh(void);
-EAPI void e_randr_store_configuration(E_Randr_Configuration_Store_Modifier modifier);
-EAPI void e_randr_11_store_configuration(E_Randr_Configuration_Store_Modifier modifier);
-EAPI Eina_Bool e_randr_try_restore_configuration(void);
-
-EINTERN Eina_Bool e_randr_init(void);
-EINTERN int e_randr_shutdown(void);
-EINTERN E_Randr_Serialized_Setup *e_randr_serialized_setup_new(void);
-EINTERN void e_randr_serialized_setup_free(E_Randr_Serialized_Setup *ss);
-EINTERN void e_randr_11_serialized_setup_free(E_Randr_Serialized_Setup_11 *ss_11);
-EINTERN void e_randr_12_serialized_setup_free(E_Randr_Serialized_Setup_12 *ss_12);
-EINTERN void e_randr_12_serialized_output_policy_free(E_Randr_Serialized_Output_Policy *policy);
-
-EINTERN Eina_Bool e_randr_12_try_enable_output(E_Randr_Output_Info *output_info, Ecore_X_Randr_Output_Policy policy, Eina_Bool force);
-EINTERN void e_randr_12_ask_dialog_new(E_Randr_Output_Info *oi);
-
-EAPI extern E_Randr_Screen_Info e_randr_screen_info;
-
-#endif
-#endif
diff --git a/src/bin/e_randr_11.c b/src/bin/e_randr_11.c
deleted file mode 100644
index 45770dbf8..000000000
--- a/src/bin/e_randr_11.c
+++ /dev/null
@@ -1,89 +0,0 @@
-#include "e_randr_private.h"
-#include "e_randr.h"
-
-//New helper functions
-/**
- * @brief allocate and initialize a new E_Randr_Screen_Info_11 element
- * @return E_Randr_Screen_Info_11 elements or in case it could
- * not be created and properly initialized, NULL
- */
-E_Randr_Screen_Info_11 *
-_11_screen_info_new(void)
-{
- E_Randr_Screen_Info_11 *randr_info_11 = NULL;
- Ecore_X_Randr_Screen_Size_MM *sizes = NULL;
- Ecore_X_Randr_Refresh_Rate *rates = NULL;
- int i, nsizes;
-
- EINA_SAFETY_ON_TRUE_RETURN_VAL(E_RANDR_11_NO, NULL);
-
- randr_info_11 = E_NEW(E_Randr_Screen_Info_11, 1);
-
- randr_info_11->csize_index = Ecore_X_Randr_Unset;
- randr_info_11->corientation = Ecore_X_Randr_Unset;
- randr_info_11->orientations = Ecore_X_Randr_Unset;
- randr_info_11->current_rate = Ecore_X_Randr_Unset;
-
- if (!(sizes = ecore_x_randr_screen_primary_output_sizes_get(e_randr_screen_info.root, &nsizes)))
- goto _info_11_new_fail;
- randr_info_11->sizes = sizes, randr_info_11->nsizes = nsizes;
- ecore_x_randr_screen_primary_output_current_size_get(e_randr_screen_info.root, NULL, NULL, NULL, NULL, &(randr_info_11->csize_index));
- randr_info_11->corientation = ecore_x_randr_screen_primary_output_orientation_get(e_randr_screen_info.root);
- randr_info_11->orientations = ecore_x_randr_screen_primary_output_orientations_get(e_randr_screen_info.root);
- randr_info_11->rates = malloc(sizeof(Ecore_X_Randr_Refresh_Rate *) * nsizes);
- randr_info_11->nrates = malloc(sizeof(int) * nsizes);
- for (i = 0; i < nsizes; i++)
- {
- if (!(rates = ecore_x_randr_screen_primary_output_refresh_rates_get(e_randr_screen_info.root, i, &randr_info_11->nrates[i])))
- goto _info_11_new_fail;
- randr_info_11->rates[i] = rates;
- }
- randr_info_11->current_rate = ecore_x_randr_screen_primary_output_current_refresh_rate_get(e_randr_screen_info.root);
-
- return randr_info_11;
-
-_info_11_new_fail:
- if (randr_info_11)
- {
- free(randr_info_11->rates);
- free(randr_info_11->nrates);
- }
- free(sizes);
- free(randr_info_11);
- return NULL;
-}
-
-//Free helper functions
-/**
- * @param screen_info the screen info to be freed.
- */
-void
-_11_screen_info_free(E_Randr_Screen_Info_11 *screen_info)
-{
- int x;
-
- EINA_SAFETY_ON_NULL_RETURN(screen_info);
-
- for (x = 0; x < screen_info->nsizes; x++)
- free(screen_info->rates[x]);
- free(screen_info->sizes);
- free(screen_info);
-}
-
-/*****************************************************************
- *
- * Init. and Shutdown code
- *
- *****************************************************************
- */
-Eina_Bool
-_11_screen_info_refresh(void)
-{
- EINA_SAFETY_ON_TRUE_RETURN_VAL(E_RANDR_11_NO, EINA_FALSE);
-
- _11_screen_info_free(e_randr_screen_info.rrvd_info.randr_info_11);
- e_randr_screen_info.rrvd_info.randr_info_11 = _11_screen_info_new();
-
- return e_randr_screen_info.rrvd_info.randr_info_11 != NULL;
-}
-
diff --git a/src/bin/e_randr_11_serialization.c b/src/bin/e_randr_11_serialization.c
deleted file mode 100644
index 9ca1d2f4e..000000000
--- a/src/bin/e_randr_11_serialization.c
+++ /dev/null
@@ -1,140 +0,0 @@
-#include "e_randr_private.h"
-#include "e_randr.h"
-
-/**********************************************************************
- *
- * Storage/Restorage of setups
- *
- **********************************************************************
- */
-
-//New helper functions
-
-E_Randr_Serialized_Setup_11 *
-_serialized_setup_11_new(void)
-{
- E_Randr_Serialized_Setup_11 *ss;
- Ecore_X_Randr_Screen_Size_MM *size;
- Ecore_X_Randr_Orientation ori = ECORE_X_RANDR_ORIENTATION_ROT_0;
- Ecore_X_Randr_Refresh_Rate rate = 0;
-
- ss = malloc(sizeof(*ss));
-
- if (e_randr_screen_info.randr_version == ECORE_X_RANDR_1_1)
- {
- if (e_randr_screen_info.rrvd_info.randr_info_11->csize_index >= e_randr_screen_info.rrvd_info.randr_info_11->nsizes) goto _serialized_setup_11_new_failed_free_ss;
- size = e_randr_screen_info.rrvd_info.randr_info_11->sizes + e_randr_screen_info.rrvd_info.randr_info_11->csize_index;
- if (!size) goto _serialized_setup_11_new_failed_free_ss; ;
- rate = e_randr_screen_info.rrvd_info.randr_info_11->current_rate;
- ori = e_randr_screen_info.rrvd_info.randr_info_11->corientation;
- ss->size.width = size->width;
- ss->size.width_mm = size->width_mm;
- ss->size.height = size->height;
- ss->size.height_mm = size->height_mm;
- }
- else if (e_randr_screen_info.randr_version > ECORE_X_RANDR_1_1)
- {
- ecore_x_randr_screen_primary_output_current_size_get(e_randr_screen_info.root, &ss->size.width, &ss->size.height, &ss->size.width_mm, &ss->size.height_mm, NULL);
- rate = ecore_x_randr_screen_primary_output_current_refresh_rate_get(e_randr_screen_info.root);
- ori = ecore_x_randr_screen_primary_output_orientation_get(e_randr_screen_info.root);
- }
-
- ss->refresh_rate = rate;
- ss->orientation = ori;
-
- return ss;
-
-_serialized_setup_11_new_failed_free_ss:
- free(ss);
- return NULL;
-}
-
-//Update/value set helper functions
-E_Randr_Serialized_Setup_11 *
-_serialized_setup_11_update(E_Randr_Serialized_Setup_11 *ss_11)
-{
- if (ss_11)
- e_randr_11_serialized_setup_free(ss_11);
-
- ss_11 = _serialized_setup_11_new();
-
- return ss_11;
-}
-
-void
-_11_store_configuration(E_Randr_Configuration_Store_Modifier modifier __UNUSED__)
-{
- if (!e_config->randr_serialized_setup)
- e_config->randr_serialized_setup = e_randr_serialized_setup_new();
-
- if (e_config->randr_serialized_setup->serialized_setup_11)
- e_config->randr_serialized_setup->serialized_setup_11 = _serialized_setup_11_update(e_config->randr_serialized_setup->serialized_setup_11);
- else
- e_config->randr_serialized_setup->serialized_setup_11 = _serialized_setup_11_new();
-}
-
-EAPI void
-e_randr_11_store_configuration(E_Randr_Configuration_Store_Modifier modifier __UNUSED__)
-{
- _11_store_configuration(modifier);
- e_config_save_queue();
-}
-
-//Free helper functions
-void
-_e_randr_serialized_setup_11_free(E_Randr_Serialized_Setup_11 *ss11)
-{
- free(ss11);
-}
-
-EINTERN void
-e_randr_11_serialized_setup_free(E_Randr_Serialized_Setup_11 *ss_11)
-{
- _e_randr_serialized_setup_11_free(ss_11);
-}
-
-Eina_Bool
-_11_try_restore_configuration(void)
-{
- Ecore_X_Randr_Screen_Size_MM *stored_size, *sizes = NULL;
- int i = 0, nsizes;
-
-#define SIZE_EQUAL(size) \
- ((stored_size->width == (size).width) \
- && (stored_size->height == (size).height) \
- && (stored_size->width_mm == (size).width_mm) \
- && (stored_size->height_mm == (size).height_mm))
-
- if (!e_config->randr_serialized_setup->serialized_setup_11) return EINA_FALSE;
- stored_size = &e_config->randr_serialized_setup->serialized_setup_11->size;
- if (e_randr_screen_info.randr_version == ECORE_X_RANDR_1_1)
- {
- int x;
- for (x = 0; x < e_randr_screen_info.rrvd_info.randr_info_11->nsizes; x++)
- {
- if (SIZE_EQUAL(e_randr_screen_info.rrvd_info.randr_info_11->sizes[x]))
- {
- return ecore_x_randr_screen_primary_output_size_set(e_randr_screen_info.root, i);
- }
- i++;
- }
- }
- else if (e_randr_screen_info.randr_version > ECORE_X_RANDR_1_1)
- {
- sizes = ecore_x_randr_screen_primary_output_sizes_get(e_randr_screen_info.root, &nsizes);
- for (i = 0; i < nsizes; i++)
- {
- if (SIZE_EQUAL(sizes[i]))
- {
- free(sizes);
- return ecore_x_randr_screen_primary_output_size_set(e_randr_screen_info.root, i);
- }
- }
- }
-#undef SIZE_EQUAL
-
- free(sizes);
-
- return EINA_FALSE;
-}
-
diff --git a/src/bin/e_randr_12.c b/src/bin/e_randr_12.c
deleted file mode 100644
index c73168121..000000000
--- a/src/bin/e_randr_12.c
+++ /dev/null
@@ -1,823 +0,0 @@
-#include "e.h"
-#include "e_randr_private.h"
-
-#define POLLINTERVAL 128
-
-// Set functions for the global e_randr_screen_info struct
-static void _screen_primary_output_assign(E_Randr_Output_Info *removed);
-
-// Init helper functions
-static void _outputs_init(void);
-static void _crtcs_init(void);
-static Eina_Bool _structs_init(void);
-
-// Retrieval helper functions
-static Ecore_X_Randr_Mode_Info *_mode_geo_identical_find(Eina_List *modes, Ecore_X_Randr_Mode_Info *mode);
-
-// Event helper functions
-static Eina_Bool _x_poll_cb(void *data __UNUSED__);
-static Eina_Bool _crtc_change_event_cb(void *data, int type, void *e);
-static Eina_Bool _output_change_event_cb(void *data, int type, void *e);
-static Eina_Bool _output_property_change_event_cb(void *data, int type, void *e);
-
-static Ecore_Poller *poller = NULL;
-static Eina_List *_event_handlers = NULL;
-static const char *_CONNECTION_STATES_STRINGS[] = {"CONNECTED", "DISCONNECTED", "UNKNOWN"};
-static const char *_POLICIES_STRINGS[] = {"ABOVE", "RIGHT", "BELOW", "LEFT", "CLONE", "NONE"};
-
-//"New" helper functions
-/**
- * @return array of E_Randr_Screen_Info_12 elements, or in case not all could
- * be created or parameter 'nrequested'==0, NULL
- */
-static E_Randr_Screen_Info_12 *
-_screen_info_12_new(void)
-{
- E_Randr_Screen_Info_12 *randr_info_12 = NULL;
-
- EINA_SAFETY_ON_TRUE_RETURN_VAL((e_randr_screen_info.randr_version < ECORE_X_RANDR_1_2), NULL);
-
- randr_info_12 = E_NEW(E_Randr_Screen_Info_12, 1);
-
- randr_info_12->min_size.width = Ecore_X_Randr_Unset;
- randr_info_12->min_size.height = Ecore_X_Randr_Unset;
- randr_info_12->max_size.width = Ecore_X_Randr_Unset;
- randr_info_12->max_size.height = Ecore_X_Randr_Unset;
- randr_info_12->current_size.width = Ecore_X_Randr_Unset;
- randr_info_12->current_size.height = Ecore_X_Randr_Unset;
- randr_info_12->crtcs = NULL;
- randr_info_12->outputs = NULL;
- randr_info_12->modes = NULL;
- randr_info_12->primary_output = NULL;
- randr_info_12->alignment = ECORE_X_RANDR_RELATIVE_ALIGNMENT_NONE;
-
- ecore_x_randr_screen_size_range_get(e_randr_screen_info.root,
- &randr_info_12->min_size.width,
- &randr_info_12->min_size.height,
- &randr_info_12->max_size.width,
- &randr_info_12->max_size.height);
- ecore_x_randr_screen_current_size_get(e_randr_screen_info.root,
- &randr_info_12->current_size.width,
- &randr_info_12->current_size.height,
- NULL, NULL);
-
- return randr_info_12;
-}
-
-static Eina_Bool
-_structs_init(void)
-{
- //Output stuff
- Ecore_X_Randr_Output *outputs;
- E_Randr_Output_Info *output_info = NULL;
- int noutputs = 0;
- //CRTC stuff
- Ecore_X_Randr_Crtc *crtcs = NULL;
- E_Randr_Crtc_Info *crtc_info = NULL;
- int ncrtcs = 0;
- //Modes stuff
- Ecore_X_Randr_Mode_Info **modes = NULL;
- int nmodes = 0;
-
- EINA_SAFETY_ON_TRUE_RETURN_VAL(E_RANDR_12_NO, EINA_FALSE);
-
- outputs = ecore_x_randr_outputs_get(e_randr_screen_info.root, &noutputs);
- if (noutputs == 0) return EINA_FALSE;
-
- while (--noutputs >= 0)
- {
- output_info = _output_info_new(outputs[noutputs]);
- if (output_info)
- e_randr_screen_info.rrvd_info.randr_info_12->outputs = eina_list_append(e_randr_screen_info.rrvd_info.randr_info_12->outputs, output_info);
- }
- free(outputs);
-
- crtcs = ecore_x_randr_crtcs_get(e_randr_screen_info.root, &ncrtcs);
- if (ncrtcs == 0) return EINA_FALSE;
-
- while (--ncrtcs >= 0)
- {
- crtc_info = _crtc_info_new(crtcs[ncrtcs]);
- e_randr_screen_info.rrvd_info.randr_info_12->crtcs = eina_list_append(e_randr_screen_info.rrvd_info.randr_info_12->crtcs, crtc_info);
- }
- free(crtcs);
-
- modes = ecore_x_randr_modes_info_get(e_randr_screen_info.root, &nmodes);
- if (nmodes == 0) return EINA_FALSE;
-
- while (--nmodes >= 0)
- {
- e_randr_screen_info.rrvd_info.randr_info_12->modes = eina_list_append(e_randr_screen_info.rrvd_info.randr_info_12->modes, modes[nmodes]);
- }
-
- free(modes);
- _outputs_init();
- _crtcs_init();
-
- return EINA_TRUE;
-}
-
-//Set value / retrieval helper functions
-
-static void
-_crtcs_init(void)
-{
- E_Randr_Crtc_Info *crtc = NULL;
- Eina_List *iter;
-
- EINA_SAFETY_ON_TRUE_RETURN(E_RANDR_12_NO);
-
- EINA_LIST_FOREACH(e_randr_screen_info.rrvd_info.randr_info_12->crtcs, iter, crtc)
- _crtc_refs_set(crtc);
-}
-
-static void
-_outputs_init(void)
-{
- E_Randr_Output_Info *output = NULL;
- Eina_List *iter;
-
- EINA_SAFETY_ON_TRUE_RETURN(E_RANDR_12_NO);
-
- EINA_LIST_FOREACH(e_randr_screen_info.rrvd_info.randr_info_12->outputs, iter, output)
- {
- _output_refs_set(output);
- if (output->connection_status == ECORE_X_RANDR_CONNECTION_STATUS_CONNECTED)
- {
- _monitor_info_free(output->monitor);
- output->monitor = _monitor_info_new(output);
- }
- }
-}
-
-static void
-_screen_primary_output_assign(E_Randr_Output_Info *removed)
-{
- Eina_List *iter;
- E_Randr_Output_Info *primary_output = NULL, *output_info;
-
- EINA_SAFETY_ON_TRUE_RETURN(E_RANDR_12_NO_OUTPUTS);
-
- if (e_randr_screen_info.rrvd_info.randr_info_12->primary_output && (removed != e_randr_screen_info.rrvd_info.randr_info_12->primary_output)) return;
- if (!(primary_output = _12_screen_info_output_info_get(ecore_x_randr_primary_output_get(e_randr_screen_info.root))))
- {
- EINA_LIST_FOREACH(e_randr_screen_info.rrvd_info.randr_info_12->outputs, iter, output_info)
- {
- if (!output_info || (output_info->connection_status != ECORE_X_RANDR_CONNECTION_STATUS_CONNECTED) || !output_info->crtc || !output_info->crtc->current_mode) continue;
- primary_output = output_info;
- break;
- }
- }
- e_randr_screen_info.rrvd_info.randr_info_12->primary_output = primary_output;
-}
-
-//"Free" helper functions
-
-/**
- * @param screen_info the screen info to be freed.
- */
-void
-_12_screen_info_free(E_Randr_Screen_Info_12 *screen_info)
-{
- Ecore_X_Randr_Mode_Info *mode_info;
- E_Randr_Crtc_Info *crtc_info;
- E_Randr_Output_Info *output_info;
-
- EINA_SAFETY_ON_NULL_RETURN(screen_info);
- EINA_SAFETY_ON_TRUE_RETURN(E_RANDR_12_NO);
-
- EINA_LIST_FREE(screen_info->crtcs, crtc_info)
- _crtc_info_free(crtc_info);
-
- EINA_LIST_FREE(screen_info->outputs, output_info)
- _output_info_free(output_info);
-
- EINA_LIST_FREE(screen_info->modes, mode_info)
- ecore_x_randr_mode_info_free(mode_info);
-
- free(screen_info);
-}
-
-/*
- *********************************************
- *
- * Getter functions for e_randr_screen_info struct
- *
- * ********************************************
- */
-Ecore_X_Randr_Mode_Info *
-_12_screen_info_mode_info_get(const Ecore_X_Randr_Mode mode)
-{
- Eina_List *iter;
- Ecore_X_Randr_Mode_Info *mode_info;
-
- EINA_SAFETY_ON_TRUE_RETURN_VAL(E_RANDR_12_NO_MODE(mode), NULL);
-
- EINA_LIST_FOREACH(e_randr_screen_info.rrvd_info.randr_info_12->modes, iter, mode_info)
- {
- if (mode_info && (mode_info->xid == mode)) return mode_info;
- }
- return NULL;
-}
-
-E_Randr_Output_Info *
-_12_screen_info_output_info_get(const Ecore_X_Randr_Output output)
-{
- Eina_List *iter;
- E_Randr_Output_Info *output_info;
-
- EINA_SAFETY_ON_TRUE_RETURN_VAL(E_RANDR_12_NO_OUTPUTS, NULL);
-
- EINA_LIST_FOREACH(e_randr_screen_info.rrvd_info.randr_info_12->outputs, iter, output_info)
- {
- if (output_info && (output_info->xid == output)) return output_info;
- }
- return NULL;
-}
-
-E_Randr_Crtc_Info *
-_12_screen_info_crtc_info_get(const Ecore_X_Randr_Crtc crtc)
-{
- Eina_List *iter;
- E_Randr_Crtc_Info *crtc_info;
-
- EINA_SAFETY_ON_TRUE_RETURN_VAL(E_RANDR_12_NO_CRTCS, NULL);
-
- EINA_LIST_FOREACH(e_randr_screen_info.rrvd_info.randr_info_12->crtcs, iter, crtc_info)
- {
- if (crtc_info && (crtc_info->xid == crtc)) return crtc_info;
- }
- return NULL;
-}
-
-Eina_Bool
-_12_screen_info_edid_is_available(const E_Randr_Edid_Hash *hash)
-{
- Eina_List *iter;
- E_Randr_Output_Info *output_info;
-
- EINA_SAFETY_ON_TRUE_RETURN_VAL(E_RANDR_12_NO_OUTPUTS, EINA_FALSE);
- EINA_SAFETY_ON_NULL_RETURN_VAL(hash, EINA_FALSE);
-
- EINA_LIST_FOREACH(e_randr_screen_info.rrvd_info.randr_info_12->outputs, iter, output_info)
- {
- if (!output_info || !output_info->monitor)
- continue;
- if (output_info->monitor->edid_hash.hash == hash->hash)
- return EINA_TRUE;
- }
- return EINA_FALSE;
-}
-
-/*
- * returns a mode within a given list of modes that is gemetrically identical.
- * If none is found, NULL is returned.
- */
-static Ecore_X_Randr_Mode_Info *
-_mode_geo_identical_find(Eina_List *modes, Ecore_X_Randr_Mode_Info *mode)
-{
- Eina_List *iter;
- Ecore_X_Randr_Mode_Info *mode_info;
-
- EINA_LIST_FOREACH(modes, iter, mode_info)
- {
- if ((mode_info->width == mode->width) && (mode_info->height == mode->height))
- return mode_info;
- }
- return NULL;
-}
-
-/*****************************************************************
- *
- * Init. and Shutdown code
- *
- *****************************************************************
- */
-Eina_Bool
-_12_screen_info_refresh(void)
-{
- EINA_SAFETY_ON_TRUE_RETURN_VAL((e_randr_screen_info.randr_version < ECORE_X_RANDR_1_2), EINA_FALSE);
-
- if (e_randr_screen_info.rrvd_info.randr_info_12)
- _12_screen_info_free(e_randr_screen_info.rrvd_info.randr_info_12);
- if (!(e_randr_screen_info.rrvd_info.randr_info_12 = _screen_info_12_new()) ||
- !_structs_init())
- return EINA_FALSE;
-
- _screen_primary_output_assign(NULL);
-
- return EINA_TRUE;
-}
-
-/******************************************************************
- *
- * Event code
- *
- ******************************************************************
- */
-
-static Eina_Bool
-_x_poll_cb(void *data __UNUSED__)
-{
- if (!e_randr_screen_info.rrvd_info.randr_info_12)
- {
- poller = NULL;
- return ECORE_CALLBACK_CANCEL;
- }
-
- ecore_x_randr_screen_primary_output_orientations_get(e_randr_screen_info.root);
-
- return ECORE_CALLBACK_RENEW;
-}
-
-void
-_12_event_listeners_add(void)
-{
- EINA_SAFETY_ON_TRUE_RETURN(E_RANDR_12_NO);
-
- ecore_x_randr_events_select(e_randr_screen_info.root, EINA_TRUE);
- _event_handlers = eina_list_append(_event_handlers, ecore_event_handler_add(ECORE_X_EVENT_RANDR_CRTC_CHANGE, _crtc_change_event_cb, NULL));
- _event_handlers = eina_list_append(_event_handlers, ecore_event_handler_add(ECORE_X_EVENT_RANDR_OUTPUT_CHANGE, _output_change_event_cb, NULL));
- _event_handlers = eina_list_append(_event_handlers, ecore_event_handler_add(ECORE_X_EVENT_RANDR_OUTPUT_PROPERTY_NOTIFY, _output_property_change_event_cb, NULL));
- // WORKAROUND problem of X not sending events
- poller = ecore_poller_add(ECORE_POLLER_CORE, POLLINTERVAL, _x_poll_cb, NULL);
-}
-
-/* Usually events are triggered in the following order.
- * (Dis)connect Display Scenario:
- * 1.) ECORE_X_EVENT_OUTPUT_CHANGE //Triggered, when a display is connected to an
- * output
- * 2.) ECORE_X_EVENT_CRTC_CHANGE //Triggered when the CRTC mode is changed (eg.
- * enabled by e.g. e_randr or xrandr)
- * 3.) ECORE_X_EVENT_OUTPUT_CHANGE //Triggered for each output changed by the
- * preceeding enabling.
- *
- * When the mode of a CRTC is changed only events 2 and 3 are triggered
- *
- */
-static Eina_Bool
-_output_change_event_cb(void *data __UNUSED__, int type, void *ev)
-{
- Ecore_X_Event_Randr_Output_Change *oce = (Ecore_X_Event_Randr_Output_Change *)ev;
- E_Randr_Output_Info *output_info = NULL;
- E_Randr_Crtc_Info *crtc_info = NULL;
- Eina_Bool policy_success = EINA_FALSE, con_state_changed = EINA_FALSE;
-
- EINA_SAFETY_ON_TRUE_RETURN_VAL(E_RANDR_12_NO, ECORE_CALLBACK_RENEW);
- EINA_SAFETY_ON_TRUE_RETURN_VAL((type != ECORE_X_EVENT_RANDR_OUTPUT_CHANGE), ECORE_CALLBACK_RENEW);
-
- /* event information:
- Ecore_X_Window win;
- Ecore_X_Randr_Output output;
- Ecore_X_Randr_Crtc crtc;
- Ecore_X_Randr_Mode mode;
- Ecore_X_Randr_Orientation orientation;
- Ecore_X_Randr_Connection_Status connection;
- Ecore_X_Render_Subpixel_Order subpixel_order;
- */
-
- EINA_SAFETY_ON_FALSE_RETURN_VAL((output_info = _12_screen_info_output_info_get(oce->output)), ECORE_CALLBACK_RENEW);
-
- DBG("E_RANDR: Output event: \n"
- "\t\t: relative to win: %d\n"
- "\t\t: output (xid): %d\n"
- "\t\t: used by crtc (xid): %d\n"
- "\t\t: mode: %d\n"
- "\t\t: orientation: %d\n"
- "\t\t: connection state: %s\n"
- "\t\t: subpixel_order: %d",
- oce->win,
- oce->output,
- oce->crtc,
- oce->mode,
- oce->orientation,
- _CONNECTION_STATES_STRINGS[oce->connection],
- oce->subpixel_order);
-
- crtc_info = _12_screen_info_crtc_info_get(oce->crtc);
- //WORKAROUND
- //Reason: Missing events, when an output is moved from one CRTC to
- // another
- if (output_info->crtc && (crtc_info != output_info->crtc))
- output_info->crtc->outputs = eina_list_remove(output_info->crtc->outputs, output_info);
- //END WORKAROUND
- output_info->crtc = crtc_info;
-
- //Update mode references in case a mode was added manually
- if (output_info->monitor)
- {
- eina_list_free(output_info->monitor->modes);
- output_info->monitor->modes = NULL;
- eina_list_free(output_info->monitor->preferred_modes);
- output_info->monitor->preferred_modes = NULL;
- _monitor_modes_refs_set(output_info->monitor, output_info->xid);
- //Also update common modes of the used CRTC
- if (crtc_info && crtc_info->current_mode)
- {
- eina_list_free(crtc_info->outputs);
- crtc_info->outputs = NULL;
- eina_list_free(crtc_info->outputs_common_modes);
- crtc_info->outputs_common_modes = NULL;
- _crtc_outputs_refs_set(crtc_info);
- }
- }
-
- con_state_changed = (Eina_Bool)(output_info->connection_status != oce->connection);
- output_info->connection_status = oce->connection;
- output_info->subpixel_order = oce->subpixel_order;
-
- if (con_state_changed)
- {
- _monitor_info_free(output_info->monitor);
- output_info->monitor = NULL;
-
- if (oce->connection == ECORE_X_RANDR_CONNECTION_STATUS_CONNECTED)
- {
- //New device connected!
- output_info->monitor = _monitor_info_new(output_info);
- INF("E_RANDR: Output %d was newly connected.", output_info->xid);
-
- //only try to enable the monitor if there is no serialized setup
- if (!_12_try_restore_configuration())
- {
- policy_success = e_randr_12_try_enable_output(output_info, output_info->policy, EINA_FALSE); //maybe give a success message?
- INF("E_RANDR: Policy \"%s\" was enforced %ssuccesfully.", _POLICIES_STRINGS[output_info->policy - 1], (policy_success ? "" : "un"));
- }
- }
- else
- {
- //connection_state is 'unknown' or 'disconnected': treat as disconnected!
- if (output_info->crtc)
- {
- output_info->crtc->outputs = eina_list_remove(output_info->crtc->outputs, output_info);
- //in case this output was the last one connected on a CRTC,
- //disable it again
- if (eina_list_count(output_info->crtc->outputs) == 0)
- {
- //in case it was the only output running on this CRTC, disable
- //it.
- ecore_x_randr_crtc_mode_set(e_randr_screen_info.root, output_info->crtc->xid, NULL, Ecore_X_Randr_None, Ecore_X_Randr_None);
- }
- }
- //retry to find a suiting serialized setup for the remaining
- //connected monitors
- _12_try_restore_configuration();
- }
- }
-
- return ECORE_CALLBACK_RENEW;
-}
-
-static Eina_Bool
-_crtc_change_event_cb(void *data __UNUSED__, int type, void *ev)
-{
- Ecore_X_Event_Randr_Crtc_Change *cce = (Ecore_X_Event_Randr_Crtc_Change *)ev;
- E_Randr_Crtc_Info *crtc_info;
-
- EINA_SAFETY_ON_TRUE_RETURN_VAL(E_RANDR_12_NO, ECORE_CALLBACK_RENEW);
- EINA_SAFETY_ON_TRUE_RETURN_VAL((type != ECORE_X_EVENT_RANDR_CRTC_CHANGE), ECORE_CALLBACK_RENEW);
-
- /* event information:
- Ecore_X_Window win;
- Ecore_X_Randr_Crtc crtc;
- Ecore_X_Randr_Mode mode;
- Ecore_X_Randr_Orientation orientation;
- int x;
- int y;
- int width;
- int height;
- */
- DBG("E_RANDR: CRTC event: \n"
- "\t\t: relative to win: %d\n"
- "\t\t: crtc (xid): %d\n"
- "\t\t: mode (xid): %d\n"
- "\t\t: orientation: %d\n"
- "\t\t: x: %d\n"
- "\t\t: y: %d\n"
- "\t\t: width: %d\n"
- "\t\t: height: %d",
- cce->win,
- cce->crtc,
- cce->mode,
- cce->orientation,
- cce->geo.x,
- cce->geo.y,
- cce->geo.w,
- cce->geo.h);
-
- crtc_info = _12_screen_info_crtc_info_get(cce->crtc);
- EINA_SAFETY_ON_NULL_RETURN_VAL(crtc_info, ECORE_CALLBACK_RENEW);
-
- crtc_info->current_mode = _12_screen_info_mode_info_get(cce->mode);
- crtc_info->current_orientation = cce->orientation;
- crtc_info->geometry.x = cce->geo.x;
- crtc_info->geometry.y = cce->geo.y;
- crtc_info->geometry.w = cce->geo.w;
- crtc_info->geometry.h = cce->geo.h;
-
- //update screensize if necessary
- e_randr_screen_info.rrvd_info.randr_info_12->current_size.width = MAX((cce->geo.x + cce->geo.w), e_randr_screen_info.rrvd_info.randr_info_12->current_size.width);
- e_randr_screen_info.rrvd_info.randr_info_12->current_size.height = MAX((cce->geo.y + cce->geo.h), e_randr_screen_info.rrvd_info.randr_info_12->current_size.height);
-
- //update output data
- eina_list_free(crtc_info->outputs);
- crtc_info->outputs = NULL;
- eina_list_free(crtc_info->outputs_common_modes);
- crtc_info->outputs_common_modes = NULL;
-
- //if still enabled, update references to outputs
- if (crtc_info->current_mode)
- {
- eina_list_free(crtc_info->outputs);
- crtc_info->outputs = NULL;
- eina_list_free(crtc_info->outputs_common_modes);
- crtc_info->outputs_common_modes = NULL;
- _crtc_outputs_refs_set(crtc_info);
- }
-
- //crop the screen
- ecore_x_randr_screen_reset(e_randr_screen_info.root);
-
- return ECORE_CALLBACK_RENEW;
-}
-
-static Eina_Bool
-_output_property_change_event_cb(void *data __UNUSED__, int type, void *ev)
-{
- Ecore_X_Event_Randr_Output_Property_Notify *opce = (Ecore_X_Event_Randr_Output_Property_Notify *)ev;
-
- EINA_SAFETY_ON_TRUE_RETURN_VAL(E_RANDR_12_NO, ECORE_CALLBACK_RENEW);
- EINA_SAFETY_ON_TRUE_RETURN_VAL((type != ECORE_X_EVENT_RANDR_OUTPUT_PROPERTY_NOTIFY), ECORE_CALLBACK_RENEW);
-
- /* event information:
- Ecore_X_Window win;
- Ecore_X_Randr_Output output;
- Ecore_X_Atom property;
- Ecore_X_Time time;
- Ecore_X_Randr_Property_Change state;
- */
- EINA_SAFETY_ON_FALSE_RETURN_VAL((_12_screen_info_output_info_get(opce->output)), ECORE_CALLBACK_RENEW);
-
- return ECORE_CALLBACK_RENEW;
-}
-
-/*
- * Try to enable this output on an unoccupied CRTC. 'Force' in this context
- * means, that if there are only occupied CRTCs, we disable another output to
- * enable this one. If not forced we will - if we don't find an unoccupied CRTC
- * - try to share the output of a CRTC with other outputs already using it
- * (clone).
- */
-EINTERN Eina_Bool
-e_randr_12_try_enable_output(E_Randr_Output_Info *output_info, Ecore_X_Randr_Output_Policy policy, Eina_Bool force)
-{
- Eina_List *iter, *outputs_list = NULL, *common_modes = NULL;
- E_Randr_Crtc_Info *crtc_info = NULL, *usable_crtc = NULL;
- const E_Randr_Crtc_Info *crtc_rel = NULL;
- E_Randr_Output_Info *primary_output;
- Ecore_X_Randr_Output *outputs;
- Ecore_X_Randr_Mode_Info *mode_info;
- int dx = Ecore_X_Randr_None, dy = Ecore_X_Randr_None;
- Eina_Bool ret = EINA_TRUE;
-
- EINA_SAFETY_ON_NULL_RETURN_VAL(output_info, EINA_FALSE);
- EINA_SAFETY_ON_TRUE_RETURN_VAL((output_info->crtc && output_info->crtc->current_mode), EINA_FALSE);
-
- /*
- * Try to find a usable crtc for this output. Either unused or forced.
- */
- EINA_LIST_FOREACH(output_info->possible_crtcs, iter, crtc_info)
- {
- if (!crtc_info->current_mode || !crtc_info->outputs || force)
- {
- usable_crtc = crtc_info;
- break;
- }
- }
-
- /*
- * apparently we don't have a CRTC to make use of the device
- */
- if (!usable_crtc)
- return EINA_FALSE;
-
- //get the CRTC we will refer to, dependend on policy
- switch (policy)
- {
- case ECORE_X_RANDR_OUTPUT_POLICY_NONE:
- return EINA_TRUE;
-
- case ECORE_X_RANDR_OUTPUT_POLICY_ASK:
- e_randr_12_ask_dialog_new(output_info);
- return EINA_TRUE; //This is a bit incorrect (dialog feedback is async), but probably not worth a lock.
-
- case ECORE_X_RANDR_OUTPUT_POLICY_CLONE:
- /*
- * Order of approaches to enable a clone (of the primary output):
- *
- * 0. Get Primary output from Server
- * 1. Try to add new Output to primary output's CRTC, using the mode used
- * by the primary output
- * 2. Try to enable clone in the same
- * 2a. exact mode or a
- * 2b. geometrically identical mode
- * 3. Find a most high resolution mode in common to enable on primary output's CRTC and the new
- * output's CRTC
- * 4. fail.
- */
- //Assign new output, if necessary
- _screen_primary_output_assign(output_info);
- if ((primary_output = e_randr_screen_info.rrvd_info.randr_info_12->primary_output))
- {
- if (primary_output->crtc && primary_output->crtc->current_mode && eina_list_data_find(output_info->monitor->modes, primary_output->crtc->current_mode))
- {
- /*
- * mode currently used by primary output's CRTC is also supported by the new output
- */
- if (eina_list_data_find(primary_output->crtc->possible_outputs, output_info) && eina_list_data_find(output_info->monitor->modes, primary_output->crtc->current_mode))
- {
- /*
- * 1. Try to add new Output to primary output's CRTC, using the mode used
- * by the primary output
- * TODO: check with compatibility list in RandRR >= 1.3
- * if available
- *
- * The new output is also usable by the primary output's
- * CRTC. Try to enable this output together with the already
- * enabled outputs on the CRTC in already used mode.
- */
- outputs_list = primary_output->crtc->outputs;
- outputs_list = eina_list_append(outputs_list, output_info);
- outputs = _outputs_to_array(outputs_list);
- primary_output->crtc->outputs = NULL;
- ret &= ecore_x_randr_crtc_mode_set(e_randr_screen_info.root, primary_output->crtc->xid, outputs, eina_list_count(outputs_list), primary_output->crtc->current_mode->xid);
- free(outputs);
- eina_list_free(outputs_list);
- return ret;
- }
- else
- {
- /*
- * 2. Try to enable clone in the same
- */
-
- /*
- * 2a. exact mode.
- */
- ret &= ecore_x_randr_crtc_mode_set(e_randr_screen_info.root, usable_crtc->xid, &output_info->xid, 1, primary_output->crtc->current_mode->xid);
- ret &= ecore_x_randr_crtc_pos_relative_set(e_randr_screen_info.root, usable_crtc->xid, primary_output->crtc->xid, ECORE_X_RANDR_OUTPUT_POLICY_CLONE, e_randr_screen_info.rrvd_info.randr_info_12->alignment);
- return ret;
- }
- }
- else
- {
- /*
- * 2b. geometrically identical mode
- */
- if (primary_output->crtc && (mode_info = _mode_geo_identical_find(output_info->monitor->modes, primary_output->crtc->current_mode)))
- {
- ret &= ecore_x_randr_crtc_mode_set(e_randr_screen_info.root, usable_crtc->xid, &output_info->xid, 1, mode_info->xid);
- ret &= ecore_x_randr_crtc_pos_relative_set(e_randr_screen_info.root, usable_crtc->xid, primary_output->crtc->xid, ECORE_X_RANDR_OUTPUT_POLICY_CLONE, e_randr_screen_info.rrvd_info.randr_info_12->alignment);
- return ret;
- }
- /*
- * 3. Find the highest resolution mode common to enable on primary output's CRTC and the new one.
- */
- if (((outputs_list = eina_list_append(outputs_list, primary_output)) && (outputs_list = eina_list_append(outputs_list, output_info))))
- {
- if (primary_output->crtc)
- {
- common_modes = _outputs_common_modes_get(outputs_list, primary_output->crtc->current_mode);
- if ((mode_info = eina_list_nth(common_modes, 0)))
- {
- eina_list_free(common_modes);
- INF("Will try to set mode: %dx%d for primary and clone.", mode_info->width, mode_info->height);
- ret &= ecore_x_randr_crtc_mode_set(e_randr_screen_info.root, primary_output->crtc->xid, ((Ecore_X_Randr_Output *)Ecore_X_Randr_Unset), Ecore_X_Randr_Unset, mode_info->xid);
- ret &= ecore_x_randr_crtc_mode_set(e_randr_screen_info.root, usable_crtc->xid, &output_info->xid, 1, mode_info->xid);
- ret &= ecore_x_randr_crtc_pos_relative_set(e_randr_screen_info.root, usable_crtc->xid, primary_output->crtc->xid, ECORE_X_RANDR_OUTPUT_POLICY_CLONE, e_randr_screen_info.rrvd_info.randr_info_12->alignment);
- }
- }
- eina_list_free(outputs_list);
- }
- }
- }
- else
- ERR("E_RANDR: Failed to clone, because of missing or disabled primary output!");
- /*
- * 4. FAIL
- */
- break;
-
- default:
- //enable and position according to used policies
- if (!(mode_info = ((Ecore_X_Randr_Mode_Info *)eina_list_data_get(output_info->monitor->preferred_modes))))
- {
- ERR("E_RANDR: Could not enable output(%d), as it has no preferred modes (and there for none at all)!", output_info->xid);
- ret = EINA_FALSE;
- break;
- }
-
- //get the crtc we will place our's relative to. If it's NULL, this is the
- //only output attached, work done.
- if (!(crtc_rel = _crtc_according_to_policy_get(usable_crtc, policy)))
- {
- INF("E_RANDR: CRTC %d enabled. No other CRTC had to be moved.", usable_crtc->xid);
- ret &= ecore_x_randr_crtc_mode_set(e_randr_screen_info.root, usable_crtc->xid, &output_info->xid, 1, mode_info->xid);
- return ret;
- }
-
- //Calculate new CRTC's position according to policy
- switch (policy)
- {
- case ECORE_X_RANDR_OUTPUT_POLICY_ABOVE:
- usable_crtc->geometry.x = crtc_rel->geometry.x;
- usable_crtc->geometry.y = 0;
- break;
-
- case ECORE_X_RANDR_OUTPUT_POLICY_RIGHT:
- usable_crtc->geometry.x = (crtc_rel->geometry.x + crtc_rel->geometry.w);
- usable_crtc->geometry.y = crtc_rel->geometry.y;
- break;
-
- case ECORE_X_RANDR_OUTPUT_POLICY_BELOW:
- usable_crtc->geometry.x = crtc_rel->geometry.x;
- usable_crtc->geometry.y = (crtc_rel->geometry.y + crtc_rel->geometry.h);
- break;
-
- case ECORE_X_RANDR_OUTPUT_POLICY_LEFT:
- usable_crtc->geometry.y = crtc_rel->geometry.y;
- usable_crtc->geometry.x = 0;
- break;
-
- default:
- usable_crtc->geometry.y = 0;
- usable_crtc->geometry.x = 0;
- }
-
- if ((ret &= ecore_x_randr_crtc_settings_set(e_randr_screen_info.root, usable_crtc->xid, &output_info->xid, 1, usable_crtc->geometry.x, usable_crtc->geometry.y, mode_info->xid, ECORE_X_RANDR_ORIENTATION_ROT_0)))
- {
- //WORKAROUND
- //Reason: the CRTC event, that'd bring the new info about the set
- //mode is arriving too late here.
- usable_crtc->current_mode = mode_info;
- usable_crtc->geometry.w = mode_info->width;
- usable_crtc->geometry.h = mode_info->height;
- //WORKAROUND END
-
- INF("E_RANDR: Moved CRTC %d has geometry (x,y,wxh): %d, %d, %dx%d.", usable_crtc->xid, usable_crtc->geometry.x, usable_crtc->geometry.y, usable_crtc->geometry.w, usable_crtc->geometry.h);
- //following is policy dependend.
- switch (policy)
- {
- case ECORE_X_RANDR_OUTPUT_POLICY_ABOVE:
- dy = (crtc_rel->geometry.y - usable_crtc->geometry.h);
- if (dy < 0)
- {
- //virtual move (move other CRTCs as nessesary)
- dy = -dy;
- ret &= ecore_x_randr_move_all_crtcs_but(e_randr_screen_info.root,
- &usable_crtc->xid,
- 1,
- dx,
- dy);
- INF("E_RANDR: Moving all CRTCs but %d, by %dx%d delta.", usable_crtc->xid, dx, dy);
- }
- break;
-
- case ECORE_X_RANDR_OUTPUT_POLICY_LEFT:
- dx = (crtc_rel->geometry.x - usable_crtc->geometry.w);
- if (dx < 0)
- {
- //virtual move (move other CRTCs as nessesary)
- dx = -dx;
- ret &= ecore_x_randr_move_all_crtcs_but(e_randr_screen_info.root,
- &usable_crtc->xid,
- 1,
- dx,
- dy);
- INF("E_RANDR: Moving all CRTCs but %d, by %dx%d delta.", usable_crtc->xid, dx, dy);
- }
- break;
-
- default:
- break;
- }
- }
- }
-
- if (ret)
- ecore_x_randr_screen_reset(e_randr_screen_info.root);
-
- return ret;
-}
-
-void
-_12_event_listeners_remove(void)
-{
- Ecore_Event_Handler *_event_handler = NULL;
-
- EINA_LIST_FREE(_event_handlers, _event_handler)
- ecore_event_handler_del(_event_handler);
- ecore_poller_del(poller);
- poller = NULL;
-}
-
diff --git a/src/bin/e_randr_12_ask_dialog.c b/src/bin/e_randr_12_ask_dialog.c
deleted file mode 100644
index 463c3d570..000000000
--- a/src/bin/e_randr_12_ask_dialog.c
+++ /dev/null
@@ -1,84 +0,0 @@
-#include "e.h"
-
-static void _e_randr_ask_cb(void *data, E_Dialog *dia);
-
-static void e_randr_12_memorize_monitor_dialog_new(void);
-static void _e_randr_ask_memorize_monitor_cb(void *data, E_Dialog *dia);
-
-static E_Randr_Output_Info *_ask_output_info = NULL;
-
-EINTERN void
-e_randr_12_ask_dialog_new(E_Randr_Output_Info *oi)
-{
- E_Dialog *dia = NULL;
-
- if (!oi) return;
- dia = e_dialog_new(e_container_current_get(e_manager_current_get()), "E", "_randr_ask");
- if (!dia) return;
-
- _ask_output_info = oi;
- e_dialog_title_set(dia, _("Position of New Monitor"));
- e_dialog_icon_set(dia, "display", 64);
- e_dialog_text_set(dia, _("Where should the newly connected monitor be put?"));
- e_dialog_button_add(dia, _("Left"), "stock-left", _e_randr_ask_cb, (void *)ECORE_X_RANDR_OUTPUT_POLICY_LEFT);
- e_dialog_button_add(dia, _("Right"), "stock-right", _e_randr_ask_cb, (void *)ECORE_X_RANDR_OUTPUT_POLICY_RIGHT);
- e_dialog_button_add(dia, _("Above"), "stock-top", _e_randr_ask_cb, (void *)ECORE_X_RANDR_OUTPUT_POLICY_ABOVE);
- e_dialog_button_add(dia, _("Below"), "stock-bottom", _e_randr_ask_cb, (void *)ECORE_X_RANDR_OUTPUT_POLICY_BELOW);
- e_dialog_button_focus_num(dia, 1);
- e_win_centered_set(dia->win, 1);
- e_dialog_show(dia);
-}
-
-static void
-_e_randr_ask_cb(void *data __UNUSED__, E_Dialog *dia)
-{
- Ecore_X_Randr_Output_Policy pos = (Ecore_X_Randr_Output_Policy)data;
- Eina_Bool successful = EINA_FALSE;
-
- if (!_ask_output_info)
- goto _close_ret;
-
- successful = e_randr_12_try_enable_output(_ask_output_info, pos, EINA_FALSE);
-
- if (successful)
- e_randr_12_memorize_monitor_dialog_new();
-
- _ask_output_info = NULL;
-
-_close_ret:
- e_object_del(E_OBJECT(dia));
-}
-
-static void
-e_randr_12_memorize_monitor_dialog_new(void)
-{
- E_Dialog *dia = NULL;
-
- dia = e_dialog_new(e_container_current_get(e_manager_current_get()), "E", "_randr_ask");
- if (!dia) return;
-
- e_dialog_title_set(dia, _("Memorize This Monitor?"));
- e_dialog_icon_set(dia, "display", 64);
- e_dialog_text_set(dia, _("Should the position of this monitor be memorized?"));
- e_dialog_button_add(dia, _("Yes"), "stock-yes", _e_randr_ask_memorize_monitor_cb, (void *)EINA_TRUE);
- e_dialog_button_add(dia, _("No"), "stock-no", _e_randr_ask_memorize_monitor_cb, (void *)EINA_FALSE);
- e_dialog_button_focus_num(dia, 1);
- e_win_centered_set(dia->win, 1);
- e_dialog_show(dia);
-}
-
-static void
-_e_randr_ask_memorize_monitor_cb(void *data, E_Dialog *dia)
-{
- Eina_Bool memorize = (Eina_Bool)(intptr_t)data;
- const E_Randr_Configuration_Store_Modifier modifier = (
- E_RANDR_CONFIGURATION_STORE_RESOLUTIONS
- | E_RANDR_CONFIGURATION_STORE_ARRANGEMENT
- | E_RANDR_CONFIGURATION_STORE_ORIENTATIONS);
-
- if (memorize)
- e_randr_store_configuration(modifier);
-
- e_object_del(E_OBJECT(dia));
-}
-
diff --git a/src/bin/e_randr_12_crtc.c b/src/bin/e_randr_12_crtc.c
deleted file mode 100644
index 65aac3717..000000000
--- a/src/bin/e_randr_12_crtc.c
+++ /dev/null
@@ -1,275 +0,0 @@
-#include "e_randr_private.h"
-#include "e_randr.h"
-
-// E_Randr_Crtc_Info helper functions
-/* static Eina_Bool _crtc_mode_intersects_crtcs(E_Randr_Crtc_Info *crtc_info, Ecore_X_Randr_Mode_Info *mode); */
-/* static Eina_Bool _crtc_outputs_mode_max_set(E_Randr_Crtc_Info *crtc_info); */
-
-void
-_crtc_outputs_refs_set(E_Randr_Crtc_Info *crtc_info)
-{
- E_Randr_Output_Info *output_info = NULL;
- Ecore_X_Randr_Output *outputs = NULL;
- int noutputs = 0;
-
- EINA_SAFETY_ON_NULL_RETURN(crtc_info);
-
- outputs = ecore_x_randr_crtc_outputs_get(e_randr_screen_info.root, crtc_info->xid, &noutputs);
-
- while (--noutputs >= 0)
- {
- output_info = _12_screen_info_output_info_get(outputs[noutputs]);
- if (!output_info)
- {
- ERR("E_RANDR: Could not find output struct for output %d.", outputs[noutputs]);
- continue;
- }
- crtc_info->outputs = eina_list_append(crtc_info->outputs, output_info);
- }
- free(outputs);
- E_FREE_LIST(crtc_info->outputs_common_modes, ecore_x_randr_mode_info_free);
- crtc_info->outputs_common_modes = _outputs_common_modes_get(crtc_info->outputs, NULL);
-}
-
-void
-_crtc_refs_set(E_Randr_Crtc_Info *crtc_info)
-{
- Ecore_X_Randr_Mode mode = Ecore_X_Randr_None;
- Ecore_X_Randr_Mode_Info *mode_info = NULL;
- Ecore_X_Randr_Output *poutputs = NULL;
- E_Randr_Output_Info *output_info = NULL;
- int npoutputs = 0;
-
- EINA_SAFETY_ON_NULL_RETURN(crtc_info);
-
- mode = ecore_x_randr_crtc_mode_get(e_randr_screen_info.root, crtc_info->xid);
- if (!(mode_info = _12_screen_info_mode_info_get(mode)) && (mode != Ecore_X_Randr_None))
- {
- //Mode does not equal "disabled" and is unknown to the global structure, so add it
- mode_info = ecore_x_randr_mode_info_get(e_randr_screen_info.root, mode);
- e_randr_screen_info.rrvd_info.randr_info_12->modes = eina_list_append(e_randr_screen_info.rrvd_info.randr_info_12->modes, mode_info);
- }
- crtc_info->current_mode = mode_info;
-
- poutputs = ecore_x_randr_crtc_possible_outputs_get(e_randr_screen_info.root, crtc_info->xid, &npoutputs);
-
- while (--npoutputs >= 0)
- {
- output_info = _12_screen_info_output_info_get(poutputs[npoutputs]);
- if (!output_info)
- {
- ERR("E_RANDR: Could not find output struct for output %d.", poutputs[npoutputs]);
- continue;
- }
- crtc_info->possible_outputs = eina_list_append(crtc_info->possible_outputs, output_info);
- }
- free(poutputs);
-
- _crtc_outputs_refs_set(crtc_info);
-}
-
-/**
- * @brief Allocate and init with values.
- * @param crtc the crtc the display is queried for. If Ecore_X_Randr_None is
- * given, a struct with only the xid will be set
- * @return E_Randr_Crtc_Info element
- */
-E_Randr_Crtc_Info *
-_crtc_info_new(Ecore_X_Randr_Crtc crtc)
-{
- E_Randr_Crtc_Info *crtc_info = NULL;
-
- EINA_SAFETY_ON_TRUE_RETURN_VAL(E_RANDR_12_NO, NULL);
-
- crtc_info = E_NEW(E_Randr_Crtc_Info, 1);
-
- crtc_info->xid = crtc;
- crtc_info->panning.x = Ecore_X_Randr_Unset;
- crtc_info->panning.y = Ecore_X_Randr_Unset;
- crtc_info->panning.w = Ecore_X_Randr_Unset;
- crtc_info->panning.h = Ecore_X_Randr_Unset;
- crtc_info->tracking.x = Ecore_X_Randr_Unset;
- crtc_info->tracking.y = Ecore_X_Randr_Unset;
- crtc_info->tracking.w = Ecore_X_Randr_Unset;
- crtc_info->tracking.h = Ecore_X_Randr_Unset;
- crtc_info->border.x = Ecore_X_Randr_Unset;
- crtc_info->border.y = Ecore_X_Randr_Unset;
- crtc_info->border.w = Ecore_X_Randr_Unset;
- crtc_info->border.h = Ecore_X_Randr_Unset;
-
- crtc_info->gamma_ramps = NULL;
- crtc_info->gamma_ramp_size = Ecore_X_Randr_Unset;
- crtc_info->outputs = NULL;
- crtc_info->possible_outputs = NULL;
- crtc_info->outputs_common_modes = NULL;
- crtc_info->current_mode = NULL;
-
- ecore_x_randr_crtc_geometry_get(e_randr_screen_info.root, crtc_info->xid, &crtc_info->geometry.x, &crtc_info->geometry.y, &crtc_info->geometry.w, &crtc_info->geometry.h);
- crtc_info->current_orientation = ecore_x_randr_crtc_orientation_get(e_randr_screen_info.root, crtc_info->xid);
- crtc_info->orientations = ecore_x_randr_crtc_orientations_get(e_randr_screen_info.root, crtc_info->xid);
-
- return crtc_info;
-}
-
-/**
- * @param crtc_info the crtc info to be freed.
- */
-void
-_crtc_info_free(E_Randr_Crtc_Info *crtc_info)
-{
- if (!crtc_info) return;
-
- free(crtc_info->gamma_ramps);
- crtc_info->outputs = eina_list_free(crtc_info->outputs);
- crtc_info->possible_outputs = eina_list_free(crtc_info->possible_outputs);
- free(crtc_info);
-}
-
-/*
- * returns EINA_TRUE if given CRTC would intersect with other CRTCs if set to
- * given mode
- */
-/* static Eina_Bool */
-/* _crtc_mode_intersects_crtcs(E_Randr_Crtc_Info *crtc_info, Ecore_X_Randr_Mode_Info *mode) */
-/* { */
-/* Eina_List *iter; */
-/* E_Randr_Crtc_Info *tmp; */
-/* int width, height; */
-
-/* EINA_LIST_FOREACH(e_randr_screen_info.rrvd_info.randr_info_12->crtcs, iter, tmp) */
-/* { */
-/* if ((tmp == crtc_info) || */
-/* ((tmp->geometry.w <= 0) || (tmp->geometry.h <= 0))) */
-/* continue; */
-/* width = (mode->width > INT_MAX) ? INT_MAX : mode->width; */
-/* height = (mode->height > INT_MAX) ? INT_MAX : mode->height; */
-/* if (E_INTERSECTS(crtc_info->geometry.x, crtc_info->geometry.y, */
-/* width, height, tmp->geometry.x, */
-/* tmp->geometry.y, tmp->geometry.w, tmp->geometry.h) */
-/* && ((crtc_info->geometry.x != tmp->geometry.x) && */
-/* (crtc_info->geometry.y != tmp->geometry.y))) */
-/* return EINA_TRUE; */
-/* } */
-/* return EINA_FALSE; */
-/* } */
-
-/*
- * reconfigures a CRTC enabling the highest resolution amongst its outputs,
- * without touching any other CRTC currently activated
- */
-/* static Eina_Bool */
-/* _crtc_outputs_mode_max_set(E_Randr_Crtc_Info *crtc_info) */
-/* { */
-/* Ecore_X_Randr_Mode_Info *mode_info; */
-/* Eina_List *iter; */
-/* Eina_Bool ret = EINA_TRUE; */
-/* Ecore_X_Randr_Output *outputs; */
-
-/* if (!crtc_info || !crtc_info->outputs || !crtc_info->outputs_common_modes) return EINA_FALSE; */
-
-/* EINA_LIST_REVERSE_FOREACH(crtc_info->outputs_common_modes, iter, mode_info) */
-/* { */
-/* if (!_crtc_mode_intersects_crtcs(crtc_info, mode_info)) */
-/* break; */
-/* } */
-/* if (!mode_info) */
-/* { */
-/* //eina_list_free(crtc_info->outputs_common_modes); */
-/* return EINA_FALSE; */
-/* } */
-/* if ((outputs = _outputs_to_array(crtc_info->outputs))) */
-/* { */
-/* ret = ecore_x_randr_crtc_mode_set(e_randr_screen_info.root, crtc_info->xid, outputs, eina_list_count(crtc_info->outputs), mode_info->xid); */
-/* free(outputs); */
-/* } */
-/* //eina_list_free(crtc_info->outputs_common_modes); */
-/* //crtc_info->outputs_common_modes = NULL; */
-
-/* ecore_x_randr_screen_reset(e_randr_screen_info.root); */
-
-/* return ret; */
-/* } */
-
-/*
- * this retrieves a CRTC depending on a policy.
- * Note that this is enlightenment specific! Enlightenment doesn't 'allow' zones
- * to overlap. Thus we always use the output with the most extreme position
- * instead of trying to fill gaps like tetris. Though this could be done by
- * simply implementing another policy.
- *
- * Simply put: get the
- * -right
- * -left
- * -top
- * -bottom
- * most CRTC and return it.
- */
-const E_Randr_Crtc_Info *
-_crtc_according_to_policy_get(E_Randr_Crtc_Info *but, Ecore_X_Randr_Output_Policy policy)
-{
- Eina_List *iter, *possible_crtcs = NULL;
- E_Randr_Crtc_Info *crtc_info, *ret = NULL;
-
- EINA_SAFETY_ON_TRUE_RETURN_VAL(E_RANDR_12_NO_CRTCS, NULL);
-
- //get any crtc that besides 'but' to start with
- possible_crtcs = eina_list_clone(e_randr_screen_info.rrvd_info.randr_info_12->crtcs);
- possible_crtcs = eina_list_remove(possible_crtcs, but);
-
- if ((eina_list_count(possible_crtcs) == 0) && (policy != ECORE_X_RANDR_OUTPUT_POLICY_CLONE))
- {
- eina_list_free(possible_crtcs);
- return NULL;
- }
-
- // get an initial value for ret
- ret = (E_Randr_Crtc_Info *)eina_list_last_data_get(possible_crtcs);
-
- switch (policy)
- {
- case ECORE_X_RANDR_OUTPUT_POLICY_ABOVE:
- EINA_LIST_FOREACH(e_randr_screen_info.rrvd_info.randr_info_12->crtcs, iter, crtc_info)
- {
- if (crtc_info->geometry.y < ret->geometry.y)
- ret = crtc_info;
- }
- break;
-
- case ECORE_X_RANDR_OUTPUT_POLICY_RIGHT:
- EINA_LIST_FOREACH(e_randr_screen_info.rrvd_info.randr_info_12->crtcs, iter, crtc_info)
- {
- if ((crtc_info->geometry.x + crtc_info->geometry.w) >
- (ret->geometry.x + ret->geometry.w))
- ret = crtc_info;
- }
- break;
-
- case ECORE_X_RANDR_OUTPUT_POLICY_BELOW:
- EINA_LIST_FOREACH(e_randr_screen_info.rrvd_info.randr_info_12->crtcs, iter, crtc_info)
- {
- if ((crtc_info->geometry.y + crtc_info->geometry.h) >
- (ret->geometry.y + ret->geometry.h))
- ret = crtc_info;
- }
- break;
-
- case ECORE_X_RANDR_OUTPUT_POLICY_LEFT:
- EINA_LIST_FOREACH(e_randr_screen_info.rrvd_info.randr_info_12->crtcs, iter, crtc_info)
- {
- if (crtc_info->geometry.x < ret->geometry.x)
- ret = crtc_info;
- }
- break;
-
- case ECORE_X_RANDR_OUTPUT_POLICY_CLONE:
- ret = (e_randr_screen_info.rrvd_info.randr_info_12->primary_output) ? e_randr_screen_info.rrvd_info.randr_info_12->primary_output->crtc : NULL;
- break;
-
- default:
- break;
- }
-
- eina_list_free(possible_crtcs);
- return ret;
-}
-
diff --git a/src/bin/e_randr_12_output.c b/src/bin/e_randr_12_output.c
deleted file mode 100644
index c1aa91cf8..000000000
--- a/src/bin/e_randr_12_output.c
+++ /dev/null
@@ -1,241 +0,0 @@
-#include "e_randr_private.h"
-#include "e_randr.h"
-
-E_Randr_Monitor_Info *_monitor_info_new(E_Randr_Output_Info *output_info);
-static int _modes_size_sort_cb(const void *d1, const void *d2);
-
-void
-_monitor_modes_refs_set(E_Randr_Monitor_Info *mi, Ecore_X_Randr_Output o)
-{
- Ecore_X_Randr_Mode *modes = NULL;
- Ecore_X_Randr_Mode_Info *mode_info = NULL;
- int nmodes = 0, npreferred = 0;
-
- EINA_SAFETY_ON_NULL_RETURN(mi);
- EINA_SAFETY_ON_TRUE_RETURN(o == Ecore_X_Randr_None);
-
- // Add (preferred) modes
- modes = ecore_x_randr_output_modes_get(e_randr_screen_info.root, o, &nmodes, &npreferred);
- while (--nmodes >= 0)
- {
- if (!modes[nmodes]) continue;
- if (!(mode_info = _12_screen_info_mode_info_get(modes[nmodes])))
- {
- //Mode unknown to the global structure, so add it
- mode_info = ecore_x_randr_mode_info_get(e_randr_screen_info.root, modes[nmodes]);
- e_randr_screen_info.rrvd_info.randr_info_12->modes = eina_list_append(e_randr_screen_info.rrvd_info.randr_info_12->modes, mode_info);
- }
- mi->modes = eina_list_prepend(mi->modes, mode_info);
- if (nmodes <= npreferred)
- mi->preferred_modes = eina_list_prepend(mi->preferred_modes, mode_info);
- }
- free(modes);
-}
-
-/**
- * @brief Allocates a new E_Randr_Monitor_Info struct and initializes it with
- * default values.
- * @return E_Randr_Monitor_Info element, or if it could not be
- * created, NULL
- */
-E_Randr_Monitor_Info *
-_monitor_info_new(E_Randr_Output_Info *oi)
-{
- E_Randr_Monitor_Info *mi = NULL;
-
- EINA_SAFETY_ON_NULL_RETURN_VAL(oi, NULL);
-
- mi = E_NEW(E_Randr_Monitor_Info, 1);
-
- // Set some default values
- mi->modes = NULL;
- mi->preferred_modes = NULL;
- mi->size_mm.width = Ecore_X_Randr_Unset;
- mi->size_mm.height = Ecore_X_Randr_Unset;
- mi->edid = NULL;
- mi->edid_length = 0;
- mi->edid_hash.hash = 0;
- mi->max_backlight = Ecore_X_Randr_Unset;
- mi->backlight_level = 0.0;
-
- _monitor_modes_refs_set(mi, oi->xid);
-
- ecore_x_randr_output_size_mm_get(e_randr_screen_info.root, oi->xid, &mi->size_mm.width, &mi->size_mm.height);
- mi->edid = ecore_x_randr_output_edid_get(e_randr_screen_info.root, oi->xid, &mi->edid_length);
- if (mi->edid_length > 0)
- mi->edid_hash.hash = eina_hash_superfast((char *)mi->edid, mi->edid_length);
-
- return mi;
-}
-
-/**
- * @brief Frees E_Randr_Monitor_Info structure
- */
-void
-_monitor_info_free(E_Randr_Monitor_Info *monitor_info)
-{
- if (!monitor_info)
- return;
-
- eina_list_free(monitor_info->modes);
- eina_list_free(monitor_info->preferred_modes);
- free(monitor_info->edid);
- free(monitor_info);
-}
-
-/**
- * @brief allocates a struct and fills it with default values.
- * @param output the output the display is queried for. If Ecore_X_Randr_None is
- * given, a struct with only the xid will be set
- * @return E_Randr_Output_Info element
- */
-E_Randr_Output_Info *
-_output_info_new(Ecore_X_Randr_Output output)
-{
- E_Randr_Output_Info *output_info = NULL;
- char *str;
-
- EINA_SAFETY_ON_TRUE_RETURN_VAL(E_RANDR_12_NO, NULL);
-
- output_info = E_NEW(E_Randr_Output_Info, 1);
-
- output_info->xid = output;
-
- //Use default values
- output_info->crtc = NULL;
- output_info->wired_clones = NULL;
- output_info->possible_crtcs = NULL;
- output_info->signalformats = Ecore_X_Randr_Unset;
- output_info->signalformat = Ecore_X_Randr_Unset;
- output_info->connector_number = 0;
- output_info->monitor = NULL;
- output_info->connector_type = Ecore_X_Randr_Unset;
- output_info->policy = ECORE_X_RANDR_OUTPUT_POLICY_NONE;
- output_info->compatibility_list = NULL;
- output_info->subpixel_order = Ecore_X_Randr_Unset;
-
- str = ecore_x_randr_output_name_get(e_randr_screen_info.root, output_info->xid, &output_info->name_length);
- output_info->name = eina_stringshare_add(str);
- free(str);
- output_info->connection_status = ecore_x_randr_output_connection_status_get(e_randr_screen_info.root, output_info->xid);
-
- return output_info;
-}
-
-void
-_output_info_free(E_Randr_Output_Info *output_info)
-{
- EINA_SAFETY_ON_NULL_RETURN(output_info);
-
- eina_list_free(output_info->wired_clones);
- eina_list_free(output_info->possible_crtcs);
- eina_list_free(output_info->compatibility_list);
- eina_stringshare_del(output_info->name);
- _monitor_info_free(output_info->monitor);
- output_info->monitor = NULL;
- free(output_info);
-}
-
-void
-_output_refs_set(E_Randr_Output_Info *output_info)
-{
- Ecore_X_Randr_Crtc crtc, *crtcs = NULL;
- E_Randr_Crtc_Info *crtc_info;
- int ncrtcs = 0;
-
- EINA_SAFETY_ON_TRUE_RETURN(E_RANDR_12_NO);
- EINA_SAFETY_ON_NULL_RETURN(output_info);
-
- eina_list_free(output_info->possible_crtcs);
-
- //Add possible crtcs
- crtcs = ecore_x_randr_output_possible_crtcs_get(e_randr_screen_info.root, output_info->xid, &ncrtcs);
- while (--ncrtcs >= 0)
- {
- if (!(crtc_info = _12_screen_info_crtc_info_get(crtcs[ncrtcs])))
- continue;
- output_info->possible_crtcs = eina_list_append(output_info->possible_crtcs, crtc_info);
- }
- free(crtcs);
-
- crtc = ecore_x_randr_output_crtc_get(e_randr_screen_info.root, output_info->xid);
- output_info->crtc = _12_screen_info_crtc_info_get(crtc);
-
- if (output_info->connection_status == ECORE_X_RANDR_CONNECTION_STATUS_CONNECTED)
- output_info->monitor = _monitor_info_new(output_info);
- else
- output_info->monitor = NULL;
-}
-
-Ecore_X_Randr_Output *
-_outputs_to_array(Eina_List *outputs_info)
-{
- Ecore_X_Randr_Output *ret = NULL;
- E_Randr_Output_Info *output_info;
- Eina_List *output_iter;
- int i = 0;
-
- 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)
- /* output_info == NULL should _not_ be possible! */
- ret[i++] = output_info ? output_info->xid : Ecore_X_Randr_None;
- return ret;
-}
-
-/*
- * returns a list of modes common ammongst the given outputs,
- * optionally limited by max_size_mode. If none are found, NULL is returned.
- */
-Eina_List
-*
-_outputs_common_modes_get(Eina_List *outputs, Ecore_X_Randr_Mode_Info *max_size_mode)
-{
- Eina_List *common_modes = NULL, *mode_iter, *output_iter, *mode_next, *output_next;
- E_Randr_Output_Info *output_info;
- Ecore_X_Randr_Mode_Info *mode_info;
-
- EINA_SAFETY_ON_NULL_RETURN_VAL(outputs, NULL);
- EINA_SAFETY_ON_NULL_RETURN_VAL(e_randr_screen_info.rrvd_info.randr_info_12->modes, NULL);
-
- //create a list of all common modes
- common_modes = eina_list_clone(e_randr_screen_info.rrvd_info.randr_info_12->modes);
- common_modes = eina_list_sort(common_modes, 0, _modes_size_sort_cb);
-
- EINA_LIST_FOREACH_SAFE(common_modes, mode_iter, mode_next, mode_info)
- {
- EINA_LIST_FOREACH_SAFE(outputs, output_iter, output_next, output_info)
- {
- if (!output_info || !output_info->monitor)
- continue;
- if (!eina_list_data_find(output_info->monitor->modes, mode_info))
- common_modes = eina_list_remove(common_modes, mode_info);
- }
- }
-
- if (max_size_mode)
- {
- //remove all modes that are larger than max_size_mode
- EINA_LIST_FOREACH_SAFE(common_modes, mode_iter, mode_next, mode_info)
- {
- if (_modes_size_sort_cb((void *)max_size_mode, (void *)mode_info) < 0)
- common_modes = eina_list_remove(common_modes, mode_info);
- }
- }
-
- //sort modes desc. by their sizes
- common_modes = eina_list_reverse(common_modes);
-
- return common_modes;
-}
-
-static int
-_modes_size_sort_cb(const void *d1, const void *d2)
-{
- Ecore_X_Randr_Mode_Info *mode1 = ((Ecore_X_Randr_Mode_Info *)d1), *mode2 = ((Ecore_X_Randr_Mode_Info *)d2);
-
- if (!d1) return 1;
- if (!d2) return -1;
-
- return (mode1->width * mode1->height) - (mode2->width * mode2->height);
-}
-
diff --git a/src/bin/e_randr_12_serialization.c b/src/bin/e_randr_12_serialization.c
deleted file mode 100644
index c9417d661..000000000
--- a/src/bin/e_randr_12_serialization.c
+++ /dev/null
@@ -1,601 +0,0 @@
-#include "e_randr_private.h"
-#include "e_randr.h"
-
-#define MODE_STR_LENGTH_MAX 100
-
-static const char *_POLICIES_STRINGS[] = {"ABOVE", "RIGHT", "BELOW", "LEFT", "CLONE", "NONE"};
-
-static E_Randr_Serialized_Crtc *_serialized_crtc_new(E_Randr_Crtc_Info *crtc_info);
-static inline int _sort_by_number_of_edids(const void *d1, const void *d2);
-static inline Eina_List *_find_matching_outputs(Eina_List *sois);
-static inline E_Randr_Crtc_Info *_find_matching_crtc(E_Randr_Serialized_Crtc *sc);
-static inline Ecore_X_Randr_Mode_Info *_find_matching_mode_info(Ecore_X_Randr_Mode_Info *mode);
-
-/**********************************************************************
- *
- * Storage/Restorage of setups
- *
- **********************************************************************
- */
-
-/*
- * Layout:
- *
- * Serialized_Setup_12 {
- * - timestamp
- * - List
- * - List
- * }
- * Serialized_Crtc {
- * - index
- * - List
- * - pos
- * - orientation
- * - mode
- * }
- * Serialized_Output {
- * - name
- * - name_length
- * - serialized_edid
- * - backlight_level
- * }
- * Serialized_EDID {
- * - edid_hash
- * }
- *
- */
-//"Free" helper functions
-
-void
-_serialized_output_free(E_Randr_Serialized_Output *so)
-{
- EINA_SAFETY_ON_NULL_RETURN(so);
-
- eina_stringshare_del(so->name);
-
- free(so);
-}
-
-void
-_serialized_output_policy_free(E_Randr_Serialized_Output_Policy *sop)
-{
- EINA_SAFETY_ON_NULL_RETURN(sop);
-
- eina_stringshare_del(sop->name);
- free(sop);
-}
-
-EINTERN void
-e_randr_12_serialized_output_policy_free(E_Randr_Serialized_Output_Policy *policy)
-{
- _serialized_output_policy_free(policy);
-}
-
-void
-_mode_info_free(Ecore_X_Randr_Mode_Info *mode_info)
-{
- EINA_SAFETY_ON_NULL_RETURN(mode_info);
-
- eina_stringshare_del(mode_info->name);
- free(mode_info);
-}
-
-void
-_serialized_crtc_free(E_Randr_Serialized_Crtc *sc)
-{
- E_Randr_Serialized_Output *so;
-
- EINA_SAFETY_ON_NULL_RETURN(sc);
-
- EINA_LIST_FREE(sc->outputs, so)
- _serialized_output_free(so);
- _mode_info_free(sc->mode_info);
- free(sc);
-}
-
-//"New" helper functions
-
-/**
- * @brief Seeks given data in the list and returns the index
- * of the first element equaling @data
- * @param list The list to be examined
- * @param data The data to be found
- * @return if found, the index of the list node. Else -1.
- */
-int
-_eina_list_data_index_get(const Eina_List *list, const void *data)
-{
- Eina_List *iter;
- void *ndata;
- int i = 0;
-
- EINA_LIST_REVERSE_FOREACH(list, iter, ndata)
- {
- if (ndata == data)
- return i;
- else
- i++;
- }
-
- return -1;
-}
-
-Ecore_X_Randr_Mode_Info
-*
-_mode_info_clone(const Ecore_X_Randr_Mode_Info *src)
-{
- Ecore_X_Randr_Mode_Info *mi = NULL;
-
- EINA_SAFETY_ON_NULL_RETURN_VAL(src, NULL);
-
- mi = E_NEW(Ecore_X_Randr_Mode_Info, 1);
-
- mi->xid = src->xid;
- mi->width = src->width;
- mi->height = src->height;
- mi->dotClock = src->dotClock;
- mi->hSyncStart = src->hSyncStart;
- mi->hSyncEnd = src->hSyncEnd;
- mi->hTotal = src->hTotal;
- mi->hSkew = src->hSkew;
- mi->vSyncStart = src->vSyncStart;
- mi->vSyncEnd = src->vSyncEnd;
- mi->vTotal = src->vTotal;
- if (src->nameLength > 0)
- {
- mi->name = (char *)eina_stringshare_add(src->name);
- }
- mi->nameLength = src->nameLength;
- mi->modeFlags = src->modeFlags;
-
- return mi;
-}
-
-E_Randr_Edid_Hash
-*
-_monitor_edid_hash_clone(E_Randr_Monitor_Info *mi)
-{
- E_Randr_Edid_Hash *edid_hash;
-
- EINA_SAFETY_ON_NULL_RETURN_VAL(mi, NULL);
- EINA_SAFETY_ON_TRUE_RETURN_VAL((mi->edid_hash.hash == 0), NULL);
- edid_hash = malloc(sizeof(E_Randr_Edid_Hash));
-
- edid_hash->hash = mi->edid_hash.hash;
-
- return edid_hash;
-}
-
-Eina_List *
-_outputs_policies_list_new(Eina_List *outputs)
-{
- E_Randr_Serialized_Output_Policy *sop;
- Eina_List *iter, *list = NULL;
- E_Randr_Output_Info *oi;
-
- EINA_SAFETY_ON_NULL_RETURN_VAL(outputs, NULL);
-
- EINA_LIST_FOREACH(outputs, iter, oi)
- {
- if (!oi->name) continue;
-
- sop = E_NEW(E_Randr_Serialized_Output_Policy, 1);
- sop->name = eina_stringshare_add(oi->name);
- sop->policy = oi->policy;
- list = eina_list_append(list, sop);
- }
-
- return list;
-}
-
-E_Randr_Serialized_Output *
-_serialized_output_new(E_Randr_Output_Info *output_info)
-{
- E_Randr_Serialized_Output *so;
-
- EINA_SAFETY_ON_NULL_RETURN_VAL(output_info, NULL);
- EINA_SAFETY_ON_NULL_RETURN_VAL(output_info->name, NULL);
-
- so = E_NEW(E_Randr_Serialized_Output, 1);
-
- so->name = eina_stringshare_add(output_info->name);
- if (output_info->monitor)
- {
- so->backlight_level = output_info->monitor->backlight_level;
- }
- else
- {
- so->backlight_level = Ecore_X_Randr_Unset;
- }
-
- return so;
-}
-
-E_Randr_Serialized_Crtc *
-_serialized_crtc_new(E_Randr_Crtc_Info *crtc_info)
-{
- E_Randr_Serialized_Crtc *sc = NULL;
- E_Randr_Serialized_Output *so = NULL;
- E_Randr_Output_Info *output_info = NULL;
- Eina_List *iter;
-
- EINA_SAFETY_ON_NULL_RETURN_VAL(crtc_info, NULL);
-
- sc = E_NEW(E_Randr_Serialized_Crtc, 1);
-
- //Get relative index of CRTC
- sc->index = _eina_list_data_index_get(e_randr_screen_info.rrvd_info.randr_info_12->crtcs, crtc_info);
-
- //Create list of serialized outputs
- EINA_LIST_FOREACH(crtc_info->outputs, iter, output_info)
- {
- if (!(so = _serialized_output_new(output_info)))
- continue;
- sc->outputs = eina_list_append(sc->outputs, so);
- INF("E_RANDR:\t Serialized output %s.", so->name);
- }
- sc->pos.x = crtc_info->geometry.x;
- sc->pos.y = crtc_info->geometry.y;
- sc->orientation = crtc_info->current_orientation;
- //Clone mode
- sc->mode_info = _mode_info_clone(crtc_info->current_mode);
-
- return sc;
-}
-
-E_Randr_Serialized_Setup_12 *
-_12_serialized_setup_new(void)
-{
- E_Randr_Serialized_Setup_12 *ss = NULL;
- Eina_List *iter;
- E_Randr_Crtc_Info *ci;
- E_Randr_Output_Info *oi;
- E_Randr_Serialized_Crtc *sc;
- E_Randr_Edid_Hash *edid_hash;
-
- EINA_SAFETY_ON_TRUE_RETURN_VAL(E_RANDR_12_NO, NULL);
- EINA_SAFETY_ON_NULL_RETURN_VAL(e_randr_screen_info.rrvd_info.randr_info_12->outputs, NULL);
- EINA_SAFETY_ON_NULL_RETURN_VAL(e_randr_screen_info.rrvd_info.randr_info_12->crtcs, NULL);
-
- ss = E_NEW(E_Randr_Serialized_Setup_12, 1);
-
- ss->timestamp = ecore_time_get();
-
- //Add CRTCs and their configuration
- EINA_LIST_FOREACH(e_randr_screen_info.rrvd_info.randr_info_12->crtcs, iter, ci)
- {
- if (!(sc = _serialized_crtc_new(ci))) continue;
- ss->crtcs = eina_list_append(ss->crtcs, sc);
- INF("E_RANDR: Serialized CRTC %d (index %d) in mode %s.", ci->xid, sc->index, (sc->mode_info ? sc->mode_info->name : "(disabled)"));
- }
-
- /*
- * Add EDID hashes of connected outputs
- * for easier comparison during
- * setup restoration
- */
- EINA_LIST_FOREACH(e_randr_screen_info.rrvd_info.randr_info_12->outputs, iter, oi)
- {
- if (oi->connection_status != ECORE_X_RANDR_CONNECTION_STATUS_CONNECTED)
- continue;
- if (!(edid_hash = _monitor_edid_hash_clone(oi->monitor)))
- continue;
- ss->edid_hashes = eina_list_append(ss->edid_hashes, edid_hash);
- }
-
- return ss;
-}
-
-//Update (also retrieval) helper functions
-
-E_Randr_Serialized_Setup_12 *
-_matching_serialized_setup_get(Eina_List *setups_12)
-{
- E_Randr_Serialized_Setup_12 *ss_12;
- Eina_List *setups_iter, *edid_iter;
- E_Randr_Edid_Hash *edid_hash;
-
- EINA_SAFETY_ON_TRUE_RETURN_VAL(E_RANDR_12_NO, NULL);
- EINA_SAFETY_ON_NULL_RETURN_VAL(setups_12, NULL);
-
- //Sort list of setups by the number of monitors involved
- setups_12 = eina_list_sort(setups_12, 0, _sort_by_number_of_edids);
-
- EINA_LIST_FOREACH(setups_12, setups_iter, ss_12)
- {
- //1. Make sure: #outputs >= #serialized EDIDs
- if (eina_list_count(e_randr_screen_info.rrvd_info.randr_info_12->outputs) < eina_list_count(ss_12->edid_hashes))
- continue;
- //2. Compare #CRTCs
- if (eina_list_count(e_randr_screen_info.rrvd_info.randr_info_12->crtcs) != eina_list_count(ss_12->crtcs))
- continue;
-
- //3. Find all serialized EDIDs
- EINA_LIST_FOREACH(ss_12->edid_hashes, edid_iter, edid_hash)
- {
- if (!_12_screen_info_edid_is_available(edid_hash))
- goto _setup_12_skip;
- }
-
- //4. All EDIDs found? Great, let's go!
- return ss_12;
-_setup_12_skip:
- continue;
- }
-
- // None found!
- return NULL;
-}
-
-Eina_List *
-_outputs_policies_update(Eina_List *sops)
-{
- E_Randr_Serialized_Output_Policy *sop;
-
- EINA_LIST_FREE(sops, sop)
- {
- _serialized_output_policy_free(sop);
- }
-
- return _outputs_policies_list_new(e_randr_screen_info.rrvd_info.randr_info_12->outputs);
-}
-
-Eina_List *
-_12_serialized_setup_update(Eina_List *setups_12)
-{
- E_Randr_Serialized_Setup_12 *ss_12;
-
- if (setups_12)
- {
- /*
- * try to find the setup with the same monitors
- * connected in order to replace it
- */
- if ((ss_12 = _matching_serialized_setup_get(setups_12)))
- {
- INF("E_RANDR: Found stored configuration that matches current setup. It was created at %f. Freeing it...", ss_12->timestamp);
- setups_12 = eina_list_remove(setups_12, ss_12);
- _12_serialized_setup_free(ss_12);
- }
- }
- ss_12 = _12_serialized_setup_new();
- setups_12 = eina_list_append(setups_12, ss_12);
-
- return setups_12;
-}
-
-void
-_12_policies_restore(void)
-{
- E_Randr_Output_Info *output;
- E_Randr_Serialized_Output_Policy *sop;
- Eina_List *iter, *iter2;
-
- EINA_SAFETY_ON_TRUE_RETURN(E_RANDR_12_NO);
- EINA_SAFETY_ON_NULL_RETURN(e_config->randr_serialized_setup);
- EINA_SAFETY_ON_NULL_RETURN(e_config->randr_serialized_setup->outputs_policies);
-
- // Restore policies
- EINA_LIST_FOREACH(e_randr_screen_info.rrvd_info.randr_info_12->outputs, iter, output)
- {
- EINA_LIST_FOREACH(e_config->randr_serialized_setup->outputs_policies, iter2, sop)
- {
- if ((output->name_length > 0) &&
- (!strncmp(sop->name, output->name, output->name_length)))
- {
- output->policy = sop->policy;
- INF("E_RANDR: Policy \"%s\" for output \"%s\" restored.", _POLICIES_STRINGS[sop->policy - 1], output->name);
- }
- }
- }
-}
-
-Eina_Bool
-_12_try_restore_configuration(void)
-{
- E_Randr_Serialized_Setup_12 *ss_12;
- E_Randr_Serialized_Crtc *sc;
- E_Randr_Crtc_Info *ci;
- Ecore_X_Randr_Output *outputs_array;
- E_Randr_Output_Info *output_info;
- Ecore_X_Randr_Mode_Info *mi = NULL;
- Ecore_X_Randr_Mode mode = 0;
- Eina_List *iter, *outputs_list, *outputs_iter;
- Eina_Bool ret = EINA_TRUE;
-
- EINA_SAFETY_ON_NULL_RETURN_VAL(e_config, EINA_FALSE);
- EINA_SAFETY_ON_NULL_RETURN_VAL(e_config->randr_serialized_setup, EINA_FALSE);
-
- if (!(ss_12 = _matching_serialized_setup_get(e_config->randr_serialized_setup->serialized_setups_12)))
- return EINA_FALSE;
-
- INF("E_RANDR: Found matching serialized setup.");
- EINA_LIST_FOREACH(ss_12->crtcs, iter, sc)
- {
- ci = _find_matching_crtc(sc);
- if (!ci)
- {
- ERR("E_RANDR: Cannot find a matching CRTC for serialized CRTC index %d.", sc->index);
- return EINA_FALSE;
- }
- outputs_list = _find_matching_outputs(sc->outputs);
- outputs_array = _outputs_to_array(outputs_list);
-
- if (!sc->mode_info)
- {
- INF("E_RANDR: \tSerialized mode was disabled.");
- mode = Ecore_X_Randr_None;
- }
- else if ((mi = _find_matching_mode_info(sc->mode_info)))
- {
- INF("E_RANDR: \tSerialized mode is now known under the name %s.", mi->name);
- mode = mi->xid;
- }
- else if (mi) /* FIXME: this is impossible, so whoever wrote it probably meant something else */
- {
- // The serialized mode is no longer available
- mi->name = malloc(MODE_STR_LENGTH_MAX);
- //IMPROVABLE: Use random string, like mktemp for files
- snprintf(mi->name, (MODE_STR_LENGTH_MAX - 1), "%ux%u,%lu,%lu", sc->mode_info->width, sc->mode_info->height, sc->mode_info->dotClock, sc->mode_info->modeFlags);
- mi = sc->mode_info;
- mode = ecore_x_randr_mode_info_add(e_randr_screen_info.root, mi);
- if (mode == Ecore_X_Randr_None)
- {
- eina_list_free(outputs_list);
- free(outputs_array);
- continue;
- }
- EINA_LIST_FOREACH(outputs_list, outputs_iter, output_info)
- ecore_x_randr_output_mode_add(output_info->xid, mode);
- INF("E_RANDR: \tSerialized mode was added to the server manually using the name %s.", mi->name);
- }
-
- // DEBUG
- if (mi)
- DBG("E_RANDR: \tRestoring CRTC %d (index %d) in mode %s.", ci->xid, sc->index, (mode == Ecore_X_Randr_None) ? "(disabled)" : mi->name);
- DBG("E_RANDR: \t\tUsed outputs:");
- EINA_LIST_FOREACH(outputs_list, outputs_iter, output_info)
- DBG("\t\t%s", output_info->name);
- // DEBUG END
-
- ret &= ecore_x_randr_crtc_settings_set(e_randr_screen_info.root, ci->xid, outputs_array, eina_list_count(outputs_list), sc->pos.x, sc->pos.y, mode, sc->orientation);
- eina_list_free(outputs_list);
- free(outputs_array);
- }
- return ret;
-}
-
-void
-_12_serialized_setup_free(E_Randr_Serialized_Setup_12 *ss_12)
-{
- E_Randr_Serialized_Crtc *sc;
- E_Randr_Edid_Hash *edid_hash;
-
- if (!ss_12) return;
-
- EINA_LIST_FREE(ss_12->crtcs, sc)
- {
- _serialized_crtc_free(sc);
- }
- EINA_LIST_FREE(ss_12->edid_hashes, edid_hash)
- free(edid_hash);
-
- free(ss_12);
-}
-
-EINTERN void
-e_randr_12_serialized_setup_free(E_Randr_Serialized_Setup_12 *ss_12)
-{
- _12_serialized_setup_free(ss_12);
-}
-
-void
-_12_store_configuration(E_Randr_Configuration_Store_Modifier modifier)
-{
- if (modifier & (E_RANDR_CONFIGURATION_STORE_RESOLUTIONS | E_RANDR_CONFIGURATION_STORE_ARRANGEMENT | E_RANDR_CONFIGURATION_STORE_ORIENTATIONS))
- {
- e_config->randr_serialized_setup->serialized_setups_12 = _12_serialized_setup_update(e_config->randr_serialized_setup->serialized_setups_12);
- }
-
- if (modifier & E_RANDR_CONFIGURATION_STORE_POLICIES)
- {
- //update output policies
- e_config->randr_serialized_setup->outputs_policies = _outputs_policies_update(e_config->randr_serialized_setup->outputs_policies);
- }
-}
-
-//Retrievel functions for the current e_randr_screen_info context
-
-// Find entities for restoration in current e_randr_screen_info context
-static E_Randr_Crtc_Info *
-_find_matching_crtc(E_Randr_Serialized_Crtc *sc)
-{
- EINA_SAFETY_ON_NULL_RETURN_VAL(sc, NULL);
- EINA_SAFETY_ON_TRUE_RETURN_VAL(E_RANDR_12_NO, NULL);
-
- INF("E_RANDR: Setup restore.. Runtime system knows about %d CRTCs. Requested CRTC has index %d", eina_list_count(e_randr_screen_info.rrvd_info.randr_info_12->crtcs), sc->index);
- return eina_list_nth(e_randr_screen_info.rrvd_info.randr_info_12->crtcs, sc->index);
-}
-
-/**
- * @brief Creates list of E_Randr_Output_Info* elements for list of
- * E_Randr_Serialized_Output* objects.
- * @param sois list of E_Randr_Serialized_Output* elements
- * @return List of E_Randr_Output* elements or NULL, if not all outputs could be
- * found or monitors are connected to different outputs
- */
-static Eina_List *
-_find_matching_outputs(Eina_List *sois)
-{
- Eina_List *r_output_iter, *s_output_iter, *list = NULL;
- E_Randr_Output_Info *oi;
- E_Randr_Serialized_Output *so;
-
- EINA_LIST_FOREACH(sois, s_output_iter, so)
- {
- INF("E_RANDR: \tLooking for serialized output \"%s\"", so->name);
- EINA_LIST_FOREACH(e_randr_screen_info.rrvd_info.randr_info_12->outputs, r_output_iter, oi)
- {
- INF("E_RANDR: \t\tComparing to output \"%s\"", oi->name);
- if (!strncmp(so->name, oi->name, oi->name_length))
- {
- list = eina_list_append(list, oi);
- break;
- }
- }
- }
- if (list && (eina_list_count(sois) != eina_list_count(list)))
- {
- eina_list_free(list);
- list = NULL;
- }
-
- return list;
-}
-
-static Ecore_X_Randr_Mode_Info *
-_find_matching_mode_info(Ecore_X_Randr_Mode_Info *mode)
-{
- Eina_List *iter;
- Ecore_X_Randr_Mode_Info *mi = NULL;
-
- EINA_LIST_FOREACH(e_randr_screen_info.rrvd_info.randr_info_12->modes, iter, mi)
- {
- if (!strncmp(mode->name, mi->name, mode->nameLength))
- return mi;
- }
- EINA_LIST_FOREACH(e_randr_screen_info.rrvd_info.randr_info_12->modes, iter, mi)
- {
-#define EQL(arg) (mi->arg == mode->arg)
- if (EQL(width) &&
- EQL(height) &&
- EQL(dotClock) &&
- EQL(hSyncStart) &&
- EQL(hSyncEnd) &&
- EQL(hTotal) &&
- EQL(hSkew) &&
- EQL(vSyncStart) &&
- EQL(vSyncEnd) &&
- EQL(vTotal) &&
- EQL(modeFlags))
- return mi;
-#undef EQL
- }
- return NULL;
-}
-
-static int
-_sort_by_number_of_edids(const void *d1, const void *d2)
-{
- const E_Randr_Serialized_Setup_12 *ss1 = (const E_Randr_Serialized_Setup_12 *)d1;
- const E_Randr_Serialized_Setup_12 *ss2 = (const E_Randr_Serialized_Setup_12 *)d2;
-
- EINA_SAFETY_ON_NULL_RETURN_VAL(ss1, 1);
- EINA_SAFETY_ON_NULL_RETURN_VAL(ss2, -1);
-
- if (eina_list_count(ss2->edid_hashes) > eina_list_count(ss1->edid_hashes))
- return 1;
- else
- return -1;
-}
-
diff --git a/src/bin/e_randr_private.h b/src/bin/e_randr_private.h
deleted file mode 100644
index cada26aa2..000000000
--- a/src/bin/e_randr_private.h
+++ /dev/null
@@ -1,67 +0,0 @@
-#ifdef E_TYPEDEFS
-
-#else
-#ifndef E_RANDR_PRIVATE_H
-#define E_RANDR_PRIVATE_H
-
-#include "e.h"
-
-#define ECORE_X_RANDR_1_1 ((1 << 16) | 1)
-#define ECORE_X_RANDR_1_2 ((1 << 16) | 2)
-#define ECORE_X_RANDR_1_3 ((1 << 16) | 3)
-
-#define Ecore_X_Randr_Unset -1
-#define Ecore_X_Randr_None 0
-
-#define E_RANDR_11_NO ((e_randr_screen_info.randr_version < ECORE_X_RANDR_1_1) || !e_randr_screen_info.rrvd_info.randr_info_11)
-#define E_RANDR_12_NO ((e_randr_screen_info.randr_version < ECORE_X_RANDR_1_2) || !e_randr_screen_info.rrvd_info.randr_info_12)
-#define E_RANDR_12_NO_CRTCS (E_RANDR_12_NO || !e_randr_screen_info.rrvd_info.randr_info_12->crtcs)
-#define E_RANDR_12_NO_CRTC(crtc) (E_RANDR_12_NO || !e_randr_screen_info.rrvd_info.randr_info_12->crtcs || (crtc == Ecore_X_Randr_None))
-#define E_RANDR_12_NO_OUTPUTS (E_RANDR_12_NO || !e_randr_screen_info.rrvd_info.randr_info_12->outputs)
-#define E_RANDR_12_NO_OUTPUT(output) (E_RANDR_12_NO || !e_randr_screen_info.rrvd_info.randr_info_12->outputs || (output == Ecore_X_Randr_None))
-#define E_RANDR_12_NO_MODES (E_RANDR_12_NO || !e_randr_screen_info.rrvd_info.randr_info_12->modes)
-#define E_RANDR_12_NO_MODE(mode) (E_RANDR_12_NO || !e_randr_screen_info.rrvd_info.randr_info_12->modes || (mode == Ecore_X_Randr_None))
-
-// RandRR == 1.1
-E_Randr_Screen_Info_11 *_11_screen_info_new(void);
-void _11_screen_info_free(E_Randr_Screen_Info_11 *screen_info_11);
-Eina_Bool _11_screen_info_refresh(void);
-Eina_Bool _11_try_restore_configuration(void);
-void _11_store_configuration(E_Randr_Configuration_Store_Modifier modifier);
-
-// RandRR >= 1.2
-E_Randr_Screen_Info_12 *_12_screen_info_new(void);
-void _12_screen_info_free(E_Randr_Screen_Info_12 *screen_info_12);
-Eina_Bool _12_screen_info_refresh(void);
-void _12_policies_restore(void);
-void _12_event_listeners_add(void);
-void _12_event_listeners_remove(void);
-// Retrieval functions
-Ecore_X_Randr_Mode_Info *_12_screen_info_mode_info_get(const Ecore_X_Randr_Mode mode);
-E_Randr_Crtc_Info *_12_screen_info_crtc_info_get(const Ecore_X_Randr_Crtc crtc);
-E_Randr_Output_Info *_12_screen_info_output_info_get(const Ecore_X_Randr_Output output);
-Eina_Bool _12_screen_info_edid_is_available(const E_Randr_Edid_Hash *hash);
-// (Re)store data
-E_Randr_Serialized_Setup_12 *_12_serialized_setup_new(void);
-void _12_serialized_setup_free(E_Randr_Serialized_Setup_12 *ss_12);
-Eina_Bool _12_try_restore_configuration(void);
-void _12_store_configuration(E_Randr_Configuration_Store_Modifier modifier);
-
-// >= 1.2 Substructures helper functions
-E_Randr_Monitor_Info *_monitor_info_new(E_Randr_Output_Info *output_info);
-void _monitor_info_free(E_Randr_Monitor_Info *monitor_info);
-void _monitor_modes_refs_set(E_Randr_Monitor_Info *mi, Ecore_X_Randr_Output output);
-E_Randr_Output_Info *_output_info_new(Ecore_X_Randr_Output output);
-void _output_info_free(E_Randr_Output_Info *output_info);
-void _output_refs_set(E_Randr_Output_Info *output_info);
-Ecore_X_Randr_Output *_outputs_to_array(Eina_List *outputs_info);
-Eina_List *_outputs_common_modes_get(Eina_List *outputs, Ecore_X_Randr_Mode_Info *max_size_mode);
-
-E_Randr_Crtc_Info * _crtc_info_new(Ecore_X_Randr_Crtc crtc);
-void _crtc_info_free(E_Randr_Crtc_Info *crtc_info);
-void _crtc_refs_set(E_Randr_Crtc_Info *crtc_info);
-void _crtc_outputs_refs_set(E_Randr_Crtc_Info *crtc_info);
-const E_Randr_Crtc_Info *_crtc_according_to_policy_get(E_Randr_Crtc_Info *but, Ecore_X_Randr_Output_Policy policy);
-
-#endif
-#endif
diff --git a/src/bin/e_randr_serialization.c b/src/bin/e_randr_serialization.c
deleted file mode 100644
index c50b840f5..000000000
--- a/src/bin/e_randr_serialization.c
+++ /dev/null
@@ -1,82 +0,0 @@
-#include "e_randr_private.h"
-#include "e_randr.h"
-
-#define ECORE_X_RANDR_1_1 ((1 << 16) | 1)
-#define ECORE_X_RANDR_1_2 ((1 << 16) | 2)
-#define ECORE_X_RANDR_1_3 ((1 << 16) | 3)
-
-/**********************************************************************
- *
- * Storage/Restorage of setups
- *
- **********************************************************************
- */
-
-EAPI void
-e_randr_store_configuration(E_Randr_Configuration_Store_Modifier modifier)
-{
- if (!e_config->randr_serialized_setup)
- e_config->randr_serialized_setup = e_randr_serialized_setup_new();
-
- fprintf(stderr, "E_RANDR: Configuration shall be stored using the following modifier:%s\n%s%s%s%s",
- ((!modifier) ? "NONE" : ""),
- ((modifier & E_RANDR_CONFIGURATION_STORE_POLICIES) ? "\tPOLICIES\n" : ""),
- ((modifier & E_RANDR_CONFIGURATION_STORE_RESOLUTIONS) ? "\tRESOLUTIONS\n" : ""),
- ((modifier & E_RANDR_CONFIGURATION_STORE_ARRANGEMENT) ? "\tARRANGEMENTS\n" : ""),
- ((modifier & E_RANDR_CONFIGURATION_STORE_ORIENTATIONS) ? "\tORIENTATIONS\n" : ""));
-
- if (e_randr_screen_info.randr_version == ECORE_X_RANDR_1_1)
- {
- _11_store_configuration(modifier);
- }
- else if (e_randr_screen_info.randr_version >= ECORE_X_RANDR_1_2)
- {
- _12_store_configuration(modifier);
- }
- e_config_save_queue();
-}
-
-EAPI Eina_Bool
-e_randr_try_restore_configuration(void)
-{
- EINA_SAFETY_ON_NULL_RETURN_VAL(e_config, EINA_FALSE);
- if (!e_config->randr_serialized_setup) return EINA_FALSE;
-
- if ((e_randr_screen_info.randr_version == ECORE_X_RANDR_1_1) ||
- ((e_randr_screen_info.randr_version >= ECORE_X_RANDR_1_1) && e_config->randr_serialized_setup->serialized_setup_11 && !e_config->randr_serialized_setup->serialized_setups_12)) // either be 1.1 or maybe we have stored a resolution using the old conf_display dialog (which uses randr 1.1)
- return _11_try_restore_configuration();
- else if (e_randr_screen_info.randr_version >= ECORE_X_RANDR_1_2)
- return _12_try_restore_configuration();
-
- return EINA_FALSE;
-}
-
-EINTERN E_Randr_Serialized_Setup *
-e_randr_serialized_setup_new(void)
-{
- return E_NEW(E_Randr_Serialized_Setup, 1);
-}
-
-EINTERN void
-e_randr_serialized_setup_free(E_Randr_Serialized_Setup *ss)
-{
- E_Randr_Serialized_Setup_12 *serialized_setup_12 = NULL;
- E_Randr_Serialized_Output_Policy *serialized_output_policy = NULL;
-
- EINA_SAFETY_ON_NULL_RETURN(ss);
-
- e_randr_11_serialized_setup_free(ss->serialized_setup_11);
- if (ss->serialized_setups_12)
- {
- EINA_LIST_FREE(ss->serialized_setups_12, serialized_setup_12)
- {
- e_randr_12_serialized_setup_free(serialized_setup_12);
- }
- }
- EINA_LIST_FREE(ss->outputs_policies, serialized_output_policy)
- {
- e_randr_12_serialized_output_policy_free(serialized_output_policy);
- }
- free(ss);
-}
-