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_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_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_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_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_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); static void _e_border_menu_cb_border_pre(void *data, E_Menu *m, E_Menu_Item *mi);
@ -275,6 +276,13 @@ e_int_border_menu_show(E_Border *bd, Evas_Coord x, Evas_Coord y, int key, Ecore_
e_menu_item_callback_set(mi, _e_border_menu_cb_fav_add, bd); e_menu_item_callback_set(mi, _e_border_menu_cb_fav_add, bd);
e_util_menu_item_edje_icon_set(mi, "enlightenment/favorites"); 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); mi = e_menu_item_new(m);
e_menu_item_label_set(mi, _("Add To Launcher")); 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); 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) if (key)
e_menu_activate_key(m, bd->zone, x, y, 1, 1, E_MENU_POP_DIRECTION_DOWN); e_menu_activate_key(m, bd->zone, x, y, 1, 1, E_MENU_POP_DIRECTION_DOWN);
else else
@ -428,6 +435,7 @@ static void
_e_border_menu_cb_remember(void *data, E_Menu *m, E_Menu_Item *mi) _e_border_menu_cb_remember(void *data, E_Menu *m, E_Menu_Item *mi)
{ {
E_Border *bd; E_Border *bd;
bd = data; bd = data;
if (bd->border_remember_dialog) return; if (bd->border_remember_dialog) return;
e_int_border_remember(bd); 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); e_border_unmaximize(bd, E_MAXIMIZE_BOTH);
} }
/*************************************************************/
static void static void
_e_border_menu_cb_shade(void *data, E_Menu *m, E_Menu_Item *mi) _e_border_menu_cb_shade(void *data, E_Menu *m, E_Menu_Item *mi)
{ {
@ -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_object_data_set(E_OBJECT(subm), bd);
e_menu_item_submenu_set(mi, subm); e_menu_item_submenu_set(mi, subm);
submi = e_menu_item_new(subm); submi = e_menu_item_new(subm);
e_menu_item_label_set(submi, _("Window List")); e_menu_item_label_set(submi, _("Window List"));
e_menu_item_check_set(submi, 1); 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_save(menu, buf);
efreet_menu_free(menu); 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 static void
_e_border_menu_cb_ibar_add_pre(void *data, E_Menu *m, E_Menu_Item *mi) _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; E_Border *bd;
Ecore_List *dirs; Ecore_List *dirs;
char buf[4096], *file; char buf[4096], *file;
const char *homedir;
bd = data; bd = data;
if (!bd) return; if (!bd) return;
snprintf(buf, sizeof(buf), "%s/.e/e/applications/bar", homedir = e_user_homedir_get();
e_user_homedir_get()); snprintf(buf, sizeof(buf), "%s/.e/e/applications/bar", homedir);
dirs = ecore_file_ls(buf); dirs = ecore_file_ls(buf);
if (!dirs) return; 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; E_Menu_Item *smi;
if (file[0] == '.') continue; if (file[0] == '.') continue;
snprintf(buf, sizeof(buf), "%s/.e/e/applications/bar/%s", snprintf(buf, sizeof(buf), "%s/.e/e/applications/bar/%s", homedir, file);
e_user_homedir_get(), file);
if (ecore_file_is_dir(buf)) if (ecore_file_is_dir(buf))
{ {
smi = e_menu_item_new(sm); smi = e_menu_item_new(sm);

View File

@ -52,19 +52,13 @@ struct _E_Config_Dialog_Data
} binding; } binding;
struct struct
{ {
char *binding; char *binding, *action, *params, *cur;
char *action; int cur_act, add;
char *params;
char *cur;
int cur_act;
int add;
E_Dialog *dia; E_Dialog *dia;
Ecore_X_Window bind_win; Ecore_X_Window bind_win;
Evas_List *handlers; Evas_List *handlers;
} locals; } locals;
struct struct
{ {
Evas_Object *o_add, *o_mod, *o_del, *o_del_all; Evas_Object *o_add, *o_mod, *o_del, *o_del_all;
@ -72,11 +66,12 @@ struct _E_Config_Dialog_Data
Evas_Object *o_params; Evas_Object *o_params;
} gui; } gui;
char *params;
E_Config_Dialog *cfd; E_Config_Dialog *cfd;
}; };
EAPI E_Config_Dialog * 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 *cfd;
E_Config_Dialog_View *v; 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", cfd = e_config_dialog_new(con, _("Key Binding Settings"), "E",
"_config_keybindings_dialog", "_config_keybindings_dialog",
"enlightenment/keys", 0, v, NULL); "enlightenment/keys", 0, v, NULL);
if (strlen(params) > 0)
{
cfd->cfdata->params = params;
_add_key_binding_cb(cfd->cfdata, NULL);
}
return cfd; return cfd;
} }
static void static void
_fill_data(E_Config_Dialog_Data *cfdata) _fill_data(E_Config_Dialog_Data *cfdata)
{ {
Evas_List *l; Evas_List *l = NULL;
E_Config_Binding_Key *bi, *bi2; E_Config_Binding_Key *bi, *bi2;
cfdata->locals.binding = strdup(""); 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.binding) free(cfdata->locals.binding);
if (cfdata->locals.action) free(cfdata->locals.action); if (cfdata->locals.action) free(cfdata->locals.action);
if (cfdata->locals.params) free(cfdata->locals.params); if (cfdata->locals.params) free(cfdata->locals.params);
if (cfdata->params) free(cfdata->params);
E_FREE(cfdata); E_FREE(cfdata);
} }
static int static int
_basic_apply_data(E_Config_Dialog *cfd, E_Config_Dialog_Data *cfdata) _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; E_Config_Binding_Key *bi, *bi2;
_auto_apply_changes(cfdata); _auto_apply_changes(cfdata);
@ -392,10 +393,11 @@ _delete_all_key_binding_cb(void *data, void *data2)
_update_buttons(cfdata); _update_buttons(cfdata);
} }
static void static void
_delete_key_binding_cb(void *data, void *data2) _delete_key_binding_cb(void *data, void *data2)
{ {
Evas_List *l; Evas_List *l = NULL;
char *n; char *n;
int sel; int sel;
E_Config_Dialog_Data *cfdata; 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_entry_clear(cfdata->gui.o_params);
e_widget_disabled_set(cfdata->gui.o_params, 1); e_widget_disabled_set(cfdata->gui.o_params, 1);
} }
/**************** Updates ***********/ /**************** Updates ***********/
static void static void
_update_action_list(E_Config_Dialog_Data *cfdata) _update_action_list(E_Config_Dialog_Data *cfdata)
@ -712,6 +715,7 @@ _update_action_list(E_Config_Dialog_Data *cfdata)
} }
}*/ }*/
} }
static void static void
_update_action_params(E_Config_Dialog_Data *cfdata) _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 (!strcmp(action, actd->act_cmd))
{ {
if ((!params) || (!params[0])) if ((!params) || (!params[0]))
{
KB_EXAMPLE_PARAMS; KB_EXAMPLE_PARAMS;
}
else else
e_widget_entry_text_set(cfdata->gui.o_params, params); e_widget_entry_text_set(cfdata->gui.o_params, params);
} }
else else
{
KB_EXAMPLE_PARAMS; KB_EXAMPLE_PARAMS;
} }
}
else else
{
KB_EXAMPLE_PARAMS; KB_EXAMPLE_PARAMS;
} }
}
static void static void
_update_key_binding_list(E_Config_Dialog_Data *cfdata) _update_key_binding_list(E_Config_Dialog_Data *cfdata)
{ {
@ -893,7 +892,6 @@ _key_binding_sort_cb(void *d1, void *d2)
if (i < j) return -1; if (i < j) return -1;
else if (i > j) return 1; else if (i > j) return 1;
if (bi->modifiers < bi2->modifiers) return -1; if (bi->modifiers < bi2->modifiers) return -1;
else if (bi->modifiers > bi2->modifiers) return 1; else if (bi->modifiers > bi2->modifiers) return 1;
@ -903,7 +901,6 @@ _key_binding_sort_cb(void *d1, void *d2)
if (i < j) return -1; if (i < j) return -1;
else if (i > j) return 1; else if (i > j) return 1;
i = strcmp(bi->key, bi2->key); i = strcmp(bi->key, bi2->key);
if (i < 0) return -1; if (i < 0) return -1;
else if (i > 0) return 1; else if (i > 0) return 1;
@ -1091,9 +1088,24 @@ _grab_key_down_cb(void *data, int type, void *event)
e_widget_ilist_unselect(cfdata->gui.o_action_list); e_widget_ilist_unselect(cfdata->gui.o_action_list);
if (cfdata->locals.action) free(cfdata->locals.action); if (cfdata->locals.action) free(cfdata->locals.action);
cfdata->locals.action = strdup(""); cfdata->locals.action = strdup("");
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_entry_clear(cfdata->gui.o_params);
e_widget_disabled_set(cfdata->gui.o_params, 1); e_widget_disabled_set(cfdata->gui.o_params, 1);
} }
}
else else
{ {
char *label; char *label;
@ -1192,6 +1204,7 @@ _auto_apply_changes(E_Config_Dialog_Data *cfdata)
bi->params = evas_stringshare_add(cfdata->locals.params); bi->params = evas_stringshare_add(cfdata->locals.params);
} }
} }
static void static void
_find_key_binding_action(const char *action, const char *params, int *g, int *a, int *n) _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; if (n) *n = -1;
} }
} }
static char * static char *
_key_binding_text_get(E_Config_Binding_Key *bi) _key_binding_text_get(E_Config_Binding_Key *bi)
{ {