allow reuse of object
This commit is contained in:
parent
456bf0baf4
commit
9c7106c399
@ -43,6 +43,7 @@ struct PkApplicationPrivate
|
||||
{
|
||||
GladeXML *glade_xml;
|
||||
GtkListStore *store;
|
||||
PkTaskClient *tclient;
|
||||
gchar *package;
|
||||
};
|
||||
|
||||
@ -114,10 +115,12 @@ pk_application_help_cb (GtkWidget *widget,
|
||||
* @graph: This graph class instance
|
||||
**/
|
||||
static void
|
||||
pk_application_install_cb (GtkWidget *widget,
|
||||
PkApplication *application)
|
||||
pk_application_install_cb (GtkWidget *widget,
|
||||
PkApplication *application)
|
||||
{
|
||||
pk_debug ("install %s", application->priv->package);
|
||||
pk_task_client_install_package (application->priv->tclient,
|
||||
application->priv->package);
|
||||
}
|
||||
|
||||
/**
|
||||
@ -126,10 +129,12 @@ pk_application_install_cb (GtkWidget *widget,
|
||||
* @graph: This graph class instance
|
||||
**/
|
||||
static void
|
||||
pk_application_remove_cb (GtkWidget *widget,
|
||||
PkApplication *application)
|
||||
pk_application_remove_cb (GtkWidget *widget,
|
||||
PkApplication *application)
|
||||
{
|
||||
pk_debug ("remove %s", application->priv->package);
|
||||
pk_task_client_remove_package (application->priv->tclient,
|
||||
application->priv->package);
|
||||
}
|
||||
|
||||
/**
|
||||
@ -161,7 +166,7 @@ pk_application_close_cb (GtkWidget *widget,
|
||||
* pk_console_package_cb:
|
||||
**/
|
||||
static void
|
||||
pk_console_package_cb (PkTaskClient *tclient, guint value, const gchar *package, const gchar *summary, PkApplication *application)
|
||||
pk_console_package_cb (PkTaskClient *tclient, guint value, const gchar *package, const gchar *summary, PkApplication *application)
|
||||
{
|
||||
GtkTreeIter iter;
|
||||
g_debug ("package = %i:%s:%s", value, package, summary);
|
||||
@ -173,6 +178,15 @@ pk_console_package_cb (PkTaskClient *tclient, guint value, const gchar *package,
|
||||
-1);
|
||||
}
|
||||
|
||||
/**
|
||||
* pk_console_finished_cb:
|
||||
**/
|
||||
static void
|
||||
pk_console_finished_cb (PkTaskClient *tclient, PkTaskStatus status, PkApplication *application)
|
||||
{
|
||||
pk_task_client_reset (application->priv->tclient);
|
||||
}
|
||||
|
||||
/**
|
||||
* pk_application_find_cb:
|
||||
* @widget: The GtkWidget object
|
||||
@ -184,7 +198,6 @@ pk_application_find_cb (GtkWidget *button_widget,
|
||||
{
|
||||
GtkWidget *widget;
|
||||
const gchar *package;
|
||||
PkTaskClient *tclient;
|
||||
|
||||
widget = glade_xml_get_widget (application->priv->glade_xml, "entry_text");
|
||||
package = gtk_entry_get_text (GTK_ENTRY (widget));
|
||||
@ -194,10 +207,7 @@ pk_application_find_cb (GtkWidget *button_widget,
|
||||
|
||||
g_debug ("find %s", package);
|
||||
|
||||
tclient = pk_task_client_new ();
|
||||
g_signal_connect (tclient, "package",
|
||||
G_CALLBACK (pk_console_package_cb), application);
|
||||
pk_task_client_find_packages (tclient, package);
|
||||
pk_task_client_find_packages (application->priv->tclient, package);
|
||||
}
|
||||
|
||||
/**
|
||||
@ -337,6 +347,12 @@ pk_application_init (PkApplication *application)
|
||||
application->priv = PK_APPLICATION_GET_PRIVATE (application);
|
||||
application->priv->package = NULL;
|
||||
|
||||
application->priv->tclient = pk_task_client_new ();
|
||||
g_signal_connect (application->priv->tclient, "package",
|
||||
G_CALLBACK (pk_console_package_cb), application);
|
||||
g_signal_connect (application->priv->tclient, "finished",
|
||||
G_CALLBACK (pk_console_finished_cb), application);
|
||||
|
||||
application->priv->glade_xml = glade_xml_new (PK_DATA "/pk-application.glade", NULL, NULL);
|
||||
main_window = glade_xml_get_widget (application->priv->glade_xml, "window_manager");
|
||||
|
||||
@ -371,6 +387,10 @@ pk_application_init (PkApplication *application)
|
||||
G_CALLBACK (pk_application_deps_cb), application);
|
||||
gtk_widget_set_sensitive (widget, FALSE);
|
||||
|
||||
widget = glade_xml_get_widget (application->priv->glade_xml, "progressbar_status");
|
||||
gtk_progress_bar_set_fraction (GTK_PROGRESS_BAR (widget), 0.25);
|
||||
gtk_widget_hide (widget);
|
||||
|
||||
widget = glade_xml_get_widget (application->priv->glade_xml, "button_find");
|
||||
g_signal_connect (widget, "clicked",
|
||||
G_CALLBACK (pk_application_find_cb), application);
|
||||
@ -432,6 +452,7 @@ pk_application_finalize (GObject *object)
|
||||
application->priv = PK_APPLICATION_GET_PRIVATE (application);
|
||||
|
||||
g_object_unref (application->priv->store);
|
||||
g_object_unref (application->priv->tclient);
|
||||
g_free (application->priv->package);
|
||||
|
||||
G_OBJECT_CLASS (pk_application_parent_class)->finalize (object);
|
||||
|
@ -198,6 +198,21 @@
|
||||
</packing>
|
||||
</child>
|
||||
|
||||
<child>
|
||||
<widget class="GtkProgressBar" id="progressbar_status">
|
||||
<property name="visible">True</property>
|
||||
<property name="orientation">GTK_PROGRESS_LEFT_TO_RIGHT</property>
|
||||
<property name="fraction">0.5</property>
|
||||
<property name="pulse_step">0.10000000149</property>
|
||||
<property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
|
||||
</widget>
|
||||
<packing>
|
||||
<property name="padding">0</property>
|
||||
<property name="expand">False</property>
|
||||
<property name="fill">False</property>
|
||||
</packing>
|
||||
</child>
|
||||
|
||||
<child>
|
||||
<widget class="GtkScrolledWindow" id="scrolledwindow_packages">
|
||||
<property name="visible">True</property>
|
||||
|
@ -52,6 +52,8 @@ struct PkTaskClientPrivate
|
||||
gboolean is_sync;
|
||||
guint job;
|
||||
GMainLoop *loop;
|
||||
PkTaskStatus last_status;
|
||||
gboolean is_finished;
|
||||
};
|
||||
|
||||
typedef enum {
|
||||
@ -96,6 +98,27 @@ pk_task_client_wait_if_sync (PkTaskClient *tclient)
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
/**
|
||||
* pk_task_client_reset:
|
||||
**/
|
||||
gboolean
|
||||
pk_task_client_reset (PkTaskClient *tclient)
|
||||
{
|
||||
g_return_val_if_fail (tclient != NULL, FALSE);
|
||||
g_return_val_if_fail (PK_IS_TASK_CLIENT (tclient), FALSE);
|
||||
|
||||
if (tclient->priv->is_finished != TRUE) {
|
||||
pk_warning ("not exit status, cannot reset");
|
||||
return FALSE;
|
||||
}
|
||||
tclient->priv->assigned = FALSE;
|
||||
tclient->priv->is_sync = FALSE;
|
||||
tclient->priv->job = 0;
|
||||
tclient->priv->last_status = PK_TASK_STATUS_UNKNOWN;
|
||||
tclient->priv->is_finished = FALSE;
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
/**
|
||||
* pk_task_client_get_updates:
|
||||
**/
|
||||
@ -436,6 +459,7 @@ pk_task_client_finished_cb (DBusGProxy *proxy,
|
||||
if (job == tclient->priv->job) {
|
||||
exit = pk_task_exit_from_text (exit_text);
|
||||
pk_debug ("emit finished %i", exit);
|
||||
tclient->priv->is_finished = TRUE;
|
||||
g_signal_emit (tclient , signals [PK_TASK_CLIENT_FINISHED], 0, exit);
|
||||
|
||||
/* if we are async, then cancel */
|
||||
@ -483,6 +507,7 @@ pk_task_client_job_status_changed_cb (DBusGProxy *proxy,
|
||||
if (job == tclient->priv->job) {
|
||||
pk_debug ("emit job-status-changed %i", status);
|
||||
g_signal_emit (tclient , signals [PK_TASK_CLIENT_JOB_STATUS_CHANGED], 0, status);
|
||||
tclient->priv->last_status = status;
|
||||
}
|
||||
}
|
||||
|
||||
@ -553,6 +578,8 @@ pk_task_client_init (PkTaskClient *tclient)
|
||||
tclient->priv->assigned = FALSE;
|
||||
tclient->priv->is_sync = FALSE;
|
||||
tclient->priv->job = 0;
|
||||
tclient->priv->last_status = PK_TASK_STATUS_UNKNOWN;
|
||||
tclient->priv->is_finished = FALSE;
|
||||
|
||||
/* check dbus connections, exit if not valid */
|
||||
tclient->priv->connection = dbus_g_bus_get (DBUS_BUS_SYSTEM, &error);
|
||||
|
@ -65,6 +65,7 @@ gboolean pk_task_client_remove_package_with_deps(PkTaskClient *tclient,
|
||||
gboolean pk_task_client_install_package (PkTaskClient *tclient,
|
||||
const gchar *package);
|
||||
gboolean pk_task_client_cancel_job_try (PkTaskClient *tclient);
|
||||
gboolean pk_task_client_reset (PkTaskClient *tclient);
|
||||
|
||||
/* not sure where this belongs... */
|
||||
gboolean pk_task_client_get_job_status (PkTaskClient *tclient,
|
||||
|
@ -162,6 +162,7 @@ pk_task_finished (PkTask *task, PkTaskExit exit)
|
||||
* has been sent to the client. I love async... */
|
||||
pk_debug ("adding finished %p to idle loop", task);
|
||||
task->exit = exit;
|
||||
pk_task_change_job_status (task, PK_TASK_STATUS_EXIT);
|
||||
g_idle_add (pk_task_finished_idle, task);
|
||||
return TRUE;
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user