summaryrefslogtreecommitdiff
path: root/test/previewer.c
diff options
context:
space:
mode:
Diffstat (limited to 'test/previewer.c')
-rw-r--r--test/previewer.c116
1 files changed, 34 insertions, 82 deletions
diff --git a/test/previewer.c b/test/previewer.c
index ea748eb..bc78b57 100644
--- a/test/previewer.c
+++ b/test/previewer.c
@@ -19,14 +19,16 @@
#include <config.h>
#include <stdlib.h>
-#include <locale.h>
#include <glib.h>
-#include <gio/gio.h>
#include <gtk/gtk.h>
-#include "evbp-viewer.h"
+#if GTK_MAJOR_VERSION > 2
+#include <gtk/gtkx.h>
+#endif
+#include <gdk/gdkx.h>
-static gboolean print_version;
-static gchar **filenames;
+#ifndef PLUG_PROCESS
+#define PLUG_PROCESS "./previewer-plug"
+#endif
static inline void
no_debug(const gchar *domain, GLogLevelFlags level,
@@ -34,104 +36,54 @@ no_debug(const gchar *domain, GLogLevelFlags level,
{
}
-static GOptionEntry opt_entries[] = {
- { "version", 'V', 0, G_OPTION_ARG_NONE, &print_version,
- "Print version", NULL },
- { G_OPTION_REMAINING, 0, 0, G_OPTION_ARG_FILENAME_ARRAY, &filenames,
- NULL, "FILE" },
- { NULL }
-};
-
int
main(int argc, char *argv[])
{
- GOptionContext *opt;
- GError *error = NULL;
- guint n_files;
- GFile *file;
- gchar *uri;
GtkWidget *window;
- GtkWidget *viewer;
+ GtkWidget *socket;
+ Window win;
+ gchar *cmd;
+ GError *error = NULL;
- g_type_init();
- setlocale(LC_ALL, "");
+ gtk_init(&argc, &argv);
if (!getenv("EVBP_DEBUG"))
g_log_set_handler(G_LOG_DOMAIN, G_LOG_LEVEL_DEBUG, no_debug, NULL);
- opt = g_option_context_new(NULL);
- g_option_context_set_summary(opt, "Test app for the Evince libraries");
- g_option_context_add_main_entries(opt, opt_entries, GETTEXT_PACKAGE);
- g_option_context_add_group(opt, gtk_get_option_group(FALSE));
- if (!g_option_context_parse(opt, &argc, &argv, &error)) {
- g_printerr("failed to parse arguments: %s\n", error->message);
- exit(1);
+ if (argc < 2) {
+ g_printerr("No file supplied to open\n");
+ exit(EXIT_FAILURE);
}
- g_option_context_free(opt);
- if (print_version) {
- g_print("%s\n", PACKAGE_VERSION);
- exit(0);
- }
-
- if (filenames)
- n_files = g_strv_length(filenames);
- else
- n_files = 0;
- if (n_files == 0) {
- g_printerr("no file specified\n");
- exit(1);
- }
- if (n_files > 1)
- g_printerr("only one file can be processed, others are ignored\n");
-
- g_debug("converting file \"%s\" to uri", filenames[0]);
- file = g_file_new_for_commandline_arg(filenames[0]);
- uri = g_file_get_uri(file);
- g_strfreev(filenames);
- filenames = NULL;
-
- if (!g_file_query_exists(file, NULL)) {
- g_printerr("file '%s' does not exist\n", uri);
- exit(1);
- }
- if (g_file_query_file_type(file, 0, NULL) != G_FILE_TYPE_REGULAR) {
- g_printerr("file '%s' is not a regular file\n", uri);
- exit(1);
- }
- g_object_unref(file);
-
- gtk_init(&argc, &argv);
- if (!ev_init()) {
- g_printerr("no evince backends found\n");
- exit(1);
- }
- ev_stock_icons_init();
-
- g_set_application_name("Evince Previewer Test");
+ g_set_application_name("Evince Previewer Socket Test");
gtk_window_set_default_icon_name("evince");
- viewer = evbp_viewer_new();
window = gtk_window_new(GTK_WINDOW_TOPLEVEL);
gtk_window_set_default_size(GTK_WINDOW(window), 800, 800);
g_signal_connect(window, "destroy", G_CALLBACK(gtk_main_quit), NULL);
- gtk_container_add(GTK_CONTAINER(window), viewer);
+
+ /* create a socket to embed the viewer in */
+ socket = gtk_socket_new();
+ g_signal_connect(socket, "plug-removed", G_CALLBACK(gtk_main_quit), NULL);
+ gtk_container_add(GTK_CONTAINER(window), socket);
gtk_widget_show_all(window);
- if (!evbp_viewer_load_uri(EVBP_VIEWER(viewer), uri, &error)) {
- if (error) {
- g_printerr("could not open '%s': %s\n", uri, error->message);
- g_error_free(error);
- } else
- g_printerr("could not open '%s'\n", uri);
- exit(1);
+ /* get the socket window ID to pass to the plug process */
+ win = gtk_socket_get_id(GTK_SOCKET(socket));
+ g_debug("The ID of the socket window is %lu\n", (unsigned long)win);
+
+ /* spawn the plug process with the file */
+ cmd = g_strdup_printf("\"%s\" %lu \"%s\"", PLUG_PROCESS,
+ (unsigned long)win, argv[1]);
+ if (!g_spawn_command_line_async(cmd, &error)) {
+ g_printerr("Failed to spawn plug process '%s': %s\n", cmd,
+ error->message);
+ g_error_free(error);
+ exit(EXIT_FAILURE);
}
- g_free(uri);
+ g_free(cmd);
gtk_main();
- ev_shutdown();
- ev_stock_icons_shutdown();
-
return 0;
}