princeamd pushed a commit to branch enlightenment-0.17.
commit f00692e8c71e344aede13f1079b3c43156e9a0a4
Author: Christopher Michael <[email protected]>
Date: Tue Feb 19 10:57:47 2013 +0000
Backport: 1f63b0f :: Remove dead comments about layout object. Add grid
object to structure. Add callbacks to handle when grid gets moved or resized so
we can update the monitor's copy of the grid geometry. Update calls to
monitor_grid_set to pass in geometry now. Add monitor_virtual_size_set call.
Add code to deal with grid getting moved & resized.
Signed-off-by: Christopher Michael <[email protected]>
SVN revision: 84171
Signed-off-by: Deon Thomas <[email protected]>
---
src/modules/conf_randr/e_smart_randr.c | 73 ++++++++++++++++++++++++++++++++--
1 file changed, 69 insertions(+), 4 deletions(-)
diff --git a/src/modules/conf_randr/e_smart_randr.c
b/src/modules/conf_randr/e_smart_randr.c
index f3e7463..c8305ca 100644
--- a/src/modules/conf_randr/e_smart_randr.c
+++ b/src/modules/conf_randr/e_smart_randr.c
@@ -7,12 +7,13 @@
typedef struct _E_Smart_Data E_Smart_Data;
struct _E_Smart_Data
{
+ /* base object */
Evas_Object *o_base;
- Evas_Object *o_grid;
- /* layout object */
- /* Evas_Object *o_layout; */
+ /* grid object */
+ Evas_Object *o_grid;
+ /* virtual size */
Evas_Coord vw, vh;
/* visible flag */
@@ -32,6 +33,9 @@ static void _e_smart_hide(Evas_Object *obj);
static void _e_smart_clip_set(Evas_Object *obj, Evas_Object *clip);
static void _e_smart_clip_unset(Evas_Object *obj);
+static void _e_smart_randr_grid_cb_move(void *data, Evas *evas EINA_UNUSED,
Evas_Object *obj EINA_UNUSED, void *event EINA_UNUSED);
+static void _e_smart_randr_grid_cb_resize(void *data, Evas *evas EINA_UNUSED,
Evas_Object *obj EINA_UNUSED, void *event EINA_UNUSED);
+
/* external functions exposed by this widget */
Evas_Object *
e_smart_randr_add(Evas *evas)
@@ -146,6 +150,7 @@ e_smart_randr_monitors_create(Evas_Object *obj)
Ecore_X_Window root = 0;
Ecore_X_Randr_Crtc *crtcs;
int ncrtcs = 0;
+ Evas_Coord gx = 0, gy = 0, gw = 0, gh = 0;
LOGFN(__FILE__, __LINE__, __FUNCTION__);
@@ -160,6 +165,9 @@ e_smart_randr_monitors_create(Evas_Object *obj)
/* grab the canvas of the grid object */
evas = evas_object_evas_get(sd->o_grid);
+ /* get the geometry of the grid */
+ evas_object_geometry_get(sd->o_grid, &gx, &gy, &gw, &gh);
+
/* grab the root window */
root = ecore_x_window_root_first_get();
@@ -199,7 +207,10 @@ e_smart_randr_monitors_create(Evas_Object *obj)
evas_object_grid_pack(sd->o_grid, mon, cx, cy, cw, ch);
/* tell monitor what the virtual grid is */
- e_smart_monitor_grid_set(mon, sd->o_grid);
+ e_smart_monitor_grid_set(mon, sd->o_grid, gx, gy, gw, gh);
+
+ /* tell monitor what the grid virtual size is */
+ e_smart_monitor_virtual_size_set(mon, sd->vw, sd->vh);
/* tell monitor what crtc it uses and current position */
e_smart_monitor_crtc_set(mon, crtcs[i], cx, cy, cw, ch);
@@ -252,9 +263,16 @@ _e_smart_add(Evas_Object *obj)
"e/conf/randr/main");
evas_object_smart_member_add(sd->o_base, obj);
+ /* create the virtual grid */
sd->o_grid = evas_object_grid_add(evas);
edje_object_part_swallow(sd->o_base, "e.swallow.content", sd->o_grid);
+ /* setup grid move callback */
+ evas_object_event_callback_add(sd->o_grid, EVAS_CALLBACK_MOVE,
+ _e_smart_randr_grid_cb_move, sd);
+ evas_object_event_callback_add(sd->o_grid, EVAS_CALLBACK_RESIZE,
+ _e_smart_randr_grid_cb_resize, sd);
+
/* set the object's smart data */
evas_object_smart_data_set(obj, sd);
}
@@ -274,6 +292,15 @@ _e_smart_del(Evas_Object *obj)
EINA_LIST_FREE(sd->monitors, mon)
evas_object_del(mon);
+ /* remove grid move callback */
+ evas_object_event_callback_del(sd->o_grid, EVAS_CALLBACK_MOVE,
+ _e_smart_randr_grid_cb_move);
+ evas_object_event_callback_del(sd->o_grid, EVAS_CALLBACK_RESIZE,
+ _e_smart_randr_grid_cb_resize);
+
+ /* delete the grid object */
+ evas_object_del(sd->o_grid);
+
/* delete the base object */
evas_object_del(sd->o_base);
@@ -387,3 +414,41 @@ _e_smart_clip_unset(Evas_Object *obj)
/* unset the clip */
evas_object_clip_unset(sd->o_base);
}
+
+static void
+_e_smart_randr_grid_cb_move(void *data, Evas *evas EINA_UNUSED, Evas_Object
*obj EINA_UNUSED, void *event EINA_UNUSED)
+{
+ E_Smart_Data *sd;
+ Evas_Coord gx = 0, gy = 0, gw = 0, gh = 0;
+ Eina_List *l = NULL;
+ Evas_Object *mon;
+
+ /* try to get the smart data */
+ if (!(sd = data)) return;
+
+ /* get the grid geometry */
+ evas_object_geometry_get(sd->o_grid, &gx, &gy, &gw, &gh);
+
+ /* loop the monitors and update grid geometry */
+ EINA_LIST_FOREACH(sd->monitors, l, mon)
+ e_smart_monitor_grid_set(mon, sd->o_grid, gx, gy, gw, gh);
+}
+
+static void
+_e_smart_randr_grid_cb_resize(void *data, Evas *evas EINA_UNUSED, Evas_Object
*obj EINA_UNUSED, void *event EINA_UNUSED)
+{
+ E_Smart_Data *sd;
+ Evas_Coord gx = 0, gy = 0, gw = 0, gh = 0;
+ Eina_List *l = NULL;
+ Evas_Object *mon;
+
+ /* try to get the smart data */
+ if (!(sd = data)) return;
+
+ /* get the grid geometry */
+ evas_object_geometry_get(sd->o_grid, &gx, &gy, &gw, &gh);
+
+ /* loop the monitors and update grid geometry */
+ EINA_LIST_FOREACH(sd->monitors, l, mon)
+ e_smart_monitor_grid_set(mon, sd->o_grid, gx, gy, gw, gh);
+}
--
------------------------------------------------------------------------------
This SF.net email is sponsored by Windows:
Build for Windows Store.
http://p.sf.net/sfu/windows-dev2dev