Add feature - floating mode (app-in-app)
authorDoyoun Kang <doyoun.kang@samsung.com>
Tue, 5 Jun 2012 06:17:40 +0000 (15:17 +0900)
committerDoyoun Kang <doyoun.kang@samsung.com>
Tue, 5 Jun 2012 07:38:35 +0000 (16:38 +0900)
Change-Id: Iec387fb274996e698776368957f97285096fe255

debian/changelog
src/lib/ecore_x/Ecore_X.h
src/lib/ecore_x/Ecore_X_Atoms.h
src/lib/ecore_x/ecore_x_atoms_decl.h
src/lib/ecore_x/xcb/ecore_xcb_atoms.c
src/lib/ecore_x/xcb/ecore_xcb_e.c
src/lib/ecore_x/xcb/ecore_xcb_netwm.c
src/lib/ecore_x/xlib/ecore_x_atoms.c
src/lib/ecore_x/xlib/ecore_x_e.c
src/lib/ecore_x/xlib/ecore_x_netwm.c

index 3f5ecbc..d8b78a8 100644 (file)
@@ -1,3 +1,11 @@
+ecore (1.2.0+svn.70444slp2+build05) unstable; urgency=low
+
+  * Add feature - floating mode (app-in-app)
+  * Git: slp/pkgs/e/ecore
+  * Tag: ecore_1.2.0+svn.70444slp2+build05
+
+ -- Doyoun Kang <doyoun.kang@samsung.com>  Tue, 05 Jun 2012 15:17:17 +0900
+
 ecore (1.2.0+svn.70444slp2+build04) unstable; urgency=low
 
   * Package Upload
index 9d18d96..965519f 100644 (file)
@@ -349,6 +349,20 @@ typedef enum _Ecore_X_Randr_Property_Change
    ECORE_X_RANDR_PROPERTY_CHANGE_DEL
 } Ecore_X_Randr_Property_Change;
 
+typedef enum _Ecore_X_Netwm_Direction
+{
+   ECORE_X_NETWM_DIRECTION_SIZE_TL = 0,
+   ECORE_X_NETWM_DIRECTION_SIZE_T = 1,
+   ECORE_X_NETWM_DIRECTION_SIZE_TR = 2,
+   ECORE_X_NETWM_DIRECTION_SIZE_R = 3,
+   ECORE_X_NETWM_DIRECTION_SIZE_BR = 4,
+   ECORE_X_NETWM_DIRECTION_SIZE_B = 5,
+   ECORE_X_NETWM_DIRECTION_SIZE_BL = 6,
+   ECORE_X_NETWM_DIRECTION_SIZE_L = 7,
+   ECORE_X_NETWM_DIRECTION_MOVE = 8,
+   ECORE_X_NETWM_DIRECTION_CANCEL = 11,
+} Ecore_X_Netwm_Direction;
+
 typedef struct _Ecore_X_Event_Mouse_In                     Ecore_X_Event_Mouse_In;
 typedef struct _Ecore_X_Event_Mouse_Out                    Ecore_X_Event_Mouse_Out;
 typedef struct _Ecore_X_Event_Window_Focus_In              Ecore_X_Event_Window_Focus_In;
@@ -1191,6 +1205,12 @@ typedef enum _Ecore_X_Illume_Indicator_Opacity_Mode
    ECORE_X_ILLUME_INDICATOR_TRANSPARENT
 } Ecore_X_Illume_Indicator_Opacity_Mode;
 
+typedef enum _Ecore_X_Illume_Window_State
+{
+   ECORE_X_ILLUME_WINDOW_STATE_NORMAL = 0,
+   ECORE_X_ILLUME_WINDOW_STATE_FLOATING
+} Ecore_X_Illume_Window_State;
+
 /* Window layer constants */
 #define ECORE_X_WINDOW_LAYER_BELOW  2
 #define ECORE_X_WINDOW_LAYER_NORMAL 4
@@ -2347,6 +2367,12 @@ EAPI void
 ecore_x_netwm_desktop_request_send(Ecore_X_Window win,
                                    Ecore_X_Window root,
                                    unsigned int desktop);
+EAPI void
+ecore_x_netwm_moveresize_request_send(Ecore_X_Window win,
+                                      int x,
+                                      int y,
+                                      Ecore_X_Netwm_Direction direction,
+                                      unsigned int button);
 
 EAPI void
  ecore_x_e_init(void);
@@ -3792,6 +3818,13 @@ EAPI void
 ecore_x_e_illume_indicator_opacity_send(Ecore_X_Window win,
                                       Ecore_X_Illume_Indicator_Opacity_Mode mode);
 
