2 pending patches in my inbox.

1. "allow overlap" patch for modules - needs better names in the gui (Allow
windows to overlap maybe - as allow overlap is very vague)
2. itray module (buggy - buggy - beware. i know why. beware i said!)
3. TODO items


SVN revision: 19911
This commit is contained in:
Carsten Haitzler 2006-01-20 04:04:14 +00:00
parent d3d92eb719
commit 5f71f7acf5
40 changed files with 3349 additions and 143 deletions

4
TODO
View File

@ -8,6 +8,9 @@ Some of the things (in very short form) that need to be done to E17...
BUGS / FIXES
-------------------------------------------------------------------------------
* BUG: edge flip for desktops still active if turned off when dragging a window
off the desktop - either a separate config value (recommended) or turn it
off for window dragging too
* BUG: general settings is too... general
* BUG: desktop settings is missing preview
* BUG: modules need to destroy config dialogs on shutdown (otherwise - segv!)
@ -126,6 +129,7 @@ Some of the things (in very short form) that need to be done to E17...
"NICE TO HAVE" FEATURES
-------------------------------------------------------------------------------
* winlist and exebuf can let the mouse select items
* option to NOT raise on focus in click to focus
* switch to desktop of a new window if it opens on another desktop than the
current one

View File

@ -296,6 +296,7 @@ src/modules/battery/Makefile
src/modules/temperature/Makefile
src/modules/cpufreq/Makefile
src/modules/ibox/Makefile
src/modules/itray/Makefile
src/modules/start/Makefile
src/modules/randr/Makefile
src/preload/Makefile

View File

@ -28,6 +28,7 @@ default_temperature.edc \
default_error.edc \
default_cpufreq.edc \
default_ibox.edc \
default_itray.edc \
default_start.edc \
default_winlist.edc \
default_transitions.edc \

View File

@ -36,6 +36,7 @@ collections {
#include "default_error.edc"
#include "default_cpufreq.edc"
#include "default_ibox.edc"
#include "default_itray.edc"
#include "default_start.edc"
#include "default_winlist.edc"
#include "default_transitions.edc"

View File

@ -0,0 +1,275 @@
images {
image: "e17_ibar_bg_h.png" COMP;
image: "e17_ibar_bg_v.png" COMP;
image: "e17_ibar_lamp_d.png" COMP;
image: "e17_ibar_lamp_l.png" COMP;
image: "e17_ibar_lamp_r.png" COMP;
image: "e17_ibar_lamp_u.png" COMP;
image: "e17_ibar_over_h.png" COMP;
image: "e17_ibar_over_v.png" COMP;
}
group {
name: "modules/itray/main";
data {
// item: "item_list", "item item2 item3";
}
script {
public orient;
}
parts {
part {
name: "background";
mouse_events: 1;
description {
state: "default" 0.0;
rel1 {
to: "overlay";
}
rel2 {
to: "overlay";
}
image {
normal: "e17_ibar_bg_h.png";
border: 6 6 6 6;
}
fill {
smooth: 0;
}
}
description {
state: "vert" 0.0;
inherit: "default" 0.0;
image {
normal: "e17_ibar_bg_v.png";
}
}
}
part {
name: "items_clip";
type: RECT;
mouse_events: 0;
description {
state: "default" 0.0;
rel1 {
to: "background";
offset: 4 4;
}
rel2 {
to: "background";
offset: -5 -5;
}
color: 255 255 255 255;
}
}
part {
name: "items";
type: SWALLOW;
mouse_events: 0;
clip_to: "items_clip";
description {
state: "default" 0.0;
align: 0.5 0.5;
rel1 {
offset: 4 4;
}
rel2 {
offset: -5 -5;
}
color: 0 0 0 0;
}
description {
state: "top" 0.0;
inherit: "default" 0.0;
}
description {
state: "left" 0.0;
inherit: "default" 0.0;
}
description {
state: "right" 0.0;
inherit: "default" 0.0;
}
}
part {
name: "tray";
type: SWALLOW;
mouse_events: 0;
description {
state: "default" 0.0;
align: 0.5 0.5;
rel1 { offset: 7 6; }
rel2 { offset: -7 -6; }
color: 0 0 255 64;
}
}
part {
name: "overlay";
mouse_events: 0;
description {
state: "default" 0.0;
image {
normal: "e17_ibar_over_h.png";
border: 13 13 13 13;
middle: 0;
}
fill {
smooth: 0;
}
}
description {
state: "top" 0.0;
inherit: "default" 0.0;
}
description {
state: "left" 0.0;
inherit: "default" 0.0;
}
description {
state: "right" 0.0;
inherit: "default" 0.0;
}
}
part {
name: "inn";
type: RECT;
repeat_events: 1;
description {
state: "default" 0.0;
color: 0 0 0 0;
}
}
}
programs {
program {
name: "orient";
signal: "set_orientation";
source: "*";
script {
// sig, src
if (!strcmp(src, "left")) {
set_int(orient, 0);
set_state(PART:"background", "vert", 0.0);
set_state(PART:"overlay", "left", 0.0);
set_state(PART:"items", "left", 0.0);
}
else if (!strcmp(src, "right")) {
set_int(orient, 1);
set_state(PART:"background", "vert", 0.0);
set_state(PART:"overlay", "right", 0.0);
set_state(PART:"items", "right", 0.0);
}
else if (!strcmp(src, "top")) {
set_int(orient, 2);
set_state(PART:"background", "default", 0.0);
set_state(PART:"overlay", "top", 0.0);
set_state(PART:"items", "top", 0.0);
}
else if (!strcmp(src, "bottom")) {
set_int(orient, 3);
set_state(PART:"background", "default", 0.0);
set_state(PART:"overlay", "default", 0.0);
set_state(PART:"items", "default", 0.0);
}
}
}
}
}
group {
name: "modules/itray/follower";
min: 56 56;
data {
// item: "item_list", "item item2 item3";
}
parts {
part {
name: "top";
mouse_events: 0;
description {
state: "default" 0.0;
rel1 {
relative: 0.0 0.0;
offset: 0 -14;
}
rel2 {
relative: 1.0 0.0;
offset: -1 26;
}
image {
normal: "e17_ibar_lamp_d.png";
}
}
description {
state: "top" 0.0;
rel1 {
relative: 0.0 1.0;
offset: 0 -26;
}
rel2 {
relative: 1.0 1.0;
offset: -1 14;
}
image {
normal: "e17_ibar_lamp_u.png";
}
}
description {
state: "right" 0.0;
rel1 {
relative: 0.0 0.0;
offset: -14 0;
}
rel2 {
relative: 0.0 1.0;
offset: 26 -1;
}
image {
normal: "e17_ibar_lamp_r.png";
}
}
description {
state: "left" 0.0;
rel1 {
relative: 1.0 0.0;
offset: -26 0;
}
rel2 {
relative: 1.0 1.0;
offset: 14 -1;
}
image {
normal: "e17_ibar_lamp_l.png";
}
}
}
program {
name: "orient";
signal: "set_orientation";
source: "bottom";
action: STATE_SET "default" 0.0;
target: "top";
}
program {
name: "orient2";
signal: "set_orientation";
source: "top";
action: STATE_SET "top" 0.0;
target: "top";
}
program {
name: "orient3";
signal: "set_orientation";
source: "left";
action: STATE_SET "left" 0.0;
target: "top";
}
program {
name: "orient4";
signal: "set_orientation";
source: "right";
action: STATE_SET "right" 0.0;
target: "top";
}
}
}

View File

@ -1481,14 +1481,13 @@ e_border_maximize(E_Border *bd, E_Maximize max)
if ((bd->shaded) || (bd->shading)) return;
if (bd->fullscreen)
e_border_unfullscreen(bd);
if( bd->maximized == E_MAXIMIZE_VERTICAL && max == E_MAXIMIZE_VERTICAL )
if (bd->maximized == E_MAXIMIZE_VERTICAL && max == E_MAXIMIZE_VERTICAL)
; // ignore. we are already maximized vertical.
else if( bd->maximized == E_MAXIMIZE_HORIZONTAL && max == E_MAXIMIZE_HORIZONTAL )
else if (bd->maximized == E_MAXIMIZE_HORIZONTAL && max == E_MAXIMIZE_HORIZONTAL)
; // ignore. we are already maximized horizontaly.
else if ( ( bd->maximized == E_MAXIMIZE_NONE ||
bd->maximized == E_MAXIMIZE_VERTICAL ||
bd->maximized == E_MAXIMIZE_HORIZONTAL )
)
else if (( bd->maximized == E_MAXIMIZE_NONE ||
bd->maximized == E_MAXIMIZE_VERTICAL ||
bd->maximized == E_MAXIMIZE_HORIZONTAL))
{
int x1, y1, x2, y2;
int w, h;
@ -1499,13 +1498,13 @@ e_border_maximize(E_Border *bd, E_Maximize max)
return;
}
if( !bd->maximized ) // E_MAXIMIZE_NONE
{
bd->saved.x = bd->x;
bd->saved.y = bd->y;
bd->saved.w = bd->w;
bd->saved.h = bd->h;
}
if (!bd->maximized) // E_MAXIMIZE_NONE
{
bd->saved.x = bd->x;
bd->saved.y = bd->y;
bd->saved.w = bd->w;
bd->saved.h = bd->h;
}
e_hints_window_size_set(bd);
e_border_raise(bd);
@ -1582,13 +1581,13 @@ e_border_maximize(E_Border *bd, E_Maximize max)
e_border_move_resize(bd, x1, y1, w, h);
break;
case E_MAXIMIZE_VERTICAL:
x1 = bd->zone->x;
x1 = bd->x;
y1 = bd->zone->y;
x2 = bd->zone->x + bd->zone->w;
x2 = bd->x + bd->w;
y2 = bd->zone->y + bd->zone->h;
/* walk through all gadgets */
e_maximize_border_gadman_fill(bd, &x1, &y1, &x2, &y2);
e_maximize_border_gadman_fit(bd, &x1, &y1, &x2, &y2);
/* walk through docks and toolbars */
//e_maximize_border_dock_fit(bd, &x1, &y1, &x2, &y2);
@ -1604,12 +1603,12 @@ e_border_maximize(E_Border *bd, E_Maximize max)
break;
case E_MAXIMIZE_HORIZONTAL:
x1 = bd->zone->x;
y1 = bd->zone->y;
y1 = bd->y;
x2 = bd->zone->x + bd->zone->w;
y2 = bd->zone->y + bd->zone->h;
y2 = bd->y + bd->h;
/* walk through all gadgets */
e_maximize_border_gadman_fill(bd, &x1, &y1, &x2, &y2);
e_maximize_border_gadman_fit(bd, &x1, &y1, &x2, &y2);
/* walk through docks and toolbars */
//e_maximize_border_dock_fit(bd, &x1, &y1, &x2, &y2);
@ -1624,8 +1623,8 @@ e_border_maximize(E_Border *bd, E_Maximize max)
e_border_move_resize(bd,x1,y1,w,h);
break;
}
if( (bd->maximized == E_MAXIMIZE_HORIZONTAL && max == E_MAXIMIZE_VERTICAL) ||
(bd->maximized == E_MAXIMIZE_VERTICAL && max == E_MAXIMIZE_HORIZONTAL) )
if ((bd->maximized == E_MAXIMIZE_HORIZONTAL && max == E_MAXIMIZE_VERTICAL) ||
(bd->maximized == E_MAXIMIZE_VERTICAL && max == E_MAXIMIZE_HORIZONTAL))
bd->maximized = e_config->maximize_policy;
else
bd->maximized = max;
@ -1659,47 +1658,47 @@ e_border_unmaximize_vh(E_Border *bd, E_Maximize max)
case E_MAXIMIZE_SMART:
case E_MAXIMIZE_EXPAND:
case E_MAXIMIZE_FILL:
if( max == E_MAXIMIZE_VERTICAL )
{
bd->maximized = E_MAXIMIZE_NONE;
e_hints_window_maximized_set(bd, 0);
if (max == E_MAXIMIZE_VERTICAL)
{
bd->maximized = E_MAXIMIZE_NONE;
e_hints_window_maximized_set(bd, 0);
bd->maximized = E_MAXIMIZE_HORIZONTAL;
e_hints_window_maximized_set(bd, 1);
bd->maximized = E_MAXIMIZE_HORIZONTAL;
e_hints_window_maximized_set(bd, 1);
e_border_move_resize( bd, bd->x, bd->saved.y, bd->w, bd->saved.h);
e_hints_window_size_unset(bd);
e_border_move_resize(bd, bd->x, bd->saved.y, bd->w, bd->saved.h);
e_hints_window_size_unset(bd);
//edje_object_signal_emit(bd->bg_object, "unmaximize", "");
}
if( max == E_MAXIMIZE_HORIZONTAL )
{
bd->maximized = E_MAXIMIZE_NONE;
e_hints_window_maximized_set(bd, 0);
//edje_object_signal_emit(bd->bg_object, "unmaximize", "");
}
if (max == E_MAXIMIZE_HORIZONTAL)
{
bd->maximized = E_MAXIMIZE_NONE;
e_hints_window_maximized_set(bd, 0);
bd->maximized = E_MAXIMIZE_VERTICAL;
e_hints_window_maximized_set(bd, 1);
bd->maximized = E_MAXIMIZE_VERTICAL;
e_hints_window_maximized_set(bd, 1);
e_border_move_resize( bd, bd->saved.x, bd->y, bd->saved.w, bd->h);
e_hints_window_size_unset(bd);
e_border_move_resize(bd, bd->saved.x, bd->y, bd->saved.w, bd->h);
e_hints_window_size_unset(bd);
//edje_object_signal_emit(bd->bg_object, "unmaximize", "");
}
//edje_object_signal_emit(bd->bg_object, "unmaximize", "");
}
break;
case E_MAXIMIZE_VERTICAL:
if( max == E_MAXIMIZE_HORIZONTAL )
if (max == E_MAXIMIZE_HORIZONTAL)
; // do nothing in this case
if( max == E_MAXIMIZE_VERTICAL )
{
bd->maximized = E_MAXIMIZE_NONE;
e_hints_window_maximized_set(bd, 0);
if (max == E_MAXIMIZE_VERTICAL)
{
bd->maximized = E_MAXIMIZE_NONE;
e_hints_window_maximized_set(bd, 0);
e_border_move_resize( bd, bd->saved.x, bd->saved.y, bd->saved.w, bd->saved.h);
bd->saved.x = bd->saved.y = bd->saved.w = bd->saved.h = 0;
e_hints_window_size_unset(bd);
e_border_move_resize(bd, bd->saved.x, bd->saved.y, bd->saved.w, bd->saved.h);
bd->saved.x = bd->saved.y = bd->saved.w = bd->saved.h = 0;
e_hints_window_size_unset(bd);
edje_object_signal_emit(bd->bg_object, "unmaximize", "");
}
edje_object_signal_emit(bd->bg_object, "unmaximize", "");
}
break;
case E_MAXIMIZE_HORIZONTAL:
if( max == E_MAXIMIZE_VERTICAL )

