1 #include "e_randr_private.h"
4 /**********************************************************************
6 * Storage/Restorage of setups
8 **********************************************************************
11 //New helper functions
13 E_Randr_Serialized_Setup_11 *
14 _serialized_setup_11_new(void)
16 E_Randr_Serialized_Setup_11 *ss;
17 Ecore_X_Randr_Screen_Size_MM *size;
18 Ecore_X_Randr_Orientation ori = ECORE_X_RANDR_ORIENTATION_ROT_0;
19 Ecore_X_Randr_Refresh_Rate rate = 0;
21 ss = malloc(sizeof(*ss));
23 if (e_randr_screen_info.randr_version == ECORE_X_RANDR_1_1)
25 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;
26 size = e_randr_screen_info.rrvd_info.randr_info_11->sizes + e_randr_screen_info.rrvd_info.randr_info_11->csize_index;
27 if (!size) goto _serialized_setup_11_new_failed_free_ss;;
28 rate = e_randr_screen_info.rrvd_info.randr_info_11->current_rate;
29 ori = e_randr_screen_info.rrvd_info.randr_info_11->corientation;
30 ss->size.width = size->width;
31 ss->size.width_mm = size->width_mm;
32 ss->size.height = size->height;
33 ss->size.height_mm = size->height_mm;
35 else if (e_randr_screen_info.randr_version > ECORE_X_RANDR_1_1)
37 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);
38 rate = ecore_x_randr_screen_primary_output_current_refresh_rate_get(e_randr_screen_info.root);
39 ori = ecore_x_randr_screen_primary_output_orientation_get(e_randr_screen_info.root);
42 ss->refresh_rate = rate;
43 ss->orientation = ori;
47 _serialized_setup_11_new_failed_free_ss:
52 //Update/value set helper functions
53 E_Randr_Serialized_Setup_11 *
54 _serialized_setup_11_update(E_Randr_Serialized_Setup_11 *ss_11)
57 e_randr_11_serialized_setup_free(ss_11);
59 ss_11 = _serialized_setup_11_new();
65 _11_store_configuration(E_Randr_Configuration_Store_Modifier modifier __UNUSED__)
67 if (!e_config->randr_serialized_setup)
68 e_config->randr_serialized_setup = e_randr_serialized_setup_new();
70 if (e_config->randr_serialized_setup->serialized_setup_11)
71 e_config->randr_serialized_setup->serialized_setup_11 = _serialized_setup_11_update(e_config->randr_serialized_setup->serialized_setup_11);
73 e_config->randr_serialized_setup->serialized_setup_11 = _serialized_setup_11_new();
77 EAPI void e_randr_11_store_configuration(E_Randr_Configuration_Store_Modifier modifier __UNUSED__)
79 _11_store_configuration(modifier);
80 e_config_save_queue();
83 //Free helper functions
85 _e_randr_serialized_setup_11_free(E_Randr_Serialized_Setup_11 *ss11)
91 e_randr_11_serialized_setup_free(E_Randr_Serialized_Setup_11 *ss_11)
93 _e_randr_serialized_setup_11_free(ss_11);
97 _11_try_restore_configuration(void)
99 Ecore_X_Randr_Screen_Size_MM *stored_size, *sizes = NULL;
102 #define SIZE_EQUAL(size) \
103 ((stored_size->width == (size).width) \
104 && (stored_size->height == (size).height) \
105 && (stored_size->width_mm == (size).width_mm) \
106 && (stored_size->height_mm == (size).height_mm))
108 if (!e_config->randr_serialized_setup->serialized_setup_11) return EINA_FALSE;
109 stored_size = &e_config->randr_serialized_setup->serialized_setup_11->size;
110 if (e_randr_screen_info.randr_version == ECORE_X_RANDR_1_1)
113 for (x = 0; x < e_randr_screen_info.rrvd_info.randr_info_11->nsizes; x++)
115 if (SIZE_EQUAL(e_randr_screen_info.rrvd_info.randr_info_11->sizes[x]))
117 return ecore_x_randr_screen_primary_output_size_set(e_randr_screen_info.root, i);
122 else if (e_randr_screen_info.randr_version > ECORE_X_RANDR_1_1)
124 sizes = ecore_x_randr_screen_primary_output_sizes_get(e_randr_screen_info.root, &nsizes);
125 for (i = 0; i < nsizes; i++)
127 if (SIZE_EQUAL(sizes[i]))
130 return ecore_x_randr_screen_primary_output_size_set(e_randr_screen_info.root, i);
136 if (sizes) free(sizes);