GtkAppChooser: Drop PackageKit integration
This will come back in a simpler form in the next commit.
This commit is contained in:
32
configure.ac
32
configure.ac
@ -1573,37 +1573,6 @@ GLIB_GSETTINGS
|
|||||||
|
|
||||||
GOBJECT_INTROSPECTION_CHECK(introspection_required_version)
|
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
|
# colord module
|
||||||
#################################################
|
#################################################
|
||||||
@ -1899,7 +1868,6 @@ fi
|
|||||||
echo " Print backends: $PRINT_BACKENDS"
|
echo " Print backends: $PRINT_BACKENDS"
|
||||||
echo " Dynamic modules: $build_dynamic_modules"
|
echo " Dynamic modules: $build_dynamic_modules"
|
||||||
echo " Included immodules: $included_immodules"
|
echo " Included immodules: $included_immodules"
|
||||||
echo " PackageKit support: $build_packagekit"
|
|
||||||
echo " colord support: $have_colord"
|
echo " colord support: $have_colord"
|
||||||
echo " Introspection: $found_introspection"
|
echo " Introspection: $found_introspection"
|
||||||
echo " Debugging: $enable_debug"
|
echo " Debugging: $enable_debug"
|
||||||
|
@ -388,16 +388,6 @@ endif
|
|||||||
gtk_semi_private_h_sources = \
|
gtk_semi_private_h_sources = \
|
||||||
gtktextlayout.h
|
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 = \
|
gtk_private_type_h_sources = \
|
||||||
gtkcsstypesprivate.h \
|
gtkcsstypesprivate.h \
|
||||||
gtktexthandleprivate.h
|
gtktexthandleprivate.h
|
||||||
@ -414,8 +404,6 @@ gtk_private_h_sources = \
|
|||||||
gtkactionhelper.h \
|
gtkactionhelper.h \
|
||||||
gtkallocatedbitmaskprivate.h \
|
gtkallocatedbitmaskprivate.h \
|
||||||
gtkappchooserprivate.h \
|
gtkappchooserprivate.h \
|
||||||
gtkappchoosermodule.h \
|
|
||||||
gtkappchooseronline.h \
|
|
||||||
gtkbindingsprivate.h \
|
gtkbindingsprivate.h \
|
||||||
gtkbitmaskprivate.h \
|
gtkbitmaskprivate.h \
|
||||||
gtkbitmaskprivateimpl.h \
|
gtkbitmaskprivateimpl.h \
|
||||||
@ -561,8 +549,7 @@ gtk_private_h_sources = \
|
|||||||
gtkwindowprivate.h \
|
gtkwindowprivate.h \
|
||||||
gtktreemenu.h \
|
gtktreemenu.h \
|
||||||
$(gtk_private_type_h_sources) \
|
$(gtk_private_type_h_sources) \
|
||||||
$(gtk_clipboard_dnd_h_sources) \
|
$(gtk_clipboard_dnd_h_sources)
|
||||||
$(gtk_appchooser_impl_h_sources)
|
|
||||||
|
|
||||||
# GTK+ C sources to build the library from
|
# GTK+ C sources to build the library from
|
||||||
deprecated_c_sources = \
|
deprecated_c_sources = \
|
||||||
@ -625,8 +612,6 @@ gtk_base_c_sources = \
|
|||||||
gtkappchooserwidget.c \
|
gtkappchooserwidget.c \
|
||||||
gtkappchooserbutton.c \
|
gtkappchooserbutton.c \
|
||||||
gtkappchooserdialog.c \
|
gtkappchooserdialog.c \
|
||||||
gtkappchoosermodule.c \
|
|
||||||
gtkappchooseronline.c \
|
|
||||||
gtkapplication.c \
|
gtkapplication.c \
|
||||||
gtkapplicationimpl.c \
|
gtkapplicationimpl.c \
|
||||||
gtkapplicationwindow.c \
|
gtkapplicationwindow.c \
|
||||||
@ -904,8 +889,7 @@ gtk_base_c_sources = \
|
|||||||
gtkwidgetpath.c \
|
gtkwidgetpath.c \
|
||||||
gtkwindow.c \
|
gtkwindow.c \
|
||||||
gtkwin32theme.c \
|
gtkwin32theme.c \
|
||||||
$(gtk_clipboard_dnd_c_sources) \
|
$(gtk_clipboard_dnd_c_sources)
|
||||||
$(gtk_appchooser_impl_c_sources)
|
|
||||||
|
|
||||||
nodist_gtk_c_sources =
|
nodist_gtk_c_sources =
|
||||||
gtk_c_sources = $(gtk_base_c_sources)
|
gtk_c_sources = $(gtk_base_c_sources)
|
||||||
|
@ -43,8 +43,6 @@
|
|||||||
|
|
||||||
#include "gtkintl.h"
|
#include "gtkintl.h"
|
||||||
#include "gtkappchooser.h"
|
#include "gtkappchooser.h"
|
||||||
#include "gtkappchooseronline.h"
|
|
||||||
#include "gtkappchooserprivate.h"
|
|
||||||
#include "gtkappchooserprivate.h"
|
#include "gtkappchooserprivate.h"
|
||||||
|
|
||||||
#include "gtkmessagedialog.h"
|
#include "gtkmessagedialog.h"
|
||||||
@ -66,7 +64,6 @@ struct _GtkAppChooserDialogPrivate {
|
|||||||
|
|
||||||
GtkWidget *label;
|
GtkWidget *label;
|
||||||
GtkWidget *button;
|
GtkWidget *button;
|
||||||
GtkWidget *online_button;
|
|
||||||
GtkWidget *inner_box;
|
GtkWidget *inner_box;
|
||||||
|
|
||||||
GtkWidget *open_label;
|
GtkWidget *open_label;
|
||||||
@ -74,9 +71,6 @@ struct _GtkAppChooserDialogPrivate {
|
|||||||
GtkWidget *app_chooser_widget;
|
GtkWidget *app_chooser_widget;
|
||||||
GtkWidget *show_more_button;
|
GtkWidget *show_more_button;
|
||||||
|
|
||||||
GtkAppChooserOnline *online;
|
|
||||||
GCancellable *online_cancellable;
|
|
||||||
|
|
||||||
gboolean show_more_clicked;
|
gboolean show_more_clicked;
|
||||||
gboolean dismissed;
|
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,
|
G_IMPLEMENT_INTERFACE (GTK_TYPE_APP_CHOOSER,
|
||||||
gtk_app_chooser_dialog_iface_init));
|
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
|
static void
|
||||||
add_or_find_application (GtkAppChooserDialog *self)
|
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
|
static void
|
||||||
gtk_app_chooser_dialog_response (GtkDialog *dialog,
|
gtk_app_chooser_dialog_response (GtkDialog *dialog,
|
||||||
gint response_id,
|
gint response_id,
|
||||||
@ -255,7 +120,6 @@ gtk_app_chooser_dialog_response (GtkDialog *dialog,
|
|||||||
break;
|
break;
|
||||||
case GTK_RESPONSE_CANCEL:
|
case GTK_RESPONSE_CANCEL:
|
||||||
case GTK_RESPONSE_DELETE_EVENT:
|
case GTK_RESPONSE_DELETE_EVENT:
|
||||||
cancel_and_clear_cancellable (self);
|
|
||||||
self->priv->dismissed = TRUE;
|
self->priv->dismissed = TRUE;
|
||||||
default :
|
default :
|
||||||
break;
|
break;
|
||||||
@ -524,7 +388,6 @@ gtk_app_chooser_dialog_constructed (GObject *object)
|
|||||||
|
|
||||||
construct_appchooser_widget (self);
|
construct_appchooser_widget (self);
|
||||||
set_dialog_properties (self);
|
set_dialog_properties (self);
|
||||||
ensure_online_button (self);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
@ -533,8 +396,6 @@ gtk_app_chooser_dialog_dispose (GObject *object)
|
|||||||
GtkAppChooserDialog *self = GTK_APP_CHOOSER_DIALOG (object);
|
GtkAppChooserDialog *self = GTK_APP_CHOOSER_DIALOG (object);
|
||||||
|
|
||||||
g_clear_object (&self->priv->gfile);
|
g_clear_object (&self->priv->gfile);
|
||||||
cancel_and_clear_cancellable (self);
|
|
||||||
g_clear_object (&self->priv->online);
|
|
||||||
|
|
||||||
self->priv->dismissed = TRUE;
|
self->priv->dismissed = TRUE;
|
||||||
|
|
||||||
|
@ -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);
|
|
||||||
}
|
|
@ -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__ */
|
|
@ -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));
|
|
||||||
}
|
|
@ -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__ */
|
|
@ -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;
|
|
||||||
}
|
|
@ -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__ */
|
|
Reference in New Issue
Block a user