Page MenuHomePhabricator

efl.ui.win
Closed, ResolvedPublic

Description

class Efl.Ui.Win
├ (P) indicator_mode
├ (P) keyboard_mode
├ (P) wm_available_rotations @beta
├ (P) wm_available_profiles @beta
├ (P) screen_constrain
├ (P) prop_focus_skip @beta
├ (P) autohide @beta
├ (P) exit_on_close
├ (P) icon_object
├ (P) minimized
├ (P) maximized
├ (P) fullscreen
├ (P) sticky @beta
├ (P) urgent @beta
├ (P) modal @beta
├ (P) borderless @beta
├ (P) win_role @beta
├ (P) win_name
├ (P) win_type @beta
├ (P) accel_preference @beta
├ (P) alpha
├ (P) stack_id @beta
├ (P) stack_master_id @beta
├ (P) stack_base @beta
├ (P) exit_on_all_windows_closed
├ (P) hint_base
├ (P) hint_step
├ (P) win_rotation @beta
├ (P) focus_highlight_enabled
├ (P) focus_highlight_style
├ (P) focus_highlight_animate
├ (M) stack_pop_to @beta
├ (M) activate
├ (M) center @beta
├ (M) move_resize_start
├ (M) pointer_iterate @beta
├ (E) delete,request
├ (E) withdrawn @beta
├ (E) minimized
├ (E) normal
├ (E) stick @beta
├ (E) unstick @beta
├ (E) fullscreen
├ (E) unfullscreen
├ (E) maximized
├ (E) unmaximized
├ (E) indicator,prop,changed
├ (E) rotation,changed
├ (E) profile,changed @beta
├ (E) wm,rotation,changed @beta
├ (E) theme,changed
├ (E) elm,action,block_menu @beta
├ (E) pause
├ (E) resume

non-beta:

class Efl.Ui.Win
├ (P) indicator_mode
├ (P) keyboard_mode
├ (P) screen_constrain
├ (P) exit_on_close
├ (P) icon_object
├ (P) minimized
├ (P) maximized
├ (P) fullscreen
├ (P) win_name
├ (P) alpha
├ (P) exit_on_all_windows_closed
├ (P) hint_base
├ (P) hint_step
├ (P) focus_highlight_enabled
├ (P) focus_highlight_style
├ (P) focus_highlight_animate
├ (M) activate
├ (M) move_resize_start
├ (E) delete,request
├ (E) minimized
├ (E) normal
├ (E) fullscreen
├ (E) unfullscreen
├ (E) maximized
├ (E) unmaximized
├ (E) indicator,prop,changed
├ (E) rotation,changed
├ (E) theme,changed
├ (E) pause
├ (E) resume

Related Objects

StatusAssignedTask
Resolvedzmike
Resolvedzmike
Resolvedzmike
Resolvedzmike
ResolvedNone
Resolvedcedric
Resolvedzmike
Resolvedzmike
Resolvedzmike
Resolvedzmike
Resolvedzmike
ResolvedNone
Resolvedzmike
Resolvedzmike
Resolvedzmike
Resolvedzmike
Resolvedzmike
Resolvedzmike
Resolvedzmike
Resolvedzmike
Resolvedzmike
Resolvedzmike
Resolvedzmike
Resolvedzmike
zmike created this task.Dec 19 2018, 11:18 AM
zmike triaged this task as TODO priority.

This is the class hierarchy required for Efl.Ui.Win. In other words, all these classes need to be stable for Efl.Ui.Win to have any chance of being stable:

