Web   ·   Wiki   ·   Activities   ·   Blog   ·   Lists   ·   Chat   ·   Meeting   ·   Bugs   ·   Git   ·   Translate   ·   Archive   ·   People   ·   Donate
summaryrefslogtreecommitdiffstats
path: root/shell/ev-sidebar-annotations.c
diff options
context:
space:
mode:
Diffstat (limited to 'shell/ev-sidebar-annotations.c')
-rw-r--r--shell/ev-sidebar-annotations.c49
1 files changed, 49 insertions, 0 deletions
diff --git a/shell/ev-sidebar-annotations.c b/shell/ev-sidebar-annotations.c
index 67a49f1..b1f0848 100644
--- a/shell/ev-sidebar-annotations.c
+++ b/shell/ev-sidebar-annotations.c
@@ -41,15 +41,23 @@ enum {
N_COLUMNS
};
+enum {
+ ANNOT_ACTIVATED,
+ N_SIGNALS
+};
+
struct _EvSidebarAnnotationsPrivate {
GtkWidget *notebook;
GtkWidget *tree_view;
EvJob *job;
+ guint selection_changed_id;
};
static void ev_sidebar_annotations_page_iface_init (EvSidebarPageInterface *iface);
+static guint signals[N_SIGNALS];
+
G_DEFINE_TYPE_EXTENDED (EvSidebarAnnotations,
ev_sidebar_annotations,
GTK_TYPE_VBOX,
@@ -91,6 +99,7 @@ ev_sidebar_annotations_add_annots_list (EvSidebarAnnotations *ev_annots)
GtkTreeModel *loading_model;
GtkCellRenderer *renderer;
GtkTreeViewColumn *column;
+ GtkTreeSelection *selection;
swindow = gtk_scrolled_window_new (NULL, NULL);
gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (swindow),
@@ -105,6 +114,8 @@ ev_sidebar_annotations_add_annots_list (EvSidebarAnnotations *ev_annots)
gtk_tree_view_set_headers_visible (GTK_TREE_VIEW (ev_annots->priv->tree_view),
FALSE);
+ selection = gtk_tree_view_get_selection (GTK_TREE_VIEW (ev_annots->priv->tree_view));
+ gtk_tree_selection_set_mode (selection, GTK_SELECTION_NONE);
column = gtk_tree_view_column_new ();
@@ -173,6 +184,16 @@ ev_sidebar_annotations_class_init (EvSidebarAnnotationsClass *klass)
g_type_class_add_private (g_object_class, sizeof (EvSidebarAnnotationsPrivate));
g_object_class_override_property (g_object_class, PROP_WIDGET, "main-widget");
+
+ signals[ANNOT_ACTIVATED] =
+ g_signal_new ("annot-activated",
+ G_TYPE_FROM_CLASS (g_object_class),
+ G_SIGNAL_RUN_LAST | G_SIGNAL_ACTION,
+ G_STRUCT_OFFSET (EvSidebarAnnotationsClass, annot_activated),
+ NULL, NULL,
+ g_cclosure_marshal_VOID__POINTER,
+ G_TYPE_NONE, 1,
+ G_TYPE_POINTER);
}
GtkWidget *
@@ -182,11 +203,30 @@ ev_sidebar_annotations_new (void)
}
static void
+selection_changed_cb (GtkTreeSelection *selection,
+ EvSidebarAnnotations *sidebar_annots)
+{
+ GtkTreeModel *model;
+ GtkTreeIter iter;
+
+ if (gtk_tree_selection_get_selected (selection, &model, &iter)) {
+ EvMapping *mapping = NULL;
+
+ gtk_tree_model_get (model, &iter,
+ COLUMN_ANNOT_MAPPING, &mapping,
+ -1);
+ if (mapping)
+ g_signal_emit (sidebar_annots, signals[ANNOT_ACTIVATED], 0, mapping);
+ }
+}
+
+static void
job_finished_callback (EvJobAnnots *job,
EvSidebarAnnotations *sidebar_annots)
{
EvSidebarAnnotationsPrivate *priv;
GtkTreeStore *model;
+ GtkTreeSelection *selection;
GList *l;
GdkPixbuf *text_icon = NULL;
GdkPixbuf *attachment_icon = NULL;
@@ -206,6 +246,15 @@ job_finished_callback (EvJobAnnots *job,
return;
}
+ selection = gtk_tree_view_get_selection (GTK_TREE_VIEW (priv->tree_view));
+ gtk_tree_selection_set_mode (selection, GTK_SELECTION_SINGLE);
+ if (priv->selection_changed_id == 0) {
+ priv->selection_changed_id =
+ g_signal_connect (selection, "changed",
+ G_CALLBACK (selection_changed_cb),
+ sidebar_annots);
+ }
+
model = gtk_tree_store_new (N_COLUMNS,
G_TYPE_STRING,
GDK_TYPE_PIXBUF,