From 9768137b79100b35d82fa57bc6fc43a4dc7d32e3 Mon Sep 17 00:00:00 2001 From: Rafael Antognolli Date: Mon, 6 May 2013 20:08:58 -0300 Subject: [PATCH] elm/wayland: Implement borderless_set for wayland. Also add a checkbox to the "Window States" test of elementary_test. --- legacy/elementary/src/bin/test_win_state.c | 17 +++++++++++++++ legacy/elementary/src/lib/elm_win.c | 24 ++++++++++++++++++++++ 2 files changed, 41 insertions(+) diff --git a/legacy/elementary/src/bin/test_win_state.c b/legacy/elementary/src/bin/test_win_state.c index c396d04652..3b60817bc2 100644 --- a/legacy/elementary/src/bin/test_win_state.c +++ b/legacy/elementary/src/bin/test_win_state.c @@ -120,6 +120,14 @@ my_ck_38_fullscreen(void *data, Evas_Object *obj, void *event_info __UNUSED__) elm_win_fullscreen_set(win, fullscreen); } +static void +my_ck_38_borderless(void *data, Evas_Object *obj, void *event_info __UNUSED__) +{ + Evas_Object *win = data; + Eina_Bool borderless = elm_check_state_get(obj); + elm_win_borderless_set(win, borderless); +} + static void my_win_move(void *data __UNUSED__, Evas_Object *obj, void *event_info __UNUSED__) { @@ -258,6 +266,15 @@ test_win_state(void *data __UNUSED__, Evas_Object *obj __UNUSED__, void *event_i evas_object_show(ck); elm_box_pack_end(bx, ck); + ck = elm_check_add(win); + elm_object_text_set(ck, "borderless"); + elm_check_state_set(ck, fullscreen); + evas_object_smart_callback_add(ck, "changed", my_ck_38_borderless, win); + evas_object_size_hint_weight_set(ck, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + evas_object_size_hint_align_set(ck, 0.02, 0.99); + evas_object_show(ck); + elm_box_pack_end(bx, ck); + bx2 = elm_box_add(win); elm_box_horizontal_set(bx2, EINA_TRUE); elm_box_homogeneous_set(bx2, EINA_TRUE); diff --git a/legacy/elementary/src/lib/elm_win.c b/legacy/elementary/src/lib/elm_win.c index 0ccfd935cc..dffad398cf 100644 --- a/legacy/elementary/src/lib/elm_win.c +++ b/legacy/elementary/src/lib/elm_win.c @@ -2313,6 +2313,7 @@ _elm_win_frame_add(Elm_Win_Smart_Data *sd, const char *style) { Evas_Object *obj = sd->obj; + int w, h; short layer; // FIXME: Don't use hardcoded framespace values, get it from theme @@ -2352,11 +2353,15 @@ _elm_win_frame_add(Elm_Win_Smart_Data *sd, edje_object_part_text_escaped_set (sd->frame_obj, "elm.text.title", sd->title); } + + ecore_evas_geometry_get(sd->ee, NULL, NULL, &w, &h); + ecore_evas_resize(sd->ee, w, h); } static void _elm_win_frame_del(Elm_Win_Smart_Data *sd) { + int w, h; if (sd->frame_obj) { edje_object_signal_callback_del @@ -2384,6 +2389,10 @@ _elm_win_frame_del(Elm_Win_Smart_Data *sd) evas_object_del(sd->frame_obj); sd->frame_obj = NULL; } + + evas_output_framespace_set(sd->evas, 0, 0, 0, 0); + ecore_evas_geometry_get(sd->ee, NULL, NULL, &w, &h); + ecore_evas_resize(sd->ee, w, h); } #ifdef ELM_DEBUG @@ -3330,6 +3339,21 @@ _borderless_set(Eo *obj EINA_UNUSED, void *_pd, va_list *list) Eina_Bool borderless = va_arg(*list, int); Elm_Win_Smart_Data *sd = _pd; + if (borderless) + { + if (EE_ENGINE_COMPARE(sd->ee, ELM_WAYLAND_SHM) || + EE_ENGINE_COMPARE(sd->ee, ELM_WAYLAND_EGL)) + _elm_win_frame_del(sd); + } + else + { + if (EE_ENGINE_COMPARE(sd->ee, ELM_WAYLAND_SHM) || + EE_ENGINE_COMPARE(sd->ee, ELM_WAYLAND_EGL)) + _elm_win_frame_add(sd, "default"); + + evas_object_show(sd->frame_obj); + } + TRAP(sd, borderless_set, borderless); #ifdef HAVE_ELEMENTARY_X _elm_win_xwin_update(sd);