#include <gtk/gtk.h>
#include "ev-dualscreen.h"
-#include "ev-window.h"
#include "ev-view.h"
-#include "ev-view-presentation.h"
#include "ev-utils.h"
#include "ev-sidebar.h"
#include "ev-sidebar-thumbnails.h"
EvDocumentModel *notes_model;
EvDocument *presentation_document;
EvDocument *notes_document;
-
+ EvMetadata *metadata;
EvViewPresentation *presentation_view;
+
gint moveback_monitor;
+ gint presentation_monitor;
guint page;
};
return work_monitor;
}
+static void
+ev_dscwindow_setup_from_metadata (EvDSCWindow *ev_dscwindow)
+{
+ if (!ev_dscwindow->priv->metadata)
+ return;
+ gint int_value;
+ gdouble double_value;
+ if (ev_metadata_get_double (ev_dscwindow->priv->metadata, "presentation-time", &double_value))
+ gtk_spin_button_set_value (GTK_SPIN_BUTTON (ev_dscwindow->priv->spinner),double_value);
+ if (ev_metadata_get_int (ev_dscwindow->priv->metadata, "presentation-monitor", &int_value)) {
+ ev_dscwindow->priv->presentation_monitor = int_value;
+ } else {
+ ev_dscwindow->priv->presentation_monitor = (ev_dscwindow->priv->moveback_monitor + 1) % 2;
+ }
+}
+
static gboolean
ev_dscwindow_windows_placement (EvDSCWindow *ev_dscwindow)
{
if (num_monitors == 2) {
GdkRectangle coords;
GdkScreen *screen = gtk_window_get_screen (GTK_WINDOW (ev_dscwindow));
- gint presentation_monitor = ev_dscwindow_get_presentation_window_monitor(ev_dscwindow);
- gint control_monitor = presentation_monitor;
+ gint presentation_monitor = ev_dscwindow->priv->presentation_monitor;
+ gint control_monitor = (presentation_monitor + 1) % 2;
gdk_screen_get_monitor_geometry (screen, control_monitor, &coords);
gtk_window_unmaximize (GTK_WINDOW (ev_dscwindow));
gtk_window_move (GTK_WINDOW (ev_dscwindow), coords.x, coords.y);
gtk_window_maximize (GTK_WINDOW (ev_dscwindow));
- presentation_monitor = (control_monitor + 1) % 2;
gdk_screen_get_monitor_geometry (screen, presentation_monitor,&coords);
gtk_window_move (GTK_WINDOW (ev_dscwindow->priv->presentation_window), coords.x, coords.y);
return FALSE;
}
+static void
+ev_dscwindow_switch_monitors (EvDSCWindow *ev_dscwindow)
+{
+ gint num_monitors = get_num_monitors (GTK_WINDOW (ev_dscwindow));
+ if (num_monitors == 2) {
+ ev_dscwindow->priv->presentation_monitor = (ev_dscwindow->priv->presentation_monitor + 1) % 2;
+ if (ev_dscwindow->priv->metadata)
+ ev_metadata_set_int (ev_dscwindow->priv->metadata,
+ "presentation-monitor", ev_dscwindow->priv->presentation_monitor);
+ }
+ ev_dscwindow_windows_placement (ev_dscwindow);
+}
+
static void
ev_dscwindow_sidebar_visibility_cb (GtkWidget *sidebar)
{
{
gint time = gtk_spin_button_get_value_as_int (GTK_SPIN_BUTTON (ev_dscwindow->priv->spinner));
ev_presentation_timer_set_time (EV_PRESENTATION_TIMER (ev_dscwindow->priv->timer),time);
+ if (ev_dscwindow->priv->metadata)
+ ev_metadata_set_double (ev_dscwindow->priv->metadata, "presentation-time", time);
}
static void
ev_document_factory_add_filters (dialog, NULL);
gtk_file_chooser_set_select_multiple (GTK_FILE_CHOOSER (dialog), FALSE);
gtk_file_chooser_set_local_only (GTK_FILE_CHOOSER (dialog), TRUE);
+ char *uri;
+ if (ev_dscwindow->priv->metadata &&
+ ev_metadata_get_string (ev_dscwindow->priv->metadata, "notes-uri", &uri))
+ gtk_file_chooser_set_uri (GTK_FILE_CHOOSER (dialog),uri);
if (gtk_dialog_run (GTK_DIALOG (dialog)) == GTK_RESPONSE_ACCEPT)
{
- char * uri = gtk_file_chooser_get_uri (GTK_FILE_CHOOSER (dialog));
+ uri = gtk_file_chooser_get_uri (GTK_FILE_CHOOSER (dialog));
GError * error = NULL;
ev_view_set_loading (EV_VIEW (ev_dscwindow->priv->notesview), TRUE);
ev_dscwindow->priv->notes_document = ev_document_factory_get_document (uri,
&error);
}
- g_free (uri);
if (error == NULL){
+ if (ev_dscwindow->priv->metadata)
+ ev_metadata_set_string (ev_dscwindow->priv->metadata,
+ "notes-uri", uri);
ev_dscwindow->priv->notes_model = ev_document_model_new ();
ev_document_model_set_document (ev_dscwindow->priv->notes_model,
ev_dscwindow->priv->notes_document);
ev_dscwindow);
}
}
+ g_free (uri);
gtk_widget_destroy (dialog);
return TRUE;
}
void
-ev_dscwindow_set_presentation (EvDSCWindow *ev_dscwindow,
- EvWindow *presentation_window, EvDocument *document, EvViewPresentation *pview)
+ev_dscwindow_set_presentation (EvDSCWindow *ev_dscwindow,
+ EvWindow *presentation_window,
+ EvDocument *document,
+ EvViewPresentation *pview,
+ EvMetadata *metadata)
{
- if (!EV_IS_WINDOW (presentation_window))
+ if (!EV_IS_WINDOW (presentation_window) || !EV_IS_DSCWINDOW (ev_dscwindow) ||
+ !EV_IS_VIEW_PRESENTATION (pview) || !EV_IS_DOCUMENT (document) )
return;
ev_dscwindow->priv->presentation_window = GTK_WIDGET(presentation_window);
ev_dscwindow->priv->presentation_view = EV_VIEW_PRESENTATION(pview);
ev_dscwindow->priv->page = ev_view_presentation_get_current_page (pview);
ev_dscwindow->priv->moveback_monitor = ev_dscwindow_get_presentation_window_monitor (ev_dscwindow);
+ ev_dscwindow->priv->metadata = metadata;
ev_document_model_set_document(ev_dscwindow->priv->model, document);
ev_document_model_set_page(ev_dscwindow->priv->model, ev_dscwindow->priv->page);
while(gtk_events_pending())
gtk_main_iteration();
/* something like http://mail.gnome.org/archives/gtk-list/2008-June/msg00061.html */
+ ev_dscwindow_setup_from_metadata (ev_dscwindow);
ev_dscwindow_windows_placement (ev_dscwindow);
}
gtk_tool_button_set_icon_name (GTK_TOOL_BUTTON (b_switch), "object-flip-horizontal");
gtk_toolbar_insert (GTK_TOOLBAR (toolbar), b_switch, -1);
g_signal_connect_swapped (b_switch, "clicked",
- G_CALLBACK (ev_dscwindow_windows_placement), ev_dscwindow);
+ G_CALLBACK (ev_dscwindow_switch_monitors), ev_dscwindow);
GtkToolItem *b_notes = gtk_tool_button_new_from_stock (GTK_STOCK_OPEN);
gtk_tool_button_set_label (GTK_TOOL_BUTTON(b_notes), _("Load notes..."));