diff options
author | Marco Pesenti Gritti <mpg@redhat.com> | 2005-06-30 08:16:45 (GMT) |
---|---|---|
committer | Marco Pesenti Gritti <marco@src.gnome.org> | 2005-06-30 08:16:45 (GMT) |
commit | 616f5c97013f1344caa6e899de6cc99664faa5e9 (patch) | |
tree | ad6392193de5ac668d0b73d8c54afe4c46edf44d /shell/ev-window.c | |
parent | 574925f7b2618bb12dd6e8d63fcbc08b97c42126 (diff) |
Add an optional dbus interface (--enable-dbus). Rework application code,
2005-06-24 Marco Pesenti Gritti <mpg@redhat.com>
* shell/ev-application-service.xml:
* configure.ac:
* shell/Makefile.am:
* shell/ev-application.c:
* shell/ev-application.h:
* shell/ev-window.c:
* shell/ev-window.h:
* shell/main.c:
Add an optional dbus interface (--enable-dbus).
Rework application code, mainly to be easier to
use "remotely".
Do not open multiple windows with the same document,
spatial evince!
Diffstat (limited to 'shell/ev-window.c')
-rw-r--r-- | shell/ev-window.c | 106 |
1 files changed, 73 insertions, 33 deletions
diff --git a/shell/ev-window.c b/shell/ev-window.c index 836bc91..11ee1ad 100644 --- a/shell/ev-window.c +++ b/shell/ev-window.c @@ -932,42 +932,49 @@ ev_window_open_uri (EvWindow *ev_window, const char *uri) TRUE); } -void -ev_window_open_uri_list (EvWindow *ev_window, GSList *uri_list) +static void +ev_window_cmd_file_open (GtkAction *action, EvWindow *window) { - GSList *list; - gchar *uri; - - g_return_if_fail (uri_list != NULL); - - list = uri_list; - while (list) { + GtkWidget *chooser; + static char *folder = NULL; - uri = (gchar *)list->data; - - if (ev_window_is_empty (EV_WINDOW (ev_window))) { - ev_window_open_uri (ev_window, uri); + chooser = gtk_file_chooser_dialog_new (_("Open document"), + GTK_WINDOW (window), + GTK_FILE_CHOOSER_ACTION_OPEN, + GTK_STOCK_CANCEL, + GTK_RESPONSE_CANCEL, + GTK_STOCK_OPEN, GTK_RESPONSE_OK, + NULL); - gtk_widget_show (GTK_WIDGET (ev_window)); - } else { - EvWindow *new_window; + if (folder) { + gtk_file_chooser_set_current_folder_uri (GTK_FILE_CHOOSER (chooser), + folder); + } - new_window = ev_application_new_window (EV_APP); - ev_window_open_uri (new_window, uri); + ev_document_types_add_filters (chooser); + gtk_file_chooser_set_select_multiple (GTK_FILE_CHOOSER (chooser), TRUE); + gtk_file_chooser_set_local_only (GTK_FILE_CHOOSER (chooser), FALSE); - gtk_widget_show (GTK_WIDGET (new_window)); - } + if (gtk_dialog_run (GTK_DIALOG (chooser)) == GTK_RESPONSE_OK) { + GSList *uris; - g_free (uri); + uris = gtk_file_chooser_get_uris (GTK_FILE_CHOOSER (chooser)); - list = g_slist_next (list); + if (folder != NULL) + g_free (folder); + + folder = gtk_file_chooser_get_current_folder_uri (GTK_FILE_CHOOSER (chooser)); + + ev_application_open_uri_list (EV_APP, uris); + + g_slist_foreach (uris, (GFunc)g_free, NULL); + g_slist_free (uris); + } else { + if (!GTK_WIDGET_VISIBLE (window)) + gtk_widget_destroy (GTK_WIDGET (window)); } -} -static void -ev_window_cmd_file_open (GtkAction *action, EvWindow *ev_window) -{ - ev_application_open (EV_APP, NULL); + gtk_widget_destroy (GTK_WIDGET (chooser)); } static void @@ -976,16 +983,13 @@ ev_window_cmd_recent_file_activate (GtkAction *action, { char *uri; EggRecentItem *item; - GtkWidget *window; item = egg_recent_view_uimanager_get_item (ev_window->priv->recent_view, action); uri = egg_recent_item_get_uri (item); - - window = GTK_WIDGET (ev_application_get_empty_window (EV_APP)); - gtk_widget_show (window); - ev_window_open_uri (EV_WINDOW (window), uri); + + ev_application_open_uri (EV_APP, uri, NULL); g_free (uri); } @@ -1196,6 +1200,12 @@ ev_window_print (EvWindow *window) ev_window_print_range (window, 1, -1); } +const char * +ev_window_get_uri (EvWindow *ev_window) +{ + return ev_window->priv->uri; +} + void ev_window_print_range (EvWindow *ev_window, int first_page, int last_page) { @@ -2423,6 +2433,20 @@ zoom_control_changed_cb (EphyZoomAction *action, } static void +ev_window_finalize (GObject *object) +{ + GList *windows = gtk_window_list_toplevels (); + + if (windows == NULL) { + ev_application_shutdown (EV_APP); + } else { + g_list_free (windows); + } + + G_OBJECT_CLASS (ev_window_parent_class)->finalize (object); +} + +static void ev_window_dispose (GObject *object) { EvWindow *window = EV_WINDOW (object); @@ -2522,6 +2546,7 @@ ev_window_class_init (EvWindowClass *ev_window_class) GtkWidgetClass *widget_class = GTK_WIDGET_CLASS (ev_window_class); g_object_class->dispose = ev_window_dispose; + g_object_class->finalize = ev_window_finalize; widget_class->window_state_event = ev_window_state_event; widget_class->focus_in_event = ev_window_focus_in_event; @@ -2714,7 +2739,7 @@ drag_data_received_cb (GtkWidget *widget, GdkDragContext *context, gnome_vfs_uri_list_free (uri_list); - ev_window_open_uri_list (EV_WINDOW (widget), uris); + ev_application_open_uri_list (EV_APP, uris); g_slist_free (uris); @@ -3213,3 +3238,18 @@ ev_window_init (EvWindow *ev_window) update_action_sensitivity (ev_window); } +GtkWidget * +ev_window_new (void) +{ + GtkWidget *ev_window; + + ev_window = GTK_WIDGET (g_object_new (EV_TYPE_WINDOW, + "type", GTK_WINDOW_TOPLEVEL, + "default-width", 600, + "default-height", 600, + NULL)); + + return ev_window; +} + + |