Index: configure.in =================================================================== RCS file: /home/markmc/gnome-devel/local-repository/gpdf/configure.in,v retrieving revision 1.1.1.1 retrieving revision 1.2 diff -u -p -r1.1.1.1 -r1.2 --- configure.in 21 Dec 2004 07:58:01 -0000 1.1.1.1 +++ configure.in 21 Dec 2004 13:36:40 -0000 1.2 @@ -33,7 +33,7 @@ AC_PROG_CC AM_PROG_CC_STDC AC_PROG_CXX AC_STDC_HEADERS -AC_PROG_RANLIB +AM_PROG_LIBTOOL AC_PATH_PROG(GLIB_GENMARSHAL, glib-genmarshal) Index: fofi/Makefile.am =================================================================== RCS file: /home/markmc/gnome-devel/local-repository/gpdf/fofi/Makefile.am,v retrieving revision 1.1.1.1 retrieving revision 1.2 diff -u -p -r1.1.1.1 -r1.2 --- fofi/Makefile.am 21 Dec 2004 07:58:05 -0000 1.1.1.1 +++ fofi/Makefile.am 21 Dec 2004 13:36:42 -0000 1.2 @@ -2,9 +2,9 @@ INCLUDES = \ -I$(top_srcdir) \ -I$(top_srcdir)/goo -noinst_LIBRARIES = libfofi.a +noinst_LTLIBRARIES = libfofi.la -libfofi_a_SOURCES = \ +libfofi_la_SOURCES = \ FoFiBase.cc \ FoFiBase.h \ FoFiEncodings.cc \ Index: goo/Makefile.am =================================================================== RCS file: /home/markmc/gnome-devel/local-repository/gpdf/goo/Makefile.am,v retrieving revision 1.1.1.1 retrieving revision 1.2 diff -u -p -r1.1.1.1 -r1.2 --- goo/Makefile.am 21 Dec 2004 07:58:04 -0000 1.1.1.1 +++ goo/Makefile.am 21 Dec 2004 13:36:44 -0000 1.2 @@ -1,9 +1,9 @@ INCLUDES = \ -I$(top_srcdir) -noinst_LIBRARIES = libGoo.a +noinst_LTLIBRARIES = libGoo.la -libGoo_a_SOURCES = \ +libGoo_la_SOURCES = \ GHash.cc \ GHash.h \ GList.cc \ @@ -30,4 +30,4 @@ EXTRA_DIST = \ vms_unix_time.h \ vms_unix_times.c\ vms_unlink.c \ - vms_make.com \ No newline at end of file + vms_make.com Index: lib/ggv-sidebar/Makefile.am =================================================================== RCS file: /home/markmc/gnome-devel/local-repository/gpdf/lib/ggv-sidebar/Makefile.am,v retrieving revision 1.1.1.1 retrieving revision 1.2 diff -u -p -r1.1.1.1 -r1.2 --- lib/ggv-sidebar/Makefile.am 21 Dec 2004 07:58:04 -0000 1.1.1.1 +++ lib/ggv-sidebar/Makefile.am 21 Dec 2004 13:36:45 -0000 1.2 @@ -22,9 +22,9 @@ GGV_FILES = \ gtkchecklist.c \ gtkchecklist.h -noinst_LIBRARIES = libggv-sidebar.a +noinst_LTLIBRARIES = libggv-sidebar.la -libggv_sidebar_a_SOURCES = \ +libggv_sidebar_la_SOURCES = \ ggv-document.c \ ggv-document.h Index: lib/recent-files/Makefile.am =================================================================== RCS file: /home/markmc/gnome-devel/local-repository/gpdf/lib/recent-files/Makefile.am,v retrieving revision 1.1.1.1 retrieving revision 1.2 diff -u -p -r1.1.1.1 -r1.2 --- lib/recent-files/Makefile.am 21 Dec 2004 07:58:04 -0000 1.1.1.1 +++ lib/recent-files/Makefile.am 21 Dec 2004 13:36:47 -0000 1.2 @@ -17,9 +17,9 @@ EGG_FILES = \ egg-recent-util.c \ egg-recent-util.h -noinst_LIBRARIES = librecent.a +noinst_LTLIBRARIES = librecent.la -librecent_a_SOURCES = $(EGG_FILES) +librecent_la_SOURCES = $(EGG_FILES) EXTRA_DIST = \ config.h \ Index: shell/Makefile.am =================================================================== RCS file: /home/markmc/gnome-devel/local-repository/gpdf/shell/Makefile.am,v retrieving revision 1.1.1.1 retrieving revision 1.3 diff -u -p -r1.1.1.1 -r1.3 --- shell/Makefile.am 21 Dec 2004 07:58:04 -0000 1.1.1.1 +++ shell/Makefile.am 21 Dec 2004 13:36:49 -0000 1.3 @@ -3,6 +3,7 @@ SUBDIRS = . tests INCLUDES = \ -I$(top_srcdir) \ -I$(top_srcdir)/lib \ + -I$(top_srcdir)/xpdf \ -DDATADIR=\""$(datadir)"\" \ -DGNOMELOCALEDIR=\""$(prefix)/$(DATADIRNAME)/locale"\" \ -DGNOMEICONDIR=\""$(datadir)/pixmaps"\" \ @@ -12,17 +13,24 @@ INCLUDES = \ bin_PROGRAMS = gpdf gpdf_SOURCES = \ + main.cc \ gpdf.c \ gpdf-window.h gpdf_LDADD = \ $(EXTRA_GNOME_LIBS) \ - libgpdfshell.a \ - ../lib/recent-files/librecent.a + libgpdfshell.la \ + $(top_builddir)/xpdf/libgpdf.la \ + $(top_builddir)/xpdf/libxpdf.la \ + $(top_builddir)/lib/recent-files/librecent.la \ + $(top_builddir)/goo/libGoo.a \ + $(top_builddir)/fofi/libfofi.a \ + $(top_builddir)/lib/ggv-sidebar/libggv-sidebar.a \ + $(libpaper_LIBS) -noinst_LIBRARIES = libgpdfshell.a +noinst_LTLIBRARIES = libgpdfshell.la -libgpdfshell_a_SOURCES = \ +libgpdfshell_la_SOURCES = \ eel-string.c \ eel-string.h \ eel-vfs-extensions.c \ @@ -38,4 +46,4 @@ libgpdfshell_a_SOURCES = \ uidir = $(datadir)/gnome-2.0/ui ui_DATA = gpdf-window-ui.xml -EXTRA_DIST = $(ui_DATA) \ No newline at end of file +EXTRA_DIST = $(ui_DATA) Index: shell/gpdf-window.h =================================================================== RCS file: /home/markmc/gnome-devel/local-repository/gpdf/shell/gpdf-window.h,v retrieving revision 1.1.1.1 retrieving revision 1.2 diff -u -p -r1.1.1.1 -r1.2 --- shell/gpdf-window.h 21 Dec 2004 07:58:04 -0000 1.1.1.1 +++ shell/gpdf-window.h 21 Dec 2004 13:03:12 -0000 1.2 @@ -1,6 +1,6 @@ /* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */ /* - * PDF viewer Bonobo container. + * PDF viewer container. * * Author: * Martin Kretzschmar @@ -13,7 +13,7 @@ #ifndef GPDF_WINDOW_H #define GPDF_WINDOW_H -#include +#include G_BEGIN_DECLS @@ -29,13 +29,13 @@ typedef struct _GPdfWindowClass GPdfWi typedef struct _GPdfWindowPrivate GPdfWindowPrivate; struct _GPdfWindow { - BonoboWindow parent; + GtkWindow parent; GPdfWindowPrivate *priv; }; struct _GPdfWindowClass { - BonoboWindowClass parent_class; + GtkWindowClass parent_class; }; GType gpdf_window_get_type (void); Index: shell/gpdf.c =================================================================== RCS file: /home/markmc/gnome-devel/local-repository/gpdf/shell/gpdf.c,v retrieving revision 1.1.1.1 diff -u -p -r1.1.1.1 gpdf.c --- shell/gpdf.c 21 Dec 2004 07:58:04 -0000 1.1.1.1 +++ shell/gpdf.c 21 Dec 2004 16:05:13 -0000 @@ -1,20 +1,20 @@ /* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */ /* - * PDF viewer Bonobo container. + * PDF viewer container. * * Author: * Michael Meeks */ #include +#include "gpdf.h" #include "gpdf-window.h" #include "gpdf-uri-input.h" +#include "gpdf-control.h" #include #include #include #include #include -#include -#include #include #include @@ -30,44 +30,6 @@ static GPdfURIInput *uri_in; /* The list of all open windows */ static GList *window_list = NULL; -static void gpdf_window_update_window_title (GPdfWindow *); - -static gboolean -create_window (gpointer data) -{ - const gchar *fname; - - fname = (const gchar *)data; - - if (fname) - gpdf_uri_input_open_shell_arg (uri_in, fname); - - return FALSE; -} - -static gboolean -handle_cmdline_args (gpointer data) -{ - poptContext ctx; - const gchar **startup_files; - - ctx = data; - startup_files = poptGetArgs (ctx); - - if (startup_files) { - gint i; - for (i = 0; startup_files [i]; ++i) - g_idle_add (create_window, - (gchar *) startup_files [i]); - } else { - g_idle_add (create_window, NULL); - } - - poptFreeContext (ctx); - - return FALSE; -} - static gint no_contents (const GPdfWindow *window, gconstpointer dummy) { @@ -103,12 +65,13 @@ open_request_handler (GPdfURIInput *in, GPdfWindow *window; window = find_empty_or_create_new_window (window_list); - if (gpdf_window_open (window, uri)) { - gpdf_window_update_window_title (window); - gtk_widget_show_now (GTK_WIDGET (window)); - } else - if (g_list_length (window_list) > 1) + if (!gpdf_window_open (window, uri) && + g_list_length (window_list) > 1) { gtk_widget_destroy (GTK_WIDGET (window)); + return; + } + + gtk_widget_show (GTK_WIDGET (window)); } #ifdef PDF_DEBUG @@ -120,12 +83,12 @@ open_request_logger (GPdfURIInput *in, c #endif int -main (int argc, char **argv) +gpdf_main (int argc, char **argv) { GnomeProgram *program; - GnomeClient *client; GValue value = { 0 }; poptContext ctx; + const char **startup_files; #ifdef ENABLE_NLS bindtextdomain (GETTEXT_PACKAGE, GNOMELOCALEDIR); @@ -138,21 +101,8 @@ main (int argc, char **argv) GNOME_PARAM_APP_DATADIR, DATADIR, NULL); - if (bonobo_ui_init ("GNOME PDF Viewer", VERSION, &argc, argv) == FALSE) - g_error (_("Could not initialize Bonobo!\n")); - gtk_window_set_default_icon_from_file (GNOMEICONDIR "/gnome-pdf.png", NULL); - client = gnome_master_client (); - - g_value_init (&value, G_TYPE_POINTER); - g_object_get_property (G_OBJECT (program), GNOME_PARAM_POPT_CONTEXT, - &value); - ctx = g_value_get_pointer (&value); - g_value_unset (&value); - - g_idle_add (handle_cmdline_args, ctx); - uri_in = g_object_new (GPDF_TYPE_URI_INPUT, NULL); recent_facade = g_object_new (GPDF_TYPE_RECENT_FACADE, NULL); gpdf_uri_input_set_recent_facade (uri_in, recent_facade); @@ -160,9 +110,25 @@ main (int argc, char **argv) G_CALLBACK (open_request_logger), NULL)); g_signal_connect (G_OBJECT (uri_in), "open_request", G_CALLBACK (open_request_handler), NULL); - gtk_widget_show (gpdf_window_new ()); - bonobo_main (); + g_object_get_property (G_OBJECT (program), GNOME_PARAM_POPT_CONTEXT, + g_value_init (&value, G_TYPE_POINTER)); + ctx = g_value_get_pointer (&value); + + if ((startup_files = poptGetArgs (ctx))) { + int i; + + for (i = 0; startup_files [i]; i++) + gpdf_uri_input_open_shell_arg (uri_in, + startup_files [i]); + } + + poptFreeContext (ctx); + + if (!window_list) + gtk_widget_show (gpdf_window_new ()); + + gtk_main (); return 0; } @@ -170,22 +136,16 @@ main (int argc, char **argv) /* GPdfWindow class */ #include -#include #include #include "gpdf-recent-view-toolitem.h" -#define GPDF_CONTROL_IID "OAFIID:GNOME_PDF_Control" - -#define PARENT_TYPE BONOBO_TYPE_WINDOW +#define PARENT_TYPE GTK_TYPE_WINDOW -GNOME_CLASS_BOILERPLATE (GPdfWindow, gpdf_window, BonoboWindow, PARENT_TYPE); +GNOME_CLASS_BOILERPLATE (GPdfWindow, gpdf_window, GtkWindow, PARENT_TYPE); struct _GPdfWindowPrivate { - BonoboWidget *bonobo_widget; - BonoboUIComponent *ui_component; + GtkWidget *pdf_control; - GtkWidget *slot; - EggRecentView *recent_view; GtkWidget *exit_fullscreen_popup; @@ -203,121 +163,21 @@ enum { gboolean gpdf_window_has_contents (const GPdfWindow *gpdf_window) { - return (gpdf_window->priv->bonobo_widget != NULL - && BONOBO_IS_WIDGET (gpdf_window->priv->bonobo_widget)); -} - -static gboolean -gw_add_control_to_ui (GPdfWindow *gpdf_window) -{ - GPdfWindowPrivate *priv; - CORBA_Environment ev; - Bonobo_UIContainer ui_container; - GtkWidget *bonobo_widget; - - g_return_val_if_fail (GPDF_IS_NON_NULL_WINDOW (gpdf_window), FALSE); - - priv = gpdf_window->priv; - - CORBA_exception_init (&ev); - - ui_container = BONOBO_OBJREF ( - bonobo_window_get_ui_container (BONOBO_WINDOW (gpdf_window))); - bonobo_widget = - bonobo_widget_new_control (GPDF_CONTROL_IID, ui_container); - - if (bonobo_widget == NULL) - return FALSE; - - g_object_ref (G_OBJECT (bonobo_widget)); - priv->bonobo_widget = BONOBO_WIDGET (bonobo_widget); - gtk_container_add (GTK_CONTAINER (priv->slot), bonobo_widget); - CORBA_exception_free (&ev); - - return TRUE; + return (gpdf_window->priv->pdf_control != NULL + && GPDF_IS_CONTROL (gpdf_window->priv->pdf_control)); } static void -gpdf_window_update_window_title (GPdfWindow *gpdf_window) +pdf_control_title_changed (GPdfControl *pdf_control, + GParamSpec *pspec, + GtkWindow *window) { - Bonobo_PropertyBag pb; - CORBA_Environment ev; - char *exception_str; - gboolean is_default; - char *title; - - g_return_if_fail (GPDF_IS_NON_NULL_WINDOW (gpdf_window)); - - CORBA_exception_init (&ev); - - pb = bonobo_control_frame_get_control_property_bag ( - bonobo_widget_get_control_frame ( - gpdf_window->priv->bonobo_widget), &ev); - - /* Here we handle a exception when getting PB */ - if (BONOBO_EX (&ev)) { - /* Report exception & use default title */ - exception_str = bonobo_exception_get_text (&ev); - g_warning ("Property bag access exception '%s'", exception_str); - g_free (exception_str); - title = g_strdup (_("PDF Document")); - } else { - title = bonobo_pbclient_get_string_with_default (pb, "title", - _("PDF Document"), - &is_default); - bonobo_object_release_unref (pb, &ev); - } - - CORBA_exception_free (&ev); - - g_object_set (G_OBJECT (gpdf_window), "title", title, NULL); - - g_free (title); -} - -static gboolean -gw_control_load_pdf (GPdfWindow *gpdf_window, const char *uri) -{ - GPdfWindowPrivate *priv; - CORBA_Environment ev; - Bonobo_Unknown control; - Bonobo_PersistFile persist; - gboolean success = FALSE; - - g_return_val_if_fail (GPDF_IS_NON_NULL_WINDOW (gpdf_window), FALSE); - - priv = gpdf_window->priv; - control = bonobo_widget_get_objref (priv->bonobo_widget); - - g_return_val_if_fail (control != CORBA_OBJECT_NIL, FALSE); - - CORBA_exception_init (&ev); - - persist = Bonobo_Unknown_queryInterface ( - control, "IDL:Bonobo/PersistFile:1.0", &ev); - - if (BONOBO_EX (&ev) || persist == CORBA_OBJECT_NIL) { - g_warning ("Panic: component doesn't implement PersistFile."); - goto error_persist; - } - - Bonobo_PersistFile_load (persist, uri, &ev); - - if (BONOBO_EX (&ev)) - goto error_persist_file; - - success = TRUE; - -error_persist_file: - bonobo_object_release_unref (persist, &ev); -error_persist: - CORBA_exception_free (&ev); - - return success; + gtk_window_set_title (window, + gpdf_control_get_title (pdf_control)); } gboolean -gpdf_window_open (GPdfWindow *gpdf_window, const char *name) +gpdf_window_open (GPdfWindow *gpdf_window, const char *uri) { GPdfWindowPrivate *priv; @@ -326,28 +186,35 @@ gpdf_window_open (GPdfWindow *gpdf_windo priv = gpdf_window->priv; - if (gw_add_control_to_ui (gpdf_window) == FALSE) - return FALSE; - - if (gw_control_load_pdf (gpdf_window, name) == FALSE) { - gtk_container_remove (GTK_CONTAINER (priv->slot), - GTK_WIDGET (priv->bonobo_widget)); - gtk_widget_destroy (GTK_WIDGET (priv->bonobo_widget)); - priv->bonobo_widget = NULL; + priv->pdf_control = gpdf_control_new (); + gtk_container_add (GTK_CONTAINER (gpdf_window), priv->pdf_control); + gtk_widget_show (priv->pdf_control); + + if (!gpdf_control_load_pdf (GPDF_CONTROL (priv->pdf_control), uri)) { + gtk_container_remove (GTK_CONTAINER (gpdf_window), + priv->pdf_control); + gtk_widget_destroy (GTK_WIDGET (priv->pdf_control)); + priv->pdf_control = NULL; +#ifdef MCFIXME bonobo_ui_component_set_prop (gpdf_window->priv->ui_component, "/commands/ViewFullScreen", "sensitive", "0", NULL); +#endif return FALSE; } - /* Activate component */ - bonobo_control_frame_control_activate ( - bonobo_widget_get_control_frame (priv->bonobo_widget)); - gtk_widget_show (GTK_WIDGET (priv->bonobo_widget)); + gtk_window_set_title (GTK_WINDOW (gpdf_window), + gpdf_control_get_title (GPDF_CONTROL (priv->pdf_control))); + g_signal_connect (priv->pdf_control, "notify::title", + G_CALLBACK (pdf_control_title_changed), gpdf_window); + + gtk_widget_show (GTK_WIDGET (priv->pdf_control)); +#ifdef MCFIXME bonobo_ui_component_set_prop (gpdf_window->priv->ui_component, "/commands/ViewFullScreen", "sensitive", "1", NULL); +#endif return TRUE; } @@ -368,22 +235,13 @@ gpdf_window_close (GPdfWindow *gpdf_wind { g_return_if_fail (GPDF_IS_NON_NULL_WINDOW (gpdf_window)); - if (gpdf_window_has_contents (gpdf_window)) { - bonobo_control_frame_set_autoactivate ( - bonobo_widget_get_control_frame ( - gpdf_window->priv->bonobo_widget), - FALSE); - bonobo_control_frame_control_deactivate ( - bonobo_widget_get_control_frame ( - gpdf_window->priv->bonobo_widget)); - } - gtk_widget_destroy (GTK_WIDGET (gpdf_window)); if (window_list == NULL) - bonobo_main_quit (); + gtk_main_quit (); } +#ifdef MCFIXME static void gpdf_window_set_fullscreen (GPdfWindow *gpdf_window, gboolean fullscreen) { @@ -716,6 +574,7 @@ verb_HelpAbout_cb (BonoboUIComponent *ui g_free (tmp_str); } +#endif /* MCFIXME */ static gint @@ -736,10 +595,7 @@ gw_destroy (GtkObject *object) priv = gpdf_window->priv; window_list = g_list_remove (window_list, gpdf_window); - if (priv->bonobo_widget != NULL) { - g_object_unref (G_OBJECT (priv->bonobo_widget)); - priv->bonobo_widget = NULL; - } + priv->pdf_control = NULL; if (priv->recent_view != NULL) { g_object_unref (G_OBJECT (priv->recent_view)); @@ -799,17 +655,7 @@ gw_setup_dnd (GPdfWindow *gpdf_window) drag_types, n_drag_types, GDK_ACTION_COPY); } -static void -gw_setup_local_contents (GPdfWindow *gpdf_window) -{ - g_return_if_fail (GPDF_IS_NON_NULL_WINDOW (gpdf_window)); - - gpdf_window->priv->slot = gtk_event_box_new (); - gtk_widget_show (gpdf_window->priv->slot); - bonobo_window_set_contents (BONOBO_WINDOW (gpdf_window), - gpdf_window->priv->slot); - gtk_widget_show_all (gpdf_window->priv->slot); -} +#if MCFIXME /* * The menus. @@ -896,19 +742,21 @@ gw_setup_recent_toolitem (GPdfWindow *gp "/Toolbar/FileOpenMenu", GTK_WIDGET (toolitem), NULL); } +#endif /* MCFIXME */ GPdfWindow *gpdf_window_construct (GPdfWindow *gpdf_window) { g_return_val_if_fail (GPDF_IS_NON_NULL_WINDOW (gpdf_window), NULL); gw_setup_dnd (gpdf_window); - gw_setup_local_contents (gpdf_window); +#ifdef MCFIXME gw_setup_toplevel_ui (gpdf_window); gw_setup_recent_menu (gpdf_window, recent_facade, uri_in); gw_setup_recent_toolitem (gpdf_window, recent_facade, uri_in); g_signal_connect (G_OBJECT (gpdf_window), "window_state_event", G_CALLBACK (gpdf_window_window_state_changed), NULL); +#endif return gpdf_window; } @@ -918,7 +766,6 @@ GtkWidget *gpdf_window_new (void) GPdfWindow *gpdf_window; gpdf_window = GPDF_WINDOW (g_object_new (GPDF_TYPE_WINDOW, - "win_name", "gpdf", "title", _("PDF Viewer"), "default-width", 600, "default-height", 600, Index: shell/tests/Makefile.am =================================================================== RCS file: /home/markmc/gnome-devel/local-repository/gpdf/shell/tests/Makefile.am,v retrieving revision 1.1.1.1 retrieving revision 1.2 diff -u -p -r1.1.1.1 -r1.2 --- shell/tests/Makefile.am 21 Dec 2004 07:58:04 -0000 1.1.1.1 +++ shell/tests/Makefile.am 21 Dec 2004 13:36:50 -0000 1.2 @@ -5,8 +5,8 @@ INCLUDES = \ LDADD = \ $(EXTRA_GNOME_LIBS) \ - ../libgpdfshell.a \ - $(top_builddir)/lib/recent-files/librecent.a + ../libgpdfshell.la \ + $(top_builddir)/lib/recent-files/librecent.la UNIT_TESTS = \ test-uri-input Index: splash/Makefile.am =================================================================== RCS file: /home/markmc/gnome-devel/local-repository/gpdf/splash/Makefile.am,v retrieving revision 1.1.1.1 retrieving revision 1.2 diff -u -p -r1.1.1.1 -r1.2 --- splash/Makefile.am 21 Dec 2004 07:58:04 -0000 1.1.1.1 +++ splash/Makefile.am 21 Dec 2004 13:36:52 -0000 1.2 @@ -3,9 +3,9 @@ INCLUDES = \ -I$(top_srcdir)/goo \ -I$(top_srcdir)/fofi -noinst_LIBRARIES = libsplash.a +noinst_LTLIBRARIES = libsplash.la -libsplash_a_SOURCES = \ +libsplash_la_SOURCES = \ Splash.cc \ Splash.h \ SplashBitmap.cc \ Index: xpdf/Makefile.am =================================================================== RCS file: /home/markmc/gnome-devel/local-repository/gpdf/xpdf/Makefile.am,v retrieving revision 1.1.1.1 retrieving revision 1.3 diff -u -p -r1.1.1.1 -r1.3 --- xpdf/Makefile.am 21 Dec 2004 07:58:03 -0000 1.1.1.1 +++ xpdf/Makefile.am 21 Dec 2004 13:36:54 -0000 1.3 @@ -18,11 +18,9 @@ marshal_sources = \ gpdf-marshal.c \ gpdf-marshal.h -libexec_PROGRAMS = gnome-pdf-viewer +noinst_LTLIBRARIES = libxpdf.la libgpdf.la -noinst_LIBRARIES = libxpdf.a libgpdf.a - -libxpdf_a_SOURCES = \ +libxpdf_la_SOURCES = \ Annot.cc \ Annot.h \ Array.cc \ @@ -112,7 +110,7 @@ if USE_ANNOTS_VIEW gpdf-annots-view.h endif -libgpdf_a_SOURCES = \ +libgpdf_la_SOURCES = \ BonoboStream.cc \ BonoboStream.h \ GnomeVFSStream.cc \ @@ -131,10 +129,6 @@ libgpdf_a_SOURCES = \ gpdf-link-canvas-item.h \ gpdf-links-canvas-layer.cc \ gpdf-links-canvas-layer.h \ - gpdf-persist-file.cc \ - gpdf-persist-file.h \ - gpdf-persist-stream.cc \ - gpdf-persist-stream.h \ gpdf-stock-icons.c \ gpdf-stock-icons.h \ gpdf-util.h \ @@ -162,31 +156,6 @@ libgpdf_a_SOURCES = \ gpdf-font-face.h \ $(marshal_sources) -gnome_pdf_viewer_SOURCES = \ - $(common_sources) \ - bonobo-application-x-pdf.cc \ - nautilus-pdf-property-page.cc \ - nautilus-pdf-property-page.h - -# Old files -# GOutputDev.cc \ -# GOutputDev.h \ -# pdf-view.cc \ -# pdf-view.h \ -# gpdf-embeddable.cc \ -# gpdf-embeddable.h \ -# gpdf-embeddable-view.cc \ -# gpdf-embeddable-view.h - -gnome_pdf_viewer_LDADD = \ - libxpdf.a \ - libgpdf.a \ - $(top_builddir)/goo/libGoo.a \ - $(top_builddir)/fofi/libfofi.a \ - $(top_builddir)/lib/ggv-sidebar/libggv-sidebar.a \ - $(EXTRA_GNOME_LIBS) \ - $(libpaper_LIBS) - gpdf-marshal.h: gpdf-marshal.list $(GLIB_GENMARSHAL) $(GLIB_GENMARSHAL) $< --header --prefix=gpdf_marshal > $@ Index: xpdf/gpdf-control-private.h =================================================================== RCS file: /home/markmc/gnome-devel/local-repository/gpdf/xpdf/gpdf-control-private.h,v retrieving revision 1.1.1.1 retrieving revision 1.2 diff -u -p -r1.1.1.1 -r1.2 --- xpdf/gpdf-control-private.h 21 Dec 2004 07:58:02 -0000 1.1.1.1 +++ xpdf/gpdf-control-private.h 21 Dec 2004 13:03:16 -0000 1.2 @@ -76,10 +76,6 @@ void gpdf_control_private_info_dialog const gchar *body_text, gboolean modal); -/* Display help at a given anchor or section id */ -void gpdf_control_private_display_help (BonoboControl * control, - const gchar *section_id); - G_END_DECLS #endif /* GPDF_CONTROL_PRIVATE_H */ Index: xpdf/gpdf-control.cc =================================================================== RCS file: /home/markmc/gnome-devel/local-repository/gpdf/xpdf/gpdf-control.cc,v retrieving revision 1.1.1.1 diff -u -p -r1.1.1.1 gpdf-control.cc --- xpdf/gpdf-control.cc 21 Dec 2004 07:58:04 -0000 1.1.1.1 +++ xpdf/gpdf-control.cc 21 Dec 2004 15:48:46 -0000 @@ -30,8 +30,7 @@ # include "pdf-properties-display.h" # include # include -# include -# include +# include # include # include # include @@ -41,11 +40,11 @@ # include "eel-gconf-extensions.h" # include "prefs-strings.h" #include "gpdf-g-switch.h" -#include "gpdf-persist-stream.h" -#include "gpdf-persist-file.h" #include "PSOutputDev.h" #include "GlobalParams.h" #include "gpdf-stock-icons.h" +#include "GnomeVFSStream.h" +#include "ErrorCodes.h" #define noPDF_DEBUG #ifdef PDF_DEBUG @@ -62,15 +61,16 @@ BEGIN_EXTERN_C #define GPDF_GNOME_HELP_FILENAME "gpdf.xml" struct _GPdfControlPrivate { - GPdfPersistStream *persist_stream; - GPdfPersistFile *persist_file; - PDFDoc *pdf_doc; char *title; + char *uri; + GnomeVFSHandle *vfs_handle; + PDFDoc *pdf_doc; GtkWidget *vbox, *hpaned; GtkWidget *scrolled_window; GtkWidget *appbar; GtkWidget *gpdf_view; + GtkWidget *page_control; GtkWidget *gpdf_sidebar; GtkWidget *gpdf_bookmarks_view; GtkWidget *gpdf_thumbnails_view; @@ -80,13 +80,13 @@ struct _GPdfControlPrivate { GnomeAppBar *gnome_appbar; GtkProgressBar *progress; +#ifdef MCFIXME BonoboZoomable *zoomable; +#endif gboolean has_zoomable_frame; gboolean activated; gboolean ignore_toggles_changes; - - BonoboControl *bonobo_page_control; GtkWidget *file_chooser; GtkWidget *properties; @@ -121,21 +121,15 @@ struct _GPdfControlPrivate { /* Components IDs */ #define VIEW_SIDEBAR_COMP_ID "ViewSidebar" -#define PARENT_TYPE BONOBO_TYPE_CONTROL -BONOBO_CLASS_BOILERPLATE (GPdfControl, gpdf_control, - BonoboControl, PARENT_TYPE); +G_DEFINE_TYPE (GPdfControl, gpdf_control, GTK_TYPE_EVENT_BOX); #define GPDF_IS_NON_NULL_CONTROL(obj) \ (((obj) != NULL) && (GPDF_IS_CONTROL ((obj)))) -enum { - PROP_0, - PROP_PERSIST_STREAM, - PROP_PERSIST_FILE -}; enum { - PBPROP_TITLE + PROP_0, + PROP_TITLE }; static void gpdf_control_view_sidebar_changed_cb (BonoboUIComponent *component, @@ -542,11 +536,10 @@ gpdf_control_private_info_dialog (GPdfCo } } -void -gpdf_control_private_display_help (BonoboControl *control, - const gchar *section_id) +static void +gpdf_control_display_help (GPdfControl *gpdf_control, + const gchar *section_id) { - GPdfControl *gpdf_control = GPDF_CONTROL (control); GPdfControlPrivate *priv; g_return_if_fail (GPDF_IS_NON_NULL_CONTROL (gpdf_control)); @@ -1094,7 +1087,7 @@ save_error_dialog (GtkWindow *window, co /* Easy way to make the text bold while keeping the string * above free from pango markup (FIXME ?) */ gtk_message_dialog_format_secondary_text ( - GTK_MESSAGE_DIALOG (error_dialog), ""); + GTK_MESSAGE_DIALOG (error_dialog), NULL); gtk_dialog_run (GTK_DIALOG (error_dialog)); gtk_widget_destroy (error_dialog); @@ -1455,6 +1448,7 @@ verb_ZoomFitWidth_cb (BonoboUIComponent gpdf_control_zoom_fit_width (GPDF_CONTROL (user_data)); } +#ifdef MCFIXME static void gc_zoom_in_cb (GtkObject *source, gpointer data) { @@ -1513,6 +1507,7 @@ gc_zoom_changed_report_to_zoomable (GPdf CORBA_FLOAT_FROM_GDOUBLE (zoom), NULL); } +#endif /* MCFIXME */ static void gc_set_page_cb (GPdfPageControl *page_control, gint page, GPdfControl *control) @@ -1528,13 +1523,10 @@ static void gc_page_changed_update_page_control (GPdfView *gpdf_view, gint page, GPdfControl *control) { - GPdfPageControl *pc; - g_return_if_fail (GPDF_IS_NON_NULL_CONTROL (control)); - pc = GPDF_PAGE_CONTROL ( - bonobo_control_get_widget (control->priv->bonobo_page_control)); - gpdf_page_control_set_page (pc, page); + gpdf_page_control_set_page (GPDF_PAGE_CONTROL (control->priv->page_control), + page); } static void @@ -1655,6 +1647,7 @@ gc_ui_set_pixbufs (GPdfControl *control) static void gc_ui_add_page_control (GPdfControl *control) { +#if MCFIXME BonoboControl *bonobo_page_control; BonoboUIComponent *ui_component; @@ -1667,6 +1660,7 @@ gc_ui_add_page_control (GPdfControl *con TOOLBAR_PAGE_CONTROL_PATH, BONOBO_OBJREF (bonobo_page_control), NULL); +#endif } static void @@ -1758,6 +1752,7 @@ gpdf_control_save_sidebar_state (GPdfCon cur_page_id ? cur_page_id : GPDF_BOOKMARKS_VIEW_PAGE_ID); } +#ifdef MCFIXME static void gpdf_control_activate_sidebar (BonoboControl *control, gboolean activate) { @@ -1800,10 +1795,11 @@ gpdf_control_activate (BonoboControl *co gpdf_control->priv->activated = activate; gpdf_control_enable_ui (gpdf_control, gpdf_control->priv->pdf_doc != NULL); - - BONOBO_CALL_PARENT ( - BONOBO_CONTROL_CLASS, activate, (control, activate)); + + if (BONOBO_CONTROL_CLASS (gpdf_control_parent_class)->activate) + BONOBO_CONTROL_CLASS (gpdf_control_parent_class)->activate (control, activate); } +#endif /* MCFIXME */ static GPdfBookmarksView * gpdf_control_get_bookmarks_view (GPdfControl *gpdf_control) @@ -1929,8 +1925,7 @@ gpdf_control_pdf_doc_changed (GPdfContro gpdf_annots_view = gpdf_control_get_annots_view (gpdf_control); #endif - page_control = GPDF_PAGE_CONTROL ( - bonobo_control_get_widget (priv->bonobo_page_control)); + page_control = GPDF_PAGE_CONTROL (priv->page_control); if (priv->pdf_doc) { gpdf_view_set_pdf_doc (gpdf_view, priv->pdf_doc); @@ -1954,114 +1949,10 @@ gpdf_control_pdf_doc_changed (GPdfContro } static void -persist_stream_set_pdf_cb (GPdfPersistStream *persist_stream, - gpointer user_data) -{ - GPdfControl *control; - - g_return_if_fail (persist_stream != NULL); - g_return_if_fail (GPDF_IS_PERSIST_STREAM (persist_stream)); - g_return_if_fail (GPDF_IS_NON_NULL_CONTROL (user_data)); - - control = GPDF_CONTROL (user_data); - control->priv->pdf_doc = - gpdf_persist_stream_get_pdf_doc (persist_stream); - - if (control->priv->title) - g_free (control->priv->title); - - control->priv->title = g_strdup (_("PDF Document")); - - gpdf_control_pdf_doc_changed (control); -} - -static void -persist_file_loading_finished_cb (GPdfPersistFile *persist_file, - gpointer user_data) -{ - GPdfControl *control; - const char *uri; - GnomeVFSURI *vfs_uri; - - g_return_if_fail (persist_file != NULL); - g_return_if_fail (GPDF_IS_PERSIST_FILE (persist_file)); - g_return_if_fail (GPDF_IS_NON_NULL_CONTROL (user_data)); - - control = GPDF_CONTROL (user_data); - control->priv->pdf_doc = gpdf_persist_file_get_pdf_doc (persist_file); - - if (control->priv->title) - g_free (control->priv->title); - - uri = gpdf_persist_file_get_current_uri (persist_file); - - vfs_uri = uri ? gnome_vfs_uri_new (uri) : NULL; - - if (vfs_uri) { - control->priv->title = - gnome_vfs_uri_extract_short_name (vfs_uri); - gnome_vfs_uri_unref (vfs_uri); - } else { - control->priv->title = g_strdup (_("PDF Document")); - } - - gpdf_control_pdf_doc_changed (control); -} - -static void -persist_file_loading_failed_cb (GPdfPersistFile *persist_file, - const char *message, - gpointer user_data) -{ - GPdfControl *control; - GtkWidget *dlg; - gchar *primary; - - g_return_if_fail (GPDF_IS_NON_NULL_CONTROL (user_data)); - - control = GPDF_CONTROL (user_data); - - control->priv->title = g_strdup (_("PDF Document")); - control->priv->pdf_doc = NULL; - - primary = g_strdup_printf ( - _("Loading of %s failed."), - gpdf_persist_file_get_current_uri (persist_file)); - - gpdf_control_private_error_dialog (control, primary, message, FALSE, TRUE); - - g_free (primary); - - gpdf_control_pdf_doc_changed (control); -} - -static void -gpdf_control_destroy (BonoboObject *object) -{ - GPdfControlPrivate *priv; - - g_return_if_fail (GPDF_IS_NON_NULL_CONTROL (object)); - - DBG (g_message ("Destroying GPdfControl")); - - priv = GPDF_CONTROL (object)->priv; - - if (priv->bonobo_page_control) { - bonobo_object_unref (BONOBO_OBJECT (priv->bonobo_page_control)); - priv->bonobo_page_control = NULL; - } - - if (priv->title) { - g_free (priv->title); - priv->title = NULL; - } - - BONOBO_CALL_PARENT (BONOBO_OBJECT_CLASS, destroy, (object)); -} - -static void -gpdf_control_set_property (GObject *object, guint param_id, - const GValue *value, GParamSpec *pspec) +gpdf_control_get_property (GObject *object, + guint param_id, + GValue *value, + GParamSpec *pspec) { GPdfControl *gpdf_control; @@ -2070,101 +1961,13 @@ gpdf_control_set_property (GObject *obje gpdf_control = GPDF_CONTROL (object); switch (param_id) { - case PROP_PERSIST_STREAM: { - GPdfPersistStream *pstream; - - pstream = GPDF_PERSIST_STREAM (g_value_get_object (value)); - - gpdf_control->priv->persist_stream = pstream; - -/* - * Disable PersistStream because with it we can't close the control - * while still printing. Otherwise we'll get errors. The - * BonoboStream will be closed while we're still trying to read from - * it. (At least with Nautilus.) - */ -#if 0 - bonobo_object_ref (BONOBO_OBJECT (pstream)); - bonobo_object_add_interface (BONOBO_OBJECT (gpdf_control), - BONOBO_OBJECT (pstream)); -#endif - break; - } - case PROP_PERSIST_FILE: { - GPdfPersistFile *pfile; - - pfile = GPDF_PERSIST_FILE (g_value_get_object (value)); - - gpdf_control->priv->persist_file = pfile; - - bonobo_object_ref (BONOBO_OBJECT (pfile)); - bonobo_object_add_interface (BONOBO_OBJECT (gpdf_control), - BONOBO_OBJECT (pfile)); - break; - } - default: - G_OBJECT_WARN_INVALID_PROPERTY_ID (object, param_id, pspec); + case PROP_TITLE: + g_value_set_string (value, gpdf_control_get_title (gpdf_control)); break; - } -} - -static void -gpdf_control_setup_persist (GPdfControl *control) -{ - gpdf_persist_stream_set_control (control->priv->persist_stream, - BONOBO_CONTROL (control)); - g_signal_connect (G_OBJECT (control->priv->persist_stream), - "set_pdf", - G_CALLBACK (persist_stream_set_pdf_cb), - control); - gpdf_persist_file_set_control (control->priv->persist_file, - BONOBO_CONTROL (control)); - g_signal_connect (G_OBJECT (control->priv->persist_file), - "loading_finished", - G_CALLBACK (persist_file_loading_finished_cb), - control); - g_signal_connect (G_OBJECT (control->priv->persist_file), - "loading_failed", - G_CALLBACK (persist_file_loading_failed_cb), - control); -} - -static void -property_bag_get_prop (BonoboPropertyBag *bag, BonoboArg *arg, guint arg_id, - CORBA_Environment *ev, gpointer user_data) -{ - GPdfControl *control; - - g_return_if_fail (GPDF_IS_NON_NULL_CONTROL (user_data)); - - control = GPDF_CONTROL (user_data); - - switch (arg_id) { - case PBPROP_TITLE: - BONOBO_ARG_SET_STRING ( - arg, - CORBA_string_dup (control->priv->title)); - break; - default: - break; - } -} - -static void -gpdf_control_setup_property_bag (GPdfControl *gpdf_control) -{ - BonoboPropertyBag *property_bag; - - property_bag = bonobo_property_bag_new (property_bag_get_prop, NULL, - gpdf_control); - bonobo_property_bag_add (property_bag, "title", - PBPROP_TITLE, TC_CORBA_string, NULL, - "Document title", - BONOBO_PROPERTY_READABLE); - bonobo_control_set_properties (BONOBO_CONTROL (gpdf_control), - BONOBO_OBJREF (property_bag), - NULL); - bonobo_object_unref (BONOBO_OBJECT (property_bag)); + default: + G_OBJECT_WARN_INVALID_PROPERTY_ID (object, param_id, pspec); + break; + } } static void @@ -2346,21 +2149,26 @@ gpdf_control_setup_view_widgets (GPdfCon GtkWidget *sw; GtkWidget *appbar; GtkWidget *gpdf_view; + +#ifdef MCFIXME BonoboUIComponent *ui_component; ui_component = bonobo_control_get_ui_component (BONOBO_CONTROL (control)); +#endif /* MCFIXME */ vbox = gtk_vbox_new (FALSE, 0); gtk_widget_show (vbox); control->priv->vbox = vbox; - + gtk_container_add (GTK_CONTAINER (control), vbox); + hpaned = gtk_hpaned_new (); gtk_widget_show (hpaned); control->priv->hpaned = hpaned; sidebar = gpdf_sidebar_new (); control->priv->gpdf_sidebar = sidebar; + gtk_widget_show (sidebar); g_signal_connect (G_OBJECT(sidebar), "close_requested", G_CALLBACK (gpdf_control_sidebar_close_requested_cb), @@ -2429,6 +2237,7 @@ gpdf_control_setup_view_widgets (GPdfCon static void gpdf_control_setup_zoomable (GPdfControl *control) { +#ifdef MCFIXME BonoboZoomable *zoomable = bonobo_zoomable_new (); control->priv->zoomable = zoomable; @@ -2468,17 +2277,15 @@ gpdf_control_setup_zoomable (GPdfControl bonobo_object_add_interface (BONOBO_OBJECT (control), BONOBO_OBJECT (zoomable)); +#endif /* MCFIXME */ } static void gpdf_control_setup_page_control (GPdfControl *control) { - GtkWidget *page_control; - BonoboControl *bonobo_page_control; + control->priv->page_control = GTK_WIDGET (g_object_new (GPDF_TYPE_PAGE_CONTROL, NULL)); - page_control = GTK_WIDGET (g_object_new (GPDF_TYPE_PAGE_CONTROL, NULL)); - - g_signal_connect (G_OBJECT (page_control), "set_page", + g_signal_connect (G_OBJECT (control->priv->page_control), "set_page", G_CALLBACK (gc_set_page_cb), control); @@ -2486,80 +2293,53 @@ gpdf_control_setup_page_control (GPdfCon G_CALLBACK (gc_page_changed_update_page_control), control); - gtk_widget_show (page_control); - bonobo_page_control = bonobo_control_new (page_control); - - control->priv->bonobo_page_control = bonobo_page_control; + gtk_widget_show (control->priv->page_control); } -static GObject * -gpdf_control_constructor (GType type, - guint n_construct_properties, - GObjectConstructParam *construct_params) +static void +gpdf_control_construct (GPdfControl *control) { - GObject *object; - GPdfControl *control; - GPdfControlPrivate *priv; - - object = G_OBJECT_CLASS (parent_class)->constructor ( - type, n_construct_properties, construct_params); - - control = GPDF_CONTROL (object); - priv = control->priv; - - g_return_val_if_fail (priv->persist_stream != NULL, NULL); - g_return_val_if_fail (priv->persist_file != NULL, NULL); - gpdf_control_setup_persist (control); gpdf_control_setup_view_widgets (control); gpdf_control_setup_zoomable (control); gpdf_control_setup_page_control (control); - - bonobo_control_construct (BONOBO_CONTROL (object), - control->priv->vbox); - - control->priv->title = g_strdup (_("PDF Document")); - gpdf_control_setup_property_bag (control); - - return object; } static void -gpdf_control_disconnected (BonoboControl *control) +gpdf_control_destroy (GtkObject *object) { - GPdfControlPrivate *priv; + GPdfControl *control; - g_return_if_fail (GPDF_IS_NON_NULL_CONTROL (control)); + g_return_if_fail (GPDF_IS_NON_NULL_CONTROL (object)); - priv = GPDF_CONTROL (control)->priv; + control = GPDF_CONTROL (object); gpdf_control_save_sidebar_state (GPDF_CONTROL (control)); - if (priv->file_chooser) { - gtk_widget_destroy (priv->file_chooser); - priv->file_chooser = NULL; + if (control->priv->file_chooser) { + gtk_widget_destroy (control->priv->file_chooser); + control->priv->file_chooser = NULL; } - if (priv->properties) { - gtk_widget_destroy (priv->properties); - priv->properties = NULL; + if (control->priv->properties) { + gtk_widget_destroy (control->priv->properties); + control->priv->properties = NULL; } - if (priv->print_dialog) { - gtk_widget_destroy (priv->print_dialog); - priv->print_dialog = NULL; + if (control->priv->print_dialog) { + gtk_widget_destroy (control->priv->print_dialog); + control->priv->print_dialog = NULL; } - BONOBO_CALL_PARENT (BONOBO_CONTROL_CLASS, disconnected, (control)); -} - -static void -gpdf_control_dispose (GObject *object) -{ - GPdfControl *control; - - g_return_if_fail (GPDF_IS_NON_NULL_CONTROL (object)); + /* MCFIXME */ + if (control->priv->page_control) { + gtk_widget_destroy (control->priv->page_control); + control->priv->page_control = NULL; + } - control = GPDF_CONTROL (object); + if (control->priv->title) { + g_free (control->priv->title); + control->priv->title = NULL; + } if (G_IS_OBJECT (control->priv->gpdf_bookmarks_view)) { g_object_unref (control->priv->gpdf_bookmarks_view); @@ -2577,56 +2357,388 @@ gpdf_control_dispose (GObject *object) control->priv->gpdf_annots_view = NULL; } #endif - BONOBO_CALL_PARENT (G_OBJECT_CLASS, dispose, (object)); + GTK_OBJECT_CLASS (gpdf_control_parent_class)->destroy (object); } static void gpdf_control_finalize (GObject *object) { + GPdfControl *control; + g_return_if_fail (GPDF_IS_NON_NULL_CONTROL (object)); - g_free ((GPDF_CONTROL (object))->priv); + control = GPDF_CONTROL (object); + + g_free (control->priv->title); + control->priv->title = NULL; - BONOBO_CALL_PARENT (G_OBJECT_CLASS, finalize, (object)); + g_free (control->priv); + control->priv = NULL; + + G_OBJECT_CLASS (gpdf_control_parent_class)->finalize (object); } static void gpdf_control_class_init (GPdfControlClass *klass) { GObjectClass *object_class = G_OBJECT_CLASS (klass); + GtkObjectClass *gtkobject_class = GTK_OBJECT_CLASS (klass); - object_class->constructor = gpdf_control_constructor; - object_class->dispose = gpdf_control_dispose; - object_class->finalize = gpdf_control_finalize; - object_class->set_property = gpdf_control_set_property; + gtkobject_class->destroy = gpdf_control_destroy; - BONOBO_CONTROL_CLASS (klass)->activate = gpdf_control_activate; - BONOBO_CONTROL_CLASS (klass)->disconnected = gpdf_control_disconnected; + object_class->finalize = gpdf_control_finalize; + object_class->get_property = gpdf_control_get_property; - BONOBO_OBJECT_CLASS (klass)->destroy = gpdf_control_destroy; + g_object_class_install_property (object_class, + PROP_TITLE, + g_param_spec_string ("title", + "Title", + "Title", + NULL, + G_PARAM_READABLE)); - g_object_class_install_property ( - object_class, PROP_PERSIST_STREAM, - g_param_spec_object ("persist_stream", - "PersistStream", - "PersistStream", - GPDF_TYPE_PERSIST_STREAM, - (GParamFlags)(G_PARAM_WRITABLE | - G_PARAM_CONSTRUCT_ONLY))); - g_object_class_install_property ( - object_class, PROP_PERSIST_FILE, - g_param_spec_object ("persist_file", - "PersistFile", - "PersistFile", - GPDF_TYPE_PERSIST_FILE, - (GParamFlags)(G_PARAM_WRITABLE | - G_PARAM_CONSTRUCT_ONLY))); + if (!globalParams) + globalParams = new GlobalParams(""); } static void -gpdf_control_instance_init (GPdfControl *control) +gpdf_control_init (GPdfControl *control) { control->priv = g_new0 (GPdfControlPrivate, 1); + + control->priv->title = g_strdup (_("PDF Document")); +} + +GtkWidget * +gpdf_control_new (void) +{ + GPdfControl *control; + + control = GPDF_CONTROL (g_object_new (GPDF_TYPE_CONTROL, NULL)); + + gpdf_control_construct (control); + + return GTK_WIDGET (control); +} + +static void +gpdf_control_on_entry_activate (GtkEntry *entry, + gpointer user_data) +{ + GtkWidget *dialog1 = GTK_WIDGET (user_data); + + gtk_widget_hide (dialog1); + g_object_set_data (G_OBJECT (dialog1), + "passwd", + (gpointer)gtk_entry_get_text (GTK_ENTRY (entry))); + gtk_main_quit(); +} + +static void +gpdf_control_on_dialog_response_cb (GtkDialog *dialog1, + guint resp, gpointer user_data) +{ + GPdfControl *control = GPDF_CONTROL (user_data); + GtkWidget *entry1 = GTK_WIDGET (g_object_get_data (G_OBJECT (dialog1), "entry1")); + + switch (resp) { + case GTK_RESPONSE_HELP: + gpdf_control_display_help (control, "gpdf-password"); + break; + case GTK_RESPONSE_OK: + gtk_widget_hide (GTK_WIDGET (dialog1)); + g_object_set_data (G_OBJECT (dialog1), + "passwd", + (gpointer)gtk_entry_get_text (GTK_ENTRY (entry1))); + gtk_main_quit(); + break; + case GTK_RESPONSE_CANCEL: + gtk_widget_hide (GTK_WIDGET (dialog1)); + g_object_set_data (G_OBJECT (dialog1), "passwd", (gpointer)""); + gtk_main_quit(); + break; + } +} + +static GtkWidget * +gpdf_control_create_password_dialog (GPdfControl *control, + const gchar *labeltext, + const gchar *tiptext) +{ + GtkWidget *dialog1; + GtkWidget *dialog_vbox1; + GtkWidget *hbox1; + GtkWidget *image; + GtkWidget *vbox1; + GtkWidget *label; + GtkWidget *entry1; + GtkWidget *dialog_action_area1; + GtkWidget *helpbutton1; + GtkWidget *cancelbutton1; + GtkWidget *okbutton1; + GtkTooltips *tooltips; + + tooltips = gtk_tooltips_new (); + + dialog1 = gtk_widget_new (GTK_TYPE_DIALOG, + "title", "", + "border-width", 6, + "resizable", FALSE, + "has-separator", FALSE, + NULL); + + dialog_vbox1 = GTK_DIALOG (dialog1)->vbox; + g_object_set (dialog_vbox1, "spacing", 12, NULL); + gtk_widget_show (dialog_vbox1); + + hbox1 = gtk_widget_new (GTK_TYPE_HBOX, + "homogeneous", FALSE, + "spacing", 12, + "border-width", 6, + NULL); + gtk_widget_show (hbox1); + gtk_box_pack_start (GTK_BOX (dialog_vbox1), hbox1, TRUE, TRUE, 0); + + image = gtk_widget_new (GTK_TYPE_IMAGE, + "stock", GTK_STOCK_DIALOG_AUTHENTICATION, + "icon-size", GTK_ICON_SIZE_DIALOG, + "yalign", 0.0, + NULL); + gtk_widget_show (image); + gtk_container_add (GTK_CONTAINER (hbox1), image); + + vbox1 = gtk_vbox_new (FALSE, 2); + g_object_set (vbox1, "spacing", 12, NULL); + gtk_widget_show (vbox1); + gtk_container_add (GTK_CONTAINER (hbox1), vbox1); + + label = gtk_label_new (labeltext); + gtk_widget_show (label); + gtk_box_pack_start (GTK_BOX (vbox1), label, FALSE, FALSE, 0); + gtk_label_set_justify (GTK_LABEL (label), GTK_JUSTIFY_LEFT); + gtk_misc_set_alignment (GTK_MISC (label), 0, 0.5); + + entry1 = gtk_entry_new (); + g_object_set_data (G_OBJECT (dialog1), "entry1", entry1); + gtk_widget_show (entry1); + gtk_box_pack_start (GTK_BOX (vbox1), entry1, FALSE, FALSE, 0); + gtk_entry_set_max_length (GTK_ENTRY (entry1), 40); + gtk_entry_set_visibility (GTK_ENTRY (entry1), FALSE); + gtk_entry_set_activates_default (GTK_ENTRY (entry1), TRUE); + gtk_entry_set_width_chars (GTK_ENTRY (entry1), 40); + gtk_tooltips_set_tip (tooltips, entry1, tiptext, NULL); + + dialog_action_area1 = GTK_DIALOG (dialog1)->action_area; + gtk_widget_show (dialog_action_area1); + gtk_button_box_set_layout (GTK_BUTTON_BOX (dialog_action_area1), GTK_BUTTONBOX_END); + + helpbutton1 = gtk_button_new_from_stock ("gtk-help"); + gtk_widget_set_name (helpbutton1, "helpbutton1"); + gtk_widget_show (helpbutton1); + gtk_dialog_add_action_widget (GTK_DIALOG (dialog1), helpbutton1, GTK_RESPONSE_HELP); + GTK_WIDGET_SET_FLAGS (helpbutton1, GTK_CAN_DEFAULT); + + cancelbutton1 = gtk_button_new_from_stock ("gtk-cancel"); + gtk_widget_show (cancelbutton1); + gtk_dialog_add_action_widget (GTK_DIALOG (dialog1), cancelbutton1, GTK_RESPONSE_CANCEL); + GTK_WIDGET_SET_FLAGS (cancelbutton1, GTK_CAN_DEFAULT); + + okbutton1 = gtk_button_new_with_mnemonic (_("_Open Document")); + gtk_widget_show (okbutton1); + gtk_dialog_add_action_widget (GTK_DIALOG (dialog1), okbutton1, GTK_RESPONSE_OK); + GTK_WIDGET_SET_FLAGS (okbutton1, GTK_CAN_DEFAULT); + + g_signal_connect ((gpointer) entry1, "activate", + G_CALLBACK (gpdf_control_on_entry_activate), + (gpointer) dialog1); + g_signal_connect ((gpointer) dialog1, "response", + G_CALLBACK (gpdf_control_on_dialog_response_cb), + (gpointer) control); + return dialog1; +} + +static gchar * +gpdf_control_get_password (GPdfControl *control) +{ + gchar *passwd; + GtkWidget *dialog; + + dialog = gpdf_control_create_password_dialog ( + control, + _("Enter document password:"), + _("This document is encrypted and this " + "operation requires the document's password")); + + gtk_window_set_transient_for (GTK_WINDOW (dialog), + GTK_WINDOW (gtk_widget_get_toplevel (GTK_WIDGET (control)))); + + gtk_widget_show (dialog); + gtk_main(); + passwd = g_strdup ((const gchar *)g_object_get_data (G_OBJECT (dialog), + "passwd")); + gtk_widget_destroy (dialog); + return passwd; +} + +static void +gpdf_control_loading_failed (GPdfControl *control, + const char *message, + const char *uri) +{ + GtkWidget *dlg; + gchar *primary; + + control->priv->pdf_doc = NULL; + + g_free (control->priv->title); + control->priv->title = g_strdup (_("PDF Document")); + g_object_notify (G_OBJECT (control), "title"); + + primary = g_strdup_printf (_("Loading of %s failed."), uri); + + gpdf_control_private_error_dialog (control, primary, message, FALSE, TRUE); + + g_free (primary); + + gpdf_control_pdf_doc_changed (control); +} + +static void +gpdf_control_unload (GPdfControl *control) +{ + g_return_if_fail (GPDF_IS_CONTROL (control)); + + if (control->priv->pdf_doc) { + delete control->priv->pdf_doc; + control->priv->pdf_doc = NULL; + } + + if (control->priv->vfs_handle) { + gnome_vfs_close (control->priv->vfs_handle); + control->priv->vfs_handle = NULL; + } + + if (control->priv->uri) { + g_free (control->priv->uri); + control->priv->uri = NULL; + } +} + +static gboolean +gpdf_control_load (GPdfControl *control, + const char *uri) +{ + GPdfControlPrivate *priv; + gchar *uri_scheme; + GnomeVFSResult vfs_result; + Object obj; + BaseStream *pdf_stream; + const gchar *error_msg; + + priv = control->priv; + + if (priv->pdf_doc || priv->vfs_handle || priv->uri) + gpdf_control_unload (control); + + uri_scheme = gnome_vfs_get_uri_scheme (uri); + if (uri_scheme) // already looks like a URI + priv->uri = g_strdup (uri); + else + priv->uri = gnome_vfs_get_uri_from_local_path (uri); + + g_free (uri_scheme); + + vfs_result = gnome_vfs_open (&priv->vfs_handle, priv->uri, + (GnomeVFSOpenMode) (GNOME_VFS_OPEN_READ | + GNOME_VFS_OPEN_RANDOM)); + if (vfs_result != GNOME_VFS_OK) { + gpdf_control_loading_failed (control, + gnome_vfs_result_to_string (vfs_result), + uri); + return FALSE; + } + + obj.initNull (); + pdf_stream = new GnomeVFSStream (priv->vfs_handle, 0, gFalse, 0, &obj); + /* FIXME if (pdf_stream == NULL) ? */ + priv->pdf_doc = new PDFDoc (pdf_stream); + + /* FIXME if (pdf_doc == NULL) ? */ + if (!priv->pdf_doc->isOk () && + priv->pdf_doc->getErrorCode () == errEncrypted) { + gchar *pwd = gpdf_control_get_password (control); + GString goo_pwd (pwd); + g_free (pwd); + + /* delete priv->pdf_doc; */ /* FIXME causes SEGV */ + priv->pdf_doc = new PDFDoc (pdf_stream, &goo_pwd, &goo_pwd); + } + + if (priv->pdf_doc->isOk ()) { + gpdf_control_pdf_doc_changed (control); + return TRUE; + } + + switch (priv->pdf_doc->getErrorCode ()) { + case errBadCatalog: + /* translators: page catalog is a part of the PDF file */ + /* The last period (.) is missing on purpose */ + error_msg = _("The PDF file is damaged. Its page catalog could not be read"); + break; + case errDamaged: + error_msg = _("The PDF file is damaged or it is not a PDF file. It could not be repaired"); + break; + case errEncrypted: + error_msg = _("The PDF document is encrypted and you didn't enter the correct password"); + break; + case errNone: + case errOpenFile: + case errHighlightFile: + default: + error_msg = NULL; + break; + } + + gpdf_control_loading_failed (control, error_msg, uri); + + gpdf_control_unload (control); + + return FALSE; +} + +gboolean +gpdf_control_load_pdf (GPdfControl *control, + const char *uri) +{ + GnomeVFSURI *vfs_uri; + + g_return_val_if_fail (GPDF_IS_CONTROL (control), FALSE); + + control->priv->pdf_doc = NULL; + + if (!gpdf_control_load (control, uri)) + return FALSE; + + vfs_uri = uri ? gnome_vfs_uri_new (uri) : NULL; + if (vfs_uri) { + control->priv->title = + gnome_vfs_uri_extract_short_name (vfs_uri); + gnome_vfs_uri_unref (vfs_uri); + } else { + control->priv->title = g_strdup (_("PDF Document")); + } + + g_object_notify (G_OBJECT (control), "title"); + + return TRUE; +} + +const char * +gpdf_control_get_title (GPdfControl *gpdf_control) +{ + g_return_val_if_fail (GPDF_IS_CONTROL (gpdf_control), NULL); + + return gpdf_control->priv->title; } END_EXTERN_C Index: xpdf/gpdf-control.h =================================================================== RCS file: /home/markmc/gnome-devel/local-repository/gpdf/xpdf/gpdf-control.h,v retrieving revision 1.1.1.1 diff -u -p -r1.1.1.1 gpdf-control.h --- xpdf/gpdf-control.h 21 Dec 2004 07:58:02 -0000 1.1.1.1 +++ xpdf/gpdf-control.h 21 Dec 2004 15:13:44 -0000 @@ -12,7 +12,7 @@ #define GPDF_CONTROL_H #include "gpdf-g-switch.h" -# include +# include #include "gpdf-g-switch.h" G_BEGIN_DECLS @@ -28,16 +28,20 @@ typedef struct _GPdfControlClass GPdfC typedef struct _GPdfControlPrivate GPdfControlPrivate; struct _GPdfControl { - BonoboControl parent; + GtkEventBox parent; GPdfControlPrivate *priv; }; struct _GPdfControlClass { - BonoboControlClass parent_class; + GtkEventBoxClass parent_class; }; -GType gpdf_control_get_type (void); +GType gpdf_control_get_type (void); +GtkWidget *gpdf_control_new (void); +gboolean gpdf_control_load_pdf (GPdfControl *gpdf_control, + const char *uri); +const char *gpdf_control_get_title (GPdfControl *gpdf_control); G_END_DECLS Index: xpdf/tests/Makefile.am =================================================================== RCS file: /home/markmc/gnome-devel/local-repository/gpdf/xpdf/tests/Makefile.am,v retrieving revision 1.1.1.1 retrieving revision 1.2 diff -u -p -r1.1.1.1 -r1.2 --- xpdf/tests/Makefile.am 21 Dec 2004 07:58:04 -0000 1.1.1.1 +++ xpdf/tests/Makefile.am 21 Dec 2004 13:36:55 -0000 1.2 @@ -9,18 +9,19 @@ INCLUDES = \ LDADD = \ $(EXTRA_GNOME_LIBS) \ - ../libgpdf.a \ - ../libxpdf.a \ - $(top_builddir)/fofi/libfofi.a \ - $(top_builddir)/goo/libGoo.a \ - $(top_builddir)/lib/ggv-sidebar/libggv-sidebar.a \ + ../libgpdf.la \ + ../libxpdf.la \ + $(top_builddir)/fofi/libfofi.la \ + $(top_builddir)/goo/libGoo.la \ + $(top_builddir)/lib/ggv-sidebar/libggv-sidebar.la \ $(libpaper_LIBS) if HAVE_PDFTEX TESTS_NEEDING_PDFTEX = \ test-gpdf-view \ - test-links \ - test-pdf-loading + test-links +# MCFIXME: +# test-pdf-loading else TESTS_NEEDING_PDFTEX = endif Index: xpdf/tests/test-gpdf-control.cc =================================================================== RCS file: /home/markmc/gnome-devel/local-repository/gpdf/xpdf/tests/test-gpdf-control.cc,v retrieving revision 1.1.1.1 retrieving revision 1.2 diff -u -p -r1.1.1.1 -r1.2 --- xpdf/tests/test-gpdf-control.cc 21 Dec 2004 07:58:04 -0000 1.1.1.1 +++ xpdf/tests/test-gpdf-control.cc 21 Dec 2004 13:03:19 -0000 1.2 @@ -22,17 +22,14 @@ */ #include "aconf.h" +#include +#include #include "gpdf-g-switch.h" -# include # include #include "gpdf-g-switch.h" #include "gpdf-control.h" -#include "gpdf-persist-stream.h" -#include "gpdf-persist-file.h" -#define TEST_INITIALIZATION \ - bonobo_ui_init ("test", VERSION, &argc, argv); \ - gnome_vfs_init (); +#define TEST_INITIALIZATION gnome_vfs_init (); #include #define TEST_STR(expected, got) \ @@ -43,123 +40,47 @@ } \ g_print ("Okay!\n"); -static CORBA_Environment ev; - static void setup () { - CORBA_exception_init (&ev); } static void tear_down () { - CORBA_exception_free (&ev); } TEST_BEGIN (GPdfControl, setup, tear_down) -TEST_NEW (control_implements_persist_stream_and_file) -{ - GPdfPersistStream *gpdf_persist_stream; - GPdfPersistFile *gpdf_persist_file; - GPdfControl *gpdf_control; - Bonobo_Control control; - Bonobo_PersistStream persist_stream; - Bonobo_PersistFile persist_file; - - gpdf_persist_stream = - gpdf_persist_stream_new ("OAFIID:GNOME_PDF_Control"); - gpdf_persist_file = - gpdf_persist_file_new ("OAFIID:GNOME_PDF_Control"); - - gpdf_control = GPDF_CONTROL ( - g_object_new (GPDF_TYPE_CONTROL, - "persist_stream", gpdf_persist_stream, - "persist_file", gpdf_persist_file, NULL)); - bonobo_object_unref (gpdf_persist_stream); - bonobo_object_unref (gpdf_persist_file); - - TEST (GPDF_IS_CONTROL (gpdf_control)); - - control = BONOBO_OBJREF (gpdf_control); - persist_stream = Bonobo_Unknown_queryInterface ( - control, "IDL:Bonobo/PersistStream:1.0", &ev); - TEST (!BONOBO_EX (&ev)); - TEST (persist_stream != CORBA_OBJECT_NIL); - - persist_file = Bonobo_Unknown_queryInterface ( - control, "IDL:Bonobo/PersistFile:1.0", &ev); - TEST (!BONOBO_EX (&ev)); - TEST (persist_file != CORBA_OBJECT_NIL); - - bonobo_object_release_unref (persist_file, &ev); - TEST (!BONOBO_EX (&ev)); - bonobo_object_release_unref (persist_stream, &ev); - TEST (!BONOBO_EX (&ev)); - - bonobo_object_unref (gpdf_control); -} - TEST_NEW (control_property_title) { - GPdfPersistFile *gpdf_persist_file; - GPdfPersistStream *gpdf_persist_stream; - GPdfControl *gpdf_control; - Bonobo_PropertyBag property_bag; - Bonobo_PersistFile persist_file; + GtkWidget *gpdf_control; char *current_dir; char *uri; GnomeVFSURI *vfs_uri; const char *expected_title; - char *title; + const char *title; - gpdf_persist_file = - gpdf_persist_file_new ("OAFIID:GNOME_PDF_Control"); - gpdf_persist_stream = - gpdf_persist_stream_new ("OAFIID:GNOME_PDF_Control"); - gpdf_control = GPDF_CONTROL ( - g_object_new (GPDF_TYPE_CONTROL, - "persist_file", gpdf_persist_file, - "persist_stream", gpdf_persist_stream, NULL)); - bonobo_object_unref (gpdf_persist_file); + gpdf_control = gpdf_control_new (); TEST (GPDF_IS_CONTROL (gpdf_control)); - property_bag = Bonobo_Control_getProperties ( - BONOBO_OBJREF (gpdf_control), &ev); - TEST (property_bag != CORBA_OBJECT_NIL); - current_dir = g_get_current_dir (); uri = g_strconcat ("file://", current_dir, "/", TESTFILES_DIR "/simple-links.pdf", NULL); g_free (current_dir); - persist_file = Bonobo_Unknown_queryInterface ( - BONOBO_OBJREF (gpdf_control), "IDL:Bonobo/PersistFile:1.0", &ev); - Bonobo_PersistFile_load (persist_file, uri, &ev); - TEST (!BONOBO_EX (&ev)); + gpdf_control_load_pdf (GPDF_CONTROL (gpdf_control), uri); - vfs_uri = gnome_vfs_uri_new (uri); expected_title = gnome_vfs_uri_get_path (vfs_uri); - title = bonobo_pbclient_get_string_with_default (property_bag, "title", - "no title returned", - NULL); + title = gpdf_control_get_title (GPDF_CONTROL (gpdf_control)); TEST_STR (expected_title, title); - g_free (title); gnome_vfs_uri_unref (vfs_uri); g_free (uri); - bonobo_object_release_unref (property_bag, &ev); - bonobo_object_release_unref (persist_file, &ev); - bonobo_object_unref (gpdf_control); -} - -TEST_NEW (loading_through_stream_unloads_file) -{ - /* FIXME writeme */ + g_object_unref (gpdf_control); } TEST_END ()