X-Git-Url: https://www.fi.muni.cz/~kas/git//home/kas/public_html/git/?a=blobdiff_plain;f=shell%2Fev-application.c;h=6cbb149363b86e548b803025a48311bc84b7843d;hb=65c06150e05948eb7b056b0ec5cb9c364b652cfe;hp=6b8ef370bd05cb25e379dd390238e7574b358d96;hpb=d0e4d9279d7aa4be1ddec50c2a87c63638632712;p=evince.git diff --git a/shell/ev-application.c b/shell/ev-application.c index 6b8ef370..6cbb1493 100644 --- a/shell/ev-application.c +++ b/shell/ev-application.c @@ -27,6 +27,7 @@ #include "ev-application.h" #include "ev-utils.h" #include "ev-document-types.h" +#include "ev-file-helpers.h" #include #include @@ -61,6 +62,9 @@ ev_application_register_service (EvApplication *application) connection = dbus_g_bus_get (DBUS_BUS_STARTER, &err); if (connection == NULL) { g_warning ("Service registration failed."); + g_error_free (err); + + return FALSE; } driver_proxy = dbus_g_proxy_new_for_name (connection, @@ -70,24 +74,30 @@ ev_application_register_service (EvApplication *application) if (!org_freedesktop_DBus_request_name (driver_proxy, APPLICATION_SERVICE_NAME, - 0, &request_name_result, &err)) - { + 0, &request_name_result, &err)) { g_warning ("Service registration failed."); + g_clear_error (&err); } if (request_name_result == DBUS_REQUEST_NAME_REPLY_EXISTS) { return FALSE; } +#if DBUS_VERSION == 33 dbus_g_object_class_install_info (G_OBJECT_GET_CLASS (application), - &dbus_glib_ev_application_object_info); + &dbus_glib_ev_application_object_info); +#else + dbus_g_object_type_install_info (EV_TYPE_APPLICATION, + &dbus_glib_ev_application_object_info); +#endif + dbus_g_connection_register_g_object (connection, "/org/gnome/evince/Evince", G_OBJECT (application)); return TRUE; } -#endif +#endif /* ENABLE_DBUS */ EvApplication * ev_application_get_instance (void) @@ -101,10 +111,13 @@ ev_application_get_instance (void) return instance; } -void -ev_application_open_window (EvApplication *application) +gboolean +ev_application_open_window (EvApplication *application, + GError **error) { gtk_widget_show (ev_window_new ()); + + return TRUE; } static EvWindow * @@ -156,19 +169,21 @@ ev_application_get_uri_window (EvApplication *application, const char *uri) return uri_window; } -void -ev_application_open_uri (EvApplication *application, - const char *uri, - const char *page_label) +gboolean +ev_application_open_uri (EvApplication *application, + const char *uri, + const char *page_label, + GError **error) { EvWindow *new_window; - g_return_if_fail (uri != NULL); + g_return_val_if_fail (uri != NULL, FALSE); new_window = ev_application_get_uri_window (application, uri); if (new_window != NULL) { gtk_window_present (GTK_WINDOW (new_window)); - return; + + return TRUE; } new_window = ev_application_get_empty_window (application); @@ -184,6 +199,8 @@ ev_application_open_uri (EvApplication *application, if (page_label != NULL) { ev_window_open_page_label (new_window, page_label); } + + return TRUE; } void @@ -192,13 +209,25 @@ ev_application_open_uri_list (EvApplication *application, GSList *uri_list) GSList *l; for (l = uri_list; l != NULL; l = l->next) { - ev_application_open_uri (application, (char *)l->data, NULL); + ev_application_open_uri (application, (char *)l->data, NULL, NULL); } } void ev_application_shutdown (EvApplication *application) { + if (application->toolbars_model) { + g_object_unref (application->toolbars_model); + g_free (application->toolbars_file); + application->toolbars_model = NULL; + application->toolbars_file = NULL; + } + + if (application->recent_model) { + g_object_unref (application->recent_model); + application->recent_model = NULL; + } + g_object_unref (application); gtk_main_quit (); } @@ -211,5 +240,43 @@ ev_application_class_init (EvApplicationClass *ev_application_class) static void ev_application_init (EvApplication *ev_application) { + ev_application->toolbars_model = egg_toolbars_model_new (); + + ev_application->toolbars_file = g_build_filename + (ev_dot_dir (), "evince_toolbar.xml", NULL); + + if (!egg_toolbars_model_load (ev_application->toolbars_model, + ev_application->toolbars_file)) { + egg_toolbars_model_load (ev_application->toolbars_model, + DATADIR"/evince-toolbar.xml"); + } + + egg_toolbars_model_set_flags (ev_application->toolbars_model, 0, + EGG_TB_MODEL_NOT_REMOVABLE); + + ev_application->recent_model = egg_recent_model_new (EGG_RECENT_MODEL_SORT_MRU); + /* FIXME we should add a mime type filter but current eggrecent + has only a varargs style api which does not work well when + the list of mime types is dynamic */ + egg_recent_model_set_limit (ev_application->recent_model, 5); + egg_recent_model_set_filter_groups (ev_application->recent_model, + "Evince", NULL); +} + +EggToolbarsModel *ev_application_get_toolbars_model (EvApplication *application) +{ + return application->toolbars_model; } +EggRecentModel *ev_application_get_recent_model (EvApplication *application) +{ + return application->recent_model; +} + +void ev_application_save_toolbars_model (EvApplication *application) +{ + egg_toolbars_model_save (application->toolbars_model, + application->toolbars_file, "1.0"); +} + +