From d70feacf9bf6c165ecca8e5756e721320cf12a11 Mon Sep 17 00:00:00 2001 From: Jiyoun Park Date: Tue, 5 Mar 2013 14:25:50 +0900 Subject: [PATCH] Ecore_x: Add atom related with indicator type. It can support several types of indicator --- ChangeLog | 7 ++- NEWS | 1 + src/lib/ecore_x/Ecore_X.h | 13 +++++- src/lib/ecore_x/Ecore_X_Atoms.h | 3 ++ src/lib/ecore_x/ecore_x_atoms_decl.h | 6 +++ src/lib/ecore_x/xcb/ecore_xcb_e.c | 68 ++++++++++++++++++++++++++++ src/lib/ecore_x/xlib/ecore_x_e.c | 68 ++++++++++++++++++++++++++++ 7 files changed, 163 insertions(+), 3 deletions(-) diff --git a/ChangeLog b/ChangeLog index d91c74b2bb..e936fe595d 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,4 +1,9 @@ -2013-03-05 Jiyoun Park (Jypar) +2013-03-05 Jiyoun Park (Jypark) + + * Ecore_x: Add atom related with indicator type. + It can support several types of indicator + +2013-03-05 Jiyoun Park (Jypark) * Ecore_x: Fix dangling pointer problem related with shmget fail diff --git a/NEWS b/NEWS index a2100bdc5d..45b0ef49e6 100644 --- a/NEWS +++ b/NEWS @@ -68,6 +68,7 @@ Additions: * Add infrastructure to handle buggy touchscreen in Ecore_Input_Evas. * Add infrastructure to handle message between ecore and parent ecore in Ecore_Evas. * Edje textblock: Added support for size_range. + * Ecore_x: Add atom related with indicator type. Deprecations: * ecore_x: diff --git a/src/lib/ecore_x/Ecore_X.h b/src/lib/ecore_x/Ecore_X.h index 64f24277cd..16fc3382b7 100644 --- a/src/lib/ecore_x/Ecore_X.h +++ b/src/lib/ecore_x/Ecore_X.h @@ -1266,6 +1266,13 @@ typedef enum _Ecore_X_Illume_Indicator_Opacity_Mode ECORE_X_ILLUME_INDICATOR_TRANSPARENT } Ecore_X_Illume_Indicator_Opacity_Mode; +typedef enum _Ecore_X_Illume_Indicator_Type_Mode +{ + ECORE_X_ILLUME_INDICATOR_TYPE_UNKNOWN = 0, + ECORE_X_ILLUME_INDICATOR_TYPE_1, + ECORE_X_ILLUME_INDICATOR_TYPE_2 +} Ecore_X_Illume_Indicator_Type_Mode; /**< @since 1.8 */ + typedef enum _Ecore_X_Illume_Window_State { ECORE_X_ILLUME_WINDOW_STATE_NORMAL = 0, @@ -2537,11 +2544,13 @@ EAPI Ecore_X_Illume_Indicator_State ecore_x_e_illume_indicator_state_get( EAPI void ecore_x_e_illume_indicator_state_send(Ecore_X_Window win, Ecore_X_Illume_Indicator_State state); EAPI void ecore_x_e_illume_indicator_opacity_set(Ecore_X_Window win, Ecore_X_Illume_Indicator_Opacity_Mode mode); - EAPI Ecore_X_Illume_Indicator_Opacity_Mode ecore_x_e_illume_indicator_opacity_get(Ecore_X_Window win); - 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_indicator_type_set(Ecore_X_Window win, Ecore_X_Illume_Indicator_Type_Mode mode); /**< @since 1.8 */ +EAPI Ecore_X_Illume_Indicator_Type_Mode ecore_x_e_illume_indicator_type_get(Ecore_X_Window win); /**< @since 1.8 */ +EAPI void ecore_x_e_illume_indicator_type_send(Ecore_X_Window win, Ecore_X_Illume_Indicator_Type_Mode mode); /**< @since 1.8 */ + EAPI void ecore_x_e_illume_window_state_set(Ecore_X_Window win, Ecore_X_Illume_Window_State state); diff --git a/src/lib/ecore_x/Ecore_X_Atoms.h b/src/lib/ecore_x/Ecore_X_Atoms.h index 22a3ff9bd4..9f76d4175b 100644 --- a/src/lib/ecore_x/Ecore_X_Atoms.h +++ b/src/lib/ecore_x/Ecore_X_Atoms.h @@ -245,6 +245,9 @@ EAPI extern Ecore_X_Atom ECORE_X_ATOM_E_ILLUME_INDICATOR_OPACITY_MODE; EAPI extern Ecore_X_Atom ECORE_X_ATOM_E_ILLUME_INDICATOR_OPAQUE; EAPI extern Ecore_X_Atom ECORE_X_ATOM_E_ILLUME_INDICATOR_TRANSLUCENT; EAPI extern Ecore_X_Atom ECORE_X_ATOM_E_ILLUME_INDICATOR_TRANSPARENT; +EAPI extern Ecore_X_Atom ECORE_X_ATOM_E_ILLUME_INDICATOR_TYPE_MODE; +EAPI extern Ecore_X_Atom ECORE_X_ATOM_E_ILLUME_INDICATOR_TYPE_1; +EAPI extern Ecore_X_Atom ECORE_X_ATOM_E_ILLUME_INDICATOR_TYPE_2; EAPI extern Ecore_X_Atom ECORE_X_ATOM_E_ILLUME_ROTATE_WINDOW_AVAILABLE_ANGLE; EAPI extern Ecore_X_Atom ECORE_X_ATOM_E_ILLUME_ROTATE_WINDOW_ANGLE; EAPI extern Ecore_X_Atom ECORE_X_ATOM_E_ILLUME_ROTATE_ROOT_ANGLE; diff --git a/src/lib/ecore_x/ecore_x_atoms_decl.h b/src/lib/ecore_x/ecore_x_atoms_decl.h index 46311e0eb4..1d1b2f3bc9 100644 --- a/src/lib/ecore_x/ecore_x_atoms_decl.h +++ b/src/lib/ecore_x/ecore_x_atoms_decl.h @@ -271,6 +271,9 @@ EAPI Ecore_X_Atom ECORE_X_ATOM_E_ILLUME_INDICATOR_OPACITY_MODE = 0; EAPI Ecore_X_Atom ECORE_X_ATOM_E_ILLUME_INDICATOR_OPAQUE= 0; EAPI Ecore_X_Atom ECORE_X_ATOM_E_ILLUME_INDICATOR_TRANSLUCENT = 0; EAPI Ecore_X_Atom ECORE_X_ATOM_E_ILLUME_INDICATOR_TRANSPARENT = 0; +EAPI Ecore_X_Atom ECORE_X_ATOM_E_ILLUME_INDICATOR_TYPE_MODE = 0; +EAPI Ecore_X_Atom ECORE_X_ATOM_E_ILLUME_INDICATOR_TYPE_1 = 0; +EAPI Ecore_X_Atom ECORE_X_ATOM_E_ILLUME_INDICATOR_TYPE_2 = 0; EAPI Ecore_X_Atom ECORE_X_ATOM_E_ILLUME_ROTATE_WINDOW_AVAILABLE_ANGLE = 0; EAPI Ecore_X_Atom ECORE_X_ATOM_E_ILLUME_ROTATE_WINDOW_ANGLE = 0; EAPI Ecore_X_Atom ECORE_X_ATOM_E_ILLUME_ROTATE_ROOT_ANGLE = 0; @@ -576,6 +579,9 @@ const Atom_Item atom_items[] = { "_E_ILLUME_INDICATOR_OPAQUE", &ECORE_X_ATOM_E_ILLUME_INDICATOR_OPAQUE }, { "_E_ILLUME_INDICATOR_TRANSLUCENT", &ECORE_X_ATOM_E_ILLUME_INDICATOR_TRANSLUCENT }, { "_E_ILLUME_INDICATOR_TRANSPARENT", &ECORE_X_ATOM_E_ILLUME_INDICATOR_TRANSPARENT }, + { "_E_ILLUME_INDICATOR_TYPE", &ECORE_X_ATOM_E_ILLUME_INDICATOR_TYPE_MODE }, + { "_E_ILLUME_INDICATOR_TYPE_0", &ECORE_X_ATOM_E_ILLUME_INDICATOR_TYPE_1 }, + { "_E_ILLUME_INDICATOR_TYPE_1", &ECORE_X_ATOM_E_ILLUME_INDICATOR_TYPE_2 }, { "_E_ILLUME_ROTATE_WINDOW_AVAILABLE_ANGLES", &ECORE_X_ATOM_E_ILLUME_ROTATE_WINDOW_AVAILABLE_ANGLE }, { "_E_ILLUME_ROTATE_WINDOW_ANGLE", &ECORE_X_ATOM_E_ILLUME_ROTATE_WINDOW_ANGLE }, { "_E_ILLUME_ROTATE_ROOT_ANGLE", &ECORE_X_ATOM_E_ILLUME_ROTATE_ROOT_ANGLE }, diff --git a/src/lib/ecore_x/xcb/ecore_xcb_e.c b/src/lib/ecore_x/xcb/ecore_xcb_e.c index f08b2af6f1..784ca978f9 100644 --- a/src/lib/ecore_x/xcb/ecore_xcb_e.c +++ b/src/lib/ecore_x/xcb/ecore_xcb_e.c @@ -1788,6 +1788,74 @@ ecore_x_e_illume_indicator_opacity_send(Ecore_X_Window win, 0, 0, 0, 0); } +static Ecore_X_Atom +_ecore_x_e_indicator_type_atom_get(Ecore_X_Illume_Indicator_Type_Mode mode) +{ + switch (mode) + { + case ECORE_X_ILLUME_INDICATOR_TYPE_1: + return ECORE_X_ATOM_E_ILLUME_INDICATOR_TYPE_1; + + case ECORE_X_ILLUME_INDICATOR_TYPE_2: + return ECORE_X_ATOM_E_ILLUME_INDICATOR_TYPE_2; + + default: + break; + } + return 0; +} + +static Ecore_X_Illume_Indicator_Type_Mode +_ecore_x_e_indicator_type_get(Ecore_X_Atom atom) +{ + if (atom == ECORE_X_ATOM_E_ILLUME_INDICATOR_TYPE_1) + return ECORE_X_ILLUME_INDICATOR_TYPE_1; + + if (atom == ECORE_X_ATOM_E_ILLUME_INDICATOR_TYPE_2) + return ECORE_X_ILLUME_INDICATOR_TYPE_2; + + return ECORE_X_ILLUME_INDICATOR_TYPE_UNKNOWN; +} + +EAPI void +ecore_x_e_illume_indicator_type_set(Ecore_X_Window win, + Ecore_X_Illume_Indicator_Type_Mode mode) +{ + Ecore_X_Atom atom = 0; + + LOGFN(__FILE__, __LINE__, __FUNCTION__); + atom = _ecore_x_e_indicator_type_atom_get(mode); + ecore_x_window_prop_atom_set(win, + ECORE_X_ATOM_E_ILLUME_INDICATOR_TYPE_MODE, + &atom, 1); +} + +EAPI Ecore_X_Illume_Indicator_Type_Mode +ecore_x_e_illume_indicator_type_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_INDICATOR_TYPE_MODE, + &atom, 1)) + return ECORE_X_ILLUME_INDICATOR_TYPE_UNKNOWN; + + return _ecore_x_e_indicator_type_get(atom); +} + +EAPI void +ecore_x_e_illume_indicator_type_send(Ecore_X_Window win, + Ecore_X_Illume_Indicator_Type_Mode mode) +{ + LOGFN(__FILE__, __LINE__, __FUNCTION__); + ecore_x_client_message32_send(win, + ECORE_X_ATOM_E_ILLUME_INDICATOR_TYPE_MODE, + ECORE_X_EVENT_MASK_WINDOW_CONFIGURE, + _ecore_x_e_indicator_type_atom_get(mode), + 0, 0, 0, 0); +} + static Ecore_X_Atom _ecore_x_e_illume_window_state_atom_get(Ecore_X_Illume_Window_State state) { diff --git a/src/lib/ecore_x/xlib/ecore_x_e.c b/src/lib/ecore_x/xlib/ecore_x_e.c index 849f42759a..7c8098bed2 100644 --- a/src/lib/ecore_x/xlib/ecore_x_e.c +++ b/src/lib/ecore_x/xlib/ecore_x_e.c @@ -1839,6 +1839,74 @@ ecore_x_e_illume_indicator_opacity_send(Ecore_X_Window win, 0, 0, 0, 0); } +static Ecore_X_Atom +_ecore_x_e_indicator_type_atom_get(Ecore_X_Illume_Indicator_Type_Mode mode) +{ + switch (mode) + { + case ECORE_X_ILLUME_INDICATOR_TYPE_1: + return ECORE_X_ATOM_E_ILLUME_INDICATOR_TYPE_1; + + case ECORE_X_ILLUME_INDICATOR_TYPE_2: + return ECORE_X_ATOM_E_ILLUME_INDICATOR_TYPE_2; + + default: + break; + } + return 0; +} + +static Ecore_X_Illume_Indicator_Type_Mode +_ecore_x_e_indicator_type_get(Ecore_X_Atom atom) +{ + if (atom == ECORE_X_ATOM_E_ILLUME_INDICATOR_TYPE_1) + return ECORE_X_ILLUME_INDICATOR_TYPE_1; + + if (atom == ECORE_X_ATOM_E_ILLUME_INDICATOR_TYPE_2) + return ECORE_X_ILLUME_INDICATOR_TYPE_2; + + return ECORE_X_ILLUME_INDICATOR_TYPE_UNKNOWN; +} + +EAPI void +ecore_x_e_illume_indicator_type_set(Ecore_X_Window win, + Ecore_X_Illume_Indicator_Type_Mode mode) +{ + Ecore_X_Atom atom = 0; + + LOGFN(__FILE__, __LINE__, __FUNCTION__); + atom = _ecore_x_e_indicator_type_atom_get(mode); + ecore_x_window_prop_atom_set(win, + ECORE_X_ATOM_E_ILLUME_INDICATOR_TYPE_MODE, + &atom, 1); +} + +EAPI Ecore_X_Illume_Indicator_Type_Mode +ecore_x_e_illume_indicator_type_get(Ecore_X_Window win) +{ + Ecore_X_Atom atom = 0; + + LOGFN(__FILE__, __LINE__, __FUNCTION__); + if (!ecore_x_window_prop_atom_get(win, + ECORE_X_ATOM_E_ILLUME_INDICATOR_TYPE_MODE, + &atom, 1)) + return ECORE_X_ILLUME_INDICATOR_TYPE_UNKNOWN; + + return _ecore_x_e_indicator_type_get(atom); +} + +EAPI void +ecore_x_e_illume_indicator_type_send(Ecore_X_Window win, + Ecore_X_Illume_Indicator_Type_Mode mode) +{ + LOGFN(__FILE__, __LINE__, __FUNCTION__); + ecore_x_client_message32_send(win, + ECORE_X_ATOM_E_ILLUME_INDICATOR_TYPE_MODE, + ECORE_X_EVENT_MASK_WINDOW_CONFIGURE, + _ecore_x_e_indicator_type_atom_get(mode), + 0, 0, 0, 0); +} + static Ecore_X_Atom _ecore_x_e_illume_window_state_atom_get(Ecore_X_Illume_Window_State state) {