📄 keys.c
字号:
static void cb_remove_binding(void){ binding *kb; kb = gtk_clist_get_row_data(GTK_CLIST(clist_wid), key_row); key_remove(kb);}static void cb_select_binding(GtkWidget *w, gint row, gint col, GdkEventButton *ev, gpointer data){ binding *kb; key_row = row; kb = gtk_clist_get_row_data(GTK_CLIST(clist_wid), row); gtk_list_select_item(GTK_LIST(GTK_COMBO(action_wid)->list), find_action_no(kb->action)); gtk_entry_set_text(GTK_ENTRY(key_wid), key_name(kb->key, kb->modifier));}static gboolean cb_change_key(GtkWidget *w, GdkEventKey *ev, gpointer data){ binding *kb; char *keyname; int modifier; keyname = gdk_keyval_name(gdk_keyval_to_lower(ev->keyval)); modifier = ev->state & (GDK_SHIFT_MASK | GDK_CONTROL_MASK | GDK_MOD1_MASK); kb = gtk_clist_get_row_data(GTK_CLIST(clist_wid), key_row); kb->key = keyname; kb->modifier = modifier; keyname = key_name(keyname, modifier); gtk_entry_set_text(GTK_ENTRY(w), keyname); gtk_clist_set_text(GTK_CLIST(clist_wid), key_row, 1, keyname); return TRUE;}static void cb_change_action(GtkList *list, GtkWidget *child){ binding *kb; int i; kb = gtk_clist_get_row_data(GTK_CLIST(clist_wid), key_row); i = gtk_list_child_position(list, child); if(i != -1) { kb->action = &actions[i]; gtk_clist_set_text(GTK_CLIST(clist_wid), key_row, 0, kb->action->label); }}void keywin_init(void){ GtkWidget *vb, *hb, *sw, *t; GList *acts = NULL; char *titles[] = { _("Action"), _("Key") }; int i; key_win = gtk_window_new(GTK_WINDOW_TOPLEVEL); gtk_window_set_title(GTK_WINDOW(key_win), _("Sinek Key Bindings")); gtk_window_set_wmclass(GTK_WINDOW(key_win), "keybindings", "sinek"); vb = gtk_vbox_new(FALSE, 0); gtk_widget_show(vb); gtk_container_add(GTK_CONTAINER(key_win), vb); gtk_container_set_border_width(GTK_CONTAINER(vb), 4); sw = gtk_scrolled_window_new(NULL, NULL); gtk_widget_show(sw); gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(sw), GTK_POLICY_AUTOMATIC, GTK_POLICY_ALWAYS); gtk_box_pack_start(GTK_BOX(vb), sw, TRUE, TRUE, 0); clist_wid = gtk_clist_new_with_titles(2, titles); gtk_widget_show(clist_wid); gtk_container_add(GTK_CONTAINER(sw), clist_wid); gtk_container_set_border_width(GTK_CONTAINER(clist_wid), 2); g_signal_connect(G_OBJECT(clist_wid), "select_row", G_CALLBACK(cb_select_binding), NULL); hb = gtk_hbox_new(TRUE, 3); gtk_widget_show(hb); gtk_box_pack_start(GTK_BOX(vb), hb, FALSE, TRUE, 3); gtk_container_set_border_width(GTK_CONTAINER(hb), 0); t = gtk_button_new_with_label(_("Add Binding")); gtk_widget_show(t); gtk_box_pack_start(GTK_BOX(hb), t, TRUE, TRUE, 3); g_signal_connect(G_OBJECT(t), "clicked", G_CALLBACK(cb_add_binding), NULL); t = gtk_button_new_with_label(_("Remove Binding")); gtk_widget_show(t); gtk_box_pack_start(GTK_BOX(hb), t, TRUE, TRUE, 3); g_signal_connect(G_OBJECT(t), "clicked", G_CALLBACK(cb_remove_binding), NULL); hb = gtk_hbox_new(FALSE, 5); gtk_widget_show(hb); gtk_box_pack_start(GTK_BOX(vb), hb, FALSE, FALSE, 0); gtk_container_set_border_width(GTK_CONTAINER(hb), 5); t = gtk_label_new(_("Action")); gtk_widget_show(t); gtk_box_pack_start(GTK_BOX(hb), t, FALSE, FALSE, 0); action_wid = gtk_combo_new(); gtk_widget_show(action_wid); gtk_box_pack_start(GTK_BOX(hb), action_wid, TRUE, TRUE, 0); gtk_editable_set_editable(GTK_EDITABLE(GTK_COMBO(action_wid)->entry), FALSE); for(i = 0; actions[i].name; i++) acts = g_list_append(acts, (gpointer)actions[i].label); gtk_combo_set_popdown_strings(GTK_COMBO(action_wid), acts); g_list_free(acts); g_signal_connect(G_OBJECT(GTK_COMBO(action_wid)->list), "select_child", G_CALLBACK(cb_change_action), NULL); t = gtk_label_new(_("Key")); gtk_widget_show(t); gtk_box_pack_start(GTK_BOX(hb), t, FALSE, FALSE, 0); key_wid = gtk_entry_new(); gtk_widget_show(key_wid); gtk_box_pack_start(GTK_BOX(hb), key_wid, TRUE, TRUE, 0); g_signal_connect(G_OBJECT(key_wid), "key_press_event", G_CALLBACK(cb_change_key), NULL); hb = gtk_hbutton_box_new(); gtk_widget_show(hb); gtk_box_pack_start(GTK_BOX(vb), hb, FALSE, FALSE, 0); gtk_button_box_set_layout(GTK_BUTTON_BOX(hb), GTK_BUTTONBOX_END); gtk_container_set_border_width(GTK_CONTAINER(hb), 5); gtk_box_set_spacing(GTK_BOX(hb), 5); t = gtk_button_new_with_label(_("Reset to Defaults")); gtk_widget_show(t); gtk_container_add(GTK_CONTAINER(hb), t); g_signal_connect(G_OBJECT(t), "clicked", G_CALLBACK(reset_keys), NULL); t = gtk_button_new_from_stock(GTK_STOCK_SAVE); gtk_widget_show(t); gtk_container_add(GTK_CONTAINER(hb), t); g_signal_connect(G_OBJECT(t), "clicked", G_CALLBACK(save_keys), NULL); t = gtk_button_new_from_stock(GTK_STOCK_OK); gtk_widget_show(t); gtk_container_add(GTK_CONTAINER(hb), t); g_signal_connect_swapped(G_OBJECT(t), "clicked", G_CALLBACK(gtk_widget_hide), GTK_OBJECT(key_win)); wm_manage(key_win, WM_NORMAL);}void execute_cmd(cmd_type cmd){ xine_event_t xinev; int tmp; switch(cmd) { case CMD_NONE: break; case CMD_QUIT: sinek.playing = 0; scrsaver_enable(); sinek_delete(media); gtk_main_quit(); break; case CMD_PLAY: scrsaver_disable(); sinek_play(media); sinek.pause = 0; break; case CMD_PAUSE: if(sinek.pause) xine_set_speed(sinek.xine, SPEED_NORMAL); else xine_set_speed(sinek.xine, SPEED_PAUSE); sinek.pause = ~sinek.pause; break; case CMD_STOP: sinek.playing = 0; sinek_stop(media); scrsaver_enable(); break; case CMD_NEXT: pl_next(); break; case CMD_PREVIOUS: pl_prev(); break; case CMD_VOLUME_UP: audio_slide_volume(1); break; case CMD_VOLUME_DOWN: audio_slide_volume(-1); break; case CMD_SPEED_FAST: tmp = xine_get_speed(sinek.xine); if(tmp != SPEED_PAUSE && tmp < SPEED_FAST_4) xine_set_speed(sinek.xine, tmp * 2); break; case CMD_SPEED_SLOW: tmp = xine_get_speed(sinek.xine); if(tmp > SPEED_SLOW_4) xine_set_speed(sinek.xine, tmp / 2); break; case CMD_AV_OFFSET_DOWN: tmp = xine_get_av_offset(sinek.xine); tmp = tmp - 3600; xine_set_av_offset(sinek.xine, tmp); break; case CMD_AV_OFFSET_UP: tmp = xine_get_av_offset(sinek.xine); tmp = tmp + 3600; xine_set_av_offset(sinek.xine, tmp); break; case CMD_SHOW_ABOUT: wm_show(about_build); break; case CMD_SHOW_TUNER: tune_show(); break; case CMD_SHOW_KEYS: gtk_widget_show(key_win); break; case CMD_SHOW_PLAYLIST: wm_toggle(pl_build); break; case CMD_SHOW_VIDEO: video_show(); break; case CMD_SHOW_CONTROLS: wm_toggle(control_build); break; case CMD_SHOW_PREFS: wm_show(prf_build); break; case CMD_TOGGLE_GUI: if(sinek.hide) wm_show_all(); else wm_hide_all(); sinek.hide = ~sinek.hide; break; case CMD_TOGGLE_FULLSCREEN: if(sinek.video_mode == VIDEO_FULLSCREEN) video_set_mode(VIDEO_WINDOW); else video_set_mode(VIDEO_FULLSCREEN); break; case CMD_TOGGLE_ASPECT: tmp = media->vd->get_property(media->vd, VO_PROP_ASPECT_RATIO); media->vd->set_property(media->vd, VO_PROP_ASPECT_RATIO, tmp + 1); break; case CMD_TOGGLE_INTERLEAVE: tmp = media->vd->get_property(media->vd, VO_PROP_INTERLACED); media->vd->set_property(media->vd, VO_PROP_INTERLACED, 1 - tmp); break; case CMD_TOGGLE_TVMODE: tmp = media->vd->get_property(media->vd, VO_PROP_ASPECT_RATIO); media->vd->set_property(media->vd, VO_PROP_TVMODE, tmp); break; case CMD_TOGGLE_SUBTITLES: if(sinek.osd_subtitles) osd_hide(); else osd_show(); break; case CMD_TOGGLE_REPEAT: sinek.repeat_one = ~sinek.repeat_one; sinek.signal_fake = 1; gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(sinek.repeat_tog), sinek.repeat_one); sinek.signal_fake = 0; update_pix_toggle(sinek.repeat_tog); break; case CMD_TOGGLE_REPEAT_ALL: sinek.repeat_all = ~sinek.repeat_all; sinek.signal_fake = 1; gtk_check_menu_item_set_active(GTK_CHECK_MENU_ITEM(sinek.repeat_all_chk), sinek.repeat_all); sinek.signal_fake = 0; media->conf->update_num(media->conf, "sinek.repeat_all", sinek.repeat_all); break; case CMD_TOGGLE_MUTE: audio_toggle_mute(); sinek.signal_fake = 1; gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(sinek.mute_tog), sinek.mute); sinek.signal_fake = 0; break; case CMD_SPU_NEXT: tmp = xine_get_spu_channel(sinek.xine); xine_select_spu_channel(sinek.xine, tmp + 1); break; case CMD_SPU_PREVIOUS: tmp = xine_get_spu_channel(sinek.xine); xine_select_spu_channel(sinek.xine, tmp - 1); break; case CMD_AUDIO_NEXT: tmp = xine_get_audio_selection(sinek.xine); xine_select_audio_channel(sinek.xine, tmp + 1); break; case CMD_AUDIO_PREVIOUS: tmp = xine_get_audio_selection(sinek.xine); xine_select_audio_channel(sinek.xine, tmp - 1); break; case CMD_ZOOM_IN: video_zoom(1); break; case CMD_ZOOM_OUT: video_zoom(-1); break; case CMD_ZOOM_RESET: video_zoom(0); break; case CMD_WINDOW_1x1: video_set_mode(VIDEO_WINDOW); video_scale_abs(1); break; case CMD_WINDOW_2x2: video_set_mode(VIDEO_WINDOW); video_scale_abs(2); break; case CMD_WINDOW_FULLSCREEN: video_set_mode(VIDEO_FULLSCREEN); break; case CMD_WINDOW_BACKGROUND: video_set_mode(VIDEO_BACKGROUND); break; case CMD_WINDOW_REDUCE: video_scale(0.8); break; case CMD_WINDOW_ENLARGE: video_scale(1.2); break; case CMD_EVENT_MENU1: xinev.type = XINE_EVENT_INPUT_MENU1; xine_send_event(sinek.xine, &xinev); break; case CMD_EVENT_MENU2: xinev.type = XINE_EVENT_INPUT_MENU2; xine_send_event(sinek.xine, &xinev); break; case CMD_EVENT_MENU3: xinev.type = XINE_EVENT_INPUT_MENU3; xine_send_event(sinek.xine, &xinev); break; case CMD_EVENT_UP: xinev.type = XINE_EVENT_INPUT_UP; xine_send_event(sinek.xine, &xinev); break; case CMD_EVENT_DOWN: xinev.type = XINE_EVENT_INPUT_DOWN; xine_send_event(sinek.xine, &xinev); break; case CMD_EVENT_LEFT: xinev.type = XINE_EVENT_INPUT_LEFT; xine_send_event(sinek.xine, &xinev); break; case CMD_EVENT_RIGHT: xinev.type = XINE_EVENT_INPUT_RIGHT; xine_send_event(sinek.xine, &xinev); break; case CMD_EVENT_NEXT: xinev.type = XINE_EVENT_INPUT_NEXT; xine_send_event(sinek.xine, &xinev); break; case CMD_EVENT_PRIOR: xinev.type = XINE_EVENT_INPUT_PREVIOUS; xine_send_event(sinek.xine, &xinev); break; case CMD_EVENT_ANGLE_NEXT: xinev.type = XINE_EVENT_INPUT_ANGLE_NEXT; xine_send_event(sinek.xine, &xinev); break; case CMD_EVENT_ANGLE_PRIOR: xinev.type = XINE_EVENT_INPUT_ANGLE_PREVIOUS; xine_send_event(sinek.xine, &xinev); break; case CMD_EVENT_SELECT: xinev.type = XINE_EVENT_INPUT_SELECT; xine_send_event(sinek.xine, &xinev); break; case CMD_GOTO_MARK_0: case CMD_GOTO_MARK_1: case CMD_GOTO_MARK_2: case CMD_GOTO_MARK_3: case CMD_GOTO_MARK_4: case CMD_GOTO_MARK_5: case CMD_GOTO_MARK_6: case CMD_GOTO_MARK_7: case CMD_GOTO_MARK_8: case CMD_GOTO_MARK_9: video_seek(sinek.marks[cmd - CMD_GOTO_MARK_0]); sinek.marks[0] = xine_get_current_time(sinek.xine); break; case CMD_SET_MARK_1: case CMD_SET_MARK_2: case CMD_SET_MARK_3: case CMD_SET_MARK_4: case CMD_SET_MARK_5: case CMD_SET_MARK_6: case CMD_SET_MARK_7: case CMD_SET_MARK_8: case CMD_SET_MARK_9: sinek.marks[cmd - CMD_SET_MARK_1 + 1] = xine_get_current_time(sinek.xine); break; }}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -