1 /* this file is part of evince, a gnome document viewer
3 * Copyright (C) 2004 Martin Kretzschmar
6 * Martin Kretzschmar <martink@gnome.org>
8 * Evince is free software; you can redistribute it and/or modify it
9 * under the terms of the GNU General Public License as published by
10 * the Free Software Foundation; either version 2 of the License, or
11 * (at your option) any later version.
13 * Evince is distributed in the hope that it will be useful, but
14 * WITHOUT ANY WARRANTY; without even the implied warranty of
15 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
16 * General Public License for more details.
18 * You should have received a copy of the GNU General Public License
19 * along with this program; if not, write to the Free Software
20 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
27 #include "ev-application.h"
29 #include "ev-document-types.h"
32 #include <glib/gi18n.h>
33 #include <glib-object.h>
34 #include <gtk/gtkfilechooserdialog.h>
35 #include <gtk/gtkstock.h>
36 #include <gtk/gtkwidget.h>
37 #include <gtk/gtkmain.h>
41 #include "ev-application-service.h"
42 #include <dbus/dbus-glib-bindings.h>
45 G_DEFINE_TYPE (EvApplication, ev_application, G_TYPE_OBJECT);
47 #define EV_APPLICATION_GET_PRIVATE(object) \
48 (G_TYPE_INSTANCE_GET_PRIVATE ((object), EV_TYPE_APPLICATION, EvApplicationPrivate))
50 #define APPLICATION_SERVICE_NAME "org.gnome.evince.ApplicationService"
54 ev_application_register_service (EvApplication *application)
56 DBusGConnection *connection;
57 DBusGProxy *driver_proxy;
59 guint request_name_result;
61 connection = dbus_g_bus_get (DBUS_BUS_STARTER, &err);
62 if (connection == NULL) {
63 g_warning ("Service registration failed.");
69 driver_proxy = dbus_g_proxy_new_for_name (connection,
74 if (!org_freedesktop_DBus_request_name (driver_proxy,
75 APPLICATION_SERVICE_NAME,
76 0, &request_name_result, &err)) {
77 g_warning ("Service registration failed.");
81 if (request_name_result == DBUS_REQUEST_NAME_REPLY_EXISTS) {
85 #if DBUS_VERSION == 33
86 dbus_g_object_class_install_info (G_OBJECT_GET_CLASS (application),
87 &dbus_glib_ev_application_object_info);
89 dbus_g_object_type_install_info (EV_TYPE_APPLICATION,
90 &dbus_glib_ev_application_object_info);
93 dbus_g_connection_register_g_object (connection,
94 "/org/gnome/evince/Evince",
95 G_OBJECT (application));
99 #endif /* ENABLE_DBUS */
102 ev_application_get_instance (void)
104 static EvApplication *instance;
107 instance = EV_APPLICATION (g_object_new (EV_TYPE_APPLICATION, NULL));
114 ev_application_open_window (EvApplication *application,
117 gtk_widget_show (ev_window_new ());
123 ev_application_get_empty_window (EvApplication *application)
125 EvWindow *empty_window = NULL;
126 GList *windows = gtk_window_list_toplevels ();
129 for (l = windows; l != NULL; l = l->next) {
130 if (EV_IS_WINDOW (l->data)) {
131 EvWindow *window = EV_WINDOW (l->data);
133 if (ev_window_is_empty (window)) {
134 empty_window = window;
140 g_list_free (windows);
146 ev_application_get_uri_window (EvApplication *application, const char *uri)
148 EvWindow *uri_window = NULL;
149 GList *windows = gtk_window_list_toplevels ();
152 g_return_val_if_fail (uri != NULL, NULL);
154 for (l = windows; l != NULL; l = l->next) {
155 if (EV_IS_WINDOW (l->data)) {
156 EvWindow *window = EV_WINDOW (l->data);
157 const char *window_uri = ev_window_get_uri (window);
159 if (window_uri && strcmp (window_uri, uri) == 0) {
166 g_list_free (windows);
172 ev_application_open_uri (EvApplication *application,
174 const char *page_label,
177 EvWindow *new_window;
179 g_return_val_if_fail (uri != NULL, FALSE);
181 new_window = ev_application_get_uri_window (application, uri);
182 if (new_window != NULL) {
183 gtk_window_present (GTK_WINDOW (new_window));
188 new_window = ev_application_get_empty_window (application);
190 if (new_window == NULL) {
191 new_window = EV_WINDOW (ev_window_new ());
194 ev_window_open_uri (new_window, uri);
196 gtk_window_present (GTK_WINDOW (new_window));
198 if (page_label != NULL) {
199 ev_window_open_page_label (new_window, page_label);
206 ev_application_open_uri_list (EvApplication *application, GSList *uri_list)
210 for (l = uri_list; l != NULL; l = l->next) {
211 ev_application_open_uri (application, (char *)l->data, NULL, NULL);
216 ev_application_shutdown (EvApplication *application)
218 g_object_unref (application);
223 ev_application_class_init (EvApplicationClass *ev_application_class)
228 ev_application_init (EvApplication *ev_application)