📄 bindings.c
字号:
} if(disccomment) { free(disccomment); } } } if(DVDBookmarkSave(bm, 0) == -1) { NOTE("%s", "BookmarkSave failed\n"); } DVDBookmarkClose(bm); }}void actionBookmarkRemove(void *data){ struct action_number *user = (struct action_number *)data; DVDBookmark_t *bm; unsigned char id[16]; int n; if(DVDGetDiscID(nav, id) != DVD_E_Ok) { NOTE("%s", "GetDiscID failed\n"); return; } if((bm = DVDBookmarkOpen(id, NULL, 0)) == NULL) { if(errno != ENOENT) { NOTE("%s", "BookmarkOpen failed: "); perror(""); } return; } n = DVDBookmarkGetNr(bm); if(n == -1) { NOTE("%s", "DVDBookmarkGetNr failed\n"); } else if(n > 0) { if(user != NULL) { if(user->valid && (user->nr < n) && (user->nr > 0)) { n = user->nr; } user->valid = 0; } if(DVDBookmarkRemove(bm, n-1) != -1) { if(DVDBookmarkSave(bm, 0) == -1) { NOTE("%s", "BookmarkSave failed\n"); } } else { NOTE("%s", "DVDBookmarkRemove failed\n"); } } DVDBookmarkClose(bm);}void actionBookmarkRestore(void *data){ struct action_number *user = (struct action_number *)data; DVDBookmark_t *bm; unsigned char id[16]; char *state = NULL; int n; if(DVDGetDiscID(nav, id) != DVD_E_Ok) { NOTE("%s", "GetDiscID failed\n"); return; } if((bm = DVDBookmarkOpen(id, NULL, 0)) == NULL) { if(errno != ENOENT) { NOTE("%s", "BookmarkOpen failed: "); perror(""); } return; } n = DVDBookmarkGetNr(bm); if(n == -1) { NOTE("%s", "DVDBookmarkGetNr failed\n"); } else if(n > 0) { if(user != NULL) { if(user->valid && (user->nr < n) && (user->nr > 0)) { n = user->nr; } user->valid = 0; } if(DVDBookmarkGet(bm, n-1, &state, NULL, NULL, NULL) != -1) { if(state) { if(DVDSetState(nav, state) != DVD_E_Ok) { NOTE("%s", "DVDSetState failed\n"); } free(state); } } else { NOTE("%s", "BookmarkGet failed\n"); } } DVDBookmarkClose(bm);}void actionDigit(void *data){ struct timeval curtime; long diff; gettimeofday(&curtime, NULL); diff = curtime.tv_sec - user_nr.timestamp.tv_sec; if(!user_nr.valid || (digit_timeout && (diff > digit_timeout))) { user_nr.nr = 0; } user_nr.timestamp = curtime; user_nr.nr = user_nr.nr * 10 + *(uint8_t *)data; user_nr.valid = 1;}void actionSkipForward(void *data){ struct action_number *user = (struct action_number *)data; if(user != NULL) { if((user->nr == 0) || (user->nr < 0)) { skip_seconds = default_skip_seconds; } else { skip_seconds = user->nr; } } DVDTimeSkip(nav, skip_seconds);}void actionSkipBackward(void *data){ struct action_number *user = (struct action_number *)data; if(user != NULL) { if((user->nr == 0) || (user->nr < 0)) { skip_seconds = default_skip_seconds; } else { skip_seconds = user->nr; } } DVDTimeSkip(nav, -skip_seconds);}void actionSaveScreenshot(void *data){ DVDSaveScreenshot(nav, ScreenshotModeWithoutSPU, NULL);}void actionSaveScreenshotWithSPU(void *data){ DVDSaveScreenshot(nav, ScreenshotModeWithSPU, NULL);}void do_number_action(void *vfun){ void (*number_action)(void *) = vfun; struct timeval curtime; long diff; struct action_number *number = NULL; gettimeofday(&curtime, NULL); diff = curtime.tv_sec - user_nr.timestamp.tv_sec; if(number_timeout && (diff > number_timeout)) { user_nr.valid = 0; } if(user_nr.valid) { number = &user_nr; } number_action(number); user_nr.valid = 0; }void do_action(void *fun){ void (*action)(void *) = fun; user_nr.valid = 0; action(NULL);}typedef struct { PointerEventType event_type; unsigned int button; unsigned int modifier_mask; void (*fun)(void *);} pointer_mapping_t;static unsigned int pointer_mappings_index = 0;//static unsigned int nr_pointer_mappings = 0;static pointer_mapping_t *pointer_mappings;typedef struct { KeySym keysym; void (*fun)(void *); void *arg;} ks_map_t;static unsigned int ks_maps_index = 0;static unsigned int nr_ks_maps = 0;static ks_map_t *ks_maps;static const uint8_t digits[10] = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 };typedef struct { char *str; void (*fun)(void *); void *ptr;} action_mapping_t;static action_mapping_t actions[] = { { "Play", do_action, actionPlay }, { "PauseToggle", do_action, actionPauseToggle }, { "Stop", NULL, NULL }, { "FastForward", do_action, actionFastForward }, { "SlowForward", do_action, actionSlowForward }, { "Faster", do_action, actionFaster }, { "Slower", do_action, actionSlower }, { "NextPG", do_action, actionNextPG }, { "PrevPG", do_action, actionPrevPG }, { "UpperButton", do_action, actionUpperButtonSelect }, { "LowerButton", do_action, actionLowerButtonSelect }, { "LeftButton", do_action, actionLeftButtonSelect }, { "RightButton", do_action, actionRightButtonSelect }, { "ButtonActivate", do_number_action, actionButtonActivate }, { "TitleMenu", do_action, actionMenuCallTitle }, { "RootMenu", do_action, actionMenuCallRoot }, { "AudioMenu", do_action, actionMenuCallAudio }, { "AngleMenu", do_action, actionMenuCallAngle }, { "PTTMenu", do_action, actionMenuCallPTT }, { "SubtitleMenu", do_action, actionMenuCallSubpicture }, { "Resume", do_action, actionResume }, { "FullScreenToggle", do_action, actionFullScreenToggle }, { "SubtitleToggle", do_action, actionSubpictureToggle }, { "Quit", do_action, actionQuit }, { "BookmarkAdd", do_action, actionBookmarkAdd }, { "BookmarkRemove", do_number_action, actionBookmarkRemove }, { "BookmarkRestore", do_number_action, actionBookmarkRestore }, { "DigitZero", actionDigit, (void *)&digits[0] }, { "DigitOne", actionDigit, (void *)&digits[1] }, { "DigitTwo", actionDigit, (void *)&digits[2] }, { "DigitThree",actionDigit, (void *)&digits[3] }, { "DigitFour", actionDigit, (void *)&digits[4] }, { "DigitFive", actionDigit, (void *)&digits[5] }, { "DigitSix", actionDigit, (void *)&digits[6] }, { "DigitSeven",actionDigit, (void *)&digits[7] }, { "DigitEight",actionDigit, (void *)&digits[8] }, { "DigitNine", actionDigit, (void *)&digits[9] }, { "SkipForward", do_number_action, actionSkipForward }, { "SkipBackward", do_number_action, actionSkipBackward }, { "SaveScreenshot", do_action, actionSaveScreenshot }, { "SaveScreenshotWithSPU", do_action, actionSaveScreenshotWithSPU }, { NULL, NULL }};void do_pointer_action(pointer_event_t *p_ev){ int n; for(n = 0; n < pointer_mappings_index; n++) { if((pointer_mappings[n].event_type == p_ev->type) && (pointer_mappings[n].modifier_mask == p_ev->modifier_mask)) { if(pointer_mappings[n].fun != NULL) { pointer_mappings[n].fun(p_ev); } return; } } return;}void do_keysym_action(KeySym keysym){ int n; for(n = 0; n < ks_maps_index; n++) { if(ks_maps[n].keysym == keysym) { if(ks_maps[n].fun != NULL) { ks_maps[n].fun(ks_maps[n].arg); } return; } } return;}void remove_keysym_binding(KeySym keysym){ int n; for(n = 0; n < ks_maps_index; n++) { if(ks_maps[n].keysym == keysym) { ks_maps[n].keysym = NoSymbol; ks_maps[n].fun = NULL; ks_maps[n].arg = NULL; return; } }}void add_keysym_binding(KeySym keysym, void(*fun)(void *), void *arg){ int n; for(n = 0; n < ks_maps_index; n++) { if(ks_maps[n].keysym == keysym) { ks_maps[n].fun = fun; ks_maps[n].arg = arg; return; } } if(ks_maps_index >= nr_ks_maps) { nr_ks_maps+=32; ks_maps = (ks_map_t *)realloc(ks_maps, sizeof(ks_map_t)*nr_ks_maps); } ks_maps[ks_maps_index].keysym = keysym; ks_maps[ks_maps_index].fun = fun; ks_maps[ks_maps_index].arg = arg; ks_maps_index++; return;} void add_keybinding(char *key, char *action){ KeySym keysym; int n = 0; keysym = XStringToKeysym(key); if(keysym == NoSymbol) { WARNING("add_keybinding(): '%s' not a valid keysym\n", key); return; } if(!strcmp("NoAction", action)) { remove_keysym_binding(keysym); return; } for(n = 0; actions[n].str != NULL; n++) { if(!strcmp(actions[n].str, action)) { if(actions[n].fun != NULL) { add_keysym_binding(keysym, actions[n].fun, actions[n].ptr); } return; } } WARNING("add_keybinding(): No such action: '%s'\n", action); return;}/*void add_pointerbinding(char *, char *action){ KeySym keysym; int n = 0; keysym = XStringToKeysym(key); if(keysym == NoSymbol) { WARNING("add_keybinding(): '%s' not a valid keysym\n", key); return; } if(!strcmp("NoAction", action)) { remove_keysym_binding(keysym); return; } for(n = 0; actions[n].str != NULL; n++) { if(!strcmp(actions[n].str, action)) { if(actions[n].fun != NULL) { add_keysym_binding(keysym, actions[n].fun); } return; } } WARNING("add_keybinding(): No such action: '%s'\n", action); return;}*/
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -