diff options
Diffstat (limited to 'shell/e-shell-folder-title-bar.c')
-rw-r--r-- | shell/e-shell-folder-title-bar.c | 177 |
1 files changed, 83 insertions, 94 deletions
diff --git a/shell/e-shell-folder-title-bar.c b/shell/e-shell-folder-title-bar.c index 7c6e2384d8..ee1fb91dc6 100644 --- a/shell/e-shell-folder-title-bar.c +++ b/shell/e-shell-folder-title-bar.c @@ -25,10 +25,11 @@ #endif #include <gtk/gtklabel.h> -#include <gtk/gtkimage.h> +#include <gtk/gtkpixmap.h> #include <gtk/gtkrc.h> #include <gtk/gtksignal.h> #include <gtk/gtktogglebutton.h> +#include <libgnome/gnome-defs.h> #include <libgnome/gnome-i18n.h> #include <gdk-pixbuf/gdk-pixbuf.h> @@ -37,7 +38,6 @@ #include "widgets/misc/e-clipped-label.h" #include "e-shell-constants.h" -#include "e-shell-marshal.h" #include "e-shell-folder-title-bar.h" @@ -124,7 +124,7 @@ static const char *right_arrow_xpm[] = { /* Utility functions for managing icons and icon widgets. */ static GtkWidget * -create_image_widget_from_xpm (const char **xpm) +create_pixmap_widget_from_xpm (const char **xpm) { GdkPixbuf *pixbuf; GdkPixmap *pixmap; @@ -135,9 +135,11 @@ create_image_widget_from_xpm (const char **xpm) gdk_pixbuf_render_pixmap_and_mask (pixbuf, &pixmap, &mask, 127); - widget = gtk_image_new_from_pixmap (pixmap, mask); + widget = gtk_pixmap_new (pixmap, mask); gtk_widget_show (widget); + gdk_pixbuf_unref (pixbuf); + return widget; } @@ -156,9 +158,9 @@ new_empty_pixbuf (void) } static GtkWidget * -new_empty_image_widget (void) +new_empty_pixmap_widget (void) { - GtkWidget *image_widget; + GtkWidget *pixmap_widget; GdkPixmap *pixmap; GdkBitmap *mask; GdkPixbuf *empty_pixbuf; @@ -166,11 +168,11 @@ new_empty_image_widget (void) empty_pixbuf = new_empty_pixbuf (); gdk_pixbuf_render_pixmap_and_mask (empty_pixbuf, &pixmap, &mask, 127); - image_widget = gtk_image_new_from_pixmap (pixmap, mask); + pixmap_widget = gtk_pixmap_new (pixmap, mask); - g_object_unref (empty_pixbuf); + gdk_pixbuf_unref (empty_pixbuf); - return image_widget; + return pixmap_widget; } @@ -196,9 +198,12 @@ set_title_bar_label_style (GtkWidget *widget) static int get_max_clipped_label_width (EClippedLabel *clipped_label) { + GdkFont *font; int width; - pango_layout_get_pixel_size (clipped_label->layout, &width, NULL); + font = GTK_WIDGET (clipped_label)->style->font; + + width = gdk_string_width (font, clipped_label->label); width += 2 * GTK_MISC (clipped_label)->xpad; return width; @@ -313,7 +318,7 @@ back_button_clicked_callback (GtkButton *button, folder_title_bar = E_SHELL_FOLDER_TITLE_BAR (data); - g_signal_emit (folder_title_bar, signals[BACK_CLICKED], 0); + gtk_signal_emit (GTK_OBJECT (folder_title_bar), signals[BACK_CLICKED]); } static void @@ -324,15 +329,15 @@ forward_button_clicked_callback (GtkButton *button, folder_title_bar = E_SHELL_FOLDER_TITLE_BAR (data); - g_signal_emit (folder_title_bar, signals[FORWARD_CLICKED], 0); + gtk_signal_emit (GTK_OBJECT (folder_title_bar), signals[FORWARD_CLICKED]); } static void add_navigation_buttons (EShellFolderTitleBar *folder_title_bar) { EShellFolderTitleBarPrivate *priv; - GtkWidget *back_image; - GtkWidget *forward_image; + GtkWidget *back_pixmap; + GtkWidget *forward_pixmap; priv = folder_title_bar->priv; @@ -340,21 +345,21 @@ add_navigation_buttons (EShellFolderTitleBar *folder_title_bar) gtk_button_set_relief (GTK_BUTTON (priv->back_button), GTK_RELIEF_NONE); GTK_WIDGET_UNSET_FLAGS (priv->back_button, GTK_CAN_FOCUS); - back_image = create_image_widget_from_xpm (left_arrow_xpm); - gtk_container_add (GTK_CONTAINER (priv->back_button), back_image); + back_pixmap = create_pixmap_widget_from_xpm (left_arrow_xpm); + gtk_container_add (GTK_CONTAINER (priv->back_button), back_pixmap); - g_signal_connect (priv->back_button, "clicked", - G_CALLBACK (back_button_clicked_callback), folder_title_bar); + gtk_signal_connect (GTK_OBJECT (priv->back_button), "clicked", + GTK_SIGNAL_FUNC (back_button_clicked_callback), folder_title_bar); priv->forward_button = gtk_button_new (); gtk_button_set_relief (GTK_BUTTON (priv->forward_button), GTK_RELIEF_NONE); GTK_WIDGET_UNSET_FLAGS (priv->forward_button, GTK_CAN_FOCUS); - forward_image = create_image_widget_from_xpm (right_arrow_xpm); - gtk_container_add (GTK_CONTAINER (priv->forward_button), forward_image); + forward_pixmap = create_pixmap_widget_from_xpm (right_arrow_xpm); + gtk_container_add (GTK_CONTAINER (priv->forward_button), forward_pixmap); - g_signal_connect (priv->forward_button, "clicked", - G_CALLBACK (forward_button_clicked_callback), folder_title_bar); + gtk_signal_connect (GTK_OBJECT (priv->forward_button), "clicked", + GTK_SIGNAL_FUNC (forward_button_clicked_callback), folder_title_bar); gtk_box_pack_start (GTK_BOX (folder_title_bar), priv->back_button, FALSE, FALSE, 0); gtk_box_pack_start (GTK_BOX (folder_title_bar), priv->forward_button, FALSE, FALSE, 0); @@ -373,33 +378,16 @@ title_button_toggled_cb (GtkToggleButton *title_button, EShellFolderTitleBar *folder_title_bar; folder_title_bar = E_SHELL_FOLDER_TITLE_BAR (data); - - g_signal_emit (folder_title_bar, signals[TITLE_TOGGLED], 0, - gtk_toggle_button_get_active (title_button)); + gtk_signal_emit (GTK_OBJECT (folder_title_bar), + signals[TITLE_TOGGLED], + gtk_toggle_button_get_active (title_button)); } -/* GObject methods. */ - -static void -impl_dispose (GObject *object) -{ - EShellFolderTitleBar *folder_title_bar; - EShellFolderTitleBarPrivate *priv; - - folder_title_bar = E_SHELL_FOLDER_TITLE_BAR (object); - priv = folder_title_bar->priv; - - if (priv->icon != NULL) { - g_object_unref (priv->icon); - priv->icon = NULL; - } - - (* G_OBJECT_CLASS (parent_class)->dispose) (object); -} +/* GtkObject methods. */ static void -impl_finalize (GObject *object) +impl_destroy (GtkObject *object) { EShellFolderTitleBar *folder_title_bar; EShellFolderTitleBarPrivate *priv; @@ -407,9 +395,11 @@ impl_finalize (GObject *object) folder_title_bar = E_SHELL_FOLDER_TITLE_BAR (object); priv = folder_title_bar->priv; + if (priv->icon != NULL) + gdk_pixbuf_unref (priv->icon); g_free (priv); - (* G_OBJECT_CLASS (parent_class)->finalize) (object); + (* GTK_OBJECT_CLASS (parent_class)->destroy) (object); } @@ -457,45 +447,40 @@ impl_size_allocate (GtkWidget *widget, static void class_init (EShellFolderTitleBarClass *klass) { - GObjectClass *object_class; + GtkObjectClass *object_class; GtkWidgetClass *widget_class; - object_class = G_OBJECT_CLASS (klass); - object_class->dispose = impl_dispose; - object_class->finalize = impl_finalize; + object_class = GTK_OBJECT_CLASS (klass); + object_class->destroy = impl_destroy; widget_class = GTK_WIDGET_CLASS (klass); widget_class->size_allocate = impl_size_allocate; - parent_class = g_type_class_ref(PARENT_TYPE); - - signals[TITLE_TOGGLED] - = g_signal_new ("title_toggled", - G_OBJECT_CLASS_TYPE (object_class), - G_SIGNAL_RUN_FIRST, - G_STRUCT_OFFSET (EShellFolderTitleBarClass, title_toggled), - NULL, NULL, - e_shell_marshal_NONE__BOOL, - G_TYPE_NONE, 1, - G_TYPE_BOOLEAN); - - signals[BACK_CLICKED] - = g_signal_new ("back_clicked", - G_OBJECT_CLASS_TYPE (object_class), - G_SIGNAL_RUN_FIRST, - G_STRUCT_OFFSET (EShellFolderTitleBarClass, back_clicked), - NULL, NULL, - e_shell_marshal_NONE__NONE, - G_TYPE_NONE, 0); - - signals[FORWARD_CLICKED] - = g_signal_new ("forward_clicked", - G_OBJECT_CLASS_TYPE (object_class), - G_SIGNAL_RUN_FIRST, - G_STRUCT_OFFSET (EShellFolderTitleBarClass, forward_clicked), - NULL, NULL, - e_shell_marshal_NONE__NONE, - G_TYPE_NONE, 0); + parent_class = gtk_type_class (PARENT_TYPE); + + signals[TITLE_TOGGLED] = gtk_signal_new ("title_toggled", + GTK_RUN_FIRST, + object_class->type, + GTK_SIGNAL_OFFSET (EShellFolderTitleBarClass, title_toggled), + gtk_marshal_NONE__BOOL, + GTK_TYPE_NONE, 1, + GTK_TYPE_BOOL); + + signals[BACK_CLICKED] = gtk_signal_new ("back_clicked", + GTK_RUN_FIRST, + object_class->type, + GTK_SIGNAL_OFFSET (EShellFolderTitleBarClass, back_clicked), + gtk_marshal_NONE__NONE, + GTK_TYPE_NONE, 0); + + signals[FORWARD_CLICKED] = gtk_signal_new ("forward_clicked", + GTK_RUN_FIRST, + object_class->type, + GTK_SIGNAL_OFFSET (EShellFolderTitleBarClass, forward_clicked), + gtk_marshal_NONE__NONE, + GTK_TYPE_NONE, 0); + + gtk_object_class_add_signals (object_class, signals, LAST_SIGNAL); } static void @@ -545,28 +530,28 @@ e_shell_folder_title_bar_construct (EShellFolderTitleBar *folder_title_bar) priv = folder_title_bar->priv; widget = GTK_WIDGET (folder_title_bar); - priv->title_icon = new_empty_image_widget (); + priv->title_icon = new_empty_pixmap_widget (); gtk_misc_set_alignment (GTK_MISC (priv->title_icon), 1.0, .5); gtk_misc_set_padding (GTK_MISC (priv->title_icon), 2, 0); gtk_widget_show (priv->title_icon); - priv->title_label = e_clipped_label_new ("", PANGO_WEIGHT_BOLD, 1.2); + priv->title_label = e_clipped_label_new (""); gtk_misc_set_padding (GTK_MISC (priv->title_label), 0, 0); gtk_misc_set_alignment (GTK_MISC (priv->title_label), 0.0, 0.5); set_title_bar_label_style (priv->title_label); - priv->title_button_label = e_clipped_label_new ("", PANGO_WEIGHT_BOLD, 1.2); + priv->title_button_label = e_clipped_label_new (""); gtk_misc_set_padding (GTK_MISC (priv->title_button_label), 2, 0); gtk_misc_set_alignment (GTK_MISC (priv->title_button_label), 0.0, 0.5); gtk_widget_show (priv->title_button_label); set_title_bar_label_style (priv->title_button_label); - priv->folder_bar_label = e_clipped_label_new ("", PANGO_WEIGHT_NORMAL, 1.0); + priv->folder_bar_label = e_clipped_label_new (""); gtk_misc_set_alignment (GTK_MISC (priv->folder_bar_label), 1.0, 0.5); gtk_widget_show (priv->folder_bar_label); set_title_bar_label_style (priv->folder_bar_label); - priv->title_button_icon = new_empty_image_widget (); + priv->title_button_icon = new_empty_pixmap_widget (); gtk_widget_show (priv->title_button_icon); title_button_hbox = gtk_hbox_new (FALSE, 0); @@ -574,7 +559,7 @@ e_shell_folder_title_bar_construct (EShellFolderTitleBar *folder_title_bar) FALSE, TRUE, 2); gtk_box_pack_start (GTK_BOX (title_button_hbox), priv->title_button_label, TRUE, TRUE, 0); - gtk_box_pack_start (GTK_BOX (title_button_hbox), create_image_widget_from_xpm (down_arrow_xpm), + gtk_box_pack_start (GTK_BOX (title_button_hbox), create_pixmap_widget_from_xpm (down_arrow_xpm), FALSE, TRUE, 2); gtk_widget_show (title_button_hbox); @@ -595,11 +580,11 @@ e_shell_folder_title_bar_construct (EShellFolderTitleBar *folder_title_bar) as the padding is hardcoded in GtkButton too (see CHILD_SPACING in gtkbutton.c). */ gtk_misc_set_padding (GTK_MISC (priv->title_label), - GTK_WIDGET (priv->title_button)->style->xthickness, - GTK_WIDGET (priv->title_button)->style->ythickness + 2); + GTK_WIDGET (priv->title_button)->style->klass->xthickness, + GTK_WIDGET (priv->title_button)->style->klass->ythickness + 2); - g_signal_connect (priv->title_button, "toggled", - G_CALLBACK (title_button_toggled_cb), folder_title_bar); + gtk_signal_connect (GTK_OBJECT (priv->title_button), "toggled", + GTK_SIGNAL_FUNC (title_button_toggled_cb), folder_title_bar); add_navigation_buttons (folder_title_bar); @@ -619,9 +604,13 @@ e_shell_folder_title_bar_new (void) { EShellFolderTitleBar *new; - new = g_object_new (e_shell_folder_title_bar_get_type (), NULL); + gtk_widget_push_colormap (gdk_rgb_get_cmap ()); + gtk_widget_push_visual (gdk_rgb_get_visual ()); + new = gtk_type_new (e_shell_folder_title_bar_get_type ()); e_shell_folder_title_bar_construct (new); + gtk_widget_pop_visual (); + gtk_widget_pop_colormap (); return GTK_WIDGET (new); } @@ -708,20 +697,20 @@ e_shell_folder_title_bar_set_icon (EShellFolderTitleBar *folder_title_bar, if (icon == NULL) { if (priv->icon != NULL) - g_object_unref (priv->icon); + gdk_pixbuf_unref (priv->icon); priv->icon = new_empty_pixbuf (); } else { - g_object_ref (icon); + gdk_pixbuf_ref (icon); if (priv->icon != NULL) - g_object_unref (priv->icon); + gdk_pixbuf_unref (priv->icon); priv->icon = icon; } gdk_pixbuf_render_pixmap_and_mask (priv->icon, &pixmap, &mask, 127); - gtk_image_set_from_pixmap (GTK_IMAGE (priv->title_button_icon), pixmap, mask); + gtk_pixmap_set (GTK_PIXMAP (priv->title_button_icon), pixmap, mask); gdk_pixbuf_render_pixmap_and_mask (priv->icon, &pixmap, &mask, 127); - gtk_image_set_from_pixmap (GTK_IMAGE (priv->title_icon), pixmap, mask); + gtk_pixmap_set (GTK_PIXMAP (priv->title_icon), pixmap, mask); } |