GCancellable *online_cancellable;
gboolean show_more_clicked;
+ gboolean dismissed;
};
enum {
_gtk_app_chooser_online_search_for_mimetype_finish (online, res, &error);
+ if (self->priv->dismissed)
+ goto out;
+
if (error != NULL &&
!g_error_matches (error, G_IO_ERROR, G_IO_ERROR_CANCELLED))
{
gtk_app_chooser_refresh (GTK_APP_CHOOSER (self->priv->app_chooser_widget));
}
+ out:
g_clear_error (&error);
+ g_object_unref (self);
gdk_threads_leave ();
}
GTK_WINDOW (self),
self->priv->online_cancellable,
search_for_mimetype_ready_cb,
- self);
+ g_object_ref (self));
}
static void
self->priv->online = _gtk_app_chooser_online_get_default_finish (source, res);
- if (self->priv->online != NULL)
+ if (self->priv->online != NULL &&
+ !self->priv->dismissed)
{
GtkWidget *action_area;
gtk_widget_show (self->priv->online_button);
}
+ g_object_unref (self);
+
gdk_threads_leave ();
}
static void
ensure_online_button (GtkAppChooserDialog *self)
{
- _gtk_app_chooser_online_get_default_async (app_chooser_online_get_default_ready_cb, self);
+ _gtk_app_chooser_online_get_default_async (app_chooser_online_get_default_ready_cb,
+ g_object_ref (self));
}
/* An application is valid if:
case GTK_RESPONSE_OK:
add_or_find_application (self);
break;
+ case GTK_RESPONSE_CANCEL:
+ case GTK_RESPONSE_DELETE_EVENT:
+ self->priv->dismissed = TRUE;
default :
break;
}