From 1be137ae9f224cb07e1a5aa2d4b8ef89674074c1 Mon Sep 17 00:00:00 2001 From: Cosimo Cecchi Date: Tue, 23 Nov 2010 12:46:34 +0100 Subject: [PATCH] open-with-widget: let the default fallback text be customizable We'll set it from the dialog. --- gtk/gtkopenwithwidget.c | 68 +++++++++++++++++++++++++++++++++-------- gtk/gtkopenwithwidget.h | 3 ++ 2 files changed, 59 insertions(+), 12 deletions(-) diff --git a/gtk/gtkopenwithwidget.c b/gtk/gtkopenwithwidget.c index c25c2f7c73..0e067585cc 100644 --- a/gtk/gtkopenwithwidget.c +++ b/gtk/gtkopenwithwidget.c @@ -41,7 +41,8 @@ struct _GtkOpenWithWidgetPrivate { GAppInfo *selected_app_info; - char *content_type; + gchar *content_type; + gchar *default_text; gboolean show_recommended; gboolean show_fallback; gboolean show_other; @@ -76,6 +77,7 @@ enum { PROP_SHOW_OTHER, PROP_SHOW_ALL, PROP_RADIO_MODE, + PROP_DEFAULT_TEXT, N_PROPERTIES }; @@ -596,16 +598,21 @@ gtk_open_with_widget_add_section (GtkOpenWithWidget *self, static void add_no_applications_label (GtkOpenWithWidget *self) { - gchar *string, *string2, *desc; + gchar *text = NULL, *desc; + const gchar *string; GtkTreeIter iter; - desc = g_content_type_get_description (self->priv->content_type); - string2 = g_strdup_printf (_("No applications available to open \"%s\""), - desc); - - string = g_strdup_printf ("%s\n%s", - string2, - _("Click \"Show other applications\" for more options")); + if (self->priv->default_text == NULL) + { + desc = g_content_type_get_description (self->priv->content_type); + string = text = g_strdup_printf (_("No applications available to open \"%s\""), + desc); + g_free (desc); + } + else + { + string = self->priv->default_text; + } gtk_list_store_append (self->priv->program_list_store, &iter); gtk_list_store_set (self->priv->program_list_store, &iter, @@ -614,9 +621,7 @@ add_no_applications_label (GtkOpenWithWidget *self) COLUMN_RECOMMENDED, TRUE, -1); - g_free (string); - g_free (string2); - g_free (desc); + g_free (text); } static void @@ -816,6 +821,9 @@ gtk_open_with_widget_set_property (GObject *object, case PROP_RADIO_MODE: gtk_open_with_widget_set_radio_mode (self, g_value_get_boolean (value)); break; + case PROP_DEFAULT_TEXT: + gtk_open_with_widget_set_default_text (self, g_value_get_string (value)); + break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec); break; @@ -850,6 +858,9 @@ gtk_open_with_widget_get_property (GObject *object, case PROP_RADIO_MODE: g_value_set_boolean (value, self->priv->radio_mode); break; + case PROP_DEFAULT_TEXT: + g_value_set_string (value, self->priv->default_text); + break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec); break; @@ -875,6 +886,7 @@ gtk_open_with_widget_finalize (GObject *object) GtkOpenWithWidget *self = GTK_OPEN_WITH_WIDGET (object); g_free (self->priv->content_type); + g_free (self->priv->default_text); G_OBJECT_CLASS (gtk_open_with_widget_parent_class)->finalize (object); } @@ -943,6 +955,13 @@ gtk_open_with_widget_class_init (GtkOpenWithWidgetClass *klass) G_PARAM_READWRITE | G_PARAM_CONSTRUCT | G_PARAM_STATIC_STRINGS); g_object_class_install_property (gobject_class, PROP_RADIO_MODE, pspec); + pspec = g_param_spec_string ("default-text", + P_("Widget's default text"), + P_("The default text appearing when there are no applications"), + NULL, + G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS); + g_object_class_install_property (gobject_class, PROP_DEFAULT_TEXT, pspec); + signals[SIGNAL_APPLICATION_SELECTED] = g_signal_new ("application-selected", GTK_TYPE_OPEN_WITH_WIDGET, @@ -1169,3 +1188,28 @@ gtk_open_with_widget_get_radio_mode (GtkOpenWithWidget *self) return self->priv->radio_mode; } + +void +gtk_open_with_widget_set_default_text (GtkOpenWithWidget *self, + const gchar *text) +{ + g_return_if_fail (GTK_IS_OPEN_WITH_WIDGET (self)); + + if (g_strcmp0 (text, self->priv->default_text) != 0) + { + g_free (self->priv->default_text); + self->priv->default_text = g_strdup (text); + + g_object_notify (G_OBJECT (self), "default-text"); + + gtk_open_with_refresh (GTK_OPEN_WITH (self)); + } +} + +const gchar * +gtk_open_with_widget_get_default_text (GtkOpenWithWidget *self) +{ + g_return_val_if_fail (GTK_IS_OPEN_WITH_WIDGET (self), NULL); + + return self->priv->default_text; +} diff --git a/gtk/gtkopenwithwidget.h b/gtk/gtkopenwithwidget.h index a5053031cb..d23bbb6ea0 100644 --- a/gtk/gtkopenwithwidget.h +++ b/gtk/gtkopenwithwidget.h @@ -102,5 +102,8 @@ void gtk_open_with_widget_set_radio_mode (GtkOpenWithWidget *self, gboolean setting); gboolean gtk_open_with_widget_get_radio_mode (GtkOpenWithWidget *self); +void gtk_open_with_widget_set_default_text (GtkOpenWithWidget *self, + const gchar *text); +const gchar * gtk_open_with_widget_get_default_text (GtkOpenWithWidget *self); #endif /* __GTK_OPEN_WITH_WIDGET_H__ */