View File

@ -13,7 +13,10 @@ typedef enum _E_Gadman_Policy
E_GADMAN_POLICY_HSIZE = 1 << 9,
E_GADMAN_POLICY_VSIZE = 1 << 10,
E_GADMAN_POLICY_HMOVE = 1 << 11,
E_GADMAN_POLICY_VMOVE = 1 << 12
E_GADMAN_POLICY_VMOVE = 1 << 12,
/* more extra flags */
E_GADMAN_POLICY_ALLOW_OVERLAP = 1 << 15,
E_GADMAN_POLICY_ALWAYS_ON_TOP = 1 << 16 // not used yet
} E_Gadman_Policy;
typedef enum _E_Gadman_Change

View File

@ -10,6 +10,15 @@ struct _E_Maximize_Rect
int x1, y1, x2, y2;
};
struct _m_zone
{
int x1;
int y1;
int x2;
int y2;
int area;
};
#define OBSTACLE(_x1, _y1, _x2, _y2) \
{ \
r = E_NEW(E_Maximize_Rect, 1); \
@ -19,61 +28,140 @@ struct _E_Maximize_Rect
static void _e_maximize_border_rects_fill(E_Border *bd, Evas_List *list, int *x1, int *y1, int *x2, int *y2);
static int _e_mzone_split(Evas_List **add_splits_to, struct _m_zone *mzone, E_Gadman_Client *gmc);
int _e_mzone_cb_square_reverse_sort(void *e1, void *e2);
int _e_mzone_cb_width_reverse_sort(void *e1, void *e2);
int _e_mzone_cb_height_reverse_sort(void *e1, void *e2); // not used yet
EAPI void
e_maximize_border_gadman_fit(E_Border *bd, int *x1, int *y1, int *x2, int *y2)
{
Evas_List *l;
int cx1, cx2, cy1, cy2;
int ii, jj;
Evas_List *l, *ll;
cx1 = bd->zone->x;
if (x1) cx1 = *x1;
cy1 = bd->zone->y;
if (y1) cy1 = *y1;
cx2 = bd->zone->x + bd->zone->w;
if (x2) cx2 = *x2;
Evas_List *mzones = NULL;
Evas_List *tmp_mzones = NULL;
cy2 = bd->zone->y + bd->zone->h;
if (y2) cy2 = *y2;
struct _m_zone *mzone = NULL;
struct _m_zone *mzone_split;
/* Find the smallest box */
for (l = bd->zone->container->gadman->clients; l; l = l->next)
{
E_Gadman_Client *gmc;
double ax, ay;
mzone = (struct _m_zone *)malloc(sizeof(struct _m_zone));
if (mzone == NULL)
return;
gmc = l->data;
if ((gmc->zone != bd->zone)) continue;
mzone->x1 = bd->zone->x;
if (x1) mzone->x1 = *x1;
ax = gmc->ax;
ay = gmc->ay;
mzone->y1 = bd->zone->y;
if (y1) mzone->y1 = *y1;
if (((ax == 0.0) || (ax == 1.0)) &&
((ay == 0.0) || (ay == 1.0)))
mzone->x2 = bd->zone->x + bd->zone->w;
if (x2) mzone->x2 = *x2;
mzone->y2 = bd->zone->y + bd->zone->h;
if (y2) mzone->y2 = *y2;
mzones = evas_list_append(mzones, mzone);
for(l = bd->zone->container->gadman->clients; l; l = l->next)
{
E_Gadman_Client *gmc;
gmc = l->data;
if (gmc->zone != bd->zone || gmc->policy & E_GADMAN_POLICY_ALLOW_OVERLAP) continue;
tmp_mzones = mzones;
mzones = NULL;
for (ll = tmp_mzones; ll; ll = ll->next)
{
int res;
mzone = ll->data;
res = _e_mzone_split(&mzones, mzone, gmc);
if (res == 0)
{
/* corner gadget */
/* Fake removal from one alignment :) */
if (gmc->w > gmc->h)
ax = 0.5;
else
ay = 0.5;
if(mzones == NULL)
mzones = evas_list_append(mzones, mzone);
else
evas_list_append(mzones , mzone);
ll->data = NULL;
}
else if (res == 2)
;
else if (res == -1)
; /* mem problems. Let ignor them yet */
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;
}
if (ll->data != NULL)
{
free(ll->data);
ll->data = NULL;
}
}
evas_list_free(tmp_mzones);
tmp_mzones = NULL;
}
if (x1) *x1 = cx1;
if (y1) *y1 = cy1;
if (x2) *x2 = cx2;
if (y2) *y2 = cy2;
for (l = mzones; l; l = l->next)
{
mzone = l->data;
mzone->area = (mzone->x2 - mzone->x1) * (mzone->y2 - mzone->y1);
}
tmp_mzones = evas_list_sort(mzones, evas_list_count(mzones), _e_mzone_cb_square_reverse_sort);
mzones = NULL;
mzones = evas_list_append(mzones, tmp_mzones->data);
for (l = tmp_mzones->next; l; l = l->next)
{
if ( ((struct _m_zone *)l->data)->area ==
((struct _m_zone *)mzones->data)->area)
evas_list_append(mzones, l->data);
else
free(l->data);
}
tmp_mzones = evas_list_free(tmp_mzones);
tmp_mzones = NULL;
if (mzones != NULL && mzones->next == NULL)
{
mzone = mzones->data;
*x1 = mzone->x1;
*y1 = mzone->y1;
*x2 = mzone->x2;
*y2 = mzone->y2;
}
else if (mzones != NULL && mzones->next != NULL)
{
Evas_List *wl = NULL, *hl = NULL;
/* The use of *_width_reverse_sort or *_height_reverse_sort depends
* on the preferences of the user - what window he/she would like to
* have: (i) maximized verticaly or (ii) horisontaly.
*/
wl = evas_list_sort(mzones, evas_list_count(mzones), _e_mzone_cb_width_reverse_sort);
mzones = NULL;
// hl = evas_list_sort(mzones, -1, _e_mzone_cb_height_reverse_sort);
mzone = wl->data;
//mzone = hl->data;
*x1 = mzone->x1;
*y1 = mzone->y1;
*x2 = mzone->x2;
*y2 = mzone->y2;
// evas_list_free( wl );
// evas_list_free( hl );
mzones = wl;
}
for (l = mzones; l ; l = l->next)
if (l->data != NULL)
free(l->data);
mzones = evas_list_free(mzones);
}
EAPI void
@ -302,3 +390,698 @@ _e_maximize_border_rects_fill(E_Border *bd, Evas_List *rects, int *x1, int *y1,
if (x2) *x2 = cx2;
if (y2) *y2 = cy2;
}
int _e_mzone_split(Evas_List **add_splits_to, struct _m_zone *mzone, E_Gadman_Client *gmc)
{
int ii;
int mzone_splitted = 0;
struct _m_zone *mzone_split = NULL;
if (mzone == NULL || gmc == NULL)
return -1;
if ((mzone->x2 - mzone->x1) <= 0 || (mzone->y2 - mzone->y1) <= 0)
return 1;
if (gmc->x > mzone->x1 && gmc->y > mzone->y1 &&
gmc->x + gmc->w < mzone->x2 && gmc->y + gmc->h < mzone->y2)
{
mzone_splitted = 1;
for (ii = 0; ii < 8; ii ++)
{
mzone_split = (struct _m_zone *)malloc(sizeof(struct _m_zone));
if(mzone_split == NULL)
return -1;
switch(ii)
{
case 0:
mzone_split->x1 = mzone->x1;
mzone_split->y1 = mzone->y1;
mzone_split->x2 = mzone->x2;
mzone_split->y2 = gmc->y;
break;
case 1:
mzone_split->x1 = gmc->x + gmc->w;
mzone_split->y1 = gmc->y;
mzone_split->x2 = mzone->x2;
mzone_split->y2 = gmc->y + gmc->h;
break;
case 2:
mzone_split->x1 = mzone->x1;
mzone_split->y1 = gmc->y + gmc->h;
mzone_split->x2 = mzone->x2;
mzone_split->y2 = mzone->y2;
break;
case 3:
mzone_split->x1 = mzone->x1;
mzone_split->y1 = gmc->y;
mzone_split->x2 = gmc->x;
mzone_split->y2 = gmc->y + gmc->h;
break;
case 4:
mzone_split->x1 = mzone->x1;
mzone_split->y1 = mzone->y1;
mzone_split->x2 = gmc->x;
mzone_split->y2 = mzone->y2;
break;
case 5:
mzone_split->x1 = gmc->x;
mzone_split->y1 = mzone->y1;
mzone_split->x2 = gmc->x + gmc->w;
mzone_split->y2 = gmc->y;
break;
case 6:
mzone_split->x1 = gmc->x + gmc->w;
mzone_split->y1 = mzone->y1;
mzone_split->x2 = mzone->x2;
mzone_split->y2 = mzone->y2;
break;
case 7:
mzone_split->x1 = gmc->x;
mzone_split->y1 = gmc->y + gmc->h;
mzone_split->x2 = gmc->x + gmc->w;
mzone_split->y2 = mzone->y2;
break;
}
if (*add_splits_to == NULL)
*add_splits_to = evas_list_append(*add_splits_to, mzone_split);
else
evas_list_append(*add_splits_to, mzone_split);
}
} // if
else if (gmc->x + gmc->w > mzone->x1 && gmc->x + gmc->w < mzone->x2 &&
gmc->y + gmc->h > mzone->y1 && gmc->y + gmc->h < mzone->y2 &&
gmc->x <= mzone->x1 && gmc->y <= mzone->y1)
{
mzone_splitted = 1;
for (ii = 0; ii < 4; ii ++)
{
mzone_split = (struct _m_zone *)malloc(sizeof(struct _m_zone));
if (mzone_split == NULL)
return -1;
switch(ii)
{
case 0:
mzone_split->x1 = gmc->x + gmc->w;
mzone_split->y1 = mzone->y1;
mzone_split->x2 = mzone->x2;
mzone_split->y2 = gmc->y + gmc->h;
break;
case 1:
mzone_split->x1 = mzone->x1;
mzone_split->y1 = gmc->y + gmc->h;
mzone_split->x2 = mzone->x2;
mzone_split->y2 = mzone->y2;
break;
case 2:
mzone_split->x1 = gmc->x + gmc->w;
mzone_split->y1 = mzone->y1;
mzone_split->x2 = mzone->x2;
mzone_split->y2 = mzone->y2;
break;
case 3:
mzone_split->x1 = mzone->x1;
mzone_split->y1 = gmc->y + gmc->h;
mzone_split->x2 = gmc->x + gmc->w;
mzone_split->y2 = mzone->y2;
break;
}
if (*add_splits_to == NULL)
*add_splits_to = evas_list_append(*add_splits_to, mzone_split);
else
evas_list_append(*add_splits_to, mzone_split);
}
}
else if (gmc->x > mzone->x1 && gmc->y <= mzone->y1 &&
gmc->x + gmc->w < mzone->x2 &&
gmc->y + gmc->h > mzone->y1 && gmc->y + gmc->h < mzone->y2)
{
mzone_splitted = 1;
for (ii = 0; ii < 6; ii ++)
{
mzone_split = (struct _m_zone *)malloc(sizeof(struct _m_zone));
if (mzone_split == NULL)
return -1;
switch(ii)
{
case 0:
mzone_split->x1 = mzone->x1;
mzone_split->y1 = mzone->y1;
mzone_split->x2 = gmc->x;
mzone_split->y2 = gmc->y + gmc->h;
break;
case 1:
mzone_split->x1 = gmc->x + gmc->w;
mzone_split->y1 = mzone->y1;
mzone_split->x2 = mzone->x2;
mzone_split->y2 = gmc->y + gmc->h;
break;
case 2:
mzone_split->x1 = mzone->x1;
mzone_split->y1 = gmc->y + gmc->h;
mzone_split->x2 = mzone->x2;
mzone_split->y2 = mzone->y2;
break;
case 3:
mzone_split->x1 = mzone->x1;
mzone_split->y1 = mzone->y1;
mzone_split->x2 = gmc->x;
mzone_split->y2 = mzone->y2;
break;
case 4:
mzone_split->x1 = gmc->x;
mzone_split->y1 = gmc->y + gmc->h;
mzone_split->x2 = gmc->x + gmc->w;
mzone_split->y2 = mzone->y2;
break;
case 5:
mzone_split->x1 = gmc->x + gmc->w;
mzone_split->y1 = mzone->y1;
mzone_split->x2 = mzone->x2;
mzone_split->y2 = mzone->y2;
break;
}
if (*add_splits_to == NULL)
*add_splits_to = evas_list_append(*add_splits_to, mzone_split);
else
evas_list_append(*add_splits_to, mzone_split);
}
}
else if (gmc->x > mzone->x1 && gmc->x < mzone->x2 &&
gmc->y + gmc->h > mzone->y1 && gmc->y + gmc->h < mzone->y2 &&
gmc->y <= mzone->y1 &&
gmc->x + gmc->w >= mzone->x2)
{
mzone_splitted = 1;
for (ii = 0; ii < 4; ii ++)
{
mzone_split = (struct _m_zone *)malloc(sizeof(struct _m_zone));
if (mzone_split == NULL)
return -1;
switch(ii)
{
case 0:
mzone_split->x1 = mzone->x1;
mzone_split->y1 = mzone->y1;
mzone_split->x2 = gmc->x;
mzone_split->y2 = gmc->y + gmc->h;
break;
case 1:
mzone_split->x1 = mzone->x1;
mzone_split->y1 = gmc->y + gmc->h;
mzone_split->x2 = mzone->x2;
mzone_split->y2 = mzone->y2;
break;
case 2:
mzone_split->x1 = mzone->x1;
mzone_split->y1 = mzone->y1;
mzone_split->x2 = gmc->x;
mzone_split->y2 = mzone->y2;
break;
case 3:
mzone_split->x1 = gmc->x;
mzone_split->y1 = gmc->y + gmc->h;
mzone_split->x2 = mzone->x2;
mzone_split->y2 = mzone->y2;
break;
}
if (*add_splits_to == NULL)
*add_splits_to = evas_list_append(*add_splits_to, mzone_split);
else
evas_list_append(*add_splits_to, mzone_split);
}
}
else if (gmc->x > mzone->x1 && gmc->x < mzone->x2 &&
gmc->y > mzone->y1 &&
gmc->y + gmc->h < mzone->y2 &&
gmc->x + gmc->w >= mzone->x2)
{
mzone_splitted = 1;
for (ii = 0; ii < 6; ii ++)
{
mzone_split = (struct _m_zone *)malloc(sizeof(struct _m_zone));
if (mzone_split == NULL)
return -1;
switch(ii)
{
case 0:
mzone_split->x1 = mzone->x1;
mzone_split->y1 = mzone->y1;
mzone_split->x2 = mzone->x2;
mzone_split->y2 = gmc->y;
break;
case 1:
mzone_split->x1 = mzone->x1;
mzone_split->y1 = gmc->y;
mzone_split->x2 = gmc->x;
mzone_split->y2 = gmc->y + gmc->h;
break;
case 2:
mzone_split->x1 = mzone->x1;
mzone_split->y1 = gmc->y + gmc->h;
mzone_split->x2 = mzone->x2;
mzone_split->y2 = mzone->y2;
break;
case 3:
mzone_split->x1 = mzone->x1;
mzone_split->y1 = mzone->y1;
mzone_split->x2 = gmc->x;
mzone_split->y2 = mzone->y2;
break;
case 4:
mzone_split->x1 = gmc->x;
mzone_split->y1 = mzone->y1;
mzone_split->x2 = mzone->x2;
mzone_split->y2 = gmc->y;
break;
case 5:
mzone_split->x1 = gmc->x;
mzone_split->y1 = gmc->y + gmc->h;
mzone_split->x2 = mzone->x2;
mzone_split->y2 = mzone->y2;
break;
}
if (*add_splits_to == NULL)
*add_splits_to = evas_list_append(*add_splits_to, mzone_split);
else
evas_list_append(*add_splits_to, mzone_split);
}
}
else if (gmc->x > mzone->x1 && gmc->x < mzone->x2 &&
gmc->y > mzone->y1 && gmc->y < mzone->y2 &&
gmc->x + gmc->w >= mzone->x2 &&
gmc->y + gmc->h >= mzone->y2)
{
mzone_splitted = 1;
for (ii = 0; ii < 4; ii ++)
{
mzone_split = (struct _m_zone *)malloc(sizeof(struct _m_zone));
if (mzone_split == NULL)
return -1;
switch(ii)
{
case 0:
mzone_split->x1 = mzone->x1;
mzone_split->y1 = mzone->y1;
mzone_split->x2 = mzone->x2;
mzone_split->y2 = gmc->y;
break;
case 1:
mzone_split->x1 = mzone->x1;
mzone_split->y1 = gmc->y;
mzone_split->x2 = gmc->x;
mzone_split->y2 = mzone->y2;
break;
case 2:
mzone_split->x1 = mzone->x1;
mzone_split->y1 = mzone->y1;
mzone_split->x2 = gmc->x;
mzone_split->y2 = mzone->y2;
break;
case 3:
mzone_split->x1 = gmc->x;
mzone_split->y1 = mzone->y1;
mzone_split->x2 = mzone->x2;
mzone_split->y2 = gmc->y;
break;
}
if (*add_splits_to == NULL)
*add_splits_to = evas_list_append(*add_splits_to, mzone_split);
else
evas_list_append(*add_splits_to, mzone_split);
}
}
else if (gmc->x > mzone->x1 &&
gmc->y > mzone->y1 && gmc->y < mzone->y2 &&
gmc->x + gmc->w < mzone->x2 &&
gmc->y + gmc->h >= mzone->y2)
{
mzone_splitted = 1;
for (ii = 0; ii < 6; ii ++)
{
mzone_split = (struct _m_zone *)malloc(sizeof(struct _m_zone));
if (mzone_split == NULL)
return -1;
switch(ii)
{
case 0:
mzone_split->x1 = mzone->x1;
mzone_split->y1 = mzone->y1;
mzone_split->x2 = mzone->x2;
mzone_split->y2 = gmc->y;
break;
case 1:
mzone_split->x1 = mzone->x1;
mzone_split->y1 = gmc->y;
mzone_split->x2 = gmc->x;
mzone_split->y2 = mzone->y2;
break;
case 2:
mzone_split->x1 = gmc->x + gmc->w;
mzone_split->y1 = gmc->y;
mzone_split->x2 = mzone->x2;
mzone_split->y2 = mzone->y2;
break;
case 3:
mzone_split->x1 = mzone->x1;
mzone_split->y1 = mzone->y1;
mzone_split->x2 = gmc->x;
mzone_split->y2 = mzone->y2;
break;
case 4:
mzone_split->x1 = gmc->x;
mzone_split->y1 = mzone->y1;
mzone_split->x2 = gmc->x + gmc->w;
mzone_split->y2 = gmc->y;
break;
case 5:
mzone_split->x1 = gmc->x + gmc->w;
mzone_split->y1 = mzone->y1;
mzone_split->x2 = mzone->x2;
mzone_split->y2 = mzone->y2;
break;
}
if(*add_splits_to == NULL)
*add_splits_to = evas_list_append(*add_splits_to, mzone_split);
else
evas_list_append(*add_splits_to, mzone_split);
}
}
else if (gmc->x <= mzone->x1 &&
gmc->y > mzone->y1 && gmc->y < mzone->y2 &&
gmc->x + gmc->w > mzone->x1 && gmc->x + gmc->w < mzone->x2 &&
gmc->y + gmc->h >= mzone->y2)
{
mzone_splitted = 1;
for (ii = 0; ii < 4; ii ++)
{
mzone_split = (struct _m_zone *)malloc(sizeof(struct _m_zone));
if (mzone_split == NULL)
return -1;
switch(ii)
{
case 0:
mzone_split->x1 = mzone->x1;
mzone_split->y1 = mzone->y1;
mzone_split->x2 = mzone->x2;
mzone_split->y2 = gmc->y;
break;
case 1:
mzone_split->x1 = gmc->x + gmc->w;
mzone_split->y1 = gmc->y;
mzone_split->x2 = mzone->x2;
mzone_split->y2 = mzone->y2;
break;
case 2:
mzone_split->x1 = mzone->x1;
mzone_split->y1 = mzone->y1;
mzone_split->x2 = gmc->x + gmc->w;
mzone_split->y2 = gmc->y;
break;
case 3:
mzone_split->x1 = gmc->x + gmc->w;
mzone_split->y1 = mzone->y1;
mzone_split->x2 = mzone->x2;
mzone_split->y2 = mzone->y2;
break;
}
if (*add_splits_to == NULL)
*add_splits_to = evas_list_append(*add_splits_to, mzone_split);
else
evas_list_append(*add_splits_to, mzone_split);
}
}
else if (gmc->x <= mzone->x1 &&
gmc->y > mzone->y1 &&
gmc->y + gmc->h < mzone->y2 &&
gmc->x + gmc->w > mzone->x1 && gmc->x + gmc->w < mzone->x2)
{
mzone_splitted = 1;
for (ii = 0; ii < 6; ii ++)
{
mzone_split = (struct _m_zone *)malloc(sizeof(struct _m_zone));
if (mzone_split == NULL)
return -1;
switch(ii)
{
case 0:
mzone_split->x1 = mzone->x1;
mzone_split->y1 = mzone->y1;
mzone_split->x2 = mzone->x2;
mzone_split->y2 = gmc->y;
break;
case 1:
mzone_split->x1 = gmc->x + gmc->w;
mzone_split->y1 = gmc->y;
mzone_split->x2 = mzone->x2;
mzone_split->y2 = gmc->y + gmc->h;
break;
case 2:
mzone_split->x1 = mzone->x1;
mzone_split->y1 = gmc->y + gmc->h;
mzone_split->x2 = mzone->x2;
mzone_split->y2 = mzone->y2;
break;
case 3:
mzone_split->x1 = mzone->x1;
mzone_split->y1 = mzone->y1;
mzone_split->x2 = gmc->x + gmc->w;
mzone_split->y2 = gmc->y;
break;
case 4:
mzone_split->x1 = gmc->x + gmc->w;
mzone_split->y1 = mzone->y1;
mzone_split->x2 = mzone->x2;
mzone_split->y2 = mzone->y2;
break;
case 5:
mzone_split->x1 = mzone->x1;
mzone_split->y1 = gmc->y + gmc->h;
mzone_split->x2 = gmc->x + gmc->w;
mzone_split->y2 = mzone->y2;
break;
}
if (*add_splits_to == NULL)
*add_splits_to = evas_list_append(*add_splits_to, mzone_split);
else
evas_list_append(*add_splits_to, mzone_split);
}
}
else if (gmc->x <= mzone->x1 && gmc->y <= mzone->y1 &&
gmc->x + gmc->w >= mzone->x2 &&
gmc->y + gmc->h > mzone->y1 &&
gmc->y + gmc->h < mzone->y2)
{
mzone_splitted = 1;
mzone_split = (struct _m_zone *)malloc(sizeof(struct _m_zone));
if (mzone_split == NULL)
return -1;
mzone_split->x1 = mzone->x1;
mzone_split->y1 = gmc->y + gmc->h;
mzone_split->x2 = mzone->x2;
mzone_split->y2 = mzone->y2;
if (*add_splits_to == NULL)
*add_splits_to = evas_list_append(*add_splits_to, mzone_split);
else
evas_list_append(*add_splits_to, mzone_split);
}
else if (gmc->x <= mzone->x1 &&
gmc->x + gmc->w >= mzone->x2 &&
gmc->y > mzone->y1 && gmc->y < mzone->y2)
{
mzone_splitted = 1;
for (ii = 0; ii < 2; ii ++)
{
mzone_split = (struct _m_zone *)malloc(sizeof(struct _m_zone));
if (mzone_split == NULL)
return -1;
switch(ii)
{
case 0:
mzone_split->x1 = mzone->x1;
mzone_split->y1 = mzone->y1;
mzone_split->x2 = mzone->x2;
mzone_split->y2 = gmc->y;
break;
case 1:
mzone_split->x1 = mzone->x1;
mzone_split->y1 = gmc->y + gmc->h;
mzone_split->x2 = mzone->x2;
mzone_split->y2 = mzone->y2;
break;
}
if (*add_splits_to == NULL)
*add_splits_to = evas_list_append(*add_splits_to, mzone_split);
else
evas_list_append(*add_splits_to, mzone_split);
}
}
else if (gmc->x <= mzone->x1 &&
gmc->x + gmc->w >= mzone->x2 &&
gmc->y > mzone->y1 && gmc->y < mzone->y2 &&
gmc->y + gmc->h >= mzone->y2)
{
mzone_splitted = 1;
mzone_split = (struct _m_zone *)malloc(sizeof(struct _m_zone));
if (mzone_split == NULL)
return -1;
mzone_split->x1 = mzone->x1;
mzone_split->y1 = mzone->y1;
mzone_split->x2 = mzone->x2;
mzone_split->y2 = gmc->y;
if (*add_splits_to == NULL)
*add_splits_to = evas_list_append(*add_splits_to, mzone_split);
else
evas_list_append(*add_splits_to, mzone_split);
}
else if (gmc->x <= mzone->x1 &&
gmc->y <= mzone->y1 &&
gmc->y + gmc->h >= mzone->y2 &&
gmc->x + gmc->w > mzone->x1 && gmc->x + gmc->w < mzone->x2)
{
mzone_splitted = 1;
mzone_split = (struct _m_zone *)malloc(sizeof(struct _m_zone));
if (mzone_split == NULL)
return -1;
mzone_split->x1 = gmc->x + gmc->w;
mzone_split->y1 = mzone->y1;
mzone_split->x2 = mzone->x2;
mzone_split->y2 = mzone->y2;
if (*add_splits_to == NULL)
*add_splits_to = evas_list_append(*add_splits_to, mzone_split);
else
evas_list_append(*add_splits_to, mzone_split);
}
else if (gmc->x > mzone->x1 &&
gmc->x + gmc->w < mzone->x2 &&
gmc->y <= mzone->y1 &&
gmc->y + gmc->h >= mzone->y2)
{
mzone_splitted = 1;
for (ii = 0; ii < 2; ii ++)
{
mzone_split = (struct _m_zone *)malloc(sizeof(struct _m_zone));
if (mzone_split == NULL)
return -1;
switch(ii)
{
case 0:
mzone_split->x1 = mzone->x1;
mzone_split->y1 = mzone->y1;
mzone_split->x2 = gmc->x;
mzone_split->y2 = mzone->y2;
break;
case 1:
mzone_split->x1 = gmc->x + gmc->w;
mzone_split->y1 = mzone->y1;
mzone_split->x2 = mzone->x2;
mzone_split->y2 = mzone->y2;
break;
}
if (*add_splits_to == NULL)
*add_splits_to = evas_list_append(*add_splits_to, mzone_split);
else
evas_list_append(*add_splits_to, mzone_split);
}
}
else if (gmc->x > mzone->x1 && gmc->x < mzone->x2 &&
gmc->y <= mzone->y1 &&
gmc->x + gmc->w >= mzone->x2 &&
gmc->y + gmc->h >= mzone->y2)
{
mzone_splitted = 1;
mzone_split = (struct _m_zone *)malloc(sizeof(struct _m_zone));
if (mzone_split == NULL)
return -1;
mzone_split->x1 = mzone->x1;
mzone_split->y1 = mzone->y1;
mzone_split->x2 = gmc->x;
mzone_split->y2 = mzone->y2;
if (*add_splits_to == NULL)
*add_splits_to = evas_list_append(*add_splits_to, mzone_split);
else
evas_list_append(*add_splits_to, mzone_split);
}
else if (gmc->x <= mzone->x1 && gmc->y <= mzone->y1 &&
gmc->x + gmc->w >= mzone->x2 && gmc->y + gmc->h >= mzone->y2)
{
mzone_splitted = 2;
}
return mzone_splitted;
}
int _e_mzone_cb_square_reverse_sort(void *e1, void *e2)
{
struct _m_zone *mz1 = (struct _m_zone *)e1;
struct _m_zone *mz2 = (struct _m_zone *)e2;
if (e1 == NULL) return 1;
if (e2 == NULL) return -1;
if (mz1->area > mz2->area)
return -1;
else if (mz1->area < mz2->area)
return 1;
return 0;
}
int _e_mzone_cb_width_reverse_sort(void *e1, void *e2)
{
int w1, w2;
struct _m_zone *mz1 = (struct _m_zone *)e1;
struct _m_zone *mz2 = (struct _m_zone *)e2;
if (e1 == NULL) return 1;
if (e2 == NULL) return -1;
w1 = mz1->x2 - mz1->x1;
w2 = mz2->x2 - mz2->x1;
if (w1 > w2)
return -1;
else if (w1 < w2)
return 1;
return 0;
}
int _e_mzone_cb_height_reverse_sort(void *e1, void *e2)
{
int h1, h2;
struct _m_zone *mz1 = (struct _m_zone *)e1;
struct _m_zone *mz2 = (struct _m_zone *)e2;
if (e1 == NULL) return 1;
if (e2 == NULL) return -1;
h1 = mz1->y2 - mz1->y1;
h2 = mz2->y2 - mz2->y1;
if (h1 > h2)
return -1;
else if (h1 < h2)
return 1;
return 0;
}

View File

@ -9,6 +9,7 @@ battery \
temperature \
cpufreq \
ibox \
itray \
start \
randr \
gadget_test

View File

@ -10,6 +10,7 @@ struct _E_Config_Dialog_Data
int show_alert;
double poll_time;
int alarm_time;
int allow_overlap;
};
struct _Cfg_File_Data
@ -56,6 +57,7 @@ _fill_data(Battery *b, E_Config_Dialog_Data *cfdata)
{
cfdata->show_alert = 0;
}
cfdata->allow_overlap = b->conf->allow_overlap;
}
static void *
@ -94,6 +96,11 @@ _basic_create_widgets(E_Config_Dialog *cfd, Evas *evas, E_Config_Dialog_Data *cf
ob = e_widget_check_add(evas, _("Show alert when battery is low"), &(cfdata->show_alert));
e_widget_framelist_object_append(of, ob);
e_widget_list_object_append(o, of, 1, 1, 0.5);
of = e_widget_framelist_add(evas, _("Extras"), 0);
ob = e_widget_check_add(evas, _("Allow Overlap"), &(cfdata->allow_overlap));
e_widget_framelist_object_append(of, ob);
e_widget_list_object_append(o, of, 1, 1, 0.5);
return o;
}
@ -105,6 +112,12 @@ _basic_apply_data(E_Config_Dialog *cfd, E_Config_Dialog_Data *cfdata)
b = cfd->data;
e_border_button_bindings_ungrab_all();
b->conf->poll_time = 10.0;
if (cfdata->allow_overlap && !b->conf->allow_overlap)
b->conf->allow_overlap = 1;
else if (!cfdata->allow_overlap && b->conf->allow_overlap)
b->conf->allow_overlap = 0;
e_border_button_bindings_grab_all();
e_config_save_queue();
@ -140,6 +153,11 @@ _advanced_create_widgets(E_Config_Dialog *cfd, Evas *evas, E_Config_Dialog_Data
ob = e_widget_slider_add(evas, 1, 0, _("%1.0f minutes"), 1, 60, 1, 0, NULL, &(cfdata->alarm_time), 200);
e_widget_frametable_object_append(of, ob, 0, 5, 1, 1, 1, 0, 1, 0);
e_widget_list_object_append(o, of, 1, 1, 0.5);
of = e_widget_framelist_add(evas, _("Extras"), 0);
ob = e_widget_check_add(evas, _("Allow Overlap"), &(cfdata->allow_overlap));
e_widget_framelist_object_append(of, ob);
e_widget_list_object_append(o, of, 1, 1, 0.5);
return o;
}
@ -161,6 +179,11 @@ _advanced_apply_data(E_Config_Dialog *cfd, E_Config_Dialog_Data *cfdata)
{
b->conf->alarm = 0;
}
if (cfdata->allow_overlap && !b->conf->allow_overlap)
b->conf->allow_overlap = 1;
else if (!cfdata->allow_overlap && b->conf->allow_overlap)
b->conf->allow_overlap = 0;
e_border_button_bindings_grab_all();
e_config_save_queue();

