![]() |
Ansel 0.0
A darktable fork - bloat + design vision
|
Handle default and user-set shortcuts (accelerators) More...
Include dependency graph for accelerators.h:
This graph shows which files directly or indirectly include this file:Go to the source code of this file.
Data Structures | |
| struct | dt_accels_t |
| struct | dt_accels_t::scroll |
| struct | dt_shortcut_t |
Macros | |
| #define | DT_ACCELS_WIDGET_SHORTCUT_KEY "dt-accel-shortcut" |
| #define | DT_ACCELS_WIDGET_TOOLTIP_DISABLED_KEY "dt-accel-tooltip-disabled" |
| #define | DT_WIDGETS_ACCELERATORS_H |
| #define | DT_PRIMARY_MASK GDK_CONTROL_MASK |
| #define | dt_accels_new_darkroom_action(a, b, w, c, d, e, f, g) |
Typedefs | |
| typedef struct dt_accels_t | dt_accels_t |
| typedef enum dt_shortcut_type_t | dt_shortcut_type_t |
| typedef struct dt_shortcut_t | dt_shortcut_t |
| typedef gint(* | dt_accels_top_offset_handler_t) (void) |
| typedef void(* | dt_accels_refocus_handler_t) (void) |
| typedef gchar *(* | dt_accels_recent_get_handler_t) (int index) |
| typedef void(* | dt_accels_recent_set_handler_t) (int index, const char *value) |
Enumerations | |
| enum | dt_shortcut_type_t { DT_SHORTCUT_UNSET = 0 , DT_SHORTCUT_DEFAULT = 1 , DT_SHORTCUT_USER = 2 } |
Functions | |
| dt_accels_t * | dt_accels_init (char *config_file, GtkAccelFlags flags) |
| void | dt_accels_cleanup (dt_accels_t *accels) |
| gchar * | dt_accels_build_path (const gchar *scope, const gchar *feature) |
| void | dt_accels_load_user_config (dt_accels_t *accels) |
| Loads keyboardrc.lang from config dir. This needs to run after we inited the accel map from widgets creation. | |
| void | dt_accels_connect_accels (dt_accels_t *accels) |
| Actually enable accelerators after having loaded user config. | |
| void | dt_accels_connect_active_group (dt_accels_t *accels, const gchar *group) |
| Connect the contextual active accels group to the window. Views can declare their own set of contextual accels, which can override the global accels, in case they use the same keys. | |
| void | dt_accels_disconnect_active_group (dt_accels_t *accels) |
| Disconnect the contextual active accels group from the window. | |
| void | dt_accels_new_virtual_shortcut (dt_accels_t *accels, GtkAccelGroup *accel_group, const gchar *accel_path, GtkWidget *widget, guint key_val, GdkModifierType accel_mods) |
| Add a new virtual shortcut. Virtual shortcuts are immutable, read-only and don't trigger any action. They are meant to serve as placeholders, in a purely declarative way, for key combinations hardcoded in the key-pressed events handlers of widgets able to capture focus. Once declared here, they will prevent users from declaring their own shortcuts using hardcoded combinations for the corresponding accel_group. | |
| void | dt_accels_new_virtual_instance_shortcut (dt_accels_t *accels, gboolean(*action_callback)(GtkAccelGroup *group, GObject *acceleratable, guint keyval, GdkModifierType mods, gpointer user_data), gpointer data, GtkAccelGroup *accel_group, const gchar *action_scope, const gchar *action_name) |
| void | dt_accels_new_widget_shortcut (dt_accels_t *accels, GtkWidget *widget, const gchar *signal, GtkAccelGroup *accel_group, const gchar *accel_path, guint key_val, GdkModifierType accel_mods, const gboolean lock) |
| Register a new shortcut for a widget, setting up its path, default keys and accel group. This does everything but connecting it, so exists only as a defined slot to be connected later. | |
| void | dt_accels_new_action_shortcut (dt_accels_t *accels, gboolean(*action_callback)(GtkAccelGroup *group, GObject *acceleratable, guint keyval, GdkModifierType mods, gpointer user_data), gpointer data, GtkWidget *target_widget, GtkAccelGroup *accel_group, const gchar *action_scope, const gchar *action_name, guint key_val, GdkModifierType accel_mods, const gboolean lock, const char *description) |
| Register a new shortcut for a generic action, setting up its path, default keys and accel group. This does everything but connecting it, so exists only as a defined slot to be connected later. | |
| gboolean | dt_accels_dispatch (GtkWidget *w, GdkEvent *event, gpointer user_data) |
| Force our listener for all key strokes to bypass reserved Gtk keys. | |
| void | dt_accels_attach_scroll_handler (dt_accels_t *accels, gboolean(*callback)(GdkEventScroll event, void *data), void *data) |
| Attach a new global scroll event callback. So far this is used in darkroom to redirect scroll events to a Bauhaus widget when the focusing shortcut of that widget is held down on keyboard. | |
| void | dt_accels_detach_scroll_handler (dt_accels_t *accels) |
| static void | dt_accels_disable (dt_accels_t *accels, gboolean state) |
| void | dt_accels_remove_accel (dt_accels_t *accels, const char *path, gpointer data) |
Recursively remove all accels for all shortcuts containing path. This is unneeded for accels attached to Gtk widgets through dt_accels_new_widget_shortcut because Gtk will handle that internally when deleting a widget. But for our own widget-less dt_accels_new_action_shortcut, we need to handle that ourselves. | |
| void | dt_accels_remove_shortcut (dt_accels_t *accels, const char *path) |
| Remove the shortcut object identified by path and all its accels. | |
| void | dt_accels_window (dt_accels_t *accels, GtkWindow *main_window) |
| Show the modal dialog listing all available keyboard shortcuts and letting user to set them. | |
| void | dt_accels_search (dt_accels_t *accels, GtkWindow *main_window, GtkWidget *anchor) |
| void | dt_accels_set_global (dt_accels_t *accels) |
| dt_accels_t * | dt_accels_get_global (void) |
| void | dt_accels_disconnect_on_text_input (GtkWidget *widget) |
| Disconnect accels while a text or search entry has the focus, and reconnect them when it loses it. This is what makes one-key shortcuts safe to have at all. Escape hands focus back to the host's main area via dt_widget_refocus(). | |
| void | dt_accels_set_top_offset_handler (dt_accels_top_offset_handler_t handler) |
| void | dt_accels_set_refocus_handler (dt_accels_refocus_handler_t handler) |
| void | dt_accels_set_recent_handlers (dt_accels_recent_get_handler_t get, dt_accels_recent_set_handler_t set) |
Handle default and user-set shortcuts (accelerators)
Gtk is a bit weird here, so we need to :
Because of that, we need to prepare the list of acceleratable widgets first, populate the accel maps with their pathes, and only after fetching user-defined accels, we can connect actual actions. So it's not straight-forward.
That is:
Some keys appear reserved to Gtk/System, like Tab or Enter, depending on OS. So we have to use our own, custom, shortcut handler, which is mostly a thin wrapper over Gtk native features.
This allows us to decide in which order we process the several sets of shortcuts we maintain (global, lighttable, darkroom, map, print, slideshow). Global shortcuts are processed last, for all views. View-specific shortcuts are processed first, for the relevant view. This lets user have different actions mapped to the same shortcuts, depending on view but also have the view-centric shortcuts overwrite global ones if needed.
Module (IOP) instances will reuse the same shortcut for the main object and for all its children (sliders, comboboxes, buttons, etc.), because they share the same path (Darkroom/Modules/module_name/module_control) for all instances. We handle instances by appending a new (PayloadClosure *) object to the (GList *)shortcut->closure stack. (PayloadClosure *) contains a regular (GClosure *) followed by a pointer reference to the parent object (module) to identify the instance. When removing a module instance, we also remove the (PayloadClosure *) instance matching this module for all children shortcuts. This puts an hard assumption on 3 things:
user_data pointer reference (non NULL), that can be anything really as long as it is unique, belongs to the parent widget/module, and is constant over the lifetime of the parent and children.At any given time, we only pass the last-recorded (GClosure *) to the shortcut handler/GtkAccelMap/GtkAccelGroup, so the most recently built GUI instance owns the shortcut. It is only when an instance is removed that we remove the corresponding parent and children, wherever they are in the stack, and then rewire the shortcut with the new last item.
Definition in file accelerators.h.
Definition at line 446 of file accelerators.h.
| #define DT_ACCELS_WIDGET_SHORTCUT_KEY "dt-accel-shortcut" |
Definition at line 41 of file accelerators.h.
| #define DT_ACCELS_WIDGET_TOOLTIP_DISABLED_KEY "dt-accel-tooltip-disabled" |
Definition at line 42 of file accelerators.h.
| #define DT_PRIMARY_MASK GDK_CONTROL_MASK |
Definition at line 135 of file accelerators.h.
| #define DT_WIDGETS_ACCELERATORS_H |
Definition at line 120 of file accelerators.h.
| typedef gchar *(* dt_accels_recent_get_handler_t) (int index) |
Persistence for the shortcut-search history. The list is a user preference, so storing it belongs to the host. get returns a newly-allocated string or NULL; set takes a value or NULL to clear. Unregistered: the history is in-session only.
Definition at line 439 of file accelerators.h.
Definition at line 440 of file accelerators.h.
Return keyboard focus to the host's main area after an action with no target widget. Unregistered: focus is left where it is.
Definition at line 433 of file accelerators.h.
| typedef struct dt_accels_t dt_accels_t |
| typedef gint(* dt_accels_top_offset_handler_t) (void) |
Vertical offset, in pixels, below which a shortcut window should be placed (the host's top panel height). Unregistered: 0.
Definition at line 428 of file accelerators.h.
| typedef struct dt_shortcut_t dt_shortcut_t |
| typedef enum dt_shortcut_type_t dt_shortcut_type_t |
| enum dt_shortcut_type_t |
| Enumerator | |
|---|---|
| DT_SHORTCUT_UNSET | |
| DT_SHORTCUT_DEFAULT | |
| DT_SHORTCUT_USER | |
Definition at line 179 of file accelerators.h.
| void dt_accels_attach_scroll_handler | ( | dt_accels_t * | accels, |
| gboolean(*)(GdkEventScroll event, void *data) | callback, | ||
| void * | data | ||
| ) |
Attach a new global scroll event callback. So far this is used in darkroom to redirect scroll events to a Bauhaus widget when the focusing shortcut of that widget is held down on keyboard.
| callback | |
| data |
Definition at line 1299 of file accelerators.c.
References dt_accels_t::scroll::callback, dt_accels_t::scroll::data, and dt_accels_t::scroll.
Referenced by enter().
| gchar * dt_accels_build_path | ( | const gchar * | scope, |
| const gchar * | feature | ||
| ) |
Definition at line 1023 of file accelerators.c.
Referenced by _iop_panel_label(), _styles_get_submenu(), add_generic_top_menu_entry(), add_generic_top_submenu_entry(), dt_accels_new_action_shortcut(), dt_accels_new_virtual_instance_shortcut(), dt_bauhaus_init(), dt_bauhaus_widget_set_label(), dt_iop_gui_cleanup_module(), dt_iop_gui_init(), dt_lib_unload_module(), dt_thumbtable_new(), gui_cleanup(), gui_init(), gui_init(), and set_menu_entry().
| void dt_accels_cleanup | ( | dt_accels_t * | accels | ) |
Definition at line 427 of file accelerators.c.
References dt_accels_t::acceleratables, dt_accels_t::active_group, dt_accels_t::config_file, dt_accels_t::darkroom_accels, dt_free, dt_pthread_mutex_destroy(), dt_pthread_mutex_lock(), dt_pthread_mutex_unlock(), dt_accels_t::global_accels, dt_accels_t::lighttable_accels, dt_accels_t::lock, dt_accels_t::map_accels, dt_accels_t::print_accels, and dt_accels_t::slideshow_accels.
Referenced by dt_cleanup().
| void dt_accels_connect_accels | ( | dt_accels_t * | accels | ) |
Actually enable accelerators after having loaded user config.
| accels |
Definition at line 962 of file accelerators.c.
References _connect_accel_hashtable(), dt_accels_t::acceleratables, dt_pthread_mutex_lock(), dt_pthread_mutex_unlock(), and dt_accels_t::lock.
| void dt_accels_connect_active_group | ( | dt_accels_t * | accels, |
| const gchar * | group | ||
| ) |
Connect the contextual active accels group to the window. Views can declare their own set of contextual accels, which can override the global accels, in case they use the same keys.
| accels | |
| group | any of the following: "darkroom", "lighttable", "map", "print", "slideshow". |
Definition at line 457 of file accelerators.c.
References dt_accels_t::active_group, dt_accels_t::darkroom_accels, IS_NULL_PTR, dt_accels_t::lighttable_accels, dt_accels_t::map_accels, dt_accels_t::print_accels, dt_accels_t::reset, and dt_accels_t::slideshow_accels.
Referenced by enter().
| void dt_accels_detach_scroll_handler | ( | dt_accels_t * | accels | ) |
Definition at line 1305 of file accelerators.c.
References dt_accels_t::scroll::callback, dt_accels_t::scroll::data, and dt_accels_t::scroll.
Referenced by leave().
|
inlinestatic |
Definition at line 355 of file accelerators.h.
References dt_accels_t::disable_accels, and state.
Referenced by _text_entry_focus_in_event(), _text_entry_focus_out_event(), and dt_gui_refocus_center().
| void dt_accels_disconnect_active_group | ( | dt_accels_t * | accels | ) |
Disconnect the contextual active accels group from the window.
| accels |
Definition at line 493 of file accelerators.c.
References dt_accels_t::active_group, IS_NULL_PTR, and dt_accels_t::reset.
Referenced by leave().
Disconnect accels while a text or search entry has the focus, and reconnect them when it loses it. This is what makes one-key shortcuts safe to have at all. Escape hands focus back to the host's main area via dt_widget_refocus().
| widget | the entry to guard. |
Definition at line 3361 of file accelerators.c.
References _text_entry_focus_in_event(), _text_entry_focus_out_event(), and _text_entry_key_pressed().
Referenced by _add_tag_button_clicked(), _gui_init_datetime(), _gui_styles_dialog_run(), _lib_duplicate_init_callback(), _lib_tagging_tag_show_accel(), _pop_menu_dictionary_change_path(), _pop_menu_dictionary_create_tag(), _pop_menu_dictionary_edit_tag(), _presets_show_edit_dialog(), dt_gui_preferences_string(), dt_gui_show_standalone_string_dialog(), dt_iop_gui_rename_module(), gui_init(), gui_init(), gui_init(), gui_init(), gui_init(), init_tab_general(), and init_tab_presets().
| gboolean dt_accels_dispatch | ( | GtkWidget * | w, |
| GdkEvent * | event, | ||
| gpointer | user_data | ||
| ) |
Force our listener for all key strokes to bypass reserved Gtk keys.
| w | |
| event | |
| user_data |
Definition at line 1228 of file accelerators.c.
References _accels_keys_decode(), _key_pressed(), dt_accels_t::active_group, dt_accels_t::active_key, dt_accels_t::scroll::callback, dt_accels_t::scroll::data, dt_accels_t::disable_accels, FALSE, IS_NULL_PTR, dt_accels_t::reset, and dt_accels_t::scroll.
Referenced by dt_gui_gtk_init().
| dt_accels_t * dt_accels_get_global | ( | void | ) |
Definition at line 69 of file accelerators.c.
References _accels_global.
Referenced by _accels_tooltip_query_hook(), _text_entry_focus_in_event(), _text_entry_focus_out_event(), _widget_finalize(), dt_accels_search(), and dt_bauhaus_init().
| dt_accels_t * dt_accels_init | ( | char * | config_file, |
| GtkAccelFlags | flags | ||
| ) |
Definition at line 398 of file accelerators.c.
References _accels_install_tooltip_hook(), _clean_shortcut(), dt_accels_t::acceleratables, dt_accels_t::active_group, dt_accels_t::active_key, dt_accels_t::scroll::callback, dt_accels_t::config_file, dt_accels_t::darkroom_accels, dt_accels_t::scroll::data, dt_accels_t::default_mod_mask, dt_accels_t::disable_accels, dt_pthread_mutex_init(), FALSE, flags, dt_accels_t::flags, dt_accels_t::global_accels, dt_accels_t::init, dt_accels_t::keymap, dt_accels_t::lighttable_accels, dt_accels_t::lock, dt_accels_t::map_accels, dt_accels_t::print_accels, dt_accels_t::reset, dt_accels_t::scroll, and dt_accels_t::slideshow_accels.
Referenced by dt_gui_gtk_init().
| void dt_accels_load_user_config | ( | dt_accels_t * | accels | ) |
Loads keyboardrc.lang from config dir. This needs to run after we inited the accel map from widgets creation.
| accels |
Definition at line 910 of file accelerators.c.
References dt_accels_t::config_file.
Referenced by dt_gui_gtk_init().
| void dt_accels_new_action_shortcut | ( | dt_accels_t * | accels, |
| gboolean(*)(GtkAccelGroup *group, GObject *acceleratable, guint keyval, GdkModifierType mods, gpointer user_data) | action_callback, | ||
| gpointer | data, | ||
| GtkWidget * | target_widget, | ||
| GtkAccelGroup * | accel_group, | ||
| const gchar * | action_scope, | ||
| const gchar * | action_name, | ||
| guint | key_val, | ||
| GdkModifierType | accel_mods, | ||
| const gboolean | lock, | ||
| const char * | description | ||
| ) |
Register a new shortcut for a generic action, setting up its path, default keys and accel group. This does everything but connecting it, so exists only as a defined slot to be connected later.
The callback should have the following signature:
| accels | |
| data | Opaque payload handed back to action_callback. Its type is the caller's business and is never inspected here. |
| target_widget | The widget this action acts on, or NULL when it acts on something that is not a widget. Pass data itself when data IS a widget. The dispatcher uses it to pick between several instances registered on the same path, and to decide whether invoking the action should first move focus back to the center view. It must be declared rather than derived: asking GTK whether an opaque pointer is a widget reads through it as if it were a GObject, which is undefined for every payload that is not one. |
| accel_group | |
| action_scope | Human-readable, translated, category or scope of the action. Will be turned into path internally |
| action_name | Human-readable, translated, name or description of the action. Will be turned into path internally |
| key_val | |
| accel_mods | |
| lock | prevent user edition |
Definition at line 852 of file accelerators.c.
References _add_generic_accel(), _insert_accel(), _remove_generic_accel(), dt_shortcut_t::accel_group, dt_accels_t::acceleratables, dt_shortcut_t::accels, dt_shortcut_t::closure, description(), dt_shortcut_t::description, dt_accels_build_path(), dt_free, dt_pthread_mutex_lock(), dt_pthread_mutex_unlock(), dt_shortcut_get_closure(), dt_shortcut_set_closure(), DT_SHORTCUT_UNSET, FALSE, dt_accels_t::flags, dt_shortcut_t::key, lock, dt_accels_t::lock, dt_shortcut_t::locked, dt_shortcut_t::mods, dt_shortcut_t::path, dt_shortcut_t::signal, dt_shortcut_t::type, dt_shortcut_t::virtual_shortcut, and dt_shortcut_t::widget.
Referenced by dt_dev_toolbox_add_accels(), dt_lib_init_module(), gui_init(), and set_menu_entry().
| void dt_accels_new_virtual_instance_shortcut | ( | dt_accels_t * | accels, |
| gboolean(*)(GtkAccelGroup *group, GObject *acceleratable, guint keyval, GdkModifierType mods, gpointer user_data) | action_callback, | ||
| gpointer | data, | ||
| GtkAccelGroup * | accel_group, | ||
| const gchar * | action_scope, | ||
| const gchar * | action_name | ||
| ) |
Definition at line 756 of file accelerators.c.
References dt_shortcut_t::accel_group, dt_accels_t::acceleratables, dt_shortcut_t::accels, dt_shortcut_t::closure, dt_shortcut_t::description, dt_accels_build_path(), dt_free, dt_pthread_mutex_lock(), dt_pthread_mutex_unlock(), DT_SHORTCUT_DEFAULT, dt_shortcut_set_closure(), IS_NULL_PTR, dt_shortcut_t::key, dt_accels_t::lock, dt_shortcut_t::locked, dt_shortcut_t::mods, dt_shortcut_t::path, dt_shortcut_t::signal, TRUE, dt_shortcut_t::type, dt_shortcut_t::virtual_shortcut, and dt_shortcut_t::widget.
Referenced by _iop_panel_label().
| void dt_accels_new_virtual_shortcut | ( | dt_accels_t * | accels, |
| GtkAccelGroup * | accel_group, | ||
| const gchar * | accel_path, | ||
| GtkWidget * | widget, | ||
| guint | key_val, | ||
| GdkModifierType | accel_mods | ||
| ) |
Add a new virtual shortcut. Virtual shortcuts are immutable, read-only and don't trigger any action. They are meant to serve as placeholders, in a purely declarative way, for key combinations hardcoded in the key-pressed events handlers of widgets able to capture focus. Once declared here, they will prevent users from declaring their own shortcuts using hardcoded combinations for the corresponding accel_group.
| accel_group | |
| accel_path | |
| key_val | |
| accel_mods |
Definition at line 721 of file accelerators.c.
References _insert_accel(), _shortcut_set_widget_data(), _virtual_shortcut_callback(), dt_shortcut_t::accel_group, dt_accels_t::acceleratables, dt_shortcut_t::accels, dt_shortcut_t::closure, dt_shortcut_t::description, dt_pthread_mutex_lock(), dt_pthread_mutex_unlock(), dt_shortcut_set_closure(), DT_SHORTCUT_UNSET, IS_NULL_PTR, dt_shortcut_t::key, dt_accels_t::lock, dt_shortcut_t::locked, dt_shortcut_t::mods, dt_shortcut_t::path, dt_shortcut_t::signal, TRUE, dt_shortcut_t::type, dt_shortcut_t::virtual_shortcut, and dt_shortcut_t::widget.
Referenced by dt_bauhaus_init(), dt_thumbtable_new(), and gui_init().
| void dt_accels_new_widget_shortcut | ( | dt_accels_t * | accels, |
| GtkWidget * | widget, | ||
| const gchar * | signal, | ||
| GtkAccelGroup * | accel_group, | ||
| const gchar * | accel_path, | ||
| guint | key_val, | ||
| GdkModifierType | accel_mods, | ||
| const gboolean | lock | ||
| ) |
Register a new shortcut for a widget, setting up its path, default keys and accel group. This does everything but connecting it, so exists only as a defined slot to be connected later.
| accels | |
| widget | |
| signal | |
| accel_group | |
| accel_path | |
| key_val | |
| accel_mods | |
| lock | prevent user edition |
Definition at line 796 of file accelerators.c.
References _add_widget_accel(), _insert_accel(), _remove_widget_accel(), _shortcut_set_widget_data(), _widget_shortcut_callback(), dt_shortcut_t::accel_group, dt_accels_t::acceleratables, dt_shortcut_t::accels, dt_shortcut_t::closure, dt_shortcut_t::description, dt_pthread_mutex_lock(), dt_pthread_mutex_unlock(), dt_shortcut_set_closure(), DT_SHORTCUT_UNSET, FALSE, dt_accels_t::flags, key, dt_shortcut_t::key, lock, dt_accels_t::lock, dt_shortcut_t::locked, dt_shortcut_t::mods, dt_shortcut_t::path, dt_shortcut_t::signal, dt_shortcut_t::type, dt_shortcut_t::virtual_shortcut, and dt_shortcut_t::widget.
Referenced by gui_init().
| void dt_accels_remove_accel | ( | dt_accels_t * | accels, |
| const char * | path, | ||
| gpointer | data | ||
| ) |
Recursively remove all accels for all shortcuts containing path. This is unneeded for accels attached to Gtk widgets through dt_accels_new_widget_shortcut because Gtk will handle that internally when deleting a widget. But for our own widget-less dt_accels_new_action_shortcut, we need to handle that ourselves.
Accels are typically added at gui_init() time of their attached GUI object, and the typical use case of this API assumes those objects live until the app is closed. But IOP modules can be added/removed at runtime (instances), so we need to destroy accels when their target object (user_data pointer/callback) is destroyed. If some accels are left dangling with a reference to a non-existing callback/data/closure, the app will crash with segfault upon shortcut activation.
This will remove in one shot all accels attached to a parent and to all of its children, assuming that children will share their path root with their parent, and that rule is entirely up to the developer to enforce.
This does not remove the shortcut object.
| accels | |
| path | accel path |
| data | the user-data used by the initial callback, if any |
Definition at line 1000 of file accelerators.c.
References _remove_accel_hashtable(), dt_accels_t::acceleratables, dt_free, dt_pthread_mutex_lock(), dt_pthread_mutex_unlock(), IS_NULL_PTR, and dt_accels_t::lock.
Referenced by _widget_finalize(), dt_iop_gui_cleanup_module(), and gui_cleanup().
| void dt_accels_remove_shortcut | ( | dt_accels_t * | accels, |
| const char * | path | ||
| ) |
Remove the shortcut object identified by path and all its accels.
| accels | |
| path |
Definition at line 1015 of file accelerators.c.
References dt_accels_t::acceleratables, dt_pthread_mutex_lock(), dt_pthread_mutex_unlock(), and dt_accels_t::lock.
Referenced by _iop_panel_label(), dt_iop_gui_cleanup_module(), dt_lib_unload_module(), and gui_cleanup().
| void dt_accels_search | ( | dt_accels_t * | accels, |
| GtkWindow * | main_window, | ||
| GtkWidget * | anchor | ||
| ) |
Definition at line 3155 of file accelerators.c.
References _dispatch_selected_shortcut_idle(), _for_each_path_create_treeview_row(), _search_entry_button_pressed(), _search_entry_changed(), _search_entry_key_pressed(), _shortcut_search_button_press(), _shortcut_search_destroy(), _shortcut_search_load_recent_entries(), _shortcut_search_recent_completion_match(), _shortcut_search_recent_insert_prefix(), _shortcut_search_recent_match_selected(), _shortcut_search_recent_sort_func(), _shortcut_search_row_activated(), _shortcut_search_selection_changed(), _shortcut_search_visible(), _shortcut_search_window_key_pressed(), _sort_model_by_relevance_func(), _top_offset_handler, dt_accels_t::acceleratables, dt_accels_dispatch_state_t::accels, description(), dt_accels_get_global(), dt_free, dt_gui_add_class(), dt_osx_disallow_fullscreen(), FALSE, IS_NULL_PTR, dt_accels_dispatch_state_t::main_window, MAX, dt_accels_dispatch_state_t::path, scrolled(), search_entry, state, store, dt_accels_search_state_t::store, TRUE, and window.
Referenced by _open_accel_search_callback(), and search_accels_callback().
| void dt_accels_set_global | ( | dt_accels_t * | accels | ) |
The accels instance this process uses. Set once by the host at GUI init.
Definition at line 64 of file accelerators.c.
References _accels_global.
Referenced by dt_gui_gtk_init().
| void dt_accels_set_recent_handlers | ( | dt_accels_recent_get_handler_t | get, |
| dt_accels_recent_set_handler_t | set | ||
| ) |
Definition at line 84 of file accelerators.c.
References _recent_get, and _recent_set.
Referenced by dt_gui_gtk_init().
| void dt_accels_set_refocus_handler | ( | dt_accels_refocus_handler_t | handler | ) |
Definition at line 79 of file accelerators.c.
References _refocus_handler.
Referenced by dt_gui_gtk_init().
| void dt_accels_set_top_offset_handler | ( | dt_accels_top_offset_handler_t | handler | ) |
Definition at line 74 of file accelerators.c.
References _top_offset_handler.
Referenced by dt_gui_gtk_init().
| void dt_accels_window | ( | dt_accels_t * | accels, |
| GtkWindow * | main_window | ||
| ) |
Show the modal dialog listing all available keyboard shortcuts and letting user to set them.
| accels | |
| main_window | The main Ansel application window (for modal/transient) |
Definition at line 1836 of file accelerators.c.
References _for_each_accel_create_treeview_row(), _icon_activate(), _make_column_clearable(), _make_column_editable(), _shortcut_cleared(), _shortcut_edited(), _sort_model_func(), dt_accels_t::acceleratables, accels_global_ref, COL_CLEAR, COL_DESCRIPTION, COL_DISPLAY_MODS, COL_KEYS, COL_KEYVAL, COL_NAME, COL_PATH, dt_free, dt_free_gpointer(), dt_gtkentry_setup_completion(), dt_gui_add_class(), DT_GUI_BOX_SPACING, dt_osx_disallow_fullscreen(), dtgtk_cell_renderer_button_new(), FALSE, filter_callback(), i, NUM_COLUMNS, search_changed(), store, _accel_treeview_t::store, and TRUE.
Referenced by shortcuts_callback().