Enlightenment CVS committal Author : sebastid Project : e17 Module : apps/e
Dir : e17/apps/e/src/bin Modified Files: e_border.c e_border.h e_hints.c e_hints.h e_int_menus.c Log Message: Handle window state change requests. =================================================================== RCS file: /cvsroot/enlightenment/e17/apps/e/src/bin/e_border.c,v retrieving revision 1.172 retrieving revision 1.173 diff -u -3 -r1.172 -r1.173 --- e_border.c 1 May 2005 15:30:51 -0000 1.172 +++ e_border.c 2 May 2005 09:19:55 -0000 1.173 @@ -577,6 +577,7 @@ E_OBJECT_CHECK(bd); E_OBJECT_TYPE_CHECK(bd, E_BORDER_TYPE); _e_border_reorder_after(bd, NULL); + printf("raise layer: %d\n", bd->layer); e_container_window_raise(bd->zone->container, bd->win, bd->layer); { E_Event_Border_Raise *ev; @@ -960,9 +961,7 @@ e_hints_window_fullscreen_set(bd, 1); - bd->layer = 200; - - e_border_raise(bd); + e_container_window_raise(bd->zone->container, bd->win, 200); e_border_move_resize(bd, bd->zone->x - bd->client_inset.l, bd->zone->y - bd->client_inset.t, @@ -990,7 +989,6 @@ e_border_move_resize(bd, bd->saved.x, bd->saved.y, bd->saved.w, bd->saved.h); - bd->layer = 100; bd->fullscreen = 0; bd->changes.pos = 1; bd->changes.size = 1; @@ -1460,8 +1458,8 @@ bd = e_border_find_by_client_window(e->win); if (!bd) { - printf("generic config request %x %i %i %ix%i ...\n", - e->win, e->x, e->y, e->w, e->h); + printf("generic config request 0x%x 0x%lx %i %i %ix%i %i 0x%x 0x%x...\n", + e->win, e->value_mask, e->x, e->y, e->w, e->h, e->border, e->abovewin, e->detail); ecore_x_window_configure(e->win, e->value_mask, e->x, e->y, e->w, e->h, e->border, e->abovewin, e->detail); @@ -1567,22 +1565,27 @@ { if (e->detail == ECORE_X_WINDOW_STACK_ABOVE) { + printf("config raise\n"); e_border_raise(bd); } else if (e->detail == ECORE_X_WINDOW_STACK_BELOW) { + printf("config lower\n"); e_border_lower(bd); } else if (e->detail == ECORE_X_WINDOW_STACK_TOP_IF) { + printf("config topif\n"); /* FIXME: do */ } else if (e->detail == ECORE_X_WINDOW_STACK_BOTTOM_IF) { + printf("config bottomif\n"); /* FIXME: do */ } else if (e->detail == ECORE_X_WINDOW_STACK_OPPOSITE) { + printf("config opposite\n"); /* FIXME: do */ } } @@ -1880,83 +1883,7 @@ if (!bd) return 1; printf("State: 0x%x %d %d\n", bd->client.win, e->state[0], e->state[1]); for (i = 0; i < 2; i++) - { - int set; - - if (e->state[i] != ECORE_X_WINDOW_STATE_UNKNOWN) - { - switch (e->action) - { - case ECORE_X_WINDOW_STATE_ACTION_REMOVE: - ecore_x_netwm_window_state_set(bd->client.win, e->state[i], 0); - set = 0; - break; - case ECORE_X_WINDOW_STATE_ACTION_ADD: - ecore_x_netwm_window_state_set(bd->client.win, e->state[i], 1); - set = 1; - break; - case ECORE_X_WINDOW_STATE_ACTION_TOGGLE: - if (ecore_x_netwm_window_state_isset(bd->client.win, e->state[i])) - { - ecore_x_netwm_window_state_set(bd->client.win, e->state[i], 0); - set = 0; - } - else - { - ecore_x_netwm_window_state_set(bd->client.win, e->state[i], 1); - set = 1; - } - break; - } - - if (e->state[i] == ECORE_X_WINDOW_STATE_ABOVE) - { - if (set) - { - bd->layer = 150; - bd->client.netwm.state.stacking = 1; - } - else - { - bd->layer = 100; - bd->client.netwm.state.stacking = 0; - } - e_border_raise(bd); - } - else if (e->state[i] == ECORE_X_WINDOW_STATE_BELOW) - { - if (set) - { - bd->layer = 50; - bd->client.netwm.state.stacking = 2; - } - else - { - bd->layer = 100; - bd->client.netwm.state.stacking = 0; - } - e_border_raise(bd); - } - else if (e->state[i] == ECORE_X_WINDOW_STATE_FULLSCREEN) - { - if (set) - { - bd->layer = 200; - bd->client.netwm.state.fullscreen = 1; - - e_border_fullscreen(bd); - } - else - { - bd->layer = 100; - bd->client.netwm.state.fullscreen = 0; - - e_border_unfullscreen(bd); - } - e_border_raise(bd); - } - } - } + e_hints_window_state_update(bd, e->state[i], e->action); return 1; } =================================================================== RCS file: /cvsroot/enlightenment/e17/apps/e/src/bin/e_border.h,v retrieving revision 1.41 retrieving revision 1.42 diff -u -3 -r1.41 -r1.42 --- e_border.h 30 Apr 2005 07:03:35 -0000 1.41 +++ e_border.h 2 May 2005 09:19:55 -0000 1.42 @@ -334,6 +334,8 @@ EAPI void e_border_unshade(E_Border *bd, E_Direction dir); EAPI void e_border_maximize(E_Border *bd); EAPI void e_border_unmaximize(E_Border *bd); +EAPI void e_border_fullscreen(E_Border *bd); +EAPI void e_border_unfullscreen(E_Border *bd); EAPI void e_border_iconify(E_Border *bd); EAPI void e_border_uniconify(E_Border *bd); EAPI void e_border_stick(E_Border *bd); =================================================================== RCS file: /cvsroot/enlightenment/e17/apps/e/src/bin/e_hints.c,v retrieving revision 1.16 retrieving revision 1.17 diff -u -3 -r1.16 -r1.17 --- e_hints.c 29 Apr 2005 11:08:04 -0000 1.16 +++ e_hints.c 2 May 2005 09:19:55 -0000 1.17 @@ -262,8 +262,6 @@ bd->layer = 150; else if (bd->client.netwm.type == ECORE_X_WINDOW_TYPE_DOCK) bd->layer = 150; - else if (bd->client.netwm.state.fullscreen) - bd->layer = 200; else bd->layer = 100; e_container_window_raise(bd->zone->container, bd->win, bd->layer); @@ -274,6 +272,8 @@ e_border_shade(bd, e_hints_window_shade_direction_get(bd)); if (bd->client.netwm.state.maximized_v && bd->client.netwm.state.maximized_h) e_border_maximize(bd); + if (bd->client.netwm.state.fullscreen) + e_border_fullscreen(bd); if (bd->client.icccm.state == ECORE_X_WINDOW_STATE_HINT_ICONIC) e_border_iconify(bd); /* If a window isn't iconic, and is one the current desk, @@ -330,6 +330,382 @@ } void +e_hints_window_state_update(E_Border *bd, Ecore_X_Window_State state, + Ecore_X_Window_State_Action action) +{ + int changed; + + switch (state) + { + case ECORE_X_WINDOW_STATE_ICONIFIED: + if (action != ECORE_X_WINDOW_STATE_ACTION_ADD) return; + if (bd->client.icccm.state == ECORE_X_WINDOW_STATE_HINT_ICONIC) return; + e_border_iconify(bd); + break; + case ECORE_X_WINDOW_STATE_MODAL: + changed = 0; + switch (action) + { + case ECORE_X_WINDOW_STATE_ACTION_REMOVE: + if (bd->client.netwm.state.modal) + { + bd->client.netwm.state.modal = 0; + changed = 1; + } + break; + case ECORE_X_WINDOW_STATE_ACTION_ADD: + if (!bd->client.netwm.state.modal) + { + bd->client.netwm.state.modal = 1; + changed = 1; + } + break; + case ECORE_X_WINDOW_STATE_ACTION_TOGGLE: + bd->client.netwm.state.modal = !bd->client.netwm.state.modal; + changed = 1; + break; + } + if (changed) + { + ecore_x_netwm_window_state_set(bd->client.win, + ECORE_X_WINDOW_STATE_MODAL, + bd->client.netwm.state.modal); + } + break; + case ECORE_X_WINDOW_STATE_STICKY: + changed = 0; + switch (action) + { + case ECORE_X_WINDOW_STATE_ACTION_REMOVE: + if (bd->client.netwm.state.sticky) + { + bd->client.netwm.state.sticky = 0; + changed = 1; + } + break; + case ECORE_X_WINDOW_STATE_ACTION_ADD: + if (!bd->client.netwm.state.sticky) + { + bd->client.netwm.state.sticky = 1; + changed = 1; + } + break; + case ECORE_X_WINDOW_STATE_ACTION_TOGGLE: + bd->client.netwm.state.sticky = !bd->client.netwm.state.sticky; + changed = 1; + break; + } + if (changed) + { + ecore_x_netwm_window_state_set(bd->client.win, + ECORE_X_WINDOW_STATE_STICKY, + bd->client.netwm.state.sticky); + if (bd->client.netwm.state.sticky) + e_border_stick(bd); + else + e_border_unstick(bd); + } + break; + case ECORE_X_WINDOW_STATE_MAXIMIZED_VERT: + changed = 0; + switch (action) + { + case ECORE_X_WINDOW_STATE_ACTION_REMOVE: + if (bd->client.netwm.state.maximized_v) + { + bd->client.netwm.state.maximized_v = 0; + changed = 1; + } + break; + case ECORE_X_WINDOW_STATE_ACTION_ADD: + if (!bd->client.netwm.state.maximized_v) + { + bd->client.netwm.state.maximized_v = 1; + changed = 1; + } + break; + case ECORE_X_WINDOW_STATE_ACTION_TOGGLE: + bd->client.netwm.state.maximized_v = !bd->client.netwm.state.maximized_v; + changed = 1; + break; + } + if (changed) + { + ecore_x_netwm_window_state_set(bd->client.win, + ECORE_X_WINDOW_STATE_MAXIMIZED_VERT, + bd->client.netwm.state.maximized_v); + if ((bd->client.netwm.state.maximized_v) + && (bd->client.netwm.state.maximized_h)) + e_border_maximize(bd); + else if ((!bd->client.netwm.state.maximized_v) + && (!bd->client.netwm.state.maximized_h)) + e_border_unmaximize(bd); + } + break; + case ECORE_X_WINDOW_STATE_MAXIMIZED_HORZ: + changed = 0; + switch (action) + { + case ECORE_X_WINDOW_STATE_ACTION_REMOVE: + if (bd->client.netwm.state.maximized_h) + { + bd->client.netwm.state.maximized_h = 0; + changed = 1; + } + break; + case ECORE_X_WINDOW_STATE_ACTION_ADD: + if (!bd->client.netwm.state.maximized_h) + { + bd->client.netwm.state.maximized_h = 1; + changed = 1; + } + break; + case ECORE_X_WINDOW_STATE_ACTION_TOGGLE: + bd->client.netwm.state.maximized_h = !bd->client.netwm.state.maximized_h; + changed = 1; + break; + } + if (changed) + { + ecore_x_netwm_window_state_set(bd->client.win, + ECORE_X_WINDOW_STATE_MAXIMIZED_HORZ, + bd->client.netwm.state.maximized_h); + if ((bd->client.netwm.state.maximized_v) + && (bd->client.netwm.state.maximized_h)) + e_border_maximize(bd); + else if ((!bd->client.netwm.state.maximized_v) + && (!bd->client.netwm.state.maximized_h)) + e_border_unmaximize(bd); + } + break; + case ECORE_X_WINDOW_STATE_SHADED: + changed = 0; + switch (action) + { + case ECORE_X_WINDOW_STATE_ACTION_REMOVE: + if (bd->client.netwm.state.shaded) + { + bd->client.netwm.state.shaded = 0; + changed = 1; + } + break; + case ECORE_X_WINDOW_STATE_ACTION_ADD: + if (!bd->client.netwm.state.shaded) + { + bd->client.netwm.state.shaded = 1; + changed = 1; + } + break; + case ECORE_X_WINDOW_STATE_ACTION_TOGGLE: + bd->client.netwm.state.shaded = !bd->client.netwm.state.shaded; + changed = 1; + break; + } + if (changed) + { + ecore_x_netwm_window_state_set(bd->client.win, + ECORE_X_WINDOW_STATE_SHADED, + bd->client.netwm.state.shaded); + if (bd->client.netwm.state.shaded) + e_border_shade(bd, e_hints_window_shade_direction_get(bd)); + else + e_border_unshade(bd, e_hints_window_shade_direction_get(bd)); + } + break; + case ECORE_X_WINDOW_STATE_SKIP_TASKBAR: + changed = 0; + switch (action) + { + case ECORE_X_WINDOW_STATE_ACTION_REMOVE: + if (bd->client.netwm.state.skip_taskbar) + { + bd->client.netwm.state.skip_taskbar = 0; + changed = 1; + } + break; + case ECORE_X_WINDOW_STATE_ACTION_ADD: + if (!bd->client.netwm.state.skip_taskbar) + { + bd->client.netwm.state.skip_taskbar = 1; + changed = 1; + } + break; + case ECORE_X_WINDOW_STATE_ACTION_TOGGLE: + bd->client.netwm.state.skip_taskbar = !bd->client.netwm.state.skip_taskbar; + changed = 1; + break; + } + if (changed) + { + ecore_x_netwm_window_state_set(bd->client.win, + ECORE_X_WINDOW_STATE_SKIP_TASKBAR, + bd->client.netwm.state.skip_taskbar); + } + break; + case ECORE_X_WINDOW_STATE_SKIP_PAGER: + changed = 0; + switch (action) + { + case ECORE_X_WINDOW_STATE_ACTION_REMOVE: + if (bd->client.netwm.state.skip_pager) + { + bd->client.netwm.state.skip_pager = 0; + changed = 1; + } + break; + case ECORE_X_WINDOW_STATE_ACTION_ADD: + if (!bd->client.netwm.state.skip_pager) + { + bd->client.netwm.state.skip_pager = 1; + changed = 1; + } + break; + case ECORE_X_WINDOW_STATE_ACTION_TOGGLE: + bd->client.netwm.state.skip_pager = !bd->client.netwm.state.skip_pager; + changed = 1; + break; + } + if (changed) + { + /* FIXME, we have a pager, care about this! */ + ecore_x_netwm_window_state_set(bd->client.win, + ECORE_X_WINDOW_STATE_SKIP_PAGER, + bd->client.netwm.state.skip_pager); + } + break; + case ECORE_X_WINDOW_STATE_HIDDEN: + /* Ignore */ + break; + case ECORE_X_WINDOW_STATE_FULLSCREEN: + changed = 0; + switch (action) + { + case ECORE_X_WINDOW_STATE_ACTION_REMOVE: + if (bd->client.netwm.state.fullscreen) + { + bd->client.netwm.state.fullscreen = 0; + changed = 1; + } + break; + case ECORE_X_WINDOW_STATE_ACTION_ADD: + if (!bd->client.netwm.state.fullscreen) + { + bd->client.netwm.state.fullscreen = 1; + changed = 1; + } + break; + case ECORE_X_WINDOW_STATE_ACTION_TOGGLE: + bd->client.netwm.state.fullscreen = !bd->client.netwm.state.fullscreen; + changed = 1; + break; + } + if (changed) + { + ecore_x_netwm_window_state_set(bd->client.win, + ECORE_X_WINDOW_STATE_FULLSCREEN, + bd->client.netwm.state.fullscreen); + if (bd->client.netwm.state.fullscreen) + e_border_fullscreen(bd); + else + e_border_unfullscreen(bd); + } + break; + case ECORE_X_WINDOW_STATE_ABOVE: + changed = 0; + switch (action) + { + case ECORE_X_WINDOW_STATE_ACTION_REMOVE: + if (bd->client.netwm.state.stacking == 1) + { + bd->client.netwm.state.stacking = 0; + changed = 1; + } + break; + case ECORE_X_WINDOW_STATE_ACTION_ADD: + if (bd->client.netwm.state.stacking == 0) + { + bd->client.netwm.state.stacking = 1; + changed = 1; + } + break; + case ECORE_X_WINDOW_STATE_ACTION_TOGGLE: + if (bd->client.netwm.state.stacking == 1) + { + bd->client.netwm.state.stacking = 0; + changed = 1; + } + else if (bd->client.netwm.state.stacking == 0) + { + bd->client.netwm.state.stacking = 1; + changed = 1; + } + break; + } + if (changed) + { + ecore_x_netwm_window_state_set(bd->client.win, + ECORE_X_WINDOW_STATE_ABOVE, + bd->client.netwm.state.stacking); + if (bd->client.netwm.state.stacking) + bd->layer = 150; + else + bd->layer = 100; + e_border_raise(bd); + } + break; + case ECORE_X_WINDOW_STATE_BELOW: + changed = 0; + switch (action) + { + case ECORE_X_WINDOW_STATE_ACTION_REMOVE: + if (bd->client.netwm.state.stacking == 2) + { + bd->client.netwm.state.stacking = 0; + changed = 1; + } + break; + case ECORE_X_WINDOW_STATE_ACTION_ADD: + if (bd->client.netwm.state.stacking == 0) + { + bd->client.netwm.state.stacking = 2; + changed = 1; + } + break; + case ECORE_X_WINDOW_STATE_ACTION_TOGGLE: + if (bd->client.netwm.state.stacking == 2) + { + bd->client.netwm.state.stacking = 0; + changed = 1; + } + else if (bd->client.netwm.state.stacking == 0) + { + bd->client.netwm.state.stacking = 2; + changed = 1; + } + break; + } + if (changed) + { + ecore_x_netwm_window_state_set(bd->client.win, + ECORE_X_WINDOW_STATE_BELOW, + bd->client.netwm.state.stacking); + if (bd->client.netwm.state.stacking) + bd->layer = 50; + else + bd->layer = 100; + e_border_raise(bd); + } + break; + case ECORE_X_WINDOW_STATE_DEMANDS_ATTENTION: + /* FIXME */ + break; + case ECORE_X_WINDOW_STATE_UNKNOWN: + /* Ignore */ + break; + } +} + +void e_hints_window_state_get(E_Border *bd) { int above, below; =================================================================== RCS file: /cvsroot/enlightenment/e17/apps/e/src/bin/e_hints.h,v retrieving revision 1.10 retrieving revision 1.11 diff -u -3 -r1.10 -r1.11 --- e_hints.h 29 Apr 2005 08:37:09 -0000 1.10 +++ e_hints.h 2 May 2005 09:19:55 -0000 1.11 @@ -23,6 +23,9 @@ EAPI void e_hints_window_type_set(E_Border *bd); EAPI void e_hints_window_type_get(E_Border *bd); +EAPI void e_hints_window_state_update(E_Border *bd, Ecore_X_Window_State state, + Ecore_X_Window_State_Action action); + EAPI void e_hints_window_visible_set(E_Border *bd); EAPI void e_hints_window_iconic_set(E_Border *bd); EAPI void e_hints_window_hidden_set(E_Border *bd); =================================================================== RCS file: /cvsroot/enlightenment/e17/apps/e/src/bin/e_int_menus.c,v retrieving revision 1.54 retrieving revision 1.55 diff -u -3 -r1.54 -r1.55 --- e_int_menus.c 2 May 2005 06:48:38 -0000 1.54 +++ e_int_menus.c 2 May 2005 09:19:55 -0000 1.55 @@ -3,8 +3,6 @@ */ #include "e.h" -extern E_Config *e_config; - typedef struct _Main_Data Main_Data; struct _Main_Data @@ -607,7 +605,6 @@ for (l = e_config->themes; l; l = l->next) { E_Config_Theme *et; - char buf[256]; et = l->data; if (!strcmp(et->category, "theme")) ------------------------------------------------------- This SF.Net email is sponsored by: NEC IT Guy Games. Get your fingers limbered up and give it your best shot. 4 great events, 4 opportunities to win big! Highest score wins.NEC IT Guy Games. Play to win an NEC 61 plasma display. Visit http://www.necitguy.com/?r=20 _______________________________________________ enlightenment-cvs mailing list enlightenment-cvs@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/enlightenment-cvs