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);
@ -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 */ /* Only allow to change layer for windows in "normal" layers */
if ((!bd->lock_user_maximize) && (!bd->shaded) && if ((!bd->lock_user_maximize) && (!bd->shaded) &&
((bd->layer == 50) || (bd->layer == 100) || (bd->layer == 150))) ((bd->layer == 50) || (bd->layer == 100) || (bd->layer == 150)))
{ {
m = e_menu_new(); m = e_menu_new();
e_menu_category_set(m,"border/maximize"); e_menu_category_set(m,"border/maximize");
e_menu_category_data_set("border/maximize",bd); e_menu_category_data_set("border/maximize",bd);
bd->border_maximize_menu = m; bd->border_maximize_menu = m;
mi = e_menu_item_new(m); mi = e_menu_item_new(m);
e_menu_item_label_set(mi, _("Maximize")); e_menu_item_label_set(mi, _("Maximize"));
e_menu_item_radio_set(mi, 1); e_menu_item_radio_set(mi, 1);
e_menu_item_radio_group_set(mi, 3); 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_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_callback_set(mi, _e_border_menu_cb_maximize, bd);
e_menu_item_icon_edje_set(mi, e_menu_item_icon_edje_set(mi,
e_theme_edje_file_get("base/theme/borders", e_theme_edje_file_get("base/theme/borders",
"e/widgets/border/default/maximize"), "e/widgets/border/default/maximize"),
"e/widgets/border/default/maximize"); "e/widgets/border/default/maximize");
mi = e_menu_item_new(m); mi = e_menu_item_new(m);
e_menu_item_label_set(mi, _("Maximize vertically")); e_menu_item_label_set(mi, _("Maximize vertically"));
e_menu_item_radio_set(mi, 1); e_menu_item_radio_set(mi, 1);
e_menu_item_radio_group_set(mi, 3); 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_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_callback_set(mi, _e_border_menu_cb_maximize_vertically, bd);
e_menu_item_icon_edje_set(mi, e_menu_item_icon_edje_set(mi,
e_theme_edje_file_get("base/theme/borders", e_theme_edje_file_get("base/theme/borders",
"e/widgets/border/default/maximize"), "e/widgets/border/default/maximize"),
"e/widgets/border/default/maximize"); "e/widgets/border/default/maximize");
mi = e_menu_item_new(m); mi = e_menu_item_new(m);
e_menu_item_label_set(mi, _("Maximize horizontally")); e_menu_item_label_set(mi, _("Maximize horizontally"));
e_menu_item_radio_set(mi, 1); e_menu_item_radio_set(mi, 1);
e_menu_item_radio_group_set(mi, 3); 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_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_callback_set(mi, _e_border_menu_cb_maximize_horizontally, bd);
e_menu_item_icon_edje_set(mi, e_menu_item_icon_edje_set(mi,
e_theme_edje_file_get("base/theme/borders", e_theme_edje_file_get("base/theme/borders",
"e/widgets/border/default/maximize"), "e/widgets/border/default/maximize"),
"e/widgets/border/default/maximize"); "e/widgets/border/default/maximize");
mi = e_menu_item_new(m); mi = e_menu_item_new(m);
e_menu_item_label_set(mi, _("Unmaximize")); e_menu_item_label_set(mi, _("Unmaximize"));
e_menu_item_radio_set(mi, 1); e_menu_item_radio_set(mi, 1);
e_menu_item_radio_group_set(mi, 3); 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_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_callback_set(mi, _e_border_menu_cb_unmaximize, bd);
e_menu_item_icon_edje_set(mi, e_menu_item_icon_edje_set(mi,
e_theme_edje_file_get("base/theme/borders", e_theme_edje_file_get("base/theme/borders",
"e/widgets/border/default/maximize"), "e/widgets/border/default/maximize"),
"e/widgets/border/default/maximize"); "e/widgets/border/default/maximize");
} }
m = e_menu_new(); m = e_menu_new();
e_menu_category_set(m,"border"); 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_label_set(mi, _("Add To Favorites Menu"));
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)
{ {
@ -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); o = e_icon_add(m->evas);
e_icon_data_set(o, bd->client.netwm.icons[0].data, e_icon_data_set(o, bd->client.netwm.icons[0].data,
bd->client.netwm.icons[0].width, bd->client.netwm.icons[0].width,
bd->client.netwm.icons[0].height); bd->client.netwm.icons[0].height);
e_icon_alpha_set(o, 1); e_icon_alpha_set(o, 1);
mi->icon_object = o; 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_label_set(submi, _("Select Border Style"));
e_menu_item_callback_set(submi, _e_border_menu_cb_border, bd); e_menu_item_callback_set(submi, _e_border_menu_cb_border, bd);
e_menu_item_icon_edje_set(submi, e_menu_item_icon_edje_set(submi,
e_theme_edje_file_get("base/theme/borders", e_theme_edje_file_get("base/theme/borders",
"e/widgets/border/default/borderless"), "e/widgets/border/default/borderless"),
"e/widgets/border/default/borderless"); "e/widgets/border/default/borderless");
submi = e_menu_item_new(subm); submi = e_menu_item_new(subm);
e_menu_item_separator_set(submi, 1); 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_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)
{ {
@ -892,7 +891,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;
@ -902,7 +900,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;
@ -1091,8 +1088,23 @@ _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("");
e_widget_entry_clear(cfdata->gui.o_params); if(strlen(cfdata->params) > 0)
e_widget_disabled_set(cfdata->gui.o_params, 1); {
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 else
{ {
@ -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)
{ {