add option to disable cursor and diasble the idle cursor anim.

SVN revision: 36313
This commit is contained in:
Carsten Haitzler 2008-09-29 14:01:30 +00:00
parent cd2f6c6d44
commit 1d3533c12a
7 changed files with 125 additions and 6 deletions

View File

@ -1,5 +1,5 @@
group "E_Config" struct {
value "config_version" int: 65831;
value "config_version" int: 65832;
value "show_splash" int: 1;
value "init_default_theme" string: "default.edj";
value "desktop_default_name" string: "Desktop %i, %i";
@ -1991,4 +1991,6 @@ group "E_Config" struct {
value "scale.base_dpi" int: 142;
value "scale.use_dpi" uchar: 0;
value "scale.use_custom" uchar: 1;
value "show_cursor" uchar: 1;
value "idle_cursor" uchar: 1;
}

View File

@ -3046,7 +3046,10 @@ e_border_act_close_begin(E_Border *bd)
e_border_ping(bd);
}
else if (e_config->kill_if_close_not_possible)
e_border_act_kill_begin(bd);
{
printf("KILL win %x (dead)\n", bd->client.win);
e_border_act_kill_begin(bd);
}
}
EAPI void

View File

@ -632,6 +632,9 @@ e_config_init(void)
E_CONFIG_VAL(D, T, scale.base_dpi, INT);
E_CONFIG_VAL(D, T, scale.use_dpi, UCHAR);
E_CONFIG_VAL(D, T, scale.use_custom, UCHAR);
E_CONFIG_VAL(D, T, show_cursor, UCHAR); /**/
E_CONFIG_VAL(D, T, idle_cursor, UCHAR); /**/
e_config = e_config_domain_load("e", _e_config_edd);
if (e_config)
@ -756,6 +759,7 @@ e_config_init(void)
e_config->focus_last_focused_per_desktop = 1;
e_config->focus_revert_on_hide_or_close = 1;
e_config->pointer_slide = 1;
e_config->show_cursor = 1;
e_config->use_e_cursor = 1;
e_config->cursor_size = 32;
e_config->menu_autoscroll_margin = 0;
@ -1577,6 +1581,11 @@ e_config_init(void)
e_config->scale.use_custom = 1;
IFCFGEND;
IFCFG(0x0128);
e_config->show_cursor = 1;
e_config->idle_cursor = 1;
IFCFGEND;
e_config->config_version = E_CONFIG_FILE_VERSION;
#if 0 /* example of new config */
@ -1652,6 +1661,7 @@ e_config_init(void)
E_CONFIG_LIMIT(e_config->focus_last_focused_per_desktop, 0, 1);
E_CONFIG_LIMIT(e_config->focus_revert_on_hide_or_close, 0, 1);
E_CONFIG_LIMIT(e_config->pointer_slide, 0, 1);
E_CONFIG_LIMIT(e_config->show_cursor, 0, 1);
E_CONFIG_LIMIT(e_config->use_e_cursor, 0, 1);
E_CONFIG_LIMIT(e_config->cursor_size, 0, 1024);
E_CONFIG_LIMIT(e_config->menu_autoscroll_margin, 0, 50);

View File

@ -33,7 +33,7 @@ typedef struct _E_Event_Config_Icon_Theme E_Event_Config_Icon_Theme;
/* increment this whenever a new set of config values are added but the users
* config doesn't need to be wiped - simply new values need to be put in
*/
#define E_CONFIG_FILE_GENERATION 0x0127
#define E_CONFIG_FILE_GENERATION 0x0128
#define E_CONFIG_FILE_VERSION ((E_CONFIG_FILE_EPOCH << 16) | E_CONFIG_FILE_GENERATION)
#define E_EVAS_ENGINE_DEFAULT 0
@ -310,6 +310,9 @@ struct _E_Config
unsigned char use_dpi;
unsigned char use_custom;
} scale;
unsigned char show_cursor; // GUI
unsigned char idle_cursor; // GUI
};
struct _E_Config_Module

