GtkAppChooser: Drop PackageKit integration

This will come back in a simpler form in the next
commit.
This commit is contained in:
Matthias Clasen 2013-12-17 20:49:28 -05:00
parent 7c98d40e94
commit de947b0ac6
9 changed files with 2 additions and 768 deletions

View File

@ -1573,37 +1573,6 @@ GLIB_GSETTINGS
GOBJECT_INTROSPECTION_CHECK(introspection_required_version)
##################################################
# Packagekit module
#################################################
AC_ARG_ENABLE(packagekit,
[AS_HELP_STRING([--enable-packagekit=@<:@yes/no/auto@:>@],
[build PackageKit open-with module [default=auto]])],
[enable_packagekit="$enableval"],
[enable_packagekit=auto])
if test "$enable_packagekit" = "auto"; then
if test "$os_win32" = "yes"; then
enable_packagekit=no
else
enable_packagekit=yes
fi
fi
AC_MSG_CHECKING([whether to use PackageKit])
build_packagekit=no
if test "x$enable_packagekit" != "xno"; then
if test "$os_win32" != "yes"; then
build_packagekit=yes
AC_DEFINE(ENABLE_PACKAGEKIT, 1, [define to enable packagekit])
else
AC_MSG_ERROR([packagekit support is not available on win32])
fi
fi
AC_MSG_RESULT([$build_packagekit])
AM_CONDITIONAL(ENABLE_PACKAGEKIT, test "x$build_packagekit" = "xyes")
##################################################
# colord module
#################################################
@ -1899,7 +1868,6 @@ fi
echo " Print backends: $PRINT_BACKENDS"
echo " Dynamic modules: $build_dynamic_modules"
echo " Included immodules: $included_immodules"
echo " PackageKit support: $build_packagekit"
echo " colord support: $have_colord"
echo " Introspection: $found_introspection"
echo " Debugging: $enable_debug"

View File

@ -388,16 +388,6 @@ endif
gtk_semi_private_h_sources = \
gtktextlayout.h
if ENABLE_PACKAGEKIT
gtk_appchooser_impl_h_sources = \
gtkappchooseronlinepk.h
endif
if ENABLE_PACKAGEKIT
gtk_appchooser_impl_c_sources = \
gtkappchooseronlinepk.c
endif
gtk_private_type_h_sources = \
gtkcsstypesprivate.h \
gtktexthandleprivate.h
@ -414,8 +404,6 @@ gtk_private_h_sources = \
gtkactionhelper.h \
gtkallocatedbitmaskprivate.h \
gtkappchooserprivate.h \
gtkappchoosermodule.h \
gtkappchooseronline.h \
gtkbindingsprivate.h \
gtkbitmaskprivate.h \
gtkbitmaskprivateimpl.h \
@ -561,8 +549,7 @@ gtk_private_h_sources = \
gtkwindowprivate.h \
gtktreemenu.h \
$(gtk_private_type_h_sources) \
$(gtk_clipboard_dnd_h_sources) \
$(gtk_appchooser_impl_h_sources)
$(gtk_clipboard_dnd_h_sources)
# GTK+ C sources to build the library from
deprecated_c_sources = \
@ -625,8 +612,6 @@ gtk_base_c_sources = \
gtkappchooserwidget.c \
gtkappchooserbutton.c \
gtkappchooserdialog.c \
gtkappchoosermodule.c \
gtkappchooseronline.c \
gtkapplication.c \
gtkapplicationimpl.c \
gtkapplicationwindow.c \
@ -904,8 +889,7 @@ gtk_base_c_sources = \
gtkwidgetpath.c \
gtkwindow.c \
gtkwin32theme.c \
$(gtk_clipboard_dnd_c_sources) \
$(gtk_appchooser_impl_c_sources)
$(gtk_clipboard_dnd_c_sources)
nodist_gtk_c_sources =
gtk_c_sources = $(gtk_base_c_sources)

View File

