gnome: add choose file to right click

Refs #66538

Change-Id: I3d67b018d8f4cec881db6041f6c97b529e18d0c2
diff --git a/src/video/video_widget.cpp b/src/video/video_widget.cpp
index 5499161..06c3bf2 100644
--- a/src/video/video_widget.cpp
+++ b/src/video/video_widget.cpp
@@ -313,13 +313,41 @@
     Video::SourceModel::instance()->setDisplay(display, QRect(x,y,width,height));
 }
 
+static void
+switch_video_input_file(GtkWidget *parent)
+{
+    if (parent && GTK_IS_WIDGET(parent)) {
+        /* get parent window */
+        parent = gtk_widget_get_toplevel(GTK_WIDGET(parent));
+    }
+
+    gchar *uri = NULL;
+    GtkWidget *dialog = gtk_file_chooser_dialog_new(
+            "Choose File",
+            GTK_WINDOW(parent),
+            GTK_FILE_CHOOSER_ACTION_OPEN,
+            "_Cancel", GTK_RESPONSE_CANCEL,
+            "_Open", GTK_RESPONSE_ACCEPT,
+            NULL);
+
+    if (gtk_dialog_run(GTK_DIALOG(dialog)) == GTK_RESPONSE_ACCEPT) {
+        uri = gtk_file_chooser_get_uri(GTK_FILE_CHOOSER(dialog));
+    }
+
+    gtk_widget_destroy(dialog);
+
+    Video::SourceModel::instance()->setFile(QUrl(uri));
+
+    g_free(uri);
+}
+
 /*
  * on_button_press_in_screen_event()
  *
  * Handle button event in the video screen.
  */
 static gboolean
-on_button_press_in_screen_event(G_GNUC_UNUSED GtkWidget *widget,
+on_button_press_in_screen_event(GtkWidget *parent,
                                 GdkEventButton *event,
                                 G_GNUC_UNUSED gpointer data)
 {
@@ -348,6 +376,11 @@
     gtk_menu_shell_append(GTK_MENU_SHELL(menu), item);
     g_signal_connect(item, "activate", G_CALLBACK(switch_video_input_screen), NULL);
 
+    /* add file as an input */
+    item = gtk_check_menu_item_new_with_mnemonic("Share file");
+    gtk_menu_shell_append(GTK_MENU_SHELL(menu), item);
+    g_signal_connect(item, "activate", G_CALLBACK(switch_video_input_file), parent);
+
     /* show menu */
     gtk_widget_show_all(menu);
     gtk_menu_popup(GTK_MENU(menu), NULL, NULL, NULL, NULL, event->button, event->time);