else
new_y = bd->zone->y;
- if (e_config->window_placement_policy == E_WINDOW_PLACEMENT_SMART)
+ if ((e_config->window_placement_policy == E_WINDOW_PLACEMENT_SMART)||(e_config->window_placement_policy == E_WINDOW_PLACEMENT_ANTIGADGET))
{
skiplist = evas_list_append(skiplist, bd);
e_place_zone_region_smart(bd->zone, skiplist,
typedef enum _E_Window_Placement
{
E_WINDOW_PLACEMENT_SMART,
+ E_WINDOW_PLACEMENT_ANTIGADGET,
E_WINDOW_PLACEMENT_CURSOR,
E_WINDOW_PLACEMENT_MANUAL
} E_Window_Placement;
rg = e_widget_radio_group_new(&(cfdata->placement));
ob = e_widget_radio_add(evas, _("Smart Placement"), E_WINDOW_PLACEMENT_SMART, rg);
e_widget_framelist_object_append(of, ob);
+ ob = e_widget_radio_add(evas, _("Dont hide Gadgets"), E_WINDOW_PLACEMENT_ANTIGADGET, rg);
+ e_widget_framelist_object_append(of, ob);
ob = e_widget_radio_add(evas, _("Place at mouse pointer"), E_WINDOW_PLACEMENT_CURSOR, rg);
e_widget_framelist_object_append(of, ob);
ob = e_widget_radio_add(evas, _("Place manually with the mouse"), E_WINDOW_PLACEMENT_MANUAL, rg);
/****************************************************************************/
#define HDL E_IPC_OP_WINDOW_PLACEMENT_POLICY_SET
#if (TYPE == E_REMOTE_OPTIONS)
- OP("-window-placement-policy-set", 1, "Set the window placement policy. OPT1 = SMART, CURSOR or MANUAL", 0, HDL)
+ OP("-window-placement-policy-set", 1, "Set the window placement policy. OPT1 = SMART, ANTIGADGET, CURSOR or MANUAL", 0, HDL)
#elif (TYPE == E_REMOTE_OUT)
REQ_INT_START(HDL)
int value = 0;
if (!strcmp(params[0], "SMART")) value = E_WINDOW_PLACEMENT_SMART;
else if (!strcmp(params[0], "CURSOR")) value = E_WINDOW_PLACEMENT_CURSOR;
else if (!strcmp(params[0], "MANUAL")) value = E_WINDOW_PLACEMENT_MANUAL;
+ else if (!strcmp(params[0], "ANTIGADGET")) value = E_WINDOW_PLACEMENT_ANTIGADGET;
else
{
- printf("window placement policy must be SMART, CURSOR or MANUAL\n");
+ printf("window placement policy must be SMART, ANTIGADGET, CURSOR or MANUAL\n");
exit(-1);
}
REQ_INT_END(value, HDL);
x -= zone->x;
y -= zone->y;
+
+ if (e_config->window_placement_policy == E_WINDOW_PLACEMENT_ANTIGADGET)
+ {
+ Evas_List *l;
+ int cx1, cx2, cy1, cy2;
+
+ cx1 = zone->x;
+ cy1 = zone->y;
+ cx2 = zone->x + zone->w;
+ cy2 = zone->y + zone->h;
- zw = zone->w;
- zh = zone->h;
-
+ /* Find the smallest box */
+ for (l = zone->container->gadman->clients; l; l = l->next)
+ {
+ E_Gadman_Client *gmc;
+ double ax, ay;
+
+ gmc = l->data;
+ if ((gmc->zone != zone)) continue;
+
+ ax = gmc->ax;
+ ay = gmc->ay;
+
+ if (((ax == 0.0) || (ax == 1.0)) &&
+ ((ay == 0.0) || (ay == 1.0)))
+ {
+ /* corner gadget */
+ /* Fake removal from one alignment :) */
+ if (gmc->w > gmc->h)
+ ax = 0.5;
+ else
+ ay = 0.5;
+ }
+
+ if ((ax == 0.0) && (gmc->x + gmc->w) > cx1)
+ cx1 = (gmc->x + gmc->w);
+ else if ((ax == 1.0) && (gmc->x < cx2))
+ cx2 = gmc->x;
+ else if ((ay == 0.0) && ((gmc->y + gmc->h) > cy1))
+ cy1 = (gmc->y + gmc->h);
+ else if ((ay == 1.0) && (gmc->y < cy2))
+ cy2 = gmc->y;
+ }
+
+
+ zw = cx2 - cx1;
+ zh = cy2 - cy1;
+ }
+ else
+ {
+ zw = zone->w;
+ zh = zone->h;
+ }
u_x = calloc(zw + 1, sizeof(char));
u_y = calloc(zh + 1, sizeof(char));
{
for (i = 0; i < a_w - 1; i++)
{
- if ((a_x[i] < (zone->w - w)) &&
- (a_y[j] < (zone->h - h)))
+ if ((a_x[i] < (zw - w)) &&
+ (a_y[j] < (zh - h)))
{
int ar = 0;
goto done;
}
}
- if ((a_x[i + 1] - w > 0) && (a_y[j] < (zone->h - h)))
+ if ((a_x[i + 1] - w > 0) && (a_y[j] < (zh - h)))
{
int ar = 0;
goto done;
}
}
- if ((a_x[i] < (zone->w - w)) && (a_y[j + 1] - h > 0))
+ if ((a_x[i] < (zw - w)) && (a_y[j + 1] - h > 0))
{
int ar = 0;