3 #define TEXT_PRESS_KEY_SEQUENCE _("Please press key sequence,<br><br>" \
4 "or <hilight>Escape</hilight> to abort.")
5 #define TEXT_PRESS_MOUSE_BINIDING_SEQUENCE _("Please hold any modifier you want<br>" \
6 "and press any button on your mouse,<br> or roll a" \
7 " wheel, to assign mouse binding." \
8 "<br>Press <hilight>Escape</highlight> to abort.")
11 _e_grab_dialog_key_handler(void *data, int type __UNUSED__, Ecore_Event_Key *ev)
13 E_Grab_Dialog *eg = data;
15 if (ev->window != eg->grab_win) return ECORE_CALLBACK_RENEW;
16 if (!strcmp(ev->keyname, "Escape") &&
17 !(ev->modifiers & ECORE_EVENT_MODIFIER_SHIFT) &&
18 !(ev->modifiers & ECORE_EVENT_MODIFIER_CTRL) &&
19 !(ev->modifiers & ECORE_EVENT_MODIFIER_ALT) &&
20 !(ev->modifiers & ECORE_EVENT_MODIFIER_WIN))
23 return ECORE_CALLBACK_RENEW;
29 eg->key(eg->data ?: eg, type, ev);
32 return ECORE_CALLBACK_RENEW;
36 _e_grab_dialog_wheel_handler(void *data, int type __UNUSED__, Ecore_Event_Mouse_Wheel *ev)
38 E_Grab_Dialog *eg = data;
40 if (ev->window != eg->grab_win) return ECORE_CALLBACK_RENEW;
45 eg->wheel(eg->data ?: eg, type, ev);
48 return ECORE_CALLBACK_RENEW;
52 _e_grab_dialog_mouse_handler(void *data, int type __UNUSED__, Ecore_Event_Mouse_Button *ev)
54 E_Grab_Dialog *eg = data;
56 if (ev->window != eg->grab_win) return ECORE_CALLBACK_RENEW;
61 eg->mouse(eg->data ?: eg, type, ev);
66 return ECORE_CALLBACK_RENEW;
70 _e_grab_dialog_free(E_Grab_Dialog *eg)
74 e_grabinput_release(eg->grab_win, eg->grab_win);
75 ecore_x_window_free(eg->grab_win);
77 E_FREE_LIST(eg->handlers, ecore_event_handler_del);
79 e_object_del(E_OBJECT(eg->dia));
84 _e_grab_dialog_delete(E_Win *win)
91 e_object_del(E_OBJECT(eg));
95 _e_grab_dialog_dia_del(void *data)
99 e_object_del(dia->data);
103 e_grab_dialog_show(E_Win *parent, Eina_Bool is_mouse, Ecore_Event_Handler_Cb key, Ecore_Event_Handler_Cb mouse, Ecore_Event_Handler_Cb wheel, const void *data)
108 Ecore_Event_Handler *eh;
112 con = parent->container;
114 e_border_focus_set(parent->border, 0, 1);
118 man = e_manager_current_get();
119 con = e_container_current_get(man);
122 eg = E_OBJECT_ALLOC(E_Grab_Dialog, E_GRAB_DIALOG_TYPE, _e_grab_dialog_free);
123 if (!eg) return NULL;
127 eg->dia = e_dialog_new(con, "E", "_mousebind_getmouse_dialog");
128 e_dialog_title_set(eg->dia, _("Mouse Binding Sequence"));
129 e_dialog_icon_set(eg->dia, "preferences-desktop-mouse", 48);
130 e_dialog_text_set(eg->dia, TEXT_PRESS_MOUSE_BINIDING_SEQUENCE);
134 eg->dia = e_dialog_new(con, "E", "_keybind_getkey_dialog");
135 e_dialog_title_set(eg->dia, _("Key Binding Sequence"));
136 e_dialog_icon_set(eg->dia, "preferences-desktop-keyboard-shortcuts", 48);
137 e_dialog_text_set(eg->dia, TEXT_PRESS_KEY_SEQUENCE);
140 e_win_centered_set(eg->dia->win, 1);
141 e_win_borderless_set(eg->dia->win, 1);
142 e_object_del_attach_func_set(E_OBJECT(eg->dia), _e_grab_dialog_dia_del);
143 e_win_delete_callback_set(eg->dia->win, _e_grab_dialog_delete);
145 eg->grab_win = ecore_x_window_input_new(man->root, 0, 0, 1, 1);
146 ecore_x_window_show(eg->grab_win);
147 e_grabinput_get(eg->grab_win, 0, eg->grab_win);
152 eg->data = (void*)data;
154 eh = ecore_event_handler_add(ECORE_EVENT_KEY_DOWN, (Ecore_Event_Handler_Cb)_e_grab_dialog_key_handler, eg);
155 eg->handlers = eina_list_append(eg->handlers, eh);
156 eh = ecore_event_handler_add(ECORE_EVENT_MOUSE_BUTTON_DOWN, (Ecore_Event_Handler_Cb)_e_grab_dialog_mouse_handler, eg);
157 eg->handlers = eina_list_append(eg->handlers, eh);
160 eh = ecore_event_handler_add(ECORE_EVENT_MOUSE_WHEEL, (Ecore_Event_Handler_Cb)_e_grab_dialog_wheel_handler, eg);
161 eg->handlers = eina_list_append(eg->handlers, eh);
163 e_dialog_show(eg->dia);
164 e_border_layer_set(eg->dia->win->border, 150);
165 e_hints_window_stacking_set(eg->dia->win->border, E_STACKING_ABOVE);
167 e_dialog_parent_set(eg->dia, parent);