diff --git a/src/bin/e_int_border_menu.c b/src/bin/e_int_border_menu.c index 903898d82..ab5a9e6c7 100644 --- a/src/bin/e_int_border_menu.c +++ b/src/bin/e_int_border_menu.c @@ -33,6 +33,7 @@ static void _e_border_menu_cb_lower(void *data, E_Menu *m, E_Menu_Item *mi); static void _e_border_menu_cb_state_pre(void *data, E_Menu *m, E_Menu_Item *mi); static void _e_border_menu_cb_skip(void *data, E_Menu *m, E_Menu_Item *mi); static void _e_border_menu_cb_fav_add(void *data, E_Menu *m, E_Menu_Item *mi); +static void _e_border_menu_cb_kbdshrtct_add(void *data, E_Menu *m, E_Menu_Item *mi); static void _e_border_menu_cb_ibar_add_pre(void *data, E_Menu *m, E_Menu_Item *mi); static void _e_border_menu_cb_ibar_add(void *data, E_Menu *m, E_Menu_Item *mi); static void _e_border_menu_cb_border_pre(void *data, E_Menu *m, E_Menu_Item *mi); @@ -96,56 +97,56 @@ e_int_border_menu_show(E_Border *bd, Evas_Coord x, Evas_Coord y, int key, Ecore_ /* Only allow to change layer for windows in "normal" layers */ if ((!bd->lock_user_maximize) && (!bd->shaded) && ((bd->layer == 50) || (bd->layer == 100) || (bd->layer == 150))) - { - m = e_menu_new(); - e_menu_category_set(m,"border/maximize"); - e_menu_category_data_set("border/maximize",bd); - bd->border_maximize_menu = m; + { + m = e_menu_new(); + e_menu_category_set(m,"border/maximize"); + e_menu_category_data_set("border/maximize",bd); + bd->border_maximize_menu = m; - mi = e_menu_item_new(m); - e_menu_item_label_set(mi, _("Maximize")); - e_menu_item_radio_set(mi, 1); - e_menu_item_radio_group_set(mi, 3); - e_menu_item_toggle_set(mi, (bd->maximized & E_MAXIMIZE_DIRECTION) == E_MAXIMIZE_BOTH); - e_menu_item_callback_set(mi, _e_border_menu_cb_maximize, bd); - e_menu_item_icon_edje_set(mi, - e_theme_edje_file_get("base/theme/borders", - "e/widgets/border/default/maximize"), - "e/widgets/border/default/maximize"); - - mi = e_menu_item_new(m); - e_menu_item_label_set(mi, _("Maximize vertically")); - e_menu_item_radio_set(mi, 1); - e_menu_item_radio_group_set(mi, 3); - e_menu_item_toggle_set(mi, (bd->maximized & E_MAXIMIZE_DIRECTION) == E_MAXIMIZE_VERTICAL); - e_menu_item_callback_set(mi, _e_border_menu_cb_maximize_vertically, bd); - e_menu_item_icon_edje_set(mi, - e_theme_edje_file_get("base/theme/borders", - "e/widgets/border/default/maximize"), - "e/widgets/border/default/maximize"); - - mi = e_menu_item_new(m); - e_menu_item_label_set(mi, _("Maximize horizontally")); - e_menu_item_radio_set(mi, 1); - e_menu_item_radio_group_set(mi, 3); - e_menu_item_toggle_set(mi, (bd->maximized & E_MAXIMIZE_DIRECTION) == E_MAXIMIZE_HORIZONTAL); - e_menu_item_callback_set(mi, _e_border_menu_cb_maximize_horizontally, bd); - e_menu_item_icon_edje_set(mi, - e_theme_edje_file_get("base/theme/borders", - "e/widgets/border/default/maximize"), - "e/widgets/border/default/maximize"); - - mi = e_menu_item_new(m); - e_menu_item_label_set(mi, _("Unmaximize")); - e_menu_item_radio_set(mi, 1); - e_menu_item_radio_group_set(mi, 3); - e_menu_item_toggle_set(mi, (bd->maximized & E_MAXIMIZE_DIRECTION) == E_MAXIMIZE_NONE); - e_menu_item_callback_set(mi, _e_border_menu_cb_unmaximize, bd); - e_menu_item_icon_edje_set(mi, - e_theme_edje_file_get("base/theme/borders", - "e/widgets/border/default/maximize"), - "e/widgets/border/default/maximize"); - } + mi = e_menu_item_new(m); + e_menu_item_label_set(mi, _("Maximize")); + e_menu_item_radio_set(mi, 1); + e_menu_item_radio_group_set(mi, 3); + e_menu_item_toggle_set(mi, (bd->maximized & E_MAXIMIZE_DIRECTION) == E_MAXIMIZE_BOTH); + e_menu_item_callback_set(mi, _e_border_menu_cb_maximize, bd); + e_menu_item_icon_edje_set(mi, + e_theme_edje_file_get("base/theme/borders", + "e/widgets/border/default/maximize"), + "e/widgets/border/default/maximize"); + + mi = e_menu_item_new(m); + e_menu_item_label_set(mi, _("Maximize vertically")); + e_menu_item_radio_set(mi, 1); + e_menu_item_radio_group_set(mi, 3); + e_menu_item_toggle_set(mi, (bd->maximized & E_MAXIMIZE_DIRECTION) == E_MAXIMIZE_VERTICAL); + e_menu_item_callback_set(mi, _e_border_menu_cb_maximize_vertically, bd); + e_menu_item_icon_edje_set(mi, + e_theme_edje_file_get("base/theme/borders", + "e/widgets/border/default/maximize"), + "e/widgets/border/default/maximize"); + + mi = e_menu_item_new(m); + e_menu_item_label_set(mi, _("Maximize horizontally")); + e_menu_item_radio_set(mi, 1); + e_menu_item_radio_group_set(mi, 3); + e_menu_item_toggle_set(mi, (bd->maximized & E_MAXIMIZE_DIRECTION) == E_MAXIMIZE_HORIZONTAL); + e_menu_item_callback_set(mi, _e_border_menu_cb_maximize_horizontally, bd); + e_menu_item_icon_edje_set(mi, + e_theme_edje_file_get("base/theme/borders", + "e/widgets/border/default/maximize"), + "e/widgets/border/default/maximize"); + + mi = e_menu_item_new(m); + e_menu_item_label_set(mi, _("Unmaximize")); + e_menu_item_radio_set(mi, 1); + e_menu_item_radio_group_set(mi, 3); + e_menu_item_toggle_set(mi, (bd->maximized & E_MAXIMIZE_DIRECTION) == E_MAXIMIZE_NONE); + e_menu_item_callback_set(mi, _e_border_menu_cb_unmaximize, bd); + e_menu_item_icon_edje_set(mi, + e_theme_edje_file_get("base/theme/borders", + "e/widgets/border/default/maximize"), + "e/widgets/border/default/maximize"); + } m = e_menu_new(); e_menu_category_set(m,"border"); @@ -274,7 +275,14 @@ e_int_border_menu_show(E_Border *bd, Evas_Coord x, Evas_Coord y, int key, Ecore_ e_menu_item_label_set(mi, _("Add To Favorites Menu")); e_menu_item_callback_set(mi, _e_border_menu_cb_fav_add, bd); e_util_menu_item_edje_icon_set(mi, "enlightenment/favorites"); - + + if (e_configure_registry_exists("keyboard_and_mouse/key_bindings")) + { + mi = e_menu_item_new(m); + e_menu_item_label_set(mi, _("Add Keyboard Shortcut")); + e_menu_item_callback_set(mi, _e_border_menu_cb_kbdshrtct_add, bd); + e_util_menu_item_edje_icon_set(mi, "enlightenment/keys"); + } mi = e_menu_item_new(m); e_menu_item_label_set(mi, _("Add To Launcher")); e_menu_item_submenu_pre_callback_set(mi, _e_border_menu_cb_ibar_add_pre, bd); @@ -363,7 +371,6 @@ e_int_border_menu_show(E_Border *bd, Evas_Coord x, Evas_Coord y, int key, Ecore_ } } - if (key) e_menu_activate_key(m, bd->zone, x, y, 1, 1, E_MENU_POP_DIRECTION_DOWN); else @@ -428,6 +435,7 @@ static void _e_border_menu_cb_remember(void *data, E_Menu *m, E_Menu_Item *mi) { E_Border *bd; + bd = data; if (bd->border_remember_dialog) return; e_int_border_remember(bd); @@ -533,7 +541,6 @@ _e_border_menu_cb_unmaximize(void *data, E_Menu *m, E_Menu_Item *mi) e_border_unmaximize(bd, E_MAXIMIZE_BOTH); } -/*************************************************************/ static void _e_border_menu_cb_shade(void *data, E_Menu *m, E_Menu_Item *mi) { @@ -790,8 +797,8 @@ _e_border_menu_cb_netwm_icon(void *data, E_Menu *m, E_Menu_Item *mi) { o = e_icon_add(m->evas); e_icon_data_set(o, bd->client.netwm.icons[0].data, - bd->client.netwm.icons[0].width, - bd->client.netwm.icons[0].height); + bd->client.netwm.icons[0].width, + bd->client.netwm.icons[0].height); e_icon_alpha_set(o, 1); mi->icon_object = o; } @@ -818,9 +825,9 @@ _e_border_menu_cb_border_pre(void *data, E_Menu *m, E_Menu_Item *mi) e_menu_item_label_set(submi, _("Select Border Style")); e_menu_item_callback_set(submi, _e_border_menu_cb_border, bd); e_menu_item_icon_edje_set(submi, - e_theme_edje_file_get("base/theme/borders", - "e/widgets/border/default/borderless"), - "e/widgets/border/default/borderless"); + e_theme_edje_file_get("base/theme/borders", + "e/widgets/border/default/borderless"), + "e/widgets/border/default/borderless"); submi = e_menu_item_new(subm); e_menu_item_separator_set(submi, 1); @@ -958,7 +965,6 @@ _e_border_menu_cb_skip(void *data, E_Menu *m, E_Menu_Item *mi) e_object_data_set(E_OBJECT(subm), bd); e_menu_item_submenu_set(mi, subm); - submi = e_menu_item_new(subm); e_menu_item_label_set(submi, _("Window List")); e_menu_item_check_set(submi, 1); @@ -997,6 +1003,20 @@ _e_border_menu_cb_fav_add(void *data, E_Menu *m, E_Menu_Item *mi) efreet_menu_save(menu, buf); efreet_menu_free(menu); } +static void +_e_border_menu_cb_kbdshrtct_add(void *data, E_Menu *m, E_Menu_Item *mi) +{ + E_Border *bd; + E_Zone *zone; + char buf[4096]; + + bd = data; + if (!bd) return; + zone = e_util_zone_current_get(e_manager_current_get()); + if(!zone) return; + e_configure_registry_call("keyboard_and_mouse/key_bindings", + zone->container, bd->desktop->exec); +} static void _e_border_menu_cb_ibar_add_pre(void *data, E_Menu *m, E_Menu_Item *mi) @@ -1005,11 +1025,12 @@ _e_border_menu_cb_ibar_add_pre(void *data, E_Menu *m, E_Menu_Item *mi) E_Border *bd; Ecore_List *dirs; char buf[4096], *file; - + const char *homedir; + bd = data; if (!bd) return; - snprintf(buf, sizeof(buf), "%s/.e/e/applications/bar", - e_user_homedir_get()); + homedir = e_user_homedir_get(); + snprintf(buf, sizeof(buf), "%s/.e/e/applications/bar", homedir); dirs = ecore_file_ls(buf); if (!dirs) return; @@ -1019,8 +1040,7 @@ _e_border_menu_cb_ibar_add_pre(void *data, E_Menu *m, E_Menu_Item *mi) E_Menu_Item *smi; if (file[0] == '.') continue; - snprintf(buf, sizeof(buf), "%s/.e/e/applications/bar/%s", - e_user_homedir_get(), file); + snprintf(buf, sizeof(buf), "%s/.e/e/applications/bar/%s", homedir, file); if (ecore_file_is_dir(buf)) { smi = e_menu_item_new(sm); diff --git a/src/modules/conf_keybindings/e_int_config_keybindings.c b/src/modules/conf_keybindings/e_int_config_keybindings.c index 4e564d5ad..cd68478dd 100644 --- a/src/modules/conf_keybindings/e_int_config_keybindings.c +++ b/src/modules/conf_keybindings/e_int_config_keybindings.c @@ -52,19 +52,13 @@ struct _E_Config_Dialog_Data } binding; struct { - char *binding; - char *action; - char *params; - - char *cur; - int cur_act; - int add; + char *binding, *action, *params, *cur; + int cur_act, add; E_Dialog *dia; Ecore_X_Window bind_win; Evas_List *handlers; } locals; - struct { Evas_Object *o_add, *o_mod, *o_del, *o_del_all; @@ -72,11 +66,12 @@ struct _E_Config_Dialog_Data Evas_Object *o_params; } gui; + char *params; E_Config_Dialog *cfd; }; EAPI E_Config_Dialog * -e_int_config_keybindings(E_Container *con, const char *params __UNUSED__) +e_int_config_keybindings(E_Container *con, const char *params) { E_Config_Dialog *cfd; E_Config_Dialog_View *v; @@ -93,13 +88,19 @@ e_int_config_keybindings(E_Container *con, const char *params __UNUSED__) cfd = e_config_dialog_new(con, _("Key Binding Settings"), "E", "_config_keybindings_dialog", "enlightenment/keys", 0, v, NULL); + if (strlen(params) > 0) + { + cfd->cfdata->params = params; + _add_key_binding_cb(cfd->cfdata, NULL); + } + return cfd; } static void _fill_data(E_Config_Dialog_Data *cfdata) { - Evas_List *l; + Evas_List *l = NULL; E_Config_Binding_Key *bi, *bi2; cfdata->locals.binding = strdup(""); @@ -159,14 +160,14 @@ _free_data(E_Config_Dialog *cfd, E_Config_Dialog_Data *cfdata) if (cfdata->locals.binding) free(cfdata->locals.binding); if (cfdata->locals.action) free(cfdata->locals.action); if (cfdata->locals.params) free(cfdata->locals.params); - + if (cfdata->params) free(cfdata->params); E_FREE(cfdata); } static int _basic_apply_data(E_Config_Dialog *cfd, E_Config_Dialog_Data *cfdata) { - Evas_List *l; + Evas_List *l = NULL; E_Config_Binding_Key *bi, *bi2; _auto_apply_changes(cfdata); @@ -392,10 +393,11 @@ _delete_all_key_binding_cb(void *data, void *data2) _update_buttons(cfdata); } + static void _delete_key_binding_cb(void *data, void *data2) { - Evas_List *l; + Evas_List *l = NULL; char *n; int sel; E_Config_Dialog_Data *cfdata; @@ -621,6 +623,7 @@ _restore_key_binding_defaults_cb(void *data, void *data2) e_widget_entry_clear(cfdata->gui.o_params); e_widget_disabled_set(cfdata->gui.o_params, 1); } + /**************** Updates ***********/ static void _update_action_list(E_Config_Dialog_Data *cfdata) @@ -712,6 +715,7 @@ _update_action_list(E_Config_Dialog_Data *cfdata) } }*/ } + static void _update_action_params(E_Config_Dialog_Data *cfdata) { @@ -785,22 +789,17 @@ _update_action_params(E_Config_Dialog_Data *cfdata) if (!strcmp(action, actd->act_cmd)) { if ((!params) || (!params[0])) - { - KB_EXAMPLE_PARAMS; - } + KB_EXAMPLE_PARAMS; else e_widget_entry_text_set(cfdata->gui.o_params, params); } else - { - KB_EXAMPLE_PARAMS; - } + KB_EXAMPLE_PARAMS; } else - { - KB_EXAMPLE_PARAMS; - } + KB_EXAMPLE_PARAMS; } + static void _update_key_binding_list(E_Config_Dialog_Data *cfdata) { @@ -892,7 +891,6 @@ _key_binding_sort_cb(void *d1, void *d2) if (i < j) return -1; else if (i > j) return 1; - if (bi->modifiers < bi2->modifiers) return -1; else if (bi->modifiers > bi2->modifiers) return 1; @@ -902,7 +900,6 @@ _key_binding_sort_cb(void *d1, void *d2) if (i < j) return -1; else if (i > j) return 1; - i = strcmp(bi->key, bi2->key); if (i < 0) return -1; @@ -1091,8 +1088,23 @@ _grab_key_down_cb(void *data, int type, void *event) e_widget_ilist_unselect(cfdata->gui.o_action_list); if (cfdata->locals.action) free(cfdata->locals.action); cfdata->locals.action = strdup(""); - e_widget_entry_clear(cfdata->gui.o_params); - e_widget_disabled_set(cfdata->gui.o_params, 1); + if(strlen(cfdata->params) > 0) + { + int j,g = -1; + _find_key_binding_action("exec",NULL,&g,NULL,&j); + if(j >=0 ) + { + e_widget_ilist_unselect(cfdata->gui.o_action_list); + e_widget_ilist_selected_set(cfdata->gui.o_action_list, (j+g+1)); + e_widget_entry_clear(cfdata->gui.o_params); + e_widget_entry_text_set(cfdata->gui.o_params,cfdata->params); + } + } + else + { + e_widget_entry_clear(cfdata->gui.o_params); + e_widget_disabled_set(cfdata->gui.o_params, 1); + } } else { @@ -1192,6 +1204,7 @@ _auto_apply_changes(E_Config_Dialog_Data *cfdata) bi->params = evas_stringshare_add(cfdata->locals.params); } } + static void _find_key_binding_action(const char *action, const char *params, int *g, int *a, int *n) { @@ -1259,6 +1272,7 @@ _find_key_binding_action(const char *action, const char *params, int *g, int *a, if (n) *n = -1; } } + static char * _key_binding_text_get(E_Config_Binding_Key *bi) {