ZGold's patch for adding 'Add Keyboard Shortcut' to border menu.

SVN revision: 32195
This commit is contained in:
Christopher Michael 2007-10-28 19:07:25 +00:00
parent 32cbb1b860
commit c7811fef97
2 changed files with 123 additions and 89 deletions

View File

@ -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);

View File

@ -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)
{