Fullscreen policy. Not tested since my stupid laptop only has one res.

Please test.


SVN revision: 18303
This commit is contained in:
sebastid 2005-11-04 23:30:18 +00:00 committed by sebastid
parent 950363bc08
commit 61e273d0df
10 changed files with 124 additions and 14 deletions

View File

@ -209,6 +209,10 @@ _enlightenment_remote() {
COMPREPLY=($(compgen -W "${fonts}" -- "${cur}"))
return 0
;;
-fullscreen-policy-set)
COMPREPLY=($(compgen -W "RESIZE ZOOM" -- "${cur}"))
return 0
;;
-lang-set)
languages=$(enlightenment_remote -lang-list|grep REPLY:|awk '{print $2}')
COMPREPLY=($(compgen -W "${languages}" -- "${cur}"))

View File

@ -111,6 +111,8 @@ static int grabbed = 0;
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 @@ e_border_unmaximize(E_Border *bd)
}
}
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 @@ e_border_fullscreen(E_Border *bd)
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_border_unfullscreen(E_Border *bd)
/* 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);

View File

@ -504,7 +504,7 @@ EAPI void e_border_shade(E_Border *bd, E_Direction dir);
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);

View File

@ -359,6 +359,7 @@ e_config_init(void)
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_init(void)
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;
{

View File

@ -187,6 +187,7 @@ struct _E_Config
int menu_eap_name_show;
int menu_eap_generic_show;
int menu_eap_comment_show;
int fullscreen_policy;
};
struct _E_Config_Module

View File

@ -219,7 +219,7 @@ e_desk_show(E_Desk *desk)
e_border_show(bd);
if (bd->want_fullscreen)
{
e_border_fullscreen(bd);
e_border_fullscreen(bd, e_config->fullscreen_policy);
bd->want_fullscreen = 0;
}
}

View File

@ -449,7 +449,7 @@ e_hints_window_init(E_Border *bd)
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_hints_window_state_update(E_Border *bd, Ecore_X_Window_State state,
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;

View File

@ -538,7 +538,7 @@ _e_border_menu_cb_fullscreen(void *data, E_Menu *m, E_Menu_Item *mi)
{
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);
}

View File

@ -6857,3 +6857,54 @@ break;
#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
/****************************************************************************/

View File

@ -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