#define EV_IS_VIEW_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), EV_TYPE_VIEW))
#define EV_VIEW_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), EV_TYPE_VIEW, EvViewClass))
-enum {
- PROP_0,
- PROP_HAS_SELECTION
-};
-
enum {
SIGNAL_BINDING_ACTIVATED,
SIGNAL_HANDLE_LINK,
SIGNAL_EXTERNAL_LINK,
SIGNAL_POPUP_MENU,
- N_SIGNALS,
+ SIGNAL_SELECTION_CHANGED,
+ N_SIGNALS
};
enum {
/*** GObject ***/
static void ev_view_finalize (GObject *object);
static void ev_view_destroy (GtkObject *object);
-static void ev_view_get_property (GObject *object,
- guint prop_id,
- GValue *value,
- GParamSpec *pspec);
static void ev_view_class_init (EvViewClass *class);
static void ev_view_init (EvView *view);
gdouble x,
gdouble y)
{
+ GList *items = NULL;
EvLink *link;
EvImage *image;
EvAnnotation *annot;
image = ev_view_get_image_at_location (view, x, y);
- if (image) {
- g_signal_emit (view, signals[SIGNAL_POPUP_MENU], 0, image);
- return TRUE;
- }
+ if (image)
+ items = g_list_prepend (items, image);
link = ev_view_get_link_at_location (view, x, y);
- if (link) {
- g_signal_emit (view, signals[SIGNAL_POPUP_MENU], 0, link);
- return TRUE;
- }
+ if (link)
+ items = g_list_prepend (items, link);
annot = ev_view_get_annotation_at_location (view, x, y);
- if (annot) {
- g_signal_emit (view, signals[SIGNAL_POPUP_MENU], 0, annot);
- return TRUE;
- }
+ if (annot)
+ items = g_list_prepend (items, annot);
+
+ g_signal_emit (view, signals[SIGNAL_POPUP_MENU], 0, items);
- g_signal_emit (view, signals[SIGNAL_POPUP_MENU], 0, NULL);
+ g_list_free (items);
return TRUE;
}
if (!view->document)
return FALSE;
- if (!GTK_WIDGET_HAS_FOCUS (widget)) {
+ if (!gtk_widget_has_focus (widget)) {
gtk_widget_grab_focus (widget);
}
if (!view->document)
return FALSE;
- if (!GTK_WIDGET_HAS_FOCUS (widget)) {
+ if (!gtk_widget_has_focus (widget)) {
/* Forward key events to current focused window child */
if (view->window_child_focus) {
GdkEventKey *new_event;
gint width, height;
if (!view->loading_text) {
- const gchar *loading_text = _("Loading...");
+ const gchar *loading_text = _("Loading…");
PangoLayout *layout;
PangoFontDescription *font_desc;
PangoRectangle logical_rect;
return GTK_WIDGET_CLASS (ev_view_parent_class)->get_accessible (widget);
}
-static void
-ev_view_get_property (GObject *object,
- guint prop_id,
- GValue *value,
- GParamSpec *pspec)
-{
- EvView *view = EV_VIEW (object);
-
- switch (prop_id) {
- case PROP_HAS_SELECTION:
- g_value_set_boolean (value,
- view->selection_info.selections != NULL);
- break;
- default:
- G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
- }
-}
-
static void
ev_view_class_init (EvViewClass *class)
{
GtkBindingSet *binding_set;
object_class->finalize = ev_view_finalize;
- object_class->get_property = ev_view_get_property;
widget_class->expose_event = ev_view_expose_event;
widget_class->button_press_event = ev_view_button_press_event;
G_SIGNAL_RUN_LAST | G_SIGNAL_ACTION,
G_STRUCT_OFFSET (EvViewClass, popup_menu),
NULL, NULL,
- g_cclosure_marshal_VOID__OBJECT,
+ g_cclosure_marshal_VOID__POINTER,
G_TYPE_NONE, 1,
- G_TYPE_OBJECT);
-
-
- g_object_class_install_property (object_class,
- PROP_HAS_SELECTION,
- g_param_spec_boolean ("has-selection",
- "Has selection",
- "The view has selections",
- FALSE,
- G_PARAM_READABLE));
+ G_TYPE_POINTER);
+ signals[SIGNAL_SELECTION_CHANGED] = g_signal_new ("selection-changed",
+ G_TYPE_FROM_CLASS (object_class),
+ G_SIGNAL_RUN_LAST | G_SIGNAL_ACTION,
+ G_STRUCT_OFFSET (EvViewClass, selection_changed),
+ NULL, NULL,
+ g_cclosure_marshal_VOID__VOID,
+ G_TYPE_NONE, 0,
+ G_TYPE_NONE);
binding_set = gtk_binding_set_by_class (class);
gint x, y;
GList *children, *l;
- if (! GTK_WIDGET_REALIZED (view))
+ if (!gtk_widget_get_realized (GTK_WIDGET (view)))
return;
if (view->hadjustment) {
g_list_free (view->selection_info.selections);
view->selection_info.selections = new_list;
ev_pixbuf_cache_set_selection_list (view->pixbuf_cache, new_list);
- g_object_notify (G_OBJECT (view), "has-selection");
+ g_signal_emit (view, signals[SIGNAL_SELECTION_CHANGED], 0, NULL);
new_list_ptr = new_list;
old_list_ptr = old_list;
view->scale,
&tmp_region);
- if (tmp_region) {
+ if (tmp_region && !gdk_region_empty (tmp_region)) {
new_sel->covered_region = gdk_region_copy (tmp_region);
}
}
static void
clear_selection (EvView *view)
{
- g_list_foreach (view->selection_info.selections, (GFunc)selection_free, NULL);
- g_list_free (view->selection_info.selections);
- view->selection_info.selections = NULL;
+ if (view->selection_info.selections) {
+ g_list_foreach (view->selection_info.selections, (GFunc)selection_free, NULL);
+ g_list_free (view->selection_info.selections);
+ view->selection_info.selections = NULL;
+
+ g_signal_emit (view, signals[SIGNAL_SELECTION_CHANGED], 0, NULL);
+ }
view->selection_info.in_selection = FALSE;
if (view->pixbuf_cache)
ev_pixbuf_cache_set_selection_list (view->pixbuf_cache, NULL);
- g_object_notify (G_OBJECT (view), "has-selection");
}
void