On Sun, 25 Jan 2015 13:56:34 +0000 Tom Hacohen <tom.haco...@samsung.com> said:

> Probably unintended, but this commit does a lot more than it says it 
> does. More specifically, you removed e_randr.[ch]. :)

aaah shit. it pulled in my randr remove. see next commit - i was doing a bunch
of things  - in order to make elm widgets workin dialogs i had to fix this - i
forgot about my git rm of these files. grrr.

> 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
> 


-- 
------------- Codito, ergo sum - "I code, therefore I am" --------------
The Rasterman (Carsten Haitzler)    ras...@rasterman.com


------------------------------------------------------------------------------
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

Reply via email to