Index: e/src/bin/e_config.c =================================================================== --- e.orig/src/bin/e_config.c +++ e/src/bin/e_config.c @@ -461,6 +461,7 @@ e_config_init(void) E_CONFIG_VAL(D, T, focus_last_focused_per_desktop, INT); /**/ E_CONFIG_VAL(D, T, focus_revert_on_hide_or_close, INT); /**/ E_CONFIG_VAL(D, T, pointer_slide, INT); /**/ + E_CONFIG_VAL(D, T, show_cursor, INT); /**/ E_CONFIG_VAL(D, T, use_e_cursor, INT); /**/ E_CONFIG_VAL(D, T, cursor_size, INT); /**/ E_CONFIG_VAL(D, T, menu_autoscroll_margin, INT); /**/ @@ -705,6 +706,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; @@ -1570,6 +1572,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); Index: e/src/modules/conf_mouse_cursor/e_int_config_cursor.c =================================================================== --- e.orig/src/modules/conf_mouse_cursor/e_int_config_cursor.c +++ e/src/modules/conf_mouse_cursor/e_int_config_cursor.c @@ -3,16 +3,25 @@ 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 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 +50,7 @@ e_int_config_cursor(E_Container *con, co static void _fill_data(E_Config_Dialog_Data *cfdata) { + cfdata->show_cursor = e_config->show_cursor; cfdata->use_e_cursor = e_config->use_e_cursor; cfdata->cursor_size = e_config->cursor_size; } @@ -66,9 +76,11 @@ _basic_apply_data(E_Config_Dialog *cfd, { int changed = 0; + if (e_config->show_cursor != cfdata->show_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_save_queue(); if (changed) @@ -79,6 +91,11 @@ _basic_apply_data(E_Config_Dialog *cfd, { 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 +103,17 @@ _basic_apply_data(E_Config_Dialog *cfd, 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 +122,14 @@ _basic_create_widgets(E_Config_Dialog *c 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); + 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 +145,11 @@ _advanced_apply_data(E_Config_Dialog *cf { int changed = 0; + if (e_config->show_cursor != cfdata->show_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->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 +164,11 @@ _advanced_apply_data(E_Config_Dialog *cf { 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 +176,18 @@ _advanced_apply_data(E_Config_Dialog *cf 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 +196,27 @@ _advanced_create_widgets(E_Config_Dialog 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); + 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; } Index: e/src/bin/e_pointer.c =================================================================== --- e.orig/src/bin/e_pointer.c +++ e/src/bin/e_pointer.c @@ -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; @@ -136,6 +138,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) { E_Pointer_Stack *stack; @@ -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 _ E_Pointer *p; Evas_Coord x, y; + if (!e_config->show_cursor) return; + p = data; if (!p->e_cursor) return; evas_object_geometry_get(p->hot_object, &x, &y, NULL, NULL); @@ -353,6 +365,13 @@ _e_pointer_type_set(E_Pointer *p, const 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; Index: e/src/bin/e_config.h =================================================================== --- e.orig/src/bin/e_config.h +++ e/src/bin/e_config.h @@ -166,6 +166,7 @@ struct _E_Config int focus_last_focused_per_desktop; // GUI int focus_revert_on_hide_or_close; // GUI int pointer_slide; // GUI + int show_cursor; // GUI int use_e_cursor; // GUI int cursor_size; // GUI int menu_autoscroll_margin; // GUI Index: e/src/bin/e_pointer.h =================================================================== --- e.orig/src/bin/e_pointer.h +++ e/src/bin/e_pointer.h @@ -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);