Probably unintended, but this commit does a lot more than it says it does. More specifically, you removed e_randr.[ch]. :)
On 25/01/15 13:50, Carsten Haitzler wrote: > raster pushed a commit to branch master. > > http://git.enlightenment.org/core/enlightenment.git/commit/?id=ab975cc349d5b0b23bb227e23a4d818071a0ed1e > > commit ab975cc349d5b0b23bb227e23a4d818071a0ed1e > Author: Carsten Haitzler (Rasterman) <ras...@rasterman.com> > Date: Sun Jan 25 22:38:44 2015 +0900 > > e - fix e widgets to use evas size hints - this unifies sizing elm vs e > --- > src/bin/e_randr.c | 1419 > ---------------------------------------------------- > src/bin/e_randr.h | 88 ---- > src/bin/e_widget.c | 12 +- > 3 files changed, 4 insertions(+), 1515 deletions(-) > > diff --git a/src/bin/e_randr.c b/src/bin/e_randr.c > deleted file mode 100644 > index 257e871..0000000 > --- a/src/bin/e_randr.c > +++ /dev/null > @@ -1,1419 +0,0 @@ > -#include "e.h" > - > -/* TODO: Handle orientation in stored config */ > -/* TODO: Ignore xrandr events triggered by changes in acpi cb */ > -/* TODO: Clone mode */ > -/* TODO: Lid at (x, y) == (0, 0) always */ > -/* TODO: Implement left-of, right-of, above and below placement relative for > outputs */ > - > -/* local function prototypes */ > -static Eina_Bool _e_randr_config_load(void); > -static void _e_randr_config_new(void); > -static void _e_randr_config_free(void); > -static void _e_randr_free(void); > -static Eina_Bool _e_randr_config_cb_timer(void *data); > -static void _e_randr_load(void); > -static void _e_randr_apply(void); > -static void _e_randr_output_mode_update(E_Randr_Output > *cfg); > -static E_Config_Randr_Output *_e_randr_config_output_new(void); > -static E_Config_Randr_Output *_e_randr_config_output_find(E_Randr_Output > *output); > -static E_Randr_Crtc *_e_randr_crtc_find(Ecore_X_Randr_Crtc xid); > -static E_Randr_Output *_e_randr_output_find(Ecore_X_Randr_Output xid); > -static void _e_randr_output_crtc_find(E_Randr_Output > *output); > - > -static void _e_randr_config_mode_geometry(Ecore_X_Randr_Orientation orient, > Eina_Rectangle *rect); > -static void _e_randr_config_primary_update(void); > - > -static Eina_Bool _e_randr_event_cb_screen_change(void *data, int type, void > *event); > -static Eina_Bool _e_randr_event_cb_crtc_change(void *data, int type, void > *event); > -static Eina_Bool _e_randr_event_cb_output_change(void *data, int type, void > *event); > - > -static void _e_randr_acpi_handler_add(void *data); > -static int _e_randr_is_lid(E_Randr_Output *cfg); > -static void _e_randr_crtc_from_outputs_set(E_Randr_Crtc *crtc); > -static Eina_Bool _e_randr_lid_update(void); > -static Eina_Bool _e_randr_output_mode_valid(Ecore_X_Randr_Mode mode, > Ecore_X_Randr_Mode *modes, int nmodes); > -static void _e_randr_output_active_set(E_Randr_Output *output, > Eina_Bool connected); > -//static int _e_randr_config_output_cmp(const void *a, const void *b); > -static char *_e_randr_output_name_get(Ecore_X_Window root, > Ecore_X_Randr_Output output); > - > -/* local variables */ > -static Eina_List *_randr_event_handlers = NULL; > -static E_Config_DD *_e_randr_edd = NULL; > -static E_Config_DD *_e_randr_output_edd = NULL; > - > -static int _e_randr_lid_is_closed = 0; > - > -/* external variables */ > -EAPI E_Config_Randr *e_randr_cfg = NULL; > -EAPI E_Randr *e_randr = NULL; > - > -/* private internal functions */ > -EINTERN Eina_Bool > -e_randr_init(void) > -{ > - /* check if randr is available */ > - if (!ecore_x_randr_query()) return EINA_FALSE; > - > - /* get initial lid status */ > - _e_randr_lid_is_closed = (e_acpi_lid_status_get() == E_ACPI_LID_CLOSED); > - > - /* try to load config */ > - if (!_e_randr_config_load()) > - { > - /* NB: We should probably print an error here */ > - return EINA_FALSE; > - } > - > - /* tell randr that we are interested in receiving events > - * > - * NB: Requires RandR >= 1.2 */ > - if (ecore_x_randr_version_get() >= E_RANDR_VERSION_1_2) > - { > - Ecore_X_Window root = 0; > - > - if ((root = ecore_x_window_root_first_get())) > - ecore_x_randr_events_select(root, EINA_TRUE); > - > - /* setup randr event listeners */ > - E_LIST_HANDLER_APPEND(_randr_event_handlers, > - ECORE_X_EVENT_SCREEN_CHANGE, > - _e_randr_event_cb_screen_change, NULL); > - E_LIST_HANDLER_APPEND(_randr_event_handlers, > - ECORE_X_EVENT_RANDR_CRTC_CHANGE, > - _e_randr_event_cb_crtc_change, NULL); > - E_LIST_HANDLER_APPEND(_randr_event_handlers, > - ECORE_X_EVENT_RANDR_OUTPUT_CHANGE, > - _e_randr_event_cb_output_change, NULL); > - } > - > - /* delay setting up acpi handler, as acpi is init'ed after randr */ > - ecore_job_add(_e_randr_acpi_handler_add, NULL); > - > - return EINA_TRUE; > -} > - > -EINTERN int > -e_randr_shutdown(void) > -{ > - /* check if randr is available */ > - if (!ecore_x_randr_query()) return 1; > - > - if (ecore_x_randr_version_get() >= E_RANDR_VERSION_1_2) > - { > - Ecore_X_Window root = 0; > - > - /* tell randr that we are not interested in receiving events anymore > */ > - if ((root = ecore_x_window_root_first_get())) > - ecore_x_randr_events_select(root, EINA_FALSE); > - } > - > - /* remove event listeners */ > - E_FREE_LIST(_randr_event_handlers, ecore_event_handler_del); > - > - /* free config */ > - _e_randr_free(); > - _e_randr_config_free(); > - > - /* free edd */ > - E_CONFIG_DD_FREE(_e_randr_output_edd); > - E_CONFIG_DD_FREE(_e_randr_edd); > - > - return 1; > -} > - > -/* public API functions */ > -EAPI Eina_Bool > -e_randr_config_save(void) > -{ > - /* save the new config */ > - return e_config_domain_save("e_randr", _e_randr_edd, e_randr_cfg); > -} > - > -EAPI void > -e_randr_config_apply(void) > -{ > - Eina_List *l; > - E_Randr_Output *output; > - > - /* Update output mode */ > - EINA_LIST_FOREACH(e_randr->outputs, l, output) > - { > - printf("RR: apply out %p... [%s]\n", output, output->name); > - if ((output->cfg) && (!output->cfg->connect)) > - { > - printf("RR: output disabled\n"); > - _e_randr_output_active_set(output, EINA_FALSE); > - } > - else if ((output->cfg) && (output->status == > ECORE_X_RANDR_CONNECTION_STATUS_CONNECTED)) > - { > - if (output->cfg) > - { > - printf("RR: output enabled [%i %i %ix%i | %2.3f orient > %i]\n", > - output->cfg->geo.x, output->cfg->geo.y, > - output->cfg->geo.w, output->cfg->geo.h, > - output->cfg->refresh_rate, output->cfg->orient); > - printf("RR: update mode\n"); > - _e_randr_output_mode_update(output); > - printf("RR: active set...\n"); > - _e_randr_output_active_set(output, EINA_TRUE); > - printf("RR: active set done\n"); > - } > - else > - printf("RR: no cfg\n"); > - } > - else > - { > - printf("RR: ???\n"); > - } > - } > - printf("RR: ... lid update\n"); > - /* update lid status */ > - _e_randr_lid_update(); > - > - printf("RR: randr apply...\n"); > - /* apply randr settings */ > - _e_randr_apply(); > - > - printf("RR: update primary...\n"); > - /* update primary output */ > - _e_randr_config_primary_update(); > -} > - > -EAPI double > -e_randr_mode_refresh_rate_get(Ecore_X_Randr_Mode_Info *mode) > -{ > - double rate = 0.0; > - > - if (mode) > - { > - if ((mode->hTotal) && (mode->vTotal)) > - rate = ((double)mode->dotClock / > - ((double)mode->hTotal * (double)mode->vTotal)); > - rate = round(rate); > - } > - > - return rate; > -} > - > -/* local functions */ > -static Eina_Bool > -_e_randr_config_load(void) > -{ > - Eina_Bool do_restore = EINA_TRUE; > - > - /* define edd for output config */ > - _e_randr_output_edd = > - E_CONFIG_DD_NEW("E_Config_Randr_Output", E_Config_Randr_Output); > -#undef T > -#undef D > -#define T E_Config_Randr_Output > -#define D _e_randr_output_edd > - E_CONFIG_VAL(D, T, name, STR); > - E_CONFIG_VAL(D, T, edid, STR); > - E_CONFIG_VAL(D, T, orient, UINT); > - E_CONFIG_VAL(D, T, geo.x, INT); > - E_CONFIG_VAL(D, T, geo.y, INT); > - E_CONFIG_VAL(D, T, geo.w, INT); > - E_CONFIG_VAL(D, T, geo.h, INT); > - E_CONFIG_VAL(D, T, refresh_rate, DOUBLE); > - E_CONFIG_VAL(D, T, connect, UCHAR); > - > - /* define edd for randr config */ > - _e_randr_edd = E_CONFIG_DD_NEW("E_Config_Randr", E_Config_Randr); > -#undef T > -#undef D > -#define T E_Config_Randr > -#define D _e_randr_edd > - E_CONFIG_VAL(D, T, version, INT); > - E_CONFIG_LIST(D, T, outputs, _e_randr_output_edd); > - E_CONFIG_VAL(D, T, restore, UCHAR); > - E_CONFIG_VAL(D, T, config_timestamp, ULL); > - // TODO: primary must be name + edid > - E_CONFIG_VAL(D, T, primary, UINT); > - > - /* try to load the randr config */ > - if ((e_randr_cfg = e_config_domain_load("e_randr", _e_randr_edd))) > - { > - /* check randr config version */ > - if (e_randr_cfg->version < (E_RANDR_CONFIG_FILE_EPOCH * 1000000)) > - { > - /* config is too old */ > - do_restore = EINA_FALSE; > - _e_randr_config_free(); > - ecore_timer_add(1.0, _e_randr_config_cb_timer, > - _("Settings data needed upgrading. Your old > settings have<br>" > - "been wiped and a new set of defaults > initialized. This<br>" > - "will happen regularly during development, so > don't report a<br>" > - "bug. This simply means Enlightenment needs > new settings<br>" > - "data by default for usable functionality > that your old<br>" > - "settings simply lack. This new set of > defaults will fix<br>" > - "that by adding it in. You can re-configure > things now to your<br>" > - "liking. Sorry for the hiccup in your > settings.<br>")); > - } > - else if (e_randr_cfg->version > E_RANDR_CONFIG_FILE_VERSION) > - { > - /* config is too new */ > - do_restore = EINA_FALSE; > - _e_randr_config_free(); > - ecore_timer_add(1.0, _e_randr_config_cb_timer, > - _("Your settings are NEWER than Enlightenment. > This is very<br>" > - "strange. This should not happen unless you > downgraded<br>" > - "Enlightenment or copied the settings from a > place where<br>" > - "a newer version of Enlightenment was > running. This is bad and<br>" > - "as a precaution your settings have been now > restored to<br>" > - "defaults. Sorry for the > inconvenience.<br>")); > - } > - } > - > - /* if config was too old or too new, then reload a fresh one */ > - if (!e_randr_cfg) > - { > - _e_randr_config_new(); > - do_restore = EINA_FALSE; > - } > - else > - { > -#define CONFIG_VERSION_CHECK(VERSION) \ > - if (e_randr_cfg->version - (E_RANDR_CONFIG_FILE_EPOCH * 1000000) < > (VERSION)) > - CONFIG_VERSION_CHECK(4) > - { > - E_Config_Randr_Output *output; > - Eina_List *l; > - > - /* Set refresh_rate to 60 */ > - EINA_LIST_FOREACH(e_randr_cfg->outputs, l, output) > - if (dblequal(output->refresh_rate, 0.0)) > output->refresh_rate = 60.0; > - } > - } > - > - if (!e_randr_cfg) return EINA_FALSE; > - > - _e_randr_load(); > - e_randr_config_save(); > - > - if ((do_restore) && (e_randr_cfg->restore)) > - { > - _e_randr_apply(); > - } > - > - return EINA_TRUE; > -} > - > -static void > -_e_randr_config_new(void) > -{ > - Ecore_X_Window root = 0; > - > - /* create new randr cfg */ > - if (!(e_randr_cfg = E_NEW(E_Config_Randr, 1))) > - return; > - > - /* grab the root window once */ > - root = ecore_x_window_root_first_get(); > - > - /* set version */ > - e_randr_cfg->version = E_RANDR_CONFIG_FILE_VERSION; > - > - /* by default, restore config */ > - e_randr_cfg->restore = EINA_TRUE; > - > - /* remember current primary */ > - e_randr_cfg->primary = ecore_x_randr_primary_output_get(root); > - > - /* update recorded config timestamp */ > - e_randr_cfg->config_timestamp = ecore_x_randr_config_timestamp_get(root); > -} > - > -static void > -_e_randr_config_free(void) > -{ > - E_Config_Randr_Output *output = NULL; > - > - /* safety check */ > - if (!e_randr_cfg) return; > - > - /* loop the config outputs and free them */ > - EINA_LIST_FREE(e_randr_cfg->outputs, output) > - { > - E_FREE(output); > - } > - > - /* free the config */ > - E_FREE(e_randr_cfg); > -} > - > -static void > -_e_randr_free(void) > -{ > - E_Randr_Crtc *crtc = NULL; > - E_Randr_Output *output = NULL; > - > - /* safety check */ > - if (!e_randr) return; > - > - /* loop the crtcs and free them */ > - EINA_LIST_FREE(e_randr->crtcs, crtc) > - { > - free(crtc); > - } > - > - /* loop the outputs and free them */ > - EINA_LIST_FREE(e_randr->outputs, output) > - { > - free(output->name); > - free(output->edid); > - free(output); > - } > - > - /* free the config */ > - E_FREE(e_randr); > -} > - > -static Eina_Bool > -_e_randr_config_cb_timer(void *data) > -{ > - e_util_dialog_show(_("Randr Settings Upgraded"), "%s", (char *)data); > - return EINA_FALSE; > -} > - > -static char * > -_e_randr_output_edid_string_get(Ecore_X_Window root, Ecore_X_Randr_Output > output) > -{ > - unsigned char *edid = NULL; > - unsigned long edid_len = 0; > - char *edid_str = NULL; > - > - edid = ecore_x_randr_output_edid_get(root, output, &edid_len); > - if (edid) > - { > - unsigned int k, kk; > - > - edid_str = malloc((edid_len * 2) + 1); > - if (edid_str) > - { > - const char *hexch = "0123456789abcdef"; > - > - for (kk = 0, k = 0; k < edid_len; k++) > - { > - edid_str[kk ] = hexch[(edid[k] >> 4) & 0xf]; > - edid_str[kk + 1] = hexch[ edid[k] & 0xf]; > - kk += 2; > - } > - edid_str[kk] = 0; > - } > - free(edid); > - } > - return edid_str; > -} > - > -/* function to map X's settings with E's settings */ > -static void > -_e_randr_load(void) > -{ > - Ecore_X_Window root = 0; > - Ecore_X_Randr_Output *outputs = NULL; > - int noutputs = 0; > - Ecore_X_Randr_Crtc *crtcs = NULL; > - int ncrtcs = 0, i = 0; > - > - e_randr = E_NEW(E_Randr, 1); > - if (!e_randr) return; > - > - /* grab the root window once */ > - root = ecore_x_window_root_first_get(); > - > - /* try to get the list of crtcs from x */ > - if ((crtcs = ecore_x_randr_crtcs_get(root, &ncrtcs))) > - { > - /* loop the crtcs */ > - for (i = 0; i < ncrtcs; i++) > - { > - E_Randr_Crtc *crtc; > - Ecore_X_Randr_Crtc_Info *cinfo; > - > - crtc = E_NEW(E_Randr_Crtc, 1); > - if (!crtc) continue; > - e_randr->crtcs = eina_list_append(e_randr->crtcs, crtc); > - crtc->xid = crtcs[i]; > - > - /* get crtc info from X */ > - if ((cinfo = ecore_x_randr_crtc_info_get(root, crtc->xid))) > - { > - crtc->geo.x = cinfo->x; > - crtc->geo.y = cinfo->y; > - crtc->geo.w = cinfo->width; > - crtc->geo.h = cinfo->height; > - crtc->mode = cinfo->mode; > - crtc->orient = cinfo->rotation; > - > - ecore_x_randr_crtc_info_free(cinfo); > - } > - printf("RR: crtc found %x | %i %i %ix%i - %x . %i\n", > - crtc->xid, > - crtc->geo.x, crtc->geo.y, crtc->geo.w, crtc->geo.h, > - crtc->mode, crtc->orient); > - } > - > - free(crtcs); > - } > - printf("RR: ====================\n"); > - /* try to get the list of outputs from x */ > - if ((outputs = ecore_x_randr_outputs_get(root, &noutputs))) > - { > - int j = 0; > - > - for (j = 0; j < noutputs; j++) > - { > - E_Randr_Output *output = NULL; > - Eina_Bool unknown = EINA_FALSE; > - > - output = E_NEW(E_Randr_Output, 1); > - if (!output) continue; > - > - e_randr->outputs = eina_list_append(e_randr->outputs, output); > - output->xid = outputs[j]; > - output->name = _e_randr_output_name_get(root, output->xid); > - output->is_lid = _e_randr_is_lid(output); > - output->edid = _e_randr_output_edid_string_get(root, > outputs[j]); > - output->status = > ecore_x_randr_output_connection_status_get(root, output->xid); > - output->cfg = _e_randr_config_output_find(output); > - if (!output->cfg) > - { > - output->cfg = _e_randr_config_output_new(); > - if (output->name) output->cfg->name = strdup(output->name); > - if (output->edid) output->cfg->edid = strdup(output->edid); > - unknown = EINA_TRUE; > - } > - printf("RR: output %x %s %i %p\n", output->xid, output->name, > output->status, output->cfg); > - > - /* find a crtc if we want this output connected */ > - if (output->cfg->connect && > - (output->status == > ECORE_X_RANDR_CONNECTION_STATUS_CONNECTED)) > - { > - _e_randr_output_active_set(output, EINA_TRUE); > - > - if (output->crtc) > - { > - printf("RR: ouput on crtc = %p\n", output->crtc); > - /* get orientation from crtc if not set */ > - if (!output->cfg->orient) > - output->cfg->orient = output->crtc->orient; > - /* find mode for output */ > - _e_randr_output_mode_update(output); > - /* set position from crtc if unknown */ > - if (unknown) > - { > - output->cfg->geo.x = output->crtc->geo.x; > - output->cfg->geo.y = output->crtc->geo.y; > - } > - } > - } > - } > - > - free(outputs); > - } > - > - /* update lid status */ > - _e_randr_lid_update(); > - > - /* update primary output */ > - _e_randr_config_primary_update(); > - > - /* update recorded config timestamp */ > - e_randr_cfg->config_timestamp = ecore_x_randr_config_timestamp_get(root); > - > - /* save the config */ > - e_randr_config_save(); > -} > - > -static void > -_e_randr_apply(void) > -{ > - E_Randr_Crtc *crtc; > - Eina_List *l; > - Ecore_X_Window root = 0; > - int nw = 0, nh = 0; > - int minw = 0, minh = 0; > - int maxw = 0, maxh = 0; > - int nx = INT_MAX, ny = INT_MAX; > - > - /* don't try to restore if we have fake screens */ > - if (e_xinerama_fake_screens_exist()) return; > - > - /* grab the X server so that we can apply settings without triggering > - * any randr event updates until we are done */ > - ecore_x_grab(); > - > - /* get the root window */ > - root = ecore_x_window_root_first_get(); > - > - /* get the min and max screen size */ > - ecore_x_randr_screen_size_range_get(root, &minw, &minh, &maxw, &maxh); > - printf("RRR0: size range: %ix%i -> %ix%i\n", minw, minh, maxw, maxh); > - nx = maxw; > - ny = maxh; > - nw = nh = 0; > - EINA_LIST_FOREACH(e_randr->crtcs, l, crtc) > - { > - int x = 0, y = 0, w = 0, h = 0; > - Ecore_X_Randr_Orientation orient = ECORE_X_RANDR_ORIENTATION_ROT_0; > - Eina_Rectangle rect; > - > - printf("RRR0: crtc: %x %i %i %ix%i rot: %i mode: %i\n", crtc->xid, > crtc->geo.x, crtc->geo.y, crtc->geo.w, crtc->geo.h, crtc->orient, crtc->mode); > - if (!crtc->outputs) continue; > - _e_randr_crtc_from_outputs_set(crtc); > - if (crtc->mode == 0) continue; > - x = crtc->geo.x; > - y = crtc->geo.y; > - orient = crtc->orient; > - rect = crtc->geo; > - _e_randr_config_mode_geometry(orient, &rect); > - w = rect.w; > - h = rect.h; > - if (((x + w) > maxw) || ((y + h) > maxh)) continue; > - if ((x + w) > nw) nw = x + w; > - if ((y + h) > nh) nh = y + h; > - if (x < nx) nx = x; > - if (y < ny) ny = y; > - } > - /* Adjust size according to origo */ > - nw -= nx; > - nh -= ny; > - /* apply the new screen size */ > - printf("RRR1: current screen size: %ix%i\n", nw, nh); > - ecore_x_randr_screen_current_size_set(root, nw, nh, -1, -1); > - > - nx = ny = nw = nh = 0; > - /* loop our lists of crtcs */ > - EINA_LIST_FOREACH(e_randr->crtcs, l, crtc) > - { > - E_Randr_Output *output; > - Eina_List *ll; > - int x = 0, y = 0, w = 0, h = 0; > - Ecore_X_Randr_Mode mode = 0; > - Ecore_X_Randr_Orientation orient = ECORE_X_RANDR_ORIENTATION_ROT_0; > - Eina_Rectangle rect; > - int count = 0; > - Ecore_X_Randr_Output *coutputs; > - > - printf("RRR2: crtc: %x %i %i %ix%i rot: %i mode: %i\n", crtc->xid, > crtc->geo.x, crtc->geo.y, crtc->geo.w, crtc->geo.h, crtc->orient, crtc->mode); > - if (!crtc->outputs) > - { > - printf("RRR2: no outputs - off\n"); > - ecore_x_randr_crtc_settings_set(root, crtc->xid, NULL, 0, 0, 0, > 0, > - > ECORE_X_RANDR_ORIENTATION_ROT_0); > - continue; > - } > - /* set config from connected outputs */ > - _e_randr_crtc_from_outputs_set(crtc); > - > - x = crtc->geo.x; > - y = crtc->geo.y; > - mode = crtc->mode; > - orient = crtc->orient; > - > - /* at this point, we should have geometry, mode and orientation. > - * we can now proceed to calculate crtc size */ > - rect = crtc->geo; > - _e_randr_config_mode_geometry(orient, &rect); > - w = rect.w; > - h = rect.h; > - > - /* if the crtc does not fit, disable it */ > - if (((x + w) > maxw) || ((y + h) > maxh) || (mode == 0)) > - { > - printf("RRR2: crtc dose not fit - off\n"); > - ecore_x_randr_crtc_settings_set(root, crtc->xid, NULL, 0, 0, 0, > 0, > - > ECORE_X_RANDR_ORIENTATION_ROT_0); > - continue; > - } > - > - /* find outputs to enable on crtc */ > - coutputs = calloc(eina_list_count(crtc->outputs), > sizeof(Ecore_X_Randr_Output)); > - if (!coutputs) > - { > - printf("RRR2: cannot alloc coutputs\n"); > - continue; > - } > - EINA_LIST_FOREACH(crtc->outputs, ll, output) > - { > - /* TODO: If this condition isn't true, the output should not be > in crtc->outputs. > - * crtc->outputs should only contain valid outputs */ > - if ((output->cfg) && (output->crtc == crtc) && (output->mode) && > - (output->status == > ECORE_X_RANDR_CONNECTION_STATUS_CONNECTED)) > - { > - int i; > - Eina_Bool ok; > - > - ok = EINA_TRUE; > - /* TODO: This is wrong, one output shouldn't be twice in > crtc list */ > - for (i = 0; i < count; i++) > - { > - if (coutputs[i] == output->xid) > - { > - ok = EINA_FALSE; > - printf("RRR: Error, same output twice on > crtc."); > - printf(" output: '%s' lid: %i active: %i status: > %i\n", output->name, output->is_lid, output->active, output->status); > - break; > - } > - } > - if (ok) > - { > - printf("RRR2: add output %s\n", output->name); > - coutputs[count] = output->xid; > - count++; > - } > - } > - } > - > - printf("RRR2: set mode %x | %i %i %ix%i | %x | %i\n", > - crtc->xid, > - crtc->geo.x, crtc->geo.y, crtc->geo.w, crtc->geo.h, > - crtc->mode, crtc->orient); > - /* apply our stored crtc settings */ > - if (count > 0) > - ecore_x_randr_crtc_settings_set(root, crtc->xid, coutputs, > - count, crtc->geo.x, crtc->geo.y, > - crtc->mode, crtc->orient); > - else > - { > - printf("RRR2: no coutputs - off\n"); > - ecore_x_randr_crtc_settings_set(root, crtc->xid, NULL, 0, 0, 0, > 0, > - > ECORE_X_RANDR_ORIENTATION_ROT_0); > - } > - > - /* cleanup */ > - free(coutputs); > - } > - /* this moves screen to (0, 0) */ > - ecore_x_randr_screen_reset(root); > - /* release the server grab */ > - ecore_x_ungrab(); > -} > - > -static Eina_Bool > -_e_randr_event_cb_screen_change(void *data EINA_UNUSED, int type > EINA_UNUSED, void *event) > -{ > - Ecore_X_Event_Screen_Change *ev; > - Eina_Bool changed = EINA_FALSE; > - Ecore_X_Randr_Output primary = 0; > - > - ev = event; > - > - /* check if this event's root window is Our root window */ > - if (ev->root != e_manager_current_get()->root) > - return ECORE_CALLBACK_RENEW; > - > - primary = ecore_x_randr_primary_output_get(ev->root); > - > - if (e_randr_cfg->primary != primary) > - { > - e_randr_cfg->primary = primary; > - changed = EINA_TRUE; > - } > - > - if (e_randr_cfg->config_timestamp != ev->config_time) > - { > - e_randr_cfg->config_timestamp = ev->config_time; > - changed = EINA_TRUE; > - } > - > - if (changed) e_randr_config_save(); > - > - return ECORE_CALLBACK_RENEW; > -} > - > -static Eina_Bool > -_e_randr_event_cb_crtc_change(void *data EINA_UNUSED, int type EINA_UNUSED, > void *event) > -{ > - Ecore_X_Event_Randr_Crtc_Change *ev; > - E_Randr_Crtc *crtc; > - > - ev = event; > - crtc = _e_randr_crtc_find(ev->crtc); > - > - if (!crtc) > - { > - crtc = E_NEW(E_Randr_Crtc, 1); > - if (crtc) > - { > - e_randr->crtcs = eina_list_append(e_randr->crtcs, crtc); > - crtc->xid = ev->crtc; > - > - crtc->geo = ev->geo; > - crtc->mode = ev->mode; > - crtc->orient = ev->orientation; > - } > - } > - else > - { > - /* check (and update if needed) our crtc config */ > - if ((ev->mode != crtc->mode) || > - (ev->orientation != crtc->orient) || > - (ev->geo.x != crtc->geo.x) || (ev->geo.y != crtc->geo.y) || > - (ev->geo.w != crtc->geo.w) || (ev->geo.h != crtc->geo.h)) > - { > - crtc->mode = ev->mode; > - crtc->orient = ev->orientation; > - crtc->geo = ev->geo; > - } > - } > - > - return ECORE_CALLBACK_RENEW; > -} > - > -static Eina_Bool > -_e_randr_event_cb_output_change(void *data EINA_UNUSED, int type > EINA_UNUSED, void *event) > -{ > - Ecore_X_Event_Randr_Output_Change *ev; > - E_Randr_Output *output; > - Eina_Bool changed = EINA_FALSE; > - > - ev = event; > - > - /* check if this event's root window is Our root window */ > - if (ev->win != e_manager_current_get()->root) > - return ECORE_CALLBACK_RENEW; > - > - /* loop our crtcs and try to find this output */ > - output = _e_randr_output_find(ev->output); > - if (!output) > - { > - Ecore_X_Window root; > - > - root = ecore_x_window_root_first_get(); > - > - output = E_NEW(E_Randr_Output, 1); > - if (!output) goto error; > - e_randr->outputs = eina_list_append(e_randr->outputs, output); > - output->xid = ev->output; > - output->name = _e_randr_output_name_get(root, output->xid); > - output->is_lid = _e_randr_is_lid(output); > - output->edid = _e_randr_output_edid_string_get(root, ev->output); > - changed = EINA_TRUE; > - output->cfg = _e_randr_config_output_find(output); > - if (!output->cfg) > - { > - output->cfg = _e_randr_config_output_new(); > - if (output->name) output->cfg->name = strdup(output->name); > - if (output->edid) output->cfg->edid = strdup(output->edid); > - } > - } > - output->status = ev->connection; > - > - /* we know this output */ > - if (output->is_lid && _e_randr_lid_is_closed) > - { > - /* ignore event from disconnected lid */ > - } > - else if (ev->connection == ECORE_X_RANDR_CONNECTION_STATUS_CONNECTED) > - { > - Eina_Bool unknown = EINA_FALSE; > - > - if ((!output->crtc) || (output->crtc->xid == 0)) unknown = EINA_TRUE; > - > - /* connected */ > - if ((ev->crtc != 0) && ((!unknown) && (output->crtc->xid != > ev->crtc))) > - { > - /* remove from old crtc */ > - _e_randr_output_active_set(output, EINA_FALSE); > - } > - if ((!output->active) && (output->cfg->connect)) > - { > - _e_randr_output_active_set(output, EINA_TRUE); > - > - if (output->crtc) > - { > - /* connect to crtc */ > - /* get orientation from crtc if not set */ > - if (!output->cfg->orient) > - output->cfg->orient = output->crtc->orient; > - /* validate output mode */ > - _e_randr_output_mode_update(output); > - /* if unknown position at far right */ > - if (unknown) > - { > - E_Randr_Output *other; > - Eina_List *l; > - > - EINA_LIST_FOREACH(e_randr->outputs, l, other) > - { > - if ((other == output) || (!output->active)) > continue; > - if ((other->cfg->geo.x + other->cfg->geo.w) > > output->cfg->geo.x) > - output->cfg->geo.x = other->cfg->geo.x + > other->cfg->geo.w; > - } > - } > - } > - changed = EINA_TRUE; > - } > - } > - else if (ev->connection == ECORE_X_RANDR_CONNECTION_STATUS_DISCONNECTED) > - { > - /* disconnected */ > - if (output->active) > - { > - _e_randr_output_active_set(output, EINA_FALSE); > - changed = EINA_TRUE; > - } > - } > - > - /* save the config if anything changed or we added a new one */ > - if (changed) > - { > - _e_randr_lid_update(); > - _e_randr_config_primary_update(); > - _e_randr_apply(); > - > - e_randr_config_save(); > - } > - > - return ECORE_CALLBACK_RENEW; > -error: > - free(output); > - return ECORE_CALLBACK_RENEW; > -} > - > -static Eina_Bool > -_e_randr_event_cb_acpi(void *data EINA_UNUSED, int type EINA_UNUSED, void > *event) > -{ > - E_Event_Acpi *ev; > - > - ev = event; > - > - if (ev->type == E_ACPI_TYPE_LID) > - { > - Eina_Bool changed; > - > - _e_randr_lid_is_closed = (ev->status == E_ACPI_LID_CLOSED); > - changed = _e_randr_lid_update(); > - if (changed) > - { > - /* force new evaluation of primary */ > - e_randr_cfg->primary = 0; > - _e_randr_config_primary_update(); > - _e_randr_apply(); > - } > - } > - return ECORE_CALLBACK_RENEW; > -} > - > -static void > -_e_randr_output_mode_update(E_Randr_Output *output) > -{ > - Ecore_X_Window root = 0; > - Ecore_X_Randr_Mode *modes = NULL; > - int nmodes = 0, pref = 0; > - Ecore_X_Randr_Mode_Info **mode_infos = NULL; > - int nmode_infos = 0; > - int i = 0; > - > - /* grab the root window */ > - root = ecore_x_window_root_first_get(); > - > - printf("RR: ... 1 - %s\n", output->name); > - /* get mode infos */ > - mode_infos = ecore_x_randr_modes_info_get(root, &nmode_infos); > - if (nmode_infos == 0) goto error; > - printf("RR: ... 2\n"); > - /* get the list of modes for this output */ > - modes = ecore_x_randr_output_modes_get(root, output->xid, &nmodes, &pref); > - if (nmodes == 0) goto error; > - printf("RR: ... 3\n"); > - > - /* try to find the matching mode */ > - output->mode = 0; > - if ((output->cfg->geo.w != 0) && (output->cfg->geo.h != 0)) > - { > - printf("RR: ... 4\n"); > - for (i = 0; i < nmode_infos; i++) > - { > - double rate = 0.0; > - > - rate = e_randr_mode_refresh_rate_get(mode_infos[i]); > - printf("RR: ... 4.1 ... %i %1.3f cfg=%p modes=%p nmodes=%i\n", > i, rate, output->cfg, modes, nmodes); > - if ((mode_infos[i]->width == (unsigned int)output->cfg->geo.w) > && > - (mode_infos[i]->height == (unsigned int)output->cfg->geo.h) > && > - (dblequal(rate, output->cfg->refresh_rate)) && > - (_e_randr_output_mode_valid(mode_infos[i]->xid, modes, > nmodes))) > - { > - printf("RR: ... 4.2 - match %ix%i @ %2.3f\n", > output->cfg->geo.w, output->cfg->geo.h, rate); > - output->mode = mode_infos[i]->xid; > - break; > - } > - printf("RR: ... 4.3\n"); > - } > - } > - printf("RR: ... 5\n"); > - > - /* see if we can use the mode of the crtc */ > - if ((!output->mode) && (output->crtc)) > - { > - E_Randr_Crtc *crtc; > - > - crtc = _e_randr_crtc_find(ecore_x_randr_output_crtc_get(root, > output->xid)); > - printf("RR: ... 6\n"); > - if (crtc && crtc->mode) > - { > - printf("RR: ... 6.1\n"); > - if (_e_randr_output_mode_valid(crtc->mode, modes, nmodes)) > - output->mode = crtc->mode; > - /* TODO: See if we have a mode of the same size with another > mode id */ > - } > - } > - printf("RR: ... 7\n"); > - > - /* set preferred mode */ > - if (!output->mode) > - { > - printf("RR: ... 8\n"); > - if (pref > 0) output->mode = modes[pref - 1]; > - else output->mode = modes[0]; > - } > - > - /* set width and height from mode */ > - for (i = 0; i < nmode_infos; i++) > - { > - printf("RR: ... 9\n"); > - if (mode_infos[i]->xid == output->mode) > - { > - output->cfg->geo.w = mode_infos[i]->width; > - output->cfg->geo.h = mode_infos[i]->height; > - output->cfg->refresh_rate = > e_randr_mode_refresh_rate_get(mode_infos[i]); > - printf("RR: ... 9.1 %ix%i @ %2.3f\n", output->cfg->geo.w, > output->cfg->geo.h, output->cfg->refresh_rate); > - break; > - } > - } > - printf("RR: ... 10\n"); > - > - if (modes) free(modes); > - if (mode_infos) > - { > - for (i = 0; i < nmode_infos; i++) free(mode_infos[i]); > - free(mode_infos); > - } > - return; > -error: > - if (modes) free(modes); > - if (mode_infos) > - { > - for (i = 0; i < nmode_infos; i++) > - free(mode_infos[i]); > - free(mode_infos); > - } > - output->cfg->geo.x = output->cfg->geo.y = output->cfg->geo.w = > output->cfg->geo.h = 0; > - output->cfg->refresh_rate = 0.0; > - output->mode = 0; > - return; > -} > - > -static E_Config_Randr_Output * > -_e_randr_config_output_new(void) > -{ > - E_Config_Randr_Output *cfg = NULL; > - > - if ((cfg = E_NEW(E_Config_Randr_Output, 1))) > - { > - /* all new outputs should connect automatically */ > - /* TODO: config option */ > - cfg->connect = EINA_TRUE; > - > - /* append this output config to randr config */ > - e_randr_cfg->outputs = > - eina_list_append(e_randr_cfg->outputs, cfg); > - } > - > - return cfg; > -} > - > -static E_Config_Randr_Output * > -_e_randr_config_output_find(E_Randr_Output *output) > -{ > - Eina_List *l; > - E_Config_Randr_Output *output_cfg; > - char b1[4096], b2[4096]; > - > - /* TODO: We should not match outputs with unknown name and edid */ > - snprintf(b1, sizeof(b1), "%s.%s", > - output->name ? output->name : "???", > - output->edid ? output->edid : "???"); > - EINA_LIST_FOREACH(e_randr_cfg->outputs, l, output_cfg) > - { > - snprintf(b2, sizeof(b2), "%s.%s", > - output_cfg->name ? output_cfg->name : "???", > - output_cfg->edid ? output_cfg->edid : "???"); > - if (!strcmp(b1, b2)) return output_cfg; > - } > - > - return NULL; > -} > - > -static E_Randr_Crtc * > -_e_randr_crtc_find(Ecore_X_Randr_Crtc xid) > -{ > - Eina_List *l; > - E_Randr_Crtc *crtc; > - > - EINA_LIST_FOREACH(e_randr->crtcs, l, crtc) > - { > - if (crtc->xid == xid) > - return crtc; > - } > - > - return NULL; > -} > - > -static E_Randr_Output * > -_e_randr_output_find(Ecore_X_Randr_Output xid) > -{ > - Eina_List *l; > - E_Randr_Output *output; > - > - EINA_LIST_FOREACH(e_randr->outputs, l, output) > - { > - if (output->xid == xid) > - return output; > - } > - > - return NULL; > -} > - > -static void > -_e_randr_output_crtc_find(E_Randr_Output *output) > -{ > - Ecore_X_Window root = 0; > - E_Randr_Crtc *crtc = NULL; > - Ecore_X_Randr_Crtc *possible = NULL; > - Ecore_X_Randr_Mode *modes = NULL; > - Eina_List *l; > - int num = 0, i = 0; > - int nmodes, pref; > - > - /* grab the root window */ > - root = ecore_x_window_root_first_get(); > - > - /* check if last is available */ > - if ((crtc = _e_randr_crtc_find(ecore_x_randr_output_crtc_get(root, > output->xid)))) > - { > - if (!crtc->outputs) > - goto done; > - } > - > - /* get a list of possible crtcs for this output */ > - possible = ecore_x_randr_output_possible_crtcs_get(root, output->xid, > &num); > - if (num == 0) goto error; > - > - /* loop the possible crtcs */ > - for (i = 0; i < num; i++) > - { > - if ((crtc = _e_randr_crtc_find(possible[i]))) > - { > - if (!crtc->outputs) > - goto done; > - } > - } > - > - /* get the list of modes for this output */ > - modes = ecore_x_randr_output_modes_get(root, output->xid, &nmodes, &pref); > - if (nmodes == 0) > - goto error; > - > - /* can we clone this output */ > - for (i = 0; i < num; i++) > - { > - if ((crtc = _e_randr_crtc_find(possible[i]))) > - { > - /* check if mode is valid for this output */ > - if (_e_randr_output_mode_valid(crtc->mode, modes, nmodes)) > - goto done; > - } > - } > - > - /* last resort, just loop crtcs to find available */ > - EINA_LIST_FOREACH(e_randr->crtcs, l, crtc) > - { > - if (!crtc->outputs) goto done; > - crtc = NULL; > - } > - > -error: > - free(possible); > - free(modes); > - > - output->crtc = NULL; > - return; > - > -done: > - free(possible); > - free(modes); > - > - output->crtc = crtc; > -} > - > -static void > -_e_randr_config_mode_geometry(Ecore_X_Randr_Orientation orient, > Eina_Rectangle *rect) > -{ > - int mw = 0, mh = 0; > - > - /* based on orientation, calculate mode sizes */ > - switch (orient) > - { > - case ECORE_X_RANDR_ORIENTATION_ROT_0: > - case ECORE_X_RANDR_ORIENTATION_ROT_180: > - mw = rect->w; > - mh = rect->h; > - break; > - case ECORE_X_RANDR_ORIENTATION_ROT_90: > - case ECORE_X_RANDR_ORIENTATION_ROT_270: > - mw = rect->h; > - mh = rect->w; > - break; > - default: > - break; > - } > - > - rect->x = 0; > - rect->y = 0; > - rect->w = mw; > - rect->h = mh; > -} > - > -static void > -_e_randr_config_primary_update(void) > -{ > - Ecore_X_Window root = 0; > - Eina_List *l; > - E_Randr_Output *output; > - Ecore_X_Randr_Output primary = 0; > - > - /* check if we agree with system setup */ > - root = ecore_x_window_root_first_get(); > - primary = ecore_x_randr_primary_output_get(root); > - /* see if our selected primary exists and is connected */ > - output = _e_randr_output_find(e_randr_cfg->primary); > - if ((!output) || (!output->active)) > - e_randr_cfg->primary = 0; > - > - /* check if system primary is the same as ours */ > - if ((primary > 0) && (primary == e_randr_cfg->primary)) return; > - > - if ((e_randr_cfg->primary > 0) && > - output && output->active) > - { > - /* prefer our primary */ > - ecore_x_randr_primary_output_set(root, e_randr_cfg->primary); > - } > - else > - { > - /* find lid */ > - e_randr_cfg->primary = 0; > - EINA_LIST_FOREACH(e_randr->outputs, l, output) > - { > - if (output->is_lid) > - { > - if (output->active) > - e_randr_cfg->primary = output->xid; > - break; > - } > - } > - if (!e_randr_cfg->primary) > - { > - /* TODO: prefer top-left active monitor */ > - /* no lid, use first existing */ > - EINA_LIST_FOREACH(e_randr->outputs, l, output) > - { > - if (output->active) > - { > - e_randr_cfg->primary = output->xid; > - break; > - } > - } > - } > - /* set primary */ > - ecore_x_randr_primary_output_set(root, e_randr_cfg->primary); > - } > -} > - > -static void > -_e_randr_acpi_handler_add(void *data EINA_UNUSED) > -{ > - E_LIST_HANDLER_APPEND(_randr_event_handlers, > - E_EVENT_ACPI, > - _e_randr_event_cb_acpi, NULL); > -} > - > -static int > -_e_randr_is_lid(E_Randr_Output *cfg) > -{ > - /* TODO: ecore_x_randr_output_connector_type_get */ > - int ret = 0; > - > - if (!cfg->name) return 0; > - if (strstr(cfg->name, "LVDS")) ret = 1; > - else if (strstr(cfg->name, "lvds")) ret = 1; > - else if (strstr(cfg->name, "Lvds")) ret = 1; > - else if (strstr(cfg->name, "LCD")) ret = 1; > - else if (strstr(cfg->name, "eDP")) ret = 1; > - else if (strstr(cfg->name, "edp")) ret = 1; > - else if (strstr(cfg->name, "EDP")) ret = 1; > - return ret; > -} > - > -static void > -_e_randr_crtc_from_outputs_set(E_Randr_Crtc *crtc) > -{ > - E_Randr_Output *output; > - Eina_List *l; > - > - EINA_LIST_FOREACH(crtc->outputs, l, output) > - { > - if (!output->active) continue; > - /* TODO: If status != connected, active should not be set */ > - if (output->status != ECORE_X_RANDR_CONNECTION_STATUS_CONNECTED) > - { > - printf("RRR: Error, unconnected output which is active."); > - printf(" output: '%s' lid: %i active: %i status: %i\n", > - output->name, output->is_lid, output->active, > output->status); > - continue; > - } > - printf("RRR: output: '%s' lid: %i active: %i status: %i\n", > output->name, output->is_lid, output->active, output->status); > - /* TODO: Match all connected outputs, not only the first */ > - crtc->mode = output->mode; > - crtc->orient = output->cfg->orient; > - crtc->geo = output->cfg->geo; > - break; > - } > -} > - > -static Eina_Bool > -_e_randr_lid_update(void) > -{ > - E_Randr_Output *output; > - Eina_List *l; > - Eina_Bool changed = EINA_FALSE; > - int active_nonlid = 0; > - > - changed = EINA_FALSE; > - /* Find all non-lids */ > - EINA_LIST_FOREACH(e_randr->outputs, l, output) > - { > - if (output->is_lid) continue; > - if (!output->active) continue; > - active_nonlid++; > - } > - if (_e_randr_lid_is_closed && (active_nonlid > 0)) > - { > - /* Disable lids if closed and we have other monitors */ > - EINA_LIST_FOREACH(e_randr->outputs, l, output) > - { > - Eina_Bool active; > - > - if (!output->is_lid) continue; > - active = output->active; > - _e_randr_output_active_set(output, EINA_FALSE); > - if (active != output->active) changed = EINA_TRUE; > - } > - } > - else > - { > - /* Enable lids */ > - EINA_LIST_FOREACH(e_randr->outputs, l, output) > - { > - Eina_Bool active; > - > - if (!output->is_lid) continue; > - if (output->cfg && output->cfg->connect) > - { > - active = output->active; > - _e_randr_output_active_set(output, EINA_TRUE); > - if (active != output->active) changed = EINA_TRUE; > - } > - } > - } > - > - return changed; > -} > - > -static Eina_Bool > -_e_randr_output_mode_valid(Ecore_X_Randr_Mode mode, Ecore_X_Randr_Mode > *modes, int nmodes) > -{ > - Eina_Bool valid = EINA_FALSE; > - int i; > - > - for (i = 0; i < nmodes; i++) > - { > - if (modes[i] == mode) > - { > - valid = EINA_TRUE; > - break; > - } > - } > - return valid; > -} > - > -static void > -_e_randr_output_active_set(E_Randr_Output *output, Eina_Bool active) > -{ > - E_Randr_Crtc *crtc; > - Eina_List *l; > - > - printf("RR: _e_randr_output_active_set... [%s] %i %i\n", output->name, > output->active, active); > - output->active = EINA_FALSE; > - > - /* Remove output from all crtcs */ > - /* TODO: In theory the output should be only on one crtc, but to be > sure... > - * And we always do this be sure we have a good crtc */ > - EINA_LIST_FOREACH(e_randr->crtcs, l, crtc) > - { > - crtc->outputs = > - eina_list_remove(crtc->outputs, output); > - } > - output->crtc = NULL; > - > - if (active) > - { > - /* Find a crtc for the output */ > - _e_randr_output_crtc_find(output); > - if (output->crtc) > - { > - printf("RR: ... found crtc %i\n", active); > - output->crtc->outputs = > - eina_list_append(output->crtc->outputs, output); > - output->active = EINA_TRUE; > - } > - } > - printf("RR: _e_randr_output_active_set... done - %p\n", output->crtc); > - > - /* Track all active outputs */ > - e_randr->active = 0; > - EINA_LIST_FOREACH(e_randr->outputs, l, output) > - { > - if (output->active) e_randr->active++; > - } > -} > - > -static char * > -_e_randr_output_name_get(Ecore_X_Window root, Ecore_X_Randr_Output output) > -{ > - char *name; > - > - name = ecore_x_randr_output_name_get(root, output, NULL); > - if (!name) > - { > - > - unsigned char *edid = NULL; > - unsigned long edid_length = 0; > - > - /* get the edid for this output */ > - if ((edid = > - ecore_x_randr_output_edid_get(root, output, &edid_length))) > - { > - /* get output name */ > - name = ecore_x_randr_edid_display_name_get(edid, edid_length); > - > - /* free any memory allocated from ecore_x_randr */ > - free(edid); > - } > - } > - return name; > -} > diff --git a/src/bin/e_randr.h b/src/bin/e_randr.h > deleted file mode 100644 > index 654a7e4..0000000 > --- a/src/bin/e_randr.h > +++ /dev/null > @@ -1,88 +0,0 @@ > -#ifdef E_TYPEDEFS > - > -typedef struct _E_Config_Randr_Output E_Config_Randr_Output; > -typedef struct _E_Config_Randr E_Config_Randr; > - > -typedef struct _E_Randr_Output E_Randr_Output; > -typedef struct _E_Randr_Crtc E_Randr_Crtc; > -typedef struct _E_Randr E_Randr; > - > -#else > -# ifndef E_RANDR_H > -# define E_RANDR_H > - > -#define E_RANDR_VERSION_1_1 ((1 << 16) | 1) > -#define E_RANDR_VERSION_1_2 ((1 << 16) | 2) > -#define E_RANDR_VERSION_1_3 ((1 << 16) | 3) > -#define E_RANDR_VERSION_1_4 ((1 << 16) | 4) > - > -#define E_RANDR_CONFIG_FILE_EPOCH 5 > -#define E_RANDR_CONFIG_FILE_GENERATION 1 > -#define E_RANDR_CONFIG_FILE_VERSION \ > - ((E_RANDR_CONFIG_FILE_EPOCH * 1000000) + E_RANDR_CONFIG_FILE_GENERATION) > - > -struct _E_Config_Randr_Output > -{ > - const char *name; > - const char *edid; > - > - unsigned int orient; // value of the ecore_x_randr_orientation > - Eina_Rectangle geo; // geometry > - double refresh_rate; // calculated refresh rate > - Eina_Bool connect; // does the user want this output connected > -}; > - > -struct _E_Config_Randr > -{ > - int version; // INTERNAL CONFIG VERSION > - > - Eina_List *outputs; > - > - unsigned char restore; > - unsigned long config_timestamp; > - unsigned int primary; > -}; > - > -struct _E_Randr_Output > -{ > - unsigned int xid; // ecore_x_randr output id (xid) > - unsigned int mode; // ecore_x_randr mode id (xid) > - char *name; // name of output > - char *edid; // edid as a hex string > - Eina_Bool is_lid; // is this a laptop panel > - Eina_Bool active; // if this output is active > - Ecore_X_Randr_Connection_Status status; > - > - E_Config_Randr_Output *cfg; > - E_Randr_Crtc *crtc; > -}; > - > -struct _E_Randr_Crtc > -{ > - unsigned int xid; // ecore_x_randr output id (xid) > - > - Eina_Rectangle geo; // geometry > - unsigned int orient; // value of the ecore_x_randr_orientation > - unsigned int mode; // ecore_x_randr mode id (xid) > - Eina_List *outputs; // list of outputs for this crtc > -}; > - > -struct _E_Randr > -{ > - int active; // number of active outputs > - Eina_List *crtcs; // list of crtcs > - Eina_List *outputs; // list of outputs > -}; > - > -EINTERN Eina_Bool e_randr_init(void); > -EINTERN int e_randr_shutdown(void); > - > -EAPI Eina_Bool e_randr_config_save(void); > -EAPI void e_randr_config_apply(void); > -EAPI double e_randr_mode_refresh_rate_get(Ecore_X_Randr_Mode_Info *mode); > - > -extern EAPI E_Config_Randr *e_randr_cfg; > -extern EAPI E_Randr *e_randr; > - > -# endif > -#endif > diff --git a/src/bin/e_widget.c b/src/bin/e_widget.c > index 8d94ff8..4b72f9d 100644 > --- a/src/bin/e_widget.c > +++ b/src/bin/e_widget.c > @@ -130,18 +130,13 @@ e_widget_data_get(Evas_Object *obj) > EAPI void > e_widget_size_min_set(Evas_Object *obj, Evas_Coord minw, Evas_Coord minh) > { > - API_ENTRY return; > - if (minw >= 0) sd->minw = minw; > - if (minh >= 0) sd->minh = minh; > evas_object_size_hint_min_set(obj, minw, minh); > } > > EAPI void > e_widget_size_min_get(Evas_Object *obj, Evas_Coord *minw, Evas_Coord *minh) > { > - API_ENTRY return; > - if (minw) *minw = sd->minw; > - if (minh) *minh = sd->minh; > + evas_object_size_hint_min_get(obj, minw, minh); > } > > static void > @@ -508,8 +503,9 @@ e_widget_pointer_get(Evas_Object *obj) > EAPI void > e_widget_size_min_resize(Evas_Object *obj) > { > - API_ENTRY return; > - evas_object_resize(obj, sd->minw, sd->minh); > + Evas_Coord minw, minh; > + evas_object_size_hint_min_get(obj, &minw, &minh); > + evas_object_resize(obj, minw, minh); > } > > /* local subsystem functions */ > ------------------------------------------------------------------------------ New Year. New Location. New Benefits. New Data Center in Ashburn, VA. GigeNET is offering a free month of service with a new server in Ashburn. Choose from 2 high performing configs, both with 100TB of bandwidth. Higher redundancy.Lower latency.Increased capacity.Completely compliant. http://p.sf.net/sfu/gigenet _______________________________________________ enlightenment-devel mailing list enlightenment-devel@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/enlightenment-devel