MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent) { QMenu *menu = menuBar()->addMenu(tr("&File")); QAction *on_open = new QAction(tr("&Open"), this); on_open->setShortcuts(QKeySequence::Open); on_open->setStatusTip(tr("Open a file")); connect(on_open, SIGNAL(triggered()), this, SLOT(on_file_open())); menu->addAction(on_open); statusBar(); mpv = mpv_create(); if (!mpv) throw "can't create mpv instance"; // Create a video child window. Force Qt to create a native window, and // pass the window ID to the mpv wid option. This doesn't work on OSX, // because Cocoa doesn't support this form of embedding. mpv_container = new QWidget(this); setCentralWidget(mpv_container); mpv_container->setAttribute(Qt::WA_NativeWindow); // If you have a HWND, use: int64_t wid = (intptr_t)hwnd; int64_t wid = mpv_container->winId(); mpv_set_option(mpv, "wid", MPV_FORMAT_INT64, &wid); // Enable default bindings, because we're lazy. Normally, a player using // mpv as backend would implement its own key bindings. mpv_set_option_string(mpv, "input-default-bindings", "yes"); // Let us receive property change events with MPV_EVENT_PROPERTY_CHANGE if // this property changes. mpv_observe_property(mpv, 0, "time-pos", MPV_FORMAT_DOUBLE); // From this point on, the wakeup function will be called. The callback // can come from any thread, so we use the Qt QEvent mechanism to relay // the wakeup in a thread-safe way. mpv_set_wakeup_callback(mpv, wakeup, this); if (mpv_initialize(mpv) < 0) throw "mpv failed to initialize"; }
static void cb_key_press_event(GtkWidget *view, GdkEventKey *event) { //g_print("key-release-event: 0x%X\n", event->keyval); if (event->keyval < 0x1000 || event->keyval == GDK_Escape) { switch (event->keyval) { case GDK_f: case GDK_F: case GDK_v: case GDK_V: if (event->state & GDK_CONTROL_MASK) on_file_open(); else gdk_beep(); break; case GDK_d: case GDK_D: if (event->state & GDK_CONTROL_MASK) gdk_beep(); else on_file_open(); break; case GDK_s: case GDK_S: if (GTK_WIDGET_IS_SENSITIVE(gtk_item_factory_get_widget( gtk_item_factory_from_widget(pub->mw->menubar), "/File/Save") )) on_file_save(); break; case GDK_w: case GDK_W: if (event->state & GDK_CONTROL_MASK) on_file_save_as(); else gdk_beep(); break; case GDK_k: case GDK_K: if (event->state & GDK_CONTROL_MASK) gdk_beep(); else on_file_close(); break; case GDK_c: case GDK_C: if (event->state & GDK_CONTROL_MASK) on_file_quit(); else gdk_beep(); break; case GDK_u: case GDK_U: if (event->state & GDK_CONTROL_MASK) gdk_beep(); else on_edit_undo(); break; case GDK_h: case GDK_H: if (event->state & GDK_CONTROL_MASK) gdk_beep(); else on_edit_select_all(); break; default: gdk_beep(); } gtk_main_quit(); } }