From 29efb6155a64a2ada423861ace5637a49a2732b0 Mon Sep 17 00:00:00 2001 From: "Nickolay V. Shmyrev" Date: Wed, 10 May 2006 16:18:25 +0000 Subject: [PATCH] Move attachments bar to sidebar. * po/POTFILES.in: * properties/Makefile.am: * shell/Makefile.am: * shell/ev-attachment-bar.c: * shell/ev-attachment-bar.h: * shell/ev-sidebar-attachments.c: (ev_sidebar_attachments_icon_cache_add), (icon_theme_get_pixbuf_from_mime_type), (ev_sidebar_attachments_icon_cache_get), (icon_cache_update_icon), (ev_sidebar_attachments_icon_cache_refresh), (ev_sidebar_attachments_get_attachment_at_pos), (ev_sidebar_attachments_popup_menu_show), (ev_sidebar_attachments_popup_menu), (ev_sidebar_attachments_button_press), (ev_sidebar_attachments_update_icons), (ev_sidebar_attachments_drag_data_get), (ev_sidebar_attachments_get_property), (ev_sidebar_attachments_destroy), (ev_sidebar_attachments_class_init), (ev_sidebar_attachments_init), (ev_sidebar_attachments_new), (ev_sidebar_attachments_set_document), (ev_sidebar_attachments_support_document), (ev_sidebar_attachments_get_label), (ev_sidebar_attachments_page_iface_init): * shell/ev-sidebar-attachments.h: * shell/ev-window.c: (update_chrome_visibility), (setup_sidebar_from_metadata), (ev_window_setup_document), (ev_window_sidebar_current_page_changed_cb), (attachment_bar_menu_popup_cb), (ev_window_init): * thumbnailer/Makefile.am: Move attachments bar to sidebar. --- ChangeLog | 40 +++- po/POTFILES.in | 2 +- properties/Makefile.am | 2 +- shell/Makefile.am | 6 +- shell/ev-attachment-bar.h | 66 ------ ...achment-bar.c => ev-sidebar-attachments.c} | 223 +++++++++--------- shell/ev-sidebar-attachments.h | 62 +++++ shell/ev-window.c | 88 +++---- thumbnailer/Makefile.am | 2 +- 9 files changed, 246 insertions(+), 245 deletions(-) delete mode 100644 shell/ev-attachment-bar.h rename shell/{ev-attachment-bar.c => ev-sidebar-attachments.c} (73%) create mode 100644 shell/ev-sidebar-attachments.h diff --git a/ChangeLog b/ChangeLog index d56e8fb2..c25cfb9a 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,38 @@ +2006-05-10 Nickolay V. Shmyrev + + * po/POTFILES.in: + * properties/Makefile.am: + * shell/Makefile.am: + * shell/ev-attachment-bar.c: + * shell/ev-attachment-bar.h: + * shell/ev-sidebar-attachments.c: + (ev_sidebar_attachments_icon_cache_add), + (icon_theme_get_pixbuf_from_mime_type), + (ev_sidebar_attachments_icon_cache_get), (icon_cache_update_icon), + (ev_sidebar_attachments_icon_cache_refresh), + (ev_sidebar_attachments_get_attachment_at_pos), + (ev_sidebar_attachments_popup_menu_show), + (ev_sidebar_attachments_popup_menu), + (ev_sidebar_attachments_button_press), + (ev_sidebar_attachments_update_icons), + (ev_sidebar_attachments_drag_data_get), + (ev_sidebar_attachments_get_property), + (ev_sidebar_attachments_destroy), + (ev_sidebar_attachments_class_init), (ev_sidebar_attachments_init), + (ev_sidebar_attachments_new), + (ev_sidebar_attachments_set_document), + (ev_sidebar_attachments_support_document), + (ev_sidebar_attachments_get_label), + (ev_sidebar_attachments_page_iface_init): + * shell/ev-sidebar-attachments.h: + * shell/ev-window.c: (update_chrome_visibility), + (setup_sidebar_from_metadata), (ev_window_setup_document), + (ev_window_sidebar_current_page_changed_cb), + (attachment_bar_menu_popup_cb), (ev_window_init): + * thumbnailer/Makefile.am: + + Move attachments bar to sidebar. + 2006-05-09 Carlos Garcia Campos * pdf/ev-poppler.cc: @@ -30,7 +65,6 @@ Update sidebar chrome flag when sidebar visibility changes. Fixes bug #341049 - 2006-05-05 Nickolay V. Shmyrev * djvu/Makefile.am: @@ -3897,7 +3931,7 @@ Wed Jun 8 01:04:22 2005 Jonathan Blandford Implement async renderer interface. -2005-06-07 Nickolay V. Shmyrev <> +2005-06-07 Nickolay V. Shmyrev * shell/ev-sidebar-links.c: (ev_sidebar_links_dispose): @@ -3949,7 +3983,7 @@ Wed Jun 8 01:04:22 2005 Jonathan Blandford Cleanup the old job when changing document -2005-06-05 Nickolay V. Shmyrev <> +2005-06-05 Nickolay V. Shmyrev * shell/ev-stock-icons.c: * shell/ev-stock-icons.h: diff --git a/po/POTFILES.in b/po/POTFILES.in index 141cdf70..7ff011d1 100644 --- a/po/POTFILES.in +++ b/po/POTFILES.in @@ -20,13 +20,13 @@ ps/gsdefaults.c ps/ps-document.c shell/eggfindbar.c shell/ev-application.c -shell/ev-attachment-bar.c shell/ev-page-action.c shell/ev-password.c shell/ev-password-view.c shell/ev-print-job.c shell/ev-properties-dialog.c shell/ev-properties-fonts.c +shell/ev-sidebar-attachments.c shell/ev-sidebar-links.c shell/ev-sidebar-thumbnails.c shell/ev-view-accessible.c diff --git a/properties/Makefile.am b/properties/Makefile.am index fab35143..b4ef6f05 100644 --- a/properties/Makefile.am +++ b/properties/Makefile.am @@ -36,7 +36,7 @@ if ENABLE_DJVU libevince_properties_page_la_LIBADD += $(DJVU_LIBS) endif -if ENABLE_DJVU +if ENABLE_DVI libevince_properties_page_la_LIBADD += -lkpathsea endif diff --git a/shell/Makefile.am b/shell/Makefile.am index 80764d29..4712686e 100644 --- a/shell/Makefile.am +++ b/shell/Makefile.am @@ -55,14 +55,14 @@ evince_SOURCES= \ ev-window-title.h \ ev-sidebar.c \ ev-sidebar.h \ + ev-sidebar-attachments.c \ + ev-sidebar-attachments.h \ ev-sidebar-links.c \ ev-sidebar-links.h \ ev-sidebar-page.c \ ev-sidebar-page.h \ ev-sidebar-thumbnails.c \ ev-sidebar-thumbnails.h \ - ev-attachment-bar.c \ - ev-attachment-bar.h \ ev-stock-icons.c \ ev-stock-icons.h \ main.c @@ -87,7 +87,7 @@ if ENABLE_DJVU evince_LDADD += $(DJVU_LIBS) endif -if ENABLE_DJVU +if ENABLE_DVI evince_LDADD += -lkpathsea endif diff --git a/shell/ev-attachment-bar.h b/shell/ev-attachment-bar.h deleted file mode 100644 index 4099067f..00000000 --- a/shell/ev-attachment-bar.h +++ /dev/null @@ -1,66 +0,0 @@ -/* ev-attachment-bar.h - * this file is part of evince, a gnome document viewer - * - * Copyright (C) 2006 Carlos Garcia Campos - * - * Author: - * Carlos Garcia Campos - * - * Evince is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 of the License, or - * (at your option) any later version. - * - * Evince is distributed in the hope that it will be useful, but - * WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA. - */ - -#ifndef __EV_ATTACHMENT_BAR_H__ -#define __EV_ATTACHMENT_BAR_H__ - -#include -#include "ev-attachment.h" -#include "ev-document.h" - -G_BEGIN_DECLS - -typedef struct _EvAttachmentBar EvAttachmentBar; -typedef struct _EvAttachmentBarClass EvAttachmentBarClass; -typedef struct _EvAttachmentBarPrivate EvAttachmentBarPrivate; - -#define EV_TYPE_ATTACHMENT_BAR (ev_attachment_bar_get_type()) -#define EV_ATTACHMENT_BAR(object) (G_TYPE_CHECK_INSTANCE_CAST((object), EV_TYPE_ATTACHMENT_BAR, EvAttachmentBar)) -#define EV_ATTACHMENT_BAR_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST((klass), EV_TYPE_ATTACHMENT_BAR, EvAttachmentBarClass)) -#define EV_IS_ATTACHMENT_BAR(object) (G_TYPE_CHECK_INSTANCE_TYPE((object), EV_TYPE_ATTACHMENT_BAR)) -#define EV_IS_ATTACHMENT_BAR_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE((klass), EV_TYPE_ATTACHMENT_BAR)) -#define EV_ATTACHMENT_BAR_GET_CLASS(object) (G_TYPE_INSTANCE_GET_CLASS((object), EV_TYPE_ATTACHMENT_BAR, EvAttachmentBarClass)) - -struct _EvAttachmentBar { - GtkExpander base_instance; - - EvAttachmentBarPrivate *priv; -}; - -struct _EvAttachmentBarClass { - GtkExpanderClass base_class; - - /* Signals */ - void (*popup_menu) (EvAttachmentBar *ev_attachbar, - EvAttachment *attachment); -}; - -GType ev_attachment_bar_get_type (void) G_GNUC_CONST; -GtkWidget *ev_attachment_bar_new (void); - -void ev_attachment_bar_set_document (EvAttachmentBar *ev_attachbar, - EvDocument *document); - -G_END_DECLS - -#endif /* __EV_ATTACHMENT_BAR_H__ */ diff --git a/shell/ev-attachment-bar.c b/shell/ev-sidebar-attachments.c similarity index 73% rename from shell/ev-attachment-bar.c rename to shell/ev-sidebar-attachments.c index cdeba899..aac63cf7 100644 --- a/shell/ev-attachment-bar.c +++ b/shell/ev-sidebar-attachments.c @@ -1,4 +1,4 @@ -/* ev-attachment-bar.c +/* ev-sidebar-attachments.c * this file is part of evince, a gnome document viewer * * Copyright (C) 2006 Carlos Garcia Campos @@ -31,9 +31,8 @@ #include #include -#include "ev-attachment-bar.h" - -#define MIN_HEIGHT 92 +#include "ev-sidebar-attachments.h" +#include "ev-sidebar-page.h" enum { COLUMN_ICON, @@ -43,6 +42,12 @@ enum { N_COLS }; + +enum { + PROP_0, + PROP_WIDGET, +}; + enum { SIGNAL_POPUP_MENU, N_SIGNALS @@ -54,8 +59,7 @@ static const GtkTargetEntry drag_targets[] = { static guint signals[N_SIGNALS]; -struct _EvAttachmentBarPrivate { - GtkWidget *label; +struct _EvSidebarAttachmentsPrivate { GtkWidget *icon_view; GtkListStore *model; @@ -64,14 +68,21 @@ struct _EvAttachmentBarPrivate { GHashTable *icon_cache; }; -G_DEFINE_TYPE (EvAttachmentBar, ev_attachment_bar, GTK_TYPE_EXPANDER) +static void ev_sidebar_attachments_page_iface_init (EvSidebarPageIface *iface); + +G_DEFINE_TYPE_EXTENDED (EvSidebarAttachments, + ev_sidebar_attachments, + GTK_TYPE_VBOX, + 0, + G_IMPLEMENT_INTERFACE (EV_TYPE_SIDEBAR_PAGE, + ev_sidebar_attachments_page_iface_init)) -#define EV_ATTACHMENT_BAR_GET_PRIVATE(object) \ - (G_TYPE_INSTANCE_GET_PRIVATE ((object), EV_TYPE_ATTACHMENT_BAR, EvAttachmentBarPrivate)) +#define EV_SIDEBAR_ATTACHMENTS_GET_PRIVATE(object) \ + (G_TYPE_INSTANCE_GET_PRIVATE ((object), EV_TYPE_SIDEBAR_ATTACHMENTS, EvSidebarAttachmentsPrivate)) /* Icon cache */ static void -ev_attachment_bar_icon_cache_add (EvAttachmentBar *ev_attachbar, +ev_sidebar_attachments_icon_cache_add (EvSidebarAttachments *ev_attachbar, const gchar *mime_type, const GdkPixbuf *pixbuf) { @@ -106,7 +117,7 @@ icon_theme_get_pixbuf_from_mime_type (GtkIconTheme *icon_theme, } static GdkPixbuf * -ev_attachment_bar_icon_cache_get (EvAttachmentBar *ev_attachbar, +ev_sidebar_attachments_icon_cache_get (EvSidebarAttachments *ev_attachbar, const gchar *mime_type) { GdkPixbuf *pixbuf = NULL; @@ -123,7 +134,7 @@ ev_attachment_bar_icon_cache_get (EvAttachmentBar *ev_attachbar, mime_type); if (GDK_IS_PIXBUF (pixbuf)) - ev_attachment_bar_icon_cache_add (ev_attachbar, + ev_sidebar_attachments_icon_cache_add (ev_attachbar, mime_type, pixbuf); @@ -133,14 +144,14 @@ ev_attachment_bar_icon_cache_get (EvAttachmentBar *ev_attachbar, static gboolean icon_cache_update_icon (gchar *key, GdkPixbuf *value, - EvAttachmentBar *ev_attachbar) + EvSidebarAttachments *ev_attachbar) { GdkPixbuf *pixbuf = NULL; pixbuf = icon_theme_get_pixbuf_from_mime_type (ev_attachbar->priv->icon_theme, key); - ev_attachment_bar_icon_cache_add (ev_attachbar, + ev_sidebar_attachments_icon_cache_add (ev_attachbar, key, pixbuf); @@ -148,35 +159,15 @@ icon_cache_update_icon (gchar *key, } static void -ev_attachment_bar_icon_cache_refresh (EvAttachmentBar *ev_attachbar) +ev_sidebar_attachments_icon_cache_refresh (EvSidebarAttachments *ev_attachbar) { g_hash_table_foreach_remove (ev_attachbar->priv->icon_cache, (GHRFunc) icon_cache_update_icon, ev_attachbar); } -static void -ev_attachment_bar_toggled (GObject *object, - GParamSpec *param_spec, - gpointer user_data) -{ - EvAttachmentBar *attachbar = EV_ATTACHMENT_BAR (object); - GtkExpander *expander = GTK_EXPANDER (object); - - if (!attachbar->priv->label) - return; - - if (gtk_expander_get_expanded (expander)) { - gtk_label_set_text (GTK_LABEL (attachbar->priv->label), - _("Hide attachments bar")); - } else { - gtk_label_set_text (GTK_LABEL (attachbar->priv->label), - _("Show attachments bar")); - } -} - static EvAttachment * -ev_attachment_bar_get_attachment_at_pos (EvAttachmentBar *ev_attachbar, +ev_sidebar_attachments_get_attachment_at_pos (EvSidebarAttachments *ev_attachbar, gint x, gint y) { @@ -205,7 +196,7 @@ ev_attachment_bar_get_attachment_at_pos (EvAttachmentBar *ev_attachbar, } static gboolean -ev_attachment_bar_popup_menu_show (EvAttachmentBar *ev_attachbar, +ev_sidebar_attachments_popup_menu_show (EvSidebarAttachments *ev_attachbar, gint x, gint y) { @@ -260,18 +251,18 @@ ev_attachment_bar_popup_menu_show (EvAttachmentBar *ev_attachbar, } static gboolean -ev_attachment_bar_popup_menu (GtkWidget *widget) +ev_sidebar_attachments_popup_menu (GtkWidget *widget) { - EvAttachmentBar *ev_attachbar = EV_ATTACHMENT_BAR (widget); + EvSidebarAttachments *ev_attachbar = EV_SIDEBAR_ATTACHMENTS (widget); gint x, y; gtk_widget_get_pointer (widget, &x, &y); - return ev_attachment_bar_popup_menu_show (ev_attachbar, x, y); + return ev_sidebar_attachments_popup_menu_show (ev_attachbar, x, y); } static gboolean -ev_attachment_bar_button_press (EvAttachmentBar *ev_attachbar, +ev_sidebar_attachments_button_press (EvSidebarAttachments *ev_attachbar, GdkEventButton *event, GtkWidget *icon_view) { @@ -288,7 +279,7 @@ ev_attachment_bar_button_press (EvAttachmentBar *ev_attachbar, GError *error = NULL; EvAttachment *attachment; - attachment = ev_attachment_bar_get_attachment_at_pos (ev_attachbar, + attachment = ev_sidebar_attachments_get_attachment_at_pos (ev_attachbar, event->x, event->y); if (!attachment) @@ -307,32 +298,20 @@ ev_attachment_bar_button_press (EvAttachmentBar *ev_attachbar, } break; case 3: - return ev_attachment_bar_popup_menu_show (ev_attachbar, event->x, event->y); + return ev_sidebar_attachments_popup_menu_show (ev_attachbar, event->x, event->y); } return FALSE; } -static gboolean -ev_attachment_bar_focus_in (GtkWidget *widget, - GdkEventFocus *event) -{ - EvAttachmentBar *ev_attachbar = EV_ATTACHMENT_BAR (widget); - - if (gtk_expander_get_expanded (GTK_EXPANDER (ev_attachbar))) - gtk_widget_grab_focus (ev_attachbar->priv->icon_view); - - return TRUE; -} - static void -ev_attachment_bar_update_icons (EvAttachmentBar *ev_attachbar, +ev_sidebar_attachments_update_icons (EvSidebarAttachments *ev_attachbar, gpointer user_data) { GtkTreeIter iter; gboolean valid; - ev_attachment_bar_icon_cache_refresh (ev_attachbar); + ev_sidebar_attachments_icon_cache_refresh (ev_attachbar); valid = gtk_tree_model_get_iter_first ( GTK_TREE_MODEL (ev_attachbar->priv->model), @@ -352,7 +331,7 @@ ev_attachment_bar_update_icons (EvAttachmentBar *ev_attachbar, if (attachment) g_object_unref (attachment); - pixbuf = ev_attachment_bar_icon_cache_get (ev_attachbar, + pixbuf = ev_sidebar_attachments_icon_cache_get (ev_attachbar, mime_type); gtk_list_store_set (ev_attachbar->priv->model, &iter, @@ -366,14 +345,14 @@ ev_attachment_bar_update_icons (EvAttachmentBar *ev_attachbar, } static void -ev_attachment_bar_drag_data_get (GtkWidget *widget, +ev_sidebar_attachments_drag_data_get (GtkWidget *widget, GdkDragContext *drag_context, GtkSelectionData *data, guint info, guint time, gpointer user_data) { - EvAttachmentBar *ev_attachbar = EV_ATTACHMENT_BAR (user_data); + EvSidebarAttachments *ev_attachbar = EV_SIDEBAR_ATTACHMENTS (user_data); GString *uri_list; gchar *uris = NULL; GList *selected = NULL, *l; @@ -434,9 +413,30 @@ ev_attachment_bar_drag_data_get (GtkWidget *widget, } static void -ev_attachment_bar_destroy (GtkObject *object) +ev_sidebar_attachments_get_property (GObject *object, + guint prop_id, + GValue *value, + GParamSpec *pspec) +{ + EvSidebarAttachments *ev_sidebar_attachments; + + ev_sidebar_attachments = EV_SIDEBAR_ATTACHMENTS (object); + + switch (prop_id) + { + case PROP_WIDGET: + g_value_set_object (value, ev_sidebar_attachments->priv->icon_view); + break; + default: + G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); + break; + } +} + +static void +ev_sidebar_attachments_destroy (GtkObject *object) { - EvAttachmentBar *ev_attachbar = EV_ATTACHMENT_BAR (object); + EvSidebarAttachments *ev_attachbar = EV_SIDEBAR_ATTACHMENTS (object); if (ev_attachbar->priv->model) { g_object_unref (ev_attachbar->priv->model); @@ -448,11 +448,11 @@ ev_attachment_bar_destroy (GtkObject *object) ev_attachbar->priv->icon_cache = NULL; } - (* GTK_OBJECT_CLASS (ev_attachment_bar_parent_class)->destroy) (object); + (* GTK_OBJECT_CLASS (ev_sidebar_attachments_parent_class)->destroy) (object); } static void -ev_attachment_bar_class_init (EvAttachmentBarClass *ev_attachbar_class) +ev_sidebar_attachments_class_init (EvSidebarAttachmentsClass *ev_attachbar_class) { GObjectClass *g_object_class; GtkObjectClass *gtk_object_class; @@ -462,30 +462,34 @@ ev_attachment_bar_class_init (EvAttachmentBarClass *ev_attachbar_class) gtk_object_class = GTK_OBJECT_CLASS (ev_attachbar_class); gtk_widget_class = GTK_WIDGET_CLASS (ev_attachbar_class); - gtk_object_class->destroy = ev_attachment_bar_destroy; - gtk_widget_class->popup_menu = ev_attachment_bar_popup_menu; - gtk_widget_class->focus_in_event = ev_attachment_bar_focus_in; + g_object_class->get_property = ev_sidebar_attachments_get_property; + gtk_object_class->destroy = ev_sidebar_attachments_destroy; + gtk_widget_class->popup_menu = ev_sidebar_attachments_popup_menu; - g_type_class_add_private (g_object_class, sizeof (EvAttachmentBarPrivate)); + g_type_class_add_private (g_object_class, sizeof (EvSidebarAttachmentsPrivate)); /* Signals */ signals[SIGNAL_POPUP_MENU] = g_signal_new ("popup", G_TYPE_FROM_CLASS (g_object_class), G_SIGNAL_RUN_LAST | G_SIGNAL_ACTION, - G_STRUCT_OFFSET (EvAttachmentBarClass, popup_menu), + G_STRUCT_OFFSET (EvSidebarAttachmentsClass, popup_menu), NULL, NULL, g_cclosure_marshal_VOID__POINTER, G_TYPE_NONE, 1, G_TYPE_POINTER); + + g_object_class_override_property (g_object_class, + PROP_WIDGET, + "main-widget"); } static void -ev_attachment_bar_init (EvAttachmentBar *ev_attachbar) +ev_sidebar_attachments_init (EvSidebarAttachments *ev_attachbar) { GtkWidget *swindow; - ev_attachbar->priv = EV_ATTACHMENT_BAR_GET_PRIVATE (ev_attachbar); + ev_attachbar->priv = EV_SIDEBAR_ATTACHMENTS_GET_PRIVATE (ev_attachbar); swindow = gtk_scrolled_window_new (NULL, NULL); gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (swindow), @@ -493,8 +497,6 @@ ev_attachment_bar_init (EvAttachmentBar *ev_attachbar) GTK_POLICY_AUTOMATIC); gtk_scrolled_window_set_shadow_type (GTK_SCROLLED_WINDOW (swindow), GTK_SHADOW_IN); - gtk_widget_set_size_request (swindow, -1, MIN_HEIGHT); - /* Data Model */ ev_attachbar->priv->model = gtk_list_store_new (N_COLS, GDK_TYPE_PIXBUF, @@ -514,7 +516,7 @@ ev_attachment_bar_init (EvAttachmentBar *ev_attachbar) NULL); g_signal_connect_swapped (G_OBJECT (ev_attachbar->priv->icon_view), "button-press-event", - G_CALLBACK (ev_attachment_bar_button_press), + G_CALLBACK (ev_sidebar_attachments_button_press), (gpointer) ev_attachbar); gtk_container_add (GTK_CONTAINER (swindow), @@ -529,7 +531,7 @@ ev_attachment_bar_init (EvAttachmentBar *ev_attachbar) ev_attachbar->priv->icon_theme = gtk_icon_theme_get_default (); g_signal_connect_swapped (G_OBJECT (ev_attachbar->priv->icon_theme), "changed", - G_CALLBACK (ev_attachment_bar_update_icons), + G_CALLBACK (ev_sidebar_attachments_update_icons), (gpointer) ev_attachbar); /* Icon Cache */ @@ -549,56 +551,25 @@ ev_attachment_bar_init (EvAttachmentBar *ev_attachbar) #endif g_signal_connect (G_OBJECT (ev_attachbar->priv->icon_view), "drag-data-get", - G_CALLBACK (ev_attachment_bar_drag_data_get), - (gpointer) ev_attachbar); - - g_signal_connect (G_OBJECT (ev_attachbar), - "notify::expanded", - G_CALLBACK (ev_attachment_bar_toggled), - NULL); - -} - -static void -ev_attachment_bar_setup (EvAttachmentBar *ev_attachbar) -{ - GtkWidget *hbox; - GtkWidget *image; - - hbox = gtk_hbox_new (FALSE, 6); - image = gtk_image_new_from_stock ("gnome-stock-attach", - GTK_ICON_SIZE_MENU); - gtk_box_pack_start (GTK_BOX (hbox), - image, - FALSE, FALSE, 0); - gtk_widget_show (image); - - ev_attachbar->priv->label = gtk_label_new (_("Show attachments bar")); - gtk_box_pack_start (GTK_BOX (hbox), - ev_attachbar->priv->label, - FALSE, FALSE, 0); - gtk_widget_show (ev_attachbar->priv->label); - - gtk_expander_set_label_widget (GTK_EXPANDER (ev_attachbar), hbox); - gtk_widget_show (hbox); + G_CALLBACK (ev_sidebar_attachments_drag_data_get), + (gpointer) ev_attachbar); } GtkWidget * -ev_attachment_bar_new (void) +ev_sidebar_attachments_new (void) { GtkWidget *ev_attachbar; - ev_attachbar = g_object_new (EV_TYPE_ATTACHMENT_BAR, NULL); - - ev_attachment_bar_setup (EV_ATTACHMENT_BAR (ev_attachbar)); + ev_attachbar = g_object_new (EV_TYPE_SIDEBAR_ATTACHMENTS, NULL); return ev_attachbar; } -void -ev_attachment_bar_set_document (EvAttachmentBar *ev_attachbar, - EvDocument *document) +static void +ev_sidebar_attachments_set_document (EvSidebarPage *page, + EvDocument *document) { + EvSidebarAttachments *ev_attachbar = EV_SIDEBAR_ATTACHMENTS (page); GList *attachments = NULL; GList *l; @@ -618,7 +589,7 @@ ev_attachment_bar_set_document (EvAttachmentBar *ev_attachbar, attachment = EV_ATTACHMENT (l->data); mime_type = ev_attachment_get_mime_type (attachment); - pixbuf = ev_attachment_bar_icon_cache_get (ev_attachbar, + pixbuf = ev_sidebar_attachments_icon_cache_get (ev_attachbar, mime_type); gtk_list_store_append (ev_attachbar->priv->model, &iter); @@ -633,3 +604,25 @@ ev_attachment_bar_set_document (EvAttachmentBar *ev_attachbar, g_list_free (attachments); } + +static gboolean +ev_sidebar_attachments_support_document (EvSidebarPage *sidebar_page, + EvDocument *document) +{ + return ev_document_has_attachments (document); +} + +static const gchar* +ev_sidebar_attachments_get_label (EvSidebarPage *sidebar_page) +{ + return _("Attachments"); +} + +static void +ev_sidebar_attachments_page_iface_init (EvSidebarPageIface *iface) +{ + iface->support_document = ev_sidebar_attachments_support_document; + iface->set_document = ev_sidebar_attachments_set_document; + iface->get_label = ev_sidebar_attachments_get_label; +} + diff --git a/shell/ev-sidebar-attachments.h b/shell/ev-sidebar-attachments.h new file mode 100644 index 00000000..9f34b0c2 --- /dev/null +++ b/shell/ev-sidebar-attachments.h @@ -0,0 +1,62 @@ +/* ev-sidebar-attachments.h + * this file is part of evince, a gnome document viewer + * + * Copyright (C) 2006 Carlos Garcia Campos + * + * Author: + * Carlos Garcia Campos + * + * Evince is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * Evince is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA. + */ + +#ifndef __EV_SIDEBAR_ATTACHMENTS_H__ +#define __EV_SIDEBAR_ATTACHMENTS_H__ + +#include "ev-attachment.h" +#include "ev-document.h" + +G_BEGIN_DECLS + +typedef struct _EvSidebarAttachments EvSidebarAttachments; +typedef struct _EvSidebarAttachmentsClass EvSidebarAttachmentsClass; +typedef struct _EvSidebarAttachmentsPrivate EvSidebarAttachmentsPrivate; + +#define EV_TYPE_SIDEBAR_ATTACHMENTS (ev_sidebar_attachments_get_type()) +#define EV_SIDEBAR_ATTACHMENTS(object) (G_TYPE_CHECK_INSTANCE_CAST((object), EV_TYPE_SIDEBAR_ATTACHMENTS, EvSidebarAttachments)) +#define EV_SIDEBAR_ATTACHMENTS_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST((klass), EV_TYPE_SIDEBAR_ATTACHMENTS, EvSidebarAttachmentsClass)) +#define EV_IS_SIDEBAR_ATTACHMENTS(object) (G_TYPE_CHECK_INSTANCE_TYPE((object), EV_TYPE_SIDEBAR_ATTACHMENTS)) +#define EV_IS_SIDEBAR_ATTACHMENTS_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE((klass), EV_TYPE_SIDEBAR_ATTACHMENTS)) +#define EV_SIDEBAR_ATTACHMENTS_GET_CLASS(object) (G_TYPE_INSTANCE_GET_CLASS((object), EV_TYPE_SIDEBAR_ATTACHMENTS, EvSidebarAttachmentsClass)) + +struct _EvSidebarAttachments { + GtkVBox base_instance; + + EvSidebarAttachmentsPrivate *priv; +}; + +struct _EvSidebarAttachmentsClass { + GtkVBoxClass base_class; + + /* Signals */ + void (*popup_menu) (EvSidebarAttachments *ev_attachbar, + EvAttachment *attachment); +}; + +GType ev_sidebar_attachments_get_type (void) G_GNUC_CONST; +GtkWidget *ev_sidebar_attachments_new (void); + +G_END_DECLS + +#endif /* __EV_SIDEBAR_ATTACHMENTS_H__ */ diff --git a/shell/ev-window.c b/shell/ev-window.c index 169eb799..1bfb26f6 100644 --- a/shell/ev-window.c +++ b/shell/ev-window.c @@ -33,11 +33,11 @@ #include "ev-page-action.h" #include "ev-sidebar.h" #include "ev-sidebar-links.h" +#include "ev-sidebar-attachments.h" #include "ev-sidebar-thumbnails.h" #include "ev-view.h" #include "ev-password.h" #include "ev-password-view.h" -#include "ev-attachment-bar.h" #include "ev-properties-dialog.h" #include "ev-ps-exporter.h" #include "ev-document-thumbnails.h" @@ -92,7 +92,6 @@ typedef enum { EV_CHROME_RAISE_TOOLBAR = 1 << 3, EV_CHROME_FULLSCREEN_TOOLBAR = 1 << 4, EV_CHROME_SIDEBAR = 1 << 5, - EV_CHROME_ATTACHBAR = 1 << 6, EV_CHROME_NORMAL = EV_CHROME_MENUBAR | EV_CHROME_TOOLBAR | EV_CHROME_SIDEBAR } EvChrome; @@ -112,7 +111,7 @@ struct _EvWindowPrivate { GtkWidget *password_view; GtkWidget *sidebar_thumbs; GtkWidget *sidebar_links; - GtkWidget *attachment_bar; + GtkWidget *sidebar_attachments; /* Dialogs */ GtkWidget *properties; @@ -178,6 +177,7 @@ static const GtkTargetEntry ev_drop_types[] = { #define SIDEBAR_DEFAULT_SIZE 132 #define LINKS_SIDEBAR_ID "links" #define THUMBNAILS_SIDEBAR_ID "thumbnails" +#define ATTACHMENTS_SIDEBAR_ID "attachments" static void ev_window_update_actions (EvWindow *ev_window); static void ev_window_update_fullscreen_popup (EvWindow *window); @@ -419,7 +419,7 @@ static void update_chrome_visibility (EvWindow *window) { EvWindowPrivate *priv = window->priv; - gboolean menubar, toolbar, findbar, fullscreen_toolbar, sidebar, attachbar; + gboolean menubar, toolbar, findbar, fullscreen_toolbar, sidebar; gboolean fullscreen_mode, presentation, fullscreen; presentation = ev_view_get_presentation (EV_VIEW (priv->view)); @@ -433,13 +433,11 @@ update_chrome_visibility (EvWindow *window) (priv->chrome & EV_CHROME_RAISE_TOOLBAR) != 0) && fullscreen; findbar = (priv->chrome & EV_CHROME_FINDBAR) != 0; sidebar = (priv->chrome & EV_CHROME_SIDEBAR) != 0 && !fullscreen_mode; - attachbar = (priv->chrome & EV_CHROME_ATTACHBAR) != 0 && !fullscreen_mode; set_widget_visibility (priv->menubar, menubar); set_widget_visibility (priv->toolbar_dock, toolbar); set_widget_visibility (priv->find_bar, findbar); set_widget_visibility (priv->sidebar, sidebar); - set_widget_visibility (priv->attachment_bar, attachbar); ev_window_set_action_sensitive (window, "EditToolbar", toolbar); gtk_widget_set_sensitive (priv->menubar, menubar); @@ -626,6 +624,7 @@ setup_sidebar_from_metadata (EvWindow *window, EvDocument *document) GtkWidget *sidebar = window->priv->sidebar; GtkWidget *links = window->priv->sidebar_links; GtkWidget *thumbs = window->priv->sidebar_thumbs; + GtkWidget *attachments = window->priv->sidebar_attachments; GValue sidebar_size = { 0, }; GValue sidebar_page = { 0, }; GValue sidebar_visibility = { 0, }; @@ -638,9 +637,11 @@ setup_sidebar_from_metadata (EvWindow *window, EvDocument *document) if (ev_metadata_manager_get (uri, "sidebar_page", &sidebar_page, FALSE)) { const char *page_id = g_value_get_string (&sidebar_page); - if (strcmp (page_id, "links") == 0 && ev_sidebar_page_support_document (EV_SIDEBAR_PAGE (links), document)) { + if (strcmp (page_id, LINKS_SIDEBAR_ID) == 0 && ev_sidebar_page_support_document (EV_SIDEBAR_PAGE (links), document)) { ev_sidebar_set_page (EV_SIDEBAR (sidebar), links); - } else if (strcmp (page_id, "thumbnails") && ev_sidebar_page_support_document (EV_SIDEBAR_PAGE (thumbs), document)) { + } else if (strcmp (page_id, THUMBNAILS_SIDEBAR_ID) && ev_sidebar_page_support_document (EV_SIDEBAR_PAGE (thumbs), document)) { + ev_sidebar_set_page (EV_SIDEBAR (sidebar), thumbs); + } else if (strcmp (page_id, ATTACHMENTS_SIDEBAR_ID) && ev_sidebar_page_support_document (EV_SIDEBAR_PAGE (attachments), document)) { ev_sidebar_set_page (EV_SIDEBAR (sidebar), thumbs); } } else { @@ -764,7 +765,6 @@ ev_window_setup_document (EvWindow *ev_window) EvDocument *document; EvView *view = EV_VIEW (ev_window->priv->view); EvSidebar *sidebar = EV_SIDEBAR (ev_window->priv->sidebar); - EvAttachmentBar *attachbar = EV_ATTACHMENT_BAR (ev_window->priv->attachment_bar); GtkAction *action; document = ev_window->priv->document; @@ -785,11 +785,6 @@ ev_window_setup_document (EvWindow *ev_window) } ev_window_set_page_mode (ev_window, PAGE_MODE_DOCUMENT); - ev_attachment_bar_set_document (attachbar, document); - update_chrome_flag (ev_window, EV_CHROME_ATTACHBAR, - (ev_window->priv->document && - ev_document_has_attachments (ev_window->priv->document))); - ev_window_title_set_document (ev_window->priv->title, document); ev_window_title_set_uri (ev_window->priv->title, ev_window->priv->uri); @@ -2460,6 +2455,8 @@ ev_window_sidebar_current_page_changed_cb (EvSidebar *ev_sidebar, id = LINKS_SIDEBAR_ID; } else if (current_page == ev_window->priv->sidebar_thumbs) { id = THUMBNAILS_SIDEBAR_ID; + } else if (current_page == ev_window->priv->sidebar_attachments) { + id = ATTACHMENTS_SIDEBAR_ID; } else { g_assert_not_reached(); } @@ -2490,18 +2487,6 @@ ev_window_sidebar_visibility_changed_cb (EvSidebar *ev_sidebar, } } -static void -ev_window_attachment_bar_toggled_cb (EvAttachmentBar *ev_attachbar, - GParamSpec *param_spec, - EvWindow *ev_window) -{ - if (gtk_expander_get_expanded (GTK_EXPANDER (ev_attachbar))) { - gtk_widget_grab_focus (GTK_WIDGET (ev_attachbar)); - } else { - gtk_widget_grab_focus (ev_window->priv->view); - } -} - static gboolean view_menu_popup_cb (EvView *view, EvLink *link, @@ -2565,7 +2550,7 @@ view_menu_popup_cb (EvView *view, } static gboolean -attachment_bar_menu_popup_cb (EvAttachmentBar *attachbar, +attachment_bar_menu_popup_cb (EvSidebarAttachments *attachbar, GList *attach_list, EvWindow *ev_window) { @@ -3596,6 +3581,27 @@ ev_window_init (EvWindow *ev_window) gtk_widget_show (ev_window->priv->sidebar); /* Stub sidebar, for now */ + + sidebar_widget = ev_sidebar_thumbnails_new (); + ev_window->priv->sidebar_thumbs = sidebar_widget; + g_signal_connect (sidebar_widget, + "notify::main-widget", + G_CALLBACK (sidebar_page_main_widget_update_cb), + ev_window); + sidebar_page_main_widget_update_cb (G_OBJECT (sidebar_widget), NULL, ev_window); + gtk_widget_show (sidebar_widget); + ev_sidebar_add_page (EV_SIDEBAR (ev_window->priv->sidebar), + sidebar_widget); + + sidebar_widget = ev_sidebar_attachments_new (); + ev_window->priv->sidebar_attachments = sidebar_widget; + g_signal_connect_object (sidebar_widget, + "popup", + G_CALLBACK (attachment_bar_menu_popup_cb), + ev_window, 0); + ev_sidebar_add_page (EV_SIDEBAR (ev_window->priv->sidebar), + sidebar_widget); + sidebar_widget = ev_sidebar_links_new (); ev_window->priv->sidebar_links = sidebar_widget; g_signal_connect (sidebar_widget, @@ -3611,18 +3617,6 @@ ev_window_init (EvWindow *ev_window) ev_sidebar_add_page (EV_SIDEBAR (ev_window->priv->sidebar), sidebar_widget); - sidebar_widget = ev_sidebar_thumbnails_new (); - ev_window->priv->sidebar_thumbs = sidebar_widget; - g_signal_connect (sidebar_widget, - "notify::main-widget", - G_CALLBACK (sidebar_page_main_widget_update_cb), - ev_window); - sidebar_page_main_widget_update_cb (G_OBJECT (sidebar_widget), NULL, ev_window); - gtk_widget_show (sidebar_widget); - ev_sidebar_add_page (EV_SIDEBAR (ev_window->priv->sidebar), - sidebar_widget); - - ev_window->priv->scrolled_window = GTK_WIDGET (g_object_new (GTK_TYPE_SCROLLED_WINDOW, "shadow-type", GTK_SHADOW_IN, @@ -3654,16 +3648,6 @@ ev_window_init (EvWindow *ev_window) gtk_widget_show (ev_window->priv->view); gtk_widget_show (ev_window->priv->password_view); - /* Attachments Bar */ - ev_window->priv->attachment_bar = ev_attachment_bar_new (); - gtk_box_pack_end (GTK_BOX (ev_window->priv->main_box), - ev_window->priv->attachment_bar, - FALSE, TRUE, 0); - g_signal_connect_object (ev_window->priv->attachment_bar, - "popup", - G_CALLBACK (attachment_bar_menu_popup_cb), - ev_window, 0); - /* Find Bar */ ev_window->priv->find_bar = egg_find_bar_new (); gtk_box_pack_end (GTK_BOX (ev_window->priv->main_box), @@ -3716,12 +3700,6 @@ ev_window_init (EvWindow *ev_window) G_CALLBACK (ev_window_sidebar_current_page_changed_cb), ev_window); - /* Connect attachment bar sgignals */ - g_signal_connect (G_OBJECT (ev_window->priv->attachment_bar), - "notify::expanded", - G_CALLBACK (ev_window_attachment_bar_toggled_cb), - ev_window); - /* Connect to find bar signals */ g_signal_connect (ev_window->priv->find_bar, "previous", diff --git a/thumbnailer/Makefile.am b/thumbnailer/Makefile.am index 3bce3f91..981172b7 100644 --- a/thumbnailer/Makefile.am +++ b/thumbnailer/Makefile.am @@ -24,7 +24,7 @@ if ENABLE_DJVU evince_thumbnailer_LDADD += $(DJVU_LIBS) endif -if ENABLE_DJVU +if ENABLE_DVI evince_thumbnailer_LDADD += -lkpathsea endif -- 2.43.0