diff options
author | Nickolay V. Shmyrev <nshmyrev@src.gnome.org> | 2006-01-17 21:53:17 (GMT) |
---|---|---|
committer | Nickolay V. Shmyrev <nshmyrev@src.gnome.org> | 2006-01-17 21:53:17 (GMT) |
commit | c7bae2c213369b853bb420e5cf09d192f38f8cce (patch) | |
tree | 7dcbe628e1289f4297214ae3f1b71eed8409c5a9 /cut-n-paste/recent-files/egg-recent-view-uimanager.c | |
parent | af71939e1812703087b8f9e4b39a3f79aa97f5a3 (diff) |
Update from libegg.
* cut-n-paste/recent-files/egg-recent-item.c:
(get_uri_shortname_for_display), (egg_recent_item_get_short_name):
* cut-n-paste/recent-files/egg-recent-model.c: (parse_info_init),
(parse_info_free), (valid_element), (start_element_handler),
(end_element_handler), (text_handler), (egg_recent_model_filter),
(egg_recent_model_monitor_cb), (egg_recent_model_poll_timeout),
(egg_recent_model_monitor), (egg_recent_model_read),
(egg_recent_model_open_file), (egg_recent_model_lock_file),
(egg_recent_model_unlock_file), (egg_recent_model_finalize),
(egg_recent_model_set_property), (egg_recent_model_class_init),
(egg_recent_model_init), (egg_recent_model_add_full),
(egg_recent_model_delete), (egg_recent_model_get_list),
(egg_recent_model_clear), (egg_recent_model_clear_mime_filter),
(egg_recent_model_set_filter_mime_types),
(egg_recent_model_clear_group_filter),
(egg_recent_model_set_filter_groups),
(egg_recent_model_clear_scheme_filter),
(egg_recent_model_set_filter_uri_schemes),
(egg_recent_model_remove_expired):
* cut-n-paste/recent-files/egg-recent-util.c:
(egg_recent_util_get_icon):
* cut-n-paste/recent-files/egg-recent-util.h:
* cut-n-paste/recent-files/egg-recent-view-uimanager.c:
(connect_proxy_cb), (egg_recent_view_uimanager_set_list),
(egg_recent_view_uimanager_set_empty_list), (model_changed_cb),
(egg_recent_view_uimanager_set_property),
(egg_recent_view_uimanager_get_property),
(egg_recent_view_uimanager_class_init),
(egg_recent_view_uimanager_init),
(egg_recent_view_uimanager_set_label_width),
(egg_recent_view_uimanager_get_label_width):
* cut-n-paste/recent-files/egg-recent-view-uimanager.h:
* cut-n-paste/toolbar-editor/egg-editable-toolbar.c:
* cut-n-paste/toolbar-editor/egg-editable-toolbar.h:
* cut-n-paste/toolbar-editor/egg-toolbar-editor.c:
* cut-n-paste/toolbar-editor/egg-toolbars-model.c:
* cut-n-paste/toolbar-editor/egg-toolbars-model.h:
Update from libegg.
Diffstat (limited to 'cut-n-paste/recent-files/egg-recent-view-uimanager.c')
-rw-r--r-- | cut-n-paste/recent-files/egg-recent-view-uimanager.c | 179 |
1 files changed, 148 insertions, 31 deletions
diff --git a/cut-n-paste/recent-files/egg-recent-view-uimanager.c b/cut-n-paste/recent-files/egg-recent-view-uimanager.c index ac0b852..006112b 100644 --- a/cut-n-paste/recent-files/egg-recent-view-uimanager.c +++ b/cut-n-paste/recent-files/egg-recent-view-uimanager.c @@ -1,6 +1,6 @@ /* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */ -/** +/* * This program 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 @@ -43,7 +43,14 @@ #define EGG_RECENT_ACTION "EggRecentFile" #define EGG_RECENT_SEPARATOR (NULL) -#define LABEL_WIDTH_CHARS 32 +#ifndef EGG_COMPILATION +#include <glib/gi18n.h> +#else +#define _(x) (x) +#define N_(x) (x) +#endif + +#define DEFAULT_LABEL_WIDTH_CHARS 30 struct _EggRecentViewUIManager { GObject parent_instance; @@ -73,6 +80,8 @@ struct _EggRecentViewUIManager { EggRecentModel *model; GConfClient *client; GtkIconSize icon_size; + + gint label_width; }; @@ -94,12 +103,30 @@ enum { PROP_UIMANAGER, PROP_PATH, PROP_SHOW_ICONS, - PROP_SHOW_NUMBERS + PROP_SHOW_NUMBERS, + PROP_LABEL_WIDTH }; static guint view_signals[LAST_SIGNAL] = { 0 }; static void +connect_proxy_cb (GtkActionGroup *action_group, + GtkAction *action, + GtkWidget *proxy, + EggRecentViewUIManager *view) +{ + if (GTK_IS_MENU_ITEM (proxy)) + { + GtkWidget *label; + + label = GTK_BIN (proxy)->child; + + gtk_label_set_ellipsize (GTK_LABEL (label), PANGO_ELLIPSIZE_END); + gtk_label_set_max_width_chars (GTK_LABEL (label), view->label_width); + } +} + +static void egg_recent_view_uimanager_clear (EggRecentViewUIManager *view) { if (view->merge_id != 0) { @@ -117,23 +144,6 @@ egg_recent_view_uimanager_clear (EggRecentViewUIManager *view) } static void -connect_proxy_cb (GtkActionGroup *action_group, - GtkAction *action, - GtkWidget *proxy) -{ - if (GTK_IS_MENU_ITEM (proxy)) - { - GtkLabel *label; - - label = (GtkLabel *) ((GtkBin *) proxy)->child; - - gtk_label_set_ellipsize (label, PANGO_ELLIPSIZE_END); - gtk_label_set_max_width_chars (label, LABEL_WIDTH_CHARS); - } -} - - -static void egg_recent_view_uimanager_set_list (EggRecentViewUIManager *view, GList *list) { GList *scan; @@ -152,7 +162,8 @@ egg_recent_view_uimanager_set_list (EggRecentViewUIManager *view, GList *list) view->action_group = gtk_action_group_new (group); g_signal_connect (view->action_group, "connect-proxy", G_CALLBACK (connect_proxy_cb), view); - gtk_ui_manager_insert_action_group (view->uimanager, view->action_group, -1); + gtk_ui_manager_insert_action_group (view->uimanager, + view->action_group, -1); g_free (group); } @@ -190,7 +201,10 @@ egg_recent_view_uimanager_set_list (EggRecentViewUIManager *view, GList *list) if (view->tooltip_func != NULL) tooltip = (*view->tooltip_func) (item, view->tooltip_func_data); - basename = g_path_get_basename (uri); + if (!tooltip) + tooltip = g_strdup_printf (_("Open '%s'"), uri); + + basename = egg_recent_item_get_short_name (item); escaped = egg_recent_util_escape_underlines (basename); g_free (basename); g_free (uri); @@ -260,6 +274,84 @@ egg_recent_view_uimanager_set_list (EggRecentViewUIManager *view, GList *list) } static void +egg_recent_view_uimanager_set_empty_list (EggRecentViewUIManager *view) +{ + gboolean is_embedded; + + g_return_if_fail (view); + + egg_recent_view_uimanager_clear (view); + + if (view->merge_id == 0) + view->merge_id = gtk_ui_manager_new_merge_id (view->uimanager); + + if (view->action_group == NULL) { + gchar *group = g_strdup_printf ("EggRecentActions%u", + view->merge_id); + view->action_group = gtk_action_group_new (group); + g_signal_connect (view->action_group, "connect-proxy", + G_CALLBACK (connect_proxy_cb), view); + gtk_ui_manager_insert_action_group (view->uimanager, + view->action_group, -1); + g_free (group); + } + + if (view->leading_sep) { + gchar *sep_action = g_strdup_printf ("EggRecentLeadingSeparator%u", + view->merge_id); + gtk_ui_manager_add_ui (view->uimanager, + view->merge_id, + view->path, + sep_action, + EGG_RECENT_SEPARATOR, + GTK_UI_MANAGER_AUTO, + FALSE); + g_free (sep_action); + } + + is_embedded = (view->leading_sep && view->trailing_sep); + + if (is_embedded) { + GtkAction *action; + gchar *name; + + name = g_strdup_printf (EGG_RECENT_NAME_PREFIX "%u-0", view->merge_id); + + action = g_object_new (GTK_TYPE_ACTION, + "name", name, + "label", _("Empty"), + "sensitive", FALSE, + NULL); + + gtk_action_group_add_action (view->action_group, action); + g_object_unref (action); + + gtk_ui_manager_add_ui (view->uimanager, + view->merge_id, + view->path, + name, + name, + GTK_UI_MANAGER_AUTO, + FALSE); + + g_free (name); + } + + if (view->trailing_sep) { + gchar *sep_action = g_strdup_printf ("EggRecentTrailingSeparator%u", + view->merge_id); + gtk_ui_manager_add_ui (view->uimanager, + view->merge_id, + view->path, + sep_action, + EGG_RECENT_SEPARATOR, + GTK_UI_MANAGER_AUTO, + FALSE); + g_free (sep_action); + } +} + +static void model_changed_cb (EggRecentModel *model, GList *list, EggRecentViewUIManager *view) @@ -267,7 +359,8 @@ model_changed_cb (EggRecentModel *model, if (list != NULL) egg_recent_view_uimanager_set_list (view, list); else - egg_recent_view_uimanager_clear (view); + egg_recent_view_uimanager_set_empty_list (view); + gtk_ui_manager_ensure_update (view->uimanager); } @@ -349,6 +442,9 @@ egg_recent_view_uimanager_set_property (GObject *object, case PROP_SHOW_NUMBERS: egg_recent_view_uimanager_show_numbers (view, g_value_get_boolean (value)); break; + case PROP_LABEL_WIDTH: + egg_recent_view_uimanager_set_label_width (view, g_value_get_int (value)); + break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); break; @@ -376,6 +472,9 @@ egg_recent_view_uimanager_get_property (GObject *object, case PROP_SHOW_NUMBERS: g_value_set_boolean (value, view->show_numbers); break; + case PROP_LABEL_WIDTH: + g_value_set_int (value, view->label_width); + break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); break; @@ -474,6 +573,16 @@ egg_recent_view_uimanager_class_init (EggRecentViewUIManagerClass * klass) "Whether or not to show numbers", TRUE, G_PARAM_READWRITE)); + g_object_class_install_property (object_class, + PROP_LABEL_WIDTH, + g_param_spec_int ("label-width", + "Label Width", + "The desired width of the menu label, in characters", + -1, + G_MAXINT, + DEFAULT_LABEL_WIDTH_CHARS, + G_PARAM_READWRITE)); + klass->activate = NULL; } @@ -549,6 +658,7 @@ egg_recent_view_uimanager_init (EggRecentViewUIManager * view) view->tooltip_func_data = NULL; view->icon_size = GTK_ICON_SIZE_MENU; + view->label_width = DEFAULT_LABEL_WIDTH_CHARS; } void @@ -664,6 +774,21 @@ egg_recent_view_uimanager_get_path (EggRecentViewUIManager *view) } void +egg_recent_view_uimanager_set_label_width (EggRecentViewUIManager *view, + gint chars) +{ + g_return_if_fail (EGG_IS_RECENT_VIEW_UIMANAGER (view)); + view->label_width = chars; +} + +gint +egg_recent_view_uimanager_get_label_width (EggRecentViewUIManager *view) +{ + g_return_val_if_fail (EGG_IS_RECENT_VIEW_UIMANAGER (view), DEFAULT_LABEL_WIDTH_CHARS); + return view->label_width; +} + +void egg_recent_view_uimanager_set_action_func (EggRecentViewUIManager *view, GCallback callback, gpointer user_data) @@ -707,14 +832,6 @@ egg_recent_view_uimanager_new (GtkUIManager *uimanager, return EGG_RECENT_VIEW_UIMANAGER (view); } -/** - * egg_recent_view_uimanager_get_type: - * @: - * - * This returns a GType representing a EggRecentViewUIManager object. - * - * Returns: a GType - */ GType egg_recent_view_uimanager_get_type (void) { |