@ -43,8 +43,6 @@
#include "gtkintl.h"
#include "gtkappchooser.h"
#include "gtkappchooseronline.h"
#include "gtkappchooserprivate.h"
#include "gtkappchooserprivate.h"
#include "gtkmessagedialog.h"
@ -66,7 +64,6 @@ struct _GtkAppChooserDialogPrivate {
GtkWidget *label;
GtkWidget *button;
GtkWidget *online_button;
GtkWidget *inner_box;
GtkWidget *open_label;
@ -74,9 +71,6 @@ struct _GtkAppChooserDialogPrivate {
GtkWidget *app_chooser_widget;
GtkWidget *show_more_button;
GtkAppChooserOnline *online;
GCancellable *online_cancellable;
gboolean show_more_clicked;
gboolean dismissed;
};
@ -93,125 +87,6 @@ G_DEFINE_TYPE_WITH_CODE (GtkAppChooserDialog, gtk_app_chooser_dialog, GTK_TYPE_D
G_IMPLEMENT_INTERFACE (GTK_TYPE_APP_CHOOSER,
gtk_app_chooser_dialog_iface_init));
static void
show_error_dialog (const gchar *primary,
const gchar *secondary,
GtkWindow *parent)
{
GtkWidget *message_dialog;
message_dialog = gtk_message_dialog_new (parent, 0,
GTK_MESSAGE_ERROR,
GTK_BUTTONS_OK,
NULL);
g_object_set (message_dialog,
"text", primary,
"secondary-text", secondary,
NULL);
gtk_dialog_set_default_response (GTK_DIALOG (message_dialog), GTK_RESPONSE_OK);
gtk_widget_show (message_dialog);
g_signal_connect (message_dialog, "response",
G_CALLBACK (gtk_widget_destroy), NULL);
}
static void
search_for_mimetype_ready_cb (GObject *source,
GAsyncResult *res,
gpointer user_data)
{
GtkAppChooserOnline *online = GTK_APP_CHOOSER_ONLINE (source);
GtkAppChooserDialog *self = user_data;
GError *error = NULL;
gdk_threads_enter ();
_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))
{
show_error_dialog (_("Failed to look for applications online"),
error->message, GTK_WINDOW (self));
}
else
{
gtk_widget_set_sensitive (self->priv->online_button, TRUE);
gtk_app_chooser_refresh (GTK_APP_CHOOSER (self->priv->app_chooser_widget));
}
out:
g_clear_object (&self->priv->online_cancellable);
g_clear_error (&error);
g_object_unref (self);
gdk_threads_leave ();
}
static void
online_button_clicked_cb (GtkButton *b,
gpointer user_data)
{
GtkAppChooserDialog *self = user_data;
self->priv->online_cancellable = g_cancellable_new ();
gtk_widget_set_sensitive (self->priv->online_button, FALSE);
_gtk_app_chooser_online_search_for_mimetype_async (self->priv->online,
self->priv->content_type,
GTK_WINDOW (self),
self->priv->online_cancellable,
search_for_mimetype_ready_cb,
g_object_ref (self));
}
static void
app_chooser_online_get_default_ready_cb (GObject *source,
GAsyncResult *res,
gpointer user_data)
{
GtkAppChooserDialog *self = user_data;
gdk_threads_enter ();
self->priv->online = _gtk_app_chooser_online_get_default_finish (source, res);
if (self->priv->online != NULL &&
!self->priv->dismissed)
{
GtkWidget *action_area;
action_area = gtk_dialog_get_action_area (GTK_DIALOG (self));
self->priv->online_button = gtk_button_new_with_mnemonic (_("_Find applications online"));
gtk_box_pack_start (GTK_BOX (action_area), self->priv->online_button,
FALSE, FALSE, 0);
gtk_button_box_set_child_secondary (GTK_BUTTON_BOX (action_area), self->priv->online_button,
TRUE);
g_signal_connect (self->priv->online_button, "clicked",
G_CALLBACK (online_button_clicked_cb), self);
if (!self->priv->content_type)
gtk_widget_set_sensitive (self->priv->online_button, FALSE);
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,
g_object_ref (self));
}
static void
add_or_find_application (GtkAppChooserDialog *self)
@ -231,16 +106,6 @@ add_or_find_application (GtkAppChooserDialog *self)
}
}
static void
cancel_and_clear_cancellable (GtkAppChooserDialog *self)
{
if (self->priv->online_cancellable != NULL)
{
g_cancellable_cancel (self->priv->online_cancellable);
g_clear_object (&self->priv->online_cancellable);
}
}
static void
gtk_app_chooser_dialog_response (GtkDialog *dialog,
gint response_id,
@ -255,7 +120,6 @@ gtk_app_chooser_dialog_response (GtkDialog *dialog,
break;
case GTK_RESPONSE_CANCEL:
case GTK_RESPONSE_DELETE_EVENT:
cancel_and_clear_cancellable (self);
self->priv->dismissed = TRUE;
default :
break;
@ -524,7 +388,6 @@ gtk_app_chooser_dialog_constructed (GObject *object)
construct_appchooser_widget (self);
set_dialog_properties (self);
ensure_online_button (self);
}
static void
@ -533,8 +396,6 @@ gtk_app_chooser_dialog_dispose (GObject *object)
GtkAppChooserDialog *self = GTK_APP_CHOOSER_DIALOG (object);
g_clear_object (&self->priv->gfile);
cancel_and_clear_cancellable (self);
g_clear_object (&self->priv->online);
self->priv->dismissed = TRUE;

View File

@ -1,57 +0,0 @@
/*
* gtkappchoosermodule.c: an extension point for online integration
*
* Copyright (C) 2010 Red Hat, Inc.
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Library General Public License as
* published by the Free Software Foundation; either version 2 of the
* License, or (at your option) any later version.
*
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Library General Public License for more details.
*
* You should have received a copy of the GNU Library General Public
* License along with this library. If not, see <http://www.gnu.org/licenses/>.
*
* Authors: Cosimo Cecchi <ccecchi@redhat.com>
*/
#include "config.h"
#include "gtkappchoosermodule.h"
#include <gio/gio.h>
#include "gtkappchooseronline.h"
#ifdef ENABLE_PACKAGEKIT
#include "gtkappchooseronlinepk.h"
#endif
G_LOCK_DEFINE_STATIC (registered_ep);
void
_gtk_app_chooser_module_ensure (void)
{
static gboolean registered_ep = FALSE;
GIOExtensionPoint *ep;
G_LOCK (registered_ep);
if (!registered_ep)
{
registered_ep = TRUE;
ep = g_io_extension_point_register ("gtkappchooser-online");
g_io_extension_point_set_required_type (ep, GTK_TYPE_APP_CHOOSER_ONLINE);
#ifdef ENABLE_PACKAGEKIT
_gtk_app_chooser_online_pk_get_type ();
#endif
}
G_UNLOCK (registered_ep);
}

View File

@ -1,33 +0,0 @@
/*
* gtkappchoosermodule.h: an extension point for online integration
*
* Copyright (C) 2010 Red Hat, Inc.
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Library General Public License as
* published by the Free Software Foundation; either version 2 of the
* License, or (at your option) any later version.
*
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Library General Public License for more details.
*
* You should have received a copy of the GNU Library General Public
* License along with this library. If not, see <http://www.gnu.org/licenses/>.
*
* Authors: Cosimo Cecchi <ccecchi@redhat.com>
*/
#ifndef __GTK_APP_CHOOSER_MODULE_H__
#define __GTK_APP_CHOOSER_MODULE_H__
#include <glib.h>
G_BEGIN_DECLS
void _gtk_app_chooser_module_ensure (void);
G_END_DECLS
#endif /* __GTK_APP_CHOOSER_MODULE_H__ */

View File

@ -1,103 +0,0 @@
/*
* gtkappchooseronline.h: an extension point for online integration
*
* Copyright (C) 2010 Red Hat, Inc.
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Library General Public License as
* published by the Free Software Foundation; either version 2 of the
* License, or (at your option) any later version.
*
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Library General Public License for more details.
*
* You should have received a copy of the GNU Library General Public
* License along with this library. If not, see <http://www.gnu.org/licenses/>.
*
* Authors: Cosimo Cecchi <ccecchi@redhat.com>
*/
#include "config.h"
#include "gtkappchooseronline.h"
#include "gtkappchoosermodule.h"
#include "gtkintl.h"
#include <gio/gio.h>
G_DEFINE_INTERFACE_WITH_CODE (GtkAppChooserOnline, _gtk_app_chooser_online, G_TYPE_OBJECT,
g_type_interface_add_prerequisite (g_define_type_id, G_TYPE_ASYNC_INITABLE);)
static void
_gtk_app_chooser_online_default_init (GtkAppChooserOnlineInterface *iface)
{
/* do nothing */
}
GtkAppChooserOnline *
_gtk_app_chooser_online_get_default_finish (GObject *source,
GAsyncResult *result)
{
GtkAppChooserOnline *retval;
retval = GTK_APP_CHOOSER_ONLINE (g_async_initable_new_finish (G_ASYNC_INITABLE (source),
result, NULL));
return retval;
}
void
_gtk_app_chooser_online_get_default_async (GAsyncReadyCallback callback,
gpointer user_data)
{
GIOExtensionPoint *ep;
GIOExtension *extension;
GList *extensions;
_gtk_app_chooser_module_ensure ();
ep = g_io_extension_point_lookup ("gtkappchooser-online");
extensions = g_io_extension_point_get_extensions (ep);
if (extensions != NULL)
{
/* pick the first */
extension = extensions->data;
g_async_initable_new_async (g_io_extension_get_type (extension), G_PRIORITY_DEFAULT,
NULL, callback, user_data, NULL);
}
}
void
_gtk_app_chooser_online_search_for_mimetype_async (GtkAppChooserOnline *self,
const gchar *content_type,
GtkWindow *parent,
GCancellable *cancellable,
GAsyncReadyCallback callback,
gpointer user_data)
{
GtkAppChooserOnlineInterface *iface;
g_return_if_fail (GTK_IS_APP_CHOOSER_ONLINE (self));
iface = GTK_APP_CHOOSER_ONLINE_GET_IFACE (self);
(* iface->search_for_mimetype_async) (self, content_type, parent, cancellable, callback, user_data);
}
gboolean
_gtk_app_chooser_online_search_for_mimetype_finish (GtkAppChooserOnline *self,
GAsyncResult *res,
GError **error)
{
GtkAppChooserOnlineInterface *iface;
g_return_val_if_fail (GTK_IS_APP_CHOOSER_ONLINE (self), FALSE);
iface = GTK_APP_CHOOSER_ONLINE_GET_IFACE (self);
return ((* iface->search_for_mimetype_finish) (self, res, error));
}

View File

@ -1,73 +0,0 @@
/*
* gtkappchooseronline.h: an extension point for online integration
*
* Copyright (C) 2010 Red Hat, Inc.
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Library General Public License as
* published by the Free Software Foundation; either version 2 of the
* License, or (at your option) any later version.
*
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Library General Public License for more details.
*
* You should have received a copy of the GNU Library General Public
* License along with this library. If not, see <http://www.gnu.org/licenses/>.
*
* Authors: Cosimo Cecchi <ccecchi@redhat.com>
*/
#ifndef __GTK_APP_CHOOSER_ONLINE_H__
#define __GTK_APP_CHOOSER_ONLINE_H__
#include <glib.h>
#include <gtk/gtkwindow.h>
#include <gio/gio.h>
G_BEGIN_DECLS
#define GTK_TYPE_APP_CHOOSER_ONLINE (_gtk_app_chooser_online_get_type ())
#define GTK_APP_CHOOSER_ONLINE(o) (G_TYPE_CHECK_INSTANCE_CAST ((o), GTK_TYPE_APP_CHOOSER_ONLINE, GtkAppChooserOnline))
#define GTK_IS_APP_CHOOSER_ONLINE(o) (G_TYPE_CHECK_INSTANCE_TYPE ((o), GTK_TYPE_APP_CHOOSER_ONLINE))
#define GTK_APP_CHOOSER_ONLINE_GET_IFACE(obj) (G_TYPE_INSTANCE_GET_INTERFACE ((obj), GTK_TYPE_APP_CHOOSER_ONLINE, GtkAppChooserOnlineInterface))
typedef struct _GtkAppChooserOnline GtkAppChooserOnline;
typedef struct _GtkAppChooserOnlineInterface GtkAppChooserOnlineInterface;
struct _GtkAppChooserOnlineInterface {
GTypeInterface g_iface;
/* Methods */
void (*search_for_mimetype_async) (GtkAppChooserOnline *self,
const gchar *content_type,
GtkWindow *parent,
GCancellable *cancellable,
GAsyncReadyCallback callback,
gpointer user_data);
gboolean (*search_for_mimetype_finish) (GtkAppChooserOnline *self,
GAsyncResult *res,
GError **error);
};
GType _gtk_app_chooser_online_get_type (void) G_GNUC_CONST;
void _gtk_app_chooser_online_get_default_async (GAsyncReadyCallback callback,
gpointer user_data);
GtkAppChooserOnline * _gtk_app_chooser_online_get_default_finish (GObject *source,
GAsyncResult *result);
void _gtk_app_chooser_online_search_for_mimetype_async (GtkAppChooserOnline *self,
const gchar *content_type,
GtkWindow *parent,
GCancellable *cancellable,
GAsyncReadyCallback callback,
gpointer user_data);
gboolean _gtk_app_chooser_online_search_for_mimetype_finish (GtkAppChooserOnline *self,
GAsyncResult *res,
GError **error);
#endif /* __GTK_APP_CHOOSER_ONLINE_H__ */

View File

@ -1,262 +0,0 @@
/*
* gtkappchooseronlinepk.c: packagekit module for app-chooser
*
* Copyright (C) 2010 Red Hat, Inc.
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Library General Public License as
* published by the Free Software Foundation; either version 2 of the
* License, or (at your option) any later version.
*
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Library General Public License for more details.
*
* You should have received a copy of the GNU Library General Public
* License along with this library. If not, see <http://www.gnu.org/licenses/>.
*
* Authors: Cosimo Cecchi <ccecchi@redhat.com>
*/
#include "config.h"
#include "gtkappchooseronlinepk.h"
#include "gtkappchooseronline.h"
#ifdef GDK_WINDOWING_X11
#include "x11/gdkx.h"
#endif
#include <gio/gio.h>
#define gtk_app_chooser_online_pk_get_type _gtk_app_chooser_online_pk_get_type
static void app_chooser_online_iface_init (GtkAppChooserOnlineInterface *iface);
static void app_chooser_online_pk_async_initable_init (GAsyncInitableIface *iface);
struct _GtkAppChooserOnlinePkPrivate {
GSimpleAsyncResult *init_result;
guint watch_id;
GDBusProxy *proxy;
GSimpleAsyncResult *result;
GtkWindow *parent;
};
G_DEFINE_TYPE_WITH_CODE (GtkAppChooserOnlinePk, gtk_app_chooser_online_pk,
G_TYPE_OBJECT,
G_ADD_PRIVATE (GtkAppChooserOnlinePk)
G_IMPLEMENT_INTERFACE (G_TYPE_ASYNC_INITABLE,
app_chooser_online_pk_async_initable_init)
G_IMPLEMENT_INTERFACE (GTK_TYPE_APP_CHOOSER_ONLINE,
app_chooser_online_iface_init)
g_io_extension_point_implement ("gtkappchooser-online",
g_define_type_id,
"packagekit", 10));
static void
gtk_app_chooser_online_pk_dispose (GObject *obj)
{
GtkAppChooserOnlinePk *self = GTK_APP_CHOOSER_ONLINE_PK (obj);
g_clear_object (&self->priv->result);
g_clear_object (&self->priv->proxy);
G_OBJECT_CLASS (gtk_app_chooser_online_pk_parent_class)->dispose (obj);
}
static void
gtk_app_chooser_online_pk_class_init (GtkAppChooserOnlinePkClass *klass)
{
GObjectClass *oclass = G_OBJECT_CLASS (klass);
oclass->dispose = gtk_app_chooser_online_pk_dispose;
}
static void
gtk_app_chooser_online_pk_init (GtkAppChooserOnlinePk *self)
{
self->priv = gtk_app_chooser_online_pk_get_instance_private (self);
}
static gboolean
pk_search_mime_finish (GtkAppChooserOnline *obj,
GAsyncResult *res,
GError **error)
{
GSimpleAsyncResult *simple = G_SIMPLE_ASYNC_RESULT (res);
return !g_simple_async_result_propagate_error (simple, error);
}
static void
install_mime_types_ready_cb (GObject *source,
GAsyncResult *res,
gpointer user_data)
{
GtkAppChooserOnlinePk *self = user_data;
GDBusProxy *proxy = G_DBUS_PROXY (source);
GError *error = NULL;
GVariant *variant;
variant = g_dbus_proxy_call_finish (proxy, res, &error);
if (variant == NULL)
{
/* don't show errors if the user cancelled the installation explicitely
* or if PK wasn't able to find any apps
*/
if (g_strcmp0 (g_dbus_error_get_remote_error (error), "org.freedesktop.PackageKit.Modify.Cancelled") != 0 &&
g_strcmp0 (g_dbus_error_get_remote_error (error), "org.freedesktop.PackageKit.Modify.NoPackagesFound") != 0)
g_simple_async_result_set_from_error (self->priv->result, error);
g_error_free (error);
}
g_simple_async_result_complete (self->priv->result);
g_clear_object (&self->priv->result);
}
static void
pk_search_mime_async (GtkAppChooserOnline *obj,
const gchar *content_type,
GtkWindow *parent,
GCancellable *cancellable,
GAsyncReadyCallback callback,
gpointer user_data)
{
GtkAppChooserOnlinePk *self = GTK_APP_CHOOSER_ONLINE_PK (obj);
guint xid = 0;
GdkWindow *window;
const gchar *mime_types[2];
self->priv->result = g_simple_async_result_new (G_OBJECT (self),
callback, user_data,
_gtk_app_chooser_online_search_for_mimetype_async);
#ifdef GDK_WINDOWING_X11
window = gtk_widget_get_window (GTK_WIDGET (parent));
if (GDK_IS_X11_WINDOW (window))
xid = GDK_WINDOW_XID (window);
#endif
mime_types[0] = content_type;
mime_types[1] = NULL;
g_dbus_proxy_call (self->priv->proxy,
"InstallMimeTypes",
g_variant_new ("(u^ass)",
xid,
mime_types,
"hide-confirm-search"),
G_DBUS_CALL_FLAGS_NONE,
G_MAXINT, /* no timeout */
cancellable,
install_mime_types_ready_cb,
self);
}
static void
app_chooser_online_iface_init (GtkAppChooserOnlineInterface *iface)
{
iface->search_for_mimetype_async = pk_search_mime_async;
iface->search_for_mimetype_finish = pk_search_mime_finish;
}
static void
pk_proxy_created_cb (GObject *source,
GAsyncResult *result,
gpointer user_data)
{
GtkAppChooserOnlinePk *self = user_data;
GDBusProxy *proxy;
proxy = g_dbus_proxy_new_finish (result, NULL);
if (proxy == NULL)
{
g_simple_async_result_set_op_res_gboolean (self->priv->init_result, FALSE);
}
else
{
g_simple_async_result_set_op_res_gboolean (self->priv->init_result, TRUE);
self->priv->proxy = proxy;
}
g_simple_async_result_complete (self->priv->init_result);
g_clear_object (&self->priv->init_result);
}
static void
pk_appeared_cb (GDBusConnection *conn,
const gchar *name,
const gchar *owner,
gpointer user_data)
{
GtkAppChooserOnlinePk *self = user_data;
/* create the proxy */
g_dbus_proxy_new (conn, 0, NULL,
"org.freedesktop.PackageKit",
"/org/freedesktop/PackageKit",
"org.freedesktop.PackageKit.Modify",
NULL,
pk_proxy_created_cb,
self);
g_bus_unwatch_name (self->priv->watch_id);
}
static void
pk_vanished_cb (GDBusConnection *conn,
const gchar *name,
gpointer user_data)
{
GtkAppChooserOnlinePk *self = user_data;
/* just return */
g_simple_async_result_set_op_res_gboolean (self->priv->init_result, FALSE);
g_simple_async_result_complete (self->priv->init_result);
g_bus_unwatch_name (self->priv->watch_id);
g_clear_object (&self->priv->init_result);
}
static gboolean
app_chooser_online_pk_init_finish (GAsyncInitable *init,
GAsyncResult *res,
GError **error)
{
return g_simple_async_result_get_op_res_gboolean (G_SIMPLE_ASYNC_RESULT (res));
}
static void
app_chooser_online_pk_init_async (GAsyncInitable *init,
int io_priority,
GCancellable *cancellable,
GAsyncReadyCallback callback,
gpointer user_data)
{
GtkAppChooserOnlinePk *self = GTK_APP_CHOOSER_ONLINE_PK (init);
self->priv->init_result = g_simple_async_result_new (G_OBJECT (self),
callback, user_data,
_gtk_app_chooser_online_get_default_async);
self->priv->watch_id =
g_bus_watch_name (G_BUS_TYPE_SESSION,
"org.freedesktop.PackageKit",
G_BUS_NAME_WATCHER_FLAGS_AUTO_START,
pk_appeared_cb,
pk_vanished_cb,
self,
NULL);
}
static void
app_chooser_online_pk_async_initable_init (GAsyncInitableIface *iface)
{
iface->init_async = app_chooser_online_pk_init_async;
iface->init_finish = app_chooser_online_pk_init_finish;
}

View File

@ -1,51 +0,0 @@
/*
* gtkappchooseronlinepk.h: an extension point for online integration
*
* Copyright (C) 2010 Red Hat, Inc.
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Library General Public License as
* published by the Free Software Foundation; either version 2 of the
* License, or (at your option) any later version.
*
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Library General Public License for more details.
*
* You should have received a copy of the GNU Library General Public
* License along with this library. If not, see <http://www.gnu.org/licenses/>.
*
* Authors: Cosimo Cecchi <ccecchi@redhat.com>
*/
#ifndef __GTK_APP_CHOOSER_ONLINE_PK_H__
#define __GTK_APP_CHOOSER_ONLINE_PK_H__
#include <gtk/gtkappchooseronline.h>
#include <glib.h>
#define GTK_TYPE_APP_CHOOSER_ONLINE_PK (_gtk_app_chooser_online_pk_get_type ())
#define GTK_APP_CHOOSER_ONLINE_PK(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), GTK_TYPE_APP_CHOOSER_ONLINE_PK, GtkAppChooserOnlinePk))
#define GTK_APP_CHOOSER_ONLINE_PK_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), GTK_TYPE_APP_CHOOSER_ONLINE_PK, GtkAppChooserOnlinePkClass))
#define GTK_IS_APP_CHOOSER_ONLINE_PK(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GTK_TYPE_APP_CHOOSER_ONLINE_PK))
#define GTK_IS_APP_CHOOSER_ONLINE_PK_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), GTK_TYPE_APP_CHOOSER_ONLINE_PK))
#define GTK_APP_CHOOSER_ONLINE_PK_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), GTK_TYPE_APP_CHOOSER_ONLINE_PK, GtkAppChooserOnlinePkClass))
typedef struct _GtkAppChooserOnlinePk GtkAppChooserOnlinePk;
typedef struct _GtkAppChooserOnlinePkClass GtkAppChooserOnlinePkClass;
typedef struct _GtkAppChooserOnlinePkPrivate GtkAppChooserOnlinePkPrivate;
struct _GtkAppChooserOnlinePk {
GObject parent;
GtkAppChooserOnlinePkPrivate *priv;
};
struct _GtkAppChooserOnlinePkClass {
GObjectClass parent_class;
};
GType _gtk_app_chooser_online_pk_get_type (void);
#endif /* __GTK_APP_CHOOSER_ONLINE_PK_H__ */