mirror of
https://git.pwmt.org/pwmt/zathura.git
synced 2024-12-29 12:15:59 +01:00
Render last-viewed pages with a higher priority
This commit is contained in:
parent
3986cbc032
commit
122ea70e16
2 changed files with 39 additions and 1 deletions
|
@ -83,7 +83,8 @@ enum properties_e
|
||||||
PROP_SEARCH_RESULTS,
|
PROP_SEARCH_RESULTS,
|
||||||
PROP_SEARCH_RESULTS_LENGTH,
|
PROP_SEARCH_RESULTS_LENGTH,
|
||||||
PROP_SEARCH_RESULTS_CURRENT,
|
PROP_SEARCH_RESULTS_CURRENT,
|
||||||
PROP_DRAW_SEACH_RESULTS
|
PROP_DRAW_SEACH_RESULTS,
|
||||||
|
PROP_LAST_VIEW,
|
||||||
};
|
};
|
||||||
|
|
||||||
static void
|
static void
|
||||||
|
@ -129,6 +130,8 @@ zathura_page_widget_class_init(ZathuraPageClass* class)
|
||||||
g_param_spec_int("search-length", "search-length", "The number of search results", -1, INT_MAX, 0, G_PARAM_READABLE));
|
g_param_spec_int("search-length", "search-length", "The number of search results", -1, INT_MAX, 0, G_PARAM_READABLE));
|
||||||
g_object_class_install_property(object_class, PROP_DRAW_SEACH_RESULTS,
|
g_object_class_install_property(object_class, PROP_DRAW_SEACH_RESULTS,
|
||||||
g_param_spec_boolean("draw-search-results", "draw-search-results", "Set to true if search results should be drawn", FALSE, G_PARAM_WRITABLE));
|
g_param_spec_boolean("draw-search-results", "draw-search-results", "Set to true if search results should be drawn", FALSE, G_PARAM_WRITABLE));
|
||||||
|
g_object_class_install_property(object_class, PROP_LAST_VIEW,
|
||||||
|
g_param_spec_int("last-view", "last-view", "Last time the page has been viewed", -1, INT_MAX, 0, G_PARAM_READABLE));
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
|
@ -289,6 +292,9 @@ zathura_page_widget_get_property(GObject* object, guint prop_id, GValue* value,
|
||||||
case PROP_SEARCH_RESULTS:
|
case PROP_SEARCH_RESULTS:
|
||||||
g_value_set_pointer(value, priv->search.list);
|
g_value_set_pointer(value, priv->search.list);
|
||||||
break;
|
break;
|
||||||
|
case PROP_LAST_VIEW:
|
||||||
|
g_value_set_int(value, priv->last_view);
|
||||||
|
break;
|
||||||
default:
|
default:
|
||||||
G_OBJECT_WARN_INVALID_PROPERTY_ID(object, prop_id, pspec);
|
G_OBJECT_WARN_INVALID_PROPERTY_ID(object, prop_id, pspec);
|
||||||
}
|
}
|
||||||
|
|
32
render.c
32
render.c
|
@ -15,6 +15,7 @@
|
||||||
|
|
||||||
static void render_job(void* data, void* user_data);
|
static void render_job(void* data, void* user_data);
|
||||||
static bool render(zathura_t* zathura, zathura_page_t* page);
|
static bool render(zathura_t* zathura, zathura_page_t* page);
|
||||||
|
static gint render_thread_sort(gconstpointer a, gconstpointer b, gpointer data);
|
||||||
|
|
||||||
struct render_thread_s
|
struct render_thread_s
|
||||||
{
|
{
|
||||||
|
@ -46,6 +47,8 @@ render_init(zathura_t* zathura)
|
||||||
goto error_free;
|
goto error_free;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
g_thread_pool_set_sort_function(render_thread->pool, render_thread_sort, zathura);
|
||||||
|
|
||||||
return render_thread;
|
return render_thread;
|
||||||
|
|
||||||
error_free:
|
error_free:
|
||||||
|
@ -189,3 +192,32 @@ render_all(zathura_t* zathura)
|
||||||
gtk_widget_queue_resize(widget);
|
gtk_widget_queue_resize(widget);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static gint
|
||||||
|
render_thread_sort(gconstpointer a, gconstpointer b, gpointer data)
|
||||||
|
{
|
||||||
|
if (a == NULL || b == NULL || data == NULL) {
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
zathura_page_t* page_a = (zathura_page_t*) a;
|
||||||
|
zathura_page_t* page_b = (zathura_page_t*) b;
|
||||||
|
zathura_t* zathura = (zathura_t*) data;
|
||||||
|
|
||||||
|
unsigned int page_a_index = zathura_page_get_index(page_a);
|
||||||
|
unsigned int page_b_index = zathura_page_get_index(page_b);
|
||||||
|
|
||||||
|
unsigned int last_view_a = 0;
|
||||||
|
unsigned int last_view_b = 0;
|
||||||
|
|
||||||
|
g_object_get(zathura->pages[page_a_index], "last-view", &last_view_a, NULL);
|
||||||
|
g_object_get(zathura->pages[page_b_index], "last-view", &last_view_b, NULL);
|
||||||
|
|
||||||
|
if (last_view_a > last_view_b) {
|
||||||
|
return -1;
|
||||||
|
} else if (last_view_b > last_view_a) {
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
Loading…
Reference in a new issue