Skip to content
GitLab
Menu
Projects
Groups
Snippets
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
Menu
Open sidebar
pwmt
zathura
Commits
16fbefa5
Commit
16fbefa5
authored
Aug 30, 2013
by
Sebastian Ramacher
Browse files
Abort requests if the page becomes invisible
Signed-off-by:
Sebastian Ramacher
<
sebastian+dev@ramacher.at
>
parent
a9f044c9
Changes
5
Hide whitespace changes
Inline
Side-by-side
callbacks.c
View file @
16fbefa5
...
...
@@ -90,13 +90,14 @@ cb_view_vadjustment_value_changed(GtkAdjustment* GIRARA_UNUSED(adjustment), gpoi
.
height
=
zathura_page_get_height
(
page
)
*
scale
};
GtkWidget
*
page_widget
=
zathura_page_get_widget
(
zathura
,
page
);
ZathuraPage
*
zathura_page_widget
=
ZATHURA_PAGE
(
page_widget
);
gtk_widget_translate_coordinates
(
page_widget
,
zathura
->
ui
.
session
->
gtk
.
view
,
0
,
0
,
&
page_rect
.
x
,
&
page_rect
.
y
);
if
(
gdk_rectangle_intersect
(
&
view_rect
,
&
page_rect
,
NULL
)
==
TRUE
)
{
if
(
zathura_page_get_visibility
(
page
)
==
false
)
{
zathura_page_set_visibility
(
page
,
true
);
zathura_page_widget_update_view_time
(
ZATHURA_PAGE
(
page_widget
)
)
;
zathura_page_widget_update_view_time
(
zathura_
page_widget
);
zathura_page_cache_add
(
zathura
,
zathura_page_get_index
(
page
));
}
if
(
zathura
->
global
.
update_page_number
==
true
&&
updated
==
false
...
...
@@ -106,11 +107,13 @@ cb_view_vadjustment_value_changed(GtkAdjustment* GIRARA_UNUSED(adjustment), gpoi
}
}
else
{
zathura_page_set_visibility
(
page
,
false
);
/* If a page becomes invisible, abort all render requests. */
zathura_page_widget_abort_render_request
(
zathura_page_widget
);
/* if the page is not visible and not cached, but still has a surface, we
* need to get rid of the surface */
if
(
zathura_page_widget_have_surface
(
ZATHURA_PAGE
(
page_widget
)
)
==
true
&&
if
(
zathura_page_widget_have_surface
(
zathura_
page_widget
)
==
true
&&
zathura_page_cache_is_cached
(
zathura
,
zathura_page_get_index
(
page
))
==
false
)
{
zathura_page_widget_update_surface
(
ZATHURA_PAGE
(
page_widget
)
,
NULL
);
zathura_page_widget_update_surface
(
zathura_
page_widget
,
NULL
);
}
girara_list_t
*
results
=
NULL
;
...
...
@@ -529,7 +532,8 @@ cb_unknown_command(girara_session_t* session, const char* input)
}
/* check for number */
for
(
unsigned
int
i
=
0
;
i
<
strlen
(
input
);
i
++
)
{
const
size_t
size
=
strlen
(
input
);
for
(
size_t
i
=
0
;
i
<
size
;
i
++
)
{
if
(
g_ascii_isdigit
(
input
[
i
])
==
FALSE
)
{
return
false
;
}
...
...
page-widget.c
View file @
16fbefa5
...
...
@@ -24,7 +24,6 @@ typedef struct zathura_page_widget_private_s {
zathura_t
*
zathura
;
/**< Zathura object */
cairo_surface_t
*
surface
;
/**< Cairo surface */
ZathuraRenderRequest
*
render_request
;
/* Request object */
bool
render_requested
;
/**< No surface and rendering has been requested */
gint64
last_view
;
/**< Last time the page has been viewed */
mutex
lock
;
/**< Lock */
...
...
@@ -146,7 +145,6 @@ zathura_page_widget_init(ZathuraPage* widget)
zathura_page_widget_private_t
*
priv
=
ZATHURA_PAGE_GET_PRIVATE
(
widget
);
priv
->
page
=
NULL
;
priv
->
surface
=
NULL
;
priv
->
render_requested
=
false
;
priv
->
render_request
=
NULL
;
priv
->
last_view
=
g_get_real_time
();
...
...
@@ -504,10 +502,7 @@ zathura_page_widget_draw(GtkWidget* widget, cairo_t* cairo)
}
/* render real page */
if
(
priv
->
render_requested
==
false
)
{
priv
->
render_requested
=
true
;
zathura_render_request
(
priv
->
render_request
,
priv
->
last_view
);
}
zathura_render_request
(
priv
->
render_request
,
priv
->
last_view
);
}
mutex_unlock
(
&
(
priv
->
lock
));
return
FALSE
;
...
...
@@ -529,11 +524,10 @@ zathura_page_widget_update_surface(ZathuraPage* widget, cairo_surface_t* surface
cairo_surface_destroy
(
priv
->
surface
);
priv
->
surface
=
NULL
;
}
priv
->
render_requested
=
false
;
if
(
surface
!=
NULL
)
{
/* if we're not visible or not cached, we don't care about the surface */
if
(
zathura_page_get_visibility
(
priv
->
page
)
==
true
||
zathura_page_cache_is_cached
(
priv
->
zathura
,
zathura_page_get_index
(
priv
->
page
))
==
true
)
{
/*
if (zathura_page_get_visibility(priv->page) == true ||
zathura_page_cache_is_cached(priv->zathura, zathura_page_get_index(priv->page)) == true)
*/
{
priv
->
surface
=
surface
;
cairo_surface_reference
(
surface
);
}
...
...
@@ -919,3 +913,11 @@ zathura_page_widget_have_surface(ZathuraPage* widget)
return
priv
->
surface
!=
NULL
;
}
void
zathura_page_widget_abort_render_request
(
ZathuraPage
*
widget
)
{
g_return_if_fail
(
ZATHURA_IS_PAGE
(
widget
));
zathura_page_widget_private_t
*
priv
=
ZATHURA_PAGE_GET_PRIVATE
(
widget
);
zathura_render_request_abort
(
priv
->
render_request
);
}
page-widget.h
View file @
16fbefa5
...
...
@@ -96,4 +96,11 @@ void zathura_page_widget_update_view_time(ZathuraPage* widget);
*/
bool
zathura_page_widget_have_surface
(
ZathuraPage
*
widget
);
/**
* Abort outstanding render requests
*
* @param widget the widget
*/
void
zathura_page_widget_abort_render_request
(
ZathuraPage
*
widget
);
#endif
render.c
View file @
16fbefa5
...
...
@@ -537,6 +537,7 @@ render(ZathuraRenderRequest* request, ZathuraRenderer* renderer)
/* before recoloring, check if we've been aborted */
if
(
priv
->
about_to_close
==
true
||
request_priv
->
aborted
==
true
)
{
request_priv
->
requested
=
false
;
cairo_surface_destroy
(
surface
);
return
true
;
}
...
...
@@ -581,6 +582,7 @@ render_job(void* data, void* user_data)
girara_debug
(
"Rendering page %d ..."
,
zathura_page_get_index
(
request_priv
->
page
)
+
1
);
if
(
render
(
request
,
renderer
)
!=
true
)
{
girara_error
(
"Rendering failed (page %d)
\n
"
,
zathura_page_get_index
(
request_priv
->
page
)
+
1
);
request_priv
->
requested
=
false
;
}
}
...
...
render.h
View file @
16fbefa5
...
...
@@ -177,7 +177,6 @@ void zathura_render_request(ZathuraRenderRequest* request,
*/
void
zathura_render_request_abort
(
ZathuraRenderRequest
*
request
);
/**
* This function is used to unmark all pages as not rendered. This should
* be used if all pages should be rendered again (e.g.: the zoom level or the
...
...
Write
Preview
Supports
Markdown
0%
Try again
or
attach a new file
.
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment