![]() |
Ansel 0.0
A darktable fork - bloat + design vision
|
#include "accelerators.h"
#include "common/darktable.h"
#include "gui/gtkentry.h"
#include "gui/gdkkeys.h"
#include "dtgtk/icon_cell_renderer.h"
#include <assert.h>
#include <glib.h>
Data Structures | |
struct | PayloadClosure |
struct | _accel_removal_t |
struct | _accel_lookup_t |
struct | _accel_treeview_t |
struct | _accel_window_params_t |
Typedefs | |
typedef struct _accel_removal_t | _accel_removal_t |
typedef struct _accel_lookup_t | _accel_lookup_t |
typedef struct _accel_treeview_t | _accel_treeview_t |
typedef struct _accel_window_params_t | _accel_window_params_t |
Enumerations | |
enum | { COL_NAME , COL_KEYS , COL_CLEAR , COL_DESCRIPTION , COL_PATH , COL_SHORTCUT , COL_KEYVAL , COL_MODS , NUM_COLUMNS } |
Functions | |
static void | _g_list_closure_unref (gpointer data) |
static void | _clean_shortcut (gpointer data) |
PayloadClosure * | dt_shortcut_get_payload_closure (dt_shortcut_t *shortcut) |
GClosure * | dt_shortcut_get_closure (dt_shortcut_t *shortcut) |
void | dt_shortcut_remove_closure (dt_shortcut_t *shortcut, gpointer data) |
static void | _find_parent_hashtable (gpointer _key, gpointer value, gpointer user_data) |
static void | _insert_parent_data_into_children (dt_shortcut_t *shortcut) |
void | dt_shortcut_set_closure (dt_shortcut_t *shortcut, gboolean(*action_callback)(GtkAccelGroup *group, GObject *acceleratable, guint keyval, GdkModifierType mods, gpointer user_data), gpointer data) |
dt_accels_t * | dt_accels_init (char *config_file, GtkAccelFlags flags) |
void | dt_accels_cleanup (dt_accels_t *accels) |
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. | |
static gboolean | _update_shortcut_state (dt_shortcut_t *shortcut, GtkAccelKey *key, gboolean init) |
static void | _add_widget_accel (dt_shortcut_t *shortcut, GtkAccelFlags flags) |
static void | _remove_widget_accel (dt_shortcut_t *shortcut, const GtkAccelKey *old_key) |
static void | _remove_generic_accel (dt_shortcut_t *shortcut) |
static void | _add_generic_accel (dt_shortcut_t *shortcut, GtkAccelFlags flags) |
static void | _insert_accel (dt_accels_t *accels, dt_shortcut_t *shortcut) |
static gboolean | _virtual_shortcut_callback (GtkAccelGroup *group, GObject *acceleratable, guint keyval, GdkModifierType mods, gpointer user_data) |
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, 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. | |
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. | |
static void | _connect_accel (dt_shortcut_t *shortcut) |
static void | _connect_accel_hashtable (gpointer _key, gpointer value, gpointer user_data) |
void | dt_accels_connect_accels (dt_accels_t *accels) |
Actually enable accelerators after having loaded user config. | |
static void | _remove_accel_hashtable (gpointer _key, gpointer value, gpointer user_data) |
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. | |
gchar * | dt_accels_build_path (const gchar *scope, const gchar *feature) |
static void | _accels_keys_decode (dt_accels_t *accels, GdkEvent *event, guint *keyval, GdkModifierType *mods) |
static void | _for_each_accel (gpointer key, gpointer value, gpointer user_data) |
static const char * | _find_path_for_keys (dt_accels_t *accels, guint key, GdkModifierType modifier, GtkAccelGroup *group) |
static gboolean | _key_pressed (GtkWidget *w, GdkEvent *event, dt_accels_t *accels, guint keyval, GdkModifierType mods) |
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 | _make_column_editable (GtkTreeViewColumn *col, GtkCellRenderer *renderer, GtkTreeModel *model, GtkTreeIter *iter, gpointer data) |
static void | _make_column_clearable (GtkTreeViewColumn *col, GtkCellRenderer *renderer, GtkTreeModel *model, GtkTreeIter *iter, gpointer data) |
static void | _shortcut_edited (GtkCellRenderer *cell, const gchar *path_string, guint keyval, GdkModifierType mods, guint hardware_key, gpointer user_data) |
static gboolean | _icon_activate (GtkCellRenderer *cell, GdkEvent *event, GtkWidget *treeview, const gchar *path_str, GdkRectangle *background, GdkRectangle *cell_area, GtkCellRendererState flags, gpointer user_data) |
static void | _create_main_row (GtkTreeStore *store, GtkTreeIter *iter, const char *label, const char *path, dt_shortcut_t *shortcut) |
void | _for_each_accel_create_treeview_row (gpointer key, gpointer value, gpointer user_data) |
void | _for_each_path_create_treeview_row (gpointer key, gpointer value, gpointer user_data) |
static gint | _sort_model_by_relevance_func (GtkTreeModel *model, GtkTreeIter *a, GtkTreeIter *b, gpointer data) |
static gint | _sort_model_func (GtkTreeModel *model, GtkTreeIter *a, GtkTreeIter *b, gpointer data) |
static gboolean | filter_callback (GtkTreeModel *model, GtkTreeIter *iter, gpointer user_data) |
static void | search_changed (GtkEntry *entry, gpointer user_data) |
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. | |
static int | _match_text (GtkTreeModel *model, GtkTreeIter *iter, const char *needle) |
static void | _find_and_rank_matches (GtkTreeModel *model, GtkWidget *search_entry) |
static void | _search_entry_changed (GtkWidget *widget, gpointer user_data) |
static void | _call_shortcut_cclosure (dt_shortcut_t *shortcut, GtkWindow *main_window) |
static gboolean | _run_action_from_shortcut (dt_shortcut_t *shortcut, GtkDialog *dialog, GtkWindow *main_window) |
static gboolean | _match_selected (GtkEntryCompletion *cmp, GtkTreeModel *model, GtkTreeIter *iter, gpointer user_data) |
static gboolean | _search_entry_key_pressed (GtkWidget *widget, GdkEventKey *event, gpointer user_data) |
gboolean | _match_func (GtkEntryCompletion *completion, const gchar *key, GtkTreeIter *iter, gpointer user_data) |
void | dt_accels_search (dt_accels_t *accels, GtkWindow *main_window) |
typedef struct _accel_lookup_t _accel_lookup_t |
typedef struct _accel_removal_t _accel_removal_t |
typedef struct _accel_treeview_t _accel_treeview_t |
typedef struct _accel_window_params_t _accel_window_params_t |
anonymous enum |
|
static |
References darktable, dt_accels_t::default_mod_mask, DT_DEBUG_SHORTCUTS, dt_keys_mainpad_alternatives(), dt_print(), dt_accels_t::keymap, and darktable_t::unmuted.
Referenced by dt_accels_dispatch().
|
static |
References dt_shortcut_t::accel_group, dt_shortcut_get_closure(), flags, dt_shortcut_t::key, and dt_shortcut_t::mods.
Referenced by _connect_accel(), _remove_accel_hashtable(), and dt_accels_new_action_shortcut().
|
static |
For native Gtk widget accels, we create alternatives for numpad keys, in case we fail to decode them ourselves and defer to native Gtk. Otherwise, numpad keys are also converted at input event handling.
References dt_shortcut_t::accel_group, dt_keys_numpad_alternatives(), flags, dt_shortcut_t::key, dt_shortcut_t::mods, dt_shortcut_t::signal, and dt_shortcut_t::widget.
Referenced by _connect_accel(), and dt_accels_new_widget_shortcut().
|
static |
References dt_shortcut_t::accel_group, dt_shortcut_get_closure(), dt_shortcut_t::key, and dt_shortcut_t::mods.
Referenced by _run_action_from_shortcut().
|
static |
References _g_list_closure_unref(), dt_shortcut_t::closure, and dt_shortcut_t::path.
Referenced by dt_accels_init().
|
static |
References _add_generic_accel(), _add_widget_accel(), _remove_generic_accel(), _remove_widget_accel(), _update_shortcut_state(), dt_shortcut_t::accels, dt_shortcut_get_closure(), DT_SHORTCUT_UNSET, dt_accels_t::flags, dt_accels_t::init, key, dt_shortcut_t::key, dt_shortcut_t::mods, dt_shortcut_t::path, dt_shortcut_t::type, and dt_shortcut_t::widget.
Referenced by _connect_accel_hashtable(), and _shortcut_edited().
|
static |
References _connect_accel().
Referenced by dt_accels_connect_accels().
|
static |
References COL_DESCRIPTION, COL_KEYVAL, COL_MODS, COL_NAME, COL_PATH, COL_SHORTCUT, dt_shortcut_t::description, dt_shortcut_t::key, dt_shortcut_t::mods, and store().
Referenced by _for_each_accel_create_treeview_row().
|
static |
References _match_text(), and model.
Referenced by _search_entry_changed().
|
static |
References dt_shortcut_get_closure(), dt_shortcut_get_payload_closure(), PayloadClosure::parent_data, and dt_shortcut_t::path.
Referenced by _insert_parent_data_into_children().
|
static |
References _for_each_accel(), dt_accels_t::acceleratables, dt_pthread_mutex_lock(), dt_pthread_mutex_unlock(), key, dt_accels_t::lock, and _accel_lookup_t::results.
Referenced by _key_pressed(), and _shortcut_edited().
|
inlinestatic |
void _for_each_accel_create_treeview_row | ( | gpointer | key, |
gpointer | value, | ||
gpointer | user_data | ||
) |
References _create_main_row(), COL_KEYS, COL_NAME, COL_PATH, key, _accel_treeview_t::node_cache, _accel_treeview_t::store, and store().
Referenced by dt_accels_window().
void _for_each_path_create_treeview_row | ( | gpointer | key, |
gpointer | value, | ||
gpointer | user_data | ||
) |
References dt_shortcut_t::accel_group, dt_shortcut_t::accels, dt_accels_t::active_group, dt_shortcut_t::description, dt_accels_t::global_accels, key, dt_shortcut_t::key, dt_shortcut_t::mods, and store().
Referenced by dt_accels_search().
|
static |
References PayloadClosure::base.
Referenced by _clean_shortcut().
|
static |
References _shortcut_edited(), and TRUE.
Referenced by dt_accels_window().
|
static |
|
static |
References _find_parent_hashtable(), dt_accels_t::acceleratables, and dt_shortcut_t::accels.
Referenced by dt_shortcut_set_closure().
|
static |
References _find_path_for_keys(), dt_accels_t::active_group, darktable, DT_DEBUG_SHORTCUTS, dt_print(), FALSE, dt_accels_t::global_accels, TRUE, and darktable_t::unmuted.
Referenced by dt_accels_dispatch().
|
static |
References COL_SHORTCUT, dt_shortcut_t::key, dt_shortcut_t::locked, and model.
Referenced by dt_accels_window().
|
static |
References COL_SHORTCUT, dt_shortcut_t::locked, and model.
Referenced by dt_accels_window().
gboolean _match_func | ( | GtkEntryCompletion * | completion, |
const gchar * | key, | ||
GtkTreeIter * | iter, | ||
gpointer | user_data | ||
) |
References model.
Referenced by dt_accels_search().
|
static |
References _run_action_from_shortcut(), and model.
Referenced by dt_accels_search().
|
static |
References model, and relevance.
Referenced by _find_and_rank_matches().
|
static |
|
static |
References dt_shortcut_t::accel_group, and dt_shortcut_get_closure().
Referenced by _connect_accel(), _remove_accel_hashtable(), and dt_accels_new_action_shortcut().
|
static |
References dt_shortcut_t::accel_group, dt_keys_numpad_alternatives(), and dt_shortcut_t::widget.
Referenced by _connect_accel(), and dt_accels_new_widget_shortcut().
|
static |
References _call_shortcut_cclosure(), dt_shortcut_get_closure(), FALSE, TRUE, and dt_shortcut_t::widget.
Referenced by _match_selected().
|
static |
References _find_and_rank_matches().
Referenced by dt_accels_search().
|
static |
Referenced by dt_accels_search().
|
static |
References _connect_accel(), _find_path_for_keys(), dt_shortcut_t::accel_group, dt_shortcut_t::accels, COL_KEYVAL, COL_MODS, COL_SHORTCUT, FALSE, dt_shortcut_t::path, and store().
Referenced by _icon_activate(), and dt_accels_window().
|
static |
References model.
Referenced by dt_accels_search().
|
static |
References model.
Referenced by dt_accels_window().
|
static |
References DT_SHORTCUT_DEFAULT, DT_SHORTCUT_UNSET, DT_SHORTCUT_USER, FALSE, init(), key, dt_shortcut_t::key, dt_shortcut_t::locked, dt_shortcut_t::mods, dt_shortcut_t::path, TRUE, and dt_shortcut_t::type.
Referenced by _connect_accel().
|
static |
References FALSE, dt_shortcut_t::key, dt_shortcut_t::mods, TRUE, and dt_shortcut_t::widget.
Referenced by dt_accels_new_virtual_shortcut().
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 |
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 | ||
) |
void dt_accels_cleanup | ( | dt_accels_t * | accels | ) |
References dt_accels_t::acceleratables, dt_accels_t::active_group, dt_accels_t::config_file, dt_accels_t::darkroom_accels, dt_pthread_mutex_destroy(), dt_pthread_mutex_lock(), dt_pthread_mutex_unlock(), dt_accels_t::global_accels, dt_accels_t::lighttable_accels, and dt_accels_t::lock.
Referenced by dt_cleanup().
void dt_accels_connect_accels | ( | dt_accels_t * | accels | ) |
Actually enable accelerators after having loaded user config.
accels |
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". |
References dt_accels_t::active_group, dt_accels_t::darkroom_accels, dt_accels_t::lighttable_accels, and dt_accels_t::reset.
Referenced by enter().
void dt_accels_detach_scroll_handler | ( | dt_accels_t * | accels | ) |
References dt_accels_t::scroll::callback, dt_accels_t::scroll::data, and dt_accels_t::scroll.
Referenced by leave().
void dt_accels_disconnect_active_group | ( | dt_accels_t * | accels | ) |
Disconnect the contextual active accels group from the window.
accels |
References dt_accels_t::active_group, and dt_accels_t::reset.
Referenced by leave().
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 |
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, dt_accels_t::reset, and dt_accels_t::scroll.
Referenced by dt_gui_gtk_init().
dt_accels_t * dt_accels_init | ( | char * | config_file, |
GtkAccelFlags | flags | ||
) |
References _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::reset, and dt_accels_t::scroll.
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 |
References dt_accels_t::config_file.
Referenced by dt_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, | ||
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 | |
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 |
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, dt_shortcut_t::description, description(), dt_accels_build_path(), 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, 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_lib_init_module(), 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 | ||
) |
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_pthread_mutex_lock(), dt_pthread_mutex_unlock(), DT_SHORTCUT_DEFAULT, dt_shortcut_set_closure(), 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 |
References _insert_accel(), _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, 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(), and dt_thumbtable_new().
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 |
References _add_widget_accel(), _insert_accel(), _remove_widget_accel(), 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_UNSET, FALSE, dt_accels_t::flags, key, dt_shortcut_t::key, 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 |
References _remove_accel_hashtable(), dt_accels_t::acceleratables, dt_pthread_mutex_lock(), dt_pthread_mutex_unlock(), and dt_accels_t::lock.
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 |
References dt_accels_t::acceleratables, dt_pthread_mutex_lock(), dt_pthread_mutex_unlock(), and dt_accels_t::lock.
Referenced by _iop_panel_label().
void dt_accels_search | ( | dt_accels_t * | accels, |
GtkWindow * | main_window | ||
) |
References _for_each_path_create_treeview_row(), _match_func(), _match_selected(), _search_entry_changed(), _search_entry_key_pressed(), _sort_model_by_relevance_func(), dt_accels_t::acceleratables, dt_osx_disallow_fullscreen(), FALSE, store(), and TRUE.
Referenced by _open_accel_search_callback(), and search_accels_callback().
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) |
References _for_each_accel_create_treeview_row(), _icon_activate(), _make_column_clearable(), _make_column_editable(), _shortcut_edited(), _sort_model_func(), dt_accels_t::acceleratables, COL_CLEAR, COL_DESCRIPTION, COL_KEYS, COL_KEYVAL, COL_MODS, COL_NAME, COL_PATH, dt_gtkentry_setup_completion(), dt_osx_disallow_fullscreen(), dtgtk_cell_renderer_button_new(), FALSE, filter_callback(), NUM_COLUMNS, search_changed(), _accel_treeview_t::store, store(), tree_view(), and TRUE.
Referenced by shortcuts_callback().
GClosure * dt_shortcut_get_closure | ( | dt_shortcut_t * | shortcut | ) |
PayloadClosure * dt_shortcut_get_payload_closure | ( | dt_shortcut_t * | shortcut | ) |
References dt_shortcut_t::closure.
Referenced by _find_parent_hashtable(), and dt_shortcut_get_closure().
void dt_shortcut_remove_closure | ( | dt_shortcut_t * | shortcut, |
gpointer | data | ||
) |
References PayloadClosure::base, dt_shortcut_t::closure, and PayloadClosure::parent_data.
Referenced by _remove_accel_hashtable().
void dt_shortcut_set_closure | ( | dt_shortcut_t * | shortcut, |
gboolean(*)(GtkAccelGroup *group, GObject *acceleratable, guint keyval, GdkModifierType mods, gpointer user_data) | action_callback, | ||
gpointer | data | ||
) |
|
static |
References COL_KEYVAL, COL_MODS, COL_PATH, FALSE, filter_callback(), model, and TRUE.
Referenced by dt_accels_window(), and filter_callback().
|
static |
References tree_view().
Referenced by dt_accels_window().