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

Reply via email to