diff --git a/data/elementary/themes/edc/elm/border.edc b/data/elementary/themes/edc/elm/border.edc index fff5a311ab..eb9584eec0 100644 --- a/data/elementary/themes/edc/elm/border.edc +++ b/data/elementary/themes/edc/elm/border.edc @@ -837,11 +837,44 @@ group { name: "elm/border/base/default"; /* visible: 0; */ /* } */ } + /* 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"; + 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; + } + } + /* covers the entire client contents, including the main menu */ + spacer { "elm.spacer.content"; + required: 1; // since 1.19 + desc { + rel1.to: "top"; + rel1.relative: 0.0 1.0; + rel2.to: "bottom"; + rel2.relative: 1.0 0.0; + } + } part { name: "elm.swallow.client"; type: SWALLOW; clip_to: "client_clip"; description { state: "default" 0.0; rel1.relative: 0.0 1.0; - rel1.to: "top"; + rel1.to: "elm.swallow.menu"; rel2.relative: 1.0 0.0; rel2.to: "bottom"; } @@ -1498,6 +1531,16 @@ group { name: "elm/border/base/default"; target: "elm.event.resize.b"; target: "elm.event.resize.br"; } + 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"; + } program { signal: "mouse,down,*"; source: "elm.event.close"; action: STATE_SET "selected" 0.0; diff --git a/src/lib/elementary/efl_ui_win.c b/src/lib/elementary/efl_ui_win.c index 7b6688df00..65775cec21 100644 --- a/src/lib/elementary/efl_ui_win.c +++ b/src/lib/elementary/efl_ui_win.c @@ -1417,9 +1417,16 @@ _elm_win_frame_obj_update(Efl_Ui_Win_Data *sd) if (!sd->frame_obj) return; evas_object_geometry_get(sd->frame_obj, &fx, &fy, &fw, &fh); - evas_object_geometry_get(sd->edje, &ox, &oy, &ow, &oh); - - evas_output_framespace_set(sd->evas, (ox - fx), (oy - fy), (fw - ow), (fh - oh)); + if (edje_object_part_exists(sd->frame_obj, "elm.spacer.content")) + { + edje_object_part_geometry_get(sd->frame_obj, "elm.spacer.content", &ox, &oy, &ow, &oh); + evas_output_framespace_set(sd->evas, ox, oy, fw - ow, fh - oh); + } + else + { + evas_object_geometry_get(sd->edje, &ox, &oy, &ow, &oh); + evas_output_framespace_set(sd->evas, (ox - fx), (oy - fy), (fw - ow), (fh - oh)); + } } static void @@ -5504,23 +5511,35 @@ _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 (sd->frame_obj) + { + if (edje_object_part_exists(sd->frame_obj, "elm.swallow.menu")) + return sd->frame_obj; + } + return sd->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->edje, sd->main_menu); - edje_object_signal_emit(sd->edje, "elm,action,hide_menu", "elm"); + edje_object_part_unswallow(swallow, sd->main_menu); + edje_object_signal_emit(swallow, "elm,action,hide_menu", "elm"); _elm_menu_menu_bar_hide(sd->main_menu); } else { DBG("Setting menu to local mode"); - edje_object_part_swallow(sd->edje, "elm.swallow.menu", sd->main_menu); - edje_object_signal_emit(sd->edje, "elm,action,show_menu", "elm"); + edje_object_part_swallow(swallow, "elm.swallow.menu", sd->main_menu); + edje_object_signal_emit(swallow, "elm,action,show_menu", "elm"); evas_object_show(sd->main_menu); } } diff --git a/src/lib/elementary/elm_menu.c b/src/lib/elementary/elm_menu.c index 5127ef09da..491320f9b5 100644 --- a/src/lib/elementary/elm_menu.c +++ b/src/lib/elementary/elm_menu.c @@ -782,8 +782,7 @@ EAPI Evas_Object * elm_menu_add(Evas_Object *parent) { EINA_SAFETY_ON_NULL_RETURN_VAL(parent, NULL); - Evas_Object *obj = efl_add(MY_CLASS, parent); - return obj; + return efl_add(MY_CLASS, parent); } EOLIAN static Eo *