+EAPI void
+ecore_x_e_illume_window_state_set(Ecore_X_Window win,
+                                  Ecore_X_Illume_Window_State state);
+
+EAPI Ecore_X_Illume_Window_State
+ecore_x_e_illume_window_state_get(Ecore_X_Window win);
+
 #ifdef __cplusplus
 }
 #endif // ifdef __cplusplus
index 31bcf7b..341df32 100644 (file)
@@ -252,6 +252,9 @@ EAPI extern Ecore_X_Atom ECORE_X_ATOM_E_ILLUME_CLIPBOARD_STATE;
 EAPI extern Ecore_X_Atom ECORE_X_ATOM_E_ILLUME_CLIPBOARD_ON;
 EAPI extern Ecore_X_Atom ECORE_X_ATOM_E_ILLUME_CLIPBOARD_OFF;
 EAPI extern Ecore_X_Atom ECORE_X_ATOM_E_ILLUME_CLIPBOARD_GEOMETRY;
+EAPI extern Ecore_X_Atom ECORE_X_ATOM_E_ILLUME_WINDOW_STATE;
+EAPI extern Ecore_X_Atom ECORE_X_ATOM_E_ILLUME_WINDOW_STATE_NORMAL;
+EAPI extern Ecore_X_Atom ECORE_X_ATOM_E_ILLUME_WINDOW_STATE_FLOATING;
 
 EAPI extern Ecore_X_Atom ECORE_X_ATOM_E_COMP_SYNC_COUNTER;
 EAPI extern Ecore_X_Atom ECORE_X_ATOM_E_COMP_SYNC_DRAW_DONE;
index df410be..3cb090f 100644 (file)
@@ -278,6 +278,9 @@ EAPI Ecore_X_Atom ECORE_X_ATOM_E_ILLUME_CLIPBOARD_STATE = 0;
 EAPI Ecore_X_Atom ECORE_X_ATOM_E_ILLUME_CLIPBOARD_GEOMETRY = 0;
 EAPI Ecore_X_Atom ECORE_X_ATOM_E_ILLUME_CLIPBOARD_ON = 0;
 EAPI Ecore_X_Atom ECORE_X_ATOM_E_ILLUME_CLIPBOARD_OFF = 0;
+EAPI Ecore_X_Atom ECORE_X_ATOM_E_ILLUME_WINDOW_STATE = 0;
+EAPI Ecore_X_Atom ECORE_X_ATOM_E_ILLUME_WINDOW_STATE_NORMAL = 0;
+EAPI Ecore_X_Atom ECORE_X_ATOM_E_ILLUME_WINDOW_STATE_FLOATING = 0;
 
 EAPI Ecore_X_Atom ECORE_X_ATOM_E_COMP_SYNC_COUNTER = 0;
 EAPI Ecore_X_Atom ECORE_X_ATOM_E_COMP_SYNC_DRAW_DONE = 0;
index ec2daaf..6d18b7c 100644 (file)
@@ -263,6 +263,9 @@ static Xcb_Atom atoms[] =
    { "_E_ILLUME_CLIPBOARD_ON", &ECORE_X_ATOM_E_ILLUME_CLIPBOARD_ON },
    { "_E_ILLUME_CLIPBOARD_OFF", &ECORE_X_ATOM_E_ILLUME_CLIPBOARD_OFF },
    { "_E_ILLUME_CLIPBOARD_GEOMETRY", &ECORE_X_ATOM_E_ILLUME_CLIPBOARD_GEOMETRY },
+   { "_E_ILLUME_WINDOW_STATE", &ECORE_X_ATOM_E_ILLUME_WINDOW_STATE },
+   { "_E_ILLUME_WINDOW_STATE_NORMAL", &ECORE_X_ATOM_E_ILLUME_WINDOW_STATE_NORMAL },
+   { "_E_ILLUME_WINDOW_STATE_FLOATING", &ECORE_X_ATOM_E_ILLUME_WINDOW_STATE_FLOATING },
    { "_E_COMP_SYNC_COUNTER", &ECORE_X_ATOM_E_COMP_SYNC_COUNTER },
    { "_E_COMP_SYNC_DRAW_DONE", &ECORE_X_ATOM_E_COMP_SYNC_DRAW_DONE },
    { "_E_COMP_SYNC_SUPPORTED", &ECORE_X_ATOM_E_COMP_SYNC_SUPPORTED },
index 60bfc9c..d9c58d7 100644 (file)
@@ -1305,3 +1305,58 @@ ecore_x_e_illume_indicator_opacity_send(Ecore_X_Window win,
                                  0, 0, 0, 0);
 }
 
