G_MODULE_EXPORT void on_device_treeview_row_activate (GtkMenuItem *menuitem, gpointer user_data) { GUPnPServiceProxy *proxy; GUPnPServiceIntrospection *introspection; /* See if a service is selected */ proxy = get_selected_service (); if (proxy != NULL) { gboolean subscribed; subscribed = gupnp_service_proxy_get_subscribed (proxy); gupnp_service_proxy_set_subscribed (proxy, !subscribed); } else { GUPnPServiceActionInfo *action_info; /* See if an action is selected */ action_info = get_selected_action (&proxy, &introspection); if (action_info != NULL) { run_action_dialog (action_info, proxy, introspection); g_object_unref (introspection); } } if (proxy != NULL) g_object_unref (proxy); }
G_MODULE_EXPORT void on_action_invocation (GtkButton *button, gpointer user_data) { GUPnPServiceProxy *proxy; GUPnPServiceIntrospection *introspection; GUPnPServiceActionInfo *action_info; GList *in_names = NULL, *in_values = NULL; action_info = get_selected_action (&proxy, &introspection); if (action_info == NULL) return; retrieve_in_action_arguments (introspection, action_info, &in_names, &in_values); gupnp_service_proxy_begin_action_list (proxy, action_info->name, in_names, in_values, on_action_complete, NULL); g_list_free (in_names); g_list_free_full (in_values, g_value_free); g_object_unref (proxy); g_object_unref (introspection); }
static void on_row_activated (GtkTreeView *view, GtkTreePath *path, GtkTreeViewColumn *col, gpointer user_data) { SeahorseGenerateSelect *self = SEAHORSE_GENERATE_SELECT (user_data); GtkAction *action; GtkWindow *parent; action = get_selected_action (self); if (action != NULL) { parent = gtk_window_get_transient_for (GTK_WINDOW (self)); if (parent != NULL) g_object_ref (parent); g_object_ref (action); gtk_widget_destroy (GTK_WIDGET (self)); seahorse_action_activate_with_window (action, NULL, parent); g_clear_object (&parent); g_object_unref (action); } }
static void on_response (GtkDialog *dialog, gint response, gpointer user_data) { SeahorseGenerateSelect *self = SEAHORSE_GENERATE_SELECT (user_data); GtkAction *action = NULL; GtkWindow *parent = NULL; if (response == GTK_RESPONSE_OK) action = get_selected_action (self); if (action != NULL) { g_object_ref (action); parent = gtk_window_get_transient_for (GTK_WINDOW (self)); if (parent != NULL) g_object_ref (parent); } gtk_widget_destroy (GTK_WIDGET (self)); if (action != NULL) { seahorse_action_activate_with_window (action, NULL, parent); g_object_unref (action); g_clear_object (&parent); } }
static void setup_device_popup (GtkWidget *widget) { GUPnPServiceProxy *proxy; /* See if a service is selected */ proxy = get_selected_service (); if (proxy != NULL) { g_object_set (subscribe_menuitem, "visible", TRUE, "active", gupnp_service_proxy_get_subscribed (proxy), NULL); g_object_set (action_menuitem, "visible", FALSE, NULL); } else { GUPnPServiceActionInfo *action; g_object_set (subscribe_menuitem, "visible", FALSE, NULL); /* See if an action is selected */ action = get_selected_action (NULL, NULL); g_object_set (action_menuitem, "visible", action != NULL, NULL); } /* Separator should be visible only if either service or action row is * selected */ g_object_set (separator, "visible", (proxy != NULL), NULL); if (proxy) g_object_unref (proxy); }
static void on_action_complete (GUPnPServiceProxy *proxy, GUPnPServiceProxyAction *action, gpointer user_data) { GUPnPServiceIntrospection *introspection; GUPnPServiceActionInfo *action_info; GHashTable *out_args; GError *error = NULL; action_info = get_selected_action (NULL, &introspection); if (action_info == NULL) return; out_args = retrieve_out_action_arguments (introspection, action_info); gupnp_service_proxy_end_action_hash (proxy, action, &error, out_args); if (error) { GtkWidget *error_dialog; error_dialog = gtk_message_dialog_new ( GTK_WINDOW (dialog), GTK_DIALOG_MODAL, GTK_MESSAGE_ERROR, GTK_BUTTONS_CLOSE, _("Action failed.\n\nError %d: %s"), error->code, error->message); gtk_dialog_run (GTK_DIALOG (error_dialog)); gtk_widget_destroy (error_dialog); g_error_free (error); } else { display_action_out_arguments (out_args); } g_hash_table_destroy (out_args); g_object_unref (introspection); }
static void display_action_out_arguments (GHashTable *out_args) { GUPnPServiceIntrospection *introspection; GUPnPServiceActionInfo *action_info; GList *arg_node; action_info = get_selected_action (NULL, &introspection); if (action_info == NULL) return; arg_node = gtk_container_get_children (GTK_CONTAINER (out_args_grid)); for (; arg_node; arg_node = arg_node->next) { GtkWidget *arg_widget; gchar *name; GValue *value; arg_widget = GTK_WIDGET (arg_node->data); name = get_action_arg_widget_info (arg_widget, introspection, action_info, &value); if (name == NULL) continue; value = g_hash_table_lookup (out_args, name); update_out_action_argument_widget (arg_widget, introspection, action_info, value); } g_object_unref (introspection); }