elm_win: enable floating_mode_set on wayland 36/66736/3
authorMinJeong Kim <minjjj.kim@samsung.com>
Wed, 20 Apr 2016 07:11:45 +0000 (16:11 +0900)
committerGwanglim Lee <gl77.lee@samsung.com>
Mon, 25 Apr 2016 05:10:00 +0000 (22:10 -0700)
1. replace "simple" border style as "floating" for floating mode window.
2. implement elm_win_floating_mode_set on wayland.

Change-Id: Ia06acc0295b67392ecb1ace38b0228f103e1f462

data/themes/edc/elm/border.edc
data/themes/img/simple-resize-marker.png [new file with mode: 0644]
src/lib/elm_win.c

index 3625e0f..b990379 100644 (file)
@@ -1645,38 +1645,28 @@ group { name: "elm/border/base/default";
    }
 }
 
-group { name: "elm/border/base/simple";
+group { name: "elm/border/base/floating";
    images.image: "win_glow.png" COMP;
    images.image: "glow_round_corners_small.png" COMP;
    images.image: "simple-border.png" COMP;
    images.image: "simple-button-close.png" COMP;
-
-   // XXX: trhis is UNTESTED!!! need wl to test!
+   images.image: "simple-resize-marker.png" COMP;
    parts {
-      part { name: "focus_clip"; type: RECT;
-         description { state: "default" 0.0;
-         }
-         description { state: "max" 0.0;
-            inherit: "default" 0.0;
-            visible: 0;
-         }
-      }
-      part { name: "elm.swallow.frame_spacer"; type: SWALLOW;
-         clip_to: "focus_clip";
+      part { name: "frame"; mouse_events: 0; type: RECT;
          description { state: "default" 0.0;
-            rel1.to: "frame";
-            rel2.to: "frame";
+            rel1.relative: 0.0 0.0;
+            rel1.offset: 17 51;
+            rel2.relative: 1.0 1.0;
+            rel2.offset: -22 -22;
+            color: 0 0 0 0;
          }
       }
-      part { name: "frame"; type: SPACER;
+      part { name: "focus_clip"; mouse_events: 0; type: RECT;
          description { state: "default" 0.0;
-            rel1.offset:  17 51;
-            rel2.offset: -22 -22;
          }
          description { state: "max" 0.0;
             inherit: "default" 0.0;
-            rel1.offset: 0 0;
-            rel2.offset: -1 -1;
+            visible: 0;
          }
       }
       part { name: "glow"; mouse_events: 0;
@@ -1699,31 +1689,10 @@ group { name: "elm/border/base/simple";
             visible: 1;
          }
       }
-      part { name: "client_clip"; type: RECT;
-         description { state: "default" 0.0;
-            rel1.to_y: "elm.swallow.client";
-            rel2.to_y: "elm.swallow.client";
-         }
-      }
-      part { name: "elm.swallow.client"; type: SWALLOW;
-         clip_to: "client_clip";
+      part { name: "client_clip"; mouse_events: 0; type: RECT;
          description { state: "default" 0.0;
-            rel1.relative: 0.0 1.0;
-            rel1.to: "top";
-            rel2.relative: 1.0 0.0;
-            rel2.to: "bottom";
-         }
-         description { state: "shaded" 0.0;
-            inherit: "default" 0.0;
-            rel2.relative: 1.0 1.0;
-            rel2.offset: -1 -1;
-            rel2.to: "bottom";
-         }
-         description { state: "max" 0.0;
-            inherit: "default" 0.0;
-            rel2.relative: 1.0 1.0;
-            rel2.offset: -1 -1;
-            rel2.to: "bottom";
+            rel1.to: "frame";
+            rel2.to: "frame";
          }
       }
       part { name: "top"; type:RECT; mouse_events: 0;
@@ -1764,6 +1733,27 @@ group { name: "elm/border/base/simple";
             visible: 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";
+            rel2.relative: 1.0 0.0;
+            rel2.to: "bottom";
+         }
+         description { state: "shaded" 0.0;
+            inherit: "default" 0.0;
+            rel2.relative: 1.0 1.0;
+            rel2.offset: -1 -1;
+            rel2.to: "bottom";
+         }
+         description { state: "max" 0.0;
+            inherit: "default" 0.0;
+            rel2.relative: 1.0 1.0;
+            rel2.offset: -1 -1;
+            rel2.to: "bottom";
+         }
+      }
       part { name: "border"; mouse_events: 0;
          description { state: "default" 0.0;
               image.normal: "simple-border.png";
@@ -1910,35 +1900,15 @@ group { name: "elm/border/base/simple";
             FIXED_SIZE(20, 20);
          }
       }
-      part { name: "e.event.resize.tl"; type: RECT;
-         description { state: "default" 0.0;
-            fixed: 1 1;
-            rel1.to: "top";
-            rel1.relative: 0.0 0.0;
-            rel1.offset: -17 0;
-            rel2.relative: 0.0 1.0;
-            rel2.to_y: "top";
-            color: 0 0 0 0;
-         }
-      }
-      part { name: "e.event.resize.tr"; type: RECT;
+      part { name: "e.event.resize.br"; type: RECT;
          description { state: "default" 0.0;
-            rel1.to: "top";
+            rel1.to: "bottom";
             rel1.relative: 1.0 0.0;
-            rel2.to: "top";
+            rel1.offset: -23 -23;
+            rel2.to: "bottom";
             rel2.relative: 1.0 1.0;
             rel2.offset: 23 0;
-            color: 0 0 0 0;
-         }
-      }
-      part { name: "e.event.resize.bl"; type: RECT;
-         description { state: "default" 0.0;
             fixed: 1 1;
-            rel1.to: "bottom";
-            rel1.relative: 0.0 0.0;
-            rel1.offset: -17 0;
-            rel2.to: "bottom";
-            rel2.relative: 0.0 1.0;
             color: 0 0 0 0;
          }
          description { state: "shaded" 0.0;
@@ -1952,33 +1922,13 @@ group { name: "elm/border/base/simple";
             visible: 0;
          }
       }
-      part { name: "e.event.resize.b"; type: RECT;
+      part { name: "resize_marker"; nomouse;
          description { state: "default" 0.0;
-            fixed: 1 1;
-            rel1.to: "bottom";
-            rel2.to: "bottom";
-            color: 0 0 0 0;
-         }
-         description { state: "shaded" 0.0;
-            inherit: "default" 0.0;
-            min: 0 0;
-            visible: 0;
-         }
-         description { state: "max" 0.0;
-            inherit: "default" 0.0;
-            min: 0 0;
-            visible: 0;
-         }
-      }
-      part { name: "e.event.resize.br"; type: RECT;
-         description { state: "default" 0.0;
-            fixed: 1 1;
-            rel1.to: "bottom";
-            rel1.relative: 1.0 0.0;
-            rel2.to: "bottom";
+            image.normal: "simple-resize-marker.png";
+            rel1.to: "e.event.resize.br";
+            rel1.relative: 0.0 0.0;
+            rel2.to: "e.event.resize.br";
             rel2.relative: 1.0 1.0;
-            rel2.offset: 23 0;
-            color: 0 0 0 0;
          }
          description { state: "shaded" 0.0;
             inherit: "default" 0.0;
@@ -1991,28 +1941,6 @@ group { name: "elm/border/base/simple";
             visible: 0;
          }
       }
-      part { name: "e.event.resize.r"; type: RECT;
-         description { state: "default" 0.0;
-            rel1.relative: 1.0 1.0;
-            rel1.to_x: "top";
-            rel1.to_y: "e.event.resize.tr";
-            rel2.relative: 1.0 0.0;
-            rel2.to_x: "e.event.resize.br";
-            rel2.to_y: "bottom";
-            color: 0 0 0 0;
-         }
-      }
-      part { name: "e.event.resize.l"; type: RECT;
-         description { state: "default" 0.0;
-            rel1.relative: 0.0 1.0;
-            rel1.to_x: "e.event.resize.tl";
-            rel1.to_y: "top";
-            rel2.relative: 0.0 0.0;
-            rel2.to_x: "bottom";
-            rel2.to_y: "e.event.resize.bl";
-            color: 0 0 0 0;
-         }
-      }
    }
    programs {
       program {
@@ -2056,8 +1984,6 @@ group { name: "elm/border/base/simple";
          action: STATE_SET "shaded" 0.0;
          target: "elm.swallow.client";
          target: "bottom";
-         target: "e.event.resize.bl";
-         target: "e.event.resize.b";
          target: "e.event.resize.br";
       }
       program {
@@ -2065,8 +1991,6 @@ group { name: "elm/border/base/simple";
          action: STATE_SET "default" 0.0;
          target: "elm.swallow.client";
          target: "bottom";
-         target: "e.event.resize.bl";
-         target: "e.event.resize.b";
          target: "e.event.resize.br";
       }
       program {
@@ -2076,8 +2000,6 @@ group { name: "elm/border/base/simple";
          target: "frame";
          target: "focus_clip";
          target: "bottom";
-         target: "e.event.resize.bl";
-         target: "e.event.resize.b";
          target: "e.event.resize.br";
       }
       program {
@@ -2087,8 +2009,6 @@ group { name: "elm/border/base/simple";
          target: "frame";
          target: "focus_clip";
          target: "bottom";
-         target: "e.event.resize.bl";
-         target: "e.event.resize.b";
          target: "e.event.resize.br";
       }
       program {
@@ -2103,7 +2023,6 @@ group { name: "elm/border/base/simple";
          target: "close1";
          target: "close2";
       }
-
       program {
          signal: "mouse,down,1"; source: "e.event.titlebar";
          action: SIGNAL_EMIT "elm,action,move,start" "elm";
@@ -2113,82 +2032,10 @@ group { name: "elm/border/base/simple";
          action: SIGNAL_EMIT "elm,action,move,stop" "elm";
       }
       program {
-         signal: "mouse,clicked,1"; source: "e.event.close";
+         signal: "mouse,up,1"; source: "e.event.close";
          action: SIGNAL_EMIT "elm,action,close" "elm";
       }
       program {
-         signal: "mouse,in"; source: "e.event.resize.b";
-         action: SIGNAL_EMIT "elm,action,resize,show" "elm.event.resize.b";
-      }
-      program {
-         signal: "mouse,out"; source: "e.event.resize.b";
-         action: SIGNAL_EMIT "elm,action,resize,hide" "elm.event.resize.b";
-      }
-      program {
-         signal: "mouse,down,1"; source: "e.event.resize.b";
-         action: SIGNAL_EMIT "elm,action,resize,start" "elm.event.resize.b";
-      }
-      program {
-         signal: "mouse,in"; source: "e.event.resize.l";
-         action: SIGNAL_EMIT "elm,action,resize,show" "elm.event.resize.l";
-      }
-      program {
-         signal: "mouse,out"; source: "e.event.resize.l";
-         action: SIGNAL_EMIT "elm,action,resize,hide" "elm.event.resize.l";
-      }
-      program {
-         signal: "mouse,down,1"; source: "e.event.resize.l";
-         action: SIGNAL_EMIT "elm,action,resize,start" "elm.event.resize.l";
-      }
-      program {
-         signal: "mouse,in"; source: "e.event.resize.r";
-         action: SIGNAL_EMIT "elm,action,resize,show" "elm.event.resize.r";
-      }
-      program {
-         signal: "mouse,out"; source: "e.event.resize.r";
-         action: SIGNAL_EMIT "elm,action,resize,hide" "elm.event.resize.r";
-      }
-      program {
-         signal: "mouse,down,1"; source: "e.event.resize.r";
-         action: SIGNAL_EMIT "elm,action,resize,start" "elm.event.resize.r";
-      }
-      program {
-         signal: "mouse,in"; source: "e.event.resize.tl";
-         action: SIGNAL_EMIT "elm,action,resize,show" "elm.event.resize.tl";
-      }
-      program {
-         signal: "mouse,out"; source: "e.event.resize.tl";
-         action: SIGNAL_EMIT "elm,action,resize,hide" "elm.event.resize.tl";
-      }
-      program {
-         signal: "mouse,down,1"; source: "e.event.resize.tl";
-         action: SIGNAL_EMIT "elm,action,resize,start" "elm.event.resize.tl";
-      }
-      program {
-         signal: "mouse,in"; source: "e.event.resize.tr";
-         action: SIGNAL_EMIT "elm,action,resize,show" "elm.event.resize.tr";
-      }
-      program {
-         signal: "mouse,out"; source: "e.event.resize.tr";
-         action: SIGNAL_EMIT "elm,action,resize,hide" "elm.event.resize.tr";
-      }
-      program {
-         signal: "mouse,down,1"; source: "e.event.resize.tr";
-         action: SIGNAL_EMIT "elm,action,resize,start" "elm.event.resize.tr";
-      }
-      program {
-         signal: "mouse,in"; source: "e.event.resize.bl";
-         action: SIGNAL_EMIT "elm,action,resize,show" "elm.event.resize.bl";
-      }
-      program {
-         signal: "mouse,out"; source: "e.event.resize.bl";
-         action: SIGNAL_EMIT "elm,action,resize,hide" "elm.event.resize.bl";
-      }
-      program {
-         signal: "mouse,down,1"; source: "e.event.resize.bl";
-         action: SIGNAL_EMIT "elm,action,resize,start" "elm.event.resize.bl";
-      }
-      program {
          signal: "mouse,in"; source: "e.event.resize.br";
          action: SIGNAL_EMIT "elm,action,resize,show" "elm.event.resize.br";
       }
diff --git a/data/themes/img/simple-resize-marker.png b/data/themes/img/simple-resize-marker.png
new file mode 100644 (file)
index 0000000..42bd8ac
Binary files /dev/null and b/data/themes/img/simple-resize-marker.png differ
index 222dfb5..762432c 100644 (file)
@@ -242,6 +242,7 @@ struct _Elm_Win_Data
    Eina_Bool    theme_alpha : 1; /**< alpha value fetched by a theme. this has higher priority than application_alpha */
    Eina_Bool    application_alpha : 1; /**< alpha value set by an elm_win_alpha_set() api. this has lower priority than theme_alpha */
    Eina_Bool    obscured :1;
+   Eina_Bool    borderless : 1;
 };
 
 static const char SIG_DELETE_REQUEST[] = "delete,request";
@@ -4669,6 +4670,8 @@ _elm_win_borderless_set(Eo *obj EINA_UNUSED, Elm_Win_Data *sd, Eina_Bool borderl
           evas_object_show(sd->frame_obj);
      }
 
+   sd->borderless = borderless;
+
    TRAP(sd, borderless_set, borderless);
 #ifdef HAVE_ELEMENTARY_X
    _elm_win_xwin_update(sd);
@@ -6010,6 +6013,36 @@ elm_win_floating_mode_set(Evas_Object *obj, Eina_Bool floating)
    floating = !!floating;
    if (floating == sd->floating) return;
    sd->floating = floating;
+#if HAVE_ELEMENTARY_WAYLAND
+   _elm_win_wlwindow_get(sd);
+   if (sd->wl.win)
+     {
+        if (floating)
+          {
+             const char *engine_name = ecore_evas_engine_name_get(sd->ee);
+             Eina_Bool need_frame = engine_name &&
+                ((!strcmp(engine_name, ELM_WAYLAND_SHM)) ||
+                 (!strcmp(engine_name, ELM_WAYLAND_EGL)));
+
+             if (need_frame)
+               need_frame = !sd->fullscreen;
+
+             if (need_frame)
+               {
+                  _elm_win_frame_del(sd);
+                  _elm_win_frame_add(sd, "floating");
+               }
+
+             if (sd->frame_obj)
+               evas_object_show(sd->frame_obj);
+          }
+        else
+          {
+             elm_win_borderless_set(obj, sd->borderless);
+          }
+        ecore_wl_window_floating_mode_set(sd->wl.win, floating);
+     }
+#endif
 #ifdef HAVE_ELEMENTARY_X
    _internal_elm_win_xwindow_get(sd);
    if (sd->x.xwin)