+static Ecore_X_Atom
+_ecore_x_e_illume_window_state_atom_get(Ecore_X_Illume_Window_State state)
+{
+   switch (state)
+     {
+      case ECORE_X_ILLUME_WINDOW_STATE_NORMAL:
+        return ECORE_X_ATOM_E_ILLUME_WINDOW_STATE_NORMAL;
+
+      case ECORE_X_ILLUME_WINDOW_STATE_FLOATING:
+        return ECORE_X_ATOM_E_ILLUME_WINDOW_STATE_FLOATING;
+
+      default:
+        break;
+     }
+   return 0;
+}
+
+static Ecore_X_Illume_Window_State
+_ecore_x_e_illume_window_state_get(Ecore_X_Atom atom)
+{
+   if (atom == ECORE_X_ATOM_E_ILLUME_WINDOW_STATE_NORMAL)
+     return ECORE_X_ILLUME_WINDOW_STATE_NORMAL;
+
+   if (atom == ECORE_X_ATOM_E_ILLUME_WINDOW_STATE_FLOATING)
+     return ECORE_X_ILLUME_WINDOW_STATE_FLOATING;
+
+   return ECORE_X_ILLUME_WINDOW_STATE_NORMAL;
+}
+
+EAPI void
+ecore_x_e_illume_window_state_set(Ecore_X_Window win,
+                                  Ecore_X_Illume_Window_State state)
+{
+   Ecore_X_Atom atom = 0;
+
+   LOGFN(__FILE__, __LINE__, __FUNCTION__);
+   atom = _ecore_x_e_illume_window_state_atom_get(state);
+   ecore_x_window_prop_atom_set(win, ECORE_X_ATOM_E_ILLUME_WINDOW_STATE,
+                                &atom, 1);
+}
+
+EAPI Ecore_X_Illume_Window_State
+ecore_x_e_illume_window_state_get(Ecore_X_Window win)
+{
+   Ecore_X_Atom atom;
+
+   LOGFN(__FILE__, __LINE__, __FUNCTION__);
+   if (!ecore_x_window_prop_atom_get(win,
+                                     ECORE_X_ATOM_E_ILLUME_WINDOW_STATE,
+                                     &atom, 1))
+     return ECORE_X_ILLUME_WINDOW_STATE_NORMAL;
+
+   return _ecore_x_e_illume_window_state_get(atom);
+}
+
index 53869aa..954e663 100644 (file)
@@ -794,6 +794,35 @@ ecore_x_netwm_desktop_request_send(Ecore_X_Window win,
 }
 
 EAPI void
+ecore_x_netwm_moveresize_request_send(Ecore_X_Window win,
+                                      int x,
+                                      int y,
+                                      Ecore_X_Netwm_Direction direction,
+                                      unsigned int button)
+{
+   xcb_client_message_event_t ev;
+
+   LOGFN(__FILE__, __LINE__, __FUNCTION__);
+   CHECK_XCB_CONN;
+
+   memset(&ev, 0, sizeof(xcb_client_message_event_t));
+
+   ev.response_type = XCB_CLIENT_MESSAGE;
+   ev.format = 32;
+   ev.window = win;
+   ev.type = ECORE_X_ATOM_NET_WM_MOVERESIZE;
+   ev.data.data32[0] = x;
+   ev.data.data32[1] = y;
+   ev.data.data32[2] = direction;
+   ev.data.data32[3] = button;
+   ev.data.data32[4] = 1;
+
+   xcb_send_event(_ecore_xcb_conn, 0, win,
+                  (XCB_EVENT_MASK_SUBSTRUCTURE_REDIRECT |
+                   XCB_EVENT_MASK_SUBSTRUCTURE_NOTIFY), (const char *)&ev);
+}
+
+EAPI void
 ecore_x_netwm_handled_icons_set(Ecore_X_Window win)
 {
    LOGFN(__FILE__, __LINE__, __FUNCTION__);
index d7ec3a5..2b8a33d 100644 (file)
@@ -284,6 +284,9 @@ _ecore_x_atoms_init(void)
       { "_E_ILLUME_CLIPBOARD_ON", &ECORE_X_ATOM_E_ILLUME_CLIPBOARD_ON },
       { "_E_ILLUME_CLIPBOARD_OFF", &ECORE_X_ATOM_E_ILLUME_CLIPBOARD_OFF },
       { "_E_ILLUME_CLIPBOARD_GEOMETRY", &ECORE_X_ATOM_E_ILLUME_CLIPBOARD_GEOMETRY },
+      { "_E_ILLUME_WINDOW_STATE", &ECORE_X_ATOM_E_ILLUME_WINDOW_STATE },
+      { "_E_ILLUME_WINDOW_STATE_NORMAL", &ECORE_X_ATOM_E_ILLUME_WINDOW_STATE_NORMAL },
+      { "_E_ILLUME_WINDOW_STATE_FLOATING", &ECORE_X_ATOM_E_ILLUME_WINDOW_STATE_FLOATING },
       { "_E_COMP_SYNC_COUNTER", &ECORE_X_ATOM_E_COMP_SYNC_COUNTER },
       { "_E_COMP_SYNC_DRAW_DONE", &ECORE_X_ATOM_E_COMP_SYNC_DRAW_DONE },
       { "_E_COMP_SYNC_SUPPORTED", &ECORE_X_ATOM_E_COMP_SYNC_SUPPORTED },
index 64ab929..310bd93 100644 (file)
@@ -1368,3 +1368,58 @@ ecore_x_e_illume_indicator_opacity_send(Ecore_X_Window win,
                                  0, 0, 0, 0);
 }
 
