part of adding stacks...
Evas_Object *bg, *bx, *bt, *lb, *win;
win = elm_win_add(NULL, "window-stack", ELM_WIN_BASIC);
+ elm_win_stack_base_set(win, EINA_TRUE);
elm_win_title_set(win, "Window Stack");
elm_win_autodel_set(win, EINA_TRUE);
typedef enum _Ecore_X_Stack_Type
{
ECORE_X_STACK_NONE = 0,
- ECORE_X_STACK_STANDARD = 1,
+ ECORE_X_STACK_BASE = 1,
+ ECORE_X_STACK_STANDARD,
ECORE_X_STACK_LAST
} Ecore_X_Stack_Type;
Eina_Bool tmp_updating_hints : 1;
Eina_Bool single_edje_content: 1; /* hack for E */
Eina_Bool shown : 1;
+ Eina_Bool stack_base : 1;
};
struct _Input_Pointer_Iterator
if (win)
{
ecore_x_icccm_transient_for_set(sd->x.xwin, win);
- ecore_x_e_stack_type_set(sd->x.xwin, ECORE_X_STACK_STANDARD);
+ if (sd->stack_base)
+ ecore_x_e_stack_type_set(sd->x.xwin, ECORE_X_STACK_BASE);
+ else
+ ecore_x_e_stack_type_set(sd->x.xwin, ECORE_X_STACK_STANDARD);
}
}
else
return sd->stack_master_id;
}
+EOLIAN static void
+_efl_ui_win_stack_base_set(Eo *obj, Efl_Ui_Win_Data *sd, Eina_Bool base)
+{
+ if (sd->shown) return;
+ sd->stack_base = !!base;
+}
+
+EOLIAN static Eina_Bool
+_efl_ui_win_stack_base_get(Eo *obj, Efl_Ui_Win_Data *sd)
+{
+ return sd->stack_base;
+}
+
EOLIAN static void
_efl_ui_win_stack_pop_to_id(Eo *obj EINA_UNUSED, Efl_Ui_Win_Data *sd EINA_UNUSED, const char *id EINA_UNUSED)
{
display.]]
}
}
+ @property stack_base {
+ set {
+ [[Set the stack base state of this window
+
+ This is a boolean flag that determines if this window will
+ become the base of a stack at all. You must enable this
+ on a base (bottom of a window stack for things to work
+ correctly.
+
+ This state should be set before a window is shown for the
+ first time and never changed again after that.
+
+ @since 1.19]]
+ }
+ get {}
+ values {
+ base: bool; [[True if this is a stack base window, false
+ false otherwise.]]
+ }
+ }
stack_pop_to_id {
[[Pop (delete) all windows in the stack above this window.