View File

@ -49,7 +49,7 @@ static Status *_battery_bsd_apm_check(Battery *ef);
static Status *_battery_darwin_check(Battery *ef);
#endif
static Battery_Face *_battery_face_new(E_Container *con);
static Battery_Face *_battery_face_new(Battery *bat, E_Container *con);
static void _battery_face_free(Battery_Face *ef);
static void _battery_face_menu_new(Battery_Face *face);
static void _battery_face_enable(Battery_Face *face);
@ -64,6 +64,8 @@ static char *_battery_string_get(char *buf);
static void _battery_face_cb_menu_configure(void *data, E_Menu *m, E_Menu_Item *mi);
static void _battery_face_cb_update_policy(void *data);
static E_Config_DD *conf_edd;
static E_Config_DD *conf_face_edd;
@ -189,6 +191,7 @@ _battery_new()
#define D conf_edd
E_CONFIG_VAL(D, T, poll_time, DOUBLE);
E_CONFIG_VAL(D, T, alarm, INT);
E_CONFIG_VAL(D, T, allow_overlap, INT);
E_CONFIG_LIST(D, T, faces, conf_face_edd);
e->conf = e_config_domain_load("module.battery", conf_edd);
@ -197,9 +200,11 @@ _battery_new()
e->conf = E_NEW(Config, 1);
e->conf->poll_time = 30.0;
e->conf->alarm = 30;
e->conf->allow_overlap = 0;
}
E_CONFIG_LIMIT(e->conf->poll_time, 0.5, 1000.0);
E_CONFIG_LIMIT(e->conf->alarm, 0, 60);
E_CONFIG_LIMIT(e->conf->allow_overlap, 0, 1);
_battery_config_menu_new(e);
@ -222,7 +227,7 @@ _battery_new()
Battery_Face *ef;
con = l2->data;
ef = _battery_face_new(con);
ef = _battery_face_new(e, con);
if (ef)
{
ef->battery = e;
@ -298,10 +303,11 @@ _battery_config_menu_new(Battery *e)
}
static Battery_Face *
_battery_face_new(E_Container *con)
_battery_face_new(Battery *bat, E_Container *con)
{
Evas_Object *o;
Battery_Face *ef;
E_Gadman_Policy policy;
ef = E_NEW(Battery_Face, 1);
if (!ef) return NULL;
@ -327,12 +333,17 @@ _battery_face_new(E_Container *con)
ef->gmc = e_gadman_client_new(con->gadman);
e_gadman_client_domain_set(ef->gmc, "module.battery", battery_count++);
e_gadman_client_policy_set(ef->gmc,
E_GADMAN_POLICY_ANYWHERE |
E_GADMAN_POLICY_HMOVE |
E_GADMAN_POLICY_VMOVE |
E_GADMAN_POLICY_HSIZE |
E_GADMAN_POLICY_VSIZE);
policy = E_GADMAN_POLICY_ANYWHERE |
E_GADMAN_POLICY_HMOVE |
E_GADMAN_POLICY_VMOVE |
E_GADMAN_POLICY_HSIZE |
E_GADMAN_POLICY_VSIZE;
if (bat->conf->allow_overlap == 0)
policy &= ~E_GADMAN_POLICY_ALLOW_OVERLAP;
else
policy |= E_GADMAN_POLICY_ALLOW_OVERLAP;
e_gadman_client_policy_set(ef->gmc, policy);
e_gadman_client_min_size_set(ef->gmc, 4, 4);
e_gadman_client_max_size_set(ef->gmc, 128, 128);
e_gadman_client_auto_size_set(ef->gmc, 40, 40);
@ -1626,8 +1637,30 @@ void
_battery_face_cb_config_updated(Battery *bat)
{
/* Call all functions needed to update battery */
_battery_face_cb_update_policy((void*)bat);
/* Update Poll Time */
ecore_timer_del(bat->battery_check_timer);
bat->battery_check_timer = ecore_timer_add(bat->conf->poll_time, _battery_cb_check, bat);
}
static void _battery_face_cb_update_policy(void *data)
{
Battery *bat;
Battery_Face *bf;
Evas_List *l;
E_Gadman_Policy policy;
bat = data;
for (l = bat->faces; l; l = l->next)
{
bf = l->data;
policy = bf->gmc->policy;
if (bat->conf->allow_overlap ==0)
policy &= ~E_GADMAN_POLICY_ALLOW_OVERLAP;
else
policy |= E_GADMAN_POLICY_ALLOW_OVERLAP;
e_gadman_client_policy_set(bf->gmc , policy);
}
}

View File

@ -20,6 +20,7 @@ struct _Config
{
double poll_time;
int alarm;
int allow_overlap;
Evas_List *faces;
};

View File

@ -8,6 +8,7 @@ typedef struct _Cfg_File_Data Cfg_File_Data;
struct _E_Config_Dialog_Data
{
int digital_style;
int allow_overlap;
};
struct _Cfg_File_Data
@ -45,6 +46,7 @@ static void
_fill_data(Clock_Face *clk, E_Config_Dialog_Data *cfdata)
{
cfdata->digital_style = clk->conf->digitalStyle;
cfdata->allow_overlap = clk->clock->conf->allow_overlap;
}
static void *
@ -86,6 +88,12 @@ _basic_create_widgets(E_Config_Dialog *cfd, Evas *evas, E_Config_Dialog_Data *cf
ob = e_widget_radio_add(evas, _("24 Hour Display"), 2, rg);
e_widget_framelist_object_append(of, ob);
e_widget_list_object_append(o, of, 1, 1, 0.5);
of = e_widget_framelist_add(evas, _("Extras"), 0);
ob = e_widget_check_add(evas, _("Allow Overlap"), &(cfdata->allow_overlap));
e_widget_framelist_object_append(of, ob);
e_widget_list_object_append(o, of, 1, 1, 0.5);
return o;
}
@ -97,6 +105,12 @@ _basic_apply_data(E_Config_Dialog *cfd, E_Config_Dialog_Data *cfdata)
clk = cfd->data;
e_border_button_bindings_ungrab_all();
clk->conf->digitalStyle = cfdata->digital_style;
if (cfdata->allow_overlap && !clk->clock->conf->allow_overlap)
clk->clock->conf->allow_overlap = 1;
else if (!cfdata->allow_overlap && clk->clock->conf->allow_overlap)
clk->clock->conf->allow_overlap = 0;
e_border_button_bindings_grab_all();
e_config_save_queue();

View File

@ -14,7 +14,7 @@ static Clock *_clock_new();
static void _clock_shutdown(Clock *clock);
static void _clock_config_menu_new(Clock *clock);
static Clock_Face *_clock_face_new(E_Container *con);
static Clock_Face *_clock_face_new(Clock *clock, E_Container *con);
static void _clock_face_free(Clock_Face *face);
/* static void _clock_face_enable(Clock_Face *face); */
static void _clock_face_disable(Clock_Face *face);
@ -24,6 +24,8 @@ static void _clock_face_cb_mouse_down(void *data, Evas *e, Evas_Object *obj,
static void _clock_face_cb_menu_edit(void *data, E_Menu *m, E_Menu_Item *mi);
static void _clock_face_cb_menu_configure(void *data, E_Menu *m, E_Menu_Item *mi);
static void _clock_face_cb_update_policy(void *data);
static int _clock_count;
static E_Config_DD *conf_edd;
@ -137,13 +139,16 @@ _clock_new()
#undef D
#define T Config
#define D conf_edd
E_CONFIG_VAL(D, T, allow_overlap, INT);
E_CONFIG_LIST(D, T, faces, conf_face_edd);
clock->conf = e_config_domain_load("module.clock", conf_edd);
if (!clock->conf)
{
clock->conf = E_NEW(Config, 1);
clock->conf->allow_overlap = 0;
}
E_CONFIG_LIMIT(clock->conf->allow_overlap, 0, 1);
_clock_config_menu_new(clock);
@ -160,9 +165,10 @@ _clock_new()
Clock_Face *face;
con = l2->data;
face = _clock_face_new(con);
face = _clock_face_new(clock, con);
if (face)
{
face->clock = clock;
clock->faces = evas_list_append(clock->faces, face);
/* Config */
if (!cl)
@ -228,11 +234,12 @@ _clock_config_menu_new(Clock *clock)
}
static Clock_Face *
_clock_face_new(E_Container *con)
_clock_face_new(Clock *clock, E_Container *con)
{
Clock_Face *face;
Evas_Object *o;
Evas_Coord x, y, w, h;
E_Gadman_Policy policy;
face = E_NEW(Clock_Face, 1);
if (!face) return NULL;
@ -266,12 +273,19 @@ _clock_face_new(E_Container *con)
face->gmc = e_gadman_client_new(con->gadman);
e_gadman_client_domain_set(face->gmc, "module.clock", _clock_count++);
e_gadman_client_policy_set(face->gmc,
E_GADMAN_POLICY_ANYWHERE |
E_GADMAN_POLICY_HMOVE |
E_GADMAN_POLICY_VMOVE |
E_GADMAN_POLICY_HSIZE |
E_GADMAN_POLICY_VSIZE);
policy = E_GADMAN_POLICY_ANYWHERE |
E_GADMAN_POLICY_HMOVE |
E_GADMAN_POLICY_VMOVE |
E_GADMAN_POLICY_HSIZE |
E_GADMAN_POLICY_VSIZE;
if (clock->conf->allow_overlap == 0)
policy &= ~E_GADMAN_POLICY_ALLOW_OVERLAP;
else
policy |= E_GADMAN_POLICY_ALLOW_OVERLAP;
e_gadman_client_policy_set(face->gmc, policy);
e_gadman_client_min_size_set(face->gmc, 4, 4);
e_gadman_client_max_size_set(face->gmc, 512, 512);
e_gadman_client_auto_size_set(face->gmc,
@ -437,4 +451,28 @@ _clock_face_cb_config_updated(void *data)
memset(buf, 0, sizeof(buf));
snprintf(buf, sizeof(buf), "%i", face->conf->digitalStyle);
edje_object_part_text_set(face->clock_object, "digitalStyle", buf);
_clock_face_cb_update_policy(face->clock);
}
static void _clock_face_cb_update_policy(void *data)
{
Clock *clock;
Clock_Face *cf;
Evas_List *l;
E_Gadman_Policy policy;
clock = data;
for (l = clock->faces; l; l = l->next)
{
cf = l->data;
policy = cf->gmc->policy;
if (clock->conf->allow_overlap ==0)
policy &= ~E_GADMAN_POLICY_ALLOW_OVERLAP;
else
policy |= E_GADMAN_POLICY_ALLOW_OVERLAP;
e_gadman_client_policy_set(cf->gmc , policy);
}
}

View File

@ -11,6 +11,7 @@ typedef struct _Clock_Face Clock_Face;
struct _Config
{
int allow_overlap;
Evas_List *faces;
};
@ -33,6 +34,7 @@ struct _Clock_Face
E_Container *con;
E_Menu *menu;
Config_Face *conf;
Clock *clock;
struct {
Evas_Coord l, r, t, b;

View File

@ -25,6 +25,7 @@ static void _cpufreq_menu_medium(void *data, E_Menu *m, E_Menu_Item *mi);
static void _cpufreq_menu_normal(void *data, E_Menu *m, E_Menu_Item *mi);
static void _cpufreq_menu_slow(void *data, E_Menu *m, E_Menu_Item *mi);
static void _cpufreq_menu_very_slow(void *data, E_Menu *m, E_Menu_Item *mi);
static void _cpufreq_menu_cb_allow_overlap(void *data, E_Menu *m, E_Menu_Item *mi);
static void _cpufreq_menu_restore_governor(void *data, E_Menu *m, E_Menu_Item *mi);
static void _cpufreq_menu_governor(void *data, E_Menu *m, E_Menu_Item *mi);
static void _cpufreq_menu_frequency(void *data, E_Menu *m, E_Menu_Item *mi);
@ -50,6 +51,8 @@ static void _cpufreq_face_update_current(Cpufreq_Face *face);
static void _cpufreq_face_cb_set_frequency(void *data, Evas_Object *o, const char *emission, const char *source);
static void _cpufreq_face_cb_set_governor(void *data, Evas_Object *o, const char *emission, const char *source);
static void _cpufreq_cb_update_policy(Cpufreq *e);
static E_Config_DD *conf_edd;
static E_Config_DD *conf_face_edd;
@ -141,6 +144,7 @@ _cpufreq_new(E_Module *module)
#define T Config
#define D conf_edd
E_CONFIG_VAL(D, T, poll_time, DOUBLE);
E_CONFIG_VAL(D, T, allow_overlap, INT);
E_CONFIG_LIST(D, T, faces, conf_face_edd);
E_CONFIG_VAL(D, T, restore_governor, INT);
E_CONFIG_VAL(D, T, governor, STR);
@ -152,8 +156,10 @@ _cpufreq_new(E_Module *module)
e->conf->poll_time = 2.0;
e->conf->restore_governor = 0;
e->conf->governor = NULL;
e->conf->allow_overlap = 0;
}
E_CONFIG_LIMIT(e->conf->poll_time, 0.5, 60.0);
E_CONFIG_LIMIT(e->conf->allow_overlap, 0, 1);
#ifdef __FreeBSD__
/* does e_module_dir_get(module) work correctly in linux??? - yes it does... what's wrong in bsd? */
snprintf(buf, sizeof(buf), "%s/%s/cpufreq/freqset", e_module_dir_get(module), MODULE_ARCH);
@ -209,6 +215,13 @@ _cpufreq_new(E_Module *module)
_cpufreq_face_menu_new(ef);
/* Add 'Allow Overlap' option */
mi = e_menu_item_new(ef->menu);
e_menu_item_label_set(mi, _("Allow Overlap"));
e_menu_item_check_set(mi, 1);
e_menu_item_toggle_set(mi, e->conf->allow_overlap);
e_menu_item_callback_set(mi, _cpufreq_menu_cb_allow_overlap, e);
/* Add poll time menu to this face */
mi = e_menu_item_new(ef->menu);
e_menu_item_label_set(mi, _("Set Poll Time"));
@ -396,6 +409,38 @@ _cpufreq_menu_very_slow(void *data, E_Menu *m, E_Menu_Item *mi)
e_config_save_queue();
}
static void _cpufreq_cb_update_policy(Cpufreq *e)
{
Cpufreq_Face *cf;
Evas_List *l;
E_Gadman_Policy policy;
for (l = e->faces; l; l = l->next)
{
cf = l->data;
policy = cf->gmc->policy;
if (e->conf->allow_overlap == 0)
policy &= ~E_GADMAN_POLICY_ALLOW_OVERLAP;
else
policy |= E_GADMAN_POLICY_ALLOW_OVERLAP;
e_gadman_client_policy_set(cf->gmc, policy);
}
}
static void _cpufreq_menu_cb_allow_overlap(void *data, E_Menu *m, E_Menu_Item *mi)
{
Cpufreq *e;
e = data;
e->conf->allow_overlap = e_menu_item_toggle_get(mi);
_cpufreq_cb_update_policy(e);
e_config_save_queue();
}
static void
_cpufreq_menu_restore_governor(void *data, E_Menu *m, E_Menu_Item *mi)
{
@ -542,6 +587,12 @@ _cpufreq_config_menu_new(Cpufreq *e)
mn = e_menu_new();
mi = e_menu_item_new(mn);
e_menu_item_label_set(mi, _("Allow Overlap"));
e_menu_item_check_set(mi, 1);
e_menu_item_toggle_set(mi, e->conf->allow_overlap);
e_menu_item_callback_set(mi, _cpufreq_menu_cb_allow_overlap, e);
mi = e_menu_item_new(mn);
e_menu_item_label_set(mi, _("Set Poll Time"));
e_menu_item_submenu_set(mi, e->config_menu_poll);
@ -861,6 +912,7 @@ _cpufreq_face_new(E_Container *con, Cpufreq *owner)
{
Evas_Object *o;
Cpufreq_Face *ef;
E_Gadman_Policy policy;
ef = E_NEW(Cpufreq_Face, 1);
if (!ef) return NULL;
@ -890,9 +942,19 @@ _cpufreq_face_new(E_Container *con, Cpufreq *owner)
ef->gmc = e_gadman_client_new(ef->con->gadman);
e_gadman_client_domain_set(ef->gmc, "module.cpufreq", cpufreq_count++);
e_gadman_client_policy_set(ef->gmc, E_GADMAN_POLICY_ANYWHERE |
E_GADMAN_POLICY_HMOVE | E_GADMAN_POLICY_VMOVE |
E_GADMAN_POLICY_HSIZE | E_GADMAN_POLICY_VSIZE);
policy = E_GADMAN_POLICY_ANYWHERE |
E_GADMAN_POLICY_HMOVE |
E_GADMAN_POLICY_VMOVE |
E_GADMAN_POLICY_HSIZE |
E_GADMAN_POLICY_VSIZE;
if (owner->conf->allow_overlap == 0)
policy &= ~E_GADMAN_POLICY_ALLOW_OVERLAP;
else
policy |= E_GADMAN_POLICY_ALLOW_OVERLAP;
e_gadman_client_policy_set(ef->gmc, policy);
e_gadman_client_min_size_set(ef->gmc, 4, 4);
e_gadman_client_max_size_set(ef->gmc, 128, 128);
/* This module needs a slightly higher min size */

View File

@ -23,6 +23,7 @@ struct _Status
struct _Config
{
double poll_time;
int allow_overlap;
Evas_List *faces;
int restore_governor;

View File

@ -10,6 +10,7 @@ struct _E_Config_Dialog_Data
int autofit;
int follower;
int iconsize;
int allow_overlap;
double follow_speed;
double autoscroll_speed;
};
@ -53,6 +54,7 @@ _fill_data(IBar *ib, E_Config_Dialog_Data *cfdata)
cfdata->autofit = (ib->conf->width == IBAR_WIDTH_AUTO);
cfdata->follower = ib->conf->follower;
cfdata->iconsize = ib->conf->iconsize;
cfdata->allow_overlap = ib->conf->allow_overlap;
cfdata->follow_speed = ib->conf->follow_speed;
cfdata->autoscroll_speed = ib->conf->autoscroll_speed;
}
@ -93,6 +95,9 @@ _basic_create_widgets(E_Config_Dialog *cfd, Evas *evas, E_Config_Dialog_Data *cf
e_widget_list_object_append(o, ob, 1, 1, 0.5);
ob = e_widget_check_add(evas, _("Auto Fit Icons"), &(cfdata->autofit));
e_widget_list_object_append(o, ob, 1, 1, 0.5);
ob = e_widget_check_add(evas, _("Allow Overlap"), &(cfdata->allow_overlap));
e_widget_list_object_append(o, ob, 1, 1, 0.5);
return o;
}
@ -111,7 +116,12 @@ _basic_apply_data(E_Config_Dialog *cfd, E_Config_Dialog_Data *cfdata)
{
ib->conf->follower = 0;
}
if (cfdata->allow_overlap && !ib->conf->allow_overlap)
ib->conf->allow_overlap = 1;
else if (!cfdata->allow_overlap && ib->conf->allow_overlap)
ib->conf->allow_overlap = 0;
if ((cfdata->autofit) && (ib->conf->width == IBAR_WIDTH_FIXED))
{
ib->conf->width = IBAR_WIDTH_AUTO;
@ -160,6 +170,12 @@ _advanced_create_widgets(E_Config_Dialog *cfd, Evas *evas, E_Config_Dialog_Data
ob = e_widget_slider_add(evas, 1, 0, _("%1.2f px/s"), 0.0, 1.0, 0.01, 0, &(cfdata->autoscroll_speed), NULL,200);
e_widget_framelist_object_append(of, ob);
e_widget_list_object_append(o, of, 1, 1, 0.5);
/* allow overlap checkbox */
of = e_widget_framelist_add(evas, _("Extras"), 0);
ob = e_widget_check_add(evas, _("Allow Overlap"), &(cfdata->allow_overlap));
e_widget_framelist_object_append(of, ob);
e_widget_list_object_append(o, of, 1, 1, 0.5);
return o;
}
@ -178,6 +194,12 @@ _advanced_apply_data(E_Config_Dialog *cfd, E_Config_Dialog_Data *cfdata)
{
ib->conf->follower = 0;
}
/* allow overlap check box */
if (cfdata->allow_overlap && !ib->conf->allow_overlap)
ib->conf->allow_overlap = 1;
else if (!cfdata->allow_overlap && ib->conf->allow_overlap)
ib->conf->allow_overlap = 0;
if ((cfdata->autofit) && (ib->conf->width == IBAR_WIDTH_FIXED))
{

View File

@ -222,6 +222,7 @@ _ibar_new()
E_CONFIG_VAL(D, T, autoscroll_speed, DOUBLE);
E_CONFIG_VAL(D, T, iconsize, INT);
E_CONFIG_VAL(D, T, width, INT);
E_CONFIG_VAL(D, T, allow_overlap, INT);
E_CONFIG_LIST(D, T, bars, conf_bar_edd);
ib->conf = e_config_domain_load("module.ibar", conf_edd);
@ -233,12 +234,14 @@ _ibar_new()
ib->conf->follow_speed = 0.9;
ib->conf->autoscroll_speed = 0.95;
ib->conf->iconsize = 24;
ib->conf->allow_overlap = 0;
ib->conf->width = IBAR_WIDTH_AUTO;
}
E_CONFIG_LIMIT(ib->conf->follow_speed, 0.01, 1.0);
E_CONFIG_LIMIT(ib->conf->autoscroll_speed, 0.01, 1.0);
E_CONFIG_LIMIT(ib->conf->iconsize, 2, 400);
E_CONFIG_LIMIT(ib->conf->width, -2, -1);
E_CONFIG_LIMIT(ib->conf->allow_overlap, 0, 1);
_ibar_config_menu_new(ib);
@ -582,6 +585,12 @@ _ibar_bar_new(IBar *ib, E_Container *con)
policy = E_GADMAN_POLICY_EDGES | E_GADMAN_POLICY_HMOVE | E_GADMAN_POLICY_VMOVE;
if (ibb->ibar->conf->width == IBAR_WIDTH_FIXED)
policy |= E_GADMAN_POLICY_HSIZE;
if (ibb->ibar->conf->allow_overlap == 0)
policy &= ~E_GADMAN_POLICY_ALLOW_OVERLAP;
else
policy |= E_GADMAN_POLICY_ALLOW_OVERLAP;
e_gadman_client_policy_set(ibb->gmc, policy);
e_gadman_client_min_size_set(ibb->gmc, 8, 8);
e_gadman_client_max_size_set(ibb->gmc, 3200, 3200);
@ -1007,6 +1016,11 @@ _ibar_bar_edge_change(IBar_Bar *ibb, int edge)
e_box_align_set(ibb->box_object, 0.5, 0.5);
policy = E_GADMAN_POLICY_EDGES | E_GADMAN_POLICY_HMOVE | E_GADMAN_POLICY_VMOVE;
if (ibb->ibar->conf->allow_overlap == 0)
policy &= ~E_GADMAN_POLICY_ALLOW_OVERLAP;
else
policy |= E_GADMAN_POLICY_ALLOW_OVERLAP;
if ((edge == E_GADMAN_EDGE_BOTTOM) ||
(edge == E_GADMAN_EDGE_TOP))
{
@ -1050,6 +1064,12 @@ _ibar_bar_update_policy(IBar_Bar *ibb)
E_Gadman_Policy policy;
policy = E_GADMAN_POLICY_EDGES | E_GADMAN_POLICY_HMOVE | E_GADMAN_POLICY_VMOVE;
if (ibb->ibar->conf->allow_overlap == 0)
policy &= ~E_GADMAN_POLICY_ALLOW_OVERLAP;
else
policy |= E_GADMAN_POLICY_ALLOW_OVERLAP;
if ((e_gadman_client_edge_get(ibb->gmc) == E_GADMAN_EDGE_BOTTOM) ||
(e_gadman_client_edge_get(ibb->gmc) == E_GADMAN_EDGE_TOP))
{

View File

@ -21,6 +21,7 @@ struct _Config
double autoscroll_speed;
int iconsize;
int width;
int allow_overlap;
Evas_List *bars;
};

View File

@ -12,6 +12,7 @@ struct _E_Config_Dialog_Data
int iconsize;
double follow_speed;
double autoscroll_speed;
int allow_overlap;
};
struct _Cfg_File_Data
@ -55,6 +56,7 @@ _fill_data(IBox *ib, E_Config_Dialog_Data *cfdata)
cfdata->iconsize = ib->conf->iconsize;
cfdata->follow_speed = ib->conf->follow_speed;
cfdata->autoscroll_speed = ib->conf->autoscroll_speed;
cfdata->allow_overlap = ib->conf->allow_overlap;
}
static void *
@ -93,6 +95,9 @@ _basic_create_widgets(E_Config_Dialog *cfd, Evas *evas, E_Config_Dialog_Data *cf
e_widget_list_object_append(o, ob, 1, 1, 0.5);
ob = e_widget_check_add(evas, _("Auto Fit Icons"), &(cfdata->autofit));
e_widget_list_object_append(o, ob, 1, 1, 0.5);
ob = e_widget_check_add(evas, _("Allow Overlap"), &(cfdata->allow_overlap));
e_widget_list_object_append(o, ob, 1, 1, 0.5);
return o;
}
@ -120,6 +125,12 @@ _basic_apply_data(E_Config_Dialog *cfd, E_Config_Dialog_Data *cfdata)
{
ib->conf->width = IBOX_WIDTH_FIXED;
}
if (cfdata->allow_overlap && !ib->conf->allow_overlap)
ib->conf->allow_overlap = 1;
else if (!cfdata->allow_overlap && ib->conf->allow_overlap)
ib->conf->allow_overlap = 0;
e_border_button_bindings_grab_all();
e_config_save_queue();
@ -160,6 +171,12 @@ _advanced_create_widgets(E_Config_Dialog *cfd, Evas *evas, E_Config_Dialog_Data
ob = e_widget_slider_add(evas, 1, 0, _("%1.2f px/s"), 0.0, 1.0, 0.01, 0, &(cfdata->autoscroll_speed), NULL,200);
e_widget_framelist_object_append(of, ob);
e_widget_list_object_append(o, of, 1, 1, 0.5);
of = e_widget_framelist_add(evas, _("Extras"), 0);
ob = e_widget_check_add(evas, _("Allow Overlap"), &(cfdata->allow_overlap));
e_widget_framelist_object_append(of, ob);
e_widget_list_object_append(o, of, 1, 1, 0.5);
return o;
}
@ -200,6 +217,11 @@ _advanced_apply_data(E_Config_Dialog *cfd, E_Config_Dialog_Data *cfdata)
{
ib->conf->autoscroll_speed = cfdata->autoscroll_speed;
}
if (cfdata->allow_overlap && !ib->conf->allow_overlap)
ib->conf->allow_overlap = 1;
else if (!cfdata->allow_overlap && ib->conf->allow_overlap)
ib->conf->allow_overlap = 0;
e_border_button_bindings_grab_all();
e_config_save_queue();

View File

@ -203,6 +203,7 @@ _ibox_new()
E_CONFIG_VAL(D, T, autoscroll_speed, DOUBLE);
E_CONFIG_VAL(D, T, iconsize, INT);
E_CONFIG_VAL(D, T, width, INT);
E_CONFIG_VAL(D, T, allow_overlap, INT);
E_CONFIG_LIST(D, T, boxes, conf_box_edd);
ib->conf = e_config_domain_load("module.ibox", conf_edd);
@ -214,11 +215,13 @@ _ibox_new()
ib->conf->autoscroll_speed = 0.95;
ib->conf->iconsize = 24;
ib->conf->width = IBOX_WIDTH_AUTO;
ib->conf->allow_overlap = 0;
}
E_CONFIG_LIMIT(ib->conf->follow_speed, 0.01, 1.0);
E_CONFIG_LIMIT(ib->conf->autoscroll_speed, 0.01, 1.0);
E_CONFIG_LIMIT(ib->conf->iconsize, 2, 400);
E_CONFIG_LIMIT(ib->conf->width, -2, -1);
E_CONFIG_LIMIT(ib->conf->allow_overlap, 0, 1);
_ibox_config_menu_new(ib);
@ -396,6 +399,12 @@ _ibox_box_new(IBox *ib, E_Container *con)
policy = E_GADMAN_POLICY_EDGES | E_GADMAN_POLICY_HMOVE | E_GADMAN_POLICY_VMOVE;
if (ibb->ibox->conf->width == IBOX_WIDTH_FIXED)
policy |= E_GADMAN_POLICY_VSIZE;
if (ibb->ibox->conf->allow_overlap == 0)
policy &= ~E_GADMAN_POLICY_ALLOW_OVERLAP;
else
policy |= E_GADMAN_POLICY_ALLOW_OVERLAP;
e_gadman_client_policy_set(ibb->gmc, policy);
e_gadman_client_min_size_set(ibb->gmc, 8, 8);
e_gadman_client_max_size_set(ibb->gmc, 3200, 3200);
@ -710,6 +719,12 @@ _ibox_box_edge_change(IBox_Box *ibb, int edge)
e_box_align_set(ibb->item_object, 0.5, 0.5);
policy = E_GADMAN_POLICY_EDGES | E_GADMAN_POLICY_HMOVE | E_GADMAN_POLICY_VMOVE;
if (ibb->ibox->conf->allow_overlap == 0)
policy &= ~E_GADMAN_POLICY_ALLOW_OVERLAP;
else
policy |= E_GADMAN_POLICY_ALLOW_OVERLAP;
if ((edge == E_GADMAN_EDGE_BOTTOM) ||
(edge == E_GADMAN_EDGE_TOP))
{
@ -753,6 +768,12 @@ _ibox_box_update_policy(IBox_Box *ibb)
E_Gadman_Policy policy;
policy = E_GADMAN_POLICY_EDGES | E_GADMAN_POLICY_HMOVE | E_GADMAN_POLICY_VMOVE;
if (ibb->ibox->conf->allow_overlap == 0)
policy &= ~E_GADMAN_POLICY_ALLOW_OVERLAP;
else
policy |= E_GADMAN_POLICY_ALLOW_OVERLAP;
if ((e_gadman_client_edge_get(ibb->gmc) == E_GADMAN_EDGE_BOTTOM) ||
(e_gadman_client_edge_get(ibb->gmc) == E_GADMAN_EDGE_TOP))
{

View File

@ -19,6 +19,7 @@ struct _Config
int follower;
double autoscroll_speed;
int iconsize;
int allow_overlap;
int width;
Evas_List *boxes;
};

View File

@ -0,0 +1,28 @@
MAINTAINERCLEANFILES = Makefile.in
MODULE = itray
# data files for the module
filesdir = $(libdir)/enlightenment/modules/$(MODULE)
files_DATA = \
module_icon.png
EXTRA_DIST = $(files_DATA)
# the module .so file
INCLUDES = -I. \
-I$(top_srcdir) \
-I$(includedir) \
-I$(top_srcdir)/$(MODULE) \
-I$(top_srcdir)/src/bin \
-I$(top_srcdir)/src/lib \
-I$(top_srcdir)/src/modules \
@e_cflags@
pkgdir = $(libdir)/enlightenment/modules/$(MODULE)/$(MODULE_ARCH)
pkg_LTLIBRARIES = module.la
module_la_SOURCES = e_mod_main.c \
e_mod_main.h \
e_mod_config.c \
e_mod_config.h
module_la_LIBADD = @e_libs@ @dlopen_libs@
module_la_LDFLAGS = -module -avoid-version
module_la_DEPENDENCIES = $(top_builddir)/config.h

View File

@ -0,0 +1,237 @@
#include "e.h"
#include "e_mod_main.h"
#include "e_mod_config.h"
#include "config.h"
typedef struct _cfdata CFData;
typedef struct _Cfg_File_Data Cfg_File_Data;
struct _cfdata
{
int follower;
int rowsize;
double follow_speed;
int allow_overlap;
/* double autoscroll_speed;
* int autofit;
*/
};
struct _Cfg_File_Data
{
E_Config_Dialog *cfd;
char *file;
};
/* Protos */
static void *_create_data(E_Config_Dialog *cfd);
static void _free_data(E_Config_Dialog *cfd, CFData *cfdata);
static Evas_Object *_basic_create_widgets(E_Config_Dialog *cfd, Evas *evas, CFData *cfdata);
static int _basic_apply_data(E_Config_Dialog *cfd, CFData *cfdata);
static Evas_Object *_advanced_create_widgets(E_Config_Dialog *cfd, Evas *evas, CFData *cfdata);
static int _advanced_apply_data(E_Config_Dialog *cfd, CFData *cfdata);
void
_config_itray_module(E_Container *con, ITray *itray)
{
E_Config_Dialog *cfd;
E_Config_Dialog_View v;
/* Dialog Methods */
v.create_cfdata = _create_data;
v.free_cfdata = _free_data;
v.basic.apply_cfdata = _basic_apply_data;
v.basic.create_widgets = _basic_create_widgets;
v.advanced.apply_cfdata = _advanced_apply_data;
v.advanced.create_widgets = _advanced_create_widgets;
/* Create The Dialog */
cfd = e_config_dialog_new(con, _("ITray Configuration"), NULL, 0, &v, itray);
itray->config_dialog = cfd;
}
static void
_fill_data(ITray *ib, CFData *cfdata)
{
/* cfdata->autofit = (ib->conf->width == ITRAY_WIDTH_AUTO);
* cfdata->autoscroll_speed = ib->conf->autoscroll_speed;
*/
cfdata->follower = ib->conf->follower;
cfdata->rowsize = ib->conf->rowsize;
cfdata->follow_speed = ib->conf->follow_speed;
cfdata->allow_overlap = ib->conf->allow_overlap;
}
static void *
_create_data(E_Config_Dialog *cfd)
{
CFData *cfdata;
ITray *ib;
ib = cfd->data;
cfdata = E_NEW(CFData, 1);
_fill_data(ib, cfdata);
return cfdata;
}
static void
_free_data(E_Config_Dialog *cfd, CFData *cfdata)
{
ITray *ib;
ib = cfd->data;
ib->config_dialog = NULL;
free(cfdata);
}
static Evas_Object *
_basic_create_widgets(E_Config_Dialog *cfd, Evas *evas, CFData *cfdata)
{
Evas_Object *o, *ob, *of;
ITray *ib;
ib = cfd->data;
_fill_data(ib, cfdata);
o = e_widget_list_add(evas, 0, 0);
ob = e_widget_check_add(evas, _("Show Follower"), &(cfdata->follower));
e_widget_list_object_append(o, ob, 1, 1, 0.5);
/* ob = e_widget_check_add(evas, _("Auto Fit Icons"), &(cfdata->autofit));
* e_widget_list_object_append(o, ob, 1, 1, 0.5);
*/
of = e_widget_framelist_add(evas, _("Extras"), 0);
ob = e_widget_check_add(evas, _("Allow Overlap"), &(cfdata->allow_overlap));
e_widget_framelist_object_append(of, ob);
e_widget_list_object_append(o, of, 1, 1, 0.5);
return o;
}
static int
_basic_apply_data(E_Config_Dialog *cfd, CFData *cfdata)
{
ITray *ib;
ib = cfd->data;
if ((cfdata->follower) && (!ib->conf->follower))
ib->conf->follower = 1;
else if (!(cfdata->follower) && (ib->conf->follower))
ib->conf->follower = 0;
if (cfdata->allow_overlap && !ib->conf->allow_overlap)
ib->conf->allow_overlap = 1;
else if (!cfdata->allow_overlap && ib->conf->allow_overlap)
ib->conf->allow_overlap = 0;
/* if ((cfdata->autofit) && (ib->conf->width == ITRAY_WIDTH_FIXED))
* {
* ib->conf->width = ITRAY_WIDTH_AUTO;
* }
* else if (!(cfdata->autofit) && (ib->conf->width == ITRAY_WIDTH_AUTO))
* {
* ib->conf->width = ITRAY_WIDTH_FIXED;
* }
*/
e_config_save_queue();
_itray_box_cb_config_updated(ib);
return 1;
}
static Evas_Object *
_advanced_create_widgets(E_Config_Dialog *cfd, Evas *evas, CFData *cfdata)
{
Evas_Object *o, *of, *ob;
ITray *ib;
ib = cfd->data;
_fill_data(ib, cfdata);
o = e_widget_list_add(evas, 0, 0);
of = e_widget_framelist_add(evas, _("Follower"), 0);
ob = e_widget_check_add(evas, _("Visible"), &(cfdata->follower));
e_widget_framelist_object_append(of, ob);
ob = e_widget_label_add(evas, _("Follow Speed"));
e_widget_framelist_object_append(of, ob);
ob = e_widget_slider_add(evas, 1, 0, _("%1.2f px/s"), 0.0, 1.0, 0.01, 0, &(cfdata->follow_speed), NULL,200);
e_widget_framelist_object_append(of, ob);
e_widget_list_object_append(o, of, 1, 1, 0.5);
of = e_widget_framelist_add(evas, _("Number of Rows"), 0);
ob = e_widget_slider_add(evas, 1, 0, _("%3.0f"), 1.0, 6.0, 1.0, 0, NULL, &(cfdata->rowsize), 200);
e_widget_framelist_object_append(of, ob);
e_widget_list_object_append(o, of, 1, 1, 0.5);
/* of = e_widget_framelist_add(evas, _("Width"), 0);
* ob = e_widget_check_add(evas, _("Auto Fit"), &(cfdata->autofit));
* e_widget_framelist_object_append(of, ob);
* ob = e_widget_label_add(evas, _("Autoscroll Speed:"));
* e_widget_framelist_object_append(of, ob);
* ob = e_widget_slider_add(evas, 1, 0, _("%1.2f px/s"), 0.0, 1.0, 0.01, 0, &(cfdata->autoscroll_speed), NULL,200);
* e_widget_framelist_object_append(of, ob);
* e_widget_list_object_append(o, of, 1, 1, 0.5);
*/
of = e_widget_framelist_add(evas, _("Extras"), 0);
ob = e_widget_check_add(evas, _("Allow Overlap"), &(cfdata->allow_overlap));
e_widget_framelist_object_append(of, ob);
e_widget_list_object_append(o, of, 1, 1, 0.5);
return o;
}
static int
_advanced_apply_data(E_Config_Dialog *cfd, CFData *cfdata)
{
ITray *ib;
ib = cfd->data;
e_border_button_bindings_ungrab_all();
if ((cfdata->follower) && (!ib->conf->follower))
{
ib->conf->follower = 1;
}
else if (!(cfdata->follower) && (ib->conf->follower))
{
ib->conf->follower = 0;
}
/* if ((cfdata->autofit) && (ib->conf->width == ITRAY_WIDTH_FIXED))
* {
* ib->conf->width = ITRAY_WIDTH_AUTO;
* }
* else if (!(cfdata->autofit) && (ib->conf->width == ITRAY_WIDTH_AUTO))
* {
* ib->conf->width = ITRAY_WIDTH_FIXED;
* }
*/
if (cfdata->rowsize != ib->conf->rowsize)
{
ib->conf->rowsize = cfdata->rowsize;
}
if (cfdata->follow_speed != ib->conf->follow_speed)
{
ib->conf->follow_speed = cfdata->follow_speed;
}
if (cfdata->allow_overlap && !ib->conf->allow_overlap)
ib->conf->allow_overlap = 1;
else if (!cfdata->allow_overlap && ib->conf->allow_overlap)
ib->conf->allow_overlap = 0;
/* if (cfdata->autoscroll_speed != ib->conf->autoscroll_speed)
* {
* ib->conf->autoscroll_speed = cfdata->autoscroll_speed;
* }
*/
e_border_button_bindings_grab_all();
e_config_save_queue();
_itray_box_cb_config_updated(ib);
return 1;
}

View File

@ -0,0 +1,8 @@
#ifdef E_TYPEDEFS
#else
#ifndef E_MOD_CONFIG_H
#define E_MOD_CONFIG_H
#include "e_mod_main.h"
void _config_itray_module(E_Container *con, ITray *itray);
#endif
#endif

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,91 @@
/*
* vim:ts=8:sw=3:sts=8:noexpandtab:cino=>5n-3f0^-2{2
*/
#ifndef E_MOD_MAIN_H
#define E_MOD_MAIN_H
typedef struct _Config Config;
typedef struct _Config_Box Config_Box;
typedef struct _ITray ITray;
typedef struct _ITray_Box ITray_Box;
typedef struct _ITray_Tray ITray_Tray;
#define ITRAY_WIDTH_AUTO -1
#define ITRAY_WIDTH_FIXED -2
struct _Config
{
double follow_speed;
int follower;
double autoscroll_speed;
int rowsize;
int width;
Evas_List *boxes;
int allow_overlap;
};
struct _Config_Box
{
unsigned char enabled;
};
struct _ITray
{
Evas_List *boxes;
E_Menu *config_menu;
Config *conf;
E_Config_Dialog *config_dialog;
};
struct _ITray_Box
{
ITray *itray;
E_Container *con;
Evas *evas;
E_Menu *menu;
Evas_Object *box_object;
Evas_Object *overlay_object;
Evas_Object *item_object;
Evas_Object *event_object;
double align, align_req;
double follow, follow_req;
Ecore_Timer *timer;
Ecore_Animator *animator;
Evas_Coord x, y, w, h;
struct {
Evas_Coord l, r, t, b;
} box_inset;
E_Gadman_Client *gmc;
ITray_Tray *tray;
Config_Box *conf;
};
struct _ITray_Tray
{
int w, h;
int icons, rows;
Evas_List *wins;
Ecore_X_Window win;
Ecore_Event_Handler *msg_handler;
Ecore_Event_Handler *dst_handler;
};
EAPI extern E_Module_Api e_modapi;
EAPI void *e_modapi_init (E_Module *m);
EAPI int e_modapi_shutdown (E_Module *m);
EAPI int e_modapi_save (E_Module *m);
EAPI int e_modapi_info (E_Module *m);
EAPI int e_modapi_about (E_Module *m);
EAPI int e_modapi_config (E_Module *m);
void _itray_box_cb_config_updated(void *data);
#endif

Binary file not shown.

After

Width:  |  Height:  |  Size: 688 B

View File

@ -11,6 +11,7 @@ struct _E_Config_Dialog_Data
int name_pos;
int show_popup;
double popup_speed;
int allow_overlap;
};
struct _Cfg_File_Data
@ -61,6 +62,7 @@ _fill_data(Pager *p, E_Config_Dialog_Data *cfdata)
cfdata->show_popup = p->conf->popup;
cfdata->popup_speed = p->conf->popup_speed;
cfdata->allow_overlap = p->conf->allow_overlap;
}
static void *
@ -108,6 +110,11 @@ _basic_create_widgets(E_Config_Dialog *cfd, Evas *evas, E_Config_Dialog_Data *cf
e_widget_framelist_object_append(of, ob);
e_widget_list_object_append(o, of, 1, 1, 0.5);
of = e_widget_framelist_add(evas, _("Extras"), 0);
ob = e_widget_check_add(evas, _("Allow Overlap"), &(cfdata->allow_overlap));
e_widget_framelist_object_append(of, ob);
e_widget_list_object_append(o, of, 1, 1, 0.5);
/* Not Supported Yet ??
ob = e_widget_radio_add(evas, _("Left"), PAGER_DESKNAME_LEFT, rg);
e_widget_framelist_object_append(of, ob);
@ -130,6 +137,11 @@ _basic_apply_data(E_Config_Dialog *cfd, E_Config_Dialog_Data *cfdata)
p->conf->deskname_pos = cfdata->name_pos;
if (!cfdata->show_name) p->conf->deskname_pos = PAGER_DESKNAME_NONE;
if (cfdata->allow_overlap && !p->conf->allow_overlap)
p->conf->allow_overlap = 1;
else if (!cfdata->allow_overlap && p->conf->allow_overlap)
p->conf->allow_overlap = 0;
e_border_button_bindings_grab_all();
e_config_save_queue();
@ -176,6 +188,12 @@ _advanced_create_widgets(E_Config_Dialog *cfd, Evas *evas, E_Config_Dialog_Data
ob = e_widget_slider_add(evas, 1, 0, _("%1.1f seconds"), 0.1, 10.0, 0.1, 0, &(cfdata->popup_speed), NULL, 200);
e_widget_framelist_object_append(of, ob);
e_widget_list_object_append(o, of, 1, 1, 0.5);
of = e_widget_framelist_add(evas, _("Extras"), 0);
ob = e_widget_check_add(evas, _("Allow Overlap"), &(cfdata->allow_overlap));
e_widget_framelist_object_append(of, ob);
e_widget_list_object_append(o, of, 1, 1, 0.5);
return o;
}
@ -192,6 +210,11 @@ _advanced_apply_data(E_Config_Dialog *cfd, E_Config_Dialog_Data *cfdata)
if (!cfdata->show_name) p->conf->deskname_pos = PAGER_DESKNAME_NONE;
p->conf->popup_speed = cfdata->popup_speed;
if (cfdata->allow_overlap && !p->conf->allow_overlap)
p->conf->allow_overlap = 1;
else if (!cfdata->allow_overlap && p->conf->allow_overlap)
p->conf->allow_overlap = 0;
e_border_button_bindings_grab_all();
e_config_save_queue();

View File

@ -85,6 +85,8 @@ static void _pager_menu_cb_aspect_keep_height(void *data, E_Menu *m, E_Me
static void _pager_menu_cb_aspect_keep_width(void *data, E_Menu *m, E_Menu_Item *mi);
static void _pager_menu_cb_configure(void *data, E_Menu *m, E_Menu_Item *mi);
static void _pager_cb_update_policy(void *data);
static int _pager_count;
static E_Config_DD *_conf_edd;
@ -223,6 +225,7 @@ _pager_new(void)
E_CONFIG_VAL(D, T, deskname_pos, UINT);
E_CONFIG_VAL(D, T, popup_speed, DOUBLE);
E_CONFIG_VAL(D, T, popup, UINT);
E_CONFIG_VAL(D, T, allow_overlap, INT);
pager->conf = e_config_domain_load("module.pager", _conf_edd);
@ -232,10 +235,12 @@ _pager_new(void)
pager->conf->deskname_pos = PAGER_DESKNAME_NONE;
pager->conf->popup_speed = 1.0;
pager->conf->popup = 1;
pager->conf->allow_overlap = 0;
}
E_CONFIG_LIMIT(pager->conf->deskname_pos, PAGER_DESKNAME_NONE, PAGER_DESKNAME_RIGHT);
E_CONFIG_LIMIT(pager->conf->popup_speed, 0.1, 10.0);
E_CONFIG_LIMIT(pager->conf->popup, 0, 1);
E_CONFIG_LIMIT(pager->conf->allow_overlap, 0, 1);
_pager_config_menu_new(pager);
@ -424,6 +429,7 @@ _pager_face_new(Pager *pager, E_Zone *zone, Evas *evas, int use_gmc)
Evas_Coord x, y, w, h;
double aspect;
const char *drop[] = { "enlightenment/border", "enlightenment/pager_win" };
E_Gadman_Policy policy;
face = E_NEW(Pager_Face, 1);
if (!face) return NULL;
@ -471,13 +477,21 @@ _pager_face_new(Pager *pager, E_Zone *zone, Evas *evas, int use_gmc)
e_gadman_client_domain_set(face->gmc, "module.pager", _pager_count++);
e_gadman_client_zone_set(face->gmc, face->zone);
e_gadman_client_policy_set(face->gmc,
// E_GADMAN_POLICY_FIXED_ZONE |
E_GADMAN_POLICY_ANYWHERE |
E_GADMAN_POLICY_HMOVE |
E_GADMAN_POLICY_VMOVE |
E_GADMAN_POLICY_HSIZE |
E_GADMAN_POLICY_VSIZE);
policy = E_GADMAN_POLICY_ANYWHERE |
E_GADMAN_POLICY_HMOVE |
E_GADMAN_POLICY_VMOVE |
E_GADMAN_POLICY_HSIZE |
// E_GADMAN_POLICY_FIXED_ZONE |
E_GADMAN_POLICY_VSIZE;
if (pager->conf->allow_overlap == 0)
policy &= ~E_GADMAN_POLICY_ALLOW_OVERLAP;
else
policy |= E_GADMAN_POLICY_ALLOW_OVERLAP;
e_gadman_client_policy_set(face->gmc, policy);
e_gadman_client_min_size_set(face->gmc, 8, 8);
e_gadman_client_max_size_set(face->gmc, 600, 600);
e_gadman_client_auto_size_set(face->gmc,
@ -2139,6 +2153,7 @@ _pager_cb_config_updated(void *data)
/* Handle Desktop Name Position Change */
pager = data;
_pager_cb_update_policy(pager);
for (l = pager->faces; l; l = l->next)
{
Pager_Face *face;
@ -2147,3 +2162,24 @@ _pager_cb_config_updated(void *data)
_pager_face_deskname_position_change(face);
}
}
static void _pager_cb_update_policy(void *data)
{
Pager *pg;
Pager_Face *pf;
Evas_List *l;
E_Gadman_Policy policy;
pg = data;
for (l = pg->faces; l; l = l->next)
{
pf = l->data;
policy = pf->gmc->policy;
if (pg->conf->allow_overlap == 0)
policy &= ~E_GADMAN_POLICY_ALLOW_OVERLAP;
else
policy |= E_GADMAN_POLICY_ALLOW_OVERLAP;
e_gadman_client_policy_set(pf->gmc , policy);
}
}

View File

@ -32,6 +32,8 @@ struct _Config
double popup_speed;
/* Show popup? */
unsigned int popup;
int allow_overlap;
};
struct _Config_Face