View File

@ -94,6 +94,8 @@ e_pointers_size_set(int size)
{
Evas_List *l;
if (!e_config->show_cursor) return;
for (l = _e_pointers; l; l = l->next)
{
E_Pointer *p;
@ -135,6 +137,13 @@ e_pointers_size_set(int size)
}
}
EAPI void
e_pointer_hide(E_Pointer *p)
{
if (p->win) ecore_x_window_cursor_set(p->win, 0);
if (p->evas) _e_pointer_canvas_del(p);
}
EAPI void
e_pointer_type_push(E_Pointer *p, void *obj, const char *type)
{
@ -199,6 +208,7 @@ EAPI void
e_pointer_idler_before(void)
{
Evas_List *l;
if (!e_config->show_cursor) return;
for (l = _e_pointers; l; l = l->next)
{
@ -305,6 +315,8 @@ _e_pointer_cb_move(void *data, Evas *e __UNUSED__, Evas_Object *obj, void *event
E_Pointer *p;
Evas_Coord x, y;
if (!e_config->show_cursor) return;
p = data;
if (!p->e_cursor) return;
edje_object_part_geometry_get(p->pointer_object, "e.swallow.hotspot",
@ -357,6 +369,13 @@ _e_pointer_type_set(E_Pointer *p, const char *type)
if (p->type) evas_stringshare_del(p->type);
p->type = evas_stringshare_add(type);
/* Do not set type if in "hidden mode" */
if (!e_config->show_cursor)
{
ecore_x_window_cursor_set(p->win, 0);
return 1;
}
if (p->e_cursor)
{
Evas_Object *o;
@ -508,6 +527,7 @@ _e_pointer_active_handle(E_Pointer *p)
}
if (e_powersave_mode_get() >= E_POWERSAVE_MODE_MEDIUM) return;
/* and scedule a pre-idle check in 1 second if no more events happen */
if (!e_config->idle_cursor) return;
p->idle_timer = ecore_timer_add(1.0, _e_pointer_cb_idle_timer_pre, p);
}
@ -615,7 +635,8 @@ _e_pointer_cb_idle_timer_wait(void *data)
E_Pointer *p;
p = data;
if (e_powersave_mode_get() >= E_POWERSAVE_MODE_MEDIUM)
if ((e_powersave_mode_get() >= E_POWERSAVE_MODE_MEDIUM) ||
(!e_config->idle_cursor))
{
if (p->idle_poller)
ecore_poller_del(p->idle_poller);
@ -637,7 +658,8 @@ _e_pointer_cb_idle_poller(void *data)
int x, y;
p = data;
if (e_powersave_mode_get() >= E_POWERSAVE_MODE_MEDIUM)
if ((e_powersave_mode_get() >= E_POWERSAVE_MODE_MEDIUM) ||
(!e_config->idle_cursor))
{
p->idle_poller = NULL;
return 0;

View File

@ -42,6 +42,7 @@ struct _E_Pointer
EAPI int e_pointer_init(void);
EAPI int e_pointer_shutdown(void);
EAPI E_Pointer *e_pointer_window_new(Ecore_X_Window win, int filled);
EAPI void e_pointer_hide(E_Pointer *p);
EAPI void e_pointer_type_push(E_Pointer *p, void *obj, const char *type);
EAPI void e_pointer_type_pop(E_Pointer *p, void *obj, const char *type);
EAPI void e_pointers_size_set(int size);

View File

@ -3,16 +3,26 @@
static void *_create_data(E_Config_Dialog *cfd);
static void _free_data(E_Config_Dialog *cfd, E_Config_Dialog_Data *cfdata);
static int _basic_apply_data(E_Config_Dialog *cfd, E_Config_Dialog_Data *cfdata);
static void _basic_show_cursor_cb_change(void *data, Evas_Object *obj);
static Evas_Object *_basic_create_widgets(E_Config_Dialog *cfd, Evas *evas, E_Config_Dialog_Data *cfdata);
static int _advanced_apply_data(E_Config_Dialog *cfd, E_Config_Dialog_Data *cfdata);
static void _advanced_show_cursor_cb_change(void *data, Evas_Object *obj);
static Evas_Object *_advanced_create_widgets(E_Config_Dialog *cfd, Evas *evas, E_Config_Dialog_Data *cfdata);
struct _E_Config_Dialog_Data
{
int show_cursor;
int idle_cursor;
int use_e_cursor;
/* Advanced */
int cursor_size;
struct
{
Evas_Object *radio_use_e_cursor;
Evas_Object *slider_cursor_size;
} gui;
};
EAPI E_Config_Dialog *
@ -41,6 +51,8 @@ e_int_config_cursor(E_Container *con, const char *params __UNUSED__)
static void
_fill_data(E_Config_Dialog_Data *cfdata)
{
cfdata->show_cursor = e_config->show_cursor;
cfdata->idle_cursor = e_config->idle_cursor;
cfdata->use_e_cursor = e_config->use_e_cursor;
cfdata->cursor_size = e_config->cursor_size;
}
@ -66,9 +78,13 @@ _basic_apply_data(E_Config_Dialog *cfd, E_Config_Dialog_Data *cfdata)
{
int changed = 0;
if (e_config->show_cursor != cfdata->show_cursor) changed = 1;
if (e_config->idle_cursor != cfdata->idle_cursor) changed = 1;
if (e_config->use_e_cursor != cfdata->use_e_cursor) changed = 1;
e_config->use_e_cursor = cfdata->use_e_cursor;
e_config->show_cursor = cfdata->show_cursor;
e_config->idle_cursor = cfdata->idle_cursor;
e_config_save_queue();
if (changed)
@ -79,6 +95,11 @@ _basic_apply_data(E_Config_Dialog *cfd, E_Config_Dialog_Data *cfdata)
{
E_Manager *man;
man = l->data;
if (man->pointer && !e_config->show_cursor)
{
e_pointer_hide(man->pointer);
continue;
}
if (man->pointer) e_object_del(E_OBJECT(man->pointer));
man->pointer = e_pointer_window_new(man->root, 1);
}
@ -86,6 +107,17 @@ _basic_apply_data(E_Config_Dialog *cfd, E_Config_Dialog_Data *cfdata)
return 1;
}
static void
_basic_show_cursor_cb_change(void *data, Evas_Object *obj)
{
E_Config_Dialog_Data *cfdata;
cfdata = data;
if (!cfdata) return;
e_widget_disabled_set(cfdata->gui.radio_use_e_cursor, !cfdata->show_cursor);
}
static Evas_Object *
_basic_create_widgets(E_Config_Dialog *cfd, Evas *evas, E_Config_Dialog_Data *cfdata)
{
@ -94,8 +126,18 @@ _basic_create_widgets(E_Config_Dialog *cfd, Evas *evas, E_Config_Dialog_Data *cf
o = e_widget_list_add(evas, 0, 0);
ob = e_widget_check_add(evas, _("Show Cursor"), &(cfdata->show_cursor));
e_widget_on_change_hook_set(ob, _basic_show_cursor_cb_change, cfdata);
e_widget_list_object_append(o, ob, 1, 1, 0.5);
ob = e_widget_check_add(evas, _("Idle Cursor"), &(cfdata->idle_cursor));
e_widget_on_change_hook_set(ob, _basic_show_cursor_cb_change, cfdata);
e_widget_list_object_append(o, ob, 1, 1, 0.5);
of = e_widget_framelist_add(evas, _("Cursor Settings"), 0);
rg = e_widget_radio_group_new(&cfdata->use_e_cursor);
cfdata->gui.radio_use_e_cursor = rg;
ob = e_widget_radio_add(evas, _("Use Enlightenment Cursor"), 1, rg);
e_widget_framelist_object_append(of, ob);
ob = e_widget_radio_add(evas, _("Use X Cursor"), 0, rg);
@ -111,9 +153,13 @@ _advanced_apply_data(E_Config_Dialog *cfd, E_Config_Dialog_Data *cfdata)
{
int changed = 0;
if (e_config->show_cursor != cfdata->show_cursor) changed = 1;
if (e_config->idle_cursor != cfdata->idle_cursor) changed = 1;
if (e_config->use_e_cursor != cfdata->use_e_cursor) changed = 1;
if (e_config->cursor_size != cfdata->cursor_size) changed = 1;
e_config->show_cursor = cfdata->show_cursor;
e_config->idle_cursor = cfdata->idle_cursor;
e_config->use_e_cursor = cfdata->use_e_cursor;
if (cfdata->cursor_size <= 0) cfdata->cursor_size = 1;
e_config->cursor_size = cfdata->cursor_size;
@ -128,6 +174,11 @@ _advanced_apply_data(E_Config_Dialog *cfd, E_Config_Dialog_Data *cfdata)
{
E_Manager *man;
man = l->data;
if (man->pointer && !e_config->show_cursor)
{
e_pointer_hide(man->pointer);
continue;
}
if (man->pointer) e_object_del(E_OBJECT(man->pointer));
man->pointer = e_pointer_window_new(man->root, 1);
}
@ -135,6 +186,18 @@ _advanced_apply_data(E_Config_Dialog *cfd, E_Config_Dialog_Data *cfdata)
return 1;
}
static void
_advanced_show_cursor_cb_change(void *data, Evas_Object *obj)
{
E_Config_Dialog_Data *cfdata;
cfdata = data;
if (!cfdata) return;
e_widget_disabled_set(cfdata->gui.radio_use_e_cursor, !cfdata->show_cursor);
e_widget_disabled_set(cfdata->gui.slider_cursor_size, !cfdata->show_cursor);
}
static Evas_Object *
_advanced_create_widgets(E_Config_Dialog *cfd, Evas *evas, E_Config_Dialog_Data *cfdata)
{
@ -143,16 +206,31 @@ _advanced_create_widgets(E_Config_Dialog *cfd, Evas *evas, E_Config_Dialog_Data
o = e_widget_list_add(evas, 0, 0);
ob = e_widget_check_add(evas, _("Show Cursor"), &(cfdata->show_cursor));
e_widget_on_change_hook_set(ob, _advanced_show_cursor_cb_change, cfdata);
e_widget_list_object_append(o, ob, 1, 1, 0.5);
ob = e_widget_check_add(evas, _("Idle Cursor"), &(cfdata->idle_cursor));
e_widget_on_change_hook_set(ob, _advanced_show_cursor_cb_change, cfdata);
e_widget_list_object_append(o, ob, 1, 1, 0.5);
of = e_widget_framelist_add(evas, _("Cursor Settings"), 0);
rg = e_widget_radio_group_new(&cfdata->use_e_cursor);
cfdata->gui.radio_use_e_cursor = rg;
ob = e_widget_radio_add(evas, _("Use Enlightenment Cursor"), 1, rg);
e_widget_framelist_object_append(of, ob);
ob = e_widget_radio_add(evas, _("Use X Cursor"), 0, rg);
e_widget_framelist_object_append(of, ob);
ob = e_widget_label_add(evas, _("Cursor Size"));
e_widget_framelist_object_append(of, ob);
ob = e_widget_slider_add(evas, 1, 0, _("%1.0f pixels"), 8, 128, 4, 0, NULL, &(cfdata->cursor_size), 150);
cfdata->gui.slider_cursor_size = ob;
e_widget_framelist_object_append(of, ob);
e_widget_list_object_append(o, of, 1, 1, 0.5);
return o;
}