+static Ecore_X_Atom
+_ecore_x_e_illume_window_state_atom_get(Ecore_X_Illume_Window_State state)
+{
+   switch (state)
+     {
+      case ECORE_X_ILLUME_WINDOW_STATE_NORMAL:
+        return ECORE_X_ATOM_E_ILLUME_WINDOW_STATE_NORMAL;
+
+      case ECORE_X_ILLUME_WINDOW_STATE_FLOATING:
+        return ECORE_X_ATOM_E_ILLUME_WINDOW_STATE_FLOATING;
+
+      default:
+        break;
+     }
+   return 0;
+}
+
+static Ecore_X_Illume_Window_State
+_ecore_x_e_illume_window_state_get(Ecore_X_Atom atom)
+{
+   if (atom == ECORE_X_ATOM_E_ILLUME_WINDOW_STATE_NORMAL)
+     return ECORE_X_ILLUME_WINDOW_STATE_NORMAL;
+
+   if (atom == ECORE_X_ATOM_E_ILLUME_WINDOW_STATE_FLOATING)
+     return ECORE_X_ILLUME_WINDOW_STATE_FLOATING;
+
+   return ECORE_X_ILLUME_WINDOW_STATE_NORMAL;
+}
+
+EAPI void
+ecore_x_e_illume_window_state_set(Ecore_X_Window win,
+                                  Ecore_X_Illume_Window_State state)
+{
+   Ecore_X_Atom atom = 0;
+
+   LOGFN(__FILE__, __LINE__, __FUNCTION__);
+   atom = _ecore_x_e_illume_window_state_atom_get(state);
+   ecore_x_window_prop_atom_set(win, ECORE_X_ATOM_E_ILLUME_WINDOW_STATE,
+                                &atom, 1);
+}
+
+EAPI Ecore_X_Illume_Window_State
+ecore_x_e_illume_window_state_get(Ecore_X_Window win)
+{
+   Ecore_X_Atom atom;
+
+   LOGFN(__FILE__, __LINE__, __FUNCTION__);
+   if (!ecore_x_window_prop_atom_get(win,
+                                     ECORE_X_ATOM_E_ILLUME_WINDOW_STATE,
+                                     &atom, 1))
+     return ECORE_X_ILLUME_WINDOW_STATE_NORMAL;
+
+   return _ecore_x_e_illume_window_state_get(atom);
+}
+
index 5fc580e..5a23a1b 100644 (file)
@@ -1605,6 +1605,33 @@ ecore_x_netwm_desktop_request_send(Ecore_X_Window win,
               SubstructureNotifyMask | SubstructureRedirectMask, &xev);
 }
 
+EAPI void
+ecore_x_netwm_moveresize_request_send(Ecore_X_Window win,
+                                      int x,
+                                      int y,
+                                      Ecore_X_Netwm_Direction direction,
+                                      unsigned int button)
+{
+   XEvent xev;
+
+   if (!win)
+     return;
+
+   LOGFN(__FILE__, __LINE__, __FUNCTION__);
+   xev.xclient.window = win;
+   xev.xclient.type = ClientMessage;
+   xev.xclient.message_type = ECORE_X_ATOM_NET_WM_MOVERESIZE;
+   xev.xclient.format = 32;
+   xev.xclient.data.l[0] = x;
+   xev.xclient.data.l[1] = y;
+   xev.xclient.data.l[2] = direction;
+   xev.xclient.data.l[3] = button;
+   xev.xclient.data.l[4] = 1;
+
+   XSendEvent(_ecore_x_disp, win, False,
+              SubstructureNotifyMask | SubstructureRedirectMask, &xev);
+}
+
 int
 _ecore_x_netwm_startup_info_begin(Ecore_X_Window win __UNUSED__,
                                   char *data __UNUSED__)