jpeg pushed a commit to branch master.

http://git.enlightenment.org/core/efl.git/commit/?id=c7f2308e6c12181d06b5904d46a5d2b6c463f5c8

commit c7f2308e6c12181d06b5904d46a5d2b6c463f5c8
Author: Jean-Philippe Andre <jp.an...@samsung.com>
Date:   Mon Nov 28 17:24:18 2016 +0900

    Revert "win: Move main menu back to win.edc (fix sizing)"
    
    This reverts commit 8a213847596376305d282e1ba26080b548a207f9.
    The following commit will reintroduce the menu slot inside the
    border edc.
---
 data/elementary/themes/edc/elm/border.edc | 43 +++++++++++++++++++++++++++----
 data/elementary/themes/edc/elm/win.edc    | 40 ----------------------------
 src/lib/elementary/efl_ui_win.c           | 29 +++++++++++++++++----
 3 files changed, 62 insertions(+), 50 deletions(-)

diff --git a/data/elementary/themes/edc/elm/border.edc 
b/data/elementary/themes/edc/elm/border.edc
index 72e84ab..1c5a25d 100644
--- a/data/elementary/themes/edc/elm/border.edc
+++ b/data/elementary/themes/edc/elm/border.edc
@@ -1,12 +1,10 @@
 /* Window client-side decorations and extra slots
  * Includes swallows for:
  *  - app content
+ *  - main menu
  *  - indicator
  *  - soft key
  *  - virtual keyboard
- *
- * Not included:
- *  - main menu (sizing issues - needs rework of the menu itself)
  */
 
 group { name: "elm/border/base/default";
@@ -93,11 +91,34 @@ group { name: "elm/border/base/default";
          required; // @since 1.19
          clip: "client_clip";
       }
+      /* main menu */
+      rect { "menu_bg";
+         desc { "default";
+            color: 64 64 64 255; // FIXME: color_class
+            align: 0.5 0.0;
+            rel.to: "elm.swallow.menu";
+         }
+      }
+      swallow { "elm.swallow.menu";
+         required: 1; // since 1.19
+         desc { "default";
+            rel.to: "top_clip";
+            rel1.relative: 0.0 1.0;
+            rel1.offset: 0 -1;
+            visible: 0;
+            align: 0.5 0.0;
+            fixed: 1 1;
+         }
+         desc { "visible"; inherit: "default";
+            visible: 1;
+            fixed: 0 1;
+         }
+      }
 
-      /* application contents - spacer and clipper */
+      /* application contents - spacer and clipper (without main menu) */
       spacer { "client_spacer";
          desc { "default";
-            rel1.to: "top_clip";
+            rel1.to: "elm.swallow.menu";
             rel1.relative: 0.0 1.0;
             rel2.to: "bottom_clip";
             rel2.relative: 1.0 0.0;
@@ -784,6 +805,18 @@ group { name: "elm/border/base/default";
          UNSET_MODE(MAXIMIZED);
       }
 
+      /* application desktop menu */
+      program { name: "show_menu";
+         signal: "elm,action,show_menu"; source: "elm";
+         action: STATE_SET "visible";
+         target: "elm.swallow.menu";
+      }
+      program { name: "hide_menu";
+         signal: "elm,action,hide"; source: "elm";
+         action: STATE_SET "default";
+         target: "elm.swallow.menu";
+      }
+
       /* modal windows */
       program { name: "hide_blocker";
          signal: "elm,action,hide_blocker"; source: "elm";
diff --git a/data/elementary/themes/edc/elm/win.edc 
b/data/elementary/themes/edc/elm/win.edc
index 2c5e0dd..8c6a08d 100644
--- a/data/elementary/themes/edc/elm/win.edc
+++ b/data/elementary/themes/edc/elm/win.edc
@@ -1,28 +1,6 @@
 group { name: "elm/win/base/default";
    data.item: "elm_win_version" "119";
    parts {
-      /* main menu */
-      part { name: "menu_bg"; type: RECT;
-         description { state: "default" 0.0;
-            color: 64 64 64 255;
-            align: 0.5 0;
-            rel2.to: "elm.swallow.menu";
-         }
-      }
-      part { name: "elm.swallow.menu"; type: SWALLOW;
-         description { state: "default" 0.0;
-            rel2.relative: 1.0 0.0;
-            visible: 0;
-            align: 0.5 0;
-            fixed: 1 1;
-         }
-         description { state: "visible" 0.0;
-            inherit: "default" 0.0;
-            visible: 1;
-            fixed: 0 1;
-         }
-      }
-      /* application content */
       rect { "client_clip"; nomouse;
          desc { "default";
             rel.to: "elm.swallow.contents";
@@ -30,24 +8,6 @@ group { name: "elm/win/base/default";
       }
       swallow { "elm.swallow.contents";
          clip_to: "client_clip";
-         desc { "default";
-            rel1.to: "elm.swallow.menu";
-            rel1.relative: 0.0 1.0;
-         }
-      }
-   }
-   programs {
-      program { name: "show_menu";
-         signal: "elm,action,show_menu";
-         source: "elm";
-         action: STATE_SET "visible" 0.0;
-         target: "elm.swallow.menu";
-      }
-      program { name: "hide_menu";
-         signal: "elm,action,hide";
-         source: "elm";
-         action: STATE_SET "default" 0.0;
-         target: "elm.swallow.menu";
       }
    }
 }
diff --git a/src/lib/elementary/efl_ui_win.c b/src/lib/elementary/efl_ui_win.c
index d552c04..309ff7f 100644
--- a/src/lib/elementary/efl_ui_win.c
+++ b/src/lib/elementary/efl_ui_win.c
@@ -212,12 +212,14 @@ struct _Efl_Ui_Win_Data
       Eina_Bool need_shadow : 1; /**< if true, application draws its csd and 
shadow */
       Eina_Bool need_borderless : 1;
       Eina_Bool need_bg_solid : 1;
+      Eina_Bool need_menu : 1;
       Eina_Bool need_unresizable : 1;
       Eina_Bool cur_borderless : 1;
       Eina_Bool cur_shadow : 1;
       Eina_Bool cur_focus : 1;
       Eina_Bool cur_maximized : 1;
       Eina_Bool cur_bg_solid : 1;
+      Eina_Bool cur_menu : 1;
       Eina_Bool cur_unresizable : 1;
       Eina_Bool wayland : 1;
    } csd;
@@ -4136,7 +4138,8 @@ _elm_win_frame_add(Efl_Ui_Win_Data *sd, const char *style)
 static void
 _elm_win_frame_style_update(Efl_Ui_Win_Data *sd, Eina_Bool force_emit, 
Eina_Bool calc)
 {
-   Eina_Bool borderless, maximized, shadow, focus, bg_solid, unresizable, 
alpha;
+   Eina_Bool borderless, maximized, shadow, focus, bg_solid, menu, unresizable,
+         alpha;
    Eina_Bool changed = EINA_FALSE;
 
    if (!sd->frame_obj)
@@ -4152,6 +4155,7 @@ _elm_win_frame_style_update(Efl_Ui_Win_Data *sd, 
Eina_Bool force_emit, Eina_Bool
         sd->csd.need_shadow = EINA_FALSE;
         sd->csd.need_borderless = EINA_TRUE;
         sd->csd.need_unresizable = EINA_TRUE;
+        sd->csd.need_menu = EINA_FALSE;
      }
    else
      {
@@ -4166,6 +4170,7 @@ _elm_win_frame_style_update(Efl_Ui_Win_Data *sd, 
Eina_Bool force_emit, Eina_Bool
    focus = ecore_evas_focus_get(sd->ee);
    bg_solid = sd->csd.need_bg_solid;
    unresizable = sd->csd.need_unresizable;
+   menu = sd->csd.need_menu;
 
    /* FIXME FIXME FIXME FIXME FIXME FIXME FIXME FIXME FIXME FIXME FIXME FIXME
     * At the moment, E Wayland uses SSD for its internal windows. Which means
@@ -4191,6 +4196,7 @@ _elm_win_frame_style_update(Efl_Ui_Win_Data *sd, 
Eina_Bool force_emit, Eina_Bool
    STATE_SET(focus, "elm,action,focus", "elm,action,unfocus");
    STATE_SET(bg_solid, "elm,state,background,solid,on", 
"elm,state,background,solid,off");
    STATE_SET(unresizable, "elm,state,unresizable,on", 
"elm,state,unresizable,off");
+   STATE_SET(menu, "elm,action,show_menu", "elm,action,hide_menu");
 
 #undef STATE_SET
 
@@ -5325,25 +5331,38 @@ _efl_ui_win_fullscreen_get(Eo *obj EINA_UNUSED, 
Efl_Ui_Win_Data *sd)
    return sd->fullscreen;
 }
 
+static inline Eo *
+_main_menu_swallow_get(Efl_Ui_Win_Data *sd)
+{
+   if (edje_object_part_exists(sd->legacy.edje, "elm.swallow.menu"))
+     {
+        DBG("Detected legacy theme, using legacy swallows.");
+        return sd->legacy.edje;
+     }
+   return sd->legacy.edje;
+}
+
 static void
 _dbus_menu_set(Eina_Bool dbus_connect, void *data)
 {
    ELM_WIN_DATA_GET_OR_RETURN(data, sd);
+   Eo *swallow = _main_menu_swallow_get(sd);
 
    if (dbus_connect)
      {
         DBG("Setting menu to D-Bus");
-        edje_object_part_unswallow(sd->legacy.edje, sd->main_menu);
-        edje_object_signal_emit(sd->legacy.edje, "elm,action,hide", "elm");
+        edje_object_part_unswallow(swallow, sd->main_menu);
+        sd->csd.need_menu = EINA_FALSE;
         _elm_menu_menu_bar_hide(sd->main_menu);
      }
    else
      {
         DBG("Setting menu to local mode");
-        edje_object_part_swallow(sd->legacy.edje, "elm.swallow.menu", 
sd->main_menu);
-        edje_object_signal_emit(sd->legacy.edje, "elm,action,show_menu", 
"elm");
+        edje_object_part_swallow(swallow, "elm.swallow.menu", sd->main_menu);
+        sd->csd.need_menu = EINA_TRUE;
         evas_object_show(sd->main_menu);
      }
+   _elm_win_frame_style_update(sd, 0, 1);
 }
 
 EOLIAN static void

-- 


Reply via email to