discomfitor pushed a commit to branch master.
commit 3024562fccee4cc68e310ec4b46b3790f16f2754
Author: Mike Blumenkrantz <[email protected]>
Date: Tue Aug 13 10:22:24 2013 +0100
bugfix: setting min size on a gadget now propagates to desktop gadgets
---
ChangeLog | 4 +++
NEWS | 1 +
src/bin/e_gadcon.c | 7 +++++-
src/modules/gadman/e_mod_gadman.c | 51 +++++++++++++++++++++++++++++++++++++++
4 files changed, 62 insertions(+), 1 deletion(-)
diff --git a/ChangeLog b/ChangeLog
index b8a07e7..517d5a9 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,5 +1,9 @@
2013-07-26 Mike Blumenkrantz
+ * fixed bug where setting min size on a gadget would not be passed to
desktop gadgets
+
+2013-07-26 Mike Blumenkrantz
+
* fixed bug where double clicking filemanager windows would not
correctly autosize
2013-06-20 Mike Blumenkrantz
diff --git a/NEWS b/NEWS
index 259e921..f3c50a2 100644
--- a/NEWS
+++ b/NEWS
@@ -227,3 +227,4 @@ Fixes:
* fixed bug with filemanager setting path with too many spaces when opened
from menu
* fixed crash when multiple windows shared a remember
* fixed bug where double clicking filemanager windows would not correctly
autosize
+ * fixed bug where setting min size on a gadget would not be passed to
desktop gadgets
diff --git a/src/bin/e_gadcon.c b/src/bin/e_gadcon.c
index ec32ab5..3f0c2ba 100644
--- a/src/bin/e_gadcon.c
+++ b/src/bin/e_gadcon.c
@@ -3678,7 +3678,12 @@ e_gadcon_layout_pack_min_size_set(Evas_Object *obj, int
w, int h)
if (!obj) return;
bi = evas_object_data_get(obj, "e_gadcon_layout_data");
- if (!bi) return;
+ if (!bi)
+ {
+ evas_object_size_hint_min_set(obj, w, h);
+ edje_extern_object_min_size_set(obj, w, h);
+ return;
+ }
if (bi->sd->horizontal)
{
bi->min.w = w;
diff --git a/src/modules/gadman/e_mod_gadman.c
b/src/modules/gadman/e_mod_gadman.c
index ee77ca7..5b7996c 100644
--- a/src/modules/gadman/e_mod_gadman.c
+++ b/src/modules/gadman/e_mod_gadman.c
@@ -45,6 +45,9 @@ Manager *Man = NULL;
static Eina_List *_gadman_hdls = NULL;
static Eina_Hash *_gadman_gadgets = NULL;
+/* for locking geometry during our own move/resize */
+static Eina_Bool mover_lock = EINA_FALSE;
+
/* Implementation */
void
gadman_reset(void)
@@ -231,6 +234,19 @@ _gadman_gadget_free(void *data __UNUSED__, void *obj)
gadman_gadget_edit_end(NULL, NULL, NULL, NULL);
}
+static void
+_gadman_gadget_size_hints_cb(void *data, Evas *e EINA_UNUSED, Evas_Object
*obj, void *event_info EINA_UNUSED)
+{
+ E_Gadcon_Client *gcc = data;
+ int w, h;
+
+ evas_object_geometry_get(obj, NULL, NULL, &w, &h);
+ w = MAX(w, gcc->min.w);
+ h = MAX(h, gcc->min.h);
+ evas_object_resize(gcc->o_frame, w, h);
+ _save_widget_position(gcc);
+}
+
static E_Gadcon_Client *
gadman_gadget_place(E_Gadcon_Client *gcc, const E_Gadcon_Client_Class *cc,
E_Config_Gadcon_Client *cf, Gadman_Layer_Type layer, E_Zone *zone)
{
@@ -290,6 +306,8 @@ gadman_gadget_place(E_Gadcon_Client *gcc, const
E_Gadcon_Client_Class *cc, E_Con
edje_object_part_swallow(gcc->o_frame, "e.swallow.content", gcc->o_base);
evas_object_event_callback_add(gcc->o_frame, EVAS_CALLBACK_MOUSE_DOWN,
on_frame_click, gcc);
+ evas_object_event_callback_add(gcc->o_frame,
EVAS_CALLBACK_CHANGED_SIZE_HINTS,
+ _gadman_gadget_size_hints_cb, gcc);
gcc->hidden = 1;
if (gcc->gadcon->id == ID_GADMAN_LAYER_TOP)
@@ -379,6 +397,24 @@ gadman_edit(void *data, Evas *e __UNUSED__, Evas_Object
*obj __UNUSED__, void *e
_apply_widget_position(data);
}
+static void
+_gadman_gadget_edit_resize_cb(void *data, Evas *e EINA_UNUSED, Evas_Object
*obj, void *event_info EINA_UNUSED)
+{
+ int w, h;
+ if (mover_lock) return;
+ evas_object_geometry_get(obj, NULL, NULL, &w, &h);
+ evas_object_resize(_get_mover(data), w, h);
+}
+
+static void
+_gadman_gadget_edit_move_cb(void *data, Evas *e EINA_UNUSED, Evas_Object *obj,
void *event_info EINA_UNUSED)
+{
+ int x, y;
+ if (mover_lock) return;
+ evas_object_geometry_get(obj, &x, &y, NULL, NULL);
+ evas_object_move(_get_mover(data), x, y);
+}
+
void
gadman_gadget_edit_start(E_Gadcon_Client *gcc)
{
@@ -402,6 +438,8 @@ gadman_gadget_edit_start(E_Gadcon_Client *gcc)
mover = _get_mover(gcc);
if (!mover) return;
evas_object_geometry_get(gcc->o_frame, &x, &y, &w, &h);
+ evas_object_event_callback_add(gcc->o_frame, EVAS_CALLBACK_RESIZE,
_gadman_gadget_edit_resize_cb, gcc);
+ evas_object_event_callback_add(gcc->o_frame, EVAS_CALLBACK_MOVE,
_gadman_gadget_edit_move_cb, gcc);
Man->drag_gcc[gcc->gadcon->id - ID_GADMAN_LAYER_BASE] = gcc;
evas_object_move(mover, x, y);
@@ -434,6 +472,11 @@ gadman_gadget_edit_end(void *data __UNUSED__, Evas_Object
*obj __UNUSED__, const
EINA_LIST_FOREACH(Man->gadcons[layer], l, gc)
gc->editing = 0;
drag_gcc = Man->drag_gcc[layer];
+ if (drag_gcc)
+ {
+ evas_object_event_callback_del_full(drag_gcc->o_frame,
EVAS_CALLBACK_RESIZE, _gadman_gadget_edit_resize_cb, drag_gcc);
+ evas_object_event_callback_del_full(drag_gcc->o_frame,
EVAS_CALLBACK_MOVE, _gadman_gadget_edit_move_cb, drag_gcc);
+ }
Man->drag_gcc[layer] = NULL;
break;
}
@@ -1242,6 +1285,7 @@ on_top(void *data, Evas_Object *o __UNUSED__, const char
*em __UNUSED__, const c
drag_gcc = Man->drag_gcc[layer];
mover = _get_mover(drag_gcc);
+ mover_lock = EINA_TRUE;
if (action == DRAG_START)
{
@@ -1283,6 +1327,7 @@ on_top(void *data, Evas_Object *o __UNUSED__, const char
*em __UNUSED__, const c
evas_object_move(drag_gcc->o_frame, ox, my - drag_gcc->dy);
_save_widget_position(drag_gcc);
}
+ mover_lock = EINA_FALSE;
}
static void
@@ -1298,6 +1343,7 @@ on_right(void *data, Evas_Object *o __UNUSED__, const
char *em __UNUSED__, const
drag_gcc = Man->drag_gcc[layer];
mover = _get_mover(drag_gcc);
+ mover_lock = EINA_TRUE;
action = (int)(long)data;
if (action == DRAG_START)
@@ -1328,6 +1374,7 @@ on_right(void *data, Evas_Object *o __UNUSED__, const
char *em __UNUSED__, const
evas_object_resize(drag_gcc->o_frame, w, oh);
_save_widget_position(drag_gcc);
}
+ mover_lock = EINA_FALSE;
}
static void
@@ -1343,6 +1390,7 @@ on_down(void *data, Evas_Object *o __UNUSED__, const char
*em __UNUSED__, const
drag_gcc = Man->drag_gcc[layer];
mover = _get_mover(drag_gcc);
+ mover_lock = EINA_TRUE;
if (action == DRAG_START)
{
@@ -1372,6 +1420,7 @@ on_down(void *data, Evas_Object *o __UNUSED__, const char
*em __UNUSED__, const
evas_object_resize(drag_gcc->o_frame, ow, h);
_save_widget_position(drag_gcc);
}
+ mover_lock = EINA_FALSE;
}
static void
@@ -1387,6 +1436,7 @@ on_left(void *data, Evas_Object *o __UNUSED__, const char
*em __UNUSED__, const
drag_gcc = Man->drag_gcc[layer];
mover = _get_mover(drag_gcc);
+ mover_lock = EINA_TRUE;
if (action == DRAG_START)
{
drag_gcc->resizing = 1;
@@ -1427,6 +1477,7 @@ on_left(void *data, Evas_Object *o __UNUSED__, const char
*em __UNUSED__, const
evas_object_move(drag_gcc->o_frame, mx - drag_gcc->dx, oy);
_save_widget_position(drag_gcc);
}
+ mover_lock = EINA_FALSE;
}
static void
--
------------------------------------------------------------------------------
Get 100% visibility into Java/.NET code with AppDynamics Lite!
It's a free troubleshooting tool designed for production.
Get down to code-level detail for bottlenecks, with <2% overhead.
Download for free and get started troubleshooting in minutes.
http://pubads.g.doubleclick.net/gampad/clk?id=48897031&iu=/4140/ostg.clktrk