X-Git-Url: https://www.fi.muni.cz/~kas/git//home/kas/public_html/git/?a=blobdiff_plain;f=pdf%2Fxpdf%2Fgpdf.cc;h=a4f64a2e059c8fcf4f26dadaef3fda83990453a4;hb=d99fb4f4acd14fcdbda968abd907547dcc7af40c;hp=cd8149482ee0da873bc281f6fdea4976cd99cd1e;hpb=a263a6005e61b041fdb2d96611377ba89cce2364;p=evince.git diff --git a/pdf/xpdf/gpdf.cc b/pdf/xpdf/gpdf.cc index cd814948..a4f64a2e 100644 --- a/pdf/xpdf/gpdf.cc +++ b/pdf/xpdf/gpdf.cc @@ -3,8 +3,8 @@ * * Author: * Michael Meeks - * */ +#include "config.h" #include #include #include @@ -12,13 +12,14 @@ extern "C" { #define GString G_String #include -#include + +#include + #include #include #include #undef GString } -#include "config.h" #include "bonobo-application-x-pdf.h" poptContext ctx; @@ -35,20 +36,20 @@ typedef struct _Container Container; /* NB. there is a 1 to 1 Container -> Component mapping, this is due to how much MDI sucks; unutterably */ struct _Container { - BonoboContainer *container; - BonoboUIHandler *uih; + BonoboItemContainer *container; + BonoboUIComponent *ui_component; - GtkWidget *app; - GtkScrolledWindow *scroll; - GtkWidget *view_widget; - Component *component; + GtkWidget *app; + GtkWidget *slot; + GtkWidget *view_widget; + Component *component; }; struct _Component { Container *container; BonoboClientSite *client_site; - BonoboViewFrame *view_frame; + BonoboViewFrame *view_frame; BonoboObjectClient *server; }; @@ -63,41 +64,26 @@ extern "C" { static void container_close_cmd (GtkWidget *widget, Container *container); static void container_exit_cmd (void); static void container_about_cmd (GtkWidget *widget, Container *container); + static void container_dump_cmd (GtkWidget *widget, Container *container); static Component *container_activate_component (Container *container, char *component_goad_id); } /* * The menus. */ -static GnomeUIInfo container_file_menu [] = { - GNOMEUIINFO_MENU_OPEN_ITEM (container_open_cmd, NULL), - GNOMEUIINFO_SEPARATOR, - GNOMEUIINFO_MENU_CLOSE_ITEM(container_close_cmd, NULL), - GNOMEUIINFO_SEPARATOR, - GNOMEUIINFO_MENU_EXIT_ITEM (container_exit_cmd, NULL), - GNOMEUIINFO_END -}; - -static GnomeUIInfo container_help_menu [] = { - GNOMEUIINFO_MENU_ABOUT_ITEM(container_about_cmd, NULL), - GNOMEUIINFO_END -}; +BonoboUIVerb verbs [] = { + BONOBO_UI_UNSAFE_VERB ("FileOpen", container_open_cmd), + BONOBO_UI_UNSAFE_VERB ("FileClose", container_close_cmd), + BONOBO_UI_UNSAFE_VERB ("FileExit", container_exit_cmd), -static GnomeUIInfo container_main_menu [] = { - GNOMEUIINFO_MENU_FILE_TREE (container_file_menu), - GNOMEUIINFO_MENU_HELP_TREE (container_help_menu), - GNOMEUIINFO_END -}; + BONOBO_UI_UNSAFE_VERB ("HelpAbout", container_about_cmd), -static GnomeUIInfo container_toolbar [] = { - GNOMEUIINFO_ITEM_STOCK ( - N_("Open"), N_("Opens an existing workbook"), - container_open_cmd, GNOME_STOCK_PIXMAP_OPEN), + BONOBO_UI_UNSAFE_VERB ("DebugDumpXml", container_dump_cmd), - GNOMEUIINFO_SEPARATOR, - GNOMEUIINFO_END + BONOBO_UI_VERB_END }; + extern "C" { static gboolean open_pdf (Container *container, const char *name) @@ -111,16 +97,18 @@ extern "C" { g_return_val_if_fail (container != NULL, FALSE); g_return_val_if_fail (container->view_widget == NULL, FALSE); - comp = container_activate_component (container, "bonobo-object:application-x-pdf"); + comp = container_activate_component ( + container, "OAFIID:GNOME_XPDF_Embeddable"); + if (!comp || !(object = comp->server)) { gnome_error_dialog (_("Could not launch bonobo object.")); return FALSE; } CORBA_exception_init (&ev); - persist = Bonobo_Unknown_query_interface ( + persist = Bonobo_Unknown_queryInterface ( bonobo_object_corba_objref (BONOBO_OBJECT (object)), - "IDL:GNOME/PersistStream:1.0", &ev); + "IDL:Bonobo/PersistStream:1.0", &ev); if (ev._major != CORBA_NO_EXCEPTION || persist == CORBA_OBJECT_NIL) { @@ -128,17 +116,19 @@ extern "C" { return FALSE; } - stream = bonobo_stream_fs_open (name, Bonobo_Storage_READ); + stream = bonobo_stream_open (BONOBO_IO_DRIVER_FS, name, Bonobo_Storage_READ, 0); if (stream == NULL) { - char *err = g_strconcat (_("Could not open "), name, NULL); + char *err = g_strdup_printf (_("Could not open %s"), name); gnome_error_dialog_parented (err, GTK_WINDOW(container->app)); g_free (err); return FALSE; } Bonobo_PersistStream_load (persist, - (Bonobo_Stream) bonobo_object_corba_objref (BONOBO_OBJECT (stream)), &ev); + (Bonobo_Stream) bonobo_object_corba_objref (BONOBO_OBJECT (stream)), + "application/pdf", + &ev); Bonobo_Unknown_unref (persist, &ev); CORBA_Object_release (persist, &ev); @@ -206,7 +196,7 @@ extern "C" { g_free (fname); } else { GtkWidget *dialog; - dialog = gnome_message_box_new ("Can't open a directory", + dialog = gnome_message_box_new (_("Can't open a directory"), GNOME_MESSAGE_BOX_ERROR, GNOME_STOCK_BUTTON_OK, NULL); gnome_dialog_set_parent (GNOME_DIALOG (dialog), @@ -297,6 +287,12 @@ extern "C" { container_destroy ((Container *)containers->data); } +static void +container_dump_cmd (GtkWidget *widget, Container *container) +{ + bonobo_window_dump (BONOBO_WINDOW(container->app), "on demand"); +} + static void container_about_cmd (GtkWidget *widget, Container *container) { @@ -336,9 +332,10 @@ container_set_view (Container *container, Component *component) /* * Create the remote view and the local ViewFrame. */ - view_frame = bonobo_client_site_new_view (component->client_site, - bonobo_object_corba_objref (BONOBO_OBJECT ( - container->uih))); + view_frame = bonobo_client_site_new_view ( + component->client_site, + bonobo_ui_component_get_container (container->ui_component)); + component->view_frame = view_frame; /* @@ -349,10 +346,7 @@ container_set_view (Container *container, Component *component) container->view_widget = view_widget; container->component = component; - /* - * Show the component. - */ - gtk_scrolled_window_add_with_viewport (container->scroll, view_widget); + gtk_container_add (GTK_CONTAINER (container->slot), view_widget); /* * Activate it ( get it to merge menus etc. ) @@ -360,21 +354,20 @@ container_set_view (Container *container, Component *component) bonobo_view_frame_view_activate (view_frame); bonobo_view_frame_set_covered (view_frame, FALSE); - gtk_widget_show_all (GTK_WIDGET (container->scroll)); + gtk_widget_show_all (GTK_WIDGET (container->slot)); } static BonoboObjectClient * -container_launch_component (BonoboClientSite *client_site, - BonoboContainer *container, - char *component_goad_id) +container_launch_component (BonoboClientSite *client_site, + BonoboItemContainer *container, + char *component_goad_id) { BonoboObjectClient *object_server; /* * Launch the component. */ - object_server = bonobo_object_activate_with_goad_id ( - NULL, component_goad_id, GOAD_ACTIVATE_SHLIB, NULL); + object_server = bonobo_object_activate (component_goad_id, 0); if (object_server == NULL) return NULL; @@ -390,13 +383,6 @@ container_launch_component (BonoboClientSite *client_site, return NULL; } - /* - * The BonoboContainer object maintains a list of the - * ClientSites which it manages. Here we add the new - * ClientSite to that list. - */ - bonobo_container_add (container, BONOBO_OBJECT (client_site)); - return object_server; } @@ -473,133 +459,6 @@ extern "C" { tmp_list = g_list_next (tmp_list); } } - - /* - * GtkWidget key_press method override - * - * Scrolls the window on keypress - */ - static gint - key_press_event_cb (GtkWidget *widget, GdkEventKey *event) - { - Container *container = (Container *) gtk_object_get_data (GTK_OBJECT (widget), "container_data"); - Component *component; - GtkScrolledWindow *win; - float delta; - - g_return_val_if_fail (container != NULL, FALSE); - - win = container->scroll; - component = container->component; - if (component == NULL || win == NULL) - return FALSE; - - /* - * Scrolling the view. - */ - if (event->keyval == GDK_Up) { - GtkAdjustment *adj = gtk_scrolled_window_get_vadjustment (win); - - if (event->state & GDK_CONTROL_MASK) - delta = adj->step_increment * 3; - else - delta = adj->step_increment; - - adj->value = CLAMP (adj->value - delta, - adj->lower, adj->upper - adj->page_size); - - gtk_adjustment_value_changed (adj); - return TRUE; - } else if (event->keyval == GDK_Down) { - GtkAdjustment *adj = gtk_scrolled_window_get_vadjustment (win); - - if (event->state & GDK_CONTROL_MASK) - delta = adj->step_increment * 3; - else - delta = adj->step_increment; - - adj->value = CLAMP (adj->value + delta, - adj->lower, adj->upper - adj->page_size); - gtk_adjustment_value_changed (adj); - return TRUE; - } else if (event->keyval == GDK_Left) { - GtkAdjustment *adj = gtk_scrolled_window_get_hadjustment (win); - - if (event->state & GDK_CONTROL_MASK) - delta = adj->step_increment * 3; - else - delta = adj->step_increment; - - adj->value = CLAMP (adj->value - delta, - adj->lower, adj->upper - adj->page_size); - gtk_adjustment_value_changed (adj); - return TRUE; - } else if (event->keyval == GDK_Right) { - GtkAdjustment *adj = gtk_scrolled_window_get_hadjustment (win); - - if (event->state & GDK_CONTROL_MASK) - delta = adj->step_increment * 3; - else - delta = adj->step_increment; - - adj->value = CLAMP (adj->value + delta, - adj->lower, adj->upper - adj->page_size); - gtk_adjustment_value_changed (adj); - return TRUE; - - /* - * Various shortcuts mapped to verbs. - */ - - } else if (event->keyval == GDK_Home) { - bonobo_view_frame_view_do_verb (component->view_frame, VERB_FIRST); - return TRUE; - } else if (event->keyval == GDK_End) { - bonobo_view_frame_view_do_verb (component->view_frame, VERB_LAST); - return TRUE; - } else if (event->keyval == GDK_Page_Down || - event->keyval == GDK_Next) { - bonobo_view_frame_view_do_verb (component->view_frame, VERB_NEXT); - return TRUE; - } else if (event->keyval == GDK_Page_Up || - event->keyval == GDK_Prior) { - bonobo_view_frame_view_do_verb (component->view_frame, VERB_PREV); - return TRUE; - } else if (event->keyval == GDK_plus || - event->keyval == GDK_equal) { - bonobo_view_frame_view_do_verb (component->view_frame, VERB_Z_IN); - } else if (event->keyval == GDK_underscore || - event->keyval == GDK_minus) { - bonobo_view_frame_view_do_verb (component->view_frame, VERB_Z_OUT); - } - return FALSE; - } -} - -static void -container_create_menus (Container *container) -{ - BonoboUIHandlerMenuItem *menu_list; - - bonobo_ui_handler_create_menubar (container->uih); - - /* - * Create the basic menus out of UIInfo structures. - */ - menu_list = bonobo_ui_handler_menu_parse_uiinfo_list_with_data (container_main_menu, container); - bonobo_ui_handler_menu_add_list (container->uih, "/", menu_list); - bonobo_ui_handler_menu_free_list (menu_list); -} - -static void -container_create_toolbar (Container *container) -{ - BonoboUIHandlerToolbarItem *toolbar; - - bonobo_ui_handler_create_toolbar (container->uih, "pdf"); - toolbar = bonobo_ui_handler_toolbar_parse_uiinfo_list_with_data (container_toolbar, container); - bonobo_ui_handler_toolbar_add_list (container->uih, "/pdf/", toolbar); - bonobo_ui_handler_toolbar_free_list (toolbar); } static Container * @@ -611,11 +470,12 @@ container_new (const char *fname) { "text/uri-list", 0, 0 }, }; static gint n_drag_types = sizeof (drag_types) / sizeof (drag_types [0]); + BonoboUIContainer *ui_container; container = g_new0 (Container, 1); - container->app = gnome_app_new ("pdf-viewer", - "GNOME PDF viewer"); + container->app = bonobo_window_new ("pdf-viewer", + _("GNOME PDF viewer")); gtk_drag_dest_set (container->app, GTK_DEST_DEFAULT_ALL, @@ -630,32 +490,33 @@ container_new (const char *fname) gtk_window_set_default_size (GTK_WINDOW (container->app), 600, 600); gtk_window_set_policy (GTK_WINDOW (container->app), TRUE, TRUE, FALSE); - container->container = bonobo_container_new (); + container->container = bonobo_item_container_new (); container->view_widget = NULL; - container->scroll = GTK_SCROLLED_WINDOW (gtk_scrolled_window_new (NULL, NULL)); - gtk_scrolled_window_set_policy (container->scroll, GTK_POLICY_ALWAYS, - GTK_POLICY_ALWAYS); - gnome_app_set_contents (GNOME_APP (container->app), GTK_WIDGET (container->scroll)); + container->slot = gtk_event_box_new (); + gtk_widget_show (container->slot); + + bonobo_window_set_contents (BONOBO_WINDOW(container->app), + GTK_WIDGET (container->slot)); + gtk_widget_show_all (container->slot); gtk_object_set_data (GTK_OBJECT (container->app), "container_data", container); - gtk_signal_connect (GTK_OBJECT (container->app), "key_press_event", - GTK_SIGNAL_FUNC (key_press_event_cb), NULL); gtk_signal_connect (GTK_OBJECT (container->app), "delete_event", GTK_SIGNAL_FUNC (container_destroy_cb), container); - /* - * Create the BonoboUIHandler object which will be used to - * create the container's menus and toolbars. The UIHandler - * also creates a CORBA server which embedded components use - * to do menu/toolbar merging. - */ - container->uih = bonobo_ui_handler_new (); - bonobo_ui_handler_set_app (container->uih, GNOME_APP (container->app)); + ui_container = bonobo_ui_container_new (); + bonobo_ui_container_set_win (ui_container, BONOBO_WINDOW(container->app)); - container_create_menus (container); - container_create_toolbar (container); + container->ui_component = bonobo_ui_component_new ("gpdf"); + bonobo_ui_component_set_container ( + container->ui_component, + bonobo_object_corba_objref (BONOBO_OBJECT (ui_container))); - gtk_widget_show_all (container->app); + bonobo_ui_component_add_verb_list_with_data ( + container->ui_component, verbs, container); + + bonobo_ui_util_set_ui (container->ui_component, DATADIR, "gpdf-ui.xml", "gpdf"); + + gtk_widget_show (container->app); containers = g_list_append (containers, container); @@ -665,7 +526,7 @@ container_new (const char *fname) return NULL; } - gtk_widget_show_all (container->app); + gtk_widget_show (container->app); return container; } @@ -673,46 +534,49 @@ container_new (const char *fname) int main (int argc, char **argv) { - CORBA_Environment ev; - CORBA_ORB orb; - const char **view_files = NULL; - gboolean loaded; - int i; - - CORBA_exception_init (&ev); - - gnome_CORBA_init_with_popt_table ("PDFViewer", "0.0.1", - &argc, argv, - gpdf_popt_options, 0, &ctx, - GNORBA_INIT_SERVER_FUNC, &ev); - - CORBA_exception_free (&ev); - - orb = gnome_CORBA_ORB (); - - if (bonobo_init (orb, NULL, NULL) == FALSE) - g_error (_("Could not initialize Bonobo!\n")); - bonobo_activate (); - - view_files = poptGetArgs (ctx); - - /* Load files */ - i = 0; - loaded = FALSE; - if (view_files) { - for (i = 0; view_files[i]; i++) - if (container_new (view_files[i])) { - loaded = TRUE; - while (gtk_events_pending ()) - gtk_main_iteration (); - } - } - if ((i == 0) || !loaded) - container_new (NULL); - - poptFreeContext (ctx); - - gtk_main (); + CORBA_Environment ev; + CORBA_ORB orb; + const char **view_files = NULL; + gboolean loaded; + int i; + + bindtextdomain (PACKAGE, GNOMELOCALEDIR); + textdomain (PACKAGE); + setlocale (LC_ALL, ""); + + CORBA_exception_init (&ev); + + gnomelib_register_popt_table (oaf_popt_options, "OAF"); + gnome_init_with_popt_table("PDFViewer", "0.0.1", + argc, argv, + gpdf_popt_options, 0, &ctx); + orb = oaf_init (argc, argv); + + CORBA_exception_free (&ev); + + if (bonobo_init (orb, NULL, NULL) == FALSE) + g_error (_("Could not initialize Bonobo!\n")); + bonobo_activate (); + + view_files = poptGetArgs (ctx); + + /* Load files */ + i = 0; + loaded = FALSE; + if (view_files) { + for (i = 0; view_files[i]; i++) + if (container_new (view_files[i])) { + loaded = TRUE; + while (gtk_events_pending ()) + gtk_main_iteration (); + } + } + if ((i == 0) || !loaded) + container_new (NULL); + + poptFreeContext (ctx); + + gtk_main (); - return 0; + return 0; }