void dt_accel_rename_global(const gchar *path,const gchar *new_path) { dt_accel_t *accel; GSList * l = darktable.control->accelerator_list; char build_path[1024]; dt_accel_path_global(build_path, 1024,path); while(l) { accel = (dt_accel_t*)l->data; if(!strncmp(accel->path, build_path, 1024)) { GtkAccelKey tmp_key = *(gtk_accel_group_find(darktable.control->accelerators,find_accel_internal,accel->closure)); dt_accel_deregister_global(path); g_closure_ref(accel->closure); dt_accel_register_global(new_path,tmp_key.accel_key,tmp_key.accel_mods); dt_accel_connect_global(new_path,accel->closure); g_closure_unref(accel->closure); l = NULL; } else { l = g_slist_next(l); } } }
static void key_accel_changed(GtkAccelMap *object, gchar *accel_path, guint accel_key, GdkModifierType accel_mods, gpointer user_data) { char path[256]; // Updating all the stored accelerator keys/mods for key_pressed shortcuts dt_accel_path_view(path, 256, "filmstrip", "scroll forward"); gtk_accel_map_lookup_entry(path, &darktable.control->accels.filmstrip_forward); dt_accel_path_view(path, 256, "filmstrip", "scroll back"); gtk_accel_map_lookup_entry(path, &darktable.control->accels.filmstrip_back); // Lighttable dt_accel_path_view(path, 256, "lighttable", "scroll up"); gtk_accel_map_lookup_entry(path, &darktable.control->accels.lighttable_up); dt_accel_path_view(path, 256, "lighttable", "scroll down"); gtk_accel_map_lookup_entry(path, &darktable.control->accels.lighttable_down); dt_accel_path_view(path, 256, "lighttable", "scroll left"); gtk_accel_map_lookup_entry(path, &darktable.control->accels.lighttable_left); dt_accel_path_view(path, 256, "lighttable", "scroll right"); gtk_accel_map_lookup_entry(path, &darktable.control->accels.lighttable_right); dt_accel_path_view(path, 256, "lighttable", "scroll center"); gtk_accel_map_lookup_entry(path, &darktable.control->accels.lighttable_center); dt_accel_path_view(path, 256, "lighttable", "preview"); gtk_accel_map_lookup_entry(path, &darktable.control->accels.lighttable_preview); // Global dt_accel_path_global(path, 256, "toggle side borders"); gtk_accel_map_lookup_entry(path, &darktable.control->accels.global_sideborders); dt_accel_path_global(path, 256, "toggle header"); gtk_accel_map_lookup_entry(path, &darktable.control->accels.global_header); }
void dt_accel_connect_global(const gchar *path, GClosure *closure) { gchar accel_path[256]; dt_accel_path_global(accel_path, 256, path); dt_accel_t *laccel = _lookup_accel(accel_path); laccel->closure = closure; gtk_accel_group_connect_by_path(darktable.control->accelerators, accel_path, closure); }
void dt_accel_register_global(const gchar *path, guint accel_key, GdkModifierType mods) { gchar accel_path[256]; dt_accel_t *accel = (dt_accel_t*)malloc(sizeof(dt_accel_t)); dt_accel_path_global(accel_path, 256, path); gtk_accel_map_add_entry(accel_path, accel_key, mods); strcpy(accel->path, accel_path); dt_accel_path_global_translated(accel_path, 256, path); strcpy(accel->translated_path, accel_path); *(accel->module) = '\0'; accel->views = DT_VIEW_DARKROOM | DT_VIEW_LIGHTTABLE | DT_VIEW_TETHERING; accel->local = FALSE; darktable.control->accelerator_list = g_slist_prepend(darktable.control->accelerator_list, accel); }
void dt_accel_deregister_global(const gchar *path) { GSList *l; char build_path[1024]; dt_accel_path_global(build_path, 1024, path); l = darktable.control->accelerator_list; while(l) { dt_accel_t *accel = (dt_accel_t*)l->data; if(!strncmp(accel->path, build_path, 1024)) { darktable.control->accelerator_list = g_slist_delete_link(darktable.control->accelerator_list, l); gtk_accel_group_disconnect(darktable.control->accelerators, accel->closure); l = NULL; free(accel); } else { l = g_slist_next(l); } } }