$ elua print_hierarchy.lua efl_ui_win.eo
class Efl.Ui.Win
| abstract Efl.Ui.Widget
| | class Efl.Canvas.Group
| | | abstract Efl.Canvas.Object
| | | | class Efl.Loop_Consumer
| | | | | abstract Efl.Object
| | | | interface Efl.Gfx.Entity
| | | | mixin Efl.Gfx.Color
| | | | interface Efl.Gfx.Stack
| | | | interface Efl.Animator
| | | | interface Efl.Input.Interface
| | | | interface Efl.Gfx.Size_Hint
| | | | mixin Efl.Gfx.Map
| | | | | interface Efl.Interface
| | | | | abstract Efl.Object
| | | | interface Efl.Ui.Base
| | | | interface Efl.Canvas.Pointer
| | mixin Efl.Access.Object
| | | interface Efl.Interface
| | | abstract Efl.Object
| | mixin Efl.Access.Component
| | | interface Efl.Gfx.Entity
| | | interface Efl.Gfx.Stack
| | interface Efl.Part
| | mixin Efl.Ui.Focus.Object
| | interface Efl.Ui.Cursor
| | interface Efl.Ui.Translatable
| | mixin Efl.Selection
| | mixin Efl.Ui.Dnd
| interface Efl.Canvas.Scene
| interface Efl.Access.Window
| mixin Efl.Access.Component
| | interface Efl.Gfx.Entity
| | interface Efl.Gfx.Stack
| mixin Efl.Access.Widget.Action
| | mixin Efl.Access.Action
| interface Efl.Content
| interface Efl.Input.State
| interface Efl.Input.Interface
| interface Efl.Screen
| interface Efl.Text
| interface Efl.Config
| mixin Efl.Ui.Widget_Focus_Manager
| | interface Efl.Interface
| | abstract Efl.Ui.Widget
| | | class Efl.Canvas.Group
| | | | abstract Efl.Canvas.Object
| | | | | class Efl.Loop_Consumer
| | | | | | abstract Efl.Object
| | | | | interface Efl.Gfx.Entity
| | | | | mixin Efl.Gfx.Color
| | | | | interface Efl.Gfx.Stack
| | | | | interface Efl.Animator
| | | | | interface Efl.Input.Interface
| | | | | interface Efl.Gfx.Size_Hint
| | | | | mixin Efl.Gfx.Map
| | | | | | interface Efl.Interface
| | | | | | abstract Efl.Object
| | | | | interface Efl.Ui.Base
| | | | | interface Efl.Canvas.Pointer
| | | mixin Efl.Access.Object
| | | | interface Efl.Interface
| | | | abstract Efl.Object
| | | mixin Efl.Access.Component
| | | | interface Efl.Gfx.Entity
| | | | interface Efl.Gfx.Stack
| | | interface Efl.Part
| | | mixin Efl.Ui.Focus.Object
| | | interface Efl.Ui.Cursor
| | | interface Efl.Ui.Translatable
| | | mixin Efl.Selection
| | | mixin Efl.Ui.Dnd
| | interface Efl.Ui.Focus.Manager
| interface Efl.Ui.Focus.Manager_Window_Root

Note many classes are repeated, and many classes are actually acting as interfaces (due to the infamous mixin conundrum).

I've sorted and deduplicated this list and also removed all items in T7512:

		Efl.Access.Action                                                                                         
		Efl.Access.Widget.Action
		Efl.Access.Window
		Efl.Canvas.Scene
		Efl.Config
		Efl.Content
		Efl.Input.State
		Efl.Screen
		Efl.Text
		Efl.Ui.Focus.Manager
		Efl.Ui.Focus.Manager_Window_Root
		Efl.Ui.Widget_Focus_Manager
		Efl.Ui.Win
zmike added a comment.EditedJan 8 2019, 11:25 AM

P256 for full output, prepare for subtasks

zmike added a comment.EditedJan 8 2019, 11:56 AM

I've created subtasks for the entire hierarchy. The only things which should be discussed in this ticket are things directly related to win:

class Efl.Ui.Win (elm_win)
├ (P) indicator_mode
├ (P) keyboard_mode
├ (P) wm_available_rotations
├ (P) wm_available_profiles
├ (P) screen_constrain
├ (P) prop_focus_skip
├ (P) autohide
├ (P) exit_on_close
├ (P) icon_object
├ (P) iconified
├ (P) maximized
├ (P) fullscreen
├ (P) sticky
├ (P) urgent
├ (P) modal
├ (P) noblank
├ (P) borderless
├ (P) win_role
├ (P) win_name
├ (P) win_type
├ (P) accel_preference
├ (P) alpha
├ (P) stack_id @beta
├ (P) stack_master_id @beta
├ (P) stack_base @beta
├ (M) stack_pop_to @beta
├ (M) activate
├ (M) center
├ (M) keygrab_set
├ (M) keygrab_unset
├ (M) move_resize_start
├ (E) delete,request
├ (E) withdrawn
├ (E) iconified
├ (E) normal
├ (E) stick
├ (E) unstick
├ (E) fullscreen
├ (E) unfullscreen
├ (E) maximized
├ (E) unmaximized
├ (E) indicator,prop,changed
├ (E) rotation,changed
├ (E) profile,changed
├ (E) wm,rotation,changed
├ (E) theme,changed
├ (E) elm,action,block_menu
├ (E) pause
├ (E) resume
zmike moved this task from Backlog to Evaluating on the efl: api board.Feb 25 2019, 7:39 AM

