+static void
+drag_data_received_cb (GtkWidget *widget, GdkDragContext *context,
+ gint x, gint y, GtkSelectionData *selection_data,
+ guint info, guint time, gpointer gdata)
+{
+ GList *uri_list = NULL;
+
+ uri_list = gnome_vfs_uri_list_parse ((gchar *) selection_data->data);
+
+ if (uri_list) {
+ ev_window_open_uri_list (EV_WINDOW (widget), uri_list);
+
+ gnome_vfs_uri_list_free (uri_list);
+
+ gtk_drag_finish (context, TRUE, FALSE, time);
+ }
+}
+
+static void
+activate_link_cb (EvPageAction *page_action, EvLink *link, EvWindow *window)
+{
+ g_return_if_fail (EV_IS_WINDOW (window));
+
+ ev_page_cache_set_link (window->priv->page_cache, link);
+ gtk_widget_grab_focus (window->priv->view);
+}
+
+static gboolean
+activate_label_cb (EvPageAction *page_action, char *label, EvWindow *window)
+{
+ g_return_val_if_fail (EV_IS_WINDOW (window), FALSE);
+
+ gtk_widget_grab_focus (window->priv->view);
+
+ return ev_page_cache_set_page_label (window->priv->page_cache, label);
+}
+
+static void
+register_custom_actions (EvWindow *window, GtkActionGroup *group)
+{
+ GtkAction *action;
+
+ action = g_object_new (EV_TYPE_PAGE_ACTION,
+ "name", PAGE_SELECTOR_ACTION,
+ "label", _("Page"),
+ "tooltip", _("Select Page"),
+ "visible_overflown", FALSE,
+ NULL);
+ g_signal_connect (action, "activate_link",
+ G_CALLBACK (activate_link_cb), window);
+ g_signal_connect (action, "activate_label",
+ G_CALLBACK (activate_label_cb), window);
+ gtk_action_group_add_action (group, action);
+ g_object_unref (action);
+
+ action = g_object_new (EPHY_TYPE_ZOOM_ACTION,
+ "name", ZOOM_CONTROL_ACTION,
+ "label", _("Zoom"),
+ "stock_id", GTK_STOCK_ZOOM_IN,
+ "tooltip", _("Adjust the zoom level"),
+ "zoom", 1.0,
+ NULL);
+ g_signal_connect (action, "zoom_to_level",
+ G_CALLBACK (zoom_control_changed_cb), window);
+ gtk_action_group_add_action (group, action);
+ g_object_unref (action);
+}
+
+static void
+set_action_properties (GtkActionGroup *action_group)
+{
+ GtkAction *action;
+
+ action = gtk_action_group_get_action (action_group, "GoPreviousPage");
+ /*translators: this is the label for toolbar button*/
+ g_object_set (action, "short_label", _("Previous"), NULL);
+ g_object_set (action, "is-important", TRUE, NULL);
+
+ action = gtk_action_group_get_action (action_group, "GoNextPage");
+ g_object_set (action, "is-important", TRUE, NULL);
+ /*translators: this is the label for toolbar button*/
+ g_object_set (action, "short_label", _("Next"), NULL);
+
+ action = gtk_action_group_get_action (action_group, "ViewZoomIn");
+ /*translators: this is the label for toolbar button*/
+ g_object_set (action, "short_label", _("Zoom In"), NULL);
+ action = gtk_action_group_get_action (action_group, "ViewZoomIn");
+
+ action = gtk_action_group_get_action (action_group, "ViewZoomOut");
+ /*translators: this is the label for toolbar button*/
+ g_object_set (action, "short_label", _("Zoom Out"), NULL);
+ action = gtk_action_group_get_action (action_group, "ViewZoomIn");
+
+ action = gtk_action_group_get_action (action_group, "ViewBestFit");
+ /*translators: this is the label for toolbar button*/
+ g_object_set (action, "short_label", _("Best Fit"), NULL);
+ action = gtk_action_group_get_action (action_group, "ViewZoomIn");
+
+ action = gtk_action_group_get_action (action_group, "ViewPageWidth");
+ /*translators: this is the label for toolbar button*/
+ g_object_set (action, "short_label", _("Fit Width"), NULL);
+ action = gtk_action_group_get_action (action_group, "ViewZoomIn");
+
+ action = gtk_action_group_get_action (action_group, "LeaveFullscreen");
+ g_object_set (action, "is-important", TRUE, NULL);
+}
+
+static void
+set_chrome_actions (EvWindow *window)
+{
+ EvWindowPrivate *priv = window->priv;
+ GtkActionGroup *action_group = priv->action_group;
+ GtkAction *action;
+
+ action= gtk_action_group_get_action (action_group, "ViewToolbar");
+ g_signal_handlers_block_by_func
+ (action, G_CALLBACK (ev_window_view_toolbar_cb), window);
+ gtk_toggle_action_set_active (GTK_TOGGLE_ACTION (action),
+ (priv->chrome & EV_CHROME_TOOLBAR) != 0);
+ g_signal_handlers_unblock_by_func
+ (action, G_CALLBACK (ev_window_view_toolbar_cb), window);
+
+ action= gtk_action_group_get_action (action_group, "ViewSidebar");
+ g_signal_handlers_block_by_func
+ (action, G_CALLBACK (ev_window_view_sidebar_cb), window);
+ gtk_toggle_action_set_active (GTK_TOGGLE_ACTION (action),
+ (priv->chrome & EV_CHROME_SIDEBAR) != 0);
+ g_signal_handlers_unblock_by_func
+ (action, G_CALLBACK (ev_window_view_sidebar_cb), window);
+
+ action= gtk_action_group_get_action (action_group, "ViewStatusbar");
+ g_signal_handlers_block_by_func
+ (action, G_CALLBACK (ev_window_view_statusbar_cb), window);
+ gtk_toggle_action_set_active (GTK_TOGGLE_ACTION (action),
+ (priv->chrome & EV_CHROME_STATUSBAR) != 0);
+ g_signal_handlers_unblock_by_func
+ (action, G_CALLBACK (ev_window_view_statusbar_cb), window);
+}
+
+static EvChrome
+load_chrome (void)
+{
+ EvChrome chrome = EV_CHROME_NORMAL;
+ GConfClient *client;
+ GConfValue *value;
+
+ client = gconf_client_get_default ();
+
+ value = gconf_client_get (client, GCONF_CHROME_TOOLBAR, NULL);
+ if (value != NULL) {
+ if (value->type == GCONF_VALUE_BOOL && !gconf_value_get_bool (value)) {
+ chrome &= ~EV_CHROME_TOOLBAR;
+ }
+ gconf_value_free (value);
+ }
+
+ value = gconf_client_get (client, GCONF_CHROME_SIDEBAR, NULL);
+ if (value != NULL) {
+ if (value->type == GCONF_VALUE_BOOL && !gconf_value_get_bool (value)) {
+ chrome &= ~EV_CHROME_SIDEBAR;
+ }
+ gconf_value_free (value);
+ }
+
+ value = gconf_client_get (client, GCONF_CHROME_STATUSBAR, NULL);
+ if (value != NULL) {
+ if (value->type == GCONF_VALUE_BOOL && !gconf_value_get_bool (value)) {
+ chrome &= ~EV_CHROME_STATUSBAR;
+ }
+ gconf_value_free (value);
+ }
+
+ g_object_unref (client);
+
+ return chrome;
+}
+
+static void
+sidebar_widget_model_set (EvSidebarLinks *ev_sidebar_links,
+ GParamSpec *pspec,
+ EvWindow *ev_window)
+{
+ GtkTreeModel *model;
+ GtkAction *action;
+
+ g_object_get (G_OBJECT (ev_sidebar_links),
+ "model", &model,
+ NULL);
+
+ action = gtk_action_group_get_action (ev_window->priv->action_group, PAGE_SELECTOR_ACTION);
+ ev_page_action_set_model (EV_PAGE_ACTION (action), model);
+}
+
+
+static void
+set_view_actions_sensitivity (EvWindow *window, gboolean sensitive)
+{
+ if (window->priv->action_group) {
+ set_action_sensitive (window, "PageDown", sensitive);
+ set_action_sensitive (window, "PageUp", sensitive);
+ set_action_sensitive (window, "Space", sensitive);
+ set_action_sensitive (window, "ShiftSpace", sensitive);
+ set_action_sensitive (window, "BackSpace", sensitive);
+ set_action_sensitive (window, "ShiftBackSpace", sensitive);
+ }
+}
+
+static void
+view_actions_focus_in_cb (GtkWidget *widget, GdkEventFocus *event, EvWindow *window)
+{
+ set_view_actions_sensitivity (window, TRUE);
+}
+
+static void
+view_actions_focus_out_cb (GtkWidget *widget, GdkEventFocus *event, EvWindow *window)
+{
+ set_view_actions_sensitivity (window, FALSE);
+}
+
+static void
+enable_view_actions_for_widget (EvWindow *window, GtkWidget *widget)
+{
+ g_signal_connect_object (widget, "focus_in_event",
+ G_CALLBACK (view_actions_focus_in_cb),
+ window, 0);
+ g_signal_connect_object (widget, "focus_out_event",
+ G_CALLBACK (view_actions_focus_out_cb),
+ window, 0);
+}
+