Web   ·   Wiki   ·   Activities   ·   Blog   ·   Lists   ·   Chat   ·   Meeting   ·   Bugs   ·   Git   ·   Translate   ·   Archive   ·   People   ·   Donate
summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--ChangeLog16
-rw-r--r--backend/ev-selection.c4
-rw-r--r--backend/ev-selection.h8
-rw-r--r--pdf/ev-poppler.cc4
-rw-r--r--shell/ev-jobs.c4
-rw-r--r--shell/ev-jobs.h8
-rw-r--r--shell/ev-pixbuf-cache.c35
-rw-r--r--shell/ev-view.c24
8 files changed, 70 insertions, 33 deletions
diff --git a/ChangeLog b/ChangeLog
index 02055f9..642d196 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,19 @@
+2005-08-06 Kristian Høgsberg <krh@redhat.com>
+
+ * backend/ev-selection.c: (ev_selection_render_selection):
+ * backend/ev-selection.h:
+ * pdf/ev-poppler.cc:
+ * shell/ev-jobs.c: (ev_job_render_new):
+ * shell/ev-jobs.h:
+ * shell/ev-pixbuf-cache.c: (get_selection_colors),
+ (add_job_if_needed), (ev_pixbuf_cache_get_selection_pixbuf):
+ * shell/ev-view.c: (ev_view_focus_in), (ev_view_focus_out),
+ (ev_view_class_init):
+
+ Change selection color on focus in and focus out events. Also,
+ poppler now uses GdkColor for specifying the selection colors, so
+ drop some awkward conversion code.
+
2005-08-06 Yair Hershkovitz <yairhr@gmail.com>
* configure.ac: Added Hebrew translation
diff --git a/backend/ev-selection.c b/backend/ev-selection.c
index f9f73e0..36c32e3 100644
--- a/backend/ev-selection.c
+++ b/backend/ev-selection.c
@@ -62,8 +62,8 @@ ev_selection_render_selection (EvSelection *selection,
GdkPixbuf **pixbuf,
EvRectangle *points,
EvRectangle *old_points,
- guint text,
- guint base)
+ GdkColor *text,
+ GdkColor *base)
{
EvSelectionIface *iface = EV_SELECTION_GET_IFACE (selection);
diff --git a/backend/ev-selection.h b/backend/ev-selection.h
index 8ed416b..d081604 100644
--- a/backend/ev-selection.h
+++ b/backend/ev-selection.h
@@ -48,8 +48,8 @@ struct _EvSelectionIface
GdkPixbuf **pixbuf,
EvRectangle *points,
EvRectangle *old_points,
- guint text,
- guint base);
+ GdkColor *text,
+ GdkColor *base);
GdkRegion * (* get_selection_map) (EvSelection *selection,
EvRenderContext *rc);
GdkRegion * (* get_selection_region) (EvSelection *selection,
@@ -63,8 +63,8 @@ void ev_selection_render_selection (EvSelection *selection,
GdkPixbuf **pixbuf,
EvRectangle *points,
EvRectangle *old_points,
- guint text,
- guint base);
+ GdkColor *text,
+ GdkColor *base);
GdkRegion *ev_selection_get_selection_map (EvSelection *selection,
EvRenderContext *rc);
GdkRegion *ev_selection_get_selection_region (EvSelection *selection,
diff --git a/pdf/ev-poppler.cc b/pdf/ev-poppler.cc
index b4a6799..610f598 100644
--- a/pdf/ev-poppler.cc
+++ b/pdf/ev-poppler.cc
@@ -1182,8 +1182,8 @@ pdf_selection_render_selection (EvSelection *selection,
GdkPixbuf **pixbuf,
EvRectangle *points,
EvRectangle *old_points,
- guint text,
- guint base)
+ GdkColor *text,
+ GdkColor *base)
{
PdfDocument *pdf_document;
double width_points, height_points;
diff --git a/shell/ev-jobs.c b/shell/ev-jobs.c
index 595f9e8..5060231 100644
--- a/shell/ev-jobs.c
+++ b/shell/ev-jobs.c
@@ -236,8 +236,8 @@ ev_job_render_new (EvDocument *document,
gint width,
gint height,
EvRectangle *selection_points,
- guint text,
- guint base,
+ GdkColor *text,
+ GdkColor *base,
gboolean include_links,
gboolean include_text,
gboolean include_selection)
diff --git a/shell/ev-jobs.h b/shell/ev-jobs.h
index 1576837..8836d92 100644
--- a/shell/ev-jobs.h
+++ b/shell/ev-jobs.h
@@ -120,8 +120,8 @@ struct _EvJobRender
GdkPixbuf *selection;
GdkRegion *selection_region;
EvRectangle selection_points;
- guint base;
- guint text;
+ GdkColor *base;
+ GdkColor *text;
gint include_links : 1;
gint include_text : 1;
@@ -187,8 +187,8 @@ EvJob *ev_job_render_new (EvDocument *document,
gint width,
gint height,
EvRectangle *selection_points,
- guint text,
- guint base,
+ GdkColor *text,
+ GdkColor *base,
gboolean include_links,
gboolean include_text,
gboolean include_selection);
diff --git a/shell/ev-pixbuf-cache.c b/shell/ev-pixbuf-cache.c
index cbb6d18..1b6966d 100644
--- a/shell/ev-pixbuf-cache.c
+++ b/shell/ev-pixbuf-cache.c
@@ -67,7 +67,6 @@ static CacheJobInfo *find_job_cache (EvPixbufCache *pixbuf_cach
static void copy_job_to_job_info (EvJobRender *job_render,
CacheJobInfo *job_info,
EvPixbufCache *pixbuf_cache);
-static guint convert_gdk_color_to_uint (GdkColor *color);
static gboolean new_selection_pixbuf_needed(EvPixbufCache *pixbuf_cache,
CacheJobInfo *job_info,
gint page,
@@ -490,6 +489,18 @@ ev_pixbuf_cache_clear_job_sizes (EvPixbufCache *pixbuf_cache,
(MAX (0, pixbuf_cache->preload_cache_size + 1 - pixbuf_cache->start_page))
static void
+get_selection_colors (GtkWidget *widget, GdkColor **text, GdkColor **base)
+{
+ if (GTK_WIDGET_HAS_FOCUS (widget)) {
+ *text = &widget->style->text [GTK_STATE_SELECTED];
+ *base = &widget->style->base [GTK_STATE_SELECTED];
+ } else {
+ *text = &widget->style->text [GTK_STATE_ACTIVE];
+ *base = &widget->style->base [GTK_STATE_ACTIVE];
+ }
+}
+
+static void
add_job_if_needed (EvPixbufCache *pixbuf_cache,
CacheJobInfo *job_info,
EvPageCache *page_cache,
@@ -502,7 +513,7 @@ add_job_if_needed (EvPixbufCache *pixbuf_cache,
gboolean include_text = FALSE;
gboolean include_selection = FALSE;
int width, height;
- guint text, base;
+ GdkColor *text, *base;
if (job_info->job)
return;
@@ -535,8 +546,7 @@ add_job_if_needed (EvPixbufCache *pixbuf_cache,
gtk_widget_ensure_style (pixbuf_cache->view);
- text = convert_gdk_color_to_uint (& (pixbuf_cache->view->style->text [GTK_STATE_SELECTED]));
- base = convert_gdk_color_to_uint (& (pixbuf_cache->view->style->base [GTK_STATE_SELECTED]));
+ get_selection_colors (pixbuf_cache->view, &text, &base);
job_info->job = ev_job_render_new (pixbuf_cache->document,
job_info->rc,
@@ -664,18 +674,6 @@ ev_pixbuf_cache_get_link_mapping (EvPixbufCache *pixbuf_cache,
return job_info->link_mapping;
}
-/* Selection */
-static guint
-convert_gdk_color_to_uint (GdkColor *color)
-{
- g_assert (color);
-
- return 0xff << 24 |
- (color->red & 0xff00) << 8 |
- (color->green & 0xff00) |
- (color->blue & 0xff00) >> 8;
-}
-
static gboolean
new_selection_pixbuf_needed (EvPixbufCache *pixbuf_cache,
CacheJobInfo *job_info,
@@ -825,7 +823,7 @@ ev_pixbuf_cache_get_selection_pixbuf (EvPixbufCache *pixbuf_cache,
*/
if (ev_rect_cmp (&(job_info->new_points), &(job_info->selection_points))) {
EvRectangle *old_points;
- guint text, base;
+ GdkColor *text, *base;
/* we need to get a new selection pixbuf */
ev_document_doc_mutex_lock ();
@@ -846,8 +844,7 @@ ev_pixbuf_cache_get_selection_pixbuf (EvPixbufCache *pixbuf_cache,
gtk_widget_ensure_style (pixbuf_cache->view);
- text = convert_gdk_color_to_uint (& (pixbuf_cache->view->style->text [GTK_STATE_SELECTED]));
- base = convert_gdk_color_to_uint (& (pixbuf_cache->view->style->base [GTK_STATE_SELECTED]));
+ get_selection_colors (pixbuf_cache->view, &text, &base);
ev_selection_render_selection (EV_SELECTION (pixbuf_cache->document),
job_info->rc, &(job_info->selection),
diff --git a/shell/ev-view.c b/shell/ev-view.c
index 5d7df6b..c4ae904 100644
--- a/shell/ev-view.c
+++ b/shell/ev-view.c
@@ -1566,6 +1566,28 @@ ev_view_button_release_event (GtkWidget *widget,
return FALSE;
}
+static gint
+ev_view_focus_in (GtkWidget *widget,
+ GdkEventFocus *event)
+{
+ if (EV_VIEW (widget)->pixbuf_cache)
+ ev_pixbuf_cache_style_changed (EV_VIEW (widget)->pixbuf_cache);
+ gtk_widget_queue_draw (widget);
+
+ return FALSE;
+}
+
+static gint
+ev_view_focus_out (GtkWidget *widget,
+ GdkEventFocus *event)
+{
+ if (EV_VIEW (widget)->pixbuf_cache)
+ ev_pixbuf_cache_style_changed (EV_VIEW (widget)->pixbuf_cache);
+ gtk_widget_queue_draw (widget);
+
+ return FALSE;
+}
+
static gboolean
ev_view_leave_notify_event (GtkWidget *widget, GdkEventCrossing *event)
{
@@ -1894,6 +1916,8 @@ ev_view_class_init (EvViewClass *class)
widget_class->button_press_event = ev_view_button_press_event;
widget_class->motion_notify_event = ev_view_motion_notify_event;
widget_class->button_release_event = ev_view_button_release_event;
+ widget_class->focus_in_event = ev_view_focus_in;
+ widget_class->focus_out_event = ev_view_focus_out;
widget_class->size_request = ev_view_size_request;
widget_class->size_allocate = ev_view_size_allocate;
widget_class->realize = ev_view_realize;