View File

@ -20,7 +20,9 @@ INCLUDES = -I. \
pkgdir = $(libdir)/enlightenment/modules/$(MODULE)/$(MODULE_ARCH)
pkg_LTLIBRARIES = module.la
module_la_SOURCES = e_mod_main.c \
e_mod_main.h
e_mod_main.h \
e_mod_config.c \
e_mod_config.h
module_la_LIBADD = @e_libs@ @dlopen_libs@
module_la_LDFLAGS = -module -avoid-version
module_la_DEPENDENCIES = $(top_builddir)/config.h

View File

@ -0,0 +1,102 @@
#include "e.h"
#include "e_mod_main.h"
#include "config.h"
typedef struct _cfdata CFData;
typedef struct _Cfg_File_Data Cfg_File_Data;
struct _cfdata
{
int allow_overlap;
};
struct _Cfg_File_Data
{
E_Config_Dialog *cfd;
char *file;
};
/* Protos */
static Evas_Object *_create_widgets(E_Config_Dialog *cfd, Evas *evas, Config *cfdata);
static void *_create_data(E_Config_Dialog *cfd);
static void _free_data(E_Config_Dialog *cfd, CFData *cfdata);
static Evas_Object *_basic_create_widgets(E_Config_Dialog *cfd, Evas *evas, CFData *cfdata);
static int _basic_apply_data(E_Config_Dialog *cfd, CFData *cfdata);
void
_config_start_module(E_Container *con, Start *start)
{
E_Config_Dialog *cfd;
E_Config_Dialog_View v;
v.create_cfdata = _create_data;
v.free_cfdata = _free_data;
v.basic.apply_cfdata = _basic_apply_data;
v.basic.create_widgets = _basic_create_widgets;
v.advanced.apply_cfdata = NULL;
v.advanced.create_widgets = NULL;
cfd = e_config_dialog_new(con, _("Start Module Configuration"), NULL, 0, &v, start);
}
static void
_fill_data(Start *s, CFData *cfdata)
{
cfdata->allow_overlap = s->conf->allow_overlap;
}
static void
*_create_data(E_Config_Dialog *cfd)
{
CFData *cfdata;
Start *s;
s = cfd->data;
cfdata = E_NEW(CFData, 1);
_fill_data(s, cfdata);
return cfdata;
}
static void
_free_data(E_Config_Dialog *cfd, CFData *cfdata)
{
free(cfdata);
}
static Evas_Object
*_basic_create_widgets(E_Config_Dialog *cfd, Evas *evas, CFData *cfdata)
{
Evas_Object *o, *of, *ob;
Start *s;
s = cfd->data;
_fill_data(s, cfdata);
o = e_widget_list_add(evas, 0, 0);
of = e_widget_framelist_add(evas, _("Extras"), 0);
ob = e_widget_check_add(evas, _("Allow Overlap"), &(cfdata->allow_overlap));
e_widget_framelist_object_append(of, ob);
e_widget_list_object_append(o, of, 1, 1, 0.5);
return o;
}
static int
_basic_apply_data(E_Config_Dialog *cfd, CFData *cfdata)
{
Start *s;
s = cfd->data;
e_border_button_bindings_ungrab_all();
if (cfdata->allow_overlap && !s->conf->allow_overlap)
s->conf->allow_overlap = 1;
else if (!cfdata->allow_overlap && s->conf->allow_overlap)
s->conf->allow_overlap = 0;
e_border_button_bindings_grab_all();
e_config_save_queue();
_start_cb_config_updated(s);
return 1;
}