class Efl.Ui.Win (elm_win)
├ (P) indicator_mode
├ (P) keyboard_mode
├ (P) wm_available_rotations
├ (P) wm_available_profiles
├ (P) screen_constrain
├ (P) prop_focus_skip
├ (P) autohide
├ (P) exit_on_close
├ (P) icon_object
├ (P) iconified
├ (P) maximized
├ (P) fullscreen
├ (P) sticky
├ (P) urgent
├ (P) modal
├ (P) noblank
├ (P) borderless
├ (P) win_role
├ (P) win_name
├ (P) win_type
├ (P) accel_preference
├ (P) alpha
├ (P) stack_id @beta
├ (P) stack_master_id @beta
├ (P) stack_base @beta
├ (P) win_base @beta
├ (M) stack_pop_to @beta
├ (M) activate
├ (M) center
├ (M) keygrab_set
├ (M) keygrab_unset
├ (M) move_resize_start
├ (E) delete,request
├ (E) withdrawn
├ (E) iconified
├ (E) normal
├ (E) stick
├ (E) unstick
├ (E) fullscreen
├ (E) unfullscreen
├ (E) maximized
├ (E) unmaximized
├ (E) indicator,prop,changed
├ (E) rotation,changed
├ (E) profile,changed
├ (E) wm,rotation,changed
├ (E) theme,changed
├ (E) elm,action,block_menu
├ (E) pause
├ (E) resume

zmike added a comment.EditedFeb 27 2019, 1:09 PM

I think I'd prefer to rename iconified to minimized since this is actually a word people use.

There are a LOT of X11-specific methods in here:

  • stick
  • unstick
  • prop_focus_skip
  • win_role
  • wm_available_profiles
  • wm_available_rotations
  • keygrab_set
  • keygrab_unset
  • noblank
  • win_type
  • normal
  • ...

And the corresponding events for all of these.

The following only work under (certain versions of) enlightenment under X11:

  • wm_available_profiles
  • wm_available_rotations
  • keygrab_set
  • keygrab_unset

I think these should be completely removed/disabled from interfaces; the first two aren't used anywhere and don't work under Wayland, and the last two shouldn't have been added upstream to begin with.

elm,action,block_menu is unbelievably ugly as a name?

In summary, I think nearly all the methods/properties/events here should be beta. It would be easier to build a list of the things that were "good" in this class than the things that are bad solely because there's so few of the "good" and "usable" things.

@zmike
I also agree with your point that almost all methods and properties need to be set as beta.
So, we can re-define them all after this release.

@Jaehyun_Cho is checking whether there are some necessary things. And give feedback if needed.

@zmike

I don't mind if you remove the properties/methods/events which you mentioned that those are not used or are related to only X11.
It is fine if those are preserved in legacy at least :)

BTW, I checked those and it seems that some of them are supported now by efl wayland or by tizen.
I don't mean that we should add those to efl_ui_win.eo but we need to check if those are neccessary or not in new interface eo.

(P) available_rotations : supported by ecore_wl2_window_available_rotations_get
(P) prop_focus_skip : supported by ecore_wl2_window_focus_skip_set
(P) win_role : supported by ecore_wl2_window_role_set (tizen)
(P) win_type : supported with ECORE_WL2_WINDOW_TYPE
(M) keygrab_set : supported by ecore_wl2_window_keygrab_set (tizen)
(M) keygrab_unset : supported by ecore_wl2_window_keygrab_unset (tizen)
(E) normal : supported with EFL_UI_WIN_EVENT_NORMAL

@zmike @woohyun

IMHO, I think the following properties/methods/events are essential for Efl.Ui.Win.

class Efl.Ui.Win (elm_win)
├ (P) iconified or (P) minimized
├ (P) maximized
├ (P) fullscreen
├ (P) win_name
├ (P) alpha
├ (M) activate
├ (E) delete,request
├ (E) iconified or (E) minimized
├ (E) fullscreen
├ (E) maximized

I don't add (E) unmaximized, (E) unfullscreen because win has only one state among normal, minimized, maximized, fullscreen. So I think that we can use (E) normal (E) minimized (E) maximized (E) fullscreen.

We definitely need (P) wm_available_rotations to limit the available rotations but I am not sure if the name is common or not. So I think it would be fine to be @beta for this.
We definitely need (P) win_type to set window type but I am not sure if the win types are fully checked and organized and works. So I think it would be fine to be @beta for this.

