From cebc3fe7e3ba6642f289c9a8ee1350abb1f66282 Mon Sep 17 00:00:00 2001 From: Hannes Janetzek Date: Sun, 28 Aug 2011 16:18:26 +0000 Subject: [PATCH] e17/illume/tablet: cleanup policy, refactor, remove poinless comments SVN revision: 62922 --- src/modules/illume2/policies/tablet/policy.c | 1530 ++++++++---------- 1 file changed, 704 insertions(+), 826 deletions(-) diff --git a/src/modules/illume2/policies/tablet/policy.c b/src/modules/illume2/policies/tablet/policy.c index edf11e95c..15c5c6482 100644 --- a/src/modules/illume2/policies/tablet/policy.c +++ b/src/modules/illume2/policies/tablet/policy.c @@ -2,13 +2,6 @@ #include "policy.h" #include "e.h" -/* NB: DIALOG_USES_PIXEL_BORDER is an experiment in setting dialog windows - * to use the 'pixel' type border. This is done because some dialogs, - * when shown, blend into other windows too much. Pixel border adds a - * little distinction between the dialog window and an app window. - * Disable if this is not wanted */ -#define DIALOG_USES_PIXEL_BORDER 1 - /* local function prototypes */ static void _policy_border_set_focus(E_Border *bd); static void _policy_border_move(E_Border *bd, int x, int y); @@ -29,77 +22,78 @@ static void _policy_zone_layout_app_dual_left(E_Border *bd, E_Illume_Config_Zone static void _policy_zone_layout_dialog(E_Border *bd, E_Illume_Config_Zone *cz); static void _policy_zone_layout_splash(E_Border *bd, E_Illume_Config_Zone *cz); static void _policy_zone_layout_conformant_single(E_Border *bd, E_Illume_Config_Zone *cz); +#if 0 static void _policy_zone_layout_conformant_dual_top(E_Border *bd, E_Illume_Config_Zone *cz); static void _policy_zone_layout_conformant_dual_custom(E_Border *bd, E_Illume_Config_Zone *cz); static void _policy_zone_layout_conformant_dual_left(E_Border *bd, E_Illume_Config_Zone *cz); +#endif static Eina_List *_pol_focus_stack; /* local functions */ -static void -_policy_border_set_focus(E_Border *bd) +static void +_policy_border_set_focus(E_Border *bd) { if (!bd) return; /* printf("_policy_border_set_focus %s\n", e_border_name_get(bd)); */ - + /* if focus is locked out then get out */ if (bd->lock_focus_out) return; - if ((bd->client.icccm.accepts_focus) || (bd->client.icccm.take_focus)) + if ((bd->client.icccm.accepts_focus) || (bd->client.icccm.take_focus)) { - /* check E's focus settings */ - if ((e_config->focus_setting == E_FOCUS_NEW_WINDOW) || - ((bd->parent) && - ((e_config->focus_setting == E_FOCUS_NEW_DIALOG) || - ((bd->parent->focused) && - (e_config->focus_setting == E_FOCUS_NEW_DIALOG_IF_OWNER_FOCUSED))))) - { - /* if the border was hidden due to layout, we need to unhide */ + /* check E's focus settings */ + if ((e_config->focus_setting == E_FOCUS_NEW_WINDOW) || + ((bd->parent) && + ((e_config->focus_setting == E_FOCUS_NEW_DIALOG) || + ((bd->parent->focused) && + (e_config->focus_setting == E_FOCUS_NEW_DIALOG_IF_OWNER_FOCUSED))))) + { + /* if the border was hidden due to layout, we need to unhide */ if (!bd->visible) e_illume_border_show(bd); - if ((bd->iconic) && (!bd->lock_user_iconify)) - e_border_uniconify(bd); - - if (!bd->lock_user_stacking) e_border_raise(bd); - printf("illume set focus %s\n", e_border_name_get(bd)); + if ((bd->iconic) && (!bd->lock_user_iconify)) + e_border_uniconify(bd); - /* focus the border */ + if (!bd->lock_user_stacking) e_border_raise(bd); + + /* focus the border */ e_border_focus_set(bd, 1, 1); - /* hide the border below this one */ - _policy_border_hide_below(bd); + /* hide the border below this one */ + _policy_border_hide_below(bd); - /* NB: since we skip needless border evals when container layout - * is called (to save cpu cycles), we need to - * signal this border that it's focused so that the edj gets - * updated. - * - * This is potentially useless as THIS policy - * makes all windows borderless anyway, but it's in here for - * completeness - e_border_focus_latest_set(bd); - if (bd->bg_object) - edje_object_signal_emit(bd->bg_object, "e,state,focused", "e"); - if (bd->icon_object) - edje_object_signal_emit(bd->icon_object, "e,state,focused", "e"); - e_focus_event_focus_in(bd); - */ - } + /* NB: since we skip needless border evals when container layout + * is called (to save cpu cycles), we need to + * signal this border that it's focused so that the edj gets + * updated. + * + * This is potentially useless as THIS policy + * makes all windows borderless anyway, but it's in here for + * completeness + e_border_focus_latest_set(bd); + if (bd->bg_object) + edje_object_signal_emit(bd->bg_object, "e,state,focused", "e"); + if (bd->icon_object) + edje_object_signal_emit(bd->icon_object, "e,state,focused", "e"); + e_focus_event_focus_in(bd); + */ + } } } -static void -_policy_border_move(E_Border *bd, int x, int y) +static void +_policy_border_move(E_Border *bd, int x, int y) { if (!bd) return; - /* NB: Qt uses a weird window type called 'VCLSalFrame' that needs to + /* NB: Qt uses a weird window type called 'VCLSalFrame' that needs to * have bd->placed set else it doesn't position correctly... - * this could be a result of E honoring the icccm request position, + * this could be a result of E honoring the icccm request position, * not sure */ /* NB: Seems something similar happens with elementary windows also - * so for now just set bd->placed on all windows until this + * so for now just set bd->placed on all windows until this * gets investigated */ bd->placed = 1; bd->x = x; @@ -108,8 +102,8 @@ _policy_border_move(E_Border *bd, int x, int y) bd->changed = 1; } -static void -_policy_border_resize(E_Border *bd, int w, int h) +static void +_policy_border_resize(E_Border *bd, int w, int h) { if (!bd) return; @@ -121,13 +115,13 @@ _policy_border_resize(E_Border *bd, int w, int h) bd->changed = 1; } -static void -_policy_border_hide_below(E_Border *bd) +static void +_policy_border_hide_below(E_Border *bd) { int pos = 0, i; -// printf("Hide Borders Below: %s %d %d\n", -// bd->client.icccm.name, bd->x, bd->y); + // printf("Hide Borders Below: %s %d %d\n", + // bd->client.icccm.name, bd->x, bd->y); if (!bd) return; /* printf("_policy_border_hide_below %s\n", e_border_name_get(bd)); */ @@ -140,62 +134,62 @@ _policy_border_hide_below(E_Border *bd) else pos = 5; /* Find the windows below this one */ - for (i = pos; i >= 2; i--) + for (i = pos; i >= 2; i--) { - Eina_List *l; - E_Border *b; + Eina_List *l; + E_Border *b; - EINA_LIST_FOREACH(bd->zone->container->layers[i].clients, l, b) - { - /* skip if it's the same border */ - if (b == bd) continue; + EINA_LIST_FOREACH(bd->zone->container->layers[i].clients, l, b) + { + /* skip if it's the same border */ + if (b == bd) continue; - /* skip if it's not on this zone */ - if (b->zone != bd->zone) continue; + /* skip if it's not on this zone */ + if (b->zone != bd->zone) continue; - /* skip special borders */ - if (e_illume_border_is_indicator(b)) continue; - if (e_illume_border_is_softkey(b)) continue; - if (e_illume_border_is_keyboard(b)) continue; - if (e_illume_border_is_quickpanel(b)) continue; - if (e_illume_border_is_home(b)) continue; + /* skip special borders */ + if (e_illume_border_is_indicator(b)) continue; + if (e_illume_border_is_softkey(b)) continue; + if (e_illume_border_is_keyboard(b)) continue; + if (e_illume_border_is_quickpanel(b)) continue; + if (e_illume_border_is_home(b)) continue; - if ((bd->fullscreen) || (bd->need_fullscreen)) - { + if ((bd->fullscreen) || (bd->need_fullscreen)) + { if (b->visible) e_illume_border_hide(b); - } - else - { - /* we need to check x/y position */ - if (E_CONTAINS(bd->x, bd->y, bd->w, bd->h, - b->x, b->y, b->w, b->h)) - { + } + else + { + /* we need to check x/y position */ + if (E_CONTAINS(bd->x, bd->y, bd->w, bd->h, + b->x, b->y, b->w, b->h)) + { if (b->visible) e_illume_border_hide(b); - } - } - } + } + } + } } } -static void -_policy_border_show_below(E_Border *bd) +static void +_policy_border_show_below(E_Border *bd) { Eina_List *l; E_Border *prev; int pos = 0, i; -// printf("Show Borders Below: %s %d %d\n", -// bd->client.icccm.class, bd->x, bd->y); + // printf("Show Borders Below: %s %d %d\n", + // bd->client.icccm.class, bd->x, bd->y); if (!bd) return; /* printf("_policy_border_show_below %s\n", e_border_name_get(bd)); */ - if (bd->client.icccm.transient_for) + if (bd->client.icccm.transient_for) { - if ((prev = e_border_find_by_client_window(bd->client.icccm.transient_for))) - { - _policy_border_set_focus(prev); - return; - } + if ((prev = e_border_find_by_client_window(bd->client.icccm.transient_for))) + { + _policy_border_set_focus(prev); + return; + } } /* determine layering position */ @@ -207,81 +201,81 @@ _policy_border_show_below(E_Border *bd) else pos = 5; /* Find the windows below this one */ - for (i = pos; i >= 2; i--) + for (i = pos; i >= 2; i--) { - E_Border *b; + E_Border *b; - EINA_LIST_REVERSE_FOREACH(bd->zone->container->layers[i].clients, l, b) - { - /* skip if it's the same border */ - if (b == bd) continue; + EINA_LIST_REVERSE_FOREACH(bd->zone->container->layers[i].clients, l, b) + { + /* skip if it's the same border */ + if (b == bd) continue; - /* skip if it's not on this zone */ - if (b->zone != bd->zone) continue; + /* skip if it's not on this zone */ + if (b->zone != bd->zone) continue; - /* skip special borders */ - if (e_illume_border_is_indicator(b)) continue; - if (e_illume_border_is_softkey(b)) continue; - if (e_illume_border_is_keyboard(b)) continue; - if (e_illume_border_is_quickpanel(b)) continue; - if (e_illume_border_is_home(b)) continue; + /* skip special borders */ + if (e_illume_border_is_indicator(b)) continue; + if (e_illume_border_is_softkey(b)) continue; + if (e_illume_border_is_keyboard(b)) continue; + if (e_illume_border_is_quickpanel(b)) continue; + if (e_illume_border_is_home(b)) continue; - if ((bd->fullscreen) || (bd->need_fullscreen)) - { - _policy_border_set_focus(b); - return; - } - else - { - /* need to check x/y position */ - if (E_CONTAINS(bd->x, bd->y, bd->w, bd->h, - b->x, b->y, b->w, b->h)) - { - _policy_border_set_focus(b); - return; - } - } - } + if ((bd->fullscreen) || (bd->need_fullscreen)) + { + _policy_border_set_focus(b); + return; + } + else + { + /* need to check x/y position */ + if (E_CONTAINS(bd->x, bd->y, bd->w, bd->h, + b->x, b->y, b->w, b->h)) + { + _policy_border_set_focus(b); + return; + } + } + } } /* if we reach here, then there is a problem with showing a window below * this one, so show previous window in stack */ - EINA_LIST_REVERSE_FOREACH(_pol_focus_stack, l, prev) + EINA_LIST_REVERSE_FOREACH(_pol_focus_stack, l, prev) { - if (prev->zone != bd->zone) continue; - _policy_border_set_focus(prev); - return; + if (prev->zone != bd->zone) continue; + _policy_border_set_focus(prev); + return; } /* Fallback to focusing home if all above fails */ _policy_focus_home(bd->zone); } -static void -_policy_zone_layout_update(E_Zone *zone) +static void +_policy_zone_layout_update(E_Zone *zone) { Eina_List *l; E_Border *bd; if (!zone) return; - EINA_LIST_FOREACH(e_border_client_list(), l, bd) + EINA_LIST_FOREACH(e_border_client_list(), l, bd) { - /* skip borders not on this zone */ - if (bd->zone != zone) continue; + /* skip borders not on this zone */ + if (bd->zone != zone) continue; - /* skip special windows */ - if (e_illume_border_is_keyboard(bd)) continue; - if (e_illume_border_is_quickpanel(bd)) continue; + /* skip special windows */ + if (e_illume_border_is_keyboard(bd)) continue; + if (e_illume_border_is_quickpanel(bd)) continue; - /* signal a changed pos here so layout gets updated */ - bd->changes.pos = 1; - bd->changed = 1; + /* signal a changed pos here so layout gets updated */ + bd->changes.pos = 1; + bd->changed = 1; } } -static void -_policy_zone_layout_indicator(E_Border *bd, E_Illume_Config_Zone *cz) +static void +_policy_zone_layout_indicator(E_Border *bd, E_Illume_Config_Zone *cz) { if ((!bd) || (!cz)) return; @@ -290,73 +284,92 @@ _policy_zone_layout_indicator(E_Border *bd, E_Illume_Config_Zone *cz) /* no point in doing anything here if indicator is hidden */ if ((!bd->new_client) && (!bd->visible)) - { - ecore_x_e_illume_indicator_geometry_set(bd->zone->black_win, - 0, 0, 0, 0); - return; - } - - /* if we are dragging, then skip it for now */ - if (bd->client.illume.drag.drag) { - /* when dragging indicator, we need to trigger a layout update */ - ecore_x_e_illume_indicator_geometry_set(bd->zone->black_win, - 0, 0, 0, 0); - _policy_zone_layout_update(bd->zone); - return; + ecore_x_e_illume_indicator_geometry_set(bd->zone->black_win, + 0, 0, 0, 0); + return; } -// printf("\tLayout Indicator: %d\n", bd->zone->id); + /* if we are dragging, then skip it for now */ + if (bd->client.illume.drag.drag) + { + /* when dragging indicator, we need to trigger a layout update */ + ecore_x_e_illume_indicator_geometry_set(bd->zone->black_win, + 0, 0, 0, 0); + _policy_zone_layout_update(bd->zone); + return; + } + + // printf("\tLayout Indicator: %d\n", bd->zone->id); /* lock indicator window from dragging if we need to */ - if ((cz->mode.dual == 1) && (cz->mode.side == 0)) + if ((cz->mode.dual == 1) && (cz->mode.side == 0)) ecore_x_e_illume_drag_locked_set(bd->client.win, 0); - else + else ecore_x_e_illume_drag_locked_set(bd->client.win, 1); if ((bd->w != bd->zone->w) || (bd->h != cz->indicator.size)) _policy_border_resize(bd, bd->zone->w, cz->indicator.size); - if (!cz->mode.dual) + if (!cz->mode.dual) { - /* move to 0, 0 (relative to zone) if needed */ - if ((bd->x != bd->zone->x) || (bd->y != bd->zone->y)) - { - _policy_border_move(bd, bd->zone->x, bd->zone->y); - ecore_x_e_illume_quickpanel_position_update_send(bd->client.win); - } + /* move to 0, 0 (relative to zone) if needed */ + if ((bd->x != bd->zone->x) || (bd->y != bd->zone->y)) + { + _policy_border_move(bd, bd->zone->x, bd->zone->y); + ecore_x_e_illume_quickpanel_position_update_send(bd->client.win); + } } - else + else { - if (cz->mode.side == 0) - { - /* top mode...indicator is draggable so just set X. - * in this case, the indicator itself should be responsible for - * sending the quickpanel position update message when it is - * finished dragging */ - if (bd->x != bd->zone->x) - _policy_border_move(bd, bd->zone->x, bd->y); - } - else - { - /* move to 0, 0 (relative to zone) if needed */ - if ((bd->x != bd->zone->x) || (bd->y != bd->zone->y)) - { - _policy_border_move(bd, bd->zone->x, bd->zone->y); - ecore_x_e_illume_quickpanel_position_update_send(bd->client.win); - } - } + if (cz->mode.side == 0) + { + /* top mode...indicator is draggable so just set X. + * in this case, the indicator itself should be responsible for + * sending the quickpanel position update message when it is + * finished dragging */ + if (bd->x != bd->zone->x) + _policy_border_move(bd, bd->zone->x, bd->y); + } + else + { + /* move to 0, 0 (relative to zone) if needed */ + if ((bd->x != bd->zone->x) || (bd->y != bd->zone->y)) + { + _policy_border_move(bd, bd->zone->x, bd->zone->y); + ecore_x_e_illume_quickpanel_position_update_send(bd->client.win); + } + } } ecore_x_e_illume_indicator_geometry_set(bd->zone->black_win, - bd->x, bd->y, - bd->w, bd->h); + bd->x, bd->y, + bd->w, bd->h); - if (bd->layer != POL_INDICATOR_LAYER) + if (bd->layer != POL_INDICATOR_LAYER) e_border_layer_set(bd, POL_INDICATOR_LAYER); } -static void -_policy_zone_layout_quickpanel(E_Border *bd) +#define ZONE_GEOMETRY \ + int x, y, w, h; \ + e_zone_useful_geometry_get(bd->zone, &x, &y, &w, &h); \ + x += bd->zone->x; \ + y += bd->zone->y; \ + +static void +_border_geometry_set(E_Border *bd, int x, int y, int w, int h, int layer) +{ + if ((bd->w != w) || (bd->h != h)) + _policy_border_resize(bd, w, h); + + if ((bd->x != x) || (bd->y != y)) + _policy_border_move(bd, x, y); + + if (bd->layer != layer) e_border_layer_set(bd, layer); + +} + +static void +_policy_zone_layout_quickpanel(E_Border *bd) { int mh; @@ -367,136 +380,112 @@ _policy_zone_layout_quickpanel(E_Border *bd) if ((bd->w != bd->zone->w) || (bd->h != mh)) _policy_border_resize(bd, bd->zone->w, mh); - if (bd->layer != POL_QUICKPANEL_LAYER) + if (bd->layer != POL_QUICKPANEL_LAYER) e_border_layer_set(bd, POL_QUICKPANEL_LAYER); } - -#define ZONE_GEOMETRY \ - int x, y, w, h; \ - e_zone_useful_geometry_get(bd->zone, &x, &y, &w, &h); \ - x += bd->zone->x; \ - y += bd->zone->y; \ - -static void -_policy_zone_layout_softkey(E_Border *bd, E_Illume_Config_Zone *cz) +static void +_policy_zone_layout_softkey(E_Border *bd, E_Illume_Config_Zone *cz) { int ny; - + if ((!bd) || (!cz)) return; if (!bd->visible) { - ecore_x_e_illume_softkey_geometry_set(bd->zone->black_win, 0, 0, 0, 0); - return; + ecore_x_e_illume_softkey_geometry_set(bd->zone->black_win, 0, 0, 0, 0); + return; } ZONE_GEOMETRY; - + e_illume_border_min_get(bd, NULL, &cz->softkey.size); /* if we are dragging, then skip it for now */ /* NB: Disabled currently until we confirm that softkey should be draggable */ - // if (bd->client.illume.drag.drag) return; + // if (bd->client.illume.drag.drag) return; if ((bd->w != w) || (bd->h != cz->softkey.size)) _policy_border_resize(bd, w, cz->softkey.size); ny = ((bd->zone->y + bd->zone->h) - cz->softkey.size); - /* NB: not sure why yet, but on startup the border->y is reporting - * that it is already in this position...but it's actually not. + /* NB: not sure why yet, but on startup the border->y is reporting + * that it is already in this position...but it's actually not. * So for now, just disable the ny check until this gets sorted out */ if ((bd->x != x) || (bd->y != ny)) _policy_border_move(bd, x, ny); + /* _border_geometry_set(bd, x, ny, nw, nh, bd, POL_CONFORMANT_LAYER); */ + ecore_x_e_illume_softkey_geometry_set(bd->zone->black_win, - bd->x, bd->y, - bd->w, bd->h); + bd->x, bd->y, + bd->w, bd->h); if (bd->layer != POL_SOFTKEY_LAYER) e_border_layer_set(bd, POL_SOFTKEY_LAYER); } -static void -_policy_zone_layout_keyboard(E_Border *bd, E_Illume_Config_Zone *cz) +static void +_policy_zone_layout_keyboard(E_Border *bd, E_Illume_Config_Zone *cz) { int ny, layer; - if ((!bd) || (!cz)) return; - if (!bd->visible) return; + if ((!bd) || (!cz) || (!bd->visible)) return; ZONE_GEOMETRY; e_illume_border_min_get(bd, NULL, &cz->vkbd.size); - if ((bd->w != w) || (bd->h != cz->vkbd.size)) - _policy_border_resize(bd, w, cz->vkbd.size); + ny = ((bd->zone->y + h) - cz->vkbd.size); - ny = ((bd->zone->y + bd->zone->h) - cz->vkbd.size); - if ((bd->x != x) || (bd->y != ny)) - _policy_border_move(bd, x, ny); - - if ((bd->fullscreen) || (bd->need_fullscreen)) + if ((bd->fullscreen) || (bd->need_fullscreen)) layer = POL_FULLSCREEN_LAYER; else layer = POL_KEYBOARD_LAYER; - /* if ((int)bd->layer != layer) e_border_layer_set(bd, layer); */ + _border_geometry_set(bd, x, ny, w, cz->vkbd.size, layer); + } -static void -_policy_zone_layout_home_single(E_Border *bd, E_Illume_Config_Zone *cz) +static void +_policy_zone_layout_home_single(E_Border *bd, E_Illume_Config_Zone *cz) { - int ny, nh, indsz = 0, sftsz = 0; - E_Border *ind, *sft; + /* int ny, nh; */ + /* int indsz = 0, sftsz = 0; */ + /* E_Border *ind, *sft; */ - if ((!bd) || (!cz)) return; - - if (!bd->visible) return; + if ((!bd) || (!cz) || (!bd->visible)) return; ZONE_GEOMETRY; - if ((bd->w != w) || (bd->h != h)) - _policy_border_resize(bd, w, h); - - if ((bd->x != x) || (bd->y != y)) - _policy_border_move(bd, x, y); - - if (bd->layer != POL_HOME_LAYER) e_border_layer_set(bd, POL_HOME_LAYER); + _border_geometry_set(bd, x, y, w, h, POL_HOME_LAYER); } -static void -_policy_zone_layout_fullscreen(E_Border *bd) +static void +_policy_zone_layout_fullscreen(E_Border *bd) { int kh; if (!bd) return; ZONE_GEOMETRY; - + e_illume_keyboard_safe_app_region_get(bd->zone, NULL, NULL, NULL, &kh); if (kh < h) h = kh; - if ((bd->w != w) || (bd->h != h)) - _policy_border_resize(bd, w, kh); - - if ((bd->x != x) || (bd->y != y)) - _policy_border_move(bd, x, y); - - /* if (bd->layer != POL_FULLSCREEN_LAYER) - * e_border_layer_set(bd, POL_FULLSCREEN_LAYER); */ + _border_geometry_set(bd, x, y, w, kh, POL_FULLSCREEN_LAYER); } -static void -_policy_zone_layout_app_single(E_Border *bd, E_Illume_Config_Zone *cz) +static void +_policy_zone_layout_app_single(E_Border *bd, E_Illume_Config_Zone *cz) { int ky, kh, ny, nh; - + if ((!bd) || (!cz)) return; if ((!bd->new_client) && (!bd->visible)) return; ZONE_GEOMETRY; - + e_illume_keyboard_safe_app_region_get(bd->zone, NULL, &ky, NULL, &kh); if (kh >= bd->zone->h) @@ -504,75 +493,65 @@ _policy_zone_layout_app_single(E_Border *bd, E_Illume_Config_Zone *cz) else nh = (kh - cz->indicator.size); - if ((bd->w != w) || (bd->h != nh)) - _policy_border_resize(bd, w, nh); - ny = (bd->zone->y + cz->indicator.size); if (ny > y) y = ny; - - if ((bd->x != x) || (bd->y != y)) - _policy_border_move(bd, x, y); - /* if (bd->layer != POL_APP_LAYER) e_border_layer_set(bd, POL_APP_LAYER); */ + _border_geometry_set(bd, x, ny, w, nh, POL_APP_LAYER); } -static void -_policy_zone_layout_app_dual_top(E_Border *bd, E_Illume_Config_Zone *cz) +static void +_policy_zone_layout_app_dual_top(E_Border *bd, E_Illume_Config_Zone *cz) { - E_Border *b; + E_Border *bd2; int kh, ny, nh; if ((!bd) || (!cz)) return; if ((!bd->new_client) && (!bd->visible)) return; + ZONE_GEOMETRY; + ny = (bd->zone->y + cz->indicator.size); - if ((bd->focused) && - (bd->client.vkbd.state > ECORE_X_VIRTUAL_KEYBOARD_STATE_OFF)) + if ((bd->focused) && + (bd->client.vkbd.state > ECORE_X_VIRTUAL_KEYBOARD_STATE_OFF)) { - e_illume_keyboard_safe_app_region_get(bd->zone, NULL, NULL, NULL, &kh); - nh = (kh - cz->indicator.size); + e_illume_keyboard_safe_app_region_get(bd->zone, NULL, NULL, NULL, &kh); + nh = (kh - cz->indicator.size); } - else + else { - nh = ((bd->zone->h - cz->indicator.size - cz->softkey.size) / 2); + nh = ((bd->zone->h - cz->indicator.size - cz->softkey.size) / 2); } - /* see if there is a border already there. if so, check placement based on + /* see if there is a border already there. if so, check placement based on * virtual keyboard usage */ - b = e_illume_border_at_xy_get(bd->zone, bd->zone->x, ny); - if ((b) && (b != bd)) + bd2 = e_illume_border_at_xy_get(bd->zone, x, ny); + if ((bd2) && (bd2 != bd)) { - /* does this border need keyboard ? */ - if ((bd->focused) && - (bd->client.vkbd.state > ECORE_X_VIRTUAL_KEYBOARD_STATE_OFF)) - { - int h; + /* does this border need keyboard ? */ + if ((bd->focused) && + (bd->client.vkbd.state > ECORE_X_VIRTUAL_KEYBOARD_STATE_OFF)) + { + int hh; - /* move existing border to bottom if needed */ - h = ((bd->zone->h - cz->indicator.size - cz->softkey.size) / 2); - if ((b->x != b->zone->x) || (b->y != (ny + h))) - _policy_border_move(b, b->zone->x, (ny + h)); + /* move existing border to bottom if needed */ + hh = ((h - cz->indicator.size - cz->softkey.size) / 2); + if ((bd2->x != x) || (bd2->y != (ny + hh))) + _policy_border_move(bd2, x, (ny + hh)); - /* resize existing border if needed */ - if ((b->w != b->zone->w) || (b->h != h)) - _policy_border_resize(b, b->zone->w, h); - } - else - ny = b->y + nh; + /* resize existing border if needed */ + if ((bd2->w != w) || (bd2->h != hh)) + _policy_border_resize(bd2, bd2->zone->w, hh); + } + else + ny = bd2->y + nh; } - if ((bd->w != bd->zone->w) || (bd->h != nh)) - _policy_border_resize(bd, bd->zone->w, nh); - - if ((bd->x != bd->zone->x) || (bd->y != ny)) - _policy_border_move(bd, bd->zone->x, ny); - - /* if (bd->layer != POL_APP_LAYER) e_border_layer_set(bd, POL_APP_LAYER); */ + _border_geometry_set(bd, x, ny, w, nh, POL_APP_LAYER); } -static void -_policy_zone_layout_app_dual_custom(E_Border *bd, E_Illume_Config_Zone *cz) +static void +_policy_zone_layout_app_dual_custom(E_Border *bd, E_Illume_Config_Zone *cz) { E_Border *app; int iy, ny, nh; @@ -581,7 +560,7 @@ _policy_zone_layout_app_dual_custom(E_Border *bd, E_Illume_Config_Zone *cz) if ((!bd->new_client) && (!bd->visible)) return; ZONE_GEOMETRY; - + e_illume_border_indicator_pos_get(bd->zone, NULL, &iy); ny = bd->zone->y; @@ -590,21 +569,15 @@ _policy_zone_layout_app_dual_custom(E_Border *bd, E_Illume_Config_Zone *cz) app = e_illume_border_at_xy_get(bd->zone, bd->zone->x, bd->zone->y); if ((app) && (bd != app)) { - ny = (iy + cz->indicator.size); - nh = ((bd->zone->y + bd->zone->h) - ny - cz->softkey.size); + ny = (iy + cz->indicator.size); + nh = ((bd->zone->y + bd->zone->h) - ny - cz->softkey.size); } - if ((bd->w != w) || (bd->h != nh)) - _policy_border_resize(bd, w, nh); - - if ((bd->x != x) || (bd->y != ny)) - _policy_border_move(bd, x, ny); - - /* if (bd->layer != POL_APP_LAYER) e_border_layer_set(bd, POL_APP_LAYER); */ + _border_geometry_set(bd, x, ny, w, nh, POL_APP_LAYER); } -static void -_policy_zone_layout_app_dual_left(E_Border *bd, E_Illume_Config_Zone *cz) +static void +_policy_zone_layout_app_dual_left(E_Border *bd, E_Illume_Config_Zone *cz) { E_Border *bd2; int ky, kh, nx, nw; @@ -613,7 +586,7 @@ _policy_zone_layout_app_dual_left(E_Border *bd, E_Illume_Config_Zone *cz) if ((!bd->new_client) && (!bd->visible)) return; ZONE_GEOMETRY; - + e_illume_keyboard_safe_app_region_get(bd->zone, NULL, &ky, NULL, &kh); if (kh >= bd->zone->h) @@ -628,152 +601,75 @@ _policy_zone_layout_app_dual_left(E_Border *bd, E_Illume_Config_Zone *cz) bd2 = e_illume_border_at_xy_get(bd->zone, nx, y); if ((bd2) && (bd != bd2)) nx = x + nw; - if ((bd->w != nw) || (bd->h != kh)) - _policy_border_resize(bd, nw, kh); - - if ((bd->x != nx) || (bd->y != y)) - _policy_border_move(bd, nx, y); - - /* if (bd->layer != POL_APP_LAYER) e_border_layer_set(bd, POL_APP_LAYER); */ + _border_geometry_set(bd, nx, y, nw, kh, POL_APP_LAYER); } -static void -_policy_zone_layout_dialog(E_Border *bd, E_Illume_Config_Zone *cz) +static void +_policy_zone_layout_dialog(E_Border *bd, E_Illume_Config_Zone *cz) { E_Border *parent; int mw, mh, nx, ny; -// printf("\tLayout Dialog: %s\n", bd->client.icccm.name); - - /* NB: This policy ignores any ICCCM requested positions and centers the - * dialog on it's parent (if it exists) or on the zone */ - if ((!bd) || (!cz)) return; if (bd->placed) return; - + + ZONE_GEOMETRY; + mw = bd->w; mh = bd->h; - if (mw > bd->zone->w) mw = bd->zone->w; - if (mh > bd->zone->h) mh = bd->zone->h; + if (mw > w) mw = w; + if (mh > h) mh = h; - /* try to get this dialog's parent if it exists */ parent = e_illume_border_parent_get(bd); - /* if we have no parent, or we are in dual mode, then center on zone */ - /* NB: we check dual mode because if we are in dual mode, dialogs tend to - * be too small to be useful when positioned on the parent, so center - * on zone. We could check their size first here tho */ - if ((!parent) || (cz->mode.dual == 1)) + if ((!parent) || (cz->mode.dual == 1)) { - /* no parent or dual mode, center on screen */ - nx = (bd->zone->x + ((bd->zone->w - mw) / 2)); - ny = (bd->zone->y + ((bd->zone->h - mh) / 2)); + nx = (x + ((w - mw) / 2)); + ny = (y + ((h - mh) / 2)); } - else + else { - /* NB: there is an assumption here that the parent has already been - * laid out on screen. This could be bad. Needs Testing */ + if (mw > parent->w) mw = parent->w; + if (mh > parent->h) mh = parent->h; - if (mw > parent->w) mw = parent->w; - if (mh > parent->h) mh = parent->h; - - /* center on parent */ - nx = (parent->x + ((parent->w - mw) / 2)); - ny = (parent->y + ((parent->h - mh) / 2)); + nx = (parent->x + ((parent->w - mw) / 2)); + ny = (parent->y + ((parent->h - mh) / 2)); } - if ((bd->w != mw) || (bd->h != mh)) - _policy_border_resize(bd, mw, mh); - - if ((bd->x != nx) || (bd->y != ny)) - _policy_border_move(bd, nx, ny); + _border_geometry_set(bd, nx, ny, mw, mh, POL_DIALOG_LAYER); bd->placed = 1; - - /* if (bd->layer != POL_DIALOG_LAYER) - * e_border_layer_set(bd, POL_DIALOG_LAYER); */ } -static void -_policy_zone_layout_splash(E_Border *bd, E_Illume_Config_Zone *cz) +static void +_policy_zone_layout_splash(E_Border *bd, E_Illume_Config_Zone *cz) { - E_Border *parent = NULL; - int mw, mh, nx, ny; - - /* NB: This code is almost exactly the same as the dialog layout code - * (_policy_zone_layout_dialog) except for setting a different layer */ - -// printf("\tLayout Splash: %s\n", bd->client.icccm.name); - - /* NB: This policy ignores any ICCCM requested positions and centers the - * splash screen on it's parent (if it exists) or on the zone */ - - if ((!bd) || (!cz)) return; - - if (!bd->visible) return; - - e_illume_border_min_get(bd, &mw, &mh); - - if (mw > bd->zone->w) mw = bd->zone->w; - if (mh > bd->zone->h) mh = bd->zone->h; - - /* if we have no parent, or we are in dual mode, then center on zone */ - /* NB: we check dual mode because if we are in dual mode, dialogs tend to - * be too small to be useful when positioned on the parent, - * so center on zone instead */ - if ((!parent) || (cz->mode.dual == 1)) - { - /* no parent or in dual mode, center on screen */ - nx = (bd->zone->x + ((bd->zone->w - mw) / 2)); - ny = (bd->zone->y + ((bd->zone->h - mh) / 2)); - } - else - { - /* NB: there is an assumption here that the parent has already been - * laid out on screen. This could be bad. Needs Testing */ - - if (mw > parent->w) mw = parent->w; - if (mh > parent->h) mh = parent->h; - - /* center on parent */ - nx = (parent->x + ((parent->w - mw) / 2)); - ny = (parent->y + ((parent->h - mh) / 2)); - } - - if ((bd->w != mw) || (bd->h != mh)) - _policy_border_resize(bd, mw, mh); - - if ((bd->x != nx) || (bd->y != ny)) - _policy_border_move(bd, nx, ny); + _policy_zone_layout_dialog(bd, cz); if (bd->layer != POL_SPLASH_LAYER) e_border_layer_set(bd, POL_SPLASH_LAYER); } -static void -_policy_zone_layout_conformant_single(E_Border *bd, E_Illume_Config_Zone *cz) +static void +_policy_zone_layout_conformant_single(E_Border *bd, E_Illume_Config_Zone *cz) { if ((!bd) || (!cz)) return; if ((!bd->new_client) && (!bd->visible)) return; - if ((bd->w != bd->zone->w) || (bd->h != bd->zone->h)) - _policy_border_resize(bd, bd->zone->w, bd->zone->h); - - if ((bd->x != bd->zone->x) || (bd->y != bd->zone->y)) - _policy_border_move(bd, bd->zone->x, bd->zone->y); - - if (bd->layer != POL_CONFORMANT_LAYER) - e_border_layer_set(bd, POL_CONFORMANT_LAYER); + _border_geometry_set(bd, bd->zone->x, bd->zone->y, + bd->zone->w, bd->zone->h, + POL_CONFORMANT_LAYER); } -static void -_policy_zone_layout_conformant_dual_top(E_Border *bd, E_Illume_Config_Zone *cz) +#if 0 +static void +_policy_zone_layout_conformant_dual_top(E_Border *bd, E_Illume_Config_Zone *cz) { int nh, ny; - /* according to the docs I have, conformant windows are always on the + /* according to the docs I have, conformant windows are always on the * bottom in dual-top mode */ if ((!bd) || (!cz)) return; if ((!bd->new_client) && (!bd->visible)) return; @@ -783,81 +679,63 @@ _policy_zone_layout_conformant_dual_top(E_Border *bd, E_Illume_Config_Zone *cz) ny = (bd->zone->y + cz->indicator.size) + nh; nh += cz->softkey.size; - if ((bd->w != bd->zone->w) || (bd->h != nh)) - _policy_border_resize(bd, bd->zone->w, nh); - - if ((bd->x != bd->zone->x) || (bd->y != ny)) - _policy_border_move(bd, bd->zone->x, ny); - - if (bd->layer != POL_CONFORMANT_LAYER) - e_border_layer_set(bd, POL_CONFORMANT_LAYER); + _border_geometry_set(bd, bd->zone->x, ny, + bd->zone->w, nh, + POL_CONFORMANT_LAYER); } -static void -_policy_zone_layout_conformant_dual_custom(E_Border *bd, E_Illume_Config_Zone *cz) +static void +_policy_zone_layout_conformant_dual_custom(E_Border *bd, E_Illume_Config_Zone *cz) { int iy, nh; -// printf("\tLayout Conformant Dual Custom: %s\n", bd->client.icccm.class); - if ((!bd) || (!cz)) return; if ((!bd->new_client) && (!bd->visible)) return; - /* grab indicator position */ - e_illume_border_indicator_pos_get(bd->zone, NULL, &iy); + ZONE_GEOMETRY; + e_illume_border_indicator_pos_get(bd->zone, NULL, &iy); nh = ((bd->zone->y + bd->zone->h) - iy); - if ((bd->w != bd->zone->w) || (bd->h != nh)) - _policy_border_resize(bd, bd->zone->w, nh); - - if ((bd->x != bd->zone->x) || (bd->y != iy)) - _policy_border_move(bd, bd->zone->x, iy); - - if (bd->layer != POL_CONFORMANT_LAYER) - e_border_layer_set(bd, POL_CONFORMANT_LAYER); + _border_geometry_set(bd, x, iy, w, nh, POL_CONFORMANT_LAYER); } -static void -_policy_zone_layout_conformant_dual_left(E_Border *bd, E_Illume_Config_Zone *cz) + +static void +_policy_zone_layout_conformant_dual_left(E_Border *bd, E_Illume_Config_Zone *cz) { int nw, nx; - /* according to the docs I have, conformant windows are always on the + /* according to the docs I have, conformant windows are always on the * left in dual-left mode */ if ((!bd) || (!cz)) return; if ((!bd->new_client) && (!bd->visible)) return; - nw = (bd->zone->w / 2); - nx = (bd->zone->x); + ZONE_GEOMETRY; - if ((bd->w != nw) || (bd->h != bd->zone->h)) - _policy_border_resize(bd, nw, bd->zone->h); + nw = w/2; + nx = x; - if ((bd->x != nx) || (bd->y != bd->zone->y)) - _policy_border_move(bd, nx, bd->zone->y); - - if (bd->layer != POL_CONFORMANT_LAYER) - e_border_layer_set(bd, POL_CONFORMANT_LAYER); + _border_geometry_set(bd, x, y, nw, h, POL_CONFORMANT_LAYER); } - +#endif /* policy functions */ -void -_policy_border_add(E_Border *bd) +void +_policy_border_add(E_Border *bd) { -// printf("Border added: %s\n", bd->client.icccm.class); + // printf("Border added: %s\n", bd->client.icccm.class); if (!bd) return; /* NB: this call sets an atom on the window that specifices the zone. - * the logic here is that any new windows created can access the zone - * window by a 'get' call. This is useful for elementary apps as they - * normally would not have access to the zone window. Typical use case - * is for indicator & softkey windows so that they can send messages - * that apply to their respective zone only. Example: softkey sends close - * messages (or back messages to cycle focus) that should pertain just + * the logic here is that any new windows created can access the zone + * window by a 'get' call. This is useful for elementary apps as they + * normally would not have access to the zone window. Typical use case + * is for indicator & softkey windows so that they can send messages + * that apply to their respective zone only. Example: softkey sends close + * messages (or back messages to cycle focus) that should pertain just * to it's current zone */ ecore_x_e_illume_zone_set(bd->client.win, bd->zone->black_win); @@ -865,73 +743,73 @@ _policy_border_add(E_Border *bd) if (bd->stolen) return; /* if this is a fullscreen window, than we need to hide indicator window */ - /* NB: we could use the e_illume_border_is_fullscreen function here + /* NB: we could use the e_illume_border_is_fullscreen function here * but we save ourselves a function call this way */ - if ((bd->fullscreen) || (bd->need_fullscreen)) + if ((bd->fullscreen) || (bd->need_fullscreen)) { - E_Border *ind, *sft; + E_Border *ind, *sft; - /* try to get the Indicator on this zone */ - if ((ind = e_illume_border_indicator_get(bd->zone))) - { - /* we have the indicator, hide it if needed */ + /* try to get the Indicator on this zone */ + if ((ind = e_illume_border_indicator_get(bd->zone))) + { + /* we have the indicator, hide it if needed */ if (ind->visible) e_illume_border_hide(ind); - } - /* conformant - may not need softkey */ - if ((sft = e_illume_border_softkey_get(bd->zone))) - { - if (e_illume_border_is_conformant(bd)) - { - if (sft->visible) e_illume_border_hide(sft); - } - else - { - if (!sft->visible) e_illume_border_show(sft); - } - } + } + /* conformant - may not need softkey */ + if ((sft = e_illume_border_softkey_get(bd->zone))) + { + if (e_illume_border_is_conformant(bd)) + { + if (sft->visible) e_illume_border_hide(sft); + } + else + { + if (!sft->visible) e_illume_border_show(sft); + } + } } /* Add this border to our focus stack if it can accept or take focus */ - if ((bd->client.icccm.accepts_focus) || (bd->client.icccm.take_focus)) + if ((bd->client.icccm.accepts_focus) || (bd->client.icccm.take_focus)) _pol_focus_stack = eina_list_append(_pol_focus_stack, bd); if ((e_illume_border_is_softkey(bd)) || (e_illume_border_is_indicator(bd))) _policy_zone_layout_update(bd->zone); - else + else { - /* set focus on new border if we can */ - _policy_border_set_focus(bd); + /* set focus on new border if we can */ + _policy_border_set_focus(bd); } } -void -_policy_border_del(E_Border *bd) +void +_policy_border_del(E_Border *bd) { -// printf("Policy Border deleted: %s\n", bd->client.icccm.class); + // printf("Policy Border deleted: %s\n", bd->client.icccm.class); if (!bd) return; /* if this is a fullscreen window, than we need to show indicator window */ - /* NB: we could use the e_illume_border_is_fullscreen function here + /* NB: we could use the e_illume_border_is_fullscreen function here * but we save ourselves a function call this way */ - if ((bd->fullscreen) || (bd->need_fullscreen)) + if ((bd->fullscreen) || (bd->need_fullscreen)) { - E_Border *ind; + E_Border *ind; - /* try to get the Indicator on this zone */ - if ((ind = e_illume_border_indicator_get(bd->zone))) - { - /* we have the indicator, show it if needed */ + /* try to get the Indicator on this zone */ + if ((ind = e_illume_border_indicator_get(bd->zone))) + { + /* we have the indicator, show it if needed */ if (!ind->visible) e_illume_border_show(ind); - } - _policy_zone_layout_update(bd->zone); + } + _policy_zone_layout_update(bd->zone); } /* remove from our focus stack */ - if ((bd->client.icccm.accepts_focus) || (bd->client.icccm.take_focus)) + if ((bd->client.icccm.accepts_focus) || (bd->client.icccm.take_focus)) _pol_focus_stack = eina_list_remove(_pol_focus_stack, bd); - if (e_illume_border_is_softkey(bd)) + if (e_illume_border_is_softkey(bd)) { E_Illume_Config_Zone *cz; @@ -940,7 +818,7 @@ _policy_border_del(E_Border *bd) cz->softkey.size = 0; _policy_zone_layout_update(bd->zone); } - else if (e_illume_border_is_indicator(bd)) + else if (e_illume_border_is_indicator(bd)) { E_Illume_Config_Zone *cz; @@ -949,68 +827,68 @@ _policy_border_del(E_Border *bd) cz->indicator.size = 0; _policy_zone_layout_update(bd->zone); } - else + else { /* show the border below this one */ _policy_border_show_below(bd); } } -void -_policy_border_focus_in(E_Border *bd __UNUSED__) +void +_policy_border_focus_in(E_Border *bd __UNUSED__) { E_Border *ind; -// printf("Border focus in: %s\n", bd->client.icccm.name); - if ((bd->fullscreen) || (bd->need_fullscreen)) + // printf("Border focus in: %s\n", bd->client.icccm.name); + if ((bd->fullscreen) || (bd->need_fullscreen)) { - /* try to get the Indicator on this zone */ - if ((ind = e_illume_border_indicator_get(bd->zone))) - { - /* we have the indicator, show it if needed */ + /* try to get the Indicator on this zone */ + if ((ind = e_illume_border_indicator_get(bd->zone))) + { + /* we have the indicator, show it if needed */ if (ind->visible) e_illume_border_hide(ind); - } + } } else { - /* try to get the Indicator on this zone */ - if ((ind = e_illume_border_indicator_get(bd->zone))) - { - /* we have the indicator, show it if needed */ + /* try to get the Indicator on this zone */ + if ((ind = e_illume_border_indicator_get(bd->zone))) + { + /* we have the indicator, show it if needed */ if (!ind->visible) e_illume_border_show(ind); - } + } } _policy_zone_layout_update(bd->zone); } -void -_policy_border_focus_out(E_Border *bd) +void +_policy_border_focus_out(E_Border *bd) { -// printf("Border focus out: %s\n", bd->client.icccm.name); + // printf("Border focus out: %s\n", bd->client.icccm.name); if (!bd) return; - /* NB: if we got this focus_out event on a deleted border, we check if - * it is a transient (child) of another window. If it is, then we + /* NB: if we got this focus_out event on a deleted border, we check if + * it is a transient (child) of another window. If it is, then we * transfer focus back to the parent window */ - if (e_object_is_del(E_OBJECT(bd))) + if (e_object_is_del(E_OBJECT(bd))) { - if (e_illume_border_is_dialog(bd)) - { - E_Border *parent; + if (e_illume_border_is_dialog(bd)) + { + E_Border *parent; - if ((parent = e_illume_border_parent_get(bd))) - _policy_border_set_focus(parent); - } + if ((parent = e_illume_border_parent_get(bd))) + _policy_border_set_focus(parent); + } } } -void -_policy_border_activate(E_Border *bd) +void +_policy_border_activate(E_Border *bd) { E_Border *sft; -// printf("Border Activate: %s\n", bd->client.icccm.name); + // printf("Border Activate: %s\n", bd->client.icccm.name); if (!bd) return; @@ -1020,25 +898,25 @@ _policy_border_activate(E_Border *bd) /* conformant windows hide the softkey */ if ((sft = e_illume_border_softkey_get(bd->zone))) { - if (e_illume_border_is_conformant(bd)) - { + if (e_illume_border_is_conformant(bd)) + { if (sft->visible) e_illume_border_hide(sft); - } - else - { + } + else + { if (!sft->visible) e_illume_border_show(sft); - } + } } - /* NB: We cannot use our set_focus function here because it does, - * occasionally fall through wrt E's focus policy, so cherry pick the good + /* NB: We cannot use our set_focus function here because it does, + * occasionally fall through wrt E's focus policy, so cherry pick the good * parts and use here :) */ /* if the border is iconified then uniconify if allowed */ - if ((bd->iconic) && (!bd->lock_user_iconify)) + if ((bd->iconic) && (!bd->lock_user_iconify)) e_border_uniconify(bd); - /* set very high layer for this window as it needs attention and thus + /* set very high layer for this window as it needs attention and thus * should show above everything */ e_border_layer_set(bd, POL_ACTIVATE_LAYER); @@ -1048,25 +926,25 @@ _policy_border_activate(E_Border *bd) /* focus the border */ e_border_focus_set(bd, 1, 1); - /* NB: since we skip needless border evals when container layout - * is called (to save cpu cycles), we need to - * signal this border that it's focused so that the edj gets - * updated. - * - * This is potentially useless as THIS policy - * makes all windows borderless anyway, but it's in here for + /* NB: since we skip needless border evals when container layout + * is called (to save cpu cycles), we need to + * signal this border that it's focused so that the edj gets + * updated. + * + * This is potentially useless as THIS policy + * makes all windows borderless anyway, but it's in here for * completeness - e_border_focus_latest_set(bd); - if (bd->bg_object) - edje_object_signal_emit(bd->bg_object, "e,state,focused", "e"); - if (bd->icon_object) - edje_object_signal_emit(bd->icon_object, "e,state,focused", "e"); - e_focus_event_focus_in(bd); - */ + e_border_focus_latest_set(bd); + if (bd->bg_object) + edje_object_signal_emit(bd->bg_object, "e,state,focused", "e"); + if (bd->icon_object) + edje_object_signal_emit(bd->icon_object, "e,state,focused", "e"); + e_focus_event_focus_in(bd); + */ } -void -_policy_border_post_fetch(E_Border *bd) +void +_policy_border_post_fetch(E_Border *bd) { if (!bd) return; @@ -1074,13 +952,13 @@ _policy_border_post_fetch(E_Border *bd) if (bd->remember) e_remember_del(bd->remember); bd->remember = NULL; - if (e_illume_border_is_dialog(bd)) + if (e_illume_border_is_dialog(bd)) { return; } else if (e_illume_border_is_fixed_size(bd)) { - return; + return; } else { @@ -1089,8 +967,8 @@ _policy_border_post_fetch(E_Border *bd) } } -void -_policy_border_post_assign(E_Border *bd) +void +_policy_border_post_assign(E_Border *bd) { if (!bd) return; @@ -1108,9 +986,9 @@ _policy_border_post_assign(E_Border *bd) bd->lock_client_stacking = 1; /* do not allow the user to change these properties */ - bd->lock_user_location = 1; - bd->lock_user_size = 1; - bd->lock_user_shade = 1; + /* bd->lock_user_location = 1; + * bd->lock_user_size = 1; + * bd->lock_user_shade = 1; */ /* clear any centered states */ /* NB: this is mainly needed for E's main config dialog */ @@ -1120,16 +998,16 @@ _policy_border_post_assign(E_Border *bd) bd->lock_border = 1; } -void -_policy_border_show(E_Border *bd) +void +_policy_border_show(E_Border *bd) { if (!bd) return; /* printf("_policy_border_show %s\n", e_border_name_get(bd)); */ - + if (!bd->client.icccm.name) return; -// printf("Border Show: %s\n", bd->client.icccm.class); + // printf("Border Show: %s\n", bd->client.icccm.class); /* trap for special windows so we can ignore hides below them */ if (e_illume_border_is_indicator(bd)) return; @@ -1145,8 +1023,8 @@ _policy_border_hide(E_Border *bd) { } -void -_policy_zone_layout(E_Zone *zone) +void +_policy_zone_layout(E_Zone *zone) { E_Illume_Config_Zone *cz; Eina_List *l; @@ -1156,102 +1034,102 @@ _policy_zone_layout(E_Zone *zone) cz = e_illume_zone_config_get(zone->id); - EINA_LIST_FOREACH(e_border_client_list(), l, bd) + EINA_LIST_FOREACH(e_border_client_list(), l, bd) { - if (e_object_is_del(E_OBJECT(bd))) continue; + if (e_object_is_del(E_OBJECT(bd))) continue; - if (bd->zone != zone) continue; + if (bd->zone != zone) continue; - if ((!bd->new_client) && (!bd->changes.pos) && (!bd->changes.size) && - (!bd->changes.visible) && (!bd->pending_move_resize) && - (!bd->need_shape_export) && (!bd->need_shape_merge)) continue; + if ((!bd->new_client) && (!bd->changes.pos) && (!bd->changes.size) && + (!bd->changes.visible) && (!bd->pending_move_resize) && + (!bd->need_shape_export) && (!bd->need_shape_merge)) continue; - if (e_illume_border_is_indicator(bd)) - _policy_zone_layout_indicator(bd, cz); + if (e_illume_border_is_indicator(bd)) + _policy_zone_layout_indicator(bd, cz); - else if (e_illume_border_is_quickpanel(bd)) - _policy_zone_layout_quickpanel(bd); + else if (e_illume_border_is_quickpanel(bd)) + _policy_zone_layout_quickpanel(bd); - else if (e_illume_border_is_softkey(bd)) - _policy_zone_layout_softkey(bd, cz); + else if (e_illume_border_is_softkey(bd)) + _policy_zone_layout_softkey(bd, cz); - else if (e_illume_border_is_keyboard(bd)) - _policy_zone_layout_keyboard(bd, cz); + else if (e_illume_border_is_keyboard(bd)) + _policy_zone_layout_keyboard(bd, cz); - else if (e_illume_border_is_home(bd)) + else if (e_illume_border_is_home(bd)) _policy_zone_layout_home_single(bd, cz); - else if ((bd->fullscreen) || (bd->need_fullscreen)) - _policy_zone_layout_fullscreen(bd); + else if ((bd->fullscreen) || (bd->need_fullscreen)) + _policy_zone_layout_fullscreen(bd); - else if (e_illume_border_is_splash(bd)) - _policy_zone_layout_splash(bd, cz); + else if (e_illume_border_is_splash(bd)) + _policy_zone_layout_splash(bd, cz); - else if (e_illume_border_is_dialog(bd)) - _policy_zone_layout_dialog(bd, cz); + else if (e_illume_border_is_dialog(bd)) + _policy_zone_layout_dialog(bd, cz); - else if (e_illume_border_is_conformant(bd)) + else if (e_illume_border_is_conformant(bd)) _policy_zone_layout_conformant_single(bd, cz); else if (e_illume_border_is_fixed_size(bd)) _policy_zone_layout_dialog(bd, cz); else - { - /* are we in single mode ? */ - if (!cz->mode.dual) - _policy_zone_layout_app_single(bd, cz); - else - { - /* we are in dual-mode, check orientation */ - if (cz->mode.side == 0) - { - int ty; + { + /* are we in single mode ? */ + if (!cz->mode.dual) + _policy_zone_layout_app_single(bd, cz); + else + { + /* we are in dual-mode, check orientation */ + if (cz->mode.side == 0) + { + int ty; - /* grab the indicator position so we can tell if it - * is in a custom position or not (user dragged it) */ - e_illume_border_indicator_pos_get(bd->zone, NULL, &ty); - if (ty <= bd->zone->y) - _policy_zone_layout_app_dual_top(bd, cz); - else - _policy_zone_layout_app_dual_custom(bd, cz); - } - else - _policy_zone_layout_app_dual_left(bd, cz); - } - } + /* grab the indicator position so we can tell if it + * is in a custom position or not (user dragged it) */ + e_illume_border_indicator_pos_get(bd->zone, NULL, &ty); + if (ty <= bd->zone->y) + _policy_zone_layout_app_dual_top(bd, cz); + else + _policy_zone_layout_app_dual_custom(bd, cz); + } + else + _policy_zone_layout_app_dual_left(bd, cz); + } + } } } -void -_policy_zone_move_resize(E_Zone *zone) +void +_policy_zone_move_resize(E_Zone *zone) { Eina_List *l; E_Border *bd; -// printf("Zone move resize\n"); + // printf("Zone move resize\n"); if (!zone) return; - EINA_LIST_FOREACH(e_border_client_list(), l, bd) + EINA_LIST_FOREACH(e_border_client_list(), l, bd) { - /* skip borders not on this zone */ - if (bd->zone != zone) continue; + /* skip borders not on this zone */ + if (bd->zone != zone) continue; - /* signal a changed pos here so layout gets updated */ - bd->changes.pos = 1; - bd->changed = 1; + /* signal a changed pos here so layout gets updated */ + bd->changes.pos = 1; + bd->changed = 1; } } -void -_policy_zone_mode_change(E_Zone *zone, Ecore_X_Atom mode) +void +_policy_zone_mode_change(E_Zone *zone, Ecore_X_Atom mode) { E_Illume_Config_Zone *cz; Eina_List *homes = NULL; E_Border *bd; int count; -// printf("Zone mode change: %d\n", zone->id); + // printf("Zone mode change: %d\n", zone->id); if (!zone) return; @@ -1259,35 +1137,35 @@ _policy_zone_mode_change(E_Zone *zone, Ecore_X_Atom mode) cz = e_illume_zone_config_get(zone->id); /* update config with new mode */ - if (mode == ECORE_X_ATOM_E_ILLUME_MODE_SINGLE) + if (mode == ECORE_X_ATOM_E_ILLUME_MODE_SINGLE) cz->mode.dual = 0; - else + else { - cz->mode.dual = 1; - if (mode == ECORE_X_ATOM_E_ILLUME_MODE_DUAL_TOP) - cz->mode.side = 0; - else if (mode == ECORE_X_ATOM_E_ILLUME_MODE_DUAL_LEFT) - cz->mode.side = 1; + cz->mode.dual = 1; + if (mode == ECORE_X_ATOM_E_ILLUME_MODE_DUAL_TOP) + cz->mode.side = 0; + else if (mode == ECORE_X_ATOM_E_ILLUME_MODE_DUAL_LEFT) + cz->mode.side = 1; } e_config_save_queue(); /* lock indicator window from dragging if we need to */ bd = e_illume_border_indicator_get(zone); - if (bd) + if (bd) { - /* only dual-top mode can drag */ - if ((cz->mode.dual == 1) && (cz->mode.side == 0)) - { - /* only set locked if we need to */ - if (bd->client.illume.drag.locked != 0) - ecore_x_e_illume_drag_locked_set(bd->client.win, 0); - } - else - { - /* only set locked if we need to */ - if (bd->client.illume.drag.locked != 1) - ecore_x_e_illume_drag_locked_set(bd->client.win, 1); - } + /* only dual-top mode can drag */ + if ((cz->mode.dual == 1) && (cz->mode.side == 0)) + { + /* only set locked if we need to */ + if (bd->client.illume.drag.locked != 0) + ecore_x_e_illume_drag_locked_set(bd->client.win, 0); + } + else + { + /* only set locked if we need to */ + if (bd->client.illume.drag.locked != 1) + ecore_x_e_illume_drag_locked_set(bd->client.win, 1); + } } if (!(homes = e_illume_border_home_borders_get(zone))) return; @@ -1296,30 +1174,30 @@ _policy_zone_mode_change(E_Zone *zone, Ecore_X_Atom mode) #if 0 /* split home window? wtf?! go home! */ /* create a new home window (if needed) for dual mode */ - if (cz->mode.dual == 1) + if (cz->mode.dual == 1) { - if (count < 2) - ecore_x_e_illume_home_new_send(zone->black_win); + if (count < 2) + ecore_x_e_illume_home_new_send(zone->black_win); } - else if (cz->mode.dual == 0) + else if (cz->mode.dual == 0) { - /* if we went to single mode, delete any extra home windows */ - if (count >= 2) - { - E_Border *home; + /* if we went to single mode, delete any extra home windows */ + if (count >= 2) + { + E_Border *home; - /* try to get a home window on this zone and remove it */ - if ((home = e_illume_border_home_get(zone))) - ecore_x_e_illume_home_del_send(home->client.win); - } + /* try to get a home window on this zone and remove it */ + if ((home = e_illume_border_home_get(zone))) + ecore_x_e_illume_home_del_send(home->client.win); + } } #endif /* Need to trigger a layout update here */ _policy_zone_layout_update(zone); } -void -_policy_zone_close(E_Zone *zone) +void +_policy_zone_close(E_Zone *zone) { E_Border *bd; @@ -1333,10 +1211,10 @@ _policy_zone_close(E_Zone *zone) e_border_act_close_begin(bd); } -void -_policy_drag_start(E_Border *bd) +void +_policy_drag_start(E_Border *bd) { -// printf("Drag start\n"); + // printf("Drag start\n"); if (!bd) return; @@ -1350,10 +1228,10 @@ _policy_drag_start(E_Border *bd) ecore_x_e_illume_drag_set(bd->zone->black_win, 1); } -void -_policy_drag_end(E_Border *bd) +void +_policy_drag_end(E_Border *bd) { -// printf("Drag end\n"); + // printf("Drag end\n"); if (!bd) return; @@ -1366,8 +1244,8 @@ _policy_drag_end(E_Border *bd) ecore_x_e_illume_drag_set(bd->zone->black_win, 0); } -void -_policy_focus_back(E_Zone *zone) +void +_policy_focus_back(E_Zone *zone) { Eina_List *l, *fl = NULL; E_Border *bd, *fbd; @@ -1375,44 +1253,44 @@ _policy_focus_back(E_Zone *zone) if (!zone) return; if (eina_list_count(_pol_focus_stack) < 1) return; -// printf("Focus back\n"); + // printf("Focus back\n"); - EINA_LIST_REVERSE_FOREACH(_pol_focus_stack, l, bd) + EINA_LIST_REVERSE_FOREACH(_pol_focus_stack, l, bd) { - if (bd->zone != zone) continue; - fl = eina_list_append(fl, bd); + if (bd->zone != zone) continue; + fl = eina_list_append(fl, bd); } if (!(fbd = e_border_focused_get())) return; if (fbd->parent) return; - EINA_LIST_REVERSE_FOREACH(fl, l, bd) + EINA_LIST_REVERSE_FOREACH(fl, l, bd) { - if ((fbd) && (bd == fbd)) - { - E_Border *b; + if ((fbd) && (bd == fbd)) + { + E_Border *b; - if ((l->next) && (b = l->next->data)) - { - _policy_border_set_focus(b); - break; - } - else - { - /* we've reached the end of the list. Set focus to first */ - if ((b = eina_list_nth(fl, 0))) - { - _policy_border_set_focus(b); - break; - } - } - } + if ((l->next) && (b = l->next->data)) + { + _policy_border_set_focus(b); + break; + } + else + { + /* we've reached the end of the list. Set focus to first */ + if ((b = eina_list_nth(fl, 0))) + { + _policy_border_set_focus(b); + break; + } + } + } } eina_list_free(fl); } -void -_policy_focus_forward(E_Zone *zone) +void +_policy_focus_forward(E_Zone *zone) { Eina_List *l, *fl = NULL; E_Border *bd, *fbd; @@ -1420,44 +1298,44 @@ _policy_focus_forward(E_Zone *zone) if (!zone) return; if (eina_list_count(_pol_focus_stack) < 1) return; - // printf("Focus forward\n"); + // printf("Focus forward\n"); - EINA_LIST_FOREACH(_pol_focus_stack, l, bd) + EINA_LIST_FOREACH(_pol_focus_stack, l, bd) { - if (bd->zone != zone) continue; - fl = eina_list_append(fl, bd); + if (bd->zone != zone) continue; + fl = eina_list_append(fl, bd); } if (!(fbd = e_border_focused_get())) return; if (fbd->parent) return; - EINA_LIST_FOREACH(fl, l, bd) + EINA_LIST_FOREACH(fl, l, bd) { - if ((fbd) && (bd == fbd)) - { - E_Border *b; + if ((fbd) && (bd == fbd)) + { + E_Border *b; - if ((l->next) && (b = l->next->data)) - { - _policy_border_set_focus(b); - break; - } - else - { - /* we've reached the end of the list. Set focus to first */ - if ((b = eina_list_nth(fl, 0))) - { - _policy_border_set_focus(b); - break; - } - } - } + if ((l->next) && (b = l->next->data)) + { + _policy_border_set_focus(b); + break; + } + else + { + /* we've reached the end of the list. Set focus to first */ + if ((b = eina_list_nth(fl, 0))) + { + _policy_border_set_focus(b); + break; + } + } + } } eina_list_free(fl); } -void -_policy_focus_home(E_Zone *zone) +void +_policy_focus_home(E_Zone *zone) { E_Border *bd; @@ -1466,158 +1344,158 @@ _policy_focus_home(E_Zone *zone) _policy_border_set_focus(bd); } -void -_policy_property_change(Ecore_X_Event_Window_Property *event) +void +_policy_property_change(Ecore_X_Event_Window_Property *event) { -// printf("Property Change\n"); + // printf("Property Change\n"); /* we are interested in state changes here */ - if (event->atom == ECORE_X_ATOM_NET_WM_STATE) + if (event->atom == ECORE_X_ATOM_NET_WM_STATE) { - E_Border *bd, *ind; + E_Border *bd, *ind; - if (!(bd = e_border_find_by_client_window(event->win))) return; + if (!(bd = e_border_find_by_client_window(event->win))) return; - /* not interested in stolen or invisible borders */ - if ((bd->stolen) || (!bd->visible)) return; + /* not interested in stolen or invisible borders */ + if ((bd->stolen) || (!bd->visible)) return; - /* make sure the border has a name or class */ - /* NB: this check is here because some E borders get State Changes - * but do not have a name/class associated with them. Not entirely sure - * which ones they are, but I would guess Managers, Containers, or Zones. - * At any rate, we're not interested in those types of borders */ - if ((!bd->client.icccm.name) || (!bd->client.icccm.class)) return; + /* make sure the border has a name or class */ + /* NB: this check is here because some E borders get State Changes + * but do not have a name/class associated with them. Not entirely sure + * which ones they are, but I would guess Managers, Containers, or Zones. + * At any rate, we're not interested in those types of borders */ + if ((!bd->client.icccm.name) || (!bd->client.icccm.class)) return; - /* NB: If we have reached this point, then it should be a fullscreen - * border that has toggled fullscreen on/off */ + /* NB: If we have reached this point, then it should be a fullscreen + * border that has toggled fullscreen on/off */ - /* try to get the Indicator on this zone */ - if (!(ind = e_illume_border_indicator_get(bd->zone))) return; + /* try to get the Indicator on this zone */ + if (!(ind = e_illume_border_indicator_get(bd->zone))) return; - /* if we are fullscreen, hide the indicator...else we show it */ - /* NB: we could use the e_illume_border_is_fullscreen function here - * but we save ourselves a function call this way */ - if ((bd->fullscreen) || (bd->need_fullscreen)) - { + /* if we are fullscreen, hide the indicator...else we show it */ + /* NB: we could use the e_illume_border_is_fullscreen function here + * but we save ourselves a function call this way */ + if ((bd->fullscreen) || (bd->need_fullscreen)) + { if (ind->visible) - { - e_illume_border_hide(ind); - _policy_zone_layout_update(bd->zone); - } - } - else - { + { + e_illume_border_hide(ind); + _policy_zone_layout_update(bd->zone); + } + } + else + { if (!ind->visible) - { - e_illume_border_show(ind); - _policy_zone_layout_update(bd->zone); - } - } + { + e_illume_border_show(ind); + _policy_zone_layout_update(bd->zone); + } + } } - else if (event->atom == ECORE_X_ATOM_E_ILLUME_INDICATOR_GEOMETRY) + else if (event->atom == ECORE_X_ATOM_E_ILLUME_INDICATOR_GEOMETRY) { - Eina_List *l; - E_Zone *zone; - E_Border *bd; - int x, y, w, h; + Eina_List *l; + E_Zone *zone; + E_Border *bd; + int x, y, w, h; - if (!(zone = e_util_zone_window_find(event->win))) return; + if (!(zone = e_util_zone_window_find(event->win))) return; - if (!(bd = e_illume_border_indicator_get(zone))) return; - x = bd->x; - y = bd->y; - w = bd->w; - h = bd->h; + if (!(bd = e_illume_border_indicator_get(zone))) return; + x = bd->x; + y = bd->y; + w = bd->w; + h = bd->h; - EINA_LIST_FOREACH(e_border_client_list(), l, bd) - { - if (bd->zone != zone) continue; - if (!e_illume_border_is_conformant(bd)) continue; - /* set indicator geometry on conformant window */ - /* NB: This is needed so that conformant apps get told about - * the indicator size/position...else they have no way of - * knowing that the geometry has been updated */ - ecore_x_e_illume_indicator_geometry_set(bd->client.win, x, y, w, h); - } + EINA_LIST_FOREACH(e_border_client_list(), l, bd) + { + if (bd->zone != zone) continue; + if (!e_illume_border_is_conformant(bd)) continue; + /* set indicator geometry on conformant window */ + /* NB: This is needed so that conformant apps get told about + * the indicator size/position...else they have no way of + * knowing that the geometry has been updated */ + ecore_x_e_illume_indicator_geometry_set(bd->client.win, x, y, w, h); + } } - else if (event->atom == ECORE_X_ATOM_E_ILLUME_SOFTKEY_GEOMETRY) + else if (event->atom == ECORE_X_ATOM_E_ILLUME_SOFTKEY_GEOMETRY) { - Eina_List *l; - E_Zone *zone; - E_Border *bd; - int x, y, w, h; + Eina_List *l; + E_Zone *zone; + E_Border *bd; + int x, y, w, h; - if (!(zone = e_util_zone_window_find(event->win))) return; + if (!(zone = e_util_zone_window_find(event->win))) return; - if (!(bd = e_illume_border_softkey_get(zone))) return; - x = bd->x; - y = bd->y; - w = bd->w; - h = bd->h; + if (!(bd = e_illume_border_softkey_get(zone))) return; + x = bd->x; + y = bd->y; + w = bd->w; + h = bd->h; - EINA_LIST_FOREACH(e_border_client_list(), l, bd) - { - if (bd->zone != zone) continue; - if (!e_illume_border_is_conformant(bd)) continue; - /* set softkey geometry on conformant window */ - /* NB: This is needed so that conformant apps get told about - * the softkey size/position...else they have no way of - * knowing that the geometry has been updated */ - ecore_x_e_illume_softkey_geometry_set(bd->client.win, x, y, w, h); - } + EINA_LIST_FOREACH(e_border_client_list(), l, bd) + { + if (bd->zone != zone) continue; + if (!e_illume_border_is_conformant(bd)) continue; + /* set softkey geometry on conformant window */ + /* NB: This is needed so that conformant apps get told about + * the softkey size/position...else they have no way of + * knowing that the geometry has been updated */ + ecore_x_e_illume_softkey_geometry_set(bd->client.win, x, y, w, h); + } } - else if (event->atom == ECORE_X_ATOM_E_ILLUME_KEYBOARD_GEOMETRY) + else if (event->atom == ECORE_X_ATOM_E_ILLUME_KEYBOARD_GEOMETRY) { - Eina_List *l; - E_Zone *zone; - E_Illume_Keyboard *kbd; - E_Border *bd; - int x, y, w, h; + Eina_List *l; + E_Zone *zone; + E_Illume_Keyboard *kbd; + E_Border *bd; + int x, y, w, h; - if (!(zone = e_util_zone_window_find(event->win))) return; + if (!(zone = e_util_zone_window_find(event->win))) return; - if (!(kbd = e_illume_keyboard_get())) return; - if (!kbd->border) return; + if (!(kbd = e_illume_keyboard_get())) return; + if (!kbd->border) return; - x = kbd->border->x; - w = kbd->border->w; - h = kbd->border->h; + x = kbd->border->x; + w = kbd->border->w; + h = kbd->border->h; - /* adjust Y for keyboard visibility because keyboard uses fx_offset */ - y = 0; - if (kbd->border->fx.y <= 0) y = kbd->border->y; + /* adjust Y for keyboard visibility because keyboard uses fx_offset */ + y = 0; + if (kbd->border->fx.y <= 0) y = kbd->border->y; - /* look for conformant borders */ - EINA_LIST_FOREACH(e_border_client_list(), l, bd) - { - if (bd->zone != zone) continue; - if (!e_illume_border_is_conformant(bd)) continue; - /* set keyboard geometry on conformant window */ - /* NB: This is needed so that conformant apps get told about - * the keyboard size/position...else they have no way of - * knowing that the geometry has been updated */ - ecore_x_e_illume_keyboard_geometry_set(bd->client.win, x, y, w, h); - } + /* look for conformant borders */ + EINA_LIST_FOREACH(e_border_client_list(), l, bd) + { + if (bd->zone != zone) continue; + if (!e_illume_border_is_conformant(bd)) continue; + /* set keyboard geometry on conformant window */ + /* NB: This is needed so that conformant apps get told about + * the keyboard size/position...else they have no way of + * knowing that the geometry has been updated */ + ecore_x_e_illume_keyboard_geometry_set(bd->client.win, x, y, w, h); + } } else if (event->atom == ATM_ENLIGHTENMENT_SCALE) { - Eina_List *ml; - E_Manager *man; + Eina_List *ml; + E_Manager *man; - EINA_LIST_FOREACH(e_manager_list(), ml, man) - { - Eina_List *cl; - E_Container *con; + EINA_LIST_FOREACH(e_manager_list(), ml, man) + { + Eina_List *cl; + E_Container *con; - if (event->win != man->root) continue; - EINA_LIST_FOREACH(man->containers, cl, con) - { - Eina_List *zl; - E_Zone *zone; + if (event->win != man->root) continue; + EINA_LIST_FOREACH(man->containers, cl, con) + { + Eina_List *zl; + E_Zone *zone; - EINA_LIST_FOREACH(con->zones, zl, zone) - _policy_zone_layout_update(zone); - } - } + EINA_LIST_FOREACH(con->zones, zl, zone) + _policy_zone_layout_update(zone); + } + } } }