View File

@ -0,0 +1,8 @@
#ifdef E_TYPEDEFS
#else
#ifndef E_MOD_CONFIG_H
#define E_MOD_CONFIG_H
#include "e_mod_main.h"
EAPI void _config_start_module(E_Container *con, Start *start);
#endif
#endif

View File

@ -6,7 +6,7 @@
#include "e_int_menus.h"
static Start *_start_new(void);
static Start_Face *_start_face_new(E_Container *con);
static Start_Face *_start_face_new(Start *s, E_Container *con);
static void _start_free(Start *e);
static void _start_face_free(Start_Face *face);
static void _start_face_disable(Start_Face *e);
@ -17,6 +17,9 @@ static void _start_face_cb_gmc_change(void *data, E_Gadman_Client *gmc, E_Gadman
static void _start_face_cb_mouse_down(void *data, Evas *e, Evas_Object *obj, void *event_info);
static void _start_menu_cb_post_deactivate(void *data, E_Menu *m);
static void _start_face_cb_menu_configure(void *data, E_Menu *m, E_Menu_Item *mi);
static void _start_cb_update_policy(void *data);
static int button_count;
static E_Config_DD *conf_edd;
static E_Config_DD *conf_face_edd;
@ -79,6 +82,21 @@ e_modapi_about(E_Module *m)
return 1;
}
int
e_modapi_config(E_Module *m)
{
Start *s;
Start_Face *face;
s = m->data;
if (s == NULL) return 0;
if (s->faces == NULL) return 0;
face = s->faces->data;
if (face == NULL) return 0;
_config_start_module(e_container_current_get(e_manager_current_get()), s);
return 1;
}
static Start *
_start_new(void)
{
@ -103,9 +121,15 @@ _start_new(void)
#define T Config
#define D conf_edd
E_CONFIG_LIST(D, T, faces, conf_face_edd);
E_CONFIG_VAL(D, T, allow_overlap, INT);
e->conf = e_config_domain_load("module.start", conf_edd);
if (!e->conf) e->conf = E_NEW(Config, 1);
if (!e->conf)
{
e->conf = E_NEW(Config, 1);
e->conf->allow_overlap = 0;
}
E_CONFIG_LIMIT(e->conf->allow_overlap, 0, 1);
_start_config_menu_new(e);
@ -122,9 +146,10 @@ _start_new(void)
Start_Face *face;
con = l2->data;
face = _start_face_new(con);
face = _start_face_new(e, con);
if (face)
{
face->start = e;
e->faces = evas_list_append(e->faces, face);
/* Config */
if (!cl)
@ -142,6 +167,10 @@ _start_new(void)
/* Menu */
/* This menu must be initialized after conf */
_start_face_menu_new(face);
mi = e_menu_item_new(e->config_menu);
e_menu_item_label_set(mi, _("Configuration"));
e_menu_item_callback_set(mi, _start_face_cb_menu_configure, face);
mi = e_menu_item_new(e->config_menu);
e_menu_item_label_set(mi, con->name);
@ -157,10 +186,11 @@ _start_new(void)
}
static Start_Face *
_start_face_new(E_Container *con)
_start_face_new(Start *s, E_Container *con)
{
Start_Face *face;
Evas_Object *o;
E_Gadman_Policy policy;
face = E_NEW(Start_Face, 1);
if (!face) return NULL;
@ -186,12 +216,20 @@ _start_face_new(E_Container *con)
face->gmc = e_gadman_client_new(con->gadman);
e_gadman_client_domain_set(face->gmc, "module.start", button_count++);
e_gadman_client_policy_set(face->gmc,
E_GADMAN_POLICY_ANYWHERE |
E_GADMAN_POLICY_HMOVE |
E_GADMAN_POLICY_VMOVE |
E_GADMAN_POLICY_HSIZE |
E_GADMAN_POLICY_VSIZE);
policy = E_GADMAN_POLICY_ANYWHERE |
E_GADMAN_POLICY_HMOVE |
E_GADMAN_POLICY_VMOVE |
E_GADMAN_POLICY_HSIZE |
E_GADMAN_POLICY_VSIZE;
if (s->conf->allow_overlap == 0)
policy &= ~E_GADMAN_POLICY_ALLOW_OVERLAP;
else
policy |= E_GADMAN_POLICY_ALLOW_OVERLAP;
e_gadman_client_policy_set(face->gmc, policy);
e_gadman_client_min_size_set(face->gmc, 4, 4);
e_gadman_client_max_size_set(face->gmc, 512, 512);
e_gadman_client_auto_size_set(face->gmc, 40, 40);
@ -225,6 +263,10 @@ _start_face_menu_new(Start_Face *face)
*/
/* Edit */
mi = e_menu_item_new(mn);
e_menu_item_label_set(mi, _("Configuration"));
e_menu_item_callback_set(mi, _start_face_cb_menu_configure, face);
mi = e_menu_item_new(mn);
e_menu_item_label_set(mi, _("Edit Mode"));
e_menu_item_callback_set(mi, _start_face_cb_menu_edit, face);
@ -358,3 +400,39 @@ _start_menu_cb_post_deactivate(void *data, E_Menu *m)
e_object_del(E_OBJECT(face->main_menu));
face->main_menu = NULL;
}
void _start_cb_config_updated( void *data )
{
_start_cb_update_policy(data);
}
void
_start_face_cb_menu_configure(void *data, E_Menu *m, E_Menu_Item *mi)
{
Start_Face *face;
face = (Start_Face*)data;
if (!face) return;
_config_start_module(face->con, face->start);
}
static void _start_cb_update_policy(void *data)
{
Start *s;
Start_Face *sf;
Evas_List *l;
E_Gadman_Policy policy;
s = data;
for (l = s->faces; l; l = l->next)
{
sf = l->data;
policy = sf->gmc->policy;
if (s->conf->allow_overlap == 0)
policy &= ~E_GADMAN_POLICY_ALLOW_OVERLAP;
else
policy |= E_GADMAN_POLICY_ALLOW_OVERLAP;
e_gadman_client_policy_set(sf->gmc , policy);
}
}

View File

@ -9,6 +9,7 @@ typedef struct _Start_Face Start_Face;
struct _Config
{
Evas_List *faces;
int allow_overlap;
};
struct _Config_Face
@ -29,6 +30,7 @@ struct _Start_Face
E_Container *con;
E_Menu *menu;
E_Menu *main_menu;
Start *start;
Config_Face *conf;
@ -47,4 +49,6 @@ EAPI int e_modapi_info (E_Module *m);
EAPI int e_modapi_about (E_Module *m);
/* EAPI int e_modapi_config (E_Module *module); */
EAPI void _start_cb_config_updated(void *data);
#endif

View File

@ -32,6 +32,8 @@ struct _E_Config_Dialog_Data
int high_method;
int high_temp;
int allow_overlap;
int sensor;
};
@ -146,6 +148,8 @@ _fill_data(Temperature *t, E_Config_Dialog_Data *cfdata)
{
cfdata->sensor = 2;
}
cfdata->allow_overlap = t->conf->allow_overlap;
}
static void *
@ -248,6 +252,11 @@ _basic_create_widgets(E_Config_Dialog *cfd, Evas *evas, E_Config_Dialog_Data *cf
e_widget_list_object_append(o, of, 1, 1, 0.5);
}
of = e_widget_framelist_add(evas, _("Extras"), 0);
ob = e_widget_check_add(evas, _("Allow Overlap"), &(cfdata->allow_overlap));
e_widget_framelist_object_append(of, ob);
e_widget_list_object_append(o, of, 1, 1, 0.5);
return o;
}
@ -280,6 +289,11 @@ _basic_apply_data(E_Config_Dialog *cfd, E_Config_Dialog_Data *cfdata)
t->conf->high = cfdata->high_method;
}
if (cfdata->allow_overlap && !t->conf->allow_overlap)
t->conf->allow_overlap = 1;
else if (!cfdata->allow_overlap && t->conf->allow_overlap)
t->conf->allow_overlap = 0;
e_border_button_bindings_grab_all();
e_config_save_queue();
@ -392,6 +406,12 @@ _advanced_create_widgets(E_Config_Dialog *cfd, Evas *evas, E_Config_Dialog_Data
e_widget_framelist_object_append(of, ob);
e_widget_list_object_append(o, of, 1, 1, 0.5);
}
of = e_widget_framelist_add(evas, _("Extras"), 0);
ob = e_widget_check_add(evas, _("Allow Overlap"), &(cfdata->allow_overlap));
e_widget_framelist_object_append(of, ob);
e_widget_list_object_append(o, of, 1, 1, 0.5);
return o;
}
@ -446,6 +466,11 @@ _advanced_apply_data(E_Config_Dialog *cfd, E_Config_Dialog_Data *cfdata)
break;
}
if (cfdata->allow_overlap && !t->conf->allow_overlap)
t->conf->allow_overlap = 1;
else if (!cfdata->allow_overlap && t->conf->allow_overlap)
t->conf->allow_overlap = 0;
e_border_button_bindings_grab_all();
e_config_save_queue();

