From e817bd447789cd670fb00b6507debfe84f8cf64f Mon Sep 17 00:00:00 2001 From: rootavish Date: Sat, 21 Jun 2014 15:01:33 +0530 Subject: Changed dependecy to webkit-1.0,added web view to window properties Currently the backend/epub/epub-document.c file has some dummy code, such as that for thumbnails, solely to get it to build. Now that we are done with all functions that we would possibly need to handle the backend, I am now working now on displaying the document via a webview, starting with this commit where i add a webview to the EvWindow properties. Similar to this I need to put in custom functions for epub, as rendering is done by the layout engine. I will also need to add some epub specific callback functions to the widgets. --- shell/ev-window.c | 30 ++++++++++++++++++++++++++---- 1 file changed, 26 insertions(+), 4 deletions(-) (limited to 'shell/ev-window.c') diff --git a/shell/ev-window.c b/shell/ev-window.c index 5b046ae7..9219a7cb 100644 --- a/shell/ev-window.c +++ b/shell/ev-window.c @@ -99,6 +99,9 @@ #include "ev-media-player-keys.h" #endif /* ENABLE_DBUS */ +#ifdef ENABLE_EPUB +#include +#endif typedef enum { PAGE_MODE_DOCUMENT, PAGE_MODE_PASSWORD @@ -141,7 +144,9 @@ struct _EvWindowPrivate { GtkWidget *sidebar_attachments; GtkWidget *sidebar_layers; GtkWidget *sidebar_annots; - +#ifdef ENABLE_EPUB + GtkWidget *web_view ; +#endif /* Settings */ GSettings *settings; GSettings *default_settings; @@ -5294,6 +5299,12 @@ ev_window_dispose (GObject *object) priv->view = NULL; } +#ifdef ENABLE_EPUB + if ( priv->web_view ) { + g_object_unref (priv->web_view); + priv->web_view = NULL ; + } +#endif if (priv->password_view) { g_object_unref (priv->password_view); priv->password_view = NULL; @@ -7019,6 +7030,9 @@ ev_window_init (EvWindow *ev_window) gtk_widget_show (ev_window->priv->view_box); ev_window->priv->view = ev_view_new (); +#ifdef ENABLE_EPUB + ev_window->priv->web_view = webkit_web_view_new () ; +#endif ev_view_set_page_cache_size (EV_VIEW (ev_window->priv->view), PAGE_CACHE_SIZE); ev_view_set_model (EV_VIEW (ev_window->priv->view), ev_window->priv->model); @@ -7065,10 +7079,18 @@ ev_window_init (EvWindow *ev_window) /* We own a ref on these widgets, as we can swap them in and out */ g_object_ref (ev_window->priv->view); g_object_ref (ev_window->priv->password_view); - - gtk_container_add (GTK_CONTAINER (ev_window->priv->scrolled_window), +#ifdef ENABLE_EPUB + if (0) + { + gtk_container_add (GTK_CONTAINER (ev_window->priv->scrolled_window), + ev_window->priv->web_view); + } + else +#endif + { + gtk_container_add (GTK_CONTAINER (ev_window->priv->scrolled_window), ev_window->priv->view); - + } /* Connect to model signals */ g_signal_connect_swapped (ev_window->priv->model, "page-changed", -- cgit v1.2.1 From 5028995e3725c264b2487a1101c22e941b04c8fd Mon Sep 17 00:00:00 2001 From: rootavish Date: Mon, 23 Jun 2014 23:42:11 +0530 Subject: Functions for document info and EvPage,other changes Summary: I added functions in the backend to get document info. Added a member to evdocument to deal with web documents(ePub) on the frontend. Added a webview to the window, that shall replace the Atril view. Due to removing the view from the main Atril window, I have given rise to various GTK-critical errors in response to signals, will be sure to suppress these in the next commit. Worked towards overall blending in of ePub documents. --- shell/ev-window.c | 67 +++++++++++++++++++++++++++++++++++-------------------- 1 file changed, 43 insertions(+), 24 deletions(-) (limited to 'shell/ev-window.c') diff --git a/shell/ev-window.c b/shell/ev-window.c index 9219a7cb..a423da98 100644 --- a/shell/ev-window.c +++ b/shell/ev-window.c @@ -1369,8 +1369,8 @@ ev_window_setup_document (EvWindow *ev_window) ev_window->priv->setup_document_idle = 0; ev_window_refresh_window_thumbnail (ev_window); - - ev_window_set_page_mode (ev_window, PAGE_MODE_DOCUMENT); + if ( document->iswebdocument == FALSE ) + ev_window_set_page_mode (ev_window, PAGE_MODE_DOCUMENT); ev_window_title_set_document (ev_window->priv->title, document); ev_window_title_set_uri (ev_window->priv->title, ev_window->priv->uri); @@ -1405,12 +1405,15 @@ ev_window_setup_document (EvWindow *ev_window) info = ev_document_get_info (document); update_document_mode (ev_window, info->mode); - - if (EV_WINDOW_IS_PRESENTATION (ev_window)) + /*FIXME*/ + if (EV_WINDOW_IS_PRESENTATION (ev_window) && document->iswebdocument == FALSE) gtk_widget_grab_focus (ev_window->priv->presentation_view); - else - gtk_widget_grab_focus (ev_window->priv->view); - + else { + if ( gtk_widget_get_parent(ev_window->priv->view) != NULL ) + gtk_widget_grab_focus (ev_window->priv->view); + else + gtk_widget_grab_focus (ev_window->priv->web_view); + } return FALSE; } @@ -1431,15 +1434,28 @@ ev_window_set_document (EvWindow *ev_window, EvDocument *document) if (ev_document_get_n_pages (document) <= 0) { ev_window_warning_message (ev_window, "%s", _("The document contains no pages")); - } else if (!ev_document_check_dimensions (document)) { + } else if (!ev_document_check_dimensions (document) && document->iswebdocument == FALSE) { ev_window_warning_message (ev_window, "%s", _("The document contains only empty pages")); } +#ifdef ENABLE_EPUB + else if (document->iswebdocument == TRUE){ - if (EV_WINDOW_IS_PRESENTATION (ev_window)) { + /*We have encountered a web document, replace the atril view with a web view.*/ + gtk_container_remove (GTK_CONTAINER(ev_window->priv->scrolled_window),ev_window->priv->view); + gtk_container_add (GTK_CONTAINER (ev_window->priv->scrolled_window), + ev_window->priv->web_view); + gtk_widget_show(ev_window->priv->web_view); + } +#endif + if (EV_WINDOW_IS_PRESENTATION (ev_window) && document->iswebdocument == FALSE) { gtk_widget_destroy (ev_window->priv->presentation_view); ev_window->priv->presentation_view = NULL; ev_window_run_presentation (ev_window); + } else if ( EV_WINDOW_IS_PRESENTATION (ev_window) && document->iswebdocument == TRUE ) + { + ev_window_warning_message (ev_window, "%s", + _("Presentation mode is currently not supported for Web documents.")); } if (ev_window->priv->setup_document_idle > 0) @@ -1539,7 +1555,7 @@ ev_window_load_job_cb (EvJob *job, ev_view_set_loading (EV_VIEW (ev_window->priv->view), FALSE); /* Success! */ - if (!ev_job_is_failed (job)) { + if (!ev_job_is_failed (job)) { ev_document_model_set_document (ev_window->priv->model, document); #ifdef ENABLE_DBUS @@ -5295,13 +5311,24 @@ ev_window_dispose (GObject *object) } if (priv->view) { - g_object_unref (priv->view); + if ( gtk_widget_get_parent (priv->view) == NULL ) + { + g_object_ref_sink (priv->view); + } + else + { + g_object_unref (priv->view); + } priv->view = NULL; } #ifdef ENABLE_EPUB if ( priv->web_view ) { - g_object_unref (priv->web_view); + if (gtk_widget_get_parent(priv->web_view) == NULL ) { + g_object_ref_sink (priv->web_view); + }else { + g_object_unref (priv->web_view); + } priv->web_view = NULL ; } #endif @@ -7079,18 +7106,10 @@ ev_window_init (EvWindow *ev_window) /* We own a ref on these widgets, as we can swap them in and out */ g_object_ref (ev_window->priv->view); g_object_ref (ev_window->priv->password_view); -#ifdef ENABLE_EPUB - if (0) - { - gtk_container_add (GTK_CONTAINER (ev_window->priv->scrolled_window), - ev_window->priv->web_view); - } - else -#endif - { - gtk_container_add (GTK_CONTAINER (ev_window->priv->scrolled_window), - ev_window->priv->view); - } + + gtk_container_add (GTK_CONTAINER (ev_window->priv->scrolled_window), + ev_window->priv->view); + /* Connect to model signals */ g_signal_connect_swapped (ev_window->priv->model, "page-changed", -- cgit v1.2.1 From e10bf9631652b8533b18a14285db89bd14b4c42e Mon Sep 17 00:00:00 2001 From: rootavish Date: Tue, 1 Jul 2014 20:29:05 +0530 Subject: More changes to accomodate webview - Modified configure.ac to use both webkit2 and webkit1 based on gtk version - Modified Automake file in help/reference/shell/Makefile.am to compile with gtk-doc - Modified ev-document-model to support epub-documents. - Modified ev-window for epub documents. - Modified jobs so epub pages are not rendered. - Modified ev-document, although I'm not sure if this is necessary. Still need to figure out where the web view load uri has to be called to actually load pages, from there the puzzle would be much simpler. Hope to get this done in the week, and pick up the pace now that only six weeks of coding remain before final evaluation. --- shell/ev-window.c | 71 ++++++++++++++++++++++++++++++++++++++++++------------- 1 file changed, 54 insertions(+), 17 deletions(-) (limited to 'shell/ev-window.c') diff --git a/shell/ev-window.c b/shell/ev-window.c index a423da98..8b32ce97 100644 --- a/shell/ev-window.c +++ b/shell/ev-window.c @@ -100,7 +100,11 @@ #endif /* ENABLE_DBUS */ #ifdef ENABLE_EPUB -#include + #if GTK_CHECK_VERSION(3, 0, 0) + #include + #else + #include + #endif #endif typedef enum { PAGE_MODE_DOCUMENT, @@ -144,7 +148,9 @@ struct _EvWindowPrivate { GtkWidget *sidebar_attachments; GtkWidget *sidebar_layers; GtkWidget *sidebar_annots; + #ifdef ENABLE_EPUB + /*For web documents.(epub)*/ GtkWidget *web_view ; #endif /* Settings */ @@ -1367,10 +1373,11 @@ ev_window_setup_document (EvWindow *ev_window) GtkAction *action; ev_window->priv->setup_document_idle = 0; - - ev_window_refresh_window_thumbnail (ev_window); - if ( document->iswebdocument == FALSE ) - ev_window_set_page_mode (ev_window, PAGE_MODE_DOCUMENT); + if ( document->iswebdocument == FALSE ) { + ev_window_refresh_window_thumbnail (ev_window); + } + ev_window_set_page_mode (ev_window, PAGE_MODE_DOCUMENT); + ev_window_title_set_document (ev_window->priv->title, document); ev_window_title_set_uri (ev_window->priv->title, ev_window->priv->uri); @@ -1411,7 +1418,7 @@ ev_window_setup_document (EvWindow *ev_window) else { if ( gtk_widget_get_parent(ev_window->priv->view) != NULL ) gtk_widget_grab_focus (ev_window->priv->view); - else + else if ( document->iswebdocument == TRUE ) gtk_widget_grab_focus (ev_window->priv->web_view); } return FALSE; @@ -1439,13 +1446,17 @@ ev_window_set_document (EvWindow *ev_window, EvDocument *document) _("The document contains only empty pages")); } #ifdef ENABLE_EPUB - else if (document->iswebdocument == TRUE){ - - /*We have encountered a web document, replace the atril view with a web view.*/ - gtk_container_remove (GTK_CONTAINER(ev_window->priv->scrolled_window),ev_window->priv->view); + GtkWidget *parent= gtk_widget_get_parent(ev_window->priv->web_view); + if (document->iswebdocument == TRUE && + parent == NULL ) + { + /*We have encountered a web document, replace the atril view with a web view, if the web view is not already loaded.*/ + gtk_container_remove (GTK_CONTAINER(ev_window->priv->scrolled_window), + ev_window->priv->view); gtk_container_add (GTK_CONTAINER (ev_window->priv->scrolled_window), ev_window->priv->web_view); gtk_widget_show(ev_window->priv->web_view); + g_object_ref_sink (ev_window->priv->view); } #endif if (EV_WINDOW_IS_PRESENTATION (ev_window) && document->iswebdocument == FALSE) { @@ -1552,8 +1563,9 @@ ev_window_load_job_cb (EvJob *job, g_assert (job_load->uri); - ev_view_set_loading (EV_VIEW (ev_window->priv->view), FALSE); - + if (document->iswebdocument == FALSE) { + ev_view_set_loading (EV_VIEW (ev_window->priv->view), FALSE); + } /* Success! */ if (!ev_job_is_failed (job)) { ev_document_model_set_document (ev_window->priv->model, document); @@ -4114,7 +4126,12 @@ ev_window_set_page_mode (EvWindow *window, switch (page_mode) { case PAGE_MODE_DOCUMENT: - child = window->priv->view; + if ( window->priv->document && window->priv->document->iswebdocument == FALSE ) { + child = window->priv->view; + } + else { + child=window->priv->web_view; + } break; case PAGE_MODE_PASSWORD: child = window->priv->password_view; @@ -4347,7 +4364,12 @@ ev_window_cmd_view_expand_window (GtkAction *action, EvWindow *ev_window) static void ev_window_cmd_view_autoscroll (GtkAction *action, EvWindow *ev_window) { - ev_view_autoscroll_start (EV_VIEW (ev_window->priv->view)); + EvDocument* document = ev_window->priv->document; + if (document->iswebdocument == TRUE ) { + return ; + }else { + ev_view_autoscroll_start (EV_VIEW (ev_window->priv->view)); + } } #define EV_HELP "help:atril" @@ -4600,6 +4622,7 @@ ev_window_cmd_help_about (GtkAction *action, EvWindow *ev_window) "Perberos ", "Stefano Karapetsas ", "Steve Zesch ", + "Avishkar Gupta ", NULL }; @@ -5314,6 +5337,7 @@ ev_window_dispose (GObject *object) if ( gtk_widget_get_parent (priv->view) == NULL ) { g_object_ref_sink (priv->view); + g_object_unref(priv->view); } else { @@ -5326,6 +5350,7 @@ ev_window_dispose (GObject *object) if ( priv->web_view ) { if (gtk_widget_get_parent(priv->web_view) == NULL ) { g_object_ref_sink (priv->web_view); + g_object_unref (priv->web_view); }else { g_object_unref (priv->web_view); } @@ -5454,13 +5479,21 @@ ev_window_key_press_event (GtkWidget *widget, * It's needed to be able to type in * annot popups windows */ - if (priv->view) { + GtkWidget* parent = gtk_widget_get_parent(priv->view); + if (priv->view && parent != NULL) { g_object_ref (priv->view); if (gtk_widget_is_sensitive (priv->view)) handled = gtk_widget_event (priv->view, (GdkEvent*) event); g_object_unref (priv->view); } - + + else if ( priv->web_view && (parent=gtk_widget_get_parent(priv->web_view) ) != NULL) { + g_object_ref (priv->web_view); + if (gtk_widget_is_sensitive (priv->web_view)) + handled = gtk_widget_event (priv->web_view, (GdkEvent*) event); + g_object_unref (priv->web_view); + } + if (!handled && !EV_WINDOW_IS_PRESENTATION (ev_window)) { guint modifier = event->state & gtk_accelerator_get_default_mod_mask (); @@ -7056,10 +7089,14 @@ ev_window_init (EvWindow *ev_window) ev_window->priv->view_box); gtk_widget_show (ev_window->priv->view_box); - ev_window->priv->view = ev_view_new (); + #ifdef ENABLE_EPUB ev_window->priv->web_view = webkit_web_view_new () ; + + /*Signals for the web view*/ + g_signal_connect_swapped(ev_window,"destroy",G_CALLBACK(gtk_widget_destroy),ev_window->priv->web_view); #endif + ev_window->priv->view = ev_view_new (); ev_view_set_page_cache_size (EV_VIEW (ev_window->priv->view), PAGE_CACHE_SIZE); ev_view_set_model (EV_VIEW (ev_window->priv->view), ev_window->priv->model); -- cgit v1.2.1 From 6f41c201422edd6b4dbf9f9f41b5dc29530d21c6 Mon Sep 17 00:00:00 2001 From: rootavish Date: Thu, 3 Jul 2014 20:36:55 +0530 Subject: Thumbnails for Epub Documents This commit is mainly so that any further changes can be reverted to this state. The thumbnails are of very large sizes so I need to fix that, and in general implement thumbnails. Also I am facing an X-windows error, which I can't seem to fix. I feel it may be a problem with webkit-1.0, so will try the build with gtk3 and webkit2. If so is the case, I'll have to work something out for that. Should be able to push a commit soon where the document can actually be read, soon as I figure out the perfect place for the call to load uri. Other than that more function were modified in accordance with webkit. The error I get when opening the file from the filechooser still persists, I need to fix that too. --- shell/ev-window.c | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) (limited to 'shell/ev-window.c') diff --git a/shell/ev-window.c b/shell/ev-window.c index 8b32ce97..1c80bd52 100644 --- a/shell/ev-window.c +++ b/shell/ev-window.c @@ -150,7 +150,7 @@ struct _EvWindowPrivate { GtkWidget *sidebar_annots; #ifdef ENABLE_EPUB - /*For web documents.(epub)*/ + /* For web documents.(epub) */ GtkWidget *web_view ; #endif /* Settings */ @@ -1312,6 +1312,9 @@ static void ev_window_set_icon_from_thumbnail (EvJobThumbnail *job, EvWindow *ev_window) { + if (ev_window->priv->document->iswebdocument == TRUE) { + return; + } if (job->thumbnail) { if (ev_document_model_get_inverted_colors (ev_window->priv->model)) ev_document_misc_invert_pixbuf (job->thumbnail); @@ -1563,9 +1566,7 @@ ev_window_load_job_cb (EvJob *job, g_assert (job_load->uri); - if (document->iswebdocument == FALSE) { - ev_view_set_loading (EV_VIEW (ev_window->priv->view), FALSE); - } + ev_view_set_loading (EV_VIEW (ev_window->priv->view), FALSE); /* Success! */ if (!ev_job_is_failed (job)) { ev_document_model_set_document (ev_window->priv->model, document); @@ -4289,7 +4290,7 @@ static void ev_window_cmd_go_previous_page (GtkAction *action, EvWindow *ev_window) { g_return_if_fail (EV_IS_WINDOW (ev_window)); - +/* webkit_web_view_load_uri(WEBKIT_WEB_VIEW(ev_window->web_view),"");*/ ev_view_previous_page (EV_VIEW (ev_window->priv->view)); } -- cgit v1.2.1 From df43418e209ae9c98844185f789c63769ae9b3a2 Mon Sep 17 00:00:00 2001 From: rootavish Date: Mon, 7 Jul 2014 18:36:55 +0530 Subject: Refactored code, created a new EvWebView type Earlier my approach was to replace the atril view directly with a webview. However as it turned out it was extremely difficult to accomplish much tasks without the document-model. So I created an Extension of the WebKitWebView class, EvWebView so that now we can manipulate the webview as desired. Also having a separate file really helps in terms of clarity. Please note that there are many empty functions and TODO tags right now, I shall aim to fill these up once the display part is done, probably in this week. I also added some code on the backend to draw thumbnails when with GTK+-3.0, although I have never tested a GTK+-3.0 build.With GTK+-2.0 you won't get any build errors, however epub backend won't work right now. That being said, this commit is mostly because there was a lot of code that was lying in the local repository, and it was best to back it up as a failsafe. I modified ev-window to accomodate this new data structure, and having an equivalent ev_web_view function for every ev_view function, I can achieve most functionality by filling those functions with Webkit modules. Other than that on the backend Other than that there were some minor changes to the code. Although I did the above, currently I am not able to instantiate the EvWebView because of some class and object type definition errors, due to which I can't display the document. --- shell/ev-window.c | 194 +++++++++++++++++++++++++++++++++--------------------- 1 file changed, 119 insertions(+), 75 deletions(-) (limited to 'shell/ev-window.c') diff --git a/shell/ev-window.c b/shell/ev-window.c index 1c80bd52..4f2c1ac2 100644 --- a/shell/ev-window.c +++ b/shell/ev-window.c @@ -87,6 +87,7 @@ #include "ev-utils.h" #include "ev-keyring.h" #include "ev-view.h" +#include "ev-web-view.h" #include "ev-view-presentation.h" #include "ev-view-type-builtins.h" #include "ev-window.h" @@ -99,13 +100,6 @@ #include "ev-media-player-keys.h" #endif /* ENABLE_DBUS */ -#ifdef ENABLE_EPUB - #if GTK_CHECK_VERSION(3, 0, 0) - #include - #else - #include - #endif -#endif typedef enum { PAGE_MODE_DOCUMENT, PAGE_MODE_PASSWORD @@ -148,10 +142,8 @@ struct _EvWindowPrivate { GtkWidget *sidebar_attachments; GtkWidget *sidebar_layers; GtkWidget *sidebar_annots; - #ifdef ENABLE_EPUB - /* For web documents.(epub) */ - GtkWidget *web_view ; + GtkWidget *webview; #endif /* Settings */ GSettings *settings; @@ -491,7 +483,7 @@ ev_window_update_actions (EvWindow *ev_window) n_pages = ev_document_get_n_pages (ev_window->priv->document); has_pages = n_pages > 0; } - + can_find_in_page = (ev_window->priv->find_job && ev_job_find_has_results (EV_JOB_FIND (ev_window->priv->find_job))); @@ -507,15 +499,16 @@ ev_window_update_actions (EvWindow *ev_window) presentation_mode = EV_WINDOW_IS_PRESENTATION (ev_window); - ev_window_set_action_sensitive (ev_window, "ViewZoomIn", - has_pages && - ev_view_can_zoom_in (view) && - !presentation_mode); - ev_window_set_action_sensitive (ev_window, "ViewZoomOut", - has_pages && - ev_view_can_zoom_out (view) && - !presentation_mode); - + if (ev_window->priv->document && ev_window->priv->document->iswebdocument == FALSE ) { + ev_window_set_action_sensitive (ev_window, "ViewZoomIn", + has_pages && + ev_view_can_zoom_in (view) && + !presentation_mode); + ev_window_set_action_sensitive (ev_window, "ViewZoomOut", + has_pages && + ev_view_can_zoom_out (view) && + !presentation_mode); + } /* Go menu */ if (has_pages) { ev_window_set_action_sensitive (ev_window, "GoPreviousPage", page > 0); @@ -1312,9 +1305,6 @@ static void ev_window_set_icon_from_thumbnail (EvJobThumbnail *job, EvWindow *ev_window) { - if (ev_window->priv->document->iswebdocument == TRUE) { - return; - } if (job->thumbnail) { if (ev_document_model_get_inverted_colors (ev_window->priv->model)) ev_document_misc_invert_pixbuf (job->thumbnail); @@ -1421,8 +1411,8 @@ ev_window_setup_document (EvWindow *ev_window) else { if ( gtk_widget_get_parent(ev_window->priv->view) != NULL ) gtk_widget_grab_focus (ev_window->priv->view); - else if ( document->iswebdocument == TRUE ) - gtk_widget_grab_focus (ev_window->priv->web_view); + else + gtk_widget_grab_focus (ev_window->priv->webview); } return FALSE; } @@ -1449,17 +1439,17 @@ ev_window_set_document (EvWindow *ev_window, EvDocument *document) _("The document contains only empty pages")); } #ifdef ENABLE_EPUB - GtkWidget *parent= gtk_widget_get_parent(ev_window->priv->web_view); + GtkWidget *parent= gtk_widget_get_parent(ev_window->priv->webview); if (document->iswebdocument == TRUE && parent == NULL ) { /*We have encountered a web document, replace the atril view with a web view, if the web view is not already loaded.*/ gtk_container_remove (GTK_CONTAINER(ev_window->priv->scrolled_window), ev_window->priv->view); + g_object_unref(ev_window->priv->view); gtk_container_add (GTK_CONTAINER (ev_window->priv->scrolled_window), - ev_window->priv->web_view); - gtk_widget_show(ev_window->priv->web_view); - g_object_ref_sink (ev_window->priv->view); + ev_window->priv->webview); + gtk_widget_show(ev_window->priv->webview); } #endif if (EV_WINDOW_IS_PRESENTATION (ev_window) && document->iswebdocument == FALSE) { @@ -1537,6 +1527,9 @@ static void ev_window_handle_link (EvWindow *ev_window, EvLinkDest *dest) { + if (ev_window->priv->document->iswebdocument == FALSE ) { + return; + } if (dest) { EvLink *link; EvLinkAction *link_action; @@ -1830,6 +1823,8 @@ static void ev_window_load_remote_failed (EvWindow *ev_window, GError *error) { + if ( !ev_window->priv->view ) return; + ev_view_set_loading (EV_VIEW (ev_window->priv->view), FALSE); ev_window->priv->in_reload = FALSE; ev_window_error_message (ev_window, error, @@ -2109,7 +2104,7 @@ ev_window_open_document (EvWindow *ev_window, setup_document_from_metadata (ev_window); setup_view_from_metadata (ev_window); - if (dest) { + if (dest && document->iswebdocument == FALSE) { EvLink *link; EvLinkAction *link_action; @@ -2303,13 +2298,10 @@ ev_window_reload_document (EvWindow *ev_window, EvLinkDest *dest) { gint page; - - ev_window_clear_reload_job (ev_window); ev_window->priv->in_reload = TRUE; page = ev_document_model_get_page (ev_window->priv->model); - if (ev_window->priv->dest) g_object_unref (ev_window->priv->dest); ev_window->priv->dest = dest ? g_object_ref (dest) : NULL; @@ -3633,12 +3625,18 @@ ev_window_cmd_focus_page_selector (GtkAction *act, EvWindow *window) static void ev_window_cmd_scroll_forward (GtkAction *action, EvWindow *window) { + /*If the webview is occupying the window*/ + if ( window->priv->document->iswebdocument == FALSE ) return ; + ev_view_scroll (EV_VIEW (window->priv->view), GTK_SCROLL_PAGE_FORWARD, FALSE); } static void ev_window_cmd_scroll_backward (GtkAction *action, EvWindow *window) { + /*If the webview is occupying the window*/ + if ( window->priv->document->iswebdocument == FALSE ) return ; + ev_view_scroll (EV_VIEW (window->priv->view), GTK_SCROLL_PAGE_BACKWARD, FALSE); } @@ -3701,7 +3699,7 @@ ev_window_cmd_edit_select_all (GtkAction *action, EvWindow *ev_window) */ if (ev_window->priv->chrome & EV_CHROME_FINDBAR) { egg_find_bar_grab_focus(ev_window->priv->find_bar); - } else { + } else if (ev_window->priv->document->iswebdocument == FALSE ) { ev_view_select_all (EV_VIEW (ev_window->priv->view)); } } @@ -3729,7 +3727,11 @@ ev_window_cmd_edit_find_next (GtkAction *action, EvWindow *ev_window) update_chrome_flag (ev_window, EV_CHROME_FINDBAR, TRUE); update_chrome_visibility (ev_window); gtk_widget_grab_focus (ev_window->priv->find_bar); - ev_view_find_next (EV_VIEW (ev_window->priv->view)); + if (ev_window->priv->document->iswebdocument == FALSE) { + ev_view_find_next (EV_VIEW (ev_window->priv->view)); + } else { + ev_web_view_find_next(EV_WEB_VIEW(ev_window->priv->webview)); + } } static void @@ -3740,14 +3742,19 @@ ev_window_cmd_edit_find_previous (GtkAction *action, EvWindow *ev_window) update_chrome_flag (ev_window, EV_CHROME_FINDBAR, TRUE); update_chrome_visibility (ev_window); gtk_widget_grab_focus (ev_window->priv->find_bar); - ev_view_find_previous (EV_VIEW (ev_window->priv->view)); + if (ev_window->priv->document->iswebdocument == FALSE) { + ev_view_find_previous (EV_VIEW (ev_window->priv->view)); + } else { + ev_web_view_find_previous(EV_WEB_VIEW(ev_window->priv->webview)); + } } static void ev_window_cmd_edit_copy (GtkAction *action, EvWindow *ev_window) { g_return_if_fail (EV_IS_WINDOW (ev_window)); - + if ( ev_window->priv->document->iswebdocument == TRUE ) return; + ev_view_copy (EV_VIEW (ev_window->priv->view)); } @@ -3860,8 +3867,12 @@ ev_window_run_fullscreen (EvWindow *window) if (fullscreen_window) gtk_window_fullscreen (GTK_WINDOW (window)); - gtk_widget_grab_focus (window->priv->view); - + if (window->priv->view) { + gtk_widget_grab_focus (window->priv->view); + } + else { + gtk_widget_grab_focus(window->priv->webview); + } if (window->priv->metadata && !ev_window_is_empty (window)) ev_metadata_set_boolean (window->priv->metadata, "fullscreen", TRUE); } @@ -3989,9 +4000,13 @@ ev_window_stop_presentation (EvWindow *window, update_chrome_visibility (window); if (unfullscreen_window) gtk_window_unfullscreen (GTK_WINDOW (window)); - - gtk_widget_grab_focus (window->priv->view); - + + if (window->priv->view) { + gtk_widget_grab_focus (window->priv->view); + } else { + gtk_widget_grab_focus (window->priv->webview); + } + ev_application_screensaver_enable (EV_APP); if (window->priv->metadata && !ev_window_is_empty (window)) @@ -4131,7 +4146,7 @@ ev_window_set_page_mode (EvWindow *window, child = window->priv->view; } else { - child=window->priv->web_view; + child=window->priv->webview; } break; case PAGE_MODE_PASSWORD: @@ -4272,7 +4287,7 @@ static void ev_window_cmd_view_zoom_in (GtkAction *action, EvWindow *ev_window) { g_return_if_fail (EV_IS_WINDOW (ev_window)); - + if ( ev_window->priv->document->iswebdocument == TRUE ) return ; ev_document_model_set_sizing_mode (ev_window->priv->model, EV_SIZING_FREE); ev_view_zoom_in (EV_VIEW (ev_window->priv->view)); } @@ -4281,7 +4296,8 @@ static void ev_window_cmd_view_zoom_out (GtkAction *action, EvWindow *ev_window) { g_return_if_fail (EV_IS_WINDOW (ev_window)); - + if ( ev_window->priv->document->iswebdocument == TRUE ) return ; + ev_document_model_set_sizing_mode (ev_window->priv->model, EV_SIZING_FREE); ev_view_zoom_out (EV_VIEW (ev_window->priv->view)); } @@ -4290,8 +4306,11 @@ static void ev_window_cmd_go_previous_page (GtkAction *action, EvWindow *ev_window) { g_return_if_fail (EV_IS_WINDOW (ev_window)); -/* webkit_web_view_load_uri(WEBKIT_WEB_VIEW(ev_window->web_view),"");*/ - ev_view_previous_page (EV_VIEW (ev_window->priv->view)); + if ( ev_window->priv->document->iswebdocument == TRUE ) { + ev_web_view_previous_page(EV_WEB_VIEW(ev_window->priv->webview)); + } else { + ev_view_previous_page (EV_VIEW (ev_window->priv->view)); + } } static void @@ -4299,7 +4318,11 @@ ev_window_cmd_go_next_page (GtkAction *action, EvWindow *ev_window) { g_return_if_fail (EV_IS_WINDOW (ev_window)); - ev_view_next_page (EV_VIEW (ev_window->priv->view)); + if ( ev_window->priv->document->iswebdocument == TRUE ) { + ev_web_view_next_page(EV_WEB_VIEW(ev_window->priv->webview)); + } else { + ev_view_next_page (EV_VIEW (ev_window->priv->view)); + } } static void @@ -4407,7 +4430,7 @@ static void ev_window_cmd_escape (GtkAction *action, EvWindow *window) { GtkWidget *widget; - + if ( window->priv->document->iswebdocument == FALSE ) return ; ev_view_autoscroll_stop (EV_VIEW (window->priv->view)); widget = gtk_window_get_focus (GTK_WINDOW (window)); @@ -4746,6 +4769,8 @@ view_menu_link_popup (EvWindow *ev_window, gboolean show_external = FALSE; gboolean show_internal = FALSE; GtkAction *action; + + if ( ev_window->priv->document->iswebdocument == TRUE ) return ; if (ev_window->priv->link) g_object_unref (ev_window->priv->link); @@ -4798,7 +4823,8 @@ view_menu_image_popup (EvWindow *ev_window, { GtkAction *action; gboolean show_image = FALSE; - + + if (ev_window->priv->document->iswebdocument == TRUE ) return ; if (ev_window->priv->image) g_object_unref (ev_window->priv->image); @@ -4824,7 +4850,7 @@ view_menu_annot_popup (EvWindow *ev_window, { GtkAction *action; gboolean show_annot = FALSE; - + if (ev_window->priv->document->iswebdocument == TRUE ) return ; if (ev_window->priv->annot) g_object_unref (ev_window->priv->annot); ev_window->priv->annot = (annot) ? g_object_ref (annot) : NULL; @@ -4973,7 +4999,7 @@ ev_window_find_job_updated_cb (EvJobFind *job, EvWindow *ev_window) { ev_window_update_actions (ev_window); - + if (ev_window->priv->document->iswebdocument == TRUE ) return ; ev_view_find_changed (EV_VIEW (ev_window->priv->view), ev_job_find_get_results (job), page); @@ -5002,6 +5028,7 @@ static void find_bar_previous_cb (EggFindBar *find_bar, EvWindow *ev_window) { + if (ev_window->priv->document->iswebdocument == TRUE ) return ; ev_view_find_previous (EV_VIEW (ev_window->priv->view)); } @@ -5009,6 +5036,7 @@ static void find_bar_next_cb (EggFindBar *find_bar, EvWindow *ev_window) { + if (ev_window->priv->document->iswebdocument == TRUE ) return ; ev_view_find_next (EV_VIEW (ev_window->priv->view)); } @@ -5016,6 +5044,7 @@ static void find_bar_close_cb (EggFindBar *find_bar, EvWindow *ev_window) { + if (ev_window->priv->document->iswebdocument == TRUE ) return ; ev_view_find_cancel (EV_VIEW (ev_window->priv->view)); ev_window_clear_find_job (ev_window); update_chrome_flag (ev_window, EV_CHROME_FINDBAR, FALSE); @@ -5032,7 +5061,7 @@ find_bar_search_changed_cb (EggFindBar *find_bar, if (!ev_window->priv->document || !EV_IS_DOCUMENT_FIND (ev_window->priv->document)) return; - + if (ev_window->priv->document->iswebdocument == TRUE ) return ; /* Either the string or case sensitivity could have changed. */ case_sensitive = egg_find_bar_get_case_sensitive (find_bar); search_string = egg_find_bar_get_search_string (find_bar); @@ -5068,7 +5097,7 @@ find_bar_visibility_changed_cb (EggFindBar *find_bar, EvWindow *ev_window) { gboolean visible; - + if (ev_window->priv->document->iswebdocument == TRUE ) return ; visible = gtk_widget_get_visible (GTK_WIDGET (find_bar)); if (ev_window->priv->document && @@ -5089,6 +5118,7 @@ find_bar_scroll (EggFindBar *find_bar, GtkScrollType scroll, EvWindow *ev_window) { + if (ev_window->priv->document->iswebdocument == TRUE ) return ; ev_view_scroll (EV_VIEW (ev_window->priv->view), scroll, FALSE); } @@ -5348,14 +5378,14 @@ ev_window_dispose (GObject *object) } #ifdef ENABLE_EPUB - if ( priv->web_view ) { - if (gtk_widget_get_parent(priv->web_view) == NULL ) { - g_object_ref_sink (priv->web_view); - g_object_unref (priv->web_view); + if ( priv->webview ) { + if (gtk_widget_get_parent(priv->webview) == NULL ) { + g_object_ref_sink (priv->webview); + g_object_unref (priv->webview); }else { - g_object_unref (priv->web_view); + g_object_unref (priv->webview); } - priv->web_view = NULL ; + priv->webview = NULL ; } #endif if (priv->password_view) { @@ -5488,11 +5518,11 @@ ev_window_key_press_event (GtkWidget *widget, g_object_unref (priv->view); } - else if ( priv->web_view && (parent=gtk_widget_get_parent(priv->web_view) ) != NULL) { - g_object_ref (priv->web_view); - if (gtk_widget_is_sensitive (priv->web_view)) - handled = gtk_widget_event (priv->web_view, (GdkEvent*) event); - g_object_unref (priv->web_view); + else if ( priv->webview && (parent=gtk_widget_get_parent(priv->webview) ) != NULL) { + g_object_ref (priv->webview); + if (gtk_widget_is_sensitive (priv->webview)) + handled = gtk_widget_event (priv->webview, (GdkEvent*) event); + g_object_unref (priv->webview); } if (!handled && !EV_WINDOW_IS_PRESENTATION (ev_window)) { @@ -5755,7 +5785,10 @@ static const GtkActionEntry attachment_popup_entries [] = { static void sidebar_links_link_activated_cb (EvSidebarLinks *sidebar_links, EvLink *link, EvWindow *window) { - ev_view_handle_link (EV_VIEW (window->priv->view), link); + if (window->priv->document->iswebdocument == FALSE ) { + ev_view_handle_link (EV_VIEW (window->priv->view), link); + } + ev_web_view_handle_link(EV_WEB_VIEW(window->priv->webview), link); } static void @@ -5768,6 +5801,7 @@ activate_link_cb (EvPageAction *page_action, EvLink *link, EvWindow *window) static void navigation_action_activate_link_cb (EvNavigationAction *action, EvLink *link, EvWindow *window) { + if (window->priv->document->iswebdocument == FALSE ) return; ev_view_handle_link (EV_VIEW (window->priv->view), link); gtk_widget_grab_focus (window->priv->view); @@ -5777,7 +5811,13 @@ static void sidebar_layers_visibility_changed (EvSidebarLayers *layers, EvWindow *window) { - ev_view_reload (EV_VIEW (window->priv->view)); + if (window->priv->document->iswebdocument == FALSE ) { + ev_view_reload (EV_VIEW (window->priv->view)); + } + else + { + ev_web_view_reload(EV_WEB_VIEW(window->priv->webview)); + } } static void @@ -5785,6 +5825,7 @@ sidebar_annots_annot_activated_cb (EvSidebarAnnotations *sidebar_annots, EvMapping *annot_mapping, EvWindow *window) { + if (window->priv->document->iswebdocument == FALSE ) return; ev_view_focus_annotation (EV_VIEW (window->priv->view), annot_mapping); } @@ -5793,6 +5834,7 @@ sidebar_annots_begin_annot_add (EvSidebarAnnotations *sidebar_annots, EvAnnotationType annot_type, EvWindow *window) { + if (window->priv->document->iswebdocument == FALSE ) return; ev_view_begin_add_annotation (EV_VIEW (window->priv->view), annot_type); } @@ -5809,6 +5851,7 @@ static void sidebar_annots_annot_add_cancelled (EvSidebarAnnotations *sidebar_annots, EvWindow *window) { + if (window->priv->document->iswebdocument == FALSE ) return; ev_view_cancel_add_annotation (EV_VIEW (window->priv->view)); } @@ -6212,6 +6255,7 @@ view_external_link_cb (EvView *view, EvLinkAction *action, EvWindow *window) static void ev_view_popup_cmd_open_link (GtkAction *action, EvWindow *window) { + if (window->priv->document->iswebdocument == FALSE ) return; ev_view_handle_link (EV_VIEW (window->priv->view), window->priv->link); } @@ -6236,7 +6280,7 @@ static void ev_view_popup_cmd_copy_link_address (GtkAction *action, EvWindow *window) { EvLinkAction *ev_action; - + if (window->priv->document->iswebdocument == FALSE ) return; ev_action = ev_link_get_action (window->priv->link); if (!ev_action) return; @@ -6411,6 +6455,8 @@ static void ev_view_popup_cmd_annot_properties (GtkAction *action, EvWindow *window) { + if (window->priv->document->iswebdocument == FALSE ) return; + const gchar *author; GdkColor color; gdouble opacity; @@ -6796,8 +6842,9 @@ method_call_cb (GDBusConnection *connection, GDBusMethodInvocation *invocation, gpointer user_data) { - EvWindow *window = EV_WINDOW (user_data); - + EvWindow *window = EV_WINDOW (user_data); + if (window->priv->document->iswebdocument == FALSE ) return; + if (g_strcmp0 (method_name, "SyncView") != 0) return; @@ -7090,14 +7137,11 @@ ev_window_init (EvWindow *ev_window) ev_window->priv->view_box); gtk_widget_show (ev_window->priv->view_box); + ev_window->priv->view = ev_view_new (); #ifdef ENABLE_EPUB - ev_window->priv->web_view = webkit_web_view_new () ; - - /*Signals for the web view*/ - g_signal_connect_swapped(ev_window,"destroy",G_CALLBACK(gtk_widget_destroy),ev_window->priv->web_view); + ev_window->priv->webview = ev_web_view_new(); #endif - ev_window->priv->view = ev_view_new (); ev_view_set_page_cache_size (EV_VIEW (ev_window->priv->view), PAGE_CACHE_SIZE); ev_view_set_model (EV_VIEW (ev_window->priv->view), ev_window->priv->model); -- cgit v1.2.1 From 423af80ad421a8a19e1c4be0c6851dff845a0f6c Mon Sep 17 00:00:00 2001 From: rootavish Date: Thu, 10 Jul 2014 13:50:37 +0530 Subject: Files for EvWebView, thumbnails possible with GTK+-2.0 My last commit was supposed to have ev-web-view.c and ev-web-view.h however due to some reason I missed them last time, so here they are now. i am able to achieve thumbnails for my epub however these are of absurdly large size. Still struggling to get the webview done due to thread problems that I am encountering. --- shell/ev-window.c | 39 ++++++++++++++++++++++++--------------- 1 file changed, 24 insertions(+), 15 deletions(-) (limited to 'shell/ev-window.c') diff --git a/shell/ev-window.c b/shell/ev-window.c index 4f2c1ac2..900d9155 100644 --- a/shell/ev-window.c +++ b/shell/ev-window.c @@ -471,7 +471,9 @@ ev_window_setup_action_sensitivity (EvWindow *ev_window) static void ev_window_update_actions (EvWindow *ev_window) { - EvView *view = EV_VIEW (ev_window->priv->view); + EvWebView *webview = NULL; + EvView *view = NULL; + int n_pages = 0, page = -1; gboolean has_pages = FALSE; gboolean presentation_mode; @@ -483,13 +485,20 @@ ev_window_update_actions (EvWindow *ev_window) n_pages = ev_document_get_n_pages (ev_window->priv->document); has_pages = n_pages > 0; } + + if (ev_window->priv->document && ev_window->priv->document->iswebdocument == TRUE ) { + webview = EV_WEB_VIEW(ev_window->priv->webview); + } else { + view = EV_VIEW (ev_window->priv->view); + } can_find_in_page = (ev_window->priv->find_job && ev_job_find_has_results (EV_JOB_FIND (ev_window->priv->find_job))); - - ev_window_set_action_sensitive (ev_window, "EditCopy", - has_pages && - ev_view_get_has_selection (view)); + if (view) { + ev_window_set_action_sensitive (ev_window, "EditCopy", + has_pages && + ev_view_get_has_selection (view)); + } ev_window_set_action_sensitive (ev_window, "EditFindNext", has_pages && can_find_in_page); ev_window_set_action_sensitive (ev_window, "EditFindPrevious", @@ -1409,7 +1418,7 @@ ev_window_setup_document (EvWindow *ev_window) if (EV_WINDOW_IS_PRESENTATION (ev_window) && document->iswebdocument == FALSE) gtk_widget_grab_focus (ev_window->priv->presentation_view); else { - if ( gtk_widget_get_parent(ev_window->priv->view) != NULL ) + if ( document->iswebdocument == FALSE ) gtk_widget_grab_focus (ev_window->priv->view); else gtk_widget_grab_focus (ev_window->priv->webview); @@ -5510,19 +5519,19 @@ ev_window_key_press_event (GtkWidget *widget, * It's needed to be able to type in * annot popups windows */ - GtkWidget* parent = gtk_widget_get_parent(priv->view); - if (priv->view && parent != NULL) { - g_object_ref (priv->view); - if (gtk_widget_is_sensitive (priv->view)) - handled = gtk_widget_event (priv->view, (GdkEvent*) event); - g_object_unref (priv->view); - } - - else if ( priv->webview && (parent=gtk_widget_get_parent(priv->webview) ) != NULL) { + if (priv->webview && priv->document && priv->document->iswebdocument == TRUE) { g_object_ref (priv->webview); if (gtk_widget_is_sensitive (priv->webview)) handled = gtk_widget_event (priv->webview, (GdkEvent*) event); g_object_unref (priv->webview); + + } + + else if ( priv->view) { + g_object_ref (priv->view); + if (gtk_widget_is_sensitive (priv->view)) + handled = gtk_widget_event (priv->view, (GdkEvent*) event); + g_object_unref (priv->view); } if (!handled && !EV_WINDOW_IS_PRESENTATION (ev_window)) { -- cgit v1.2.1 From 9ba6ad9e22e51fb865df24327280c096cbef7f47 Mon Sep 17 00:00:00 2001 From: rootavish Date: Fri, 11 Jul 2014 11:07:23 +0530 Subject: Fixing the PDF annotations Last time I screwed up annotations in PDF, due to a small error, here's the fix. --- shell/ev-window.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) (limited to 'shell/ev-window.c') diff --git a/shell/ev-window.c b/shell/ev-window.c index 900d9155..7c5011dc 100644 --- a/shell/ev-window.c +++ b/shell/ev-window.c @@ -5834,7 +5834,7 @@ sidebar_annots_annot_activated_cb (EvSidebarAnnotations *sidebar_annots, EvMapping *annot_mapping, EvWindow *window) { - if (window->priv->document->iswebdocument == FALSE ) return; + if (window->priv->document->iswebdocument == TRUE ) return; ev_view_focus_annotation (EV_VIEW (window->priv->view), annot_mapping); } @@ -5843,7 +5843,7 @@ sidebar_annots_begin_annot_add (EvSidebarAnnotations *sidebar_annots, EvAnnotationType annot_type, EvWindow *window) { - if (window->priv->document->iswebdocument == FALSE ) return; + if (window->priv->document->iswebdocument == TRUE ) return; ev_view_begin_add_annotation (EV_VIEW (window->priv->view), annot_type); } @@ -5860,7 +5860,7 @@ static void sidebar_annots_annot_add_cancelled (EvSidebarAnnotations *sidebar_annots, EvWindow *window) { - if (window->priv->document->iswebdocument == FALSE ) return; + if (window->priv->document->iswebdocument == TRUE ) return; ev_view_cancel_add_annotation (EV_VIEW (window->priv->view)); } -- cgit v1.2.1 From 46fce038996fa84784df775d0b2e941228388b66 Mon Sep 17 00:00:00 2001 From: rootavish Date: Sat, 19 Jul 2014 10:47:43 +0530 Subject: Thumbnails for all documents Now other problems with webkit. After much fidgeting I was able to resolve the previous problems of threads. However, now there is a different webkit error. --- shell/ev-window.c | 3 --- 1 file changed, 3 deletions(-) (limited to 'shell/ev-window.c') diff --git a/shell/ev-window.c b/shell/ev-window.c index 7c5011dc..5c18b28c 100644 --- a/shell/ev-window.c +++ b/shell/ev-window.c @@ -2089,9 +2089,6 @@ ev_window_open_document (EvWindow *ev_window, EvWindowRunMode mode, const gchar *search_string) { - if (document == ev_window->priv->document) - return; - ev_window_close_dialogs (ev_window); ev_window_clear_load_job (ev_window); ev_window_clear_local_uri (ev_window); -- cgit v1.2.1 From 4a3ac19d1365cb87a31eecea4759484673fad667 Mon Sep 17 00:00:00 2001 From: rootavish Date: Sun, 20 Jul 2014 16:08:07 +0530 Subject: Active properties dialog, other actions Properties dialog for epub documents, will some basic properties. Also set toolbar and menu sensitivity for the actions available in epub, will add more(find) once I write the module. Also inverted colors needs to be done with CSS or the like. --- shell/ev-window.c | 25 +++++++++++++++++-------- 1 file changed, 17 insertions(+), 8 deletions(-) (limited to 'shell/ev-window.c') diff --git a/shell/ev-window.c b/shell/ev-window.c index 5c18b28c..3fcf3786 100644 --- a/shell/ev-window.c +++ b/shell/ev-window.c @@ -408,7 +408,9 @@ ev_window_setup_action_sensitivity (EvWindow *ev_window) if (has_document && EV_IS_SELECTION (document)) { can_get_text = TRUE; } - + else if (has_document && document->iswebdocument) { + can_get_text = TRUE; + } if (has_pages && EV_IS_DOCUMENT_FIND (document)) { can_find = TRUE; } @@ -447,18 +449,20 @@ ev_window_setup_action_sensitivity (EvWindow *ev_window) ev_window_set_action_sensitive (ev_window, "EditSelectAll", has_pages && can_get_text); ev_window_set_action_sensitive (ev_window, "EditFind", can_find); ev_window_set_action_sensitive (ev_window, "Slash", can_find); - ev_window_set_action_sensitive (ev_window, "EditRotateLeft", has_pages); - ev_window_set_action_sensitive (ev_window, "EditRotateRight", has_pages); + ev_window_set_action_sensitive (ev_window, "EditRotateLeft", has_pages && !(document->iswebdocument)); + ev_window_set_action_sensitive (ev_window, "EditRotateRight", has_pages && !(document->iswebdocument)); /* View menu */ - ev_window_set_action_sensitive (ev_window, "ViewContinuous", has_pages); - ev_window_set_action_sensitive (ev_window, "ViewDual", has_pages); - ev_window_set_action_sensitive (ev_window, "ViewBestFit", has_pages); + /*If it has pages it is a document, so our check for a webdocument lead to a crash. We need to switch these off since more than one + *webview is hard to manage */ + ev_window_set_action_sensitive (ev_window, "ViewContinuous", has_pages && !(document->iswebdocument)); + ev_window_set_action_sensitive (ev_window, "ViewDual", has_pages && !(document->iswebdocument)); + ev_window_set_action_sensitive (ev_window, "ViewBestFit", has_pages && !(document->iswebdocument)); ev_window_set_action_sensitive (ev_window, "ViewPageWidth", has_pages); ev_window_set_action_sensitive (ev_window, "ViewReload", has_pages); - ev_window_set_action_sensitive (ev_window, "ViewAutoscroll", has_pages); + ev_window_set_action_sensitive (ev_window, "ViewAutoscroll", has_pages && !(document->iswebdocument)); ev_window_set_action_sensitive (ev_window, "ViewInvertedColors", has_pages); - ev_window_set_action_sensitive (ev_window, "ViewExpandWindow", has_pages); + ev_window_set_action_sensitive (ev_window, "ViewExpandWindow", has_pages && !(document->iswebdocument)); /* Toolbar-specific actions: */ ev_window_set_action_sensitive (ev_window, PAGE_SELECTOR_ACTION, has_pages); @@ -499,6 +503,11 @@ ev_window_update_actions (EvWindow *ev_window) has_pages && ev_view_get_has_selection (view)); } + else if(webview) { + ev_window_set_action_sensitive (ev_window, "EditCopy", + has_pages && + ev_web_view_get_has_selection (webview)); + } ev_window_set_action_sensitive (ev_window, "EditFindNext", has_pages && can_find_in_page); ev_window_set_action_sensitive (ev_window, "EditFindPrevious", -- cgit v1.2.1 From c8b63e55987f0ee6d4067a7309ef2fac8119b0cc Mon Sep 17 00:00:00 2001 From: rootavish Date: Sun, 20 Jul 2014 23:57:08 +0530 Subject: Moving everything related to webkit to main thread jobs Including creation of windows, webviews etc., still get a crash. The one page epub works fine with the thumbnails though. Also fixing some calls which cause gtk-critical errors when I try to close the window. --- shell/ev-window.c | 26 +++++++++----------------- 1 file changed, 9 insertions(+), 17 deletions(-) (limited to 'shell/ev-window.c') diff --git a/shell/ev-window.c b/shell/ev-window.c index 3fcf3786..d73cfba6 100644 --- a/shell/ev-window.c +++ b/shell/ev-window.c @@ -453,8 +453,9 @@ ev_window_setup_action_sensitivity (EvWindow *ev_window) ev_window_set_action_sensitive (ev_window, "EditRotateRight", has_pages && !(document->iswebdocument)); /* View menu */ - /*If it has pages it is a document, so our check for a webdocument lead to a crash. We need to switch these off since more than one - *webview is hard to manage */ + /*If it has pages it is a document, so our check for a webdocument won't lead to a crash. We need to switch these off since more than one + *webview is hard to manage, and would lead to unexpected behaviour in case the number of webviews gets too large. + */ ev_window_set_action_sensitive (ev_window, "ViewContinuous", has_pages && !(document->iswebdocument)); ev_window_set_action_sensitive (ev_window, "ViewDual", has_pages && !(document->iswebdocument)); ev_window_set_action_sensitive (ev_window, "ViewBestFit", has_pages && !(document->iswebdocument)); @@ -1469,6 +1470,10 @@ ev_window_set_document (EvWindow *ev_window, EvDocument *document) ev_window->priv->webview); gtk_widget_show(ev_window->priv->webview); } + else { + /*Since the document is not a webdocument might as well get rid of the webview now*/ + g_object_unref(ev_window->priv->webview); + } #endif if (EV_WINDOW_IS_PRESENTATION (ev_window) && document->iswebdocument == FALSE) { gtk_widget_destroy (ev_window->priv->presentation_view); @@ -5380,26 +5385,13 @@ ev_window_dispose (GObject *object) } if (priv->view) { - if ( gtk_widget_get_parent (priv->view) == NULL ) - { - g_object_ref_sink (priv->view); - g_object_unref(priv->view); - } - else - { - g_object_unref (priv->view); - } + g_object_unref (priv->view); priv->view = NULL; } #ifdef ENABLE_EPUB if ( priv->webview ) { - if (gtk_widget_get_parent(priv->webview) == NULL ) { - g_object_ref_sink (priv->webview); - g_object_unref (priv->webview); - }else { - g_object_unref (priv->webview); - } + g_object_unref (priv->webview); priv->webview = NULL ; } #endif -- cgit v1.2.1 From b1bed03353e98b968e3f371446b02837f9e3baf7 Mon Sep 17 00:00:00 2001 From: rootavish Date: Mon, 21 Jul 2014 19:22:22 +0530 Subject: Program no longer segfaults, but does not give thumbnails The loading icons for all thumbnails are displayed, but the program does not segfault. Also realized that the absurd resizing of the window was due to the ephy-zoom action on the webview window. Will fix that in the next commit. Will also think of some workaround for screenshots. For now committed this code so that this can act as a clean slate if I screw up somewhere. --- shell/ev-window.c | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) (limited to 'shell/ev-window.c') diff --git a/shell/ev-window.c b/shell/ev-window.c index d73cfba6..277488c6 100644 --- a/shell/ev-window.c +++ b/shell/ev-window.c @@ -682,8 +682,10 @@ update_sizing_buttons (EvWindow *window) ephy_zoom_action_set_zoom_level (EPHY_ZOOM_ACTION (action), EPHY_ZOOM_BEST_FIT); } else if (page_width) { - ephy_zoom_action_set_zoom_level (EPHY_ZOOM_ACTION (action), - EPHY_ZOOM_FIT_WIDTH); + if (!window->priv->document || (window->priv->document && !window->priv->document->iswebdocument)) { + ephy_zoom_action_set_zoom_level (EPHY_ZOOM_ACTION (action), + EPHY_ZOOM_FIT_WIDTH); + } } } -- cgit v1.2.1 From b219a4a96ed7f38bf3de46bff790b139955bd927 Mon Sep 17 00:00:00 2001 From: rootavish Date: Wed, 23 Jul 2014 00:18:47 +0530 Subject: Cleaned some code, added select-all functionality Select all functionality to select all content from the webview. Cleaned ev-jobs.c, it had a lot of unused code. --- shell/ev-window.c | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) (limited to 'shell/ev-window.c') diff --git a/shell/ev-window.c b/shell/ev-window.c index 277488c6..9232cbb6 100644 --- a/shell/ev-window.c +++ b/shell/ev-window.c @@ -453,13 +453,13 @@ ev_window_setup_action_sensitivity (EvWindow *ev_window) ev_window_set_action_sensitive (ev_window, "EditRotateRight", has_pages && !(document->iswebdocument)); /* View menu */ - /*If it has pages it is a document, so our check for a webdocument won't lead to a crash. We need to switch these off since more than one + /*If it has pages it is a document, so our check for a webdocument won't lead to a crash. We need to switch these view modes off since more than one *webview is hard to manage, and would lead to unexpected behaviour in case the number of webviews gets too large. */ ev_window_set_action_sensitive (ev_window, "ViewContinuous", has_pages && !(document->iswebdocument)); ev_window_set_action_sensitive (ev_window, "ViewDual", has_pages && !(document->iswebdocument)); ev_window_set_action_sensitive (ev_window, "ViewBestFit", has_pages && !(document->iswebdocument)); - ev_window_set_action_sensitive (ev_window, "ViewPageWidth", has_pages); + ev_window_set_action_sensitive (ev_window, "ViewPageWidth", has_pages && !(document->iswebdocument)); ev_window_set_action_sensitive (ev_window, "ViewReload", has_pages); ev_window_set_action_sensitive (ev_window, "ViewAutoscroll", has_pages && !(document->iswebdocument)); ev_window_set_action_sensitive (ev_window, "ViewInvertedColors", has_pages); @@ -929,6 +929,13 @@ view_selection_changed_cb (EvView *view, ev_view_get_has_selection (view)); } +static void +web_view_selection_changed_cb(EvWebView *webview, + EvWindow *window) +{ + +} + static void ev_window_page_changed_cb (EvWindow *ev_window, gint old_page, @@ -3723,6 +3730,8 @@ ev_window_cmd_edit_select_all (GtkAction *action, EvWindow *ev_window) egg_find_bar_grab_focus(ev_window->priv->find_bar); } else if (ev_window->priv->document->iswebdocument == FALSE ) { ev_view_select_all (EV_VIEW (ev_window->priv->view)); + } else { + ev_web_view_select_all(EV_WEB_VIEW(ev_window->priv->webview)); } } -- cgit v1.2.1 From df1fce63dca7bd7ac85c720a357adba0f1b7108a Mon Sep 17 00:00:00 2001 From: rootavish Date: Wed, 23 Jul 2014 22:19:20 +0530 Subject: Added Zoom control, Window thubnail Added zoom-in and zoom out capabilities, also re-enabled window thumbnail which I had disabled previously when the thumbnails were not implemented. Still trying to get the document to display, need to make the right changes, also trying to stop the window from entering presentation view, but that does happen and needs to be fixed. --- shell/ev-window.c | 44 +++++++++++++++++++++++++++++++++----------- 1 file changed, 33 insertions(+), 11 deletions(-) (limited to 'shell/ev-window.c') diff --git a/shell/ev-window.c b/shell/ev-window.c index 9232cbb6..9b9a417d 100644 --- a/shell/ev-window.c +++ b/shell/ev-window.c @@ -933,7 +933,8 @@ static void web_view_selection_changed_cb(EvWebView *webview, EvWindow *window) { - + ev_window_set_action_sensitive (window,"EditCopy", + ev_web_view_get_has_selection(webview)); } static void @@ -1018,6 +1019,13 @@ static void update_document_mode (EvWindow *window, EvDocumentMode mode) { if (mode == EV_DOCUMENT_MODE_PRESENTATION) { + if (window->priv->document) { + if (window->priv->document->iswebdocument) { + ev_window_warning_message(window,_("Cannot enter presentation mode with ePub documents\ + use fullscreen mode instead.")); + return; + } + } ev_window_run_presentation (window); } else if (mode == EV_DOCUMENT_MODE_FULL_SCREEN) { @@ -1309,7 +1317,12 @@ setup_view_from_metadata (EvWindow *window) /* Presentation */ if (ev_metadata_get_boolean (window->priv->metadata, "presentation", &presentation)) { if (presentation) { - ev_window_run_presentation (window); + if (window->priv->document->iswebdocument == TRUE ) { + return; + } + else { + ev_window_run_presentation (window); + } } } } @@ -1394,9 +1407,8 @@ ev_window_setup_document (EvWindow *ev_window) GtkAction *action; ev_window->priv->setup_document_idle = 0; - if ( document->iswebdocument == FALSE ) { - ev_window_refresh_window_thumbnail (ev_window); - } + ev_window_refresh_window_thumbnail (ev_window); + ev_window_set_page_mode (ev_window, PAGE_MODE_DOCUMENT); ev_window_title_set_document (ev_window->priv->title, document); @@ -1491,7 +1503,7 @@ ev_window_set_document (EvWindow *ev_window, EvDocument *document) } else if ( EV_WINDOW_IS_PRESENTATION (ev_window) && document->iswebdocument == TRUE ) { ev_window_warning_message (ev_window, "%s", - _("Presentation mode is currently not supported for Web documents.")); + _("Presentation mode is not supported for ePub documents.")); } if (ev_window->priv->setup_document_idle > 0) @@ -4318,19 +4330,29 @@ static void ev_window_cmd_view_zoom_in (GtkAction *action, EvWindow *ev_window) { g_return_if_fail (EV_IS_WINDOW (ev_window)); - if ( ev_window->priv->document->iswebdocument == TRUE ) return ; + ev_document_model_set_sizing_mode (ev_window->priv->model, EV_SIZING_FREE); - ev_view_zoom_in (EV_VIEW (ev_window->priv->view)); + if (ev_window->priv->document->iswebdocument) { + ev_web_view_zoom_in(EV_WEB_VIEW(ev_window->priv->webview)); + } + else { + ev_view_zoom_in (EV_VIEW (ev_window->priv->view)); + } } static void ev_window_cmd_view_zoom_out (GtkAction *action, EvWindow *ev_window) { g_return_if_fail (EV_IS_WINDOW (ev_window)); - if ( ev_window->priv->document->iswebdocument == TRUE ) return ; - + ev_document_model_set_sizing_mode (ev_window->priv->model, EV_SIZING_FREE); - ev_view_zoom_out (EV_VIEW (ev_window->priv->view)); + + if ( ev_window->priv->document->iswebdocument) { + ev_web_view_zoom_out(EV_WEB_VIEW(ev_window->priv->webview)); + } + else { + ev_view_zoom_out (EV_VIEW (ev_window->priv->view)); + } } static void -- cgit v1.2.1 From d4ea4f2056a2863c7a37ad83e73bb63301de5022 Mon Sep 17 00:00:00 2001 From: rootavish Date: Fri, 25 Jul 2014 18:32:19 +0530 Subject: Fixing dispose functions, display in webview Fixed the backend epub_document_finalize function which was caused caja to crash when you opened the document properties dialog. Fixed the ev_window_dispose and the webview's dispose and finalise functions, now the window closes without any glib-critical errors. Also now it is possible to read epub documents, once you have changed pages at least once, I still have to figure out where I call load_uri at document load. --- shell/ev-window.c | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) (limited to 'shell/ev-window.c') diff --git a/shell/ev-window.c b/shell/ev-window.c index 9b9a417d..89b64307 100644 --- a/shell/ev-window.c +++ b/shell/ev-window.c @@ -1487,6 +1487,7 @@ ev_window_set_document (EvWindow *ev_window, EvDocument *document) gtk_container_remove (GTK_CONTAINER(ev_window->priv->scrolled_window), ev_window->priv->view); g_object_unref(ev_window->priv->view); + ev_window->priv->view = NULL; gtk_container_add (GTK_CONTAINER (ev_window->priv->scrolled_window), ev_window->priv->webview); gtk_widget_show(ev_window->priv->webview); @@ -5422,12 +5423,12 @@ ev_window_dispose (GObject *object) priv->view = NULL; } -#ifdef ENABLE_EPUB +/*#ifdef ENABLE_EPUB if ( priv->webview ) { - g_object_unref (priv->webview); + g_object_unref (EV_WEB_VIEW(priv->webview)); priv->webview = NULL ; } -#endif +#endif*/ if (priv->password_view) { g_object_unref (priv->password_view); priv->password_view = NULL; @@ -7181,6 +7182,7 @@ ev_window_init (EvWindow *ev_window) #ifdef ENABLE_EPUB ev_window->priv->webview = ev_web_view_new(); + ev_web_view_set_model(EV_WEB_VIEW(ev_window->priv->webview),ev_window->priv->model); #endif ev_view_set_page_cache_size (EV_VIEW (ev_window->priv->view), PAGE_CACHE_SIZE); ev_view_set_model (EV_VIEW (ev_window->priv->view), ev_window->priv->model); -- cgit v1.2.1 From 57a3618d9254364157a12df39caebbf9247d5aca Mon Sep 17 00:00:00 2001 From: rootavish Date: Sat, 26 Jul 2014 12:26:32 +0530 Subject: Reading epub documents possible Alebit with a bit of bugs as far as navigation etc. are possible, we can read an epub document in Atril. The document will be displayed with thumbnails, and all keyboard shortcuts work. Menu options, the ones that I have currently added do work. I Will now move on to features such as inverted colors, document index, etc, most of which should be simple to add. Also made changes so that the presentation view does not fire up while displaying an epub document. Also added the feature to copy text to clipboard using the Atril menu. --- shell/ev-window.c | 22 ++++++++++++++++------ 1 file changed, 16 insertions(+), 6 deletions(-) (limited to 'shell/ev-window.c') diff --git a/shell/ev-window.c b/shell/ev-window.c index 89b64307..a59658f3 100644 --- a/shell/ev-window.c +++ b/shell/ev-window.c @@ -1021,8 +1021,7 @@ update_document_mode (EvWindow *window, EvDocumentMode mode) if (mode == EV_DOCUMENT_MODE_PRESENTATION) { if (window->priv->document) { if (window->priv->document->iswebdocument) { - ev_window_warning_message(window,_("Cannot enter presentation mode with ePub documents\ - use fullscreen mode instead.")); + ev_window_warning_message(window,_("Cannot enter presentation mode with ePub documents use fullscreen mode instead.")); return; } } @@ -3797,9 +3796,12 @@ static void ev_window_cmd_edit_copy (GtkAction *action, EvWindow *ev_window) { g_return_if_fail (EV_IS_WINDOW (ev_window)); - if ( ev_window->priv->document->iswebdocument == TRUE ) return; - ev_view_copy (EV_VIEW (ev_window->priv->view)); + if (ev_window->priv->document->iswebdocument) { + ev_web_view_copy(EV_WEB_VIEW(ev_window->priv->webview)); + } else { + ev_view_copy (EV_VIEW (ev_window->priv->view)); + } } static void @@ -3986,7 +3988,11 @@ ev_window_run_presentation (EvWindow *window) if (EV_WINDOW_IS_PRESENTATION (window)) return; - + + if (window->priv->document->iswebdocument) { + ev_window_warning_message(window,_("Presentation mode is not supported for ePub documents")); + return; + } if (ev_document_model_get_fullscreen (window->priv->model)) { ev_window_stop_fullscreen (window, FALSE); fullscreen_window = FALSE; @@ -7180,9 +7186,13 @@ ev_window_init (EvWindow *ev_window) ev_window->priv->view = ev_view_new (); -#ifdef ENABLE_EPUB +#ifdef ENABLE_EPUB /*The webview, we won't add it now but it will replace the atril-view if a web(epub) document is encountered.*/ ev_window->priv->webview = ev_web_view_new(); ev_web_view_set_model(EV_WEB_VIEW(ev_window->priv->webview),ev_window->priv->model); + + g_signal_connect_object (ev_window->priv->webview,"selection-changed", + G_CALLBACK(web_view_selection_changed_cb), + ev_window, 0); #endif ev_view_set_page_cache_size (EV_VIEW (ev_window->priv->view), PAGE_CACHE_SIZE); ev_view_set_model (EV_VIEW (ev_window->priv->view), ev_window->priv->model); -- cgit v1.2.1 From 60b002aab6c2ee610377d46208ee16dda1e94fc3 Mon Sep 17 00:00:00 2001 From: rootavish Date: Tue, 29 Jul 2014 19:57:02 +0530 Subject: Searching single pages in epub ..and other fixing other bugs that were present once the webview was added, like the escape key command etc. Will look to refactor the thumbnails into ev-web-view.c. In the next commit I'll extend this search over the entire document.Also will incorporate document index(table of contents). --- shell/ev-window.c | 86 ++++++++++++++++++++++++++++++++++++++----------------- 1 file changed, 59 insertions(+), 27 deletions(-) (limited to 'shell/ev-window.c') diff --git a/shell/ev-window.c b/shell/ev-window.c index a59658f3..937b40d3 100644 --- a/shell/ev-window.c +++ b/shell/ev-window.c @@ -1493,6 +1493,7 @@ ev_window_set_document (EvWindow *ev_window, EvDocument *document) } else { /*Since the document is not a webdocument might as well get rid of the webview now*/ + g_object_ref_sink(ev_window->priv->webview); g_object_unref(ev_window->priv->webview); } #endif @@ -4490,14 +4491,19 @@ static void ev_window_cmd_escape (GtkAction *action, EvWindow *window) { GtkWidget *widget; - if ( window->priv->document->iswebdocument == FALSE ) return ; - ev_view_autoscroll_stop (EV_VIEW (window->priv->view)); + + if (!window->priv->document->iswebdocument && window->priv->view) + ev_view_autoscroll_stop (EV_VIEW (window->priv->view)); widget = gtk_window_get_focus (GTK_WINDOW (window)); if (widget && gtk_widget_get_ancestor (widget, EGG_TYPE_FIND_BAR)) { update_chrome_flag (window, EV_CHROME_FINDBAR, FALSE); update_chrome_visibility (window); - gtk_widget_grab_focus (window->priv->view); + + if (window->priv->view) + gtk_widget_grab_focus (window->priv->view); + else + gtk_widget_grab_focus (window->priv->webview); } else { gboolean fullscreen; @@ -4509,7 +4515,10 @@ ev_window_cmd_escape (GtkAction *action, EvWindow *window) ev_window_stop_presentation (window, TRUE); gtk_widget_grab_focus (window->priv->view); } else { - gtk_widget_grab_focus (window->priv->view); + if (window->priv->view) + gtk_widget_grab_focus (window->priv->view); + else + gtk_widget_grab_focus (window->priv->webview); } if (fullscreen && EV_WINDOW_IS_PRESENTATION (window)) @@ -5059,10 +5068,14 @@ ev_window_find_job_updated_cb (EvJobFind *job, EvWindow *ev_window) { ev_window_update_actions (ev_window); - if (ev_window->priv->document->iswebdocument == TRUE ) return ; - ev_view_find_changed (EV_VIEW (ev_window->priv->view), - ev_job_find_get_results (job), - page); + if (ev_window->priv->document->iswebdocument == TRUE ) { + ev_web_view_find_changed(EV_WEB_VIEW(ev_window->priv->webview), page,job); + } + else { + ev_view_find_changed (EV_VIEW (ev_window->priv->view), + ev_job_find_get_results (job), + page); + } ev_window_update_find_status_message (ev_window); } @@ -5088,24 +5101,34 @@ static void find_bar_previous_cb (EggFindBar *find_bar, EvWindow *ev_window) { - if (ev_window->priv->document->iswebdocument == TRUE ) return ; - ev_view_find_previous (EV_VIEW (ev_window->priv->view)); + if (ev_window->priv->document->iswebdocument == TRUE ) { + ev_web_view_find_previous(EV_WEB_VIEW(ev_window->priv->webview)); + }else { + ev_view_find_previous (EV_VIEW (ev_window->priv->view)); + } } static void find_bar_next_cb (EggFindBar *find_bar, EvWindow *ev_window) { - if (ev_window->priv->document->iswebdocument == TRUE ) return ; - ev_view_find_next (EV_VIEW (ev_window->priv->view)); + if (ev_window->priv->document->iswebdocument == TRUE ) { + ev_web_view_find_next(EV_WEB_VIEW(ev_window->priv->webview)); + } else { + ev_view_find_next (EV_VIEW (ev_window->priv->view)); + } } static void find_bar_close_cb (EggFindBar *find_bar, EvWindow *ev_window) { - if (ev_window->priv->document->iswebdocument == TRUE ) return ; - ev_view_find_cancel (EV_VIEW (ev_window->priv->view)); + if (ev_window->priv->document->iswebdocument == TRUE ) { + ev_web_view_find_cancel(EV_WEB_VIEW(ev_window->priv->webview)); + } + else { + ev_view_find_cancel (EV_VIEW (ev_window->priv->view)); + } ev_window_clear_find_job (ev_window); update_chrome_flag (ev_window, EV_CHROME_FINDBAR, FALSE); update_chrome_visibility (ev_window); @@ -5121,13 +5144,16 @@ find_bar_search_changed_cb (EggFindBar *find_bar, if (!ev_window->priv->document || !EV_IS_DOCUMENT_FIND (ev_window->priv->document)) return; - if (ev_window->priv->document->iswebdocument == TRUE ) return ; + /* Either the string or case sensitivity could have changed. */ case_sensitive = egg_find_bar_get_case_sensitive (find_bar); search_string = egg_find_bar_get_search_string (find_bar); - ev_view_find_search_changed (EV_VIEW (ev_window->priv->view)); - + if (ev_window->priv->document->iswebdocument) { + ev_web_view_find_search_changed(EV_WEB_VIEW(ev_window->priv->webview)); + } else { + ev_view_find_search_changed (EV_VIEW (ev_window->priv->view)); + } ev_window_clear_find_job (ev_window); if (search_string && search_string[0]) { @@ -5136,6 +5162,7 @@ find_bar_search_changed_cb (EggFindBar *find_bar, ev_document_get_n_pages (ev_window->priv->document), search_string, case_sensitive); + g_signal_connect (ev_window->priv->find_job, "finished", G_CALLBACK (ev_window_find_job_finished_cb), ev_window); @@ -5147,7 +5174,11 @@ find_bar_search_changed_cb (EggFindBar *find_bar, ev_window_update_actions (ev_window); egg_find_bar_set_status_text (EGG_FIND_BAR (ev_window->priv->find_bar), NULL); - gtk_widget_queue_draw (GTK_WIDGET (ev_window->priv->view)); + if (ev_window->priv->document->iswebdocument == TRUE) { + ev_web_view_empty_search(EV_WEB_VIEW(ev_window->priv->webview)); + } else { + gtk_widget_queue_draw (GTK_WIDGET (ev_window->priv->view)); + } } } @@ -5157,13 +5188,20 @@ find_bar_visibility_changed_cb (EggFindBar *find_bar, EvWindow *ev_window) { gboolean visible; - if (ev_window->priv->document->iswebdocument == TRUE ) return ; visible = gtk_widget_get_visible (GTK_WIDGET (find_bar)); if (ev_window->priv->document && EV_IS_DOCUMENT_FIND (ev_window->priv->document)) { - ev_view_find_set_highlight_search (EV_VIEW (ev_window->priv->view), visible); - ev_view_find_search_changed (EV_VIEW (ev_window->priv->view)); + + if (!ev_window->priv->document->iswebdocument) { + ev_view_find_set_highlight_search (EV_VIEW (ev_window->priv->view), visible); + ev_view_find_search_changed (EV_VIEW (ev_window->priv->view)); + } + else { + ev_web_view_find_set_highlight_search(EV_WEB_VIEW(ev_window->priv->webview),visible); + ev_web_view_find_search_changed(EV_WEB_VIEW(ev_window->priv->webview)); + } + ev_window_update_actions (ev_window); if (visible) @@ -5429,12 +5467,6 @@ ev_window_dispose (GObject *object) priv->view = NULL; } -/*#ifdef ENABLE_EPUB - if ( priv->webview ) { - g_object_unref (EV_WEB_VIEW(priv->webview)); - priv->webview = NULL ; - } -#endif*/ if (priv->password_view) { g_object_unref (priv->password_view); priv->password_view = NULL; -- cgit v1.2.1 From 5f3f572777cfcb64a92a4671fb2aff5faa5cefa4 Mon Sep 17 00:00:00 2001 From: rootavish Date: Sun, 3 Aug 2014 12:23:21 +0530 Subject: Table of contents(index) for epub The documents can finally be read alongside a TOC, I tested it with a variety of documents before this commit, so I presume it should work with all. Also fixed the part where I had screwed up PDF annotations owing to a wrong call. In the next commit, fully functional searching would be up, using HTML parser of libxml in combination with webkit. Also some other minor changes. --- shell/ev-window.c | 16 ++++++++++------ 1 file changed, 10 insertions(+), 6 deletions(-) (limited to 'shell/ev-window.c') diff --git a/shell/ev-window.c b/shell/ev-window.c index 937b40d3..43963fec 100644 --- a/shell/ev-window.c +++ b/shell/ev-window.c @@ -3668,7 +3668,7 @@ static void ev_window_cmd_scroll_forward (GtkAction *action, EvWindow *window) { /*If the webview is occupying the window*/ - if ( window->priv->document->iswebdocument == FALSE ) return ; + if ( window->priv->document->iswebdocument == FALSE) return ; ev_view_scroll (EV_VIEW (window->priv->view), GTK_SCROLL_PAGE_FORWARD, FALSE); } @@ -5880,7 +5880,11 @@ activate_link_cb (EvPageAction *page_action, EvLink *link, EvWindow *window) static void navigation_action_activate_link_cb (EvNavigationAction *action, EvLink *link, EvWindow *window) { - if (window->priv->document->iswebdocument == FALSE ) return; + if (window->priv->document->iswebdocument == TRUE ) { + ev_web_view_handle_link(EV_WEB_VIEW(window->priv->webview),link); + gtk_widget_grab_focus (window->priv->webview); + return; + } ev_view_handle_link (EV_VIEW (window->priv->view), link); gtk_widget_grab_focus (window->priv->view); @@ -6334,7 +6338,7 @@ view_external_link_cb (EvView *view, EvLinkAction *action, EvWindow *window) static void ev_view_popup_cmd_open_link (GtkAction *action, EvWindow *window) { - if (window->priv->document->iswebdocument == FALSE ) return; + if (window->priv->document->iswebdocument == TRUE ) return; ev_view_handle_link (EV_VIEW (window->priv->view), window->priv->link); } @@ -6359,7 +6363,7 @@ static void ev_view_popup_cmd_copy_link_address (GtkAction *action, EvWindow *window) { EvLinkAction *ev_action; - if (window->priv->document->iswebdocument == FALSE ) return; + if (window->priv->document->iswebdocument == TRUE ) return; ev_action = ev_link_get_action (window->priv->link); if (!ev_action) return; @@ -6534,7 +6538,7 @@ static void ev_view_popup_cmd_annot_properties (GtkAction *action, EvWindow *window) { - if (window->priv->document->iswebdocument == FALSE ) return; + if (window->priv->document->iswebdocument == TRUE ) return; const gchar *author; GdkColor color; @@ -6922,7 +6926,7 @@ method_call_cb (GDBusConnection *connection, gpointer user_data) { EvWindow *window = EV_WINDOW (user_data); - if (window->priv->document->iswebdocument == FALSE ) return; + if (window->priv->document->iswebdocument == TRUE ) return; if (g_strcmp0 (method_name, "SyncView") != 0) return; -- cgit v1.2.1 From 56880392a6678ccec12bbec016939597acd49b07 Mon Sep 17 00:00:00 2001 From: rootavish Date: Wed, 6 Aug 2014 15:34:02 +0530 Subject: Searching in epub documents I added the capability to search through documents. The search is quite buggy, and we'll be taking care of each bug one at a time. --- shell/ev-window.c | 14 ++++++-------- 1 file changed, 6 insertions(+), 8 deletions(-) (limited to 'shell/ev-window.c') diff --git a/shell/ev-window.c b/shell/ev-window.c index 43963fec..dfb3d7f2 100644 --- a/shell/ev-window.c +++ b/shell/ev-window.c @@ -3668,7 +3668,7 @@ static void ev_window_cmd_scroll_forward (GtkAction *action, EvWindow *window) { /*If the webview is occupying the window*/ - if ( window->priv->document->iswebdocument == FALSE) return ; + if ( window->priv->document->iswebdocument == TRUE) return ; ev_view_scroll (EV_VIEW (window->priv->view), GTK_SCROLL_PAGE_FORWARD, FALSE); } @@ -3677,7 +3677,7 @@ static void ev_window_cmd_scroll_backward (GtkAction *action, EvWindow *window) { /*If the webview is occupying the window*/ - if ( window->priv->document->iswebdocument == FALSE ) return ; + if ( window->priv->document->iswebdocument == TRUE ) return ; ev_view_scroll (EV_VIEW (window->priv->view), GTK_SCROLL_PAGE_BACKWARD, FALSE); } @@ -5069,7 +5069,7 @@ ev_window_find_job_updated_cb (EvJobFind *job, { ev_window_update_actions (ev_window); if (ev_window->priv->document->iswebdocument == TRUE ) { - ev_web_view_find_changed(EV_WEB_VIEW(ev_window->priv->webview), page,job); + ev_web_view_find_changed(EV_WEB_VIEW(ev_window->priv->webview), job->results,job->text, job->case_sensitive); } else { ev_view_find_changed (EV_VIEW (ev_window->priv->view), @@ -5150,7 +5150,7 @@ find_bar_search_changed_cb (EggFindBar *find_bar, search_string = egg_find_bar_get_search_string (find_bar); if (ev_window->priv->document->iswebdocument) { - ev_web_view_find_search_changed(EV_WEB_VIEW(ev_window->priv->webview)); + ev_web_view_find_search_changed(EV_WEB_VIEW(ev_window->priv->webview),TRUE); } else { ev_view_find_search_changed (EV_VIEW (ev_window->priv->view)); } @@ -5174,9 +5174,7 @@ find_bar_search_changed_cb (EggFindBar *find_bar, ev_window_update_actions (ev_window); egg_find_bar_set_status_text (EGG_FIND_BAR (ev_window->priv->find_bar), NULL); - if (ev_window->priv->document->iswebdocument == TRUE) { - ev_web_view_empty_search(EV_WEB_VIEW(ev_window->priv->webview)); - } else { + if (ev_window->priv->document->iswebdocument == FALSE) { gtk_widget_queue_draw (GTK_WIDGET (ev_window->priv->view)); } } @@ -5199,7 +5197,7 @@ find_bar_visibility_changed_cb (EggFindBar *find_bar, } else { ev_web_view_find_set_highlight_search(EV_WEB_VIEW(ev_window->priv->webview),visible); - ev_web_view_find_search_changed(EV_WEB_VIEW(ev_window->priv->webview)); + ev_web_view_find_search_changed(EV_WEB_VIEW(ev_window->priv->webview),visible); } ev_window_update_actions (ev_window); -- cgit v1.2.1 From 65dd892279c70b31509a5e478ae6f9aa44d9cd21 Mon Sep 17 00:00:00 2001 From: rootavish Date: Wed, 6 Aug 2014 17:41:34 +0530 Subject: Window title thumbnail job fixed(ePub) In the design change in the previous commit, I forgot to make the thumbnail job used to set the window title a main loop job, I fix that in this commit. Epub thumbnail jobs running as threads, WILL cause a program error occassionally, because we need to use the offscreen webview. --- shell/ev-window.c | 4 ++++ 1 file changed, 4 insertions(+) (limited to 'shell/ev-window.c') diff --git a/shell/ev-window.c b/shell/ev-window.c index dfb3d7f2..d765a2d8 100644 --- a/shell/ev-window.c +++ b/shell/ev-window.c @@ -1376,6 +1376,10 @@ ev_window_refresh_window_thumbnail (EvWindow *ev_window) rotation = ev_document_model_get_rotation (ev_window->priv->model); ev_window->priv->thumbnail_job = ev_job_thumbnail_new (document, 0, rotation, scale); + + if (document->iswebdocument) { + ev_job_set_run_mode(EV_JOB(ev_window->priv->thumbnail_job), EV_JOB_RUN_MAIN_LOOP); + } g_signal_connect (ev_window->priv->thumbnail_job, "finished", G_CALLBACK (ev_window_set_icon_from_thumbnail), ev_window); -- cgit v1.2.1 From ff0a79e545356046c7145bff0630a7cd50ad977c Mon Sep 17 00:00:00 2001 From: rootavish Date: Thu, 7 Aug 2014 17:43:55 +0530 Subject: Ability to search through epub documents You can now search through the entire epub document. In the next commit I'm adding support for webkit2 with gtk3. --- shell/ev-window.c | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) (limited to 'shell/ev-window.c') diff --git a/shell/ev-window.c b/shell/ev-window.c index d765a2d8..aab14229 100644 --- a/shell/ev-window.c +++ b/shell/ev-window.c @@ -5073,7 +5073,8 @@ ev_window_find_job_updated_cb (EvJobFind *job, { ev_window_update_actions (ev_window); if (ev_window->priv->document->iswebdocument == TRUE ) { - ev_web_view_find_changed(EV_WEB_VIEW(ev_window->priv->webview), job->results,job->text, job->case_sensitive); + ev_web_view_find_changed(EV_WEB_VIEW(ev_window->priv->webview), + job->results,job->text, job->case_sensitive); } else { ev_view_find_changed (EV_VIEW (ev_window->priv->view), @@ -5154,7 +5155,7 @@ find_bar_search_changed_cb (EggFindBar *find_bar, search_string = egg_find_bar_get_search_string (find_bar); if (ev_window->priv->document->iswebdocument) { - ev_web_view_find_search_changed(EV_WEB_VIEW(ev_window->priv->webview),TRUE); + ev_web_view_find_search_changed(EV_WEB_VIEW(ev_window->priv->webview)); } else { ev_view_find_search_changed (EV_VIEW (ev_window->priv->view)); } @@ -5201,7 +5202,8 @@ find_bar_visibility_changed_cb (EggFindBar *find_bar, } else { ev_web_view_find_set_highlight_search(EV_WEB_VIEW(ev_window->priv->webview),visible); - ev_web_view_find_search_changed(EV_WEB_VIEW(ev_window->priv->webview),visible); + ev_web_view_find_search_changed(EV_WEB_VIEW(ev_window->priv->webview)); + ev_web_view_set_handler(EV_WEB_VIEW(ev_window->priv->webview),visible); } ev_window_update_actions (ev_window); -- cgit v1.2.1 From 3a013d3b19c5a81372560e735cf6f9f5c3ebdd37 Mon Sep 17 00:00:00 2001 From: rootavish Date: Sat, 9 Aug 2014 20:48:25 +0530 Subject: GTK3, Webkit2 support for epub I added the code to make it possible to build Atril with GTK3 and webkit2. Everything runs fine with both GTK3 and GTK2. The find module for epub was also tested and changed. Now I shall first attempt to fix some Glib errors, and the problem of the temporary directory not getting deleted, that arose when I stabilized the thumbnails. --- shell/ev-window.c | 35 +++++++++++++++++++++++------------ 1 file changed, 23 insertions(+), 12 deletions(-) (limited to 'shell/ev-window.c') diff --git a/shell/ev-window.c b/shell/ev-window.c index aab14229..bb870976 100644 --- a/shell/ev-window.c +++ b/shell/ev-window.c @@ -504,11 +504,23 @@ ev_window_update_actions (EvWindow *ev_window) has_pages && ev_view_get_has_selection (view)); } +#if GTK_CHECK_VERSION (3, 0, 0) + else if (webview) { + /* + * The webkit2 function for this is an asynchronous call, + * so our only option is to set this to always on, and we'll take care of whether we can copy + * or not when this command is actually given. + */ + ev_window_set_action_sensitive (ev_window,"EditCopy", + has_pages); + } +#else else if(webview) { ev_window_set_action_sensitive (ev_window, "EditCopy", has_pages && ev_web_view_get_has_selection (webview)); } +#endif ev_window_set_action_sensitive (ev_window, "EditFindNext", has_pages && can_find_in_page); ev_window_set_action_sensitive (ev_window, "EditFindPrevious", @@ -928,7 +940,7 @@ view_selection_changed_cb (EvView *view, ev_window_set_action_sensitive (window, "EditCopy", ev_view_get_has_selection (view)); } - +#if !GTK_CHECK_VERSION (3, 0, 0) static void web_view_selection_changed_cb(EvWebView *webview, EvWindow *window) @@ -936,6 +948,7 @@ web_view_selection_changed_cb(EvWebView *webview, ev_window_set_action_sensitive (window,"EditCopy", ev_web_view_get_has_selection(webview)); } +#endif static void ev_window_page_changed_cb (EvWindow *ev_window, @@ -1489,6 +1502,7 @@ ev_window_set_document (EvWindow *ev_window, EvDocument *document) /*We have encountered a web document, replace the atril view with a web view, if the web view is not already loaded.*/ gtk_container_remove (GTK_CONTAINER(ev_window->priv->scrolled_window), ev_window->priv->view); + g_object_unref(ev_window->priv->view); ev_window->priv->view = NULL; gtk_container_add (GTK_CONTAINER (ev_window->priv->scrolled_window), @@ -5201,7 +5215,9 @@ find_bar_visibility_changed_cb (EggFindBar *find_bar, ev_view_find_search_changed (EV_VIEW (ev_window->priv->view)); } else { +#if !GTK_CHECK_VERSION(3, 0, 0) ev_web_view_find_set_highlight_search(EV_WEB_VIEW(ev_window->priv->webview),visible); +#endif ev_web_view_find_search_changed(EV_WEB_VIEW(ev_window->priv->webview)); ev_web_view_set_handler(EV_WEB_VIEW(ev_window->priv->webview),visible); } @@ -5593,15 +5609,7 @@ ev_window_key_press_event (GtkWidget *widget, * It's needed to be able to type in * annot popups windows */ - if (priv->webview && priv->document && priv->document->iswebdocument == TRUE) { - g_object_ref (priv->webview); - if (gtk_widget_is_sensitive (priv->webview)) - handled = gtk_widget_event (priv->webview, (GdkEvent*) event); - g_object_unref (priv->webview); - - } - - else if ( priv->view) { + if ( priv->view) { g_object_ref (priv->view); if (gtk_widget_is_sensitive (priv->view)) handled = gtk_widget_event (priv->view, (GdkEvent*) event); @@ -5871,7 +5879,9 @@ sidebar_links_link_activated_cb (EvSidebarLinks *sidebar_links, EvLink *link, Ev if (window->priv->document->iswebdocument == FALSE ) { ev_view_handle_link (EV_VIEW (window->priv->view), link); } - ev_web_view_handle_link(EV_WEB_VIEW(window->priv->webview), link); + else { + ev_web_view_handle_link(EV_WEB_VIEW(window->priv->webview), link); + } } static void @@ -7229,10 +7239,11 @@ ev_window_init (EvWindow *ev_window) #ifdef ENABLE_EPUB /*The webview, we won't add it now but it will replace the atril-view if a web(epub) document is encountered.*/ ev_window->priv->webview = ev_web_view_new(); ev_web_view_set_model(EV_WEB_VIEW(ev_window->priv->webview),ev_window->priv->model); - +#if !GTK_CHECK_VERSION (3, 0, 0) g_signal_connect_object (ev_window->priv->webview,"selection-changed", G_CALLBACK(web_view_selection_changed_cb), ev_window, 0); +#endif #endif ev_view_set_page_cache_size (EV_VIEW (ev_window->priv->view), PAGE_CACHE_SIZE); ev_view_set_model (EV_VIEW (ev_window->priv->view), ev_window->priv->model); -- cgit v1.2.1 From 1548bcb4629a6a41641a0188003215b3098aa5fc Mon Sep 17 00:00:00 2001 From: rootavish Date: Sun, 10 Aug 2014 01:05:45 +0530 Subject: Page Label handling, other fixes Added the function to handle links from the toolbar, also added functions to disconnect all ev-view handlers once it has been replaced by ev-web-view, and vice-versa(to drop all handler associated to ev-web-view). Also the unref call to job_thumb was causing thumbnail jobs to crash with GTK2, so had to revert that, now we're back to the document folder not getting deleted from disk. --- shell/ev-window.c | 13 ++++++++++--- 1 file changed, 10 insertions(+), 3 deletions(-) (limited to 'shell/ev-window.c') diff --git a/shell/ev-window.c b/shell/ev-window.c index bb870976..fda6f68b 100644 --- a/shell/ev-window.c +++ b/shell/ev-window.c @@ -1502,7 +1502,7 @@ ev_window_set_document (EvWindow *ev_window, EvDocument *document) /*We have encountered a web document, replace the atril view with a web view, if the web view is not already loaded.*/ gtk_container_remove (GTK_CONTAINER(ev_window->priv->scrolled_window), ev_window->priv->view); - + ev_view_disconnect_handlers(EV_VIEW(ev_window->priv->view)); g_object_unref(ev_window->priv->view); ev_window->priv->view = NULL; gtk_container_add (GTK_CONTAINER (ev_window->priv->scrolled_window), @@ -1511,6 +1511,7 @@ ev_window_set_document (EvWindow *ev_window, EvDocument *document) } else { /*Since the document is not a webdocument might as well get rid of the webview now*/ + ev_web_view_disconnect_handlers(EV_WEB_VIEW(ev_window->priv->webview)); g_object_ref_sink(ev_window->priv->webview); g_object_unref(ev_window->priv->webview); } @@ -5887,8 +5888,14 @@ sidebar_links_link_activated_cb (EvSidebarLinks *sidebar_links, EvLink *link, Ev static void activate_link_cb (EvPageAction *page_action, EvLink *link, EvWindow *window) { - ev_view_handle_link (EV_VIEW (window->priv->view), link); - gtk_widget_grab_focus (window->priv->view); + if (window->priv->view) { + ev_view_handle_link (EV_VIEW (window->priv->view), link); + gtk_widget_grab_focus (window->priv->view); + } + else { + ev_web_view_handle_link (EV_WEB_VIEW (window->priv->webview), link); + gtk_widget_grab_focus (window->priv->webview); + } } static void -- cgit v1.2.1