summaryrefslogtreecommitdiffstats
path: root/src/inkview.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/inkview.cpp')
-rw-r--r--src/inkview.cpp365
1 files changed, 179 insertions, 186 deletions
diff --git a/src/inkview.cpp b/src/inkview.cpp
index 8b7492798..3fcd9ed8a 100644
--- a/src/inkview.cpp
+++ b/src/inkview.cpp
@@ -30,10 +30,6 @@
# include "config.h"
#endif
-#ifdef HAVE_GETOPT_H
-#include <getopt.h>
-#endif
-
#include <cstring>
#include <sys/stat.h>
#include <locale.h>
@@ -106,70 +102,67 @@ static GtkWidget *ctrlwin = NULL;
int sp_main_gui (int, char const**) { return 0; }
int sp_main_console (int, char const**) { return 0; }
-static int
-sp_svgview_main_delete (GtkWidget */*widget*/, GdkEvent */*event*/, struct SPSlideShow */*ss*/)
+static int sp_svgview_main_delete (GtkWidget */*widget*/,
+ GdkEvent */*event*/,
+ struct SPSlideShow */*ss*/)
{
gtk_main_quit ();
return FALSE;
}
-static int
-sp_svgview_main_key_press (GtkWidget */*widget*/, GdkEventKey *event, struct SPSlideShow *ss)
+static int sp_svgview_main_key_press (GtkWidget */*widget*/,
+ GdkEventKey *event,
+ struct SPSlideShow *ss)
{
switch (event->keyval) {
- case GDK_KEY_Up:
- case GDK_KEY_Home:
- sp_svgview_goto_first(ss);
- break;
- case GDK_KEY_Down:
- case GDK_KEY_End:
- sp_svgview_goto_last(ss);
- break;
- case GDK_KEY_F11:
-#ifdef HAVE_GTK_WINDOW_FULLSCREEN
- if (ss->fullscreen) {
- gtk_window_unfullscreen (GTK_WINDOW(ss->window));
- ss->fullscreen = false;
- } else {
- gtk_window_fullscreen (GTK_WINDOW(ss->window));
- ss->fullscreen = true;
- }
-#else
- std::cout<<"Your GTK+ does not support fullscreen mode. Upgrade to 2.2."<<std::endl;
-#endif
- break;
- case GDK_KEY_Return:
- sp_svgview_control_show (ss);
- break;
- case GDK_KEY_KP_Page_Down:
- case GDK_KEY_Page_Down:
- case GDK_KEY_Right:
- case GDK_KEY_space:
- sp_svgview_show_next (ss);
- break;
- case GDK_KEY_KP_Page_Up:
- case GDK_KEY_Page_Up:
- case GDK_KEY_Left:
- case GDK_KEY_BackSpace:
- sp_svgview_show_prev (ss);
- break;
- case GDK_KEY_Escape:
- case GDK_KEY_q:
- case GDK_KEY_Q:
- gtk_main_quit();
- break;
- default:
- break;
+ case GDK_KEY_Up:
+ case GDK_KEY_Home:
+ sp_svgview_goto_first(ss);
+ break;
+ case GDK_KEY_Down:
+ case GDK_KEY_End:
+ sp_svgview_goto_last(ss);
+ break;
+ case GDK_KEY_F11:
+ if (ss->fullscreen) {
+ gtk_window_unfullscreen (GTK_WINDOW(ss->window));
+ ss->fullscreen = false;
+ } else {
+ gtk_window_fullscreen (GTK_WINDOW(ss->window));
+ ss->fullscreen = true;
+ }
+ break;
+ case GDK_KEY_Return:
+ sp_svgview_control_show (ss);
+ break;
+ case GDK_KEY_KP_Page_Down:
+ case GDK_KEY_Page_Down:
+ case GDK_KEY_Right:
+ case GDK_KEY_space:
+ sp_svgview_show_next (ss);
+ break;
+ case GDK_KEY_KP_Page_Up:
+ case GDK_KEY_Page_Up:
+ case GDK_KEY_Left:
+ case GDK_KEY_BackSpace:
+ sp_svgview_show_prev (ss);
+ break;
+ case GDK_KEY_Escape:
+ case GDK_KEY_q:
+ case GDK_KEY_Q:
+ gtk_main_quit();
+ break;
+ default:
+ break;
}
gtk_window_set_title(GTK_WINDOW(ss->window), ss->doc->getName());
return TRUE;
}
-int
-main (int argc, const char **argv)
+int main (int argc, const char **argv)
{
if (argc == 1) {
- usage();
+ usage();
}
// Prevents errors like "Unable to wrap GdkPixbuf..." (in nr-filter-image.cpp for example)
@@ -179,21 +172,25 @@ main (int argc, const char **argv)
struct SPSlideShow ss;
- int option,
- num_parsed_options = 0;
+ int num_parsed_options = 0;
// the list of arguments is in the net line
- while ((option = getopt(argc, (char* const* )argv, "t:")) != -1)
- {
- switch(option) {
- case 't': // for timer
- // fprintf(stderr, "set timer arg %s\n", optarg );
- ss.timer = atoi(optarg);
- num_parsed_options += 2; // 2 because of flag + option
+ for (int i = 1; i < argc; i++) {
+ if ((argv[i][0] == '-')) {
+ if (!strcmp(argv[i], "--")) {
break;
- case '?':
- default:
- usage();
+ }
+ else if ((!strcmp(argv[i], "-t"))) {
+ if (i + 1 >= argc) {
+ usage();
+ }
+ ss.timer = atoi(argv[i+1]);
+ num_parsed_options = i+1;
+ i++;
+ }
+ else {
+ usage();
+ }
}
}
@@ -236,82 +233,84 @@ main (int argc, const char **argv)
// starting at where the commandline options stopped parsing because
// we want all the files to be in the list
for (i = num_parsed_options + 1 ; i < argc; i++) {
- struct stat st;
- if (stat (argv[i], &st)
- || !S_ISREG (st.st_mode)
- || (st.st_size < 64)) {
- fprintf(stderr, "could not open file %s\n", argv[i]);
- } else {
-
-#ifdef WITH_INKJAR
- if (is_jar(argv[i])) {
- Inkjar::JarFileReader jar_file_reader(argv[i]);
- for (;;) {
- GByteArray *gba = jar_file_reader.get_next_file();
- if (gba == NULL) {
- char *c_ptr;
- gchar *last_filename = jar_file_reader.get_last_filename();
- if (last_filename == NULL)
- break;
- if ((c_ptr = std::strrchr(last_filename, '/')) != NULL) {
- if (*(++c_ptr) == '\0') {
- g_free(last_filename);
- continue;
- }
- }
- } else if (gba->len > 0) {
- //::write(1, gba->data, gba->len);
- /* Append to list */
- if (ss.length >= ss.size) {
- /* Expand */
- ss.size <<= 1;
- ss.slides = g_renew (char *, ss.slides, ss.size);
- }
-
- ss.doc = SPDocument::createNewDocFromMem ((const gchar *)gba->data,
- gba->len,
- TRUE);
- gchar *last_filename = jar_file_reader.get_last_filename();
- if (ss.doc) {
- ss.slides[ss.length++] = strdup (last_filename);
- (ss.doc)->setUri (last_filename);
- }
- g_byte_array_free(gba, TRUE);
- g_free(last_filename);
- } else
- break;
- }
- } else {
-#endif /* WITH_INKJAR */
- /* Append to list */
- if (ss.length >= ss.size) {
- /* Expand */
- ss.size <<= 1;
- ss.slides = g_renew (char *, ss.slides, ss.size);
-
- }
-
- ss.slides[ss.length++] = strdup (argv[i]);
-
+ struct stat st;
+ if (stat (argv[i], &st)
+ || !S_ISREG (st.st_mode)
+ || (st.st_size < 64)) {
+ fprintf(stderr, "could not open file %s\n", argv[i]);
+ } else {
+
+ #ifdef WITH_INKJAR
+ if (is_jar(argv[i])) {
+ Inkjar::JarFileReader jar_file_reader(argv[i]);
+ for (;;) {
+ GByteArray *gba = jar_file_reader.get_next_file();
+ if (gba == NULL) {
+ char *c_ptr;
+ gchar *last_filename = jar_file_reader.get_last_filename();
+ if (last_filename == NULL)
+ break;
+ if ((c_ptr = std::strrchr(last_filename, '/')) != NULL) {
+ if (*(++c_ptr) == '\0') {
+ g_free(last_filename);
+ continue;
+ }
+ }
+ } else if (gba->len > 0) {
+ //::write(1, gba->data, gba->len);
+ /* Append to list */
+ if (ss.length >= ss.size) {
+ /* Expand */
+ ss.size <<= 1;
+ ss.slides = g_renew (char *, ss.slides, ss.size);
+ }
+
+ ss.doc = SPDocument::createNewDocFromMem ((const gchar *)gba->data,
+ gba->len,
+ TRUE);
+ gchar *last_filename = jar_file_reader.get_last_filename();
+ if (ss.doc) {
+ ss.slides[ss.length++] = strdup (last_filename);
+ (ss.doc)->setUri (last_filename);
+ }
+ g_byte_array_free(gba, TRUE);
+ g_free(last_filename);
+ } else {
+ break;
+ }
+ }
+ } else {
+ #endif /* WITH_INKJAR */
+ /* Append to list */
+ if (ss.length >= ss.size) {
+ /* Expand */
+ ss.size <<= 1;
+ ss.slides = g_renew (char *, ss.slides, ss.size);
+ }
+
+ ss.slides[ss.length++] = strdup (argv[i]);
+
+ if (!ss.doc) {
+ ss.doc = SPDocument::createNewDoc (ss.slides[ss.current], TRUE, false);
if (!ss.doc) {
- ss.doc = SPDocument::createNewDoc (ss.slides[ss.current], TRUE, false);
- if (!ss.doc)
- ++ss.current;
- }
-#ifdef WITH_INKJAR
- }
-#endif
- }
+ ++ss.current;
+ }
+ }
+ #ifdef WITH_INKJAR
+ }
+ #endif
+ }
}
- if(!ss.doc)
+ if(!ss.doc) {
return 1; /* none of the slides loadable */
-
+ }
+
w = gtk_window_new (GTK_WINDOW_TOPLEVEL);
gtk_window_set_title( GTK_WINDOW(w), ss.doc->getName() );
gtk_window_set_default_size (GTK_WINDOW (w),
- MIN ((int)(ss.doc)->getWidth().value("px"), (int)gdk_screen_width() - 64),
- MIN ((int)(ss.doc)->getHeight().value("px"), (int)gdk_screen_height() - 64));
+ MIN ((int)(ss.doc)->getWidth().value("px"), (int)gdk_screen_width() - 64),
+ MIN ((int)(ss.doc)->getHeight().value("px"), (int)gdk_screen_height() - 64));
ss.window = w;
g_signal_connect (G_OBJECT (w), "delete_event", (GCallback) sp_svgview_main_delete, &ss);
@@ -331,8 +330,9 @@ main (int argc, const char **argv)
return 0;
}
-static int
-sp_svgview_ctrlwin_delete (GtkWidget */*widget*/, GdkEvent */*event*/, void */*data*/)
+static int sp_svgview_ctrlwin_delete (GtkWidget */*widget*/,
+ GdkEvent */*event*/,
+ void */*data*/)
{
ctrlwin = NULL;
return FALSE;
@@ -341,97 +341,92 @@ sp_svgview_ctrlwin_delete (GtkWidget */*widget*/, GdkEvent */*event*/, void */*d
static GtkWidget* sp_svgview_control_show(struct SPSlideShow *ss)
{
if (!ctrlwin) {
- ctrlwin = gtk_window_new(GTK_WINDOW_TOPLEVEL);
+ ctrlwin = gtk_window_new(GTK_WINDOW_TOPLEVEL);
gtk_window_set_resizable(GTK_WINDOW(ctrlwin), FALSE);
gtk_window_set_transient_for(GTK_WINDOW(ctrlwin), GTK_WINDOW(ss->window));
g_signal_connect(G_OBJECT (ctrlwin), "key_press_event", (GCallback) sp_svgview_main_key_press, ss);
g_signal_connect(G_OBJECT (ctrlwin), "delete_event", (GCallback) sp_svgview_ctrlwin_delete, NULL);
#if GTK_CHECK_VERSION(3,0,0)
- GtkWidget *t = gtk_button_box_new(GTK_ORIENTATION_HORIZONTAL);
+ GtkWidget *t = gtk_button_box_new(GTK_ORIENTATION_HORIZONTAL);
#else
- GtkWidget *t = gtk_hbutton_box_new();
+ GtkWidget *t = gtk_hbutton_box_new();
#endif
- gtk_container_add(GTK_CONTAINER(ctrlwin), t);
+ gtk_container_add(GTK_CONTAINER(ctrlwin), t);
#if GTK_CHECK_VERSION(3,10,0)
GtkWidget *b = gtk_button_new_from_icon_name(INKSCAPE_ICON("go-first"), GTK_ICON_SIZE_BUTTON);
#else
- GtkWidget *b = gtk_button_new();
+ GtkWidget *b = gtk_button_new();
GtkWidget *img = gtk_image_new_from_icon_name(INKSCAPE_ICON("go-first"), GTK_ICON_SIZE_BUTTON);
gtk_button_set_image(GTK_BUTTON(b), img);
#endif
- gtk_container_add(GTK_CONTAINER(t), b);
+ gtk_container_add(GTK_CONTAINER(t), b);
- g_signal_connect(G_OBJECT(b), "clicked", (GCallback) sp_svgview_goto_first_cb, ss);
+ g_signal_connect(G_OBJECT(b), "clicked", (GCallback) sp_svgview_goto_first_cb, ss);
#if GTK_CHECK_VERSION(3,10,0)
b = gtk_button_new_from_icon_name(INKSCAPE_ICON("go-previous"), GTK_ICON_SIZE_BUTTON);
#else
- b = gtk_button_new();
+ b = gtk_button_new();
img = gtk_image_new_from_icon_name(INKSCAPE_ICON("go-previous"), GTK_ICON_SIZE_BUTTON);
gtk_button_set_image(GTK_BUTTON(b), img);
#endif
- gtk_container_add(GTK_CONTAINER(t), b);
+ gtk_container_add(GTK_CONTAINER(t), b);
- g_signal_connect(G_OBJECT(b), "clicked", (GCallback) sp_svgview_show_prev_cb, ss);
+ g_signal_connect(G_OBJECT(b), "clicked", (GCallback) sp_svgview_show_prev_cb, ss);
#if GTK_CHECK_VERSION(3,10,0)
b = gtk_button_new_from_icon_name(INKSCAPE_ICON("go-next"), GTK_ICON_SIZE_BUTTON);
#else
- b = gtk_button_new();
+ b = gtk_button_new();
img = gtk_image_new_from_icon_name(INKSCAPE_ICON("go-next"), GTK_ICON_SIZE_BUTTON);
gtk_button_set_image(GTK_BUTTON(b), img);
#endif
- gtk_container_add(GTK_CONTAINER(t), b);
+ gtk_container_add(GTK_CONTAINER(t), b);
- g_signal_connect(G_OBJECT(b), "clicked", (GCallback) sp_svgview_show_next_cb, ss);
+ g_signal_connect(G_OBJECT(b), "clicked", (GCallback) sp_svgview_show_next_cb, ss);
#if GTK_CHECK_VERSION(3,10,0)
b = gtk_button_new_from_icon_name(INKSCAPE_ICON("go-last"), GTK_ICON_SIZE_BUTTON);
#else
- b = gtk_button_new();
+ b = gtk_button_new();
img = gtk_image_new_from_icon_name(INKSCAPE_ICON("go-last"), GTK_ICON_SIZE_BUTTON);
gtk_button_set_image(GTK_BUTTON(b), img);
#endif
- gtk_container_add(GTK_CONTAINER(t), b);
- g_signal_connect(G_OBJECT(b), "clicked", (GCallback) sp_svgview_goto_last_cb, ss);
- gtk_widget_show_all(ctrlwin);
+ gtk_container_add(GTK_CONTAINER(t), b);
+ g_signal_connect(G_OBJECT(b), "clicked", (GCallback) sp_svgview_goto_last_cb, ss);
+ gtk_widget_show_all(ctrlwin);
} else {
- gtk_window_present(GTK_WINDOW(ctrlwin));
+ gtk_window_present(GTK_WINDOW(ctrlwin));
}
return NULL;
}
-static int
-sp_svgview_show_next_cb (GtkWidget */*widget*/, void *data)
+static int sp_svgview_show_next_cb (GtkWidget */*widget*/, void *data)
{
sp_svgview_show_next(static_cast<struct SPSlideShow *>(data));
return FALSE;
}
-static int
-sp_svgview_show_prev_cb (GtkWidget */*widget*/, void *data)
+static int sp_svgview_show_prev_cb (GtkWidget */*widget*/, void *data)
{
sp_svgview_show_prev(static_cast<struct SPSlideShow *>(data));
return FALSE;
}
-static int
-sp_svgview_goto_first_cb (GtkWidget */*widget*/, void *data)
+static int sp_svgview_goto_first_cb (GtkWidget */*widget*/, void *data)
{
sp_svgview_goto_first(static_cast<struct SPSlideShow *>(data));
return FALSE;
}
-static int
-sp_svgview_goto_last_cb (GtkWidget */*widget*/, void *data)
+static int sp_svgview_goto_last_cb (GtkWidget */*widget*/, void *data)
{
sp_svgview_goto_last(static_cast<struct SPSlideShow *>(data));
return FALSE;
}
-static void
-sp_svgview_waiting_cursor(struct SPSlideShow *ss)
+static void sp_svgview_waiting_cursor(struct SPSlideShow *ss)
{
GdkCursor *waiting = gdk_cursor_new(GDK_WATCH);
gdk_window_set_cursor(gtk_widget_get_window(GTK_WIDGET(ss->window)), waiting);
@@ -449,12 +444,12 @@ sp_svgview_waiting_cursor(struct SPSlideShow *ss)
gdk_cursor_unref(waiting);
#endif
}
- while(gtk_events_pending())
+ while(gtk_events_pending()) {
gtk_main_iteration();
+ }
}
-static void
-sp_svgview_normal_cursor(struct SPSlideShow *ss)
+static void sp_svgview_normal_cursor(struct SPSlideShow *ss)
{
gdk_window_set_cursor(gtk_widget_get_window(GTK_WIDGET(ss->window)), NULL);
if (ctrlwin) {
@@ -462,8 +457,9 @@ sp_svgview_normal_cursor(struct SPSlideShow *ss)
}
}
-static void
-sp_svgview_set_document(struct SPSlideShow *ss, SPDocument *doc, int current)
+static void sp_svgview_set_document(struct SPSlideShow *ss,
+ SPDocument *doc,
+ int current)
{
if (doc && doc != ss->doc) {
doc->ensureUpToDate();
@@ -473,8 +469,7 @@ sp_svgview_set_document(struct SPSlideShow *ss, SPDocument *doc, int current)
}
}
-static void
-sp_svgview_show_next (struct SPSlideShow *ss)
+static void sp_svgview_show_next (struct SPSlideShow *ss)
{
sp_svgview_waiting_cursor(ss);
@@ -489,8 +484,7 @@ sp_svgview_show_next (struct SPSlideShow *ss)
sp_svgview_normal_cursor(ss);
}
-static void
-sp_svgview_show_prev (struct SPSlideShow *ss)
+static void sp_svgview_show_prev (struct SPSlideShow *ss)
{
sp_svgview_waiting_cursor(ss);
@@ -505,16 +499,16 @@ sp_svgview_show_prev (struct SPSlideShow *ss)
sp_svgview_normal_cursor(ss);
}
-static void
-sp_svgview_goto_first (struct SPSlideShow *ss)
+static void sp_svgview_goto_first (struct SPSlideShow *ss)
{
sp_svgview_waiting_cursor(ss);
SPDocument *doc = NULL;
int current = 0;
while ( !doc && (current < ss->length - 1)) {
- if (current == ss->current)
+ if (current == ss->current) {
break;
+ }
doc = SPDocument::createNewDoc (ss->slides[current++], TRUE, false);
}
@@ -523,16 +517,16 @@ sp_svgview_goto_first (struct SPSlideShow *ss)
sp_svgview_normal_cursor(ss);
}
-static void
-sp_svgview_goto_last (struct SPSlideShow *ss)
+static void sp_svgview_goto_last (struct SPSlideShow *ss)
{
sp_svgview_waiting_cursor(ss);
SPDocument *doc = NULL;
int current = ss->length - 1;
while (!doc && (current >= 0)) {
- if (current == ss->current)
+ if (current == ss->current) {
break;
+ }
doc = SPDocument::createNewDoc (ss->slides[current--], TRUE, false);
}
@@ -542,8 +536,7 @@ sp_svgview_goto_last (struct SPSlideShow *ss)
}
#ifdef WITH_INKJAR
-static bool
-is_jar(char const *filename)
+static bool is_jar(char const *filename)
{
/* fixme: Check MIME type or something. /usr/share/misc/file/magic suggests that checking for
initial string "PK\003\004" in content should suffice. */
@@ -560,12 +553,12 @@ is_jar(char const *filename)
static void usage()
{
fprintf(stderr,
- "Usage: inkview [OPTIONS...] [FILES ...]\n"
- "\twhere FILES are SVG (.svg or .svgz)"
+ "Usage: inkview [OPTIONS...] [FILES ...]\n"
+ "\twhere FILES are SVG (.svg or .svgz)"
#ifdef WITH_INKJAR
- " or archives of SVGs (.sxw, .jar)"
+ " or archives of SVGs (.sxw, .jar)"
#endif
- "\n");
+ "\n");
exit(1);
}