Enlightenment CVS committal Author : dj2 Project : e17 Module : libs/ewl
Dir : e17/libs/ewl/src/engines/x11 Modified Files: ewl_engine_x11.c Log Message: - condense all of the netwm state options down into a single engine call. =================================================================== RCS file: /cvs/e/e17/libs/ewl/src/engines/x11/ewl_engine_x11.c,v retrieving revision 1.48 retrieving revision 1.49 diff -u -3 -r1.48 -r1.49 --- ewl_engine_x11.c 15 Mar 2007 22:49:03 -0000 1.48 +++ ewl_engine_x11.c 16 Mar 2007 01:54:20 -0000 1.49 @@ -67,12 +67,13 @@ static void ee_window_name_class_set(Ewl_Window *win); static void ee_window_borderless_set(Ewl_Window *win); static void ee_window_dialog_set(Ewl_Window *win); -static void ee_window_fullscreen_set(Ewl_Window *win); -static void ee_window_skip_taskbar_set(Ewl_Window *win); -static void ee_window_skip_pager_set(Ewl_Window *win); +static void ee_window_states_set(Ewl_Window *win); +static void ee_window_state_request(Ewl_Window *win, int states); +static void ee_window_state_handle(Ewl_Window *win, int states, + Ewl_Window_Flags ewl_flag, + Ecore_X_Window_State ecore_flag); +static void ee_window_states_set_helper(Ewl_Window *win); static void ee_window_transient_for(Ewl_Window *win); -static void ee_window_modal_set(Ewl_Window *win); -static void ee_window_attention_demand(Ewl_Window *win); static void ee_window_raise(Ewl_Window *win); static void ee_window_lower(Ewl_Window *win); static int ee_keyboard_grab(Ewl_Window *win); @@ -106,12 +107,8 @@ ee_window_name_class_set, ee_window_borderless_set, ee_window_dialog_set, - ee_window_fullscreen_set, - ee_window_skip_taskbar_set, - ee_window_skip_pager_set, + ee_window_states_set, ee_window_transient_for, - ee_window_modal_set, - ee_window_attention_demand, ee_window_raise, ee_window_lower, ee_keyboard_grab, @@ -568,156 +565,117 @@ } static void -ee_window_fullscreen_set(Ewl_Window *win) +ee_window_states_set(Ewl_Window *win) { - int fullscreen; + int diff; DENTER_FUNCTION(DLEVEL_STABLE); DCHECK_PARAM_PTR("win", win); DCHECK_TYPE("win", win, EWL_WINDOW_TYPE); - fullscreen = (!!(win->flags & EWL_WINDOW_FULLSCREEN)); + diff = win->flags ^ win->old_flags; + if (!diff) DRETURN(DLEVEL_STABLE); if (REALIZED(win)) - ecore_x_netwm_state_request_send((Ecore_X_Window)win->window, - 0, ECORE_X_WINDOW_STATE_FULLSCREEN, - ECORE_X_WINDOW_STATE_UNKNOWN, fullscreen); - - else if (win->window && fullscreen) - { - Ecore_X_Window_State states[] = - {ECORE_X_WINDOW_STATE_FULLSCREEN}; + ee_window_state_request(win, diff); + else + ee_window_states_set_helper(win); - ecore_x_netwm_window_state_set((Ecore_X_Window)win->window, - states, 1); - } + win->old_flags = win->flags; DLEAVE_FUNCTION(DLEVEL_STABLE); } static void -ee_window_skip_taskbar_set(Ewl_Window *win) +ee_window_state_handle(Ewl_Window *win, int states, + Ewl_Window_Flags ewl_flag, + Ecore_X_Window_State ecore_flag) { - int skip; + int state = 0; DENTER_FUNCTION(DLEVEL_STABLE); DCHECK_PARAM_PTR("win", win); DCHECK_TYPE("win", win, EWL_WINDOW_TYPE); - skip = (!!(win->flags & EWL_WINDOW_SKIP_TASKBAR)); - - if (REALIZED(win)) - ecore_x_netwm_state_request_send((Ecore_X_Window)win->window, - 0, ECORE_X_WINDOW_STATE_SKIP_TASKBAR, - ECORE_X_WINDOW_STATE_UNKNOWN, skip); - - else if (win->window && skip) + if (states & ewl_flag) { - Ecore_X_Window_State states[] = - {ECORE_X_WINDOW_STATE_SKIP_TASKBAR}; - - ecore_x_netwm_window_state_set((Ecore_X_Window)win->window, - states, 1); + state = (!!(win->flags & ewl_flag)); + ecore_x_netwm_state_request_send((Ecore_X_Window)win->window, + 0, ecore_flag, ECORE_X_WINDOW_STATE_UNKNOWN, state); } DLEAVE_FUNCTION(DLEVEL_STABLE); } static void -ee_window_skip_pager_set(Ewl_Window *win) +ee_window_state_request(Ewl_Window *win, int states) { - int skip; - DENTER_FUNCTION(DLEVEL_STABLE); DCHECK_PARAM_PTR("win", win); DCHECK_TYPE("win", win, EWL_WINDOW_TYPE); - skip = (!!(win->flags & EWL_WINDOW_SKIP_PAGER)); - - if (REALIZED(win)) - ecore_x_netwm_state_request_send((Ecore_X_Window)win->window, - 0, ECORE_X_WINDOW_STATE_SKIP_PAGER, - ECORE_X_WINDOW_STATE_UNKNOWN, skip); - - else if (win->window && skip) - { - Ecore_X_Window_State states[] = - {ECORE_X_WINDOW_STATE_SKIP_PAGER}; - - ecore_x_netwm_window_state_set((Ecore_X_Window)win->window, - states, 1); - } + ee_window_state_handle(win, states, EWL_WINDOW_FULLSCREEN, + ECORE_X_WINDOW_STATE_FULLSCREEN); + ee_window_state_handle(win, states, EWL_WINDOW_SKIP_TASKBAR, + ECORE_X_WINDOW_STATE_SKIP_TASKBAR); + ee_window_state_handle(win, states, EWL_WINDOW_SKIP_PAGER, + ECORE_X_WINDOW_STATE_SKIP_PAGER); + ee_window_state_handle(win, states, EWL_WINDOW_MODAL, + ECORE_X_WINDOW_STATE_MODAL); + ee_window_state_handle(win, states, EWL_WINDOW_DEMANDS_ATTENTION, + ECORE_X_WINDOW_STATE_DEMANDS_ATTENTION); DLEAVE_FUNCTION(DLEVEL_STABLE); } static void -ee_window_transient_for(Ewl_Window *win) +ee_window_states_set_helper(Ewl_Window *win) { + Ecore_X_Window_State states[4]; + int count = 0; + DENTER_FUNCTION(DLEVEL_STABLE); DCHECK_PARAM_PTR("win", win); - DCHECK_TYPE("win", win, EWL_WINDOW_TYPE); - - if (win->flags & EWL_WINDOW_TRANSIENT) - ecore_x_icccm_transient_for_set((Ecore_X_Window)win->window, - (Ecore_X_Window)win->transient.ewl->window); - else if (win->flags & EWL_WINDOW_TRANSIENT_FOREIGN) - ecore_x_icccm_transient_for_set((Ecore_X_Window)win->window, - (Ecore_X_Window)win->transient.foreign); - else - ecore_x_icccm_transient_for_unset((Ecore_X_Window)win->window); + DCHECK_TYPE("win", win, EWL_WINDOW_TYPE); - DLEAVE_FUNCTION(DLEVEL_STABLE); -} + /* Note: We're ignoring the attention demand state in here as it is + * only relevant if the window has been realized */ -static void -ee_window_modal_set(Ewl_Window *win) -{ - int modal; + if (!win->window) + DRETURN(DLEVEL_STABLE); - DENTER_FUNCTION(DLEVEL_STABLE); - DCHECK_PARAM_PTR("win", win); - DCHECK_TYPE("win", win, EWL_WINDOW_TYPE); + if (!!(win->flags & EWL_WINDOW_FULLSCREEN)) + states[count++] = ECORE_X_WINDOW_STATE_FULLSCREEN; - modal = (!!(win->flags & EWL_WINDOW_MODAL)); + if (!!(win->flags & EWL_WINDOW_SKIP_TASKBAR)) + states[count++] = ECORE_X_WINDOW_STATE_SKIP_TASKBAR; - if (REALIZED(win)) - ecore_x_netwm_state_request_send((Ecore_X_Window)win->window, - 0, ECORE_X_WINDOW_STATE_MODAL, - ECORE_X_WINDOW_STATE_UNKNOWN, modal); + if (!!(win->flags & EWL_WINDOW_SKIP_PAGER)) + states[count++] = ECORE_X_WINDOW_STATE_SKIP_PAGER; - else if (win->window && modal) - { - Ecore_X_Window_State states[] = - {ECORE_X_WINDOW_STATE_MODAL}; + if (!!(win->flags & EWL_WINDOW_MODAL)) + states[count++] = ECORE_X_WINDOW_STATE_MODAL; - ecore_x_netwm_window_state_set((Ecore_X_Window)win->window, - states, 1); - } + ecore_x_netwm_window_state_set((Ecore_X_Window)win->window, states, count); DLEAVE_FUNCTION(DLEVEL_STABLE); } static void -ee_window_attention_demand(Ewl_Window *win) +ee_window_transient_for(Ewl_Window *win) { DENTER_FUNCTION(DLEVEL_STABLE); DCHECK_PARAM_PTR("win", win); DCHECK_TYPE("win", win, EWL_WINDOW_TYPE); - if (REALIZED(win)) { - ecore_x_netwm_state_request_send((Ecore_X_Window)win->window, - 0, ECORE_X_WINDOW_STATE_DEMANDS_ATTENTION, - ECORE_X_WINDOW_STATE_UNKNOWN, 1); - } - else if (win->window) - { - Ecore_X_Window_State states[] = - {ECORE_X_WINDOW_STATE_DEMANDS_ATTENTION}; - - ecore_x_netwm_window_state_set((Ecore_X_Window)win->window, - states, 1); - } + if (win->flags & EWL_WINDOW_TRANSIENT) + ecore_x_icccm_transient_for_set((Ecore_X_Window)win->window, + (Ecore_X_Window)win->transient.ewl->window); + else if (win->flags & EWL_WINDOW_TRANSIENT_FOREIGN) + ecore_x_icccm_transient_for_set((Ecore_X_Window)win->window, + (Ecore_X_Window)win->transient.foreign); + else + ecore_x_icccm_transient_for_unset((Ecore_X_Window)win->window); DLEAVE_FUNCTION(DLEVEL_STABLE); } ------------------------------------------------------------------------- Take Surveys. Earn Cash. Influence the Future of IT Join SourceForge.net's Techsay panel and you'll get the chance to share your opinions on IT & business topics through brief surveys-and earn cash http://www.techsay.com/default.php?page=join.php&p=sourceforge&CID=DEVDEV _______________________________________________ enlightenment-cvs mailing list enlightenment-cvs@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/enlightenment-cvs