diff options
-rw-r--r-- | mail/ChangeLog | 5 | ||||
-rw-r--r-- | mail/mail-send-recv.c | 24 | ||||
-rw-r--r-- | po/ChangeLog | 4 | ||||
-rw-r--r-- | po/POTFILES.in | 1 | ||||
-rw-r--r-- | shell/ChangeLog | 5 | ||||
-rw-r--r-- | shell/e-shell-folder-title-bar.c | 69 | ||||
-rw-r--r-- | widgets/misc/ChangeLog | 15 | ||||
-rw-r--r-- | widgets/misc/Makefile.am | 2 | ||||
-rw-r--r-- | widgets/misc/e-clipped-label.c | 420 | ||||
-rw-r--r-- | widgets/misc/e-clipped-label.h | 102 | ||||
-rw-r--r-- | widgets/misc/e-info-label.c | 49 | ||||
-rw-r--r-- | widgets/misc/e-multi-config-dialog.c | 14 | ||||
-rw-r--r-- | widgets/misc/e-task-bar.c | 20 |
13 files changed, 117 insertions, 613 deletions
diff --git a/mail/ChangeLog b/mail/ChangeLog index 5b833199d0..0206b32815 100644 --- a/mail/ChangeLog +++ b/mail/ChangeLog @@ -1,3 +1,8 @@ +2007-06-15 Matthew Barnes <mbarnes@redhat.com> + + * mail-send-recv.c: + Use ellipsized GtkLabels instead of EClippedLabels (#447727). + 2007-06-13 Sankar P <psankar@novell.com> * em-folder-view.c: diff --git a/mail/mail-send-recv.c b/mail/mail-send-recv.c index 55a0a99260..dbaee11c61 100644 --- a/mail/mail-send-recv.c +++ b/mail/mail-send-recv.c @@ -43,7 +43,6 @@ #include "libedataserver/e-account-list.h" -#include "misc/e-clipped-label.h" #include "em-filter-rule.h" #include "camel/camel-filter-driver.h" #include "camel/camel-folder.h" @@ -156,8 +155,8 @@ receive_cancel(GtkButton *button, struct _send_info *info) if (info->state == SEND_ACTIVE) { camel_operation_cancel(info->cancel); if (info->status_label) - e_clipped_label_set_text ( - E_CLIPPED_LABEL (info->status_label), + gtk_label_set_text ( + GTK_LABEL (info->status_label), _("Canceling...")); info->state = SEND_CANCELLED; } @@ -267,8 +266,8 @@ operation_status_timeout(void *data) GTK_PROGRESS_BAR (info->progress_bar), info->pc / 100.0); if (info->what) - e_clipped_label_set_text ( - E_CLIPPED_LABEL (info->status_label), + gtk_label_set_text ( + GTK_LABEL (info->status_label), info->what); return TRUE; } @@ -496,10 +495,11 @@ build_dialog (EAccountList *accounts, CamelFolder *outbox, const char *destinati cancel_button = gtk_button_new_from_stock (GTK_STOCK_CANCEL); - status_label = e_clipped_label_new ( + status_label = gtk_label_new ( (info->type == SEND_UPDATE) ? - _("Updating...") : _("Waiting..."), - PANGO_WEIGHT_NORMAL, 1.0); + _("Updating...") : _("Waiting...")); + gtk_label_set_ellipsize ( + GTK_LABEL (status_label), PANGO_ELLIPSIZE_END); /* g_object_set(data->label, "bold", TRUE, NULL); */ gtk_misc_set_alignment (GTK_MISC (label), 0, .5); @@ -566,8 +566,9 @@ build_dialog (EAccountList *accounts, CamelFolder *outbox, const char *destinati progress_bar = gtk_progress_bar_new (); cancel_button = gtk_button_new_from_stock (GTK_STOCK_CANCEL); - status_label = e_clipped_label_new ( - _("Waiting..."), PANGO_WEIGHT_NORMAL, 1.0); + status_label = gtk_label_new (_("Waiting...")); + gtk_label_set_ellipsize ( + GTK_LABEL (status_label), PANGO_ELLIPSIZE_END); gtk_misc_set_alignment (GTK_MISC (label), 0, .5); gtk_misc_set_alignment (GTK_MISC (status_label), 0, .5); @@ -692,8 +693,7 @@ receive_done (char *uri, void *data) info->state = SEND_COMPLETE; } - e_clipped_label_set_text ( - E_CLIPPED_LABEL (info->status_label), text); + gtk_label_set_text (GTK_LABEL (info->status_label), text); } if (info->cancel_button) diff --git a/po/ChangeLog b/po/ChangeLog index d945dac941..a141e063cc 100644 --- a/po/ChangeLog +++ b/po/ChangeLog @@ -1,3 +1,7 @@ +2007-06-15 Matthew Barnes <mbarnes@redhat.com> + + * POTFILES.in: Remove e-clipped-label.c + 2007-06-15 Jorge Gonzalez <jorgegonz@svn.gnome.org> * es.po: Updated Spanish translation diff --git a/po/POTFILES.in b/po/POTFILES.in index a4a7e1b495..1f2a1f976f 100644 --- a/po/POTFILES.in +++ b/po/POTFILES.in @@ -467,7 +467,6 @@ widgets/misc/e-canvas-vbox.c widgets/misc/e-cell-date-edit.c widgets/misc/e-cell-percent.c widgets/misc/e-charset-picker.c -widgets/misc/e-clipped-label.c widgets/misc/e-dateedit.c widgets/misc/e-expander.c widgets/misc/e-filter-bar.c diff --git a/shell/ChangeLog b/shell/ChangeLog index 02572610ac..965226e075 100644 --- a/shell/ChangeLog +++ b/shell/ChangeLog @@ -1,3 +1,8 @@ +2007-06-15 Matthew Barnes <mbarnes@redhat.com> + + * e-shell-folder-title-bar.c: + Use ellipsized GtkLabels instead of EClippedLabels (#447727). + 2007-06-03 Srinivasa Ragavan <sragavan@novell.com> ** Fix for bug #386503 from Matthew Barnes diff --git a/shell/e-shell-folder-title-bar.c b/shell/e-shell-folder-title-bar.c index b681311b78..a28ca62a09 100644 --- a/shell/e-shell-folder-title-bar.c +++ b/shell/e-shell-folder-title-bar.c @@ -34,7 +34,6 @@ #include <glib/gi18n.h> #include <gdk-pixbuf/gdk-pixbuf.h> -#include "misc/e-clipped-label.h" #include "e-shell-constants.h" #include "e-shell-marshal.h" #include "e-shell-folder-title-bar.h" @@ -117,13 +116,15 @@ new_empty_image_widget (void) /* Utility functions. */ -static int -get_max_clipped_label_width (EClippedLabel *clipped_label) +static gint +get_max_label_width (GtkWidget *label) { - int width; + PangoLayout *layout; + gint width; - pango_layout_get_pixel_size (clipped_label->layout, &width, NULL); - width += 2 * GTK_MISC (clipped_label)->xpad; + layout = gtk_label_get_layout (GTK_LABEL (label)); + pango_layout_get_pixel_size (layout, &width, NULL); + width += 2 * GTK_MISC (label)->xpad; return width; } @@ -152,7 +153,7 @@ size_allocate_title_button (EShellFolderTitleBar *title_bar, child_allocation.height = allocation->height - 2 * border_width; child_allocation.width = child_requisition.width; - child_allocation.width += get_max_clipped_label_width (E_CLIPPED_LABEL (priv->title_button_label)); + child_allocation.width += get_max_label_width (priv->title_button_label); child_allocation.width = MIN (child_allocation.width, *available_width_inout); @@ -218,7 +219,7 @@ size_allocate_label (EShellFolderTitleBar *title_bar, child_allocation.y = allocation->y + border_width; child_allocation.height = allocation->height - 2 * border_width; - child_allocation.width = MIN (get_max_clipped_label_width (E_CLIPPED_LABEL (priv->title_label)), + child_allocation.width = MIN (get_max_label_width (priv->title_label), *available_width_inout); gtk_widget_size_allocate (priv->title_label, & child_allocation); @@ -478,6 +479,7 @@ e_shell_folder_title_bar_construct (EShellFolderTitleBar *folder_title_bar) { EShellFolderTitleBarPrivate *priv; GtkWidget *title_button_hbox; + GtkWidget *label; g_return_if_fail (folder_title_bar != NULL); g_return_if_fail (E_IS_SHELL_FOLDER_TITLE_BAR (folder_title_bar)); @@ -489,18 +491,24 @@ e_shell_folder_title_bar_construct (EShellFolderTitleBar *folder_title_bar) 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); - gtk_misc_set_padding (GTK_MISC (priv->title_label), 0, 0); - gtk_misc_set_alignment (GTK_MISC (priv->title_label), 0.0, 0.5); - - priv->title_button_label = e_clipped_label_new ("", PANGO_WEIGHT_BOLD, 1.2); - 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); - - priv->folder_bar_label = e_clipped_label_new ("", PANGO_WEIGHT_NORMAL, 1.0); - gtk_misc_set_alignment (GTK_MISC (priv->folder_bar_label), 1.0, 0.5); - gtk_widget_show (priv->folder_bar_label); + label = gtk_label_new (""); + gtk_label_set_ellipsize (GTK_LABEL (label), PANGO_ELLIPSIZE_END); + gtk_misc_set_padding (GTK_MISC (label), 0, 0); + gtk_misc_set_alignment (GTK_MISC (label), 0.0, 0.5); + priv->title_label = label; + + label = gtk_label_new (""); + gtk_label_set_ellipsize (GTK_LABEL (label), PANGO_ELLIPSIZE_END); + gtk_misc_set_padding (GTK_MISC (label), 2, 0); + gtk_misc_set_alignment (GTK_MISC (label), 0.0, 0.5); + gtk_widget_show (label); + priv->title_button_label = label; + + label = gtk_label_new (""); + gtk_label_set_ellipsize (GTK_LABEL (label), PANGO_ELLIPSIZE_END); + gtk_misc_set_alignment (GTK_MISC (label), 1.0, 0.5); + gtk_widget_show (label); + priv->folder_bar_label = label; priv->title_button_icon = new_empty_image_widget (); gtk_widget_show (priv->title_button_icon); @@ -574,21 +582,21 @@ e_shell_folder_title_bar_set_title (EShellFolderTitleBar *folder_title_bar, const char *title) { EShellFolderTitleBarPrivate *priv; + gchar *markup; g_return_if_fail (folder_title_bar != NULL); g_return_if_fail (E_IS_SHELL_FOLDER_TITLE_BAR (folder_title_bar)); priv = folder_title_bar->priv; - if (title == NULL) { - e_clipped_label_set_text (E_CLIPPED_LABEL (priv->title_button_label), _("(Untitled)")); - e_clipped_label_set_text (E_CLIPPED_LABEL (priv->title_label), _("(Untitled)")); - } else { - e_clipped_label_set_text (E_CLIPPED_LABEL (priv->title_button_label), title); - e_clipped_label_set_text (E_CLIPPED_LABEL (priv->title_label), title); - } + if (title == NULL) + title = _("Untitled"); + + markup = g_markup_printf_escaped ("<big><b>%s</b></big>", title); + gtk_label_set_markup (GTK_LABEL (priv->title_button_label), markup); + gtk_label_set_markup (GTK_LABEL (priv->title_label), markup); + g_free (markup); - /* FIXME: There seems to be a bug in EClippedLabel, this is just a workaround. */ gtk_widget_queue_resize (GTK_WIDGET (folder_title_bar)); } @@ -611,10 +619,7 @@ e_shell_folder_title_bar_set_folder_bar_label (EShellFolderTitleBar *folder_titl priv = folder_title_bar->priv; - if (text == NULL) - e_clipped_label_set_text (E_CLIPPED_LABEL (priv->folder_bar_label), ""); - else - e_clipped_label_set_text (E_CLIPPED_LABEL (priv->folder_bar_label), text); + gtk_label_set_text (GTK_LABEL (priv->folder_bar_label), text); /* FIXME: Might want to set the styles somewhere in here too, black text on grey background isn't the best combination */ diff --git a/widgets/misc/ChangeLog b/widgets/misc/ChangeLog index ba8beae7d7..706a3abad2 100644 --- a/widgets/misc/ChangeLog +++ b/widgets/misc/ChangeLog @@ -1,3 +1,18 @@ +2007-06-15 Matthew Barnes <mbarnes@redhat.com> + + ** Fixes part of bug #447727 + + * e-info-label.c: + * e-multi-config-dialog.c: + * e-task-bar.c: + Use ellipsized GtkLabels instead of EClippedLabels. + + * e-clipped-label.[ch]: + Remove these files. GTK+ provides this functionality now. + + * Makefile.am: + Remove e-clipped-label.[ch]. + 2007-06-04 Chenthill Palanisamy <pchenthill@novell.com> * e-filter-bar.[c]: (e_filter_bar_new), (e_filter_bar_new_construct): diff --git a/widgets/misc/Makefile.am b/widgets/misc/Makefile.am index c811f81034..24930ec79c 100644 --- a/widgets/misc/Makefile.am +++ b/widgets/misc/Makefile.am @@ -45,7 +45,6 @@ widgetsinclude_HEADERS = \ e-cell-percent.h \ e-cell-renderer-combo.h \ e-charset-picker.h \ - e-clipped-label.h \ e-combo-cell-editable.h \ e-config-page.h \ e-combo-button.h \ @@ -91,7 +90,6 @@ libemiscwidgets_la_SOURCES = \ e-cell-percent.c \ e-cell-renderer-combo.c \ e-charset-picker.c \ - e-clipped-label.c \ e-combo-cell-editable.c \ e-config-page.c \ e-combo-button.c \ diff --git a/widgets/misc/e-clipped-label.c b/widgets/misc/e-clipped-label.c deleted file mode 100644 index 6a37c301bd..0000000000 --- a/widgets/misc/e-clipped-label.c +++ /dev/null @@ -1,420 +0,0 @@ -/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */ - -/* - * Author : - * Damon Chaplin <damon@ximian.com> - * - * Copyright 1999, Ximian, Inc. - * - * This program is free software; you can redistribute it and/or - * modify it under the terms of version 2 of the GNU General Public - * License as published by the Free Software Foundation. - * - * This program 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 - */ - -/* - * This is similar to GtkLabel but clips itself and displays '...' if it - * can't fit inside its allocated area. The intended use is for inside buttons - * that are a fixed size. The GtkLabel would normally display only the middle - * part of the text, which doesn't look very good. This only supports one line - * of text (so no wrapping/justification), without underlined characters. - */ - -#ifdef HAVE_CONFIG_H -#include <config.h> -#endif - -#include "e-clipped-label.h" - -#include <math.h> -#include <string.h> - -#include <glib.h> -#include <gdk/gdki18n.h> -#include <glib/gi18n.h> - - -static void e_clipped_label_class_init (EClippedLabelClass *class); -static void e_clipped_label_init (EClippedLabel *label); -static void e_clipped_label_size_request (GtkWidget *widget, - GtkRequisition *requisition); -static void e_clipped_label_size_allocate (GtkWidget *widget, - GtkAllocation *allocation); -static gint e_clipped_label_expose (GtkWidget *widget, - GdkEventExpose *event); -static void e_clipped_label_recalc_chars_displayed (EClippedLabel *label); -static void e_clipped_label_finalize (GObject *object); - -static void build_layout (EClippedLabel *label, const char *text); - -static GtkMiscClass *parent_class; - -/* This is the string to draw when the label is clipped, e.g. '...'. */ -static gchar *e_clipped_label_ellipsis; - -/* Flags used in chars_displayed field. Must be negative. */ -#define E_CLIPPED_LABEL_NEED_RECALC -1 -#define E_CLIPPED_LABEL_SHOW_ENTIRE_LABEL -2 - - -GtkType -e_clipped_label_get_type (void) -{ - static GtkType e_clipped_label_type = 0; - - if (!e_clipped_label_type){ - GtkTypeInfo e_clipped_label_info = { - "EClippedLabel", - sizeof (EClippedLabel), - sizeof (EClippedLabelClass), - (GtkClassInitFunc) e_clipped_label_class_init, - (GtkObjectInitFunc) e_clipped_label_init, - NULL, /* reserved 1 */ - NULL, /* reserved 2 */ - (GtkClassInitFunc) NULL - }; - - parent_class = g_type_class_ref(GTK_TYPE_MISC); - e_clipped_label_type = gtk_type_unique (GTK_TYPE_MISC, - &e_clipped_label_info); - } - - return e_clipped_label_type; -} - - -static void -e_clipped_label_class_init (EClippedLabelClass *class) -{ - GObjectClass *object_class; - GtkWidgetClass *widget_class; - - object_class = (GObjectClass *) class; - widget_class = (GtkWidgetClass *) class; - - /* Method override */ - widget_class->size_request = e_clipped_label_size_request; - widget_class->size_allocate = e_clipped_label_size_allocate; - widget_class->expose_event = e_clipped_label_expose; - - object_class->finalize = e_clipped_label_finalize; - - /* Translators: This is the string to draw when the label - * of a fixed-size button is clipped, e.g. '...'. - */ - e_clipped_label_ellipsis = _("..."); -} - - -static void -e_clipped_label_init (EClippedLabel *label) -{ - GTK_WIDGET_SET_FLAGS (label, GTK_NO_WINDOW); - - label->label = NULL; - label->chars_displayed = E_CLIPPED_LABEL_NEED_RECALC; -} - - -/** - * e_clipped_label_new: - * - * @text: The label text. - * @Returns: A new #EClippedLabel. - * - * Creates a new #EClippedLabel with the given text. - **/ -GtkWidget * -e_clipped_label_new (const gchar *text, - PangoWeight font_weight, - gfloat font_size) -{ - GtkWidget *label; - EClippedLabel *clipped; - - label = g_object_new (e_clipped_label_get_type (), NULL); - - clipped = E_CLIPPED_LABEL (label); - - clipped->font_size = font_size; - clipped->font_weight = font_weight; - clipped->layout = NULL; - - build_layout (clipped, e_clipped_label_ellipsis); - pango_layout_get_pixel_size (clipped->layout, &clipped->ellipsis_width, NULL); - - if (text && *text) - e_clipped_label_set_text (clipped, text); - - return label; -} - -static void -build_layout (EClippedLabel *label, const char *text) -{ - if (!label->layout) { - GtkStyle *style = gtk_widget_get_style (GTK_WIDGET (label)); - PangoFontDescription *desc = pango_font_description_copy (style->font_desc); - - label->layout = gtk_widget_create_pango_layout (GTK_WIDGET (label), text); - - pango_font_description_set_size (desc, pango_font_description_get_size (desc) * label->font_size); - - pango_font_description_set_weight (desc, label->font_weight); - pango_layout_set_font_description (label->layout, desc); - pango_font_description_free (desc); - } - - pango_layout_set_text (label->layout, text, -1); -} - -static void -e_clipped_label_size_request (GtkWidget *widget, - GtkRequisition *requisition) -{ - EClippedLabel *label; - int height; - int width; - - g_return_if_fail (E_IS_CLIPPED_LABEL (widget)); - g_return_if_fail (requisition != NULL); - - label = E_CLIPPED_LABEL (widget); - - pango_layout_get_pixel_size (label->layout, &width, &height); - - requisition->width = 0; - requisition->height = height + 2 * GTK_MISC (widget)->ypad; -} - - -static void -e_clipped_label_size_allocate (GtkWidget *widget, - GtkAllocation *allocation) -{ - EClippedLabel *label; - - label = E_CLIPPED_LABEL (widget); - - widget->allocation = *allocation; - - /* Flag that we need to recalculate how many characters to display. */ - label->chars_displayed = E_CLIPPED_LABEL_NEED_RECALC; -} - - -static gint -e_clipped_label_expose (GtkWidget *widget, - GdkEventExpose *event) -{ - EClippedLabel *label; - GtkMisc *misc; - gint x; - PangoRectangle rect; - - g_return_val_if_fail (E_IS_CLIPPED_LABEL (widget), FALSE); - g_return_val_if_fail (event != NULL, FALSE); - - label = E_CLIPPED_LABEL (widget); - misc = GTK_MISC (widget); - - /* If the label isn't visible or has no text, just return. */ - if (!GTK_WIDGET_VISIBLE (widget) || !GTK_WIDGET_MAPPED (widget) - || !label->label || (*label->label == '\0')) - return TRUE; - - /* Recalculate the number of characters displayed, if necessary. */ - if (label->chars_displayed == E_CLIPPED_LABEL_NEED_RECALC) - e_clipped_label_recalc_chars_displayed (label); - - /* - * GC Clipping - */ - gdk_gc_set_clip_rectangle (widget->style->white_gc, - &event->area); - gdk_gc_set_clip_rectangle (widget->style->fg_gc[widget->state], - &event->area); - - pango_layout_get_pixel_extents (label->layout, &rect, NULL); - - if (label->chars_displayed == E_CLIPPED_LABEL_SHOW_ENTIRE_LABEL) { - x = floor (widget->allocation.x + (gint)misc->xpad - + (((gint)widget->allocation.width - - (gint)label->label_width - 2 * (gint)misc->xpad) - * misc->xalign) + 0.5); - - gdk_draw_layout (widget->window, widget->style->fg_gc[widget->state], - x, label->label_y, label->layout); - } else { - int layout_width; - - x = widget->allocation.x + (gint)misc->xpad; - - /* trim the layout to the number of characters we're displaying */ - pango_layout_set_text (label->layout, label->label, label->chars_displayed); - - /* draw it */ - gdk_draw_layout (widget->window, widget->style->fg_gc[widget->state], - x, label->label_y, label->layout); - - pango_layout_get_pixel_size (label->layout, &layout_width, NULL); - - /* offset the X position for the ellipsis */ - x = widget->allocation.x + (gint)misc->xpad - + label->ellipsis_x; - - /* then draw the ellipsis */ - pango_layout_set_text (label->layout, e_clipped_label_ellipsis, strlen (e_clipped_label_ellipsis)); - - gdk_draw_layout (widget->window, widget->style->fg_gc[widget->state], - x, label->label_y, label->layout); - - /* then reset the layout to our original label text */ - pango_layout_set_text (label->layout, label->label, -1); - } - - gdk_gc_set_clip_mask (widget->style->white_gc, NULL); - gdk_gc_set_clip_mask (widget->style->fg_gc[widget->state], NULL); - - return TRUE; -} - - -static void -e_clipped_label_finalize (GObject *object) -{ - EClippedLabel *label; - - g_return_if_fail (E_IS_CLIPPED_LABEL (object)); - - label = E_CLIPPED_LABEL(object); - - g_free (label->label); - - g_object_unref (label->layout); - - (* G_OBJECT_CLASS (parent_class)->finalize) (object); -} - - -/** - * e_clipped_label_get_text: - * - * @label: An #EClippedLabel. - * @Return: The label text. - * - * Returns the label text, or NULL. - **/ -gchar* -e_clipped_label_get_text (EClippedLabel *label) -{ - g_return_val_if_fail (E_IS_CLIPPED_LABEL (label), NULL); - - return label->label; -} - - -/** - * e_clipped_label_set_text: - * - * @label: An #EClippedLabel. - * @text: The new label text. - * - * Sets the label text. - **/ -void -e_clipped_label_set_text (EClippedLabel *label, - const gchar *text) -{ - g_return_if_fail (E_IS_CLIPPED_LABEL (label)); - - if (label->label != text || !label->label || !text - || strcmp (label->label, text)) { - g_free (label->label); - label->label = NULL; - - if (text) - label->label = g_strdup (text); - - build_layout (label, text); - - /* Reset the number of characters displayed, so it is - recalculated when needed. */ - label->chars_displayed = E_CLIPPED_LABEL_NEED_RECALC; - - /* We don't queue a resize, since the label should not affect - the widget size, but we queue a draw. */ - gtk_widget_queue_draw (GTK_WIDGET (label)); - } -} - - -static void -e_clipped_label_recalc_chars_displayed (EClippedLabel *label) -{ - gint max_width, width; - GSList *lines; - PangoLayoutLine *line; - int index; - PangoRectangle rect; - GtkWidget *widget = GTK_WIDGET (label); - GtkMisc *misc = GTK_MISC (label); - - max_width = GTK_WIDGET (label)->allocation.width - - 2 * GTK_MISC (label)->xpad; - - if (!label->label) { - label->chars_displayed = 0; - return; - } - - /* See if the entire label fits in the allocated width. */ - pango_layout_set_text (label->layout, label->label, -1); - - pango_layout_get_pixel_extents (label->layout, &rect, NULL); - - label->label_y = floor (widget->allocation.y + (gint)misc->ypad - + (((gint)widget->allocation.height - 2 * (gint)misc->ypad - + (gint)PANGO_ASCENT (rect) - PANGO_DESCENT(rect)) - * misc->yalign) + 0.5); - - pango_layout_get_pixel_size (label->layout, &label->label_width, NULL); - if (label->label_width <= max_width) { - label->chars_displayed = E_CLIPPED_LABEL_SHOW_ENTIRE_LABEL; - return; - } - - label->chars_displayed = 0; - label->ellipsis_x = 0; - - if (max_width <= 0) - return; - - max_width -= label->ellipsis_width; - - lines = pango_layout_get_lines (label->layout); - line = lines->data; - - if (!pango_layout_line_x_to_index (line, - max_width * PANGO_SCALE, - &index, - NULL)) { - return; - } - - label->chars_displayed = index; - - pango_layout_set_text (label->layout, label->label, label->chars_displayed); - pango_layout_get_pixel_size (label->layout, &width, NULL); - - label->ellipsis_x = width; -} diff --git a/widgets/misc/e-clipped-label.h b/widgets/misc/e-clipped-label.h deleted file mode 100644 index b0165b3e7d..0000000000 --- a/widgets/misc/e-clipped-label.h +++ /dev/null @@ -1,102 +0,0 @@ -/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */ - -/* - * Author : - * Damon Chaplin <damon@ximian.com> - * - * Copyright 1999, Ximian, Inc. - * - * This program is free software; you can redistribute it and/or - * modify it under the terms of version 2 of the GNU General Public - * License as published by the Free Software Foundation. - * - * This program 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 - */ - -/* - * This is similar to GtkLabel but clips itself and displays '...' if it - * can't fit inside its allocated area. The intended use is for inside buttons - * that are a fixed size. The GtkLabel would normally display only the middle - * part of the text, which doesn't look very good. This only supports one line - * of text (so no wrapping/justification), without underlined characters. - */ -#ifndef _E_CLIPPED_LABEL_H_ -#define _E_CLIPPED_LABEL_H_ - -#include <gtk/gtkmisc.h> - -#ifdef __cplusplus -extern "C" { -#endif /* __cplusplus */ - -#define E_CLIPPED_LABEL(obj) G_TYPE_CHECK_INSTANCE_CAST (obj, e_clipped_label_get_type (), EClippedLabel) -#define E_CLIPPED_LABEL_CLASS(klass) G_TYPE_CHECK_CLASS_CAST (klass, e_clipped_label_get_type (), EClippedLabelClass) -#define E_IS_CLIPPED_LABEL(obj) G_TYPE_CHECK_INSTANCE_TYPE (obj, e_clipped_label_get_type ()) - - -typedef struct _EClippedLabel EClippedLabel; -typedef struct _EClippedLabelClass EClippedLabelClass; - -struct _EClippedLabel -{ - GtkMisc misc; - - gchar *label; - - /* Font size multiplication factor; 1.0 means "default GTK font - size" */ - gfloat font_size; - PangoWeight font_weight; - - /* Our PangoLayout */ - PangoLayout *layout; - - /* This is the width of the entire label string, in pixels. */ - gint label_width; - - /* This is the label's y coord. we store it here so it won't - change as the label's baseline changes (for example if we - ellide the 'y' from 'Summary' the baseline drops) */ - gint label_y; - - /* This is the number of characters we can fit in, or - E_CLIPPED_LABEL_NEED_RECALC if it needs to be recalculated, or - E_CLIPPED_LABEL_SHOW_ENTIRE_LABEL to show the entire label. */ - gint chars_displayed; - - /* This is the x position to display the ellipsis string, e.g. '...', - relative to the start of the label. */ - gint ellipsis_x; - - /* This is the width of the ellipsis, in pixels */ - gint ellipsis_width; -}; - -struct _EClippedLabelClass -{ - GtkMiscClass parent_class; -}; - - -GtkType e_clipped_label_get_type (void); -GtkWidget *e_clipped_label_new (const gchar *text, - PangoWeight font_weight, - gfloat font_size); - -gchar *e_clipped_label_get_text (EClippedLabel *label); -void e_clipped_label_set_text (EClippedLabel *label, - const gchar *text); - -#ifdef __cplusplus -} -#endif /* __cplusplus */ - -#endif /* _E_CLIPPED_LABEL_H_ */ diff --git a/widgets/misc/e-info-label.c b/widgets/misc/e-info-label.c index 620e9a3552..636e696839 100644 --- a/widgets/misc/e-info-label.c +++ b/widgets/misc/e-info-label.c @@ -28,7 +28,6 @@ #include "e-info-label.h" #include <gtk/gtklabel.h> -#include "e-clipped-label.h" #include <e-util/e-icon-factory.h> @@ -142,29 +141,37 @@ e_info_label_new(const char *icon) void e_info_label_set_info(EInfoLabel *el, const char *location, const char *info) { - char *tmp; + gchar *markup; if (el->location == NULL) { - el->location = e_clipped_label_new(location, PANGO_WEIGHT_BOLD, 1.0); - el->info = gtk_label_new(NULL); - - gtk_misc_set_alignment((GtkMisc *)el->location, 0.0, 0.0); - gtk_misc_set_padding((GtkMisc *)el->location, 0, 6); - gtk_misc_set_alignment((GtkMisc *)el->info, 0.0, 1.0); - gtk_misc_set_padding((GtkMisc *)el->info, 0, 6); - - gtk_widget_show(el->location); - gtk_widget_show(el->info); - - gtk_box_pack_start((GtkBox *)el, (GtkWidget *)el->location, TRUE, TRUE, 0); - gtk_box_pack_end((GtkBox *)el, (GtkWidget *)el->info, FALSE, TRUE, 6); - gtk_widget_set_state((GtkWidget *)el, GTK_STATE_ACTIVE); - } else { - e_clipped_label_set_text((EClippedLabel *)el->location, location); + el->location = gtk_label_new (NULL); + el->info = gtk_label_new (NULL); + + gtk_label_set_ellipsize ( + GTK_LABEL (el->location), PANGO_ELLIPSIZE_END); + gtk_misc_set_alignment (GTK_MISC (el->location), 0.0, 0.0); + gtk_misc_set_padding (GTK_MISC (el->location), 0, 6); + gtk_misc_set_alignment (GTK_MISC (el->info), 0.0, 1.0); + gtk_misc_set_padding (GTK_MISC (el->info), 0, 6); + + gtk_widget_show (el->location); + gtk_widget_show (el->info); + + gtk_box_pack_start ( + GTK_BOX (el), GTK_WIDGET (el->location), + TRUE, TRUE, 0); + gtk_box_pack_end ( + GTK_BOX (el), GTK_WIDGET (el->info), + FALSE, TRUE, 6); + gtk_widget_set_state (GTK_WIDGET (el), GTK_STATE_ACTIVE); } - tmp = g_strdup_printf("<span size=\"smaller\">%s</span>", info); - gtk_label_set_markup((GtkLabel *)el->info, tmp); - g_free(tmp); + markup = g_markup_printf_escaped ("<b>%s</b>", location); + gtk_label_set_markup (GTK_LABEL (el->location), markup); + g_free (markup); + + markup = g_markup_printf_escaped ("<small>%s</small>", info); + gtk_label_set_markup (GTK_LABEL (el->info), markup); + g_free (markup); } diff --git a/widgets/misc/e-multi-config-dialog.c b/widgets/misc/e-multi-config-dialog.c index b63b7827e4..6424814ca2 100644 --- a/widgets/misc/e-multi-config-dialog.c +++ b/widgets/misc/e-multi-config-dialog.c @@ -26,8 +26,6 @@ #include "e-multi-config-dialog.h" -#include "e-clipped-label.h" - #include <table/e-table-scrolled.h> #include <table/e-table-memory-store.h> #include <table/e-cell-pixbuf.h> @@ -87,18 +85,6 @@ create_page_container (const char *description, vbox = gtk_vbox_new (FALSE, 0); -#if 0 - label = e_clipped_label_new (description); - gtk_misc_set_alignment (GTK_MISC (label), 0.0, 0.0); - gtk_box_pack_start (GTK_BOX (vbox), label, FALSE, TRUE, 0); - - separator = gtk_hseparator_new (); - gtk_box_pack_start (GTK_BOX (vbox), separator, FALSE, TRUE, 0); - - gtk_widget_show (label); - gtk_widget_show (separator); -#endif - gtk_box_pack_start (GTK_BOX (vbox), widget, TRUE, TRUE, 0); gtk_widget_show (widget); diff --git a/widgets/misc/e-task-bar.c b/widgets/misc/e-task-bar.c index 2e28a6c76a..c80c4e16b3 100644 --- a/widgets/misc/e-task-bar.c +++ b/widgets/misc/e-task-bar.c @@ -26,11 +26,12 @@ #include "e-task-bar.h" -#include "misc/e-clipped-label.h" +#include <gtk/gtklabel.h> +#include <gtk/gtkmisc.h> struct _ETaskBarPrivate { - EClippedLabel *message_label; + GtkWidget *message_label; GtkHBox *hbox; }; @@ -96,11 +97,12 @@ e_task_bar_init (ETaskBar *task_bar) task_bar->priv = g_new (ETaskBarPrivate, 1); gtk_box_set_spacing (GTK_BOX (task_bar), 10); - - label = e_clipped_label_new ("", PANGO_WEIGHT_NORMAL, 1.0); + + label = gtk_label_new (NULL); + gtk_label_set_ellipsize (GTK_LABEL (label), PANGO_ELLIPSIZE_END); gtk_box_pack_start (GTK_BOX (task_bar), label, TRUE, TRUE, 0); gtk_misc_set_alignment (GTK_MISC (label), 0, 0.5); - task_bar->priv->message_label = E_CLIPPED_LABEL (label); + task_bar->priv->message_label = label; hbox = gtk_hbox_new (FALSE, 0); gtk_container_add (GTK_CONTAINER (task_bar), hbox); @@ -133,9 +135,9 @@ e_task_bar_set_message (ETaskBar *task_bar, const char *message) { if (message) { - gtk_widget_show (GTK_WIDGET (task_bar->priv->message_label)); - e_clipped_label_set_text (task_bar->priv->message_label, - message); + gtk_label_set_text ( + GTK_LABEL (task_bar->priv->message_label), message); + gtk_widget_show (task_bar->priv->message_label); } else { e_task_bar_unset_message (task_bar); } @@ -144,7 +146,7 @@ e_task_bar_set_message (ETaskBar *task_bar, void e_task_bar_unset_message (ETaskBar *task_bar) { - gtk_widget_hide (GTK_WIDGET (task_bar->priv->message_label)); + gtk_widget_hide (task_bar->priv->message_label); } void |