Please give me your opinion if you want to add some or if you do not agree with some.

I am totally fine with that : )

zmike added a comment.Feb 28 2019, 5:26 AM

@zmike

I don't mind if you remove the properties/methods/events which you mentioned that those are not used or are related to only X11.
It is fine if those are preserved in legacy at least :)

BTW, I checked those and it seems that some of them are supported now by efl wayland or by tizen.
I don't mean that we should add those to efl_ui_win.eo but we need to check if those are neccessary or not in new interface eo.

(P) available_rotations : supported by ecore_wl2_window_available_rotations_get
(P) prop_focus_skip : supported by ecore_wl2_window_focus_skip_set
(P) win_role : supported by ecore_wl2_window_role_set (tizen)
(P) win_type : supported with ECORE_WL2_WINDOW_TYPE
(M) keygrab_set : supported by ecore_wl2_window_keygrab_set (tizen)
(M) keygrab_unset : supported by ecore_wl2_window_keygrab_unset (tizen)
(E) normal : supported with EFL_UI_WIN_EVENT_NORMAL

Regarding these: none of these are supported in wayland. They have ecore-wl2 functions, but if you actually read these functions they were added (wrongly) and are just stubs: they don't do anything other than confuse people using grep such as in this discussion.

zmike added a comment.Feb 28 2019, 5:37 AM

@zmike @woohyun

IMHO, I think the following properties/methods/events are essential for Efl.Ui.Win.

class Efl.Ui.Win (elm_win)
├ (P) iconified or (P) minimized
├ (P) maximized
├ (P) fullscreen
├ (P) win_name
├ (P) alpha
├ (M) activate
├ (E) delete,request
├ (E) iconified or (E) minimized
├ (E) fullscreen
├ (E) maximized

I don't add (E) unmaximized, (E) unfullscreen because win has only one state among normal, minimized, maximized, fullscreen. So I think that we can use (E) normal (E) minimized (E) maximized (E) fullscreen.

All of these are fine except (E) minimized which is not technically supported under wayland and cannot be supported without manually-implemented protocol extensions. the surface.leave event (ECORE_WL2_EVENT_WINDOW_OFFSCREEN) can be used in compositors which support it, but I'm unsure we want to necessarily be equating "not on any output" with "minimized" as they are not functionally identical.

We definitely need (P) wm_available_rotations to limit the available rotations but I am not sure if the name is common or not. So I think it would be fine to be @beta for this.

As I said above, this isn't implemented under Wayland, so unless you're planning to implement it with protocol extensions then it's not going to be useful.

We definitely need (P) win_type to set window type but I am not sure if the win types are fully checked and organized and works. So I think it would be fine to be @beta for this.

Most of the types in the enum don't apply to any display system besides X11, so this is a bit of a problem.

Please give me your opinion if you want to add some or if you do not agree with some.

I will put up a patch...

zmike updated the task description. (Show Details)Feb 28 2019, 6:44 AM
zmike added a comment.Mar 1 2019, 1:26 PM
This comment was removed by zmike.
zmike updated the task description. (Show Details)Mar 5 2019, 4:00 AM
zmike added a comment.EditedMar 5 2019, 4:05 AM

I am now wondering whether we need:

├ (P) indicator_mode
├ (P) keyboard_mode
├ (P) screen_constrain
├ (E) indicator,prop,changed

in the initial stabilization or whether these can remain beta. @woohyun @Jaehyun_Cho

In T7511#132129, @zmike wrote:

I am now wondering whether we need:

├ (P) indicator_mode
├ (P) keyboard_mode
├ (P) screen_constrain
├ (E) indicator,prop,changed

in the initial stabilization or whether these can remain beta. @woohyun @Jaehyun_Cho

I think (p) indicator_mode needs to be in the initial stabilization.

But we can remove (or remain @beta) for the others.

zmike moved this task from Evaluating to Stabilized on the efl: api board.Mar 8 2019, 7:32 AM
zmike closed subtask T7593: efl.ui.widget_focus_manager as Resolved.
zmike closed subtask T7591: efl.text as Resolved.
zmike closed subtask T7590: efl.screen as Resolved.
zmike closed subtask T7589: efl.input.state as Resolved.
zmike closed subtask T7588: efl.content as Resolved.
zmike closed subtask T7553: efl.ui.widget as Resolved.
zmike closed this task as Resolved.
zmike claimed this task.