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_config.c e_config.h e_desk.c e_hints.c e_int_border_menu.c e_ipc_handlers.h e_ipc_handlers_list.h Log Message: Fullscreen policy. Not tested since my stupid laptop only has one res. Please test. =================================================================== RCS file: /cvsroot/enlightenment/e17/apps/e/src/bin/e_border.c,v retrieving revision 1.459 retrieving revision 1.460 diff -u -3 -r1.459 -r1.460 --- e_border.c 4 Nov 2005 22:16:22 -0000 1.459 +++ e_border.c 4 Nov 2005 23:30:18 -0000 1.460 @@ -111,6 +111,8 @@ static Evas_List *focus_stack = NULL; +static Ecore_X_Screen_Size screen_size = { -1, -1 }; + int E_EVENT_BORDER_ADD = 0; int E_EVENT_BORDER_REMOVE = 0; int E_EVENT_BORDER_ZONE_SET = 0; @@ -1591,16 +1593,11 @@ } } void -e_border_fullscreen(E_Border *bd) +e_border_fullscreen(E_Border *bd, E_Fullscreen policy) { E_OBJECT_CHECK(bd); E_OBJECT_TYPE_CHECK(bd, E_BORDER_TYPE); - /* FIXME: - * Implement both fullscreen modes! - * Black background! - */ - if ((bd->shaded) || (bd->shading)) return; if (bd->maximized) e_border_unmaximize(bd); @@ -1639,7 +1636,53 @@ y = y + (bd->zone->h - h) / 2; e_border_move_resize(bd, x, y, w, h); #endif - e_border_move_resize(bd, bd->zone->x, bd->zone->y, bd->zone->w, bd->zone->h); + if ((evas_list_count(bd->zone->container->zones) > 1) || (policy == E_FULLSCREEN_RESIZE)) + { + e_border_move_resize(bd, bd->zone->x, bd->zone->y, bd->zone->w, bd->zone->h); + } + else if (policy == E_FULLSCREEN_ZOOM) + { + Ecore_X_Screen_Size *sizes; + int num_sizes, i; + + screen_size = ecore_x_randr_current_screen_size_get(bd->zone->container->manager->root); + sizes = ecore_x_randr_screen_sizes_get(bd->zone->container->manager->root, &num_sizes); + if (sizes) + { + Ecore_X_Screen_Size best_size = { -1, -1 }; + int best_dist = INT_MAX, dist; + + for (i = 0; i < num_sizes; i++) + { + if ((sizes[i].width > bd->w) && (sizes[i].height > bd->h)) + { + dist = (sizes[i].width * sizes[i].height) - (bd->w * bd->h); + if (dist < best_dist) + { + best_size = sizes[i]; + best_dist = dist; + } + } + } + if (((best_size.width != -1) && (best_size.height != -1)) && + ((best_size.width != screen_size.width) || + (best_size.height != screen_size.height))) + { + ecore_x_randr_screen_size_set(bd->zone->container->manager->root, + best_size); + e_border_move_resize(bd, 0, 0, best_size.width, best_size.height); + } + else + { + screen_size.width = -1; + screen_size.height = -1; + e_border_move_resize(bd, 0, 0, bd->zone->w, bd->zone->h); + } + free(sizes); + } + else + e_border_move_resize(bd, bd->zone->x, bd->zone->y, bd->zone->w, bd->zone->h); + } ecore_evas_hide(bd->bg_ecore_evas); bd->fullscreen = 1; @@ -1667,6 +1710,12 @@ /* e_zone_fullscreen_set(bd->zone, 0); */ + if ((screen_size.width != -1) && (screen_size.height != -1)) + { + ecore_x_randr_screen_size_set(bd->zone->container->manager->root, screen_size); + screen_size.width = -1; + screen_size.height = -1; + } e_border_move_resize(bd, bd->saved.x, bd->saved.y, bd->saved.w, bd->saved.h); ecore_evas_show(bd->bg_ecore_evas); =================================================================== RCS file: /cvsroot/enlightenment/e17/apps/e/src/bin/e_border.h,v retrieving revision 1.123 retrieving revision 1.124 diff -u -3 -r1.123 -r1.124 --- e_border.h 3 Nov 2005 06:17:08 -0000 1.123 +++ e_border.h 4 Nov 2005 23:30:18 -0000 1.124 @@ -504,7 +504,7 @@ EAPI void e_border_unshade(E_Border *bd, E_Direction dir); EAPI void e_border_maximize(E_Border *bd, E_Maximize max); EAPI void e_border_unmaximize(E_Border *bd); -EAPI void e_border_fullscreen(E_Border *bd); +EAPI void e_border_fullscreen(E_Border *bd, E_Fullscreen policy); EAPI void e_border_unfullscreen(E_Border *bd); EAPI void e_border_iconify(E_Border *bd); EAPI void e_border_uniconify(E_Border *bd); =================================================================== RCS file: /cvsroot/enlightenment/e17/apps/e/src/bin/e_config.c,v retrieving revision 1.121 retrieving revision 1.122 diff -u -3 -r1.121 -r1.122 --- e_config.c 23 Oct 2005 04:56:51 -0000 1.121 +++ e_config.c 4 Nov 2005 23:30:18 -0000 1.122 @@ -359,6 +359,7 @@ E_CONFIG_VAL(D, T, menu_eap_name_show, INT); /**/ E_CONFIG_VAL(D, T, menu_eap_generic_show, INT); /**/ E_CONFIG_VAL(D, T, menu_eap_comment_show, INT); /**/ + E_CONFIG_VAL(D, T, fullscreen_policy, INT); /**/ E_CONFIG_VAL(D, T, input_method, STR); /**/ E_CONFIG_LIST(D, T, path_append_input_methods, _e_config_path_append_edd); /**/ @@ -489,6 +490,7 @@ e_config->menu_eap_name_show = 1; e_config->menu_eap_generic_show = 1; e_config->menu_eap_comment_show = 0; + e_config->fullscreen_policy = E_FULLSCREEN_RESIZE; e_config->input_method = NULL; { =================================================================== RCS file: /cvsroot/enlightenment/e17/apps/e/src/bin/e_config.h,v retrieving revision 1.62 retrieving revision 1.63 diff -u -3 -r1.62 -r1.63 --- e_config.h 23 Oct 2005 04:56:51 -0000 1.62 +++ e_config.h 4 Nov 2005 23:30:18 -0000 1.63 @@ -187,6 +187,7 @@ int menu_eap_name_show; int menu_eap_generic_show; int menu_eap_comment_show; + int fullscreen_policy; }; struct _E_Config_Module =================================================================== RCS file: /cvsroot/enlightenment/e17/apps/e/src/bin/e_desk.c,v retrieving revision 1.52 retrieving revision 1.53 diff -u -3 -r1.52 -r1.53 --- e_desk.c 16 Oct 2005 05:59:18 -0000 1.52 +++ e_desk.c 4 Nov 2005 23:30:18 -0000 1.53 @@ -219,7 +219,7 @@ e_border_show(bd); if (bd->want_fullscreen) { - e_border_fullscreen(bd); + e_border_fullscreen(bd, e_config->fullscreen_policy); bd->want_fullscreen = 0; } } =================================================================== RCS file: /cvsroot/enlightenment/e17/apps/e/src/bin/e_hints.c,v retrieving revision 1.78 retrieving revision 1.79 diff -u -3 -r1.78 -r1.79 --- e_hints.c 28 Oct 2005 09:23:54 -0000 1.78 +++ e_hints.c 4 Nov 2005 23:30:18 -0000 1.79 @@ -449,7 +449,7 @@ if (!bd->lock_client_fullscreen) { e_hints_window_size_get(bd); - e_border_fullscreen(bd); + e_border_fullscreen(bd, e_config->fullscreen_policy); } else e_hints_window_fullscreen_set(bd, 0); @@ -752,13 +752,13 @@ e_border_unfullscreen(bd); break; case ECORE_X_WINDOW_STATE_ACTION_ADD: - e_border_fullscreen(bd); + e_border_fullscreen(bd, e_config->fullscreen_policy); break; case ECORE_X_WINDOW_STATE_ACTION_TOGGLE: if (bd->fullscreen) e_border_unfullscreen(bd); else - e_border_fullscreen(bd); + e_border_fullscreen(bd, e_config->fullscreen_policy); break; } break; =================================================================== RCS file: /cvsroot/enlightenment/e17/apps/e/src/bin/e_int_border_menu.c,v retrieving revision 1.3 retrieving revision 1.4 diff -u -3 -r1.3 -r1.4 --- e_int_border_menu.c 31 Oct 2005 10:27:06 -0000 1.3 +++ e_int_border_menu.c 4 Nov 2005 23:30:18 -0000 1.4 @@ -538,7 +538,7 @@ { toggle = e_menu_item_toggle_get(mi); if (toggle) - e_border_fullscreen(bd); + e_border_fullscreen(bd, e_config->fullscreen_policy); else e_border_unfullscreen(bd); } =================================================================== RCS file: /cvsroot/enlightenment/e17/apps/e/src/bin/e_ipc_handlers.h,v retrieving revision 1.104 retrieving revision 1.105 diff -u -3 -r1.104 -r1.105 --- e_ipc_handlers.h 4 Nov 2005 07:49:12 -0000 1.104 +++ e_ipc_handlers.h 4 Nov 2005 23:30:18 -0000 1.105 @@ -6857,3 +6857,54 @@ #undef HDL /****************************************************************************/ +#define HDL E_IPC_OP_FULLSCREEN_POLICY_SET +#if (TYPE == E_REMOTE_OPTIONS) + OP("-fullscreen-policy-set", 1, "Set the fullscreen policy. OPT1 = RESIZE or ZOOM", 0, HDL) +#elif (TYPE == E_REMOTE_OUT) + REQ_INT_START(HDL) + int value = 0; + if (!strcmp(params[0], "RESIZE")) value = E_FULLSCREEN_RESIZE; + else if (!strcmp(params[0], "ZOOM")) value = E_FULLSCREEN_ZOOM; + else + { + printf("fullscreen must be RESIZE or ZOOM\n"); + exit(-1); + } + REQ_INT_END(value, HDL); +#elif (TYPE == E_WM_IN) + START_INT(value, HDL); + e_config->fullscreen_policy = value; + E_CONFIG_LIMIT(e_config->fullscreen_policy, E_FULLSCREEN_RESIZE, E_FULLSCREEN_ZOOM); + SAVE; + END_INT +#elif (TYPE == E_REMOTE_IN) +#endif +#undef HDL + +/****************************************************************************/ +#define HDL E_IPC_OP_FULLSCREEN_POLICY_GET +#if (TYPE == E_REMOTE_OPTIONS) + OP("-fullscreen-policy-get", 0, "Get fullscreen policy", 1, HDL) +#elif (TYPE == E_REMOTE_OUT) + REQ_NULL(HDL); +#elif (TYPE == E_WM_IN) + SEND_INT(e_config->fullscreen_policy, E_IPC_OP_FULLSCREEN_POLICY_GET_REPLY, HDL); +#elif (TYPE == E_REMOTE_IN) +#endif +#undef HDL + +/****************************************************************************/ +#define HDL E_IPC_OP_FULLSCREEN_POLICY_GET_REPLY +#if (TYPE == E_REMOTE_OPTIONS) +#elif (TYPE == E_REMOTE_OUT) +#elif (TYPE == E_WM_IN) +#elif (TYPE == E_REMOTE_IN) + START_INT(policy, HDL); + if (policy == E_FULLSCREEN_RESIZE) + printf("REPLY: RESIZE\n"); + else if (policy == E_FULLSCREEN_ZOOM) + printf("REPLY: ZOOM\n"); + END_INT +#endif +#undef HDL +/****************************************************************************/ =================================================================== RCS file: /cvsroot/enlightenment/e17/apps/e/src/bin/e_ipc_handlers_list.h,v retrieving revision 1.36 retrieving revision 1.37 diff -u -3 -r1.36 -r1.37 --- e_ipc_handlers_list.h 15 Oct 2005 10:49:54 -0000 1.36 +++ e_ipc_handlers_list.h 4 Nov 2005 23:30:18 -0000 1.37 @@ -334,4 +334,7 @@ #define E_IPC_OP_IM_SET 317 #define E_IPC_OP_IM_GET 318 #define E_IPC_OP_IM_GET_REPLY 319 - + +#define E_IPC_OP_FULLSCREEN_POLICY_SET 320 +#define E_IPC_OP_FULLSCREEN_POLICY_GET 321 +#define E_IPC_OP_FULLSCREEN_POLICY_GET_REPLY 322 ------------------------------------------------------- SF.Net email is sponsored by: Tame your development challenges with Apache's Geronimo App Server. Download it for free - -and be entered to win a 42" plasma tv or your very own Sony(tm)PSP. Click here to play: http://sourceforge.net/geronimo.php _______________________________________________ enlightenment-cvs mailing list enlightenment-cvs@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/enlightenment-cvs