View File

@ -22,7 +22,7 @@ static void _temperature_free(Temperature *e);
static void _temperature_config_menu_new(Temperature *e);
static int _temperature_cb_check(void *data);
static Temperature_Face *_temperature_face_new(E_Container *con);
static Temperature_Face *_temperature_face_new(Temperature *t, E_Container *con);
static void _temperature_face_free(Temperature_Face *ef);
static void _temperature_face_enable(Temperature_Face *face);
static void _temperature_face_disable(Temperature_Face *face);
@ -33,6 +33,8 @@ static void _temperature_face_level_set(Temperature_Face *ef, double level);
static void _temperature_face_cb_menu_edit(void *data, E_Menu *m, E_Menu_Item *mi);
static void _temperature_face_cb_menu_configure(void *data, E_Menu *m, E_Menu_Item *mi);
static void _temperature_cb_update_policy(void *data);
static E_Config_DD *conf_edd;
static E_Config_DD *conf_face_edd;
@ -160,6 +162,7 @@ _temperature_new()
E_CONFIG_LIST(D, T, faces, conf_face_edd);
E_CONFIG_VAL(D, T, sensor_name, STR);
E_CONFIG_VAL(D, T, units, INT);
E_CONFIG_VAL(D, T, allow_overlap, INT);
e->conf = e_config_domain_load("module.temperature", conf_edd);
if (!e->conf)
@ -170,11 +173,13 @@ _temperature_new()
e->conf->high = 80;
e->conf->sensor_name = "temp1";
e->conf->units = CELCIUS;
e->conf->allow_overlap = 0;
}
E_CONFIG_LIMIT(e->conf->poll_time, 0.5, 1000.0);
E_CONFIG_LIMIT(e->conf->low, 0, 100);
E_CONFIG_LIMIT(e->conf->high, 0, 220);
E_CONFIG_LIMIT(e->conf->units, CELCIUS, FAHRENHEIT);
E_CONFIG_LIMIT(e->conf->allow_overlap, 0, 1);
_temperature_config_menu_new(e);
e->have_temp = -1;
@ -193,7 +198,7 @@ _temperature_new()
Temperature_Face *ef;
con = l2->data;
ef = _temperature_face_new(con);
ef = _temperature_face_new(e, con);
if (ef)
{
ef->temp = e;
@ -270,10 +275,11 @@ _temperature_config_menu_new(Temperature *e)
}
static Temperature_Face *
_temperature_face_new(E_Container *con)
_temperature_face_new(Temperature *t, E_Container *con)
{
Evas_Object *o;
Temperature_Face *ef;
E_Gadman_Policy policy;
ef = E_NEW(Temperature_Face, 1);
if (!ef) return NULL;
@ -299,12 +305,19 @@ _temperature_face_new(E_Container *con)
ef->gmc = e_gadman_client_new(ef->con->gadman);
e_gadman_client_domain_set(ef->gmc, "module.temperature", temperature_count++);
e_gadman_client_policy_set(ef->gmc,
E_GADMAN_POLICY_ANYWHERE |
E_GADMAN_POLICY_HMOVE |
E_GADMAN_POLICY_VMOVE |
E_GADMAN_POLICY_HSIZE |
E_GADMAN_POLICY_VSIZE);
policy = E_GADMAN_POLICY_ANYWHERE |
E_GADMAN_POLICY_HMOVE |
E_GADMAN_POLICY_VMOVE |
E_GADMAN_POLICY_HSIZE |
E_GADMAN_POLICY_VSIZE;
if (t->conf->allow_overlap == 0)
policy &= ~E_GADMAN_POLICY_ALLOW_OVERLAP;
else
policy |= E_GADMAN_POLICY_ALLOW_OVERLAP;
e_gadman_client_policy_set(ef->gmc, policy);
e_gadman_client_min_size_set(ef->gmc, 4, 4);
e_gadman_client_max_size_set(ef->gmc, 128, 128);
e_gadman_client_auto_size_set(ef->gmc, 40, 40);
@ -623,5 +636,28 @@ _temperature_face_cb_config_updated(Temperature *temp)
/* Call all funcs needed to handle update */
ecore_timer_del(temp->temperature_check_timer);
temp->temperature_check_timer = ecore_timer_add(temp->conf->poll_time, _temperature_cb_check, temp);
_temperature_cb_update_policy(temp);
}
void
_temperature_cb_update_policy(void *data)
{
Temperature *temp;
Temperature_Face *tf;
Evas_List *l;
E_Gadman_Policy policy;
temp = data;
for (l = temp->faces; l; l = l->next)
{
tf = l->data;
policy = tf->gmc->policy;
if (temp->conf->allow_overlap == 0)
policy &= ~E_GADMAN_POLICY_ALLOW_OVERLAP;
else
policy |= E_GADMAN_POLICY_ALLOW_OVERLAP;
e_gadman_client_policy_set(tf->gmc, policy);
}
}

View File

@ -22,6 +22,7 @@ struct _Config
Evas_List *faces;
char *sensor_name;
Unit units;
int allow_overlap;
};
struct _Config_Face