summaryrefslogtreecommitdiff
path: root/gtk/gtkappchooserdialog.c
diff options
context:
space:
mode:
authorCosimo Cecchi <cosimoc@gnome.org>2010-11-24 17:11:17 +0100
committerCosimo Cecchi <cosimoc@gnome.org>2010-11-24 17:12:08 +0100
commit627f9b70a7d9d24c3a206c6866292a141d41b731 (patch)
tree2e1f08d7389fce8acf0507688430e7885d8c2074 /gtk/gtkappchooserdialog.c
parent6b900cf2761582c38b310414c9e4138dd77536a6 (diff)
downloadgtk+-627f9b70a7d9d24c3a206c6866292a141d41b731.tar.gz
app-chooser-dialog: add a 'Forget Association' context menu item
Diffstat (limited to 'gtk/gtkappchooserdialog.c')
-rw-r--r--gtk/gtkappchooserdialog.c52
1 files changed, 52 insertions, 0 deletions
diff --git a/gtk/gtkappchooserdialog.c b/gtk/gtkappchooserdialog.c
index f73d116105..e8edea8c52 100644
--- a/gtk/gtkappchooserdialog.c
+++ b/gtk/gtkappchooserdialog.c
@@ -349,6 +349,56 @@ widget_notify_for_button_cb (GObject *source,
}
static void
+forget_menu_item_activate_cb (GtkMenuItem *item,
+ gpointer user_data)
+{
+ GtkAppChooserDialog *self = user_data;
+ GAppInfo *info;
+
+ info = gtk_app_chooser_get_app_info (GTK_APP_CHOOSER (self));
+
+ if (info != NULL)
+ {
+ g_app_info_remove_supports_type (info, self->priv->content_type,
+ NULL);
+
+ gtk_app_chooser_refresh (GTK_APP_CHOOSER (self));
+
+ g_object_unref (info);
+ }
+}
+
+static GtkWidget *
+build_forget_menu_item (GtkAppChooserDialog *self)
+{
+ GtkWidget *retval;
+
+ retval = gtk_menu_item_new_with_label (_("Forget association"));
+ gtk_widget_show (retval);
+
+ g_signal_connect (retval, "activate",
+ G_CALLBACK (forget_menu_item_activate_cb), self);
+
+ return retval;
+}
+
+static void
+widget_populate_popup_cb (GtkAppChooserWidget *widget,
+ GtkMenu *menu,
+ GAppInfo *info,
+ gpointer user_data)
+{
+ GtkAppChooserDialog *self = user_data;
+ GtkWidget *menu_item;
+
+ if (g_app_info_can_remove_supports_type (info))
+ {
+ menu_item = build_forget_menu_item (self);
+ gtk_menu_shell_append (GTK_MENU_SHELL (menu), menu_item);
+ }
+}
+
+static void
build_dialog_ui (GtkAppChooserDialog *self)
{
GtkWidget *vbox;
@@ -385,6 +435,8 @@ build_dialog_ui (GtkAppChooserDialog *self)
G_CALLBACK (widget_application_activated_cb), self);
g_signal_connect (self->priv->app_chooser_widget, "notify::show-all",
G_CALLBACK (widget_notify_for_button_cb), self);
+ g_signal_connect (self->priv->app_chooser_widget, "populate-popup",
+ G_CALLBACK (widget_populate_popup_cb), self);
button = gtk_button_new_with_label (_("Show other applications"));
self->priv->show_more_button = button;