Ellipsize the menu items label if they grow too much. (#357303)

2007-01-15  Emmanuele Bassi  <ebassi@gnome.org>

	* gtk/gtkrecentchoosermenu.c: Ellipsize the menu items label
	if they grow too much. (#357303)

svn path=/trunk/; revision=17156
This commit is contained in:
Emmanuele Bassi 2007-01-15 12:44:28 +00:00 committed by Emmanuele Bassi
parent 82ef0d0d2a
commit cd87d06cf7
2 changed files with 31 additions and 9 deletions

View File

@ -1,3 +1,8 @@
2007-01-15 Emmanuele Bassi <ebassi@gnome.org>
* gtk/gtkrecentchoosermenu.c: Ellipsize the menu items label
if they grow too much. (#357303)
2007-01-14 Matthias Clasen <mclasen@redhat.com> 2007-01-14 Matthias Clasen <mclasen@redhat.com>
* gtk/gtkicontheme.c (theme_lookup_icon): When finding a matching * gtk/gtkicontheme.c (theme_lookup_icon): When finding a matching

View File

@ -42,6 +42,7 @@
#include "gtkseparatormenuitem.h" #include "gtkseparatormenuitem.h"
#include "gtkmenu.h" #include "gtkmenu.h"
#include "gtkimage.h" #include "gtkimage.h"
#include "gtklabel.h"
#include "gtkobject.h" #include "gtkobject.h"
#include "gtktooltips.h" #include "gtktooltips.h"
#include "gtktypebuiltins.h" #include "gtktypebuiltins.h"
@ -55,6 +56,9 @@ struct _GtkRecentChooserMenuPrivate
/* size of the icons of the menu items */ /* size of the icons of the menu items */
gint icon_size; gint icon_size;
/* max size of the menu item label */
gint label_width;
/* RecentChooser properties */ /* RecentChooser properties */
gint limit; gint limit;
guint show_private : 1; guint show_private : 1;
@ -90,6 +94,7 @@ enum {
#define FALLBACK_ICON_SIZE 32 #define FALLBACK_ICON_SIZE 32
#define FALLBACK_ITEM_LIMIT 10 #define FALLBACK_ITEM_LIMIT 10
#define DEFAULT_LABEL_WIDTH 30
#define GTK_RECENT_CHOOSER_MENU_GET_PRIVATE(obj) (G_TYPE_INSTANCE_GET_PRIVATE ((obj), GTK_TYPE_RECENT_CHOOSER_MENU, GtkRecentChooserMenuPrivate)) #define GTK_RECENT_CHOOSER_MENU_GET_PRIVATE(obj) (G_TYPE_INSTANCE_GET_PRIVATE ((obj), GTK_TYPE_RECENT_CHOOSER_MENU, GtkRecentChooserMenuPrivate))
@ -230,6 +235,8 @@ gtk_recent_chooser_menu_init (GtkRecentChooserMenu *menu)
priv->icon_size = FALLBACK_ICON_SIZE; priv->icon_size = FALLBACK_ICON_SIZE;
priv->label_width = DEFAULT_LABEL_WIDTH;
priv->current_filter = NULL; priv->current_filter = NULL;
priv->tooltips = gtk_tooltips_new (); priv->tooltips = gtk_tooltips_new ();
@ -892,8 +899,8 @@ gtk_recent_chooser_menu_create_item (GtkRecentChooserMenu *menu,
gint count) gint count)
{ {
GtkRecentChooserMenuPrivate *priv; GtkRecentChooserMenuPrivate *priv;
gchar *label; gchar *text;
GtkWidget *item, *image; GtkWidget *item, *image, *label;
GdkPixbuf *icon; GdkPixbuf *icon;
g_assert (info != NULL); g_assert (info != NULL);
@ -912,19 +919,31 @@ gtk_recent_chooser_menu_create_item (GtkRecentChooserMenu *menu,
/* avoid clashing mnemonics */ /* avoid clashing mnemonics */
if (count <= 10) if (count <= 10)
label = g_strdup_printf ("_%d. %s", count, escaped); text = g_strdup_printf ("_%d. %s", count, escaped);
else else
label = g_strdup_printf ("%d. %s", count, escaped); text = g_strdup_printf ("%d. %s", count, escaped);
item = gtk_image_menu_item_new_with_mnemonic (label); item = gtk_image_menu_item_new_with_mnemonic (text);
g_free (escaped); g_free (escaped);
g_free (name); g_free (name);
} }
else else
{ {
label = g_strdup (gtk_recent_info_get_display_name (info)); text = g_strdup (gtk_recent_info_get_display_name (info));
item = gtk_image_menu_item_new_with_label (label); item = gtk_image_menu_item_new_with_label (text);
}
g_free (text);
/* ellipsize the menu item label, in case the recent document
* display name is huge.
*/
label = GTK_BIN (item)->child;
if (label)
{
gtk_label_set_ellipsize (GTK_LABEL (label), PANGO_ELLIPSIZE_END);
gtk_label_set_max_width_chars (GTK_LABEL (label), priv->label_width);
} }
if (priv->show_icons) if (priv->show_icons)
@ -940,8 +959,6 @@ gtk_recent_chooser_menu_create_item (GtkRecentChooserMenu *menu,
G_CALLBACK (item_activate_cb), G_CALLBACK (item_activate_cb),
menu); menu);
g_free (label